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