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