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