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