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