1 /***************************************************************************
2 modifyactivityform.cpp - description
3 -------------------
4 begin : Feb 9, 2005
5 copyright : (C) 2005 by Lalescu Liviu
6 email : Please see https://lalescu.ro/liviu/ for details about contacting Liviu Lalescu (in particular, you can find here the e-mail address)
7 ***************************************************************************/
8
9 /***************************************************************************
10 * *
11 * This program is free software: you can redistribute it and/or modify *
12 * it under the terms of the GNU Affero General Public License as *
13 * published by the Free Software Foundation, either version 3 of the *
14 * License, or (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18 #include "modifyactivityform.h"
19 #include "teacher.h"
20 #include "subject.h"
21 #include "studentsset.h"
22
23 #include "activityplanningform.h"
24
25 #include <QMessageBox>
26
27 #include <QPlainTextEdit>
28
29 #include <QList>
30
31 #include <QListWidget>
32 #include <QAbstractItemView>
33 #include <QScrollBar>
34
35 #include <QSettings>
36 #include <QObject>
37 #include <QMetaObject>
38
39 extern const QString COMPANY;
40 extern const QString PROGRAM;
41
dur(int i)42 QSpinBox* ModifyActivityForm::dur(int i)
43 {
44 assert(i>=0 && i<durList.count());
45 assert(i<MAX_SPLIT_OF_AN_ACTIVITY);
46 return durList.at(i);
47 }
48
activ(int i)49 QCheckBox* ModifyActivityForm::activ(int i)
50 {
51 assert(i>=0 && i<activList.count());
52 assert(i<MAX_SPLIT_OF_AN_ACTIVITY);
53 return activList.at(i);
54 }
55
ModifyActivityForm(QWidget * parent,int id,int activityGroupId)56 ModifyActivityForm::ModifyActivityForm(QWidget* parent, int id, int activityGroupId): QDialog(parent)
57 {
58 setupUi(this);
59
60 for(Teacher* tch : qAsConst(gt.rules.teachersList))
61 teacherNamesSet.insert(tch->name);
62 for(Subject* sbj : qAsConst(gt.rules.subjectsList))
63 subjectNamesSet.insert(sbj->name);
64 for(ActivityTag* at : qAsConst(gt.rules.activityTagsList))
65 activityTagNamesSet.insert(at->name);
66
67 allTeachersListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
68 selectedTeachersListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
69 allStudentsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
70 selectedStudentsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
71 allActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
72 selectedActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
73
74 QSettings settings(COMPANY, PROGRAM);
75
76 showSubgroupsCheckBox->setChecked(settings.value(this->metaObject()->className()+QString("/show-subgroups-check-box-state"), "false").toBool());
77 showGroupsCheckBox->setChecked(settings.value(this->metaObject()->className()+QString("/show-groups-check-box-state"), "true").toBool());
78 showYearsCheckBox->setChecked(settings.value(this->metaObject()->className()+QString("/show-years-check-box-state"), "true").toBool());
79
80 allTeachersRadioButton->setChecked(settings.value(this->metaObject()->className()+QString("/all-teachers-radio-button-state"), "true").toBool());
81 qualifiedTeachersRadioButton->setChecked(settings.value(this->metaObject()->className()+QString("/qualified-teachers-radio-button-state"), "false").toBool());
82
83 connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(cancel()));
84 connect(okPushButton, SIGNAL(clicked()), this, SLOT(ok()));
85 connect(clearTeacherPushButton, SIGNAL(clicked()), this, SLOT(clearTeachers()));
86 connect(clearStudentsPushButton, SIGNAL(clicked()), this, SLOT(clearStudents()));
87 connect(allTeachersListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addTeacher()));
88 connect(selectedTeachersListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeTeacher()));
89 connect(allStudentsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addStudents()));
90 connect(selectedStudentsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeStudents()));
91 connect(clearActivityTagPushButton, SIGNAL(clicked()), this, SLOT(clearActivityTags()));
92 connect(allActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addActivityTag()));
93 connect(selectedActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeActivityTag()));
94 connect(showYearsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showYearsChanged()));
95 connect(showGroupsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showGroupsChanged()));
96 connect(showSubgroupsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showSubgroupsChanged()));
97 connect(helpPushButton, SIGNAL(clicked()), this, SLOT(help()));
98
99 centerWidgetOnScreen(this);
100 restoreFETDialogGeometry(this);
101
102 QSize tmp3=subjectsComboBox->minimumSizeHint();
103 Q_UNUSED(tmp3);
104
105 this->_id=id;
106 this->_activityGroupId=activityGroupId;
107 for(int i=0; i<gt.rules.activitiesList.size(); i++){
108 Activity* act=gt.rules.activitiesList[i];
109 if(act->activityGroupId==this->_activityGroupId && act->id==this->_id)
110 this->_activity=act;
111 }
112
113 this->_teachers=this->_activity->teachersNames;
114 this->_subject = this->_activity->subjectName;
115 this->_activityTags = this->_activity->activityTagsNames;
116 this->_students=this->_activity->studentsNames;
117
118 int nSplit=0;
119 QList<int> durations;
120 QList<bool> actives;
121 int crtIndex=-1;
122
123 durations.clear();
124 actives.clear();
125 if(this->_activityGroupId!=0){
126 for(int i=0; i<gt.rules.activitiesList.size(); i++){
127 Activity* act=gt.rules.activitiesList[i];
128 if(act->activityGroupId==this->_activityGroupId){
129 if(nSplit>=MAX_SPLIT_OF_AN_ACTIVITY){
130 assert(0);
131 }
132 else{
133 durations.append(act->duration);
134 actives.append(act->active);
135 if(this->_id==act->id)
136 crtIndex=nSplit;
137 nSplit++;
138 }
139 }
140 }
141 }
142 else{
143 durations.append(this->_activity->duration);
144 actives.append(this->_activity->active);
145 crtIndex=nSplit;
146 nSplit++;
147 }
148 assert(crtIndex>=0);
149
150 splitSpinBox->setMinimum(nSplit);
151 splitSpinBox->setMaximum(nSplit);
152 splitSpinBox->setValue(nSplit);
153
154 durList.clear();
155 activList.clear();
156
157 populateSubactivitiesTabWidget(splitSpinBox->value());
158
159 for(int i=0; i<durations.count(); i++){
160 dur(i)->setValue(durations.at(i));
161 activ(i)->setChecked(actives.at(i));
162 }
163 subactivitiesTabWidget->setCurrentIndex(crtIndex);
164
165 nStudentsSpinBox->setMinimum(-1);
166 nStudentsSpinBox->setMaximum(MAX_ROOM_CAPACITY);
167 nStudentsSpinBox->setValue(-1);
168
169 if(this->_activity->computeNTotalStudents==false)
170 nStudentsSpinBox->setValue(this->_activity->nTotalStudents);
171
172 updateStudentsListWidget();
173 updateSubjectsComboBox();
174 updateActivityTagsListWidget();
175
176 //after updateSubjectsComboBox
177 connect(subjectsComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateAllTeachersListWidget()));
178 connect(allTeachersRadioButton, SIGNAL(toggled(bool)), this, SLOT(allTeachersRadioButtonToggled(bool)));
179 connect(qualifiedTeachersRadioButton, SIGNAL(toggled(bool)), this, SLOT(qualifiedTeachersRadioButtonToggled(bool)));
180 updateAllTeachersListWidget();
181
182 selectedTeachersListWidget->clear();
183 for(QStringList::const_iterator it=this->_teachers.constBegin(); it!=this->_teachers.constEnd(); it++)
184 selectedTeachersListWidget->addItem(*it);
185
186 selectedStudentsListWidget->clear();
187 for(QStringList::const_iterator it=this->_students.constBegin(); it!=this->_students.constEnd(); it++)
188 selectedStudentsListWidget->addItem(*it);
189
190 okPushButton->setDefault(true);
191 okPushButton->setFocus();
192 }
193
~ModifyActivityForm()194 ModifyActivityForm::~ModifyActivityForm()
195 {
196 saveFETDialogGeometry(this);
197
198 QSettings settings(COMPANY, PROGRAM);
199
200 settings.setValue(this->metaObject()->className()+QString("/show-subgroups-check-box-state"), showSubgroupsCheckBox->isChecked());
201 settings.setValue(this->metaObject()->className()+QString("/show-groups-check-box-state"), showGroupsCheckBox->isChecked());
202 settings.setValue(this->metaObject()->className()+QString("/show-years-check-box-state"), showYearsCheckBox->isChecked());
203
204 settings.setValue(this->metaObject()->className()+QString("/qualified-teachers-radio-button-state"), qualifiedTeachersRadioButton->isChecked());
205 settings.setValue(this->metaObject()->className()+QString("/all-teachers-radio-button-state"), allTeachersRadioButton->isChecked());
206 }
207
populateSubactivitiesTabWidget(int n)208 void ModifyActivityForm::populateSubactivitiesTabWidget(int n)
209 {
210 int oldN=subactivitiesTabWidget->count();
211 if(oldN>n){
212 for(int i=oldN-1; i>=n; i--){
213 QWidget* wd=subactivitiesTabWidget->widget(i);
214 subactivitiesTabWidget->removeTab(i);
215 assert(durList.count()>0);
216 durList.removeLast();
217 assert(activList.count()>0);
218 activList.removeLast();
219 delete wd;
220 }
221 }
222 else if(oldN<n){
223 for(int i=oldN; i<n; i++){
224 QWidget* wd=new QWidget(subactivitiesTabWidget);
225
226 QCheckBox* cb=new QCheckBox(tr("Active"), wd);
227 cb->setChecked(true);
228 QSpinBox* sb=new QSpinBox(wd);
229 sb->setMinimum(1);
230 sb->setMaximum(MAX_HOURS_PER_DAY);
231 sb->setValue(1);
232 QLabel* ld=new QLabel(tr("Duration"), wd);
233
234 QHBoxLayout* hld=new QHBoxLayout();
235 hld->addWidget(ld);
236 hld->addWidget(sb);
237
238 QHBoxLayout* hla=new QHBoxLayout();
239 hla->addStretch();
240 hla->addWidget(cb);
241
242 QVBoxLayout* vl=new QVBoxLayout(wd);
243 vl->addLayout(hld);
244 vl->addLayout(hla);
245
246 subactivitiesTabWidget->addTab(wd, QString::number(i+1));
247
248 durList.append(sb);
249 activList.append(cb);
250 }
251 }
252 }
253
allTeachersRadioButtonToggled(bool toggled)254 void ModifyActivityForm::allTeachersRadioButtonToggled(bool toggled)
255 {
256 if(toggled)
257 updateAllTeachersListWidget();
258 }
259
qualifiedTeachersRadioButtonToggled(bool toggled)260 void ModifyActivityForm::qualifiedTeachersRadioButtonToggled(bool toggled)
261 {
262 if(toggled)
263 updateAllTeachersListWidget();
264 }
265
updateAllTeachersListWidget()266 void ModifyActivityForm::updateAllTeachersListWidget()
267 {
268 allTeachersListWidget->clear();
269
270 for(int i=0; i<gt.rules.teachersList.size(); i++){
271 Teacher* tch=gt.rules.teachersList[i];
272 if(allTeachersRadioButton->isChecked() || subjectsComboBox->currentIndex()==-1){
273 allTeachersListWidget->addItem(tch->name);
274 }
275 else{
276 assert(qualifiedTeachersRadioButton->isChecked());
277 assert(subjectsComboBox->currentText()!="");
278 assert(subjectNamesSet.contains(subjectsComboBox->currentText()));
279 if(tch->qualifiedSubjectsHash.contains(subjectsComboBox->currentText())){
280 allTeachersListWidget->addItem(tch->name);
281 }
282 }
283 }
284 }
285
addTeacher()286 void ModifyActivityForm::addTeacher()
287 {
288 if(allTeachersListWidget->currentRow()<0 || allTeachersListWidget->currentRow()>=allTeachersListWidget->count())
289 return;
290
291 for(int i=0; i<selectedTeachersListWidget->count(); i++)
292 if(selectedTeachersListWidget->item(i)->text()==allTeachersListWidget->currentItem()->text())
293 return;
294
295 selectedTeachersListWidget->addItem(allTeachersListWidget->currentItem()->text());
296 selectedTeachersListWidget->setCurrentRow(selectedTeachersListWidget->count()-1);
297 }
298
removeTeacher()299 void ModifyActivityForm::removeTeacher()
300 {
301 if(selectedTeachersListWidget->count()<=0 || selectedTeachersListWidget->currentRow()<0 ||
302 selectedTeachersListWidget->currentRow()>=selectedTeachersListWidget->count())
303 return;
304
305 int i=selectedTeachersListWidget->currentRow();
306 selectedTeachersListWidget->setCurrentRow(-1);
307 QListWidgetItem* item=selectedTeachersListWidget->takeItem(i);
308 delete item;
309 if(i<selectedTeachersListWidget->count())
310 selectedTeachersListWidget->setCurrentRow(i);
311 else
312 selectedTeachersListWidget->setCurrentRow(selectedTeachersListWidget->count()-1);
313 }
314
addStudents()315 void ModifyActivityForm::addStudents()
316 {
317 if(allStudentsListWidget->currentRow()<0 || allStudentsListWidget->currentRow()>=allStudentsListWidget->count())
318 return;
319
320 assert(canonicalStudentsSetsNames.count()==allStudentsListWidget->count());
321 QString sn=canonicalStudentsSetsNames.at(allStudentsListWidget->currentRow());
322
323 for(int i=0; i<selectedStudentsListWidget->count(); i++)
324 if(selectedStudentsListWidget->item(i)->text()==sn)
325 return;
326
327 selectedStudentsListWidget->addItem(sn);
328 selectedStudentsListWidget->setCurrentRow(selectedStudentsListWidget->count()-1);
329 }
330
removeStudents()331 void ModifyActivityForm::removeStudents()
332 {
333 if(selectedStudentsListWidget->count()<=0 || selectedStudentsListWidget->currentRow()<0 ||
334 selectedStudentsListWidget->currentRow()>=selectedStudentsListWidget->count())
335 return;
336
337 int i=selectedStudentsListWidget->currentRow();
338 selectedStudentsListWidget->setCurrentRow(-1);
339 QListWidgetItem* item=selectedStudentsListWidget->takeItem(i);
340 delete item;
341 if(i<selectedStudentsListWidget->count())
342 selectedStudentsListWidget->setCurrentRow(i);
343 else
344 selectedStudentsListWidget->setCurrentRow(selectedStudentsListWidget->count()-1);
345 }
346
addActivityTag()347 void ModifyActivityForm::addActivityTag()
348 {
349 if(allActivityTagsListWidget->currentRow()<0 || allActivityTagsListWidget->currentRow()>=allActivityTagsListWidget->count())
350 return;
351
352 for(int i=0; i<selectedActivityTagsListWidget->count(); i++)
353 if(selectedActivityTagsListWidget->item(i)->text()==allActivityTagsListWidget->currentItem()->text())
354 return;
355
356 selectedActivityTagsListWidget->addItem(allActivityTagsListWidget->currentItem()->text());
357 selectedActivityTagsListWidget->setCurrentRow(selectedActivityTagsListWidget->count()-1);
358 }
359
removeActivityTag()360 void ModifyActivityForm::removeActivityTag()
361 {
362 if(selectedActivityTagsListWidget->count()<=0 || selectedActivityTagsListWidget->currentRow()<0 ||
363 selectedActivityTagsListWidget->currentRow()>=selectedActivityTagsListWidget->count())
364 return;
365
366 int i=selectedActivityTagsListWidget->currentRow();
367 selectedActivityTagsListWidget->setCurrentRow(-1);
368 QListWidgetItem* item=selectedActivityTagsListWidget->takeItem(i);
369 delete item;
370 if(i<selectedActivityTagsListWidget->count())
371 selectedActivityTagsListWidget->setCurrentRow(i);
372 else
373 selectedActivityTagsListWidget->setCurrentRow(selectedActivityTagsListWidget->count()-1);
374 }
375
updateSubjectsComboBox()376 void ModifyActivityForm::updateSubjectsComboBox()
377 {
378 int i=0, j=-1;
379 subjectsComboBox->clear();
380 for(int k=0; k<gt.rules.subjectsList.size(); k++, i++){
381 Subject* sbj=gt.rules.subjectsList[k];
382 subjectsComboBox->addItem(sbj->name);
383 if(sbj->name==this->_subject)
384 j=i;
385 }
386 assert(j!=-1);
387 subjectsComboBox->setCurrentIndex(j);
388 }
389
updateActivityTagsListWidget()390 void ModifyActivityForm::updateActivityTagsListWidget()
391 {
392 allActivityTagsListWidget->clear();
393 for(int i=0; i<gt.rules.activityTagsList.size(); i++){
394 ActivityTag* at=gt.rules.activityTagsList[i];
395 allActivityTagsListWidget->addItem(at->name);
396 }
397
398 selectedActivityTagsListWidget->clear();
399 for(QStringList::const_iterator it=this->_activityTags.constBegin(); it!=this->_activityTags.constEnd(); it++)
400 selectedActivityTagsListWidget->addItem(*it);
401 }
402
showYearsChanged()403 void ModifyActivityForm::showYearsChanged()
404 {
405 updateStudentsListWidget();
406 }
407
showGroupsChanged()408 void ModifyActivityForm::showGroupsChanged()
409 {
410 updateStudentsListWidget();
411 }
412
showSubgroupsChanged()413 void ModifyActivityForm::showSubgroupsChanged()
414 {
415 updateStudentsListWidget();
416 }
417
updateStudentsListWidget()418 void ModifyActivityForm::updateStudentsListWidget()
419 {
420 const int INDENT=2;
421
422 bool showYears=showYearsCheckBox->isChecked();
423 bool showGroups=showGroupsCheckBox->isChecked();
424 bool showSubgroups=showSubgroupsCheckBox->isChecked();
425
426 allStudentsListWidget->clear();
427 canonicalStudentsSetsNames.clear();
428 for(int i=0; i<gt.rules.yearsList.size(); i++){
429 StudentsYear* sty=gt.rules.yearsList[i];
430 if(showYears){
431 allStudentsListWidget->addItem(sty->name);
432 canonicalStudentsSetsNames.append(sty->name);
433 }
434 for(int j=0; j<sty->groupsList.size(); j++){
435 StudentsGroup* stg=sty->groupsList[j];
436 if(showGroups){
437 QString begin=QString("");
438 QString end=QString("");
439 begin=QString(INDENT, ' ');
440 allStudentsListWidget->addItem(begin+stg->name+end);
441 canonicalStudentsSetsNames.append(stg->name);
442 }
443 if(showSubgroups) for(int k=0; k<stg->subgroupsList.size(); k++){
444 StudentsSubgroup* sts=stg->subgroupsList[k];
445
446 QString begin=QString("");
447 QString end=QString("");
448 begin=QString(2*INDENT, ' ');
449 allStudentsListWidget->addItem(begin+sts->name+end);
450 canonicalStudentsSetsNames.append(sts->name);
451 }
452 }
453 }
454
455 int q=allStudentsListWidget->verticalScrollBar()->minimum();
456 allStudentsListWidget->verticalScrollBar()->setValue(q);
457 }
458
cancel()459 void ModifyActivityForm::cancel()
460 {
461 this->reject();
462 }
463
ok()464 void ModifyActivityForm::ok()
465 {
466 //subject
467 QString subject_name=subjectsComboBox->currentText();
468 /*int subject_index=gt.rules.searchSubject(subject_name);
469 if(subject_index<0){*/
470 bool found=subjectNamesSet.contains(subject_name);
471 if(!found){
472 QMessageBox::warning(this, tr("FET information"),
473 tr("Invalid subject"));
474 return;
475 }
476
477 //activity tag
478 QStringList activity_tags_names;
479 for(int i=0; i<selectedActivityTagsListWidget->count(); i++){
480 //assert(gt.rules.searchActivityTag(selectedActivityTagsListWidget->item(i)->text())>=0);
481 assert(activityTagNamesSet.contains(selectedActivityTagsListWidget->item(i)->text()));
482 activity_tags_names.append(selectedActivityTagsListWidget->item(i)->text());
483 }
484
485 //teachers
486 QStringList teachers_names;
487 if(selectedTeachersListWidget->count()<=0){
488 int t=QMessageBox::question(this, tr("FET question"),
489 tr("Do you really want to have the activity without teacher(s)?"),
490 QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes);
491
492 if(t==QMessageBox::No)
493 return;
494 }
495 else{
496 for(int i=0; i<selectedTeachersListWidget->count(); i++){
497 //assert(gt.rules.searchTeacher(selectedTeachersListWidget->item(i)->text())>=0);
498 assert(teacherNamesSet.contains(selectedTeachersListWidget->item(i)->text()));
499 teachers_names.append(selectedTeachersListWidget->item(i)->text());
500 }
501 }
502
503 //students
504 int numberOfStudents=0;
505 QStringList students_names;
506 if(selectedStudentsListWidget->count()<=0){
507 int t=QMessageBox::question(this, tr("FET question"),
508 tr("Do you really want to have the activity without student set(s)?"),
509 QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes);
510
511 if(t==QMessageBox::No)
512 return;
513 }
514 else{
515 for(int i=0; i<selectedStudentsListWidget->count(); i++){
516 //assert(gt.rules.searchStudentsSet(selectedStudentsListWidget->item(i)->text())!=nullptr);
517 /*assert(numberOfStudentsHash.contains(selectedStudentsListWidget->item(i)->text()));
518 numberOfStudents+=numberOfStudentsHash.value(selectedStudentsListWidget->item(i)->text());*/
519 assert(gt.rules.permanentStudentsHash.contains(selectedStudentsListWidget->item(i)->text()));
520 numberOfStudents+=gt.rules.permanentStudentsHash.value(selectedStudentsListWidget->item(i)->text())->numberOfStudents;
521 students_names.append(selectedStudentsListWidget->item(i)->text());
522 }
523 }
524
525 /*int total_number_of_students=0;
526 for(QStringList::Iterator it=students_names.begin(); it!=students_names.end(); it++){
527 StudentsSet* ss=gt.rules.searchStudentsSet(*it);
528 assert(ss!=nullptr);
529 total_number_of_students+=ss->numberOfStudents;
530 }*/
531 int total_number_of_students=numberOfStudents;
532
533 int totalduration;
534 QList<int> durations;
535 QList<bool> active;
536 int nsplit=splitSpinBox->value();
537
538 totalduration=0;
539 for(int i=0; i<nsplit; i++){
540 durations.append(dur(i)->value());
541 active.append(activ(i)->isChecked());
542
543 totalduration+=durations[i];
544 }
545
546 if(nStudentsSpinBox->value()==-1){
547 gt.rules.modifyActivity(this->_id, this->_activityGroupId, teachers_names, subject_name,
548 activity_tags_names,students_names, nsplit, totalduration, durations, active,
549 (nStudentsSpinBox->value()==-1), total_number_of_students);
550 }
551 else{
552 gt.rules.modifyActivity(this->_id, this->_activityGroupId, teachers_names, subject_name,
553 activity_tags_names,students_names, nsplit, totalduration, durations, active,
554 (nStudentsSpinBox->value()==-1), nStudentsSpinBox->value());
555 }
556
557 PlanningChanged::increasePlanningCommunicationSpinBox();
558
559 this->accept();
560 }
561
clearTeachers()562 void ModifyActivityForm::clearTeachers()
563 {
564 selectedTeachersListWidget->clear();
565 }
566
clearStudents()567 void ModifyActivityForm::clearStudents()
568 {
569 selectedStudentsListWidget->clear();
570 }
571
clearActivityTags()572 void ModifyActivityForm::clearActivityTags()
573 {
574 selectedActivityTagsListWidget->clear();
575 }
576
help()577 void ModifyActivityForm::help()
578 {
579 QString s;
580
581 s+=tr("Abbreviations in this dialog:");
582 s+="\n\n";
583 s+=tr("'Students' (the text near the spin box), means 'Number of students (-1 for automatic)'");
584 s+="\n";
585 s+=tr("'Split' means 'Is split into ... activities per week'. This value cannot be changed."
586 " If you need to modify it, please remove the corresponding activities and add a new split activity.");
587 s+="\n";
588 s+=tr("The 'Duration' spin box and the 'Active' check box refer to each component of current activity, you can change "
589 "them for each component, separately, by selecting the corresponding tab in the tab widget.");
590 s+="\n";
591 s+=tr("'Qualified' means that only the teachers who are qualified to teach the selected subject will be shown in the 'Teachers' list.",
592 "Qualified refers to teachers");
593
594 //show the message in a dialog
595 QDialog dialog(this);
596
597 dialog.setWindowTitle(tr("FET - help on modifying activity(ies)"));
598
599 QVBoxLayout* vl=new QVBoxLayout(&dialog);
600 QPlainTextEdit* te=new QPlainTextEdit();
601 te->setPlainText(s);
602 te->setReadOnly(true);
603 QPushButton* pb=new QPushButton(tr("OK"));
604
605 QHBoxLayout* hl=new QHBoxLayout(0);
606 hl->addStretch(1);
607 hl->addWidget(pb);
608
609 vl->addWidget(te);
610 vl->addLayout(hl);
611 connect(pb, SIGNAL(clicked()), &dialog, SLOT(close()));
612
613 dialog.resize(600,470);
614 centerWidgetOnScreen(&dialog);
615
616 setParentAndOtherThings(&dialog, this);
617 dialog.exec();
618 }
619