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(&gt.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