1 /***************************************************************************
2                           constraintteachersactivitytagmaxhoursdailyrealdaysform.cpp  -  description
3                              -------------------
4     begin                : 2021
5     copyright            : (C) 2021 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 "helponimperfectconstraints.h"
21 
22 #include "longtextmessagebox.h"
23 
24 #include "constraintteachersactivitytagmaxhoursdailyrealdaysform.h"
25 #include "addconstraintteachersactivitytagmaxhoursdailyrealdaysform.h"
26 #include "modifyconstraintteachersactivitytagmaxhoursdailyrealdaysform.h"
27 
28 #include <QListWidget>
29 #include <QScrollBar>
30 #include <QAbstractItemView>
31 
ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm(QWidget * parent)32 ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm::ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm(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 	connect(helpPushButton, SIGNAL(clicked()), this, SLOT(help()));
49 
50 	centerWidgetOnScreen(this);
51 	restoreFETDialogGeometry(this);
52 
53 	QSize tmp4=activityTagsComboBox->minimumSizeHint();
54 	Q_UNUSED(tmp4);
55 
56 	activityTagsComboBox->clear();
57 	activityTagsComboBox->addItem("");
58 	for(ActivityTag* at : qAsConst(gt.rules.activityTagsList))
59 		activityTagsComboBox->addItem(at->name);
60 
61 	this->filterChanged();
62 
63 	connect(activityTagsComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(filterChanged()));
64 }
65 
~ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm()66 ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm::~ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm()
67 {
68 	saveFETDialogGeometry(this);
69 }
70 
filterOk(TimeConstraint * ctr)71 bool ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm::filterOk(TimeConstraint* ctr)
72 {
73 	if(ctr->type==CONSTRAINT_TEACHERS_ACTIVITY_TAG_MAX_HOURS_DAILY_REAL_DAYS){
74 		ConstraintTeachersActivityTagMaxHoursDailyRealDays* ct=(ConstraintTeachersActivityTagMaxHoursDailyRealDays*) ctr;
75 		return (ct->activityTagName==activityTagsComboBox->currentText() || activityTagsComboBox->currentText()=="");
76 	}
77 	else
78 		return false;
79 }
80 
filterChanged()81 void ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm::filterChanged()
82 {
83 	this->visibleConstraintsList.clear();
84 	constraintsListWidget->clear();
85 	for(int i=0; i<gt.rules.timeConstraintsList.size(); i++){
86 		TimeConstraint* ctr=gt.rules.timeConstraintsList[i];
87 		if(filterOk(ctr)){
88 			visibleConstraintsList.append(ctr);
89 			constraintsListWidget->addItem(ctr->getDescription(gt.rules));
90 		}
91 	}
92 
93 	if(constraintsListWidget->count()>0)
94 		constraintsListWidget->setCurrentRow(0);
95 	else
96 		constraintChanged(-1);
97 }
98 
constraintChanged(int index)99 void ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm::constraintChanged(int index)
100 {
101 	if(index<0){
102 		currentConstraintTextEdit->setPlainText("");
103 		return;
104 	}
105 	assert(index<this->visibleConstraintsList.size());
106 	TimeConstraint* ctr=this->visibleConstraintsList.at(index);
107 	assert(ctr!=nullptr);
108 	currentConstraintTextEdit->setPlainText(ctr->getDetailedDescription(gt.rules));
109 }
110 
addConstraint()111 void ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm::addConstraint()
112 {
113 	AddConstraintTeachersActivityTagMaxHoursDailyRealDaysForm form(this);
114 	setParentAndOtherThings(&form, this);
115 	form.exec();
116 
117 	filterChanged();
118 
119 	constraintsListWidget->setCurrentRow(constraintsListWidget->count()-1);
120 }
121 
modifyConstraint()122 void ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm::modifyConstraint()
123 {
124 	int valv=constraintsListWidget->verticalScrollBar()->value();
125 	int valh=constraintsListWidget->horizontalScrollBar()->value();
126 
127 	int i=constraintsListWidget->currentRow();
128 	if(i<0){
129 		QMessageBox::information(this, tr("FET information"), tr("Invalid selected constraint"));
130 		return;
131 	}
132 	TimeConstraint* ctr=this->visibleConstraintsList.at(i);
133 
134 	ModifyConstraintTeachersActivityTagMaxHoursDailyRealDaysForm form(this, (ConstraintTeachersActivityTagMaxHoursDailyRealDays*)ctr);
135 	setParentAndOtherThings(&form, this);
136 	form.exec();
137 
138 	filterChanged();
139 
140 	constraintsListWidget->verticalScrollBar()->setValue(valv);
141 	constraintsListWidget->horizontalScrollBar()->setValue(valh);
142 
143 	if(i>=constraintsListWidget->count())
144 		i=constraintsListWidget->count()-1;
145 
146 	if(i>=0)
147 		constraintsListWidget->setCurrentRow(i);
148 	else
149 		this->constraintChanged(-1);
150 }
151 
removeConstraint()152 void ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm::removeConstraint()
153 {
154 	int i=constraintsListWidget->currentRow();
155 	if(i<0){
156 		QMessageBox::information(this, tr("FET information"), tr("Invalid selected constraint"));
157 		return;
158 	}
159 	TimeConstraint* ctr=this->visibleConstraintsList.at(i);
160 	QString s;
161 	s=tr("Remove constraint?");
162 	s+="\n\n";
163 	s+=ctr->getDetailedDescription(gt.rules);
164 
165 	QListWidgetItem* item;
166 
167 	switch( LongTextMessageBox::confirmation( this, tr("FET confirmation"),
168 		s, tr("Yes"), tr("No"), 0, 0, 1 ) ){
169 	case 0: // The user clicked the OK button or pressed Enter
170 		gt.rules.removeTimeConstraint(ctr);
171 
172 		visibleConstraintsList.removeAt(i);
173 		constraintsListWidget->setCurrentRow(-1);
174 		item=constraintsListWidget->takeItem(i);
175 		delete item;
176 
177 		break;
178 	case 1: // The user clicked the Cancel button or pressed Escape
179 		break;
180 	}
181 
182 	if(i>=constraintsListWidget->count())
183 		i=constraintsListWidget->count()-1;
184 	if(i>=0)
185 		constraintsListWidget->setCurrentRow(i);
186 	else
187 		this->constraintChanged(-1);
188 }
189 
help()190 void ConstraintTeachersActivityTagMaxHoursDailyRealDaysForm::help()
191 {
192 	HelpOnImperfectConstraints::help(this);
193 }
194