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