1 /***************************************************************************
2                           modifyconstrainttwoactivitiesgroupedform.cpp  -  description
3                              -------------------
4     begin                : Aug 21, 2007
5     copyright            : (C) 2007 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 "modifyconstrainttwoactivitiesgroupedform.h"
21 #include "timeconstraint.h"
22 
ModifyConstraintTwoActivitiesGroupedForm(QWidget * parent,ConstraintTwoActivitiesGrouped * ctr)23 ModifyConstraintTwoActivitiesGroupedForm::ModifyConstraintTwoActivitiesGroupedForm(QWidget* parent, ConstraintTwoActivitiesGrouped* ctr): QDialog(parent)
24 {
25 	setupUi(this);
26 
27 	okPushButton->setDefault(true);
28 
29 	connect(okPushButton, SIGNAL(clicked()), this, SLOT(ok()));
30 	connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(cancel()));
31 
32 	centerWidgetOnScreen(this);
33 	restoreFETDialogGeometry(this);
34 
35 	QSize tmp5=firstActivitiesComboBox->minimumSizeHint();
36 	Q_UNUSED(tmp5);
37 	QSize tmp6=secondActivitiesComboBox->minimumSizeHint();
38 	Q_UNUSED(tmp6);
39 
40 	firstActivitiesComboBox->setMaximumWidth(maxRecommendedWidth(this));
41 	secondActivitiesComboBox->setMaximumWidth(maxRecommendedWidth(this));
42 
43 	this->_ctr=ctr;
44 
45 	weightLineEdit->setText(CustomFETString::number(ctr->weightPercentage));
46 
47 	updateActivitiesComboBox();
48 }
49 
~ModifyConstraintTwoActivitiesGroupedForm()50 ModifyConstraintTwoActivitiesGroupedForm::~ModifyConstraintTwoActivitiesGroupedForm()
51 {
52 	saveFETDialogGeometry(this);
53 }
54 
filterOk(Activity * act)55 bool ModifyConstraintTwoActivitiesGroupedForm::filterOk(Activity* act)
56 {
57 	Q_UNUSED(act);
58 
59 	int ok=true;
60 
61 	return ok;
62 }
63 
filterChanged()64 void ModifyConstraintTwoActivitiesGroupedForm::filterChanged()
65 {
66 	this->updateActivitiesComboBox();
67 }
68 
updateActivitiesComboBox()69 void ModifyConstraintTwoActivitiesGroupedForm::updateActivitiesComboBox(){
70 	firstActivitiesComboBox->clear();
71 	firstActivitiesList.clear();
72 
73 	secondActivitiesComboBox->clear();
74 	secondActivitiesList.clear();
75 
76 	int i=0, j=-1;
77 	for(int k=0; k<gt.rules.activitiesList.size(); k++){
78 		Activity* act=gt.rules.activitiesList[k];
79 		if(filterOk(act)){
80 			firstActivitiesComboBox->addItem(act->getDescription(gt.rules));
81 			this->firstActivitiesList.append(act->id);
82 
83 			if(act->id==this->_ctr->firstActivityId)
84 				j=i;
85 
86 			i++;
87 		}
88 	}
89 	//assert(j>=0); only the first time
90 	firstActivitiesComboBox->setCurrentIndex(j);
91 
92 	i=0, j=-1;
93 	for(int k=0; k<gt.rules.activitiesList.size(); k++){
94 		Activity* act=gt.rules.activitiesList[k];
95 		if(filterOk(act)){
96 			secondActivitiesComboBox->addItem(act->getDescription(gt.rules));
97 			this->secondActivitiesList.append(act->id);
98 
99 			if(act->id==this->_ctr->secondActivityId)
100 				j=i;
101 
102 			i++;
103 		}
104 	}
105 	//assert(j>=0); only the first time
106 	secondActivitiesComboBox->setCurrentIndex(j);
107 }
108 
ok()109 void ModifyConstraintTwoActivitiesGroupedForm::ok()
110 {
111 	double weight;
112 	QString tmp=weightLineEdit->text();
113 	weight_sscanf(tmp, "%lf", &weight);
114 	if(weight<0.0 || weight>100.0){
115 		QMessageBox::warning(this, tr("FET information"),
116 			tr("Invalid weight (percentage)"));
117 		return;
118 	}
119 
120 	int tmp2=firstActivitiesComboBox->currentIndex();
121 	assert(tmp2<gt.rules.activitiesList.size());
122 	assert(tmp2<firstActivitiesList.size());
123 	if(tmp2<0){
124 		QMessageBox::warning(this, tr("FET information"),
125 			tr("Invalid first activity"));
126 		return;
127 	}
128 	int fid=firstActivitiesList.at(tmp2);
129 
130 	int tmp3=secondActivitiesComboBox->currentIndex();
131 	assert(tmp3<gt.rules.activitiesList.size());
132 	assert(tmp3<secondActivitiesList.size());
133 	if(tmp3<0){
134 		QMessageBox::warning(this, tr("FET information"),
135 			tr("Invalid second activity"));
136 		return;
137 	}
138 	int sid=secondActivitiesList.at(tmp3);
139 
140 	if(sid==fid){
141 		QMessageBox::warning(this, tr("FET information"),
142 			tr("Same activities - impossible"));
143 		return;
144 	}
145 
146 	this->_ctr->weightPercentage=weight;
147 	this->_ctr->firstActivityId=fid;
148 	this->_ctr->secondActivityId=sid;
149 
150 	gt.rules.internalStructureComputed=false;
151 	setRulesModifiedAndOtherThings(&gt.rules);
152 
153 	this->close();
154 }
155 
cancel()156 void ModifyConstraintTwoActivitiesGroupedForm::cancel()
157 {
158 	this->close();
159 }
160