summaryrefslogtreecommitdiffstats
path: root/kvoctrain/kvoctrain/common-dialogs/thresholdoptions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kvoctrain/kvoctrain/common-dialogs/thresholdoptions.cpp')
-rw-r--r--kvoctrain/kvoctrain/common-dialogs/thresholdoptions.cpp450
1 files changed, 450 insertions, 0 deletions
diff --git a/kvoctrain/kvoctrain/common-dialogs/thresholdoptions.cpp b/kvoctrain/kvoctrain/common-dialogs/thresholdoptions.cpp
new file mode 100644
index 00000000..e611eb36
--- /dev/null
+++ b/kvoctrain/kvoctrain/common-dialogs/thresholdoptions.cpp
@@ -0,0 +1,450 @@
+/***************************************************************************
+
+ threshold options for kvoctrain
+
+ -----------------------------------------------------------------------
+
+ begin : Tue Apr 5 2005
+
+ copyright :(C) 2005 Peter Hedlund
+
+ email : peter.hedlund@kdemail.net
+
+ -----------------------------------------------------------------------
+
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 <qlistbox.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qcombobox.h>
+
+#include <kcombobox.h>
+#include <klocale.h>
+
+#include "thresholdoptions.h"
+#include "QueryManager.h"
+#include "prefs.h"
+
+
+static Prefs::EnumCompType::type bad_complist[] =
+ {Prefs::EnumCompType::DontCare, Prefs::EnumCompType::MoreThan, Prefs::EnumCompType::MoreEqThan,
+ Prefs::EnumCompType::EqualTo, Prefs::EnumCompType::NotEqual, Prefs::EnumCompType::LessEqThan,
+ Prefs::EnumCompType::LessThan, Prefs::EnumCompType::type(-1)};
+
+static Prefs::EnumCompType::type query_complist[] =
+ {Prefs::EnumCompType::DontCare, Prefs::EnumCompType::MoreThan, Prefs::EnumCompType::MoreEqThan,
+ Prefs::EnumCompType::EqualTo, Prefs::EnumCompType::NotEqual, Prefs::EnumCompType::LessEqThan,
+ Prefs::EnumCompType::LessThan, Prefs::EnumCompType::type(-1)};
+
+static Prefs::EnumCompType::type grade_complist[] =
+ {Prefs::EnumCompType::DontCare, Prefs::EnumCompType::WorseThan, Prefs::EnumCompType::WorseEqThan,
+ Prefs::EnumCompType::EqualTo, Prefs::EnumCompType::NotEqual, Prefs::EnumCompType::BetterEqThan,
+ Prefs::EnumCompType::BetterThan, Prefs::EnumCompType::type(-1)};
+
+static Prefs::EnumCompType::type type_complist[] =
+ {Prefs::EnumCompType::DontCare, Prefs::EnumCompType::EqualTo, Prefs::EnumCompType::NotEqual,
+ Prefs::EnumCompType::type(-1)};
+
+static Prefs::EnumCompType::type date_complist[] =
+ {Prefs::EnumCompType::DontCare, Prefs::EnumCompType::Before, Prefs::EnumCompType::Within,
+ Prefs::EnumCompType::NotQueried, Prefs::EnumCompType::type(-1)};
+
+static Prefs::EnumCompType::type less_complist[] =
+ {Prefs::EnumCompType::DontCare, Prefs::EnumCompType::OneOf, Prefs::EnumCompType::NotOneOf,
+ Prefs::EnumCompType::Current, Prefs::EnumCompType::NotAssigned, Prefs::EnumCompType::type(-1)};
+
+struct ThreshListRef
+{
+ const char *text;
+ long int num;
+};
+
+static ThreshListRef Threshdate_itemlist [] =
+ {
+ {I18N_NOOP("30 Min"), 30*60},
+ {I18N_NOOP("1 Hour"), 1 * 60*60},
+ {I18N_NOOP("2 Hours"), 2 * 60*60},
+ {I18N_NOOP("4 Hours"), 4 * 60*60},
+ {I18N_NOOP("8 Hours"), 8 * 60*60},
+ {I18N_NOOP("12 Hours"), 12 * 60*60},
+ {I18N_NOOP("18 Hours"), 18 * 60*60},
+
+ {I18N_NOOP("1 Day"), 1 * 60*60*24},
+ {I18N_NOOP("2 Days"), 2 * 60*60*24},
+ {I18N_NOOP("3 Days"), 3 * 60*60*24},
+ {I18N_NOOP("4 Days"), 4 * 60*60*24},
+ {I18N_NOOP("5 Days"), 5 * 60*60*24},
+ {I18N_NOOP("6 Days"), 6 * 60*60*24},
+
+ {I18N_NOOP("1 Week"), 1 * 60*60*24*7},
+ {I18N_NOOP("2 Weeks"), 2 * 60*60*24*7},
+ {I18N_NOOP("3 Weeks"), 3 * 60*60*24*7},
+ {I18N_NOOP("4 Weeks"), 4 * 60*60*24*7},
+
+ {I18N_NOOP("1 Month"), 1 * 60*60*24*30},
+ {I18N_NOOP("2 Months"), 2 * 60*60*24*30},
+ {I18N_NOOP("3 Months"), 3 * 60*60*24*30},
+ {I18N_NOOP("4 Months"), 4 * 60*60*24*30},
+ {I18N_NOOP("5 Months"), 5 * 60*60*24*30},
+ {I18N_NOOP("6 Months"), 6 * 60*60*24*30},
+ {0, 0}
+ };
+
+
+ThresholdOptions::ThresholdOptions(KComboBox * lessons, QueryManager * m, QWidget* parent, const char* name, WFlags fl)
+: ThresholdOptionsBase(parent, name, fl), m_lessons(lessons)
+{
+ connect(lessoncomp, SIGNAL(activated(int)), SLOT(slotSetLessonComp(int)));
+ connect(lessonlist, SIGNAL(selectionChanged()), SIGNAL(widgetModified()));
+ connect(b_all_less, SIGNAL(clicked()), SLOT(slotSelectAll()));
+ connect(b_none_less, SIGNAL(clicked()), SLOT(slotSelectNone()));
+ connect(typecomp, SIGNAL(activated(int)), SLOT(slotSetTypeComp(int)));
+ connect(typelist, SIGNAL(activated(int)), SLOT(slotComboActivated(int)));
+ connect(gradecomp, SIGNAL(activated(int)), SLOT(slotSetGradeComp(int)));
+ connect(gradelist, SIGNAL(activated(int)), SLOT(slotComboActivated(int)));
+ connect(querycomp, SIGNAL(activated(int)), SLOT(slotSetQueryComp(int)));
+ connect(querylist, SIGNAL(activated(int)), SLOT(slotComboActivated(int)));
+ connect(badcomp, SIGNAL(activated(int)), SLOT(slotSetBadComp(int)));
+ connect(badlist, SIGNAL(activated(int)), SLOT(slotComboActivated(int)));
+ connect(datecomp, SIGNAL(activated(int)), SLOT(slotSetDateComp(int)));
+ connect(datelist, SIGNAL(activated(int)), SLOT(slotComboActivated(int)));
+
+ m_queryManager = m;
+ fillWidgets();
+ updateWidgets();
+}
+
+void ThresholdOptions::fillWidgets()
+{
+ Prefs::EnumCompType::type *ct;
+ ThreshListRef *ref;
+
+ lessonlist->clear();
+ for (int i = 1; i < (int) m_lessons->count(); i++ ) // first in lessons is <no lesson> !
+ lessonlist->insertItem (m_lessons->text(i));
+
+ // limits and threshholds (the five comboboxes on the right)
+ gradelist->clear();
+ for (int i = 1; i <= KV_MAX_GRADE; i++)
+ gradelist->insertItem (m_queryManager->gradeStr(i));
+
+ typelist->clear();
+ all_maintypes = QueryManager::getRelation(true); // collect main types
+ for (int i = 0; i < (int) all_maintypes.size(); i++)
+ typelist->insertItem (all_maintypes[i].longStr());
+
+ badlist->clear();
+ querylist->clear();
+ for (int i = 0; i <= 15; i++)
+ {
+ badlist->insertItem(QString::number(i));
+ querylist->insertItem(QString::number(i));
+ }
+
+ ref = Threshdate_itemlist;
+ datelist->clear();
+ while (ref->text != 0 )
+ {
+ datelist->insertItem (i18n(ref->text));
+ ref++;
+ }
+
+ //compare-functions (the lesson combobox and the five comboboxes on the left)
+ ct = less_complist;
+ lessoncomp->clear();
+ while (*ct != Prefs::EnumCompType::type(-1) )
+ {
+ lessoncomp->insertItem (m_queryManager->compStr(*ct));
+ ct++;
+ }
+
+ ct = type_complist;
+ typecomp->clear();
+ while (*ct != Prefs::EnumCompType::type(-1) )
+ {
+ typecomp->insertItem (m_queryManager->compStr(*ct));
+ ct++;
+ }
+
+ ct = query_complist;
+ querycomp->clear();
+ while (*ct != Prefs::EnumCompType::type(-1) )
+ {
+ querycomp->insertItem (m_queryManager->compStr(*ct));
+ ct++;
+ }
+
+ ct = bad_complist;
+ badcomp->clear();
+ while (*ct != Prefs::EnumCompType::type(-1) ) {
+ badcomp->insertItem (m_queryManager->compStr(*ct));
+ ct++;
+ }
+
+ ct = grade_complist;
+ gradecomp->clear();
+ while (*ct != Prefs::EnumCompType::type(-1) ) {
+ gradecomp->insertItem (m_queryManager->compStr(*ct));
+ ct++;
+ }
+
+ ct = date_complist;
+ datecomp->clear();
+ while (*ct != Prefs::EnumCompType::type(-1) ) {
+ datecomp->insertItem (m_queryManager->compStr(*ct));
+ ct++;
+ }
+}
+
+void ThresholdOptions::updateWidgets()
+{
+ int index = 0;
+ Prefs::EnumCompType::type *ct;
+ ThreshListRef *ref;
+
+ vector<int> sel = m_queryManager->lessonItems();
+ if (sel.size() != 0)
+ {
+ for (int i = 0; i < (int) sel.size(); i++)
+ {
+ if (sel[i] > 0 && sel[i]-1 < (int) lessonlist->count()) // 0 = not assigned lesson
+ {
+ lessonlist->setCurrentItem(sel[i]-1); // important with qt1.x!
+ lessonlist->setSelected(sel[i]-1, true);
+ }
+ }
+ }
+
+ gradelist->setCurrentItem(Prefs::gradeItem());
+
+ for (int i = 0; i < typelist->count(); i++)
+ {
+ if (Prefs::typeItem() == all_maintypes[i].shortStr())
+ index = i;
+ }
+ typelist->setCurrentItem(index);
+
+ badlist->setCurrentItem(Prefs::badItem());
+ querylist->setCurrentItem(Prefs::queryItem());
+
+ ref = Threshdate_itemlist;
+ while (ref->text != 0 ) {
+ if (Prefs::dateItem() == ref->num)
+ index = ref - Threshdate_itemlist;
+ ref++;
+ }
+ datelist->setCurrentItem(index);
+
+ //compare-functions (the lesson combobox and the five comboboxes on the left)
+ ct = less_complist;
+ while (*ct != Prefs::compType(Prefs::EnumType::Lesson))
+ ct++;
+ lessoncomp->setCurrentItem (ct - less_complist);
+ slotSetLessonComp(ct - less_complist);
+
+ ct = type_complist;
+ while (*ct != Prefs::compType(Prefs::EnumType::WordType))
+ ct++;
+ typecomp->setCurrentItem(ct - type_complist);
+ typelist->setEnabled(ct - type_complist != 0); // don`t care == 0
+
+ ct = query_complist;
+ while (*ct != Prefs::compType(Prefs::EnumType::Query))
+ ct++;
+ querycomp->setCurrentItem (ct - query_complist);
+ querylist->setEnabled(ct - query_complist != 0); // don`t care == 0
+
+ ct = bad_complist;
+ while (*ct != Prefs::compType(Prefs::EnumType::Bad))
+ ct++;
+ badcomp->setCurrentItem(ct - bad_complist);
+ badlist->setEnabled(ct - bad_complist != 0); // don`t care == 0
+
+ ct = grade_complist;
+ while (*ct != Prefs::compType(Prefs::EnumType::Grade))
+ ct++;
+ gradecomp->setCurrentItem (ct - grade_complist);
+ gradelist->setEnabled(ct - grade_complist != 0); // don`t care == 0
+
+ ct = date_complist;
+ while (*ct != Prefs::compType(Prefs::EnumType::Date))
+ ct++;
+ datecomp->setCurrentItem (ct - date_complist);
+ if (date_complist[ct - date_complist] == Prefs::EnumCompType::Before ||
+ date_complist[ct - date_complist] == Prefs::EnumCompType::Within)
+ datelist->setEnabled(true);
+ else
+ datelist->setEnabled(false);
+}
+
+void ThresholdOptions::slotSelectAll()
+{
+ lessonlist->selectAll(true);
+ emit widgetModified();
+}
+
+void ThresholdOptions::slotSelectNone()
+{
+ lessonlist->selectAll(false);
+ emit widgetModified();
+}
+
+
+void ThresholdOptions::slotComboActivated(int)
+{
+ emit widgetModified();
+}
+
+
+void ThresholdOptions::slotSetGradeComp(int i)
+{
+ gradelist->setEnabled(i != 0); // don`t care == 0
+ emit widgetModified();
+}
+
+void ThresholdOptions::slotSetBadComp(int i)
+{
+ badlist->setEnabled(i != 0); // don`t care == 0
+ emit widgetModified();
+}
+
+void ThresholdOptions::slotSetQueryComp(int i)
+{
+ querylist->setEnabled(i != 0); // don`t care == 0
+ emit widgetModified();
+}
+
+void ThresholdOptions::slotSetTypeComp(int i)
+{
+ typelist->setEnabled(i != 0); // don`t care == 0
+ emit widgetModified();
+}
+
+void ThresholdOptions::slotSetLessonItems()
+{
+ vector<int> sel;
+ int cnt = 0;
+
+ for (int i = 0; i < (int) lessonlist->count(); i++)
+ {
+ if (lessonlist->isSelected(i))
+ {
+ sel.push_back(i+1); // 0 = not assigned lesson
+ cnt++;
+ }
+ }
+
+ QString s;
+ s.setNum(cnt);
+ l_count->setText (s);
+
+ m_queryManager->setLessonItems(sel);
+}
+
+void ThresholdOptions::slotSetLessonComp(int i)
+{
+ if (less_complist[i] == Prefs::EnumCompType::OneOf || less_complist[i] == Prefs::EnumCompType::NotOneOf)
+ {
+ lessonlist->setEnabled(true);
+ b_all_less->setEnabled(true);
+ b_none_less->setEnabled(true);
+ l_count->setEnabled(true);
+ l_lesson->setEnabled(true);
+ }
+ else
+ {
+ l_count->setEnabled(false);
+ lessonlist->setEnabled(false);
+ b_all_less->setEnabled(false);
+ b_none_less->setEnabled(false);
+ l_lesson->setEnabled(false);
+ }
+
+ if (i < 0)
+ return;
+
+ emit widgetModified();
+}
+
+void ThresholdOptions::slotSetDateComp(int i)
+{
+ if (date_complist[i] == Prefs::EnumCompType::Before || date_complist[i] == Prefs::EnumCompType::Within)
+ datelist->setEnabled(true);
+ else
+ datelist->setEnabled(false);
+ emit widgetModified();
+}
+
+void ThresholdOptions::slotBlockExpire(bool block, bool expire)
+{
+ bool enable = !(block | expire);
+
+ gradecomp->setEnabled(enable);
+ gradelist->setEnabled(enable && gradecomp->currentItem() != 0);
+ label_grade->setEnabled(enable);
+
+ datecomp->setEnabled(enable);
+ datelist->setEnabled(enable && datecomp->currentItem() != 0);
+ label_qdate->setEnabled(enable);
+
+ querycomp->setEnabled(enable);
+ querylist->setEnabled(enable && querycomp->currentItem() != 0);
+ label_qcount->setEnabled(enable);
+
+ badcomp->setEnabled(enable);
+ badlist->setEnabled(enable && badcomp->currentItem() != 0);
+ label_bcount->setEnabled(enable);
+}
+
+bool ThresholdOptions::isDefault()
+{
+ return less_complist[lessoncomp->currentItem()] == Prefs::EnumCompType::Current &&
+ type_complist[typecomp->currentItem()] == Prefs::EnumCompType::DontCare &&
+ grade_complist[gradecomp->currentItem()] == Prefs::EnumCompType::DontCare &&
+ date_complist[datecomp->currentItem()] == Prefs::EnumCompType::DontCare &&
+ query_complist[querycomp->currentItem()] == Prefs::EnumCompType::DontCare &&
+ bad_complist[badcomp->currentItem()] == Prefs::EnumCompType::DontCare;
+}
+
+void ThresholdOptions::updateSettings()
+{
+ Prefs::setCompType(Prefs::EnumType::Lesson, less_complist[lessoncomp->currentItem()]);
+ slotSetLessonItems();
+ Prefs::setCompType(Prefs::EnumType::WordType, type_complist[typecomp->currentItem()]);
+ Prefs::setTypeItem(all_maintypes[typelist->currentItem()].shortStr());
+ Prefs::setCompType(Prefs::EnumType::Grade, grade_complist[gradecomp->currentItem()]);
+ Prefs::setGradeItem(gradelist->currentItem() + 1);
+ Prefs::setCompType(Prefs::EnumType::Query, query_complist[querycomp->currentItem()]);
+ Prefs::setQueryItem(querylist->currentItem());
+ Prefs::setCompType(Prefs::EnumType::Bad, bad_complist[badcomp->currentItem()]);
+ Prefs::setBadItem(badlist->currentItem());
+ Prefs::setCompType(Prefs::EnumType::Date, date_complist[datecomp->currentItem()]);
+ Prefs::setDateItem(Threshdate_itemlist[datelist->currentItem()].num);
+}
+
+bool ThresholdOptions::hasChanged()
+{
+ return less_complist[lessoncomp->currentItem()] != Prefs::compType(Prefs::EnumType::Lesson) ||
+ type_complist[typecomp->currentItem()] != Prefs::compType(Prefs::EnumType::WordType) ||
+ grade_complist[gradecomp->currentItem()] != Prefs::compType(Prefs::EnumType::Grade) ||
+ query_complist[querycomp->currentItem()] != Prefs::compType(Prefs::EnumType::Query) ||
+ bad_complist[badcomp->currentItem()] != Prefs::compType(Prefs::EnumType::Bad) ||
+ date_complist[datecomp->currentItem()] != Prefs::compType(Prefs::EnumType::Date) ||
+ all_maintypes[typelist->currentItem()].shortStr() != Prefs::typeItem() ||
+ gradelist->currentItem() + 1 != Prefs::gradeItem() ||
+ querylist->currentItem() != Prefs::queryItem() ||
+ badlist->currentItem() != Prefs::badItem() ||
+ Threshdate_itemlist[datelist->currentItem()].num != Prefs::dateItem();
+}
+
+#include "thresholdoptions.moc"