ModifyConstraintActivitiesMaxSimultaneousInSelectedTimeSlotsForm::ModifyConstraintActivitiesMaxSimultaneousInSelectedTimeSlotsForm(QWidget* parent, ConstraintActivitiesMaxSimultaneousInSelectedTimeSlots* ctr): QDialog(parent) { setupUi(this); okPushButton->setDefault(true); allActivitiesListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedActivitiesListWidget->setSelectionMode(QAbstractItemView::SingleSelection); connect(okPushButton, SIGNAL(clicked()), this, SLOT(ok())); connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(selectedTimesTable, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(itemClicked(QTableWidgetItem*))); connect(setAllUnselectedPushButton, SIGNAL(clicked()), this, SLOT(setAllUnselected())); connect(setAllSelectedPushButton, SIGNAL(clicked()), this, SLOT(setAllSelected())); connect(allActivitiesListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addActivity())); connect(addAllActivitiesPushButton, SIGNAL(clicked()), this, SLOT(addAllActivities())); connect(selectedActivitiesListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeActivity())); connect(clearPushButton, SIGNAL(clicked()), this, SLOT(clear())); connect(teachersComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(studentsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(subjectsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(activityTagsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); this->_ctr=ctr; weightLineEdit->setText(CustomFETString::number(ctr->weightPercentage)); tabWidget->setCurrentIndex(0); maxSimultaneousSpinBox->setMinimum(0); maxSimultaneousSpinBox->setMaximum(MAX_ACTIVITIES); maxSimultaneousSpinBox->setValue(ctr->maxSimultaneous); selectedTimesTable->setRowCount(gt.rules.nHoursPerDay); selectedTimesTable->setColumnCount(gt.rules.nDaysPerWeek); for(int j=0; j<gt.rules.nDaysPerWeek; j++){ QTableWidgetItem* item=new QTableWidgetItem(gt.rules.daysOfTheWeek[j]); selectedTimesTable->setHorizontalHeaderItem(j, item); } for(int i=0; i<gt.rules.nHoursPerDay; i++){ QTableWidgetItem* item=new QTableWidgetItem(gt.rules.hoursOfTheDay[i]); selectedTimesTable->setVerticalHeaderItem(i, item); } //bool currentMatrix[MAX_HOURS_PER_DAY][MAX_DAYS_PER_WEEK]; Matrix2D<bool> currentMatrix; currentMatrix.resize(gt.rules.nHoursPerDay, gt.rules.nDaysPerWeek); for(int i=0; i<gt.rules.nHoursPerDay; i++) for(int j=0; j<gt.rules.nDaysPerWeek; j++) currentMatrix[i][j]=false; assert(ctr->selectedDays.count()==ctr->selectedHours.count()); for(int k=0; k<ctr->selectedDays.count(); k++){ if(ctr->selectedHours.at(k)==-1 || ctr->selectedDays.at(k)==-1) assert(0); int i=ctr->selectedHours.at(k); int j=ctr->selectedDays.at(k); if(i>=0 && i<gt.rules.nHoursPerDay && j>=0 && j<gt.rules.nDaysPerWeek) currentMatrix[i][j]=true; } for(int i=0; i<gt.rules.nHoursPerDay; i++) for(int j=0; j<gt.rules.nDaysPerWeek; j++){ QTableWidgetItem* item = new QTableWidgetItem(); item->setTextAlignment(Qt::AlignCenter); item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); if(SHOW_TOOLTIPS_FOR_CONSTRAINTS_WITH_TABLES) item->setToolTip(gt.rules.daysOfTheWeek[j]+QString("\n")+gt.rules.hoursOfTheDay[i]); selectedTimesTable->setItem(i, j, item); if(!currentMatrix[i][j]) item->setText(NO); else item->setText(YES); colorItem(item); } selectedTimesTable->resizeRowsToContents(); connect(selectedTimesTable->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(horizontalHeaderClicked(int))); connect(selectedTimesTable->verticalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(verticalHeaderClicked(int))); selectedTimesTable->setSelectionMode(QAbstractItemView::NoSelection); tableWidgetUpdateBug(selectedTimesTable); setStretchAvailabilityTableNicely(selectedTimesTable); //activities QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); QSize tmp2=studentsComboBox->minimumSizeHint(); Q_UNUSED(tmp2); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); QSize tmp4=activityTagsComboBox->minimumSizeHint(); Q_UNUSED(tmp4); selectedActivitiesList.clear(); selectedActivitiesListWidget->clear(); for(int i=0; i<ctr->activitiesIds.count(); i++){ int actId=ctr->activitiesIds.at(i); this->selectedActivitiesList.append(actId); Activity* act=NULL; for(int k=0; k<gt.rules.activitiesList.size(); k++){ act=gt.rules.activitiesList[k]; if(act->id==actId) break; } assert(act); this->selectedActivitiesListWidget->addItem(act->getDescription(gt.rules)); } teachersComboBox->addItem(""); for(int i=0; i<gt.rules.teachersList.size(); i++){ Teacher* tch=gt.rules.teachersList[i]; teachersComboBox->addItem(tch->name); } teachersComboBox->setCurrentIndex(0); subjectsComboBox->addItem(""); for(int i=0; i<gt.rules.subjectsList.size(); i++){ Subject* sb=gt.rules.subjectsList[i]; subjectsComboBox->addItem(sb->name); } subjectsComboBox->setCurrentIndex(0); activityTagsComboBox->addItem(""); for(int i=0; i<gt.rules.activityTagsList.size(); i++){ ActivityTag* st=gt.rules.activityTagsList[i]; activityTagsComboBox->addItem(st->name); } activityTagsComboBox->setCurrentIndex(0); studentsComboBox->addItem(""); for(int i=0; i<gt.rules.yearsList.size(); i++){ StudentsYear* sty=gt.rules.yearsList[i]; studentsComboBox->addItem(sty->name); for(int j=0; j<sty->groupsList.size(); j++){ StudentsGroup* stg=sty->groupsList[j]; studentsComboBox->addItem(stg->name); if(SHOW_SUBGROUPS_IN_COMBO_BOXES) for(int k=0; k<stg->subgroupsList.size(); k++){ StudentsSubgroup* sts=stg->subgroupsList[k]; studentsComboBox->addItem(sts->name); } } } studentsComboBox->setCurrentIndex(0); filterChanged(); }
ModifyConstraintActivitiesNotOverlappingForm::ModifyConstraintActivitiesNotOverlappingForm(QWidget* parent, ConstraintActivitiesNotOverlapping* ctr): QDialog(parent) { setupUi(this); okPushButton->setDefault(true); activitiesListWidget->setSelectionMode(QAbstractItemView::SingleSelection); notOverlappingActivitiesListWidget->setSelectionMode(QAbstractItemView::SingleSelection); connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(okPushButton, SIGNAL(clicked()), this, SLOT(ok())); connect(activitiesListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addActivity())); connect(addAllActivitiesPushButton, SIGNAL(clicked()), this, SLOT(addAllActivities())); connect(notOverlappingActivitiesListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeActivity())); connect(teachersComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(studentsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(subjectsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(activityTagsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(clearPushButton, SIGNAL(clicked()), this, SLOT(clear())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); QSize tmp2=studentsComboBox->minimumSizeHint(); Q_UNUSED(tmp2); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); QSize tmp4=activityTagsComboBox->minimumSizeHint(); Q_UNUSED(tmp4); this->_ctr=ctr; notOverlappingActivitiesList.clear(); notOverlappingActivitiesListWidget->clear(); for(int i=0; i<ctr->n_activities; i++){ int actId=ctr->activitiesId[i]; this->notOverlappingActivitiesList.append(actId); Activity* act=NULL; for(int k=0; k<gt.rules.activitiesList.size(); k++){ act=gt.rules.activitiesList[k]; if(act->id==actId) break; } assert(act); this->notOverlappingActivitiesListWidget->addItem(act->getDescription(gt.rules)); } weightLineEdit->setText(CustomFETString::number(ctr->weightPercentage)); //////////////// teachersComboBox->addItem(""); for(int i=0; i<gt.rules.teachersList.size(); i++){ Teacher* tch=gt.rules.teachersList[i]; teachersComboBox->addItem(tch->name); } teachersComboBox->setCurrentIndex(0); subjectsComboBox->addItem(""); for(int i=0; i<gt.rules.subjectsList.size(); i++){ Subject* sb=gt.rules.subjectsList[i]; subjectsComboBox->addItem(sb->name); } subjectsComboBox->setCurrentIndex(0); activityTagsComboBox->addItem(""); for(int i=0; i<gt.rules.activityTagsList.size(); i++){ ActivityTag* st=gt.rules.activityTagsList[i]; activityTagsComboBox->addItem(st->name); } activityTagsComboBox->setCurrentIndex(0); studentsComboBox->addItem(""); for(int i=0; i<gt.rules.yearsList.size(); i++){ StudentsYear* sty=gt.rules.yearsList[i]; studentsComboBox->addItem(sty->name); for(int j=0; j<sty->groupsList.size(); j++){ StudentsGroup* stg=sty->groupsList[j]; studentsComboBox->addItem(stg->name); for(int k=0; k<stg->subgroupsList.size(); k++){ StudentsSubgroup* sts=stg->subgroupsList[k]; studentsComboBox->addItem(sts->name); } } } studentsComboBox->setCurrentIndex(0); filterChanged(); }
// WMain constructor WMain::WMain(QWidget *parent) : QMainWindow(parent) { // set window properties resize(400, 400); setWindowTitle(tr("dicto")); setWindowIcon(QIcon(ICON)); centerWidgetOnScreen(this); setAttribute(Qt::WA_DeleteOnClose); // set random seed srand(time(0)); //create widgets mainWidget = new QWidget(this); setCentralWidget(mainWidget); searchBar = new QLineEdit; listWidget = new QListWidget; questionLabel = new QLabel(tr("Test!"), this); answerLabel = new QLabel(tr("Answer"), this); answerEdit = new QLineEdit; submitWordButton = new QPushButton(tr("OK"), this); cancelTestButton = new QPushButton(tr("End test"), this); examStatusLabel = new QLabel; tableWidget = new QTableWidget; submitExamButton = new QPushButton(tr("Submit exam"), this); cancelExamButton = new QPushButton(tr("Cancel exam"), this); progressBar = new QProgressBar; createMenus(); createTrayIcon(); // initialize widgets //QFont font; //font.setPointSize(20); //font.setBold(true); //questionLabel->setFont(font); //questionLabel->setTextFormat(Qt::RichText); questionLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); questionLabel->setWordWrap(true); QFont questionFont; questionFont.setBold(true); questionLabel->setFont(questionFont); answerLabel->setAlignment(Qt::AlignHCenter | Qt::AlignTop); answerLabel->setWordWrap(true); tableWidget->setColumnCount(2); tableWidget->horizontalHeader()->hide(); tableWidget->verticalHeader()->hide(); tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); tableWidget->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch); tableWidget->horizontalHeader()->setStretchLastSection(true); progressBar->setMinimum(0); // initialize members cDocument = new CDocument ; printer = new QPrinter; mode = normalMode; parent = 0; maxRecentFiles = QSettings("dicto.ini", QSettings::IniFormat).value("general/max_recent_files").value<int>(); // add layout QVBoxLayout *mainLayout=new QVBoxLayout(mainWidget); QVBoxLayout *normalLayout=new QVBoxLayout(); normalLayout->addWidget(searchBar); normalLayout->addWidget(listWidget); mainLayout->addLayout(normalLayout); QVBoxLayout *testLayout=new QVBoxLayout(); testLayout->addWidget(questionLabel); testLayout->addWidget(answerLabel); testLayout->addWidget(answerEdit); testLayout->addWidget(submitWordButton); testLayout->addWidget(cancelTestButton); mainLayout->addLayout(testLayout); QVBoxLayout *examLayout=new QVBoxLayout(); examLayout->addWidget(examStatusLabel); examLayout->addWidget(tableWidget); examLayout->addWidget(submitExamButton); examLayout->addWidget(cancelExamButton); mainLayout->addLayout(examLayout); mainWidget->setLayout(mainLayout); statusBar()->addPermanentWidget(progressBar); //update widgets updateStatusbar(); setMode(mode); // create shortcuts QShortcut *submitShortcut=new QShortcut(Qt::Key_Return, this); connect(submitShortcut, SIGNAL(activated()), this, SLOT(check())); QShortcut *hintShortcut=new QShortcut(QKeySequence("Ctrl+H"), this); connect(hintShortcut, SIGNAL(activated()), this, SLOT(hint())); QShortcut *findShortcut=new QShortcut(QKeySequence("Ctrl+f"), this); connect(findShortcut, SIGNAL(activated()), this, SLOT(search())); // connect signals and slots connect(searchBar, SIGNAL(textChanged(QString)), this, SLOT(updateList())); connect(listWidget, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(editentry())); connect(submitWordButton, SIGNAL(clicked()), this, SLOT(check())); connect(cancelTestButton, SIGNAL(clicked()), this, SLOT(canceltest())); connect(cancelExamButton, SIGNAL(clicked()), this, SLOT(cancelexam())); connect(submitExamButton, SIGNAL(clicked()), this, SLOT(checkexam())); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayactivated(QSystemTrayIcon::ActivationReason))); statusBar()->showMessage(tr("Dicto version %1").arg(VERSION)); }
ModifyConstraintTeacherNotAvailableTimesForm::ModifyConstraintTeacherNotAvailableTimesForm(QWidget* parent, ConstraintTeacherNotAvailableTimes* ctr): QDialog(parent) { setupUi(this); okPushButton->setDefault(true); connect(okPushButton, SIGNAL(clicked()), this, SLOT(ok())); connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(notAllowedTimesTable, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(itemClicked(QTableWidgetItem*))); connect(setAllAvailablePushButton, SIGNAL(clicked()), this, SLOT(setAllAvailable())); connect(setAllNotAvailablePushButton, SIGNAL(clicked()), this, SLOT(setAllNotAvailable())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); this->_ctr=ctr; weightLineEdit->setText(CustomFETString::number(ctr->weightPercentage)); updateTeachersComboBox(); notAllowedTimesTable->setRowCount(gt.rules.nHoursPerDay); notAllowedTimesTable->setColumnCount(gt.rules.nDaysPerWeek); for(int j=0; j<gt.rules.nDaysPerWeek; j++){ QTableWidgetItem* item=new QTableWidgetItem(gt.rules.daysOfTheWeek[j]); notAllowedTimesTable->setHorizontalHeaderItem(j, item); } for(int i=0; i<gt.rules.nHoursPerDay; i++){ QTableWidgetItem* item=new QTableWidgetItem(gt.rules.hoursOfTheDay[i]); notAllowedTimesTable->setVerticalHeaderItem(i, item); } //bool currentMatrix[MAX_HOURS_PER_DAY][MAX_DAYS_PER_WEEK]; Matrix2D<bool> currentMatrix; currentMatrix.resize(gt.rules.nHoursPerDay, gt.rules.nDaysPerWeek); for(int i=0; i<gt.rules.nHoursPerDay; i++) for(int j=0; j<gt.rules.nDaysPerWeek; j++) currentMatrix[i][j]=false; assert(ctr->days.count()==ctr->hours.count()); for(int k=0; k<ctr->days.count(); k++){ if(ctr->hours.at(k)==-1 || ctr->days.at(k)==-1) assert(0); int i=ctr->hours.at(k); int j=ctr->days.at(k); if(i>=0 && i<gt.rules.nHoursPerDay && j>=0 && j<gt.rules.nDaysPerWeek) currentMatrix[i][j]=true; } for(int i=0; i<gt.rules.nHoursPerDay; i++) for(int j=0; j<gt.rules.nDaysPerWeek; j++){ QTableWidgetItem* item= new QTableWidgetItem(); item->setTextAlignment(Qt::AlignCenter); item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); if(SHOW_TOOLTIPS_FOR_CONSTRAINTS_WITH_TABLES) item->setToolTip(gt.rules.daysOfTheWeek[j]+QString("\n")+gt.rules.hoursOfTheDay[i]); notAllowedTimesTable->setItem(i, j, item); if(!currentMatrix[i][j]) item->setText(NO); else item->setText(YES); colorItem(item); } notAllowedTimesTable->resizeRowsToContents(); connect(notAllowedTimesTable->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(horizontalHeaderClicked(int))); connect(notAllowedTimesTable->verticalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(verticalHeaderClicked(int))); notAllowedTimesTable->setSelectionMode(QAbstractItemView::NoSelection); tableWidgetUpdateBug(notAllowedTimesTable); setStretchAvailabilityTableNicely(notAllowedTimesTable); }
ModifyGroupActivitiesInInitialOrderItemForm::ModifyGroupActivitiesInInitialOrderItemForm(QWidget* parent, GroupActivitiesInInitialOrderItem* item): QDialog(parent) { setupUi(this); okPushButton->setDefault(true); activitiesListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedActivitiesListWidget->setSelectionMode(QAbstractItemView::SingleSelection); connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(okPushButton, SIGNAL(clicked()), this, SLOT(ok())); connect(activitiesListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addActivity())); connect(addAllActivitiesPushButton, SIGNAL(clicked()), this, SLOT(addAllActivities())); connect(selectedActivitiesListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeActivity())); connect(teachersComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(studentsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(subjectsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(activityTagsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(clearPushButton, SIGNAL(clicked()), this, SLOT(clear())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); QSize tmp2=studentsComboBox->minimumSizeHint(); Q_UNUSED(tmp2); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); QSize tmp4=activityTagsComboBox->minimumSizeHint(); Q_UNUSED(tmp4); this->_item=item; selectedActivitiesList.clear(); selectedActivitiesListWidget->clear(); for(int i=0; i<item->ids.count(); i++){ int actId=item->ids[i]; this->selectedActivitiesList.append(actId); Activity* act=NULL; for(int k=0; k<gt.rules.activitiesList.size(); k++){ act=gt.rules.activitiesList[k]; if(act->id==actId) break; } assert(act); this->selectedActivitiesListWidget->addItem(act->getDescription(gt.rules)); } //////////////// teachersComboBox->addItem(""); for(int i=0; i<gt.rules.teachersList.size(); i++){ Teacher* tch=gt.rules.teachersList[i]; teachersComboBox->addItem(tch->name); } teachersComboBox->setCurrentIndex(0); subjectsComboBox->addItem(""); for(int i=0; i<gt.rules.subjectsList.size(); i++){ Subject* sb=gt.rules.subjectsList[i]; subjectsComboBox->addItem(sb->name); } subjectsComboBox->setCurrentIndex(0); activityTagsComboBox->addItem(""); for(int i=0; i<gt.rules.activityTagsList.size(); i++){ ActivityTag* st=gt.rules.activityTagsList[i]; activityTagsComboBox->addItem(st->name); } activityTagsComboBox->setCurrentIndex(0); studentsComboBox->addItem(""); for(int i=0; i<gt.rules.yearsList.size(); i++){ StudentsYear* sty=gt.rules.yearsList[i]; studentsComboBox->addItem(sty->name); for(int j=0; j<sty->groupsList.size(); j++){ StudentsGroup* stg=sty->groupsList[j]; studentsComboBox->addItem(stg->name); if(SHOW_SUBGROUPS_IN_COMBO_BOXES) for(int k=0; k<stg->subgroupsList.size(); k++){ StudentsSubgroup* sts=stg->subgroupsList[k]; studentsComboBox->addItem(sts->name); } } } studentsComboBox->setCurrentIndex(0); filterChanged(); }
SubjectsStatisticsForm::SubjectsStatisticsForm(QWidget* parent): QDialog(parent) { setupUi(this); closeButton->setDefault(true); connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); tableWidget->clear(); tableWidget->setColumnCount(3); tableWidget->setRowCount(gt.rules.subjectsList.size()); QStringList columns; columns<<tr("Subject"); columns<<tr("No. of activities"); columns<<tr("Duration"); tableWidget->setHorizontalHeaderLabels(columns); QHash<QString, QSet<Activity*> > activitiesForSubject; foreach(Activity* act, gt.rules.activitiesList) if(act->active){ QSet<Activity*> acts=activitiesForSubject.value(act->subjectName, QSet<Activity*>()); acts.insert(act); activitiesForSubject.insert(act->subjectName, acts); } for(int i=0; i<gt.rules.subjectsList.size(); i++){ Subject* s=gt.rules.subjectsList[i]; QTableWidgetItem* newItem=new QTableWidgetItem(s->name); newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); tableWidget->setItem(i, 0, newItem); int nSubActivities=0; int nHours=0; QSet<Activity*> acts=activitiesForSubject.value(s->name, QSet<Activity*>()); foreach(Activity* act, acts){ if(act->active){ nSubActivities++; nHours+=act->duration; } else{ assert(0); } } newItem=new QTableWidgetItem(CustomFETString::number(nSubActivities)); newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); tableWidget->setItem(i, 1, newItem); newItem=new QTableWidgetItem(CustomFETString::number(nHours)); newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); tableWidget->setItem(i, 2, newItem); } tableWidget->resizeColumnsToContents(); tableWidget->resizeRowsToContents(); }
void TimetableGenerateForm::impossibleToSolve() { if(!simulation_running){ return; } simulation_running=false; myMutex.lock(); gen.abortOptimization=true; myMutex.unlock(); myMutex.lock(); Solution& c=gen.c; //needed to find the conflicts strings QString tmp; c.fitness(gt.rules, &tmp); TimetableExport::getStudentsTimetable(c); TimetableExport::getTeachersTimetable(c); TimetableExport::getRoomsTimetable(c); //update the string representing the conflicts conflictsStringTitle=TimetableGenerateForm::tr("Conflicts", "Title of dialog"); conflictsString=""; conflictsString+=TimetableGenerateForm::tr("Total conflicts:"); conflictsString+=" "; conflictsString+=CustomFETString::number(c.conflictsTotal); conflictsString+="\n"; conflictsString+=TimetableGenerateForm::tr("Conflicts listing (in decreasing order):"); conflictsString+="\n"; foreach(QString t, c.conflictsDescriptionList) conflictsString+=t+"\n"; TimetableExport::writeSimulationResults(this); QString s=TimetableGenerateForm::tr("Simulation impossible! Maybe you can consider lowering the constraints."); s+=" "; QString kk; kk=FILE_SEP; if(INPUT_FILENAME_XML=="") kk.append("unnamed"); else{ kk.append(INPUT_FILENAME_XML.right(INPUT_FILENAME_XML.length()-INPUT_FILENAME_XML.lastIndexOf(FILE_SEP)-1)); if(kk.right(4)==".fet") kk=kk.left(kk.length()-4); } kk.append("-single"); s+=TimetableGenerateForm::tr("The partial results were saved in the directory %1") .arg(QDir::toNativeSeparators(OUTPUT_DIR+FILE_SEP+"timetables"+kk)); s+="\n\n"; s+=TimetableGenerateForm::tr("Additional information relating impossible to schedule activities:"); s+="\n\n"; s+=TimetableGenerateForm::tr("Please check the constraints related to the " "activity below, which might be impossible to schedule:"); s+="\n\n"; for(int i=0; i<gen.nDifficultActivities; i++){ int ai=gen.difficultActivities[i]; s+=TimetableGenerateForm::tr("No: %1").arg(i+1); s+=", "; s+=TimetableGenerateForm::tr("Id: %1 (%2)", "%1 is id of activity, %2 is detailed description of activity") .arg(gt.rules.internalActivitiesList[ai].id) .arg(getActivityDetailedDescription(gt.rules, gt.rules.internalActivitiesList[ai].id)); s+="\n"; } myMutex.unlock(); //show the message in a dialog QDialog dialog(this); dialog.setWindowTitle(TimetableGenerateForm::tr("Generation impossible", "The title of a dialog, meaning that the generation of the timetable is impossible.")); QVBoxLayout* vl=new QVBoxLayout(&dialog); QPlainTextEdit* te=new QPlainTextEdit(); te->setPlainText(s); te->setReadOnly(true); QPushButton* pb=new QPushButton(TimetableGenerateForm::tr("OK")); QHBoxLayout* hl=new QHBoxLayout(0); hl->addStretch(1); hl->addWidget(pb); vl->addWidget(te); vl->addLayout(hl); connect(pb, SIGNAL(clicked()), &dialog, SLOT(close())); dialog.resize(700,500); centerWidgetOnScreen(&dialog); restoreFETDialogGeometry(&dialog, settingsName); setParentAndOtherThings(&dialog, this); dialog.exec(); saveFETDialogGeometry(&dialog, settingsName); startPushButton->setEnabled(true); stopPushButton->setDisabled(true); stopHighestPushButton->setDisabled(true); closePushButton->setEnabled(true); writeResultsPushButton->setDisabled(true); writeHighestStagePushButton->setDisabled(true); seeImpossiblePushButton->setDisabled(true); }
SecondMinDaysDialog::SecondMinDaysDialog(QWidget* p, int minD, double w) :QDialog(p) { weight=-1; QString l=tr ("You selected min days between activities %1 (above 1) and weight %2 (under 100.0). " "Would you like to add also a second constraint to ensure that almost certainly the " "distance between activities is at least %3 (%1-1) days? If yes, please select weight (recommended " "95.0%-100.0%) and click Yes. If no, please click No (only one constraint will be added)").arg(CustomFETString::number(minD)).arg(w).arg(minD-1); l+="\n\n"; l+=tr("(Yes means to add an additional constraint min %1 days between activities, weight 0.0%-100.0%. " "If you say Yes, you will have 2 constraints min days added for current activities. " "Adding the second constraint might lead to impossible timetables if the condition is " "too tight, but you can remove the second constraint at any time).").arg(minD-1); l+="\n\n"; l+=tr("Note: 95% is usually enough for min days constraints referring to same activities. " "The weights are cumulated if referring to the same activities. If you have 2 constraints with say 95%" " (say min n days and min n-1 days), " "the min n days constraint is skipped with probability 5%, then min n-1 days constraint is skipped with " "probability 0.25%=5%*5%, so you'll get in 99.75% cases the min n-1 days constraint respected."); l+="\n\n"; l+=tr("Recommended answer is Yes, 95% (or higher)."); setWindowTitle(tr("Add a second constraint or not?")); QVBoxLayout* vl=new QVBoxLayout(this); QPlainTextEdit* la=new QPlainTextEdit(); la->setPlainText(l); la->setReadOnly(true); vl->addWidget(la); QPushButton* yes=new QPushButton(tr("Yes")); yes->setDefault(true); QPushButton* no=new QPushButton(tr("No")); QLabel* percLabel=new QLabel(this); percLabel->setText("Percentage"); percText=new QLineEdit(this); percText->setText("95.0"); //QHBoxLayout* hl2=new QHBoxLayout(vl); QHBoxLayout* hl2=new QHBoxLayout(); vl->addLayout(hl2); ////// QLabel* minDaysLabel=new QLabel(this); minDaysLabel->setText("Min days"); QSpinBox* minDaysSpinBox=new QSpinBox(this); minDaysSpinBox->setMinimum(minD-1); minDaysSpinBox->setMaximum(minD-1); minDaysSpinBox->setValue(minD-1); minDaysSpinBox->setEnabled(false); ////// ////// hl2->addStretch(1); hl2->addWidget(minDaysLabel); hl2->addWidget(minDaysSpinBox); ////// hl2->addStretch(1); hl2->addWidget(percLabel); hl2->addWidget(percText); //QHBoxLayout* hl=new QHBoxLayout(vl); QHBoxLayout* hl=new QHBoxLayout(); vl->addLayout(hl); hl->addStretch(1); hl->addWidget(yes); hl->addWidget(no); connect(yes, SIGNAL(clicked()), this, SLOT(yesPressed())); connect(no, SIGNAL(clicked()), this, SLOT(reject())); int ww=this->sizeHint().width(); if(ww>1000) ww=1000; if(ww<590) ww=590; int hh=this->sizeHint().height(); if(hh>650) hh=650; if(hh<380) hh=380; this->resize(ww, hh); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); }
AddConstraintActivityPreferredTimeSlotsForm::AddConstraintActivityPreferredTimeSlotsForm(QWidget* parent): QDialog(parent) { setupUi(this); addConstraintPushButton->setDefault(true); connect(preferredTimesTable, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(itemClicked(QTableWidgetItem*))); connect(addConstraintPushButton, SIGNAL(clicked()), this, SLOT(addConstraint())); connect(closePushButton, SIGNAL(clicked()), this, SLOT(close())); connect(teachersComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(studentsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(subjectsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(activityTagsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(setAllAllowedPushButton, SIGNAL(clicked()), this, SLOT(setAllSlotsAllowed())); connect(setAllNotAllowedPushButton, SIGNAL(clicked()), this, SLOT(setAllSlotsNotAllowed())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); QSize tmp2=studentsComboBox->minimumSizeHint(); Q_UNUSED(tmp2); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); QSize tmp4=activityTagsComboBox->minimumSizeHint(); Q_UNUSED(tmp4); QSize tmp5=activitiesComboBox->minimumSizeHint(); Q_UNUSED(tmp5); activitiesComboBox->setMaximumWidth(maxRecommendedWidth(this)); teachersComboBox->addItem(""); for(int i=0; i<gt.rules.teachersList.size(); i++){ Teacher* tch=gt.rules.teachersList[i]; teachersComboBox->addItem(tch->name); } teachersComboBox->setCurrentIndex(0); subjectsComboBox->addItem(""); for(int i=0; i<gt.rules.subjectsList.size(); i++){ Subject* sb=gt.rules.subjectsList[i]; subjectsComboBox->addItem(sb->name); } subjectsComboBox->setCurrentIndex(0); activityTagsComboBox->addItem(""); for(int i=0; i<gt.rules.activityTagsList.size(); i++){ ActivityTag* st=gt.rules.activityTagsList[i]; activityTagsComboBox->addItem(st->name); } activityTagsComboBox->setCurrentIndex(0); studentsComboBox->addItem(""); for(int i=0; i<gt.rules.yearsList.size(); i++){ StudentsYear* sty=gt.rules.yearsList[i]; studentsComboBox->addItem(sty->name); for(int j=0; j<sty->groupsList.size(); j++){ StudentsGroup* stg=sty->groupsList[j]; studentsComboBox->addItem(stg->name); if(SHOW_SUBGROUPS_IN_COMBO_BOXES) for(int k=0; k<stg->subgroupsList.size(); k++){ StudentsSubgroup* sts=stg->subgroupsList[k]; studentsComboBox->addItem(sts->name); } } } studentsComboBox->setCurrentIndex(0); updateActivitiesComboBox(); preferredTimesTable->setRowCount(gt.rules.nHoursPerDay); preferredTimesTable->setColumnCount(gt.rules.nDaysPerWeek); for(int j=0; j<gt.rules.nDaysPerWeek; j++){ QTableWidgetItem* item=new QTableWidgetItem(gt.rules.daysOfTheWeek[j]); preferredTimesTable->setHorizontalHeaderItem(j, item); } for(int i=0; i<gt.rules.nHoursPerDay; i++){ QTableWidgetItem* item=new QTableWidgetItem(gt.rules.hoursOfTheDay[i]); preferredTimesTable->setVerticalHeaderItem(i, item); } for(int i=0; i<gt.rules.nHoursPerDay; i++) for(int j=0; j<gt.rules.nDaysPerWeek; j++){ QTableWidgetItem* item=new QTableWidgetItem(YES); item->setTextAlignment(Qt::AlignCenter); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); colorItem(item); if(SHOW_TOOLTIPS_FOR_CONSTRAINTS_WITH_TABLES) item->setToolTip(gt.rules.daysOfTheWeek[j]+QString("\n")+gt.rules.hoursOfTheDay[i]); preferredTimesTable->setItem(i, j, item); } preferredTimesTable->resizeRowsToContents(); connect(preferredTimesTable->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(horizontalHeaderClicked(int))); connect(preferredTimesTable->verticalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(verticalHeaderClicked(int))); preferredTimesTable->setSelectionMode(QAbstractItemView::NoSelection); tableWidgetUpdateBug(preferredTimesTable); setStretchAvailabilityTableNicely(preferredTimesTable); }
void TimetableGenerateForm::stopHighest() { if(!simulation_running){ return; } simulation_running=false; myMutex.lock(); gen.abortOptimization=true; myMutex.unlock(); myMutex.lock(); Solution& c=highestStageSolution; //needed to find the conflicts strings QString tmp; c.fitness(gt.rules, &tmp); TimetableExport::getStudentsTimetable(c); TimetableExport::getTeachersTimetable(c); TimetableExport::getRoomsTimetable(c); //update the string representing the conflicts conflictsStringTitle=TimetableGenerateForm::tr("Conflicts", "Title of dialog"); conflictsString=""; conflictsString+=TimetableGenerateForm::tr("Total conflicts:"); conflictsString+=" "; conflictsString+=CustomFETString::number(c.conflictsTotal); conflictsString+="\n"; conflictsString+=TimetableGenerateForm::tr("Conflicts listing (in decreasing order):"); conflictsString+="\n"; foreach(QString t, c.conflictsDescriptionList) conflictsString+=t+"\n"; TimetableExport::writeHighestStageResults(this); QString s=TimetableGenerateForm::tr("Simulation interrupted! FET could not find a timetable." " Maybe you can consider lowering the constraints."); s+=" "; QString kk; kk=FILE_SEP; if(INPUT_FILENAME_XML=="") kk.append("unnamed"); else{ kk.append(INPUT_FILENAME_XML.right(INPUT_FILENAME_XML.length()-INPUT_FILENAME_XML.lastIndexOf(FILE_SEP)-1)); if(kk.right(4)==".fet") kk=kk.left(kk.length()-4); } kk.append("-highest"); s+=TimetableGenerateForm::tr("The partial highest-stage results were saved in the directory %1") .arg(QDir::toNativeSeparators(OUTPUT_DIR+FILE_SEP+"timetables"+kk)); s+="\n\n"; s+=TimetableGenerateForm::tr("Additional information relating impossible to schedule activities:"); s+="\n\n"; s+=tr("FET managed to schedule correctly the first %1 most difficult activities." " You can see initial order of placing the activities in the generate dialog. The activity which might cause problems" " might be the next activity in the initial order of evaluation. This activity is listed below:") .arg(maxActivitiesPlaced); s+="\n\n"; s+=tr("Please check constraints related to following possibly problematic activity (or teacher(s), or students set(s)):"); s+="\n"; s+="-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "; s+="\n"; if(maxActivitiesPlaced>=0 && maxActivitiesPlaced<gt.rules.nInternalActivities && initialOrderOfActivitiesIndices[maxActivitiesPlaced]>=0 && initialOrderOfActivitiesIndices[maxActivitiesPlaced]<gt.rules.nInternalActivities){ int ai=initialOrderOfActivitiesIndices[maxActivitiesPlaced]; s+=TimetableGenerateForm::tr("Id: %1 (%2)", "%1 is id of activity, %2 is detailed description of activity") .arg(gt.rules.internalActivitiesList[ai].id) .arg(getActivityDetailedDescription(gt.rules, gt.rules.internalActivitiesList[ai].id)); } else s+=tr("Difficult activity cannot be computed - please report possible bug"); s+="\n"; myMutex.unlock(); //show the message in a dialog QDialog dialog(this); dialog.setWindowTitle(TimetableGenerateForm::tr("Generation stopped (highest stage)", "The title of a dialog, meaning that the generation of the timetable was stopped " "and highest stage timetable written.")); QVBoxLayout* vl=new QVBoxLayout(&dialog); QPlainTextEdit* te=new QPlainTextEdit(); te->setPlainText(s); te->setReadOnly(true); QPushButton* pb=new QPushButton(TimetableGenerateForm::tr("OK")); QHBoxLayout* hl=new QHBoxLayout(0); hl->addStretch(1); hl->addWidget(pb); vl->addWidget(te); vl->addLayout(hl); connect(pb, SIGNAL(clicked()), &dialog, SLOT(close())); dialog.resize(700,500); centerWidgetOnScreen(&dialog); restoreFETDialogGeometry(&dialog, settingsName); setParentAndOtherThings(&dialog, this); dialog.exec(); saveFETDialogGeometry(&dialog, settingsName); startPushButton->setEnabled(true); stopPushButton->setDisabled(true); stopHighestPushButton->setDisabled(true); closePushButton->setEnabled(true); writeResultsPushButton->setDisabled(true); writeHighestStagePushButton->setDisabled(true); seeImpossiblePushButton->setDisabled(true); }
ModifySubactivityForm::ModifySubactivityForm(QWidget* parent, int id, int activityGroupId): QDialog(parent) { setupUi(this); allTeachersListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedTeachersListWidget->setSelectionMode(QAbstractItemView::SingleSelection); allStudentsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedStudentsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); allActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(okPushButton, SIGNAL(clicked()), this, SLOT(ok())); connect(clearTeacherPushButton, SIGNAL(clicked()), this, SLOT(clearTeachers())); connect(clearStudentsPushButton, SIGNAL(clicked()), this, SLOT(clearStudents())); connect(allTeachersListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addTeacher())); connect(selectedTeachersListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeTeacher())); connect(allStudentsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addStudents())); connect(selectedStudentsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeStudents())); connect(clearActivityTagPushButton, SIGNAL(clicked()), this, SLOT(clearActivityTags())); connect(allActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addActivityTag())); connect(selectedActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeActivityTag())); connect(showYearsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showYearsChanged())); connect(showGroupsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showGroupsChanged())); connect(showSubgroupsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showSubgroupsChanged())); connect(helpPushButton, SIGNAL(clicked()), this, SLOT(help())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); int splitIndex=0; int nSplit=0; bool found=false; this->_id=id; this->_activityGroupId=activityGroupId; for(int i=0; i<gt.rules.activitiesList.size(); i++){ Activity* act=gt.rules.activitiesList[i]; if(act->activityGroupId==this->_activityGroupId && act->id==this->_id){ this->_activity=act; splitIndex++; nSplit++; found=true; } else if(this->_activityGroupId!=0 && act->activityGroupId!=0 && act->activityGroupId==this->_activityGroupId){ if(!found) splitIndex++; nSplit++; } } crtTextLabel->setText(tr("Current subactivity has split index %1 out of %2").arg(splitIndex).arg(nSplit)+ "<br />"+tr("The current data applies only to this subactivity")); this->_teachers=this->_activity->teachersNames; this->_subject = this->_activity->subjectName; this->_activityTags = this->_activity->activityTagsNames; this->_students=this->_activity->studentsNames; durationSpinBox->setMaximum(gt.rules.nHoursPerDay); durationSpinBox->setValue(this->_activity->duration); activeCheckBox->setChecked(this->_activity->active); nStudentsSpinBox->setMinimum(-1); nStudentsSpinBox->setMaximum(MAX_ROOM_CAPACITY); nStudentsSpinBox->setValue(-1); if(this->_activity->computeNTotalStudents==false) nStudentsSpinBox->setValue(this->_activity->nTotalStudents); updateStudentsListWidget(); updateTeachersListWidget(); updateSubjectsComboBox(); updateActivityTagsListWidget(); selectedStudentsListWidget->clear(); for(QStringList::Iterator it=this->_students.begin(); it!=this->_students.end(); it++) selectedStudentsListWidget->addItem(*it); okPushButton->setDefault(true); okPushButton->setFocus(); }
AddConstraintMinGapsBetweenActivitiesForm::AddConstraintMinGapsBetweenActivitiesForm(QWidget* parent): QDialog(parent) { setupUi(this); addConstraintPushButton->setDefault(true); activitiesListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedActivitiesListWidget->setSelectionMode(QAbstractItemView::SingleSelection); connect(closePushButton, SIGNAL(clicked()), this, SLOT(close())); connect(addConstraintPushButton, SIGNAL(clicked()), this, SLOT(addConstraint())); connect(activitiesListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addActivity())); connect(addAllActivitiesPushButton, SIGNAL(clicked()), this, SLOT(addAllActivities())); connect(selectedActivitiesListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeActivity())); connect(teachersComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(studentsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(subjectsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(activityTagsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(clearPushButton, SIGNAL(clicked()), this, SLOT(clear())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); QSize tmp2=studentsComboBox->minimumSizeHint(); Q_UNUSED(tmp2); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); QSize tmp4=activityTagsComboBox->minimumSizeHint(); Q_UNUSED(tmp4); //TODO REMOVE updateActivitiesListBox(); minGapsSpinBox->setMinimum(1); minGapsSpinBox->setValue(1); minGapsSpinBox->setMaximum(gt.rules.nHoursPerDay); teachersComboBox->addItem(""); for(int i=0; i<gt.rules.teachersList.size(); i++) { Teacher* tch=gt.rules.teachersList[i]; teachersComboBox->addItem(tch->name); } teachersComboBox->setCurrentIndex(0); subjectsComboBox->addItem(""); for(int i=0; i<gt.rules.subjectsList.size(); i++) { Subject* sb=gt.rules.subjectsList[i]; subjectsComboBox->addItem(sb->name); } subjectsComboBox->setCurrentIndex(0); activityTagsComboBox->addItem(""); for(int i=0; i<gt.rules.activityTagsList.size(); i++) { ActivityTag* st=gt.rules.activityTagsList[i]; activityTagsComboBox->addItem(st->name); } activityTagsComboBox->setCurrentIndex(0); studentsComboBox->addItem(""); for(int i=0; i<gt.rules.yearsList.size(); i++) { StudentsYear* sty=gt.rules.yearsList[i]; studentsComboBox->addItem(sty->name); for(int j=0; j<sty->groupsList.size(); j++) { StudentsGroup* stg=sty->groupsList[j]; studentsComboBox->addItem(stg->name); if(SHOW_SUBGROUPS_IN_COMBO_BOXES) for(int k=0; k<stg->subgroupsList.size(); k++) { StudentsSubgroup* sts=stg->subgroupsList[k]; studentsComboBox->addItem(sts->name); } } } studentsComboBox->setCurrentIndex(0); selectedActivitiesListWidget->clear(); this->selectedActivitiesList.clear(); filterChanged(); }
ModifyActivityForm::ModifyActivityForm(QWidget* parent, int id, int activityGroupId): QDialog(parent) { setupUi(this); durList.clear(); durList.append(duration1SpinBox); durList.append(duration2SpinBox); durList.append(duration3SpinBox); durList.append(duration4SpinBox); durList.append(duration5SpinBox); durList.append(duration6SpinBox); durList.append(duration7SpinBox); durList.append(duration8SpinBox); durList.append(duration9SpinBox); durList.append(duration10SpinBox); durList.append(duration11SpinBox); durList.append(duration12SpinBox); durList.append(duration13SpinBox); durList.append(duration14SpinBox); durList.append(duration15SpinBox); durList.append(duration16SpinBox); durList.append(duration17SpinBox); durList.append(duration18SpinBox); durList.append(duration19SpinBox); durList.append(duration20SpinBox); durList.append(duration21SpinBox); durList.append(duration22SpinBox); durList.append(duration23SpinBox); durList.append(duration24SpinBox); durList.append(duration25SpinBox); durList.append(duration26SpinBox); durList.append(duration27SpinBox); durList.append(duration28SpinBox); durList.append(duration29SpinBox); durList.append(duration30SpinBox); durList.append(duration31SpinBox); durList.append(duration32SpinBox); durList.append(duration33SpinBox); durList.append(duration34SpinBox); durList.append(duration35SpinBox); for(int i=0; i<MAX_SPLIT_OF_AN_ACTIVITY; i++) dur(i)->setMaximum(gt.rules.nHoursPerDay); activList.clear(); activList.append(active1CheckBox); activList.append(active2CheckBox); activList.append(active3CheckBox); activList.append(active4CheckBox); activList.append(active5CheckBox); activList.append(active6CheckBox); activList.append(active7CheckBox); activList.append(active8CheckBox); activList.append(active9CheckBox); activList.append(active10CheckBox); activList.append(active11CheckBox); activList.append(active12CheckBox); activList.append(active13CheckBox); activList.append(active14CheckBox); activList.append(active15CheckBox); activList.append(active16CheckBox); activList.append(active17CheckBox); activList.append(active18CheckBox); activList.append(active19CheckBox); activList.append(active20CheckBox); activList.append(active21CheckBox); activList.append(active22CheckBox); activList.append(active23CheckBox); activList.append(active24CheckBox); activList.append(active25CheckBox); activList.append(active26CheckBox); activList.append(active27CheckBox); activList.append(active28CheckBox); activList.append(active29CheckBox); activList.append(active30CheckBox); activList.append(active31CheckBox); activList.append(active32CheckBox); activList.append(active33CheckBox); activList.append(active34CheckBox); activList.append(active35CheckBox); allTeachersListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedTeachersListWidget->setSelectionMode(QAbstractItemView::SingleSelection); allStudentsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedStudentsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); allActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(okPushButton, SIGNAL(clicked()), this, SLOT(ok())); connect(clearTeacherPushButton, SIGNAL(clicked()), this, SLOT(clearTeachers())); connect(clearStudentsPushButton, SIGNAL(clicked()), this, SLOT(clearStudents())); connect(allTeachersListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addTeacher())); connect(selectedTeachersListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeTeacher())); connect(allStudentsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addStudents())); connect(selectedStudentsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeStudents())); connect(clearActivityTagPushButton, SIGNAL(clicked()), this, SLOT(clearActivityTags())); connect(allActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addActivityTag())); connect(selectedActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeActivityTag())); connect(showYearsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showYearsChanged())); connect(showGroupsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showGroupsChanged())); connect(showSubgroupsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showSubgroupsChanged())); connect(helpPushButton, SIGNAL(clicked()), this, SLOT(help())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); this->_id=id; this->_activityGroupId=activityGroupId; for(int i=0; i<gt.rules.activitiesList.size(); i++){ Activity* act=gt.rules.activitiesList[i]; if(act->activityGroupId==this->_activityGroupId && act->id==this->_id) this->_activity=act; } this->_teachers=this->_activity->teachersNames; this->_subject = this->_activity->subjectName; this->_activityTags = this->_activity->activityTagsNames; this->_students=this->_activity->studentsNames; int nSplit; if(this->_activityGroupId!=0){ nSplit=0; for(int i=0; i<gt.rules.activitiesList.size(); i++){ Activity* act=gt.rules.activitiesList[i]; if(act->activityGroupId==this->_activityGroupId){ if(nSplit>=MAX_SPLIT_OF_AN_ACTIVITY){ assert(0); } else{ if(this->_id==act->id) subactivitiesTabWidget->setCurrentIndex(nSplit); dur(nSplit)->setValue(act->duration); activ(nSplit)->setChecked(act->active); nSplit++; } } } } else{ nSplit=1; dur(0)->setValue(this->_activity->duration); activ(0)->setChecked(this->_activity->active); subactivitiesTabWidget->setCurrentIndex(0); } splitSpinBox->setMinimum(nSplit); splitSpinBox->setMaximum(nSplit); splitSpinBox->setValue(nSplit); nStudentsSpinBox->setMinimum(-1); nStudentsSpinBox->setMaximum(MAX_ROOM_CAPACITY); nStudentsSpinBox->setValue(-1); if(this->_activity->computeNTotalStudents==false) nStudentsSpinBox->setValue(this->_activity->nTotalStudents); updateStudentsListWidget(); updateTeachersListWidget(); updateSubjectsComboBox(); updateActivityTagsListWidget(); selectedStudentsListWidget->clear(); for(QStringList::Iterator it=this->_students.begin(); it!=this->_students.end(); it++) selectedStudentsListWidget->addItem(*it); for(int i=0; i<MAX_SPLIT_OF_AN_ACTIVITY; i++) if(i<nSplit) subactivitiesTabWidget->setTabEnabled(i, true); else subactivitiesTabWidget->setTabEnabled(i, false); okPushButton->setDefault(true); okPushButton->setFocus(); foreach(Teacher* tch, gt.rules.teachersList) teacherNamesSet.insert(tch->name); foreach(Subject* sbj, gt.rules.subjectsList) subjectNamesSet.insert(sbj->name); foreach(ActivityTag* at, gt.rules.activityTagsList) activityTagNamesSet.insert(at->name); /*foreach(StudentsYear* year, gt.rules.yearsList){ numberOfStudentsHash.insert(year->name, year->numberOfStudents); foreach(StudentsGroup* group, year->groupsList){ numberOfStudentsHash.insert(group->name, group->numberOfStudents); foreach(StudentsSubgroup* subgroup, group->subgroupsList){ numberOfStudentsHash.insert(subgroup->name, subgroup->numberOfStudents); } } }*/ }
ModifyConstraintActivityPreferredStartingTimeForm::ModifyConstraintActivityPreferredStartingTimeForm(QWidget* parent, ConstraintActivityPreferredStartingTime* ctr): QDialog(parent) { setupUi(this); okPushButton->setDefault(true); connect(okPushButton, SIGNAL(clicked()), this, SLOT(ok())); connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(teachersComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(studentsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(subjectsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(activityTagsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); QSize tmp2=studentsComboBox->minimumSizeHint(); Q_UNUSED(tmp2); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); QSize tmp4=activityTagsComboBox->minimumSizeHint(); Q_UNUSED(tmp4); QSize tmp5=activitiesComboBox->minimumSizeHint(); Q_UNUSED(tmp5); QSize tmp6=dayComboBox->minimumSizeHint(); Q_UNUSED(tmp6); QSize tmp7=startHourComboBox->minimumSizeHint(); Q_UNUSED(tmp7); activitiesComboBox->setMaximumWidth(maxRecommendedWidth(this)); this->_ctr=ctr; weightLineEdit->setText(CustomFETString::number(ctr->weightPercentage)); teachersComboBox->addItem(""); for(int i=0; i<gt.rules.teachersList.size(); i++){ Teacher* tch=gt.rules.teachersList[i]; teachersComboBox->addItem(tch->name); } teachersComboBox->setCurrentIndex(0); subjectsComboBox->addItem(""); for(int i=0; i<gt.rules.subjectsList.size(); i++){ Subject* sb=gt.rules.subjectsList[i]; subjectsComboBox->addItem(sb->name); } subjectsComboBox->setCurrentIndex(0); activityTagsComboBox->addItem(""); for(int i=0; i<gt.rules.activityTagsList.size(); i++){ ActivityTag* st=gt.rules.activityTagsList[i]; activityTagsComboBox->addItem(st->name); } activityTagsComboBox->setCurrentIndex(0); studentsComboBox->addItem(""); for(int i=0; i<gt.rules.yearsList.size(); i++){ StudentsYear* sty=gt.rules.yearsList[i]; studentsComboBox->addItem(sty->name); for(int j=0; j<sty->groupsList.size(); j++){ StudentsGroup* stg=sty->groupsList[j]; studentsComboBox->addItem(stg->name); if(SHOW_SUBGROUPS_IN_COMBO_BOXES) for(int k=0; k<stg->subgroupsList.size(); k++){ StudentsSubgroup* sts=stg->subgroupsList[k]; studentsComboBox->addItem(sts->name); } } } studentsComboBox->setCurrentIndex(0); updatePeriodGroupBox(); updateActivitiesComboBox(); if(ctr->day>=0 && ctr->day<gt.rules.nDaysPerWeek) dayComboBox->setCurrentIndex(ctr->day); else dayComboBox->setCurrentIndex(-1); if(ctr->hour>=0 && ctr->hour<gt.rules.nHoursPerDay) startHourComboBox->setCurrentIndex(ctr->hour); else startHourComboBox->setCurrentIndex(-1); permLockedCheckBox->setChecked(this->_ctr->permanentlyLocked); constraintChanged(); }
AddConstraintActivityPreferredRoomsForm::AddConstraintActivityPreferredRoomsForm(QWidget* parent): QDialog(parent) { setupUi(this); addConstraintPushButton->setDefault(true); roomsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedRoomsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); connect(closePushButton, SIGNAL(clicked()), this, SLOT(close())); connect(addConstraintPushButton, SIGNAL(clicked()), this, SLOT(addConstraint())); connect(roomsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addRoom())); connect(selectedRoomsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeRoom())); connect(teachersComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(studentsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(subjectsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(activityTagsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(clearPushButton, SIGNAL(clicked()), this, SLOT(clear())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); QSize tmp2=studentsComboBox->minimumSizeHint(); Q_UNUSED(tmp2); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); QSize tmp4=activityTagsComboBox->minimumSizeHint(); Q_UNUSED(tmp4); QSize tmp5=activitiesComboBox->minimumSizeHint(); Q_UNUSED(tmp5); activitiesComboBox->setMaximumWidth(maxRecommendedWidth(this)); teachersComboBox->addItem(""); for(int i=0; i<gt.rules.teachersList.size(); i++){ Teacher* tch=gt.rules.teachersList[i]; teachersComboBox->addItem(tch->name); } teachersComboBox->setCurrentIndex(0); subjectsComboBox->addItem(""); for(int i=0; i<gt.rules.subjectsList.size(); i++){ Subject* sb=gt.rules.subjectsList[i]; subjectsComboBox->addItem(sb->name); } subjectsComboBox->setCurrentIndex(0); activityTagsComboBox->addItem(""); for(int i=0; i<gt.rules.activityTagsList.size(); i++){ ActivityTag* st=gt.rules.activityTagsList[i]; activityTagsComboBox->addItem(st->name); } activityTagsComboBox->setCurrentIndex(0); studentsComboBox->addItem(""); for(int i=0; i<gt.rules.yearsList.size(); i++){ StudentsYear* sty=gt.rules.yearsList[i]; studentsComboBox->addItem(sty->name); for(int j=0; j<sty->groupsList.size(); j++){ StudentsGroup* stg=sty->groupsList[j]; studentsComboBox->addItem(stg->name); for(int k=0; k<stg->subgroupsList.size(); k++){ StudentsSubgroup* sts=stg->subgroupsList[k]; studentsComboBox->addItem(sts->name); } } } studentsComboBox->setCurrentIndex(0); updateActivitiesComboBox(); updateRoomsListWidget(); }
ConstraintMaxDaysBetweenActivitiesForm::ConstraintMaxDaysBetweenActivitiesForm(QWidget* parent): QDialog(parent) { setupUi(this); currentConstraintTextEdit->setReadOnly(true); modifyConstraintPushButton->setDefault(true); constraintsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); connect(constraintsListWidget, SIGNAL(currentRowChanged(int)), this, SLOT(constraintChanged(int))); connect(addConstraintPushButton, SIGNAL(clicked()), this, SLOT(addConstraint())); connect(closePushButton, SIGNAL(clicked()), this, SLOT(close())); connect(removeConstraintPushButton, SIGNAL(clicked()), this, SLOT(removeConstraint())); connect(modifyConstraintPushButton, SIGNAL(clicked()), this, SLOT(modifyConstraint())); connect(constraintsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(modifyConstraint())); connect(teachersComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(studentsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(subjectsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(activityTagsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(helpPushButton, SIGNAL(clicked()), this, SLOT(help())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); QSize tmp2=studentsComboBox->minimumSizeHint(); Q_UNUSED(tmp2); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); QSize tmp4=activityTagsComboBox->minimumSizeHint(); Q_UNUSED(tmp4); ///////////// teachersComboBox->addItem(""); for(int i=0; i<gt.rules.teachersList.size(); i++){ Teacher* tch=gt.rules.teachersList[i]; teachersComboBox->addItem(tch->name); } teachersComboBox->setCurrentIndex(0); subjectsComboBox->addItem(""); for(int i=0; i<gt.rules.subjectsList.size(); i++){ Subject* sb=gt.rules.subjectsList[i]; subjectsComboBox->addItem(sb->name); } subjectsComboBox->setCurrentIndex(0); activityTagsComboBox->addItem(""); for(int i=0; i<gt.rules.activityTagsList.size(); i++){ ActivityTag* st=gt.rules.activityTagsList[i]; activityTagsComboBox->addItem(st->name); } activityTagsComboBox->setCurrentIndex(0); studentsComboBox->addItem(""); for(int i=0; i<gt.rules.yearsList.size(); i++){ StudentsYear* sty=gt.rules.yearsList[i]; studentsComboBox->addItem(sty->name); for(int j=0; j<sty->groupsList.size(); j++){ StudentsGroup* stg=sty->groupsList[j]; studentsComboBox->addItem(stg->name); if(SHOW_SUBGROUPS_IN_COMBO_BOXES) for(int k=0; k<stg->subgroupsList.size(); k++){ StudentsSubgroup* sts=stg->subgroupsList[k]; studentsComboBox->addItem(sts->name); } } } studentsComboBox->setCurrentIndex(0); /////////////// this->filterChanged(); }
AddConstraintActivitiesPreferredTimeSlotsForm::AddConstraintActivitiesPreferredTimeSlotsForm(QWidget* parent): QDialog(parent) { setupUi(this); addConstraintPushButton->setDefault(true); connect(preferredTimesTable, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(itemClicked(QTableWidgetItem*))); connect(addConstraintPushButton, SIGNAL(clicked()), this, SLOT(addConstraint())); connect(closePushButton, SIGNAL(clicked()), this, SLOT(close())); connect(setAllAllowedPushButton, SIGNAL(clicked()), this, SLOT(setAllSlotsAllowed())); connect(setAllNotAllowedPushButton, SIGNAL(clicked()), this, SLOT(setAllSlotsNotAllowed())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); QSize tmp2=studentsComboBox->minimumSizeHint(); Q_UNUSED(tmp2); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); QSize tmp4=activityTagsComboBox->minimumSizeHint(); Q_UNUSED(tmp4); updateTeachersComboBox(); updateStudentsComboBox(); updateSubjectsComboBox(); updateActivityTagsComboBox(); preferredTimesTable->setRowCount(gt.rules.nHoursPerDay); preferredTimesTable->setColumnCount(gt.rules.nDaysPerWeek); for(int j=0; j<gt.rules.nDaysPerWeek; j++){ QTableWidgetItem* item=new QTableWidgetItem(gt.rules.daysOfTheWeek[j]); preferredTimesTable->setHorizontalHeaderItem(j, item); } for(int i=0; i<gt.rules.nHoursPerDay; i++){ QTableWidgetItem* item=new QTableWidgetItem(gt.rules.hoursOfTheDay[i]); preferredTimesTable->setVerticalHeaderItem(i, item); } for(int i=0; i<gt.rules.nHoursPerDay; i++) for(int j=0; j<gt.rules.nDaysPerWeek; j++){ QTableWidgetItem* item=new QTableWidgetItem(YES); item->setTextAlignment(Qt::AlignCenter); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); colorItem(item); preferredTimesTable->setItem(i, j, item); } preferredTimesTable->resizeRowsToContents(); connect(preferredTimesTable->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(horizontalHeaderClicked(int))); connect(preferredTimesTable->verticalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(verticalHeaderClicked(int))); preferredTimesTable->setSelectionMode(QAbstractItemView::NoSelection); tableWidgetUpdateBug(preferredTimesTable); setStretchAvailabilityTableNicely(preferredTimesTable); }
AddActivityForm::AddActivityForm(QWidget* parent, const QString& teacherName, const QString& studentsSetName, const QString& subjectName, const QString& activityTagName): QDialog(parent) { setupUi(this); allTeachersListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedTeachersListWidget->setSelectionMode(QAbstractItemView::SingleSelection); allStudentsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedStudentsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); allActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); selectedActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection); splitSpinBox->setMaximum(MAX_SPLIT_OF_AN_ACTIVITY); durList.clear(); durList.append(duration1SpinBox); durList.append(duration2SpinBox); durList.append(duration3SpinBox); durList.append(duration4SpinBox); durList.append(duration5SpinBox); durList.append(duration6SpinBox); durList.append(duration7SpinBox); durList.append(duration8SpinBox); durList.append(duration9SpinBox); durList.append(duration10SpinBox); durList.append(duration11SpinBox); durList.append(duration12SpinBox); durList.append(duration13SpinBox); durList.append(duration14SpinBox); durList.append(duration15SpinBox); durList.append(duration16SpinBox); durList.append(duration17SpinBox); durList.append(duration18SpinBox); durList.append(duration19SpinBox); durList.append(duration20SpinBox); durList.append(duration21SpinBox); durList.append(duration22SpinBox); durList.append(duration23SpinBox); durList.append(duration24SpinBox); durList.append(duration25SpinBox); durList.append(duration26SpinBox); durList.append(duration27SpinBox); durList.append(duration28SpinBox); durList.append(duration29SpinBox); durList.append(duration30SpinBox); durList.append(duration31SpinBox); durList.append(duration32SpinBox); durList.append(duration33SpinBox); durList.append(duration34SpinBox); durList.append(duration35SpinBox); for(int i=0; i<MAX_SPLIT_OF_AN_ACTIVITY; i++) dur(i)->setMaximum(gt.rules.nHoursPerDay); activList.clear(); activList.append(active1CheckBox); activList.append(active2CheckBox); activList.append(active3CheckBox); activList.append(active4CheckBox); activList.append(active5CheckBox); activList.append(active6CheckBox); activList.append(active7CheckBox); activList.append(active8CheckBox); activList.append(active9CheckBox); activList.append(active10CheckBox); activList.append(active11CheckBox); activList.append(active12CheckBox); activList.append(active13CheckBox); activList.append(active14CheckBox); activList.append(active15CheckBox); activList.append(active16CheckBox); activList.append(active17CheckBox); activList.append(active18CheckBox); activList.append(active19CheckBox); activList.append(active20CheckBox); activList.append(active21CheckBox); activList.append(active22CheckBox); activList.append(active23CheckBox); activList.append(active24CheckBox); activList.append(active25CheckBox); activList.append(active26CheckBox); activList.append(active27CheckBox); activList.append(active28CheckBox); activList.append(active29CheckBox); activList.append(active30CheckBox); activList.append(active31CheckBox); activList.append(active32CheckBox); activList.append(active33CheckBox); activList.append(active34CheckBox); activList.append(active35CheckBox); connect(subgroupsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showSubgroupsChanged())); connect(groupsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showGroupsChanged())); connect(yearsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showYearsChanged())); connect(splitSpinBox, SIGNAL(valueChanged(int)), this, SLOT(splitChanged())); connect(closePushButton, SIGNAL(clicked()), this, SLOT(close())); connect(addActivityPushButton, SIGNAL(clicked()), this, SLOT(addActivity())); connect(helpPushButton, SIGNAL(clicked()), this, SLOT(help())); connect(allTeachersListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addTeacher())); connect(selectedTeachersListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeTeacher())); connect(allStudentsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addStudents())); connect(selectedStudentsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeStudents())); connect(allActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addActivityTag())); connect(selectedActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeActivityTag())); connect(clearActivityTagPushButton, SIGNAL(clicked()), this, SLOT(clearActivityTags())); connect(clearStudentsPushButton, SIGNAL(clicked()), this, SLOT(clearStudents())); connect(clearTeacherPushButton, SIGNAL(clicked()), this, SLOT(clearTeachers())); connect(minDayDistanceSpinBox, SIGNAL(valueChanged(int)), this, SLOT(minDaysChanged())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); selectedStudentsListWidget->clear(); updateStudentsListWidget(); updateTeachersListWidget(); updateSubjectsComboBox(); updateActivityTagsListWidget(); minDayDistanceSpinBox->setMaximum(gt.rules.nDaysPerWeek); minDayDistanceSpinBox->setMinimum(0); minDayDistanceSpinBox->setValue(1); int nSplit=splitSpinBox->value(); for(int i=0; i<MAX_SPLIT_OF_AN_ACTIVITY; i++){ if(i<nSplit) subactivitiesTabWidget->setTabEnabled(i, true); else subactivitiesTabWidget->setTabEnabled(i, false); } minDayDistanceTextLabel->setEnabled(nSplit>=2); minDayDistanceSpinBox->setEnabled(nSplit>=2); percentageTextLabel->setEnabled(nSplit>=2 && minDayDistanceSpinBox->value()>0); percentageLineEdit->setEnabled(nSplit>=2 && minDayDistanceSpinBox->value()>0); forceConsecutiveCheckBox->setEnabled(nSplit>=2 && minDayDistanceSpinBox->value()>0); subactivitiesTabWidget->setCurrentIndex(0); nStudentsSpinBox->setMinimum(-1); nStudentsSpinBox->setMaximum(MAX_ROOM_CAPACITY); nStudentsSpinBox->setValue(-1); addActivityPushButton->setDefault(true); addActivityPushButton->setFocus(); if(teacherName!="") selectedTeachersListWidget->addItem(teacherName); if(studentsSetName!="") selectedStudentsListWidget->addItem(studentsSetName); if(subjectName!=""){ int pos=-1; for(int i=0; i<subjectsComboBox->count(); i++){ if(subjectsComboBox->itemText(i)==subjectName){ pos=i; break; } } assert(pos>=0); subjectsComboBox->setCurrentIndex(pos); } else{ //begin trick to pass a Qt 4.6.0 bug: the first entry is not highlighted with mouse until you move to second entry and then back up if(subjectsComboBox->view()){ subjectsComboBox->view()->setCurrentIndex(QModelIndex()); } //end trick subjectsComboBox->setCurrentIndex(-1); } if(activityTagName!="") selectedActivityTagsListWidget->addItem(activityTagName); }
ModifyConstraintActivityPreferredStartingTimesForm::ModifyConstraintActivityPreferredStartingTimesForm(QWidget* parent, ConstraintActivityPreferredStartingTimes* ctr): QDialog(parent) { setupUi(this); okPushButton->setDefault(true); connect(preferredTimesTable, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(itemClicked(QTableWidgetItem*))); connect(okPushButton, SIGNAL(clicked()), this, SLOT(ok())); connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(teachersComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(studentsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(subjectsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(activityTagsComboBox, SIGNAL(activated(QString)), this, SLOT(filterChanged())); connect(setAllAllowedPushButton, SIGNAL(clicked()), this, SLOT(setAllSlotsAllowed())); connect(setAllNotAllowedPushButton, SIGNAL(clicked()), this, SLOT(setAllSlotsNotAllowed())); centerWidgetOnScreen(this); restoreFETDialogGeometry(this); QSize tmp1=teachersComboBox->minimumSizeHint(); Q_UNUSED(tmp1); QSize tmp2=studentsComboBox->minimumSizeHint(); Q_UNUSED(tmp2); QSize tmp3=subjectsComboBox->minimumSizeHint(); Q_UNUSED(tmp3); QSize tmp4=activityTagsComboBox->minimumSizeHint(); Q_UNUSED(tmp4); QSize tmp5=activitiesComboBox->minimumSizeHint(); Q_UNUSED(tmp5); activitiesComboBox->setMaximumWidth(maxRecommendedWidth(this)); this->_ctr=ctr; weightLineEdit->setText(CustomFETString::number(ctr->weightPercentage)); teachersComboBox->addItem(""); for(int i=0; i<gt.rules.teachersList.size(); i++){ Teacher* tch=gt.rules.teachersList[i]; teachersComboBox->addItem(tch->name); } teachersComboBox->setCurrentIndex(0); subjectsComboBox->addItem(""); for(int i=0; i<gt.rules.subjectsList.size(); i++){ Subject* sb=gt.rules.subjectsList[i]; subjectsComboBox->addItem(sb->name); } subjectsComboBox->setCurrentIndex(0); activityTagsComboBox->addItem(""); for(int i=0; i<gt.rules.activityTagsList.size(); i++){ ActivityTag* st=gt.rules.activityTagsList[i]; activityTagsComboBox->addItem(st->name); } activityTagsComboBox->setCurrentIndex(0); studentsComboBox->addItem(""); for(int i=0; i<gt.rules.yearsList.size(); i++){ StudentsYear* sty=gt.rules.yearsList[i]; studentsComboBox->addItem(sty->name); for(int j=0; j<sty->groupsList.size(); j++){ StudentsGroup* stg=sty->groupsList[j]; studentsComboBox->addItem(stg->name); for(int k=0; k<stg->subgroupsList.size(); k++){ StudentsSubgroup* sts=stg->subgroupsList[k]; studentsComboBox->addItem(sts->name); } } } studentsComboBox->setCurrentIndex(0); updateActivitiesComboBox(); preferredTimesTable->setRowCount(gt.rules.nHoursPerDay); preferredTimesTable->setColumnCount(gt.rules.nDaysPerWeek); for(int j=0; j<gt.rules.nDaysPerWeek; j++){ QTableWidgetItem* item=new QTableWidgetItem(gt.rules.daysOfTheWeek[j]); preferredTimesTable->setHorizontalHeaderItem(j, item); } for(int i=0; i<gt.rules.nHoursPerDay; i++){ QTableWidgetItem* item=new QTableWidgetItem(gt.rules.hoursOfTheDay[i]); preferredTimesTable->setVerticalHeaderItem(i, item); } Matrix2D<bool> currentMatrix; currentMatrix.resize(gt.rules.nHoursPerDay, gt.rules.nDaysPerWeek); //bool currentMatrix[MAX_HOURS_PER_DAY][MAX_DAYS_PER_WEEK]; for(int i=0; i<gt.rules.nHoursPerDay; i++) for(int j=0; j<gt.rules.nDaysPerWeek; j++) currentMatrix[i][j]=false; for(int k=0; k<ctr->nPreferredStartingTimes_L; k++){ if(ctr->days_L[k]==-1 || ctr->hours_L[k]==-1) assert(0); int i=ctr->hours_L[k]; int j=ctr->days_L[k]; if(i>=0 && i<gt.rules.nHoursPerDay && j>=0 && j<gt.rules.nDaysPerWeek) currentMatrix[i][j]=true; } for(int i=0; i<gt.rules.nHoursPerDay; i++) for(int j=0; j<gt.rules.nDaysPerWeek; j++){ QTableWidgetItem* item= new QTableWidgetItem(); item->setTextAlignment(Qt::AlignCenter); item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); preferredTimesTable->setItem(i, j, item); if(!currentMatrix[i][j]) item->setText(NO); else item->setText(YES); colorItem(item); } preferredTimesTable->resizeRowsToContents(); connect(preferredTimesTable->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(horizontalHeaderClicked(int))); connect(preferredTimesTable->verticalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(verticalHeaderClicked(int))); preferredTimesTable->setSelectionMode(QAbstractItemView::NoSelection); tableWidgetUpdateBug(preferredTimesTable); setStretchAvailabilityTableNicely(preferredTimesTable); }