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