1 /***************************************************************************
2                           constraintteacherminrestinghoursform.cpp  -  description
3                              -------------------
4     begin                : 2017
5     copyright            : (C) 2017 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 "constraintteacherminrestinghoursform.h"
23 #include "addconstraintteacherminrestinghoursform.h"
24 #include "modifyconstraintteacherminrestinghoursform.h"
25 
26 #include <QListWidget>
27 #include <QScrollBar>
28 #include <QAbstractItemView>
29 
ConstraintTeacherMinRestingHoursForm(QWidget * parent)30 ConstraintTeacherMinRestingHoursForm::ConstraintTeacherMinRestingHoursForm(QWidget* parent): QDialog(parent)
31 {
32 	setupUi(this);
33 
34 	currentConstraintTextEdit->setReadOnly(true);
35 
36 	modifyConstraintPushButton->setDefault(true);
37 
38 	constraintsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
39 
40 	connect(constraintsListWidget, SIGNAL(currentRowChanged(int)), this, SLOT(constraintChanged(int)));
41 	connect(addConstraintPushButton, SIGNAL(clicked()), this, SLOT(addConstraint()));
42 	connect(closePushButton, SIGNAL(clicked()), this, SLOT(close()));
43 	connect(removeConstraintPushButton, SIGNAL(clicked()), this, SLOT(removeConstraint()));
44 	connect(modifyConstraintPushButton, SIGNAL(clicked()), this, SLOT(modifyConstraint()));
45 
46 	connect(constraintsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(modifyConstraint()));
47 
48 	centerWidgetOnScreen(this);
49 	restoreFETDialogGeometry(this);
50 
51 	QSize tmp1=teachersComboBox->minimumSizeHint();
52 	Q_UNUSED(tmp1);
53 
54 	teachersComboBox->addItem("");
55 	for(int i=0; i<gt.rules.teachersList.size(); i++){
56 		Teacher* tch=gt.rules.teachersList[i];
57 		teachersComboBox->addItem(tch->name);
58 	}
59 
60 	this->filterChanged();
61 
62 	connect(teachersComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(filterChanged()));
63 }
64 
~ConstraintTeacherMinRestingHoursForm()65 ConstraintTeacherMinRestingHoursForm::~ConstraintTeacherMinRestingHoursForm()
66 {
67 	saveFETDialogGeometry(this);
68 }
69 
filterOk(TimeConstraint * ctr)70 bool ConstraintTeacherMinRestingHoursForm::filterOk(TimeConstraint* ctr)
71 {
72 	if(ctr->type==CONSTRAINT_TEACHER_MIN_RESTING_HOURS){
73 		ConstraintTeacherMinRestingHours* ctna=(ConstraintTeacherMinRestingHours*) ctr;
74 		return ctna->teacherName==teachersComboBox->currentText() || teachersComboBox->currentText()=="";
75 	}
76 	else
77 		return false;
78 }
79 
filterChanged()80 void ConstraintTeacherMinRestingHoursForm::filterChanged()
81 {
82 	this->visibleConstraintsList.clear();
83 	constraintsListWidget->clear();
84 	for(int i=0; i<gt.rules.timeConstraintsList.size(); i++){
85 		TimeConstraint* ctr=gt.rules.timeConstraintsList[i];
86 		if(filterOk(ctr)){
87 			visibleConstraintsList.append(ctr);
88 			constraintsListWidget->addItem(ctr->getDescription(gt.rules));
89 		}
90 	}
91 
92 	if(constraintsListWidget->count()>0)
93 		constraintsListWidget->setCurrentRow(0);
94 	else
95 		constraintChanged(-1);
96 }
97 
constraintChanged(int index)98 void ConstraintTeacherMinRestingHoursForm::constraintChanged(int index)
99 {
100 	if(index<0){
101 		currentConstraintTextEdit->setPlainText("");
102 		return;
103 	}
104 	assert(index<this->visibleConstraintsList.size());
105 	TimeConstraint* ctr=this->visibleConstraintsList.at(index);
106 	assert(ctr!=nullptr);
107 	currentConstraintTextEdit->setPlainText(ctr->getDetailedDescription(gt.rules));
108 }
109 
addConstraint()110 void ConstraintTeacherMinRestingHoursForm::addConstraint()
111 {
112 	AddConstraintTeacherMinRestingHoursForm form(this);
113 	setParentAndOtherThings(&form, this);
114 	form.exec();
115 
116 	filterChanged();
117 
118 	constraintsListWidget->setCurrentRow(constraintsListWidget->count()-1);
119 }
120 
modifyConstraint()121 void ConstraintTeacherMinRestingHoursForm::modifyConstraint()
122 {
123 	int valv=constraintsListWidget->verticalScrollBar()->value();
124 	int valh=constraintsListWidget->horizontalScrollBar()->value();
125 
126 	int i=constraintsListWidget->currentRow();
127 	if(i<0){
128 		QMessageBox::information(this, tr("FET information"), tr("Invalid selected constraint"));
129 		return;
130 	}
131 	TimeConstraint* ctr=this->visibleConstraintsList.at(i);
132 
133 	ModifyConstraintTeacherMinRestingHoursForm form(this, (ConstraintTeacherMinRestingHours*)ctr);
134 	setParentAndOtherThings(&form, this);
135 	form.exec();
136 
137 	filterChanged();
138 
139 	constraintsListWidget->verticalScrollBar()->setValue(valv);
140 	constraintsListWidget->horizontalScrollBar()->setValue(valh);
141 
142 	if(i>=constraintsListWidget->count())
143 	i=constraintsListWidget->count()-1;
144 
145 	if(i>=0)
146 		constraintsListWidget->setCurrentRow(i);
147 	else
148 		this->constraintChanged(-1);
149 }
150 
removeConstraint()151 void ConstraintTeacherMinRestingHoursForm::removeConstraint()
152 {
153 	int i=constraintsListWidget->currentRow();
154 	if(i<0){
155 		QMessageBox::information(this, tr("FET information"), tr("Invalid selected constraint"));
156 		return;
157 	}
158 	TimeConstraint* ctr=this->visibleConstraintsList.at(i);
159 	QString s;
160 	s=tr("Remove constraint?");
161 	s+="\n\n";
162 	s+=ctr->getDetailedDescription(gt.rules);
163 
164 	QListWidgetItem* item;
165 
166 	switch( LongTextMessageBox::confirmation( this, tr("FET confirmation"),
167 		s, tr("Yes"), tr("No"), 0, 0, 1 ) ){
168 	case 0: // The user clicked the OK button or pressed Enter
169 		gt.rules.removeTimeConstraint(ctr);
170 
171 		visibleConstraintsList.removeAt(i);
172 		constraintsListWidget->setCurrentRow(-1);
173 		item=constraintsListWidget->takeItem(i);
174 		delete item;
175 
176 		break;
177 	case 1: // The user clicked the Cancel button or pressed Escape
178 		break;
179 	}
180 
181 	if(i>=constraintsListWidget->count())
182 		i=constraintsListWidget->count()-1;
183 	if(i>=0)
184 		constraintsListWidget->setCurrentRow(i);
185 	else
186 		this->constraintChanged(-1);
187 }
188