1 /***************************************************************************
2 addconstraintactivitytagsnotoverlappingform.cpp - description
3 -------------------
4 begin : 2019
5 copyright : (C) 2019 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 "addconstraintactivitytagsnotoverlappingform.h"
23
24 #include <QListWidget>
25 #include <QAbstractItemView>
26 #include <QScrollBar>
27
AddConstraintActivityTagsNotOverlappingForm(QWidget * parent)28 AddConstraintActivityTagsNotOverlappingForm::AddConstraintActivityTagsNotOverlappingForm(QWidget* parent): QDialog(parent)
29 {
30 setupUi(this);
31
32 addConstraintPushButton->setDefault(true);
33
34 activityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
35 notOverlappingActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
36
37 connect(closePushButton, SIGNAL(clicked()), this, SLOT(close()));
38 connect(addConstraintPushButton, SIGNAL(clicked()), this, SLOT(addConstraint()));
39 connect(activityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addActivityTag()));
40 connect(addAllActivityTagsPushButton, SIGNAL(clicked()), this, SLOT(addAllActivityTags()));
41 connect(notOverlappingActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeActivityTag()));
42 connect(clearPushButton, SIGNAL(clicked()), this, SLOT(clear()));
43
44 centerWidgetOnScreen(this);
45 restoreFETDialogGeometry(this);
46
47 for(int i=0; i<gt.rules.activityTagsList.size(); i++){
48 ActivityTag* st=gt.rules.activityTagsList[i];
49 activityTagsListWidget->addItem(st->name);
50 }
51
52 notOverlappingActivityTagsListWidget->clear();
53 }
54
~AddConstraintActivityTagsNotOverlappingForm()55 AddConstraintActivityTagsNotOverlappingForm::~AddConstraintActivityTagsNotOverlappingForm()
56 {
57 saveFETDialogGeometry(this);
58 }
59
addConstraint()60 void AddConstraintActivityTagsNotOverlappingForm::addConstraint()
61 {
62 TimeConstraint *ctr=nullptr;
63
64 double weight;
65 QString tmp=weightLineEdit->text();
66 weight_sscanf(tmp, "%lf", &weight);
67 if(weight<0.0 || weight>100.0){
68 QMessageBox::warning(this, tr("FET information"),
69 tr("Invalid weight (percentage)"));
70 return;
71 }
72
73 if(notOverlappingActivityTagsListWidget->count()==0){
74 QMessageBox::warning(this, tr("FET information"),
75 tr("Empty list of not overlapping activity tags"));
76 return;
77 }
78 if(notOverlappingActivityTagsListWidget->count()==1){
79 QMessageBox::warning(this, tr("FET information"),
80 tr("Only one selected activity tag"));
81 return;
82 }
83
84 QStringList atl;
85 for(int i=0; i<notOverlappingActivityTagsListWidget->count(); i++)
86 atl.append(notOverlappingActivityTagsListWidget->item(i)->text());
87
88 ctr=new ConstraintActivityTagsNotOverlapping(weight, atl);
89 bool tmp2=gt.rules.addTimeConstraint(ctr);
90
91 if(tmp2){
92 QString s=tr("Constraint added:");
93 s+="\n\n";
94 s+=ctr->getDetailedDescription(gt.rules);
95 LongTextMessageBox::information(this, tr("FET information"), s);
96 }
97 else{
98 QMessageBox::warning(this, tr("FET information"),
99 tr("Constraint NOT added - please report error"));
100 delete ctr;
101 }
102 }
103
addActivityTag()104 void AddConstraintActivityTagsNotOverlappingForm::addActivityTag()
105 {
106 if(activityTagsListWidget->currentRow()<0)
107 return;
108
109 QString actTagName=activityTagsListWidget->currentItem()->text();
110 assert(actTagName!="");
111 int i;
112 //duplicate?
113 for(i=0; i<notOverlappingActivityTagsListWidget->count(); i++)
114 if(actTagName==notOverlappingActivityTagsListWidget->item(i)->text())
115 break;
116 if(i<notOverlappingActivityTagsListWidget->count())
117 return;
118 notOverlappingActivityTagsListWidget->addItem(actTagName);
119 notOverlappingActivityTagsListWidget->setCurrentRow(notOverlappingActivityTagsListWidget->count()-1);
120 }
121
addAllActivityTags()122 void AddConstraintActivityTagsNotOverlappingForm::addAllActivityTags()
123 {
124 for(int tmp=0; tmp<activityTagsListWidget->count(); tmp++){
125 QString actTagName=activityTagsListWidget->item(tmp)->text();
126 assert(actTagName!="");
127 int i;
128 //duplicate?
129 for(i=0; i<notOverlappingActivityTagsListWidget->count(); i++)
130 if(notOverlappingActivityTagsListWidget->item(i)->text()==actTagName)
131 break;
132 if(i<notOverlappingActivityTagsListWidget->count())
133 continue;
134
135 notOverlappingActivityTagsListWidget->addItem(actTagName);
136 }
137
138 notOverlappingActivityTagsListWidget->setCurrentRow(notOverlappingActivityTagsListWidget->count()-1);
139 }
140
removeActivityTag()141 void AddConstraintActivityTagsNotOverlappingForm::removeActivityTag()
142 {
143 if(notOverlappingActivityTagsListWidget->currentRow()<0 || notOverlappingActivityTagsListWidget->count()<=0)
144 return;
145 int tmp=notOverlappingActivityTagsListWidget->currentRow();
146
147 notOverlappingActivityTagsListWidget->setCurrentRow(-1);
148 QListWidgetItem* item=notOverlappingActivityTagsListWidget->takeItem(tmp);
149 delete item;
150 if(tmp<notOverlappingActivityTagsListWidget->count())
151 notOverlappingActivityTagsListWidget->setCurrentRow(tmp);
152 else
153 notOverlappingActivityTagsListWidget->setCurrentRow(notOverlappingActivityTagsListWidget->count()-1);
154 }
155
clear()156 void AddConstraintActivityTagsNotOverlappingForm::clear()
157 {
158 notOverlappingActivityTagsListWidget->clear();
159 }
160