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(>.rules);
152
153 this->close();
154 }
155
cancel()156 void ModifyConstraintTwoActivitiesGroupedForm::cancel()
157 {
158 this->close();
159 }
160