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