1 /***************************************************************************
2 constraintstudentsminhourspermorningform.cpp - description
3 -------------------
4 begin : 2020
5 copyright : (C) 2020 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 "longtextmessagebox.h"
21
22 #include "constraintstudentsminhourspermorningform.h"
23 #include "addconstraintstudentsminhourspermorningform.h"
24 #include "modifyconstraintstudentsminhourspermorningform.h"
25
26 #include "helponstudentsminhoursdaily.h"
27
28 #include <QListWidget>
29 #include <QScrollBar>
30 #include <QAbstractItemView>
31
ConstraintStudentsMinHoursPerMorningForm(QWidget * parent)32 ConstraintStudentsMinHoursPerMorningForm::ConstraintStudentsMinHoursPerMorningForm(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
49 connect(helpPushButton, SIGNAL(clicked()), this, SLOT(help()));
50
51 centerWidgetOnScreen(this);
52 restoreFETDialogGeometry(this);
53
54 this->filterChanged();
55 }
56
~ConstraintStudentsMinHoursPerMorningForm()57 ConstraintStudentsMinHoursPerMorningForm::~ConstraintStudentsMinHoursPerMorningForm()
58 {
59 saveFETDialogGeometry(this);
60 }
61
filterOk(TimeConstraint * ctr)62 bool ConstraintStudentsMinHoursPerMorningForm::filterOk(TimeConstraint* ctr)
63 {
64 if(ctr->type==CONSTRAINT_STUDENTS_MIN_HOURS_PER_MORNING)
65 return true;
66 else
67 return false;
68 }
69
filterChanged()70 void ConstraintStudentsMinHoursPerMorningForm::filterChanged()
71 {
72 this->visibleConstraintsList.clear();
73 constraintsListWidget->clear();
74 for(int i=0; i<gt.rules.timeConstraintsList.size(); i++){
75 TimeConstraint* ctr=gt.rules.timeConstraintsList[i];
76 if(filterOk(ctr)){
77 visibleConstraintsList.append(ctr);
78 constraintsListWidget->addItem(ctr->getDescription(gt.rules));
79 }
80 }
81
82 if(constraintsListWidget->count()>0)
83 constraintsListWidget->setCurrentRow(0);
84 else
85 this->constraintChanged(-1);
86 }
87
constraintChanged(int index)88 void ConstraintStudentsMinHoursPerMorningForm::constraintChanged(int index)
89 {
90 if(index<0){
91 currentConstraintTextEdit->setPlainText("");
92 return;
93 }
94 assert(index<this->visibleConstraintsList.size());
95 TimeConstraint* ctr=this->visibleConstraintsList.at(index);
96 assert(ctr!=nullptr);
97 currentConstraintTextEdit->setPlainText(ctr->getDetailedDescription(gt.rules));
98 }
99
addConstraint()100 void ConstraintStudentsMinHoursPerMorningForm::addConstraint()
101 {
102 AddConstraintStudentsMinHoursPerMorningForm form(this);
103 setParentAndOtherThings(&form, this);
104 form.exec();
105
106 filterChanged();
107
108 constraintsListWidget->setCurrentRow(constraintsListWidget->count()-1);
109 }
110
modifyConstraint()111 void ConstraintStudentsMinHoursPerMorningForm::modifyConstraint()
112 {
113 int valv=constraintsListWidget->verticalScrollBar()->value();
114 int valh=constraintsListWidget->horizontalScrollBar()->value();
115
116 int i=constraintsListWidget->currentRow();
117 if(i<0){
118 QMessageBox::information(this, tr("FET information"), tr("Invalid selected constraint"));
119 return;
120 }
121 TimeConstraint* ctr=this->visibleConstraintsList.at(i);
122
123 ModifyConstraintStudentsMinHoursPerMorningForm form(this, (ConstraintStudentsMinHoursPerMorning*)ctr);
124 setParentAndOtherThings(&form, this);
125 form.exec();
126
127 filterChanged();
128
129 constraintsListWidget->verticalScrollBar()->setValue(valv);
130 constraintsListWidget->horizontalScrollBar()->setValue(valh);
131
132 if(i>=constraintsListWidget->count())
133 i=constraintsListWidget->count()-1;
134
135 if(i>=0)
136 constraintsListWidget->setCurrentRow(i);
137 else
138 this->constraintChanged(-1);
139 }
140
removeConstraint()141 void ConstraintStudentsMinHoursPerMorningForm::removeConstraint()
142 {
143 int i=constraintsListWidget->currentRow();
144 if(i<0){
145 QMessageBox::information(this, tr("FET information"), tr("Invalid selected constraint"));
146 return;
147 }
148 TimeConstraint* ctr=this->visibleConstraintsList.at(i);
149 QString s;
150 s=tr("Remove constraint?");
151 s+="\n\n";
152 s+=ctr->getDetailedDescription(gt.rules);
153
154 QListWidgetItem* item;
155
156 switch( LongTextMessageBox::confirmation( this, tr("FET confirmation"),
157 s, tr("Yes"), tr("No"), 0, 0, 1 ) ){
158 case 0: // The user clicked the OK button or pressed Enter
159 gt.rules.removeTimeConstraint(ctr);
160
161 visibleConstraintsList.removeAt(i);
162 constraintsListWidget->setCurrentRow(-1);
163 item=constraintsListWidget->takeItem(i);
164 delete item;
165
166 break;
167 case 1: // The user clicked the Cancel button or pressed Escape
168 break;
169 }
170
171 if(i>=constraintsListWidget->count())
172 i=constraintsListWidget->count()-1;
173 if(i>=0)
174 constraintsListWidget->setCurrentRow(i);
175 else
176 this->constraintChanged(-1);
177 }
178
help()179 void ConstraintStudentsMinHoursPerMorningForm::help()
180 {
181 HelpOnStudentsMinHoursDaily::help(this);
182 }
183