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