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