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