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