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