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