summaryrefslogtreecommitdiffstats
path: root/keduca/keducabuilder/kcontroladdedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'keduca/keducabuilder/kcontroladdedit.cpp')
-rw-r--r--keduca/keducabuilder/kcontroladdedit.cpp303
1 files changed, 303 insertions, 0 deletions
diff --git a/keduca/keducabuilder/kcontroladdedit.cpp b/keduca/keducabuilder/kcontroladdedit.cpp
new file mode 100644
index 00000000..76715e27
--- /dev/null
+++ b/keduca/keducabuilder/kcontroladdedit.cpp
@@ -0,0 +1,303 @@
+/***************************************************************************
+ kcontroladdedit.cpp - description
+ -------------------
+ begin : Sun May 27 2001
+ copyright : (C) 2001 by Javier Campos
+ email : javi@asyris.org
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "kcontroladdedit.h"
+#include "kcontroladdedit.moc"
+
+// KDE includes
+#include <klocale.h>
+#include <kconfig.h>
+#include <kurlrequester.h>
+#include <kcombobox.h>
+#include <knuminput.h>
+#include <klistview.h>
+//#include <.h>
+
+// Qt includes
+#include <qlabel.h>
+#include <qtextedit.h>
+
+KControlAddEdit::KControlAddEdit(QWidget *parent, const char *name, bool modal, WFlags f)
+ : KControlAddEditBase(parent, name, modal, f),
+ _currentAnswerItem(0)
+{
+ configRead();
+}
+
+KControlAddEdit::~KControlAddEdit()
+{
+}
+
+/** Init _keducaFile pointer and EditMode */
+void KControlAddEdit::init(FileRead *keducaFile, bool edit)
+{
+ setCurrentAnswerItem(0);
+ _keducaFile = keducaFile;
+ _editMode = edit;
+
+ _listAnswers->setSorting(-1);
+
+ if( _editMode )
+ {
+ setCaption(i18n("Modify Question"));
+ fillPage();
+ }else{
+ setCaption(i18n("Add Questions"));
+ slotQuestionTypeChanged( 0 );
+ }
+
+ // settings for Question page
+ setHelpEnabled ( _pageQuestion, false );
+ setNextEnabled( _pageQuestion, false );
+
+ // settings for Answer page
+ setHelpEnabled ( _pageAnswer, false );
+ setFinishEnabled( _pageAnswer, true );
+}
+
+/** Fill page of current record */
+void KControlAddEdit::fillPage()
+{
+ _questionText->setText( _keducaFile->getQuestion( FileRead::QF_TEXT ) );
+ if( !_keducaFile->getQuestion( FileRead::QF_PICTURE ).isEmpty() )
+ {
+ _questionPreview->setPixmap(_keducaFile->getQuestion(FileRead::QF_PICTURE));
+ _answerPreview->setPixmap(_keducaFile->getQuestion(FileRead::QF_PICTURE));
+ _questionPicture->setURL( _keducaFile->getQuestion( FileRead::QF_PICTURE ) );
+ }
+ _questionType->setCurrentItem( _keducaFile->getQuestionInt( FileRead::QF_TYPE )-1 );
+ slotQuestionTypeChanged( _questionType->currentItem() );
+ _questionPoint->setValue( _keducaFile->getQuestionInt( FileRead::QF_POINTS ) );
+ _questionTip->setText( _keducaFile->getQuestion( FileRead::QF_TIP ) );
+ _questionExplain->setText( _keducaFile->getQuestion( FileRead::QF_EXPLAIN ) );
+ _questionTime->setValue( _keducaFile->getQuestionInt( FileRead::QF_TIME ) );
+
+ _listAnswers->clear();
+ _keducaFile->recordAnswerFirst();
+ while( !_keducaFile->recordAnswerEOF() )
+ {
+ QListViewItem *newItem = new QListViewItem(_listAnswers);
+ newItem->setText(0,_keducaFile->getAnswer( FileRead::AF_TEXT ));
+ newItem->setText(1,_keducaFile->getAnswerValue()?i18n("True"):i18n("False"));
+ newItem->setText(2,QString::number(_keducaFile->getAnswerPoints()));
+
+ _keducaFile->recordAnswerNext();
+ };
+}
+
+void KControlAddEdit::setCurrentAnswerItem(QListViewItem *item)
+{
+ _currentAnswerItem = item;
+ if (item)
+ _buttonInsert->setText(i18n("&Apply"));
+ else
+ _buttonInsert->setText(i18n("&Add"));
+}
+
+/** Button insert */
+void KControlAddEdit::slotAddAnswer()
+{
+ if( !_answerText->text().isEmpty() )
+ {
+ // add new listview item
+ QListViewItem *newItem = _currentAnswerItem
+ ? _currentAnswerItem
+ : new QListViewItem(_listAnswers,_listAnswers->lastItem());
+ newItem->setText(0,_answerText->text());
+ newItem->setText(1,_answerValue->currentItem() == 1 ?i18n("True"):i18n("False"));
+ newItem->setText(2,QString::number(_answerPoints->value()));
+
+ // reset values
+ newItem->setSelected(false);
+ resetAnswerValues();
+ }
+}
+
+void KControlAddEdit::resetAnswerValues()
+{
+ _answerText->setText("");
+ _answerValue->setCurrentItem( 0 );
+ _answerPoints->setValue(0);
+ _answerText->setFocus();
+ setCurrentAnswerItem(0);
+ _buttonUp->setEnabled(false);
+ _buttonDown->setEnabled(false);
+ _buttonRemove->setEnabled(false);
+ _buttonInsert->setEnabled(false);
+}
+
+/** Remove answer */
+void KControlAddEdit::slotRemoveAnswer()
+{
+ delete _listAnswers->currentItem();
+ resetAnswerValues();
+}
+
+/** Button Up */
+void KControlAddEdit::slotMoveUpAnswer()
+{
+ QListViewItem *item = _listAnswers->currentItem();
+
+ if (item && item->itemAbove())
+ item->itemAbove()->moveItem(item);
+
+ _buttonUp->setEnabled(item->itemAbove()!=0);
+ _buttonDown->setEnabled(item->itemBelow()!=0);
+}
+
+/** Button Down */
+void KControlAddEdit::slotMoveDownAnswer()
+{
+ QListViewItem *item = _listAnswers->currentItem();
+
+ if (item)
+ item->moveItem(item->itemBelow());
+
+ _buttonUp->setEnabled(item->itemAbove()!=0);
+ _buttonDown->setEnabled(item->itemBelow()!=0);
+}
+
+void KControlAddEdit::slotAnswerSelected(QListViewItem *item)
+{
+ if (!item)
+ return;
+
+ setCurrentAnswerItem(item);
+
+ // set the answer fields to the value of the selected answer
+ _answerText->setText(item->text(0));
+ _answerValue->setCurrentItem(item->text(1) == i18n("True")?1:0);
+ _answerPoints->setValue(item->text(2).toInt());
+
+ // enable/disable the buttons as appropriate
+ _buttonRemove->setEnabled(true);
+ _buttonInsert->setEnabled(true);
+ _buttonDown->setEnabled(item->itemBelow()!=0);
+ _buttonUp->setEnabled(item->itemAbove()!=0);
+}
+
+/** Accept changes */
+void KControlAddEdit::accept()
+{
+ if( !_editMode )
+ _keducaFile->insertQuestion();
+
+ addQuestion();
+ configWrite();
+ done( QDialog::Accepted );
+}
+
+/** Add question with form data */
+void KControlAddEdit::addQuestion()
+{
+ _keducaFile->setQuestion( FileRead::QF_TEXT, _questionText->text() );
+ _keducaFile->setQuestion( FileRead::QF_TYPE, _questionType->currentItem()+1 );
+ _keducaFile->setQuestion( FileRead::QF_PICTURE, _questionPicture->url() );
+ _keducaFile->setQuestion( FileRead::QF_POINTS, _questionPoint->value() );
+ _keducaFile->setQuestion( FileRead::QF_TIME, _questionTime->value() );
+ _keducaFile->setQuestion( FileRead::QF_TIP, _questionTip->text() );
+ _keducaFile->setQuestion( FileRead::QF_EXPLAIN, _questionExplain->text() );
+
+ _keducaFile->clearAnswers();
+ QListViewItem *item = _listAnswers->firstChild();
+ while (item) {
+ _keducaFile->setAnswer(
+ item->text(0), // The Answer text
+ item->text(1)==i18n("True"), // the validity of the answer
+ item->text(2).toInt()); // the points
+ item = item->nextSibling();
+ }
+}
+/** Read config settings */
+void KControlAddEdit::configRead()
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("AddModify Window");
+ QSize defaultSize(500,400);
+ resize( config->readSizeEntry("Geometry", &defaultSize ) );
+}
+
+/** Write config settings */
+void KControlAddEdit::configWrite()
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("AddModify Window");
+ config->writeEntry("Geometry", size() );
+ config->sync();
+}
+
+/** Question data changed */
+void KControlAddEdit::slotDataChanged()
+{
+ if( _pageQuestion == currentPage() )
+ {
+ nextButton()->setEnabled( !_questionText->text().isEmpty() );
+ }
+ if( _pageAnswer == currentPage() )
+ {
+ _buttonInsert->setEnabled( !_answerText->text().isEmpty() );
+ }
+}
+
+
+/** Preview image */
+void KControlAddEdit::slotPreviewImage( const QString &text)
+{
+ if( text.isEmpty() ) { _questionPreview->setText(""); _answerPreview->setText(""); return; }
+
+ _questionPreview->setPixmap( QPixmap( text ) );
+ _answerPreview->setPixmap( QPixmap( text ) );
+}
+
+/** show current Page */
+void KControlAddEdit::showPage(QWidget *page)
+{
+ QWizard::showPage(page);
+ slotDataChanged();
+
+ if ( page == _pageQuestion ) {
+ _questionText->setFocus();
+ } else if ( page == _pageAnswer ) {
+ _answerText->setFocus();
+ }
+}
+
+/** Change question type */
+void KControlAddEdit::slotQuestionTypeChanged( int index )
+{
+ switch( index+1 )
+ {
+ case 1:
+ _questionPoint->setEnabled( false );
+ _answerPoints->setEnabled( false );
+ _questionPoint->setValue(0);
+ _answerPoints->setValue(0);
+ break;
+ case 2:
+ _questionPoint->setEnabled( true );
+ _answerPoints->setEnabled( false );
+ _answerPoints->setValue(0);
+ break;
+ case 3:
+ _questionPoint->setEnabled( false );
+ _answerPoints->setEnabled( true );
+ _questionPoint->setValue(0);
+ break;
+ default:
+ break;
+ }
+}