1 /***************************************************************************
2 addconstraintsubjectpreferredroomsform.cpp - description
3 -------------------
4 begin : April 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 "addconstraintsubjectpreferredroomsform.h"
23
24 #include <QListWidget>
25 #include <QAbstractItemView>
26
AddConstraintSubjectPreferredRoomsForm(QWidget * parent)27 AddConstraintSubjectPreferredRoomsForm::AddConstraintSubjectPreferredRoomsForm(QWidget* parent): QDialog(parent)
28 {
29 setupUi(this);
30
31 addConstraintPushButton->setDefault(true);
32
33 roomsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
34 selectedRoomsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
35
36 connect(closePushButton, SIGNAL(clicked()), this, SLOT(close()));
37 connect(addConstraintPushButton, SIGNAL(clicked()), this, SLOT(addConstraint()));
38 connect(roomsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addRoom()));
39 connect(selectedRoomsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeRoom()));
40 connect(clearPushButton, SIGNAL(clicked()), this, SLOT(clear()));
41
42 centerWidgetOnScreen(this);
43 restoreFETDialogGeometry(this);
44
45 QSize tmp3=subjectsComboBox->minimumSizeHint();
46 Q_UNUSED(tmp3);
47
48 updateRoomsListWidget();
49
50 for(int i=0; i<gt.rules.subjectsList.size(); i++){
51 Subject* sb=gt.rules.subjectsList[i];
52 subjectsComboBox->addItem(sb->name);
53 }
54 }
55
~AddConstraintSubjectPreferredRoomsForm()56 AddConstraintSubjectPreferredRoomsForm::~AddConstraintSubjectPreferredRoomsForm()
57 {
58 saveFETDialogGeometry(this);
59 }
60
updateRoomsListWidget()61 void AddConstraintSubjectPreferredRoomsForm::updateRoomsListWidget()
62 {
63 roomsListWidget->clear();
64 selectedRoomsListWidget->clear();
65
66 for(int i=0; i<gt.rules.roomsList.size(); i++){
67 Room* rm=gt.rules.roomsList[i];
68 roomsListWidget->addItem(rm->name);
69 }
70 }
71
addConstraint()72 void AddConstraintSubjectPreferredRoomsForm::addConstraint()
73 {
74 SpaceConstraint *ctr=nullptr;
75
76 double weight;
77 QString tmp=weightLineEdit->text();
78 weight_sscanf(tmp, "%lf", &weight);
79 if(weight<0.0 || weight>100){
80 QMessageBox::warning(this, tr("FET information"),
81 tr("Invalid weight"));
82 return;
83 }
84
85 if(selectedRoomsListWidget->count()==0){
86 QMessageBox::warning(this, tr("FET information"),
87 tr("Empty list of selected rooms"));
88 return;
89 }
90 /*if(selectedRoomsListWidget->count()==1){
91 QMessageBox::warning(this, tr("FET information"),
92 tr("Only one selected room - please use constraint subject preferred room if you want a single room"));
93 return;
94 }*/
95
96 if(subjectsComboBox->currentIndex()<0 || subjectsComboBox->count()<=0){
97 QMessageBox::warning(this, tr("FET information"),
98 tr("Invalid selected subject"));
99 return;
100 }
101 QString subject=subjectsComboBox->currentText();
102
103 QStringList roomsList;
104 for(int i=0; i<selectedRoomsListWidget->count(); i++)
105 roomsList.append(selectedRoomsListWidget->item(i)->text());
106
107 ctr=new ConstraintSubjectPreferredRooms(weight, subject, roomsList);
108 bool tmp2=gt.rules.addSpaceConstraint(ctr);
109
110 if(tmp2){
111 QString s=tr("Constraint added:");
112 s+="\n\n";
113 s+=ctr->getDetailedDescription(gt.rules);
114 LongTextMessageBox::information(this, tr("FET information"), s);
115 }
116 else{
117 QMessageBox::warning(this, tr("FET information"),
118 tr("Constraint NOT added - please report error"));
119 delete ctr;
120 }
121 }
122
addRoom()123 void AddConstraintSubjectPreferredRoomsForm::addRoom()
124 {
125 if(roomsListWidget->currentRow()<0)
126 return;
127 QString rmName=roomsListWidget->currentItem()->text();
128 assert(rmName!="");
129 int i;
130 //duplicate?
131 for(i=0; i<selectedRoomsListWidget->count(); i++)
132 if(rmName==selectedRoomsListWidget->item(i)->text())
133 break;
134 if(i<selectedRoomsListWidget->count())
135 return;
136 selectedRoomsListWidget->addItem(rmName);
137 selectedRoomsListWidget->setCurrentRow(selectedRoomsListWidget->count()-1);
138 }
139
removeRoom()140 void AddConstraintSubjectPreferredRoomsForm::removeRoom()
141 {
142 if(selectedRoomsListWidget->currentRow()<0 || selectedRoomsListWidget->count()<=0)
143 return;
144 int tmp=selectedRoomsListWidget->currentRow();
145
146 selectedRoomsListWidget->setCurrentRow(-1);
147 QListWidgetItem* item=selectedRoomsListWidget->takeItem(tmp);
148 delete item;
149 if(tmp<selectedRoomsListWidget->count())
150 selectedRoomsListWidget->setCurrentRow(tmp);
151 else
152 selectedRoomsListWidget->setCurrentRow(selectedRoomsListWidget->count()-1);
153 }
154
clear()155 void AddConstraintSubjectPreferredRoomsForm::clear()
156 {
157 selectedRoomsListWidget->clear();
158 }
159