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