1 /***************************************************************************
2 constraintteacheractivitytagminhoursdailyform.cpp - description
3 -------------------
4 begin : 2019
5 copyright : (C) 2019 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 <QMessageBox>
19
20 #include "helponimperfectconstraints.h"
21
22 #include "longtextmessagebox.h"
23
24 #include "constraintteacheractivitytagminhoursdailyform.h"
25 #include "addconstraintteacheractivitytagminhoursdailyform.h"
26 #include "modifyconstraintteacheractivitytagminhoursdailyform.h"
27
28 #include <QListWidget>
29 #include <QScrollBar>
30 #include <QAbstractItemView>
31
ConstraintTeacherActivityTagMinHoursDailyForm(QWidget * parent)32 ConstraintTeacherActivityTagMinHoursDailyForm::ConstraintTeacherActivityTagMinHoursDailyForm(QWidget* parent): QDialog(parent)
33 {
34 setupUi(this);
35
36 currentConstraintTextEdit->setReadOnly(true);
37
38 modifyConstraintPushButton->setDefault(true);
39
40 connect(constraintsListWidget, SIGNAL(currentRowChanged(int)), this, SLOT(constraintChanged(int)));
41 connect(addConstraintPushButton, SIGNAL(clicked()), this, SLOT(addConstraint()));
42 connect(closePushButton, SIGNAL(clicked()), this, SLOT(close()));
43 connect(removeConstraintPushButton, SIGNAL(clicked()), this, SLOT(removeConstraint()));
44 connect(modifyConstraintPushButton, SIGNAL(clicked()), this, SLOT(modifyConstraint()));
45 connect(constraintsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(modifyConstraint()));
46
47 connect(helpPushButton, SIGNAL(clicked()), this, SLOT(help()));
48
49 centerWidgetOnScreen(this);
50 restoreFETDialogGeometry(this);
51
52 QSize tmp1=teachersComboBox->minimumSizeHint();
53 Q_UNUSED(tmp1);
54 QSize tmp4=activityTagsComboBox->minimumSizeHint();
55 Q_UNUSED(tmp4);
56
57 teachersComboBox->addItem("");
58 for(int i=0; i<gt.rules.teachersList.size(); i++){
59 Teacher* tch=gt.rules.teachersList[i];
60 teachersComboBox->addItem(tch->name);
61 }
62
63 activityTagsComboBox->clear();
64 activityTagsComboBox->addItem("");
65 for(ActivityTag* at : qAsConst(gt.rules.activityTagsList))
66 activityTagsComboBox->addItem(at->name);
67
68 this->filterChanged();
69
70 connect(teachersComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(filterChanged()));
71 connect(activityTagsComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(filterChanged()));
72 }
73
~ConstraintTeacherActivityTagMinHoursDailyForm()74 ConstraintTeacherActivityTagMinHoursDailyForm::~ConstraintTeacherActivityTagMinHoursDailyForm()
75 {
76 saveFETDialogGeometry(this);
77 }
78
filterOk(TimeConstraint * ctr)79 bool ConstraintTeacherActivityTagMinHoursDailyForm::filterOk(TimeConstraint* ctr)
80 {
81 if(ctr->type==CONSTRAINT_TEACHER_ACTIVITY_TAG_MIN_HOURS_DAILY){
82 ConstraintTeacherActivityTagMinHoursDaily* ct=(ConstraintTeacherActivityTagMinHoursDaily*) ctr;
83 return (ct->teacherName==teachersComboBox->currentText() || teachersComboBox->currentText()=="")
84 &&
85 (ct->activityTagName==activityTagsComboBox->currentText() || activityTagsComboBox->currentText()=="");
86 }
87 else
88 return false;
89 }
90
filterChanged()91 void ConstraintTeacherActivityTagMinHoursDailyForm::filterChanged()
92 {
93 this->visibleConstraintsList.clear();
94 constraintsListWidget->clear();
95 for(int i=0; i<gt.rules.timeConstraintsList.size(); i++){
96 TimeConstraint* ctr=gt.rules.timeConstraintsList[i];
97 if(filterOk(ctr)){
98 visibleConstraintsList.append(ctr);
99 constraintsListWidget->addItem(ctr->getDescription(gt.rules));
100 }
101 }
102
103 if(constraintsListWidget->count()>0)
104 constraintsListWidget->setCurrentRow(0);
105 else
106 this->constraintChanged(-1);
107 }
108
constraintChanged(int index)109 void ConstraintTeacherActivityTagMinHoursDailyForm::constraintChanged(int index)
110 {
111 if(index<0){
112 currentConstraintTextEdit->setPlainText("");
113 return;
114 }
115 assert(index<this->visibleConstraintsList.size());
116 TimeConstraint* ctr=this->visibleConstraintsList.at(index);
117 assert(ctr!=nullptr);
118 currentConstraintTextEdit->setPlainText(ctr->getDetailedDescription(gt.rules));
119 }
120
addConstraint()121 void ConstraintTeacherActivityTagMinHoursDailyForm::addConstraint()
122 {
123 AddConstraintTeacherActivityTagMinHoursDailyForm form(this);
124 setParentAndOtherThings(&form, this);
125 form.exec();
126
127 filterChanged();
128
129 constraintsListWidget->setCurrentRow(constraintsListWidget->count()-1);
130 }
131
modifyConstraint()132 void ConstraintTeacherActivityTagMinHoursDailyForm::modifyConstraint()
133 {
134 int valv=constraintsListWidget->verticalScrollBar()->value();
135 int valh=constraintsListWidget->horizontalScrollBar()->value();
136
137 int i=constraintsListWidget->currentRow();
138 if(i<0){
139 QMessageBox::information(this, tr("FET information"), tr("Invalid selected constraint"));
140 return;
141 }
142 TimeConstraint* ctr=this->visibleConstraintsList.at(i);
143
144 ModifyConstraintTeacherActivityTagMinHoursDailyForm form(this, (ConstraintTeacherActivityTagMinHoursDaily*)ctr);
145 setParentAndOtherThings(&form, this);
146 form.exec();
147
148 filterChanged();
149
150 constraintsListWidget->verticalScrollBar()->setValue(valv);
151 constraintsListWidget->horizontalScrollBar()->setValue(valh);
152
153 if(i>=constraintsListWidget->count())
154 i=constraintsListWidget->count()-1;
155
156 if(i>=0)
157 constraintsListWidget->setCurrentRow(i);
158 else
159 this->constraintChanged(-1);
160 }
161
removeConstraint()162 void ConstraintTeacherActivityTagMinHoursDailyForm::removeConstraint()
163 {
164 int i=constraintsListWidget->currentRow();
165 if(i<0){
166 QMessageBox::information(this, tr("FET information"), tr("Invalid selected constraint"));
167 return;
168 }
169 TimeConstraint* ctr=this->visibleConstraintsList.at(i);
170 QString s;
171 s=tr("Remove constraint?");
172 s+="\n\n";
173 s+=ctr->getDetailedDescription(gt.rules);
174
175 QListWidgetItem* item;
176
177 switch( LongTextMessageBox::confirmation( this, tr("FET confirmation"),
178 s, tr("Yes"), tr("No"), 0, 0, 1 ) ){
179 case 0: // The user clicked the OK button or pressed Enter
180 gt.rules.removeTimeConstraint(ctr);
181
182 visibleConstraintsList.removeAt(i);
183 constraintsListWidget->setCurrentRow(-1);
184 item=constraintsListWidget->takeItem(i);
185 delete item;
186
187 break;
188 case 1: // The user clicked the Cancel button or pressed Escape
189 break;
190 }
191
192 if(i>=constraintsListWidget->count())
193 i=constraintsListWidget->count()-1;
194 if(i>=0)
195 constraintsListWidget->setCurrentRow(i);
196 else
197 this->constraintChanged(-1);
198 }
199
help()200 void ConstraintTeacherActivityTagMinHoursDailyForm::help()
201 {
202 HelpOnImperfectConstraints::help(this, true);
203 }
204