You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/kvoctrain/kvoctrain/common-dialogs/thresholdoptions.cpp

451 lines
15 KiB

/***************************************************************************
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 <tqlistbox.h>
#include <tqpushbutton.h>
#include <tqlabel.h>
#include <tqcombobox.h>
#include <kcombobox.h>
#include <tdelocale.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, TQWidget* parent, const char* name, WFlags fl)
: ThresholdOptionsBase(parent, name, fl), m_lessons(lessons)
{
connect(lessoncomp, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetLessonComp(int)));
connect(lessonlist, TQT_SIGNAL(selectionChanged()), TQT_SIGNAL(widgetModified()));
connect(b_all_less, TQT_SIGNAL(clicked()), TQT_SLOT(slotSelectAll()));
connect(b_none_less, TQT_SIGNAL(clicked()), TQT_SLOT(slotSelectNone()));
connect(typecomp, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetTypeComp(int)));
connect(typelist, TQT_SIGNAL(activated(int)), TQT_SLOT(slotComboActivated(int)));
connect(gradecomp, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetGradeComp(int)));
connect(gradelist, TQT_SIGNAL(activated(int)), TQT_SLOT(slotComboActivated(int)));
connect(querycomp, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetQueryComp(int)));
connect(querylist, TQT_SIGNAL(activated(int)), TQT_SLOT(slotComboActivated(int)));
connect(badcomp, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetBadComp(int)));
connect(badlist, TQT_SIGNAL(activated(int)), TQT_SLOT(slotComboActivated(int)));
connect(datecomp, TQT_SIGNAL(activated(int)), TQT_SLOT(slotSetDateComp(int)));
connect(datelist, TQT_SIGNAL(activated(int)), TQT_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(TQString::number(i));
querylist->insertItem(TQString::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++;
}
}
TQString 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"