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