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