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