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