blob: be8b9d38ebce7341836d898d0e055bcb51a9360a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#include <QPushButton>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QDebug>
#include "backend/db_sqlite.h"
#include "lib.h"
#include "ruleLayout.h"
#include "rulesDialog.h"
RulesDialog::RulesDialog(const Entry &entry) {
BackendDB database;
this->entry_id = entry.id;
// load uic
ui.setupUi(this);
// load rules into object member
this->rules = database.loadRules(entry_id);
// display widgets
this->drawRules();
// set connections
QObject::connect(ui.add_rule_button, &QPushButton::released, this, &RulesDialog::addRule);
}
// for maintaining values when adding/removing rules
void RulesDialog::updateRulesList() {
int i;
for(i = 0; i < ui.rules_layout->children().size(); ++i) {
this->rules[i]->when = Rule::When(qobject_cast<RuleLayout *>(ui.rules_layout->children()[i])->when_widget->currentIndex());
this->rules[i]->date = qobject_cast<RuleLayout *>(ui.rules_layout->children()[i])->date_widget->dateTime();
this->rules[i]->color = qobject_cast<RuleLayout *>(ui.rules_layout->children()[i])->color_widget->text();
this->rules[i]->highlight = qobject_cast<RuleLayout *>(ui.rules_layout->children()[i])->highlight_widget->text();
}
}
void RulesDialog::drawRules() {
RuleLayout *new_layout;
int i;
// remove all children from layout
recursiveClear(ui.rules_layout);
// Draw each rule
for(i = 0; i < this->rules.size(); ++i) {
new_layout = new RuleLayout(*rules[i]);
// connect delete button
QObject::connect(new_layout->del_button, &QPushButton::released, this, [=](){ this->deleteRule(i); });
ui.rules_layout->addLayout(new_layout);
}
}
void RulesDialog::addRule() {
Rule *new_rule = new Rule(0, this->entry_id, Rule::before);
RuleLayout *new_layout = new RuleLayout(*new_rule);
// add new rule to the member variable
this->rules.append(new_rule);
// redraw rules
this->updateRulesList();
this->drawRules();
}
void RulesDialog::deleteRule(int i) {
if(i < 0) return;
if(i >= this->rules.size()) return;
this->updateRulesList();
// mark as needing to be deleted from database if id > 0
if(this->rules[i]->id > 0)
this->deleted_rules.append(*this->rules[i]);
this->rules.removeAt(i);
this->drawRules();
}
void RulesDialog::accept() {
int i;
BackendDB database;
this->updateRulesList();
// update rules in database
for(i = 0; i < this->rules.size(); ++i) {
// insert - this is a new rule
if(this->rules[i]->id == 0)
database.insertRule(*this->rules[i]);
// update - this is an existing rule
else
database.updateRule(*this->rules[i]);
}
// delete deleted rules in database
for(i = 0; i < this->deleted_rules.size(); ++i) {
database.removeRule(this->deleted_rules[i]);
}
QDialog::accept();
}
|