1 /***************************************************************************
2 modifyconstraintsubjectactivitytagpreferredroomsform.cpp - description
3 -------------------
4 begin : Aug 18, 2007
5 copyright : (C) 2007 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 "modifyconstraintsubjectactivitytagpreferredroomsform.h"
21
22 #include <QListWidget>
23 #include <QAbstractItemView>
24
ModifyConstraintSubjectActivityTagPreferredRoomsForm(QWidget * parent,ConstraintSubjectActivityTagPreferredRooms * ctr)25 ModifyConstraintSubjectActivityTagPreferredRoomsForm::ModifyConstraintSubjectActivityTagPreferredRoomsForm(QWidget* parent, ConstraintSubjectActivityTagPreferredRooms* 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 QSize tmp4=activityTagsComboBox->minimumSizeHint();
46 Q_UNUSED(tmp4);
47
48 updateRoomsListWidget();
49
50 int i=0, j=-1;
51 for(int k=0; k<gt.rules.subjectsList.size(); k++){
52 Subject* sb=gt.rules.subjectsList[k];
53 subjectsComboBox->addItem(sb->name);
54 if(ctr->subjectName==sb->name){
55 assert(j==-1);
56 j=i;
57 }
58 i++;
59 }
60 assert(j>=0);
61 subjectsComboBox->setCurrentIndex(j);
62
63 ////////////////
64 i=0, j=-1;
65 for(int k=0; k<gt.rules.activityTagsList.size(); k++){
66 ActivityTag* sb=gt.rules.activityTagsList[k];
67 activityTagsComboBox->addItem(sb->name);
68 if(ctr->activityTagName==sb->name){
69 assert(j==-1);
70 j=i;
71 }
72 i++;
73 }
74 assert(j>=0);
75 activityTagsComboBox->setCurrentIndex(j);
76 /////////////////
77
78 this->_ctr=ctr;
79
80 weightLineEdit->setText(CustomFETString::number(ctr->weightPercentage));
81
82 for(QStringList::const_iterator it=ctr->roomsNames.constBegin(); it!=ctr->roomsNames.constEnd(); it++)
83 selectedRoomsListWidget->addItem(*it);
84 }
85
~ModifyConstraintSubjectActivityTagPreferredRoomsForm()86 ModifyConstraintSubjectActivityTagPreferredRoomsForm::~ModifyConstraintSubjectActivityTagPreferredRoomsForm()
87 {
88 saveFETDialogGeometry(this);
89 }
90
updateRoomsListWidget()91 void ModifyConstraintSubjectActivityTagPreferredRoomsForm::updateRoomsListWidget()
92 {
93 roomsListWidget->clear();
94 selectedRoomsListWidget->clear();
95
96 for(int i=0; i<gt.rules.roomsList.size(); i++){
97 Room* rm=gt.rules.roomsList[i];
98 roomsListWidget->addItem(rm->name);
99 }
100 }
101
ok()102 void ModifyConstraintSubjectActivityTagPreferredRoomsForm::ok()
103 {
104 double weight;
105 QString tmp=weightLineEdit->text();
106 weight_sscanf(tmp, "%lf", &weight);
107 if(weight<0.0 || weight>100){
108 QMessageBox::warning(this, tr("FET information"),
109 tr("Invalid weight"));
110 return;
111 }
112
113 if(selectedRoomsListWidget->count()==0){
114 QMessageBox::warning(this, tr("FET information"),
115 tr("Empty list of selected rooms"));
116 return;
117 }
118 /*if(selectedRoomsListWidget->count()==1){
119 QMessageBox::warning(this, tr("FET information"),
120 tr("Only one selected room - please use constraint subject activity tag preferred room if you want a single room"));
121 return;
122 }*/
123
124 if(subjectsComboBox->currentIndex()<0){
125 QMessageBox::warning(this, tr("FET information"),
126 tr("Invalid selected subject"));
127 return;
128 }
129 QString subject=subjectsComboBox->currentText();
130
131 if(activityTagsComboBox->currentIndex()<0){
132 QMessageBox::warning(this, tr("FET information"),
133 tr("Invalid selected activity tag"));
134 return;
135 }
136 QString activityTag=activityTagsComboBox->currentText();
137
138 QStringList roomsList;
139 for(int i=0; i<selectedRoomsListWidget->count(); i++)
140 roomsList.append(selectedRoomsListWidget->item(i)->text());
141
142 this->_ctr->weightPercentage=weight;
143 this->_ctr->subjectName=subject;
144 this->_ctr->activityTagName=activityTag;
145 this->_ctr->roomsNames=roomsList;
146
147 gt.rules.internalStructureComputed=false;
148 setRulesModifiedAndOtherThings(>.rules);
149
150 this->close();
151 }
152
cancel()153 void ModifyConstraintSubjectActivityTagPreferredRoomsForm::cancel()
154 {
155 this->close();
156 }
157
addRoom()158 void ModifyConstraintSubjectActivityTagPreferredRoomsForm::addRoom()
159 {
160 if(roomsListWidget->currentRow()<0)
161 return;
162 QString rmName=roomsListWidget->currentItem()->text();
163 assert(rmName!="");
164 int i;
165 //duplicate?
166 for(i=0; i<selectedRoomsListWidget->count(); i++)
167 if(rmName==selectedRoomsListWidget->item(i)->text())
168 break;
169 if(i<selectedRoomsListWidget->count())
170 return;
171 selectedRoomsListWidget->addItem(rmName);
172 selectedRoomsListWidget->setCurrentRow(selectedRoomsListWidget->count()-1);
173 }
174
removeRoom()175 void ModifyConstraintSubjectActivityTagPreferredRoomsForm::removeRoom()
176 {
177 if(selectedRoomsListWidget->currentRow()<0 || selectedRoomsListWidget->count()<=0)
178 return;
179 int tmp=selectedRoomsListWidget->currentRow();
180
181 selectedRoomsListWidget->setCurrentRow(-1);
182 QListWidgetItem* item=selectedRoomsListWidget->takeItem(tmp);
183 delete item;
184 if(tmp<selectedRoomsListWidget->count())
185 selectedRoomsListWidget->setCurrentRow(tmp);
186 else
187 selectedRoomsListWidget->setCurrentRow(selectedRoomsListWidget->count()-1);
188 }
189
clear()190 void ModifyConstraintSubjectActivityTagPreferredRoomsForm::clear()
191 {
192 selectedRoomsListWidget->clear();
193 }
194