44567b088931f874731c1d0429ffa07684a42643
[vlp.git] / src / lgconfig / NodeListDialog.cpp
1 #include <QtGui/QListWidgetItem>
2 #include <QtGui/QMessageBox>
3
4 #include "lgconfig.h" /* VLPEntry */
5 #include "NodeListDialog.h"
6 #include "AddNodeDialog.h"
7
8 namespace loglan {
9 namespace vlp {
10 namespace dialog {
11
12 NodeListDialog::NodeListDialog(QList<VLPEntry*> *nodes, QWidget * parent)
13         : QDialog(parent)
14 {
15         setupUi(this);
16         
17         _nodes = nodes;
18
19         connect(saveButton, SIGNAL(clicked()), this, SLOT(accept()));
20         connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
21 }
22
23 NodeListDialog::~NodeListDialog()
24 {
25 }
26
27 bool NodeListDialog::check_id(int id)
28 {
29         QListIterator<VLPEntry *> nodesIterator(*_nodes);
30         VLPEntry *node = NULL;
31
32         while (nodesIterator.hasNext()) {
33                 node = nodesIterator.next();
34                 if (node->ID == id)
35                         return false;
36         }
37         return true;
38 }
39
40 bool NodeListDialog::check_addr(QString addr)
41 {
42         QListIterator<VLPEntry *> nodesIterator(*_nodes);
43         VLPEntry *node = NULL;
44
45         while (nodesIterator.hasNext()) {
46                 node = nodesIterator.next();
47                 if (node->addr == addr)
48                         return false;
49         }
50         return true;
51 }
52
53 void NodeListDialog::on_addButton_clicked()
54 {
55         dialog::AddNodeDialog dialog(this);
56
57         if (dialog.exec()) {
58                 int nodeId = dialog.getNodeNumber();
59                 QString ipAddress = dialog.getIPAddress();
60                 if (check_id(nodeId)) {
61                         if (check_addr(ipAddress)) {
62
63                                 VLPEntry *vlpEntry = new VLPEntry;
64                                 vlpEntry->ID = nodeId;
65                                 if (dialog.getConnectionType() == "Explicit") {
66                                         vlpEntry->type = 0;
67                                 }
68                                 strcpy(vlpEntry->addr, ipAddress.toStdString().c_str());
69                                 strcpy(vlpEntry->progdir, dialog.getProgramsDirectory().toStdString().c_str());
70                                 strcpy(vlpEntry->homedir, dialog.getVLPDirectory().toStdString().c_str());
71                                 
72                                 QString info;
73                                 info.sprintf("Node: %d\tAddr: %s\tHome dir: %s",
74                                         vlpEntry->ID,
75                                         vlpEntry->addr,
76                                         vlpEntry->homedir
77                                 );
78
79                                 strcpy(vlpEntry->item, info.toStdString().c_str());
80
81                                 QListWidgetItem * listWidgetItem = new QListWidgetItem;
82                                 listWidgetItem->setText(info);
83                                 nodeList->addItem(listWidgetItem);
84                                 _nodes->append(vlpEntry);
85                         }
86                         else {
87                                 QMessageBox::warning(this,
88                                         "Error!",
89                                         "Only one VLP on a single computer!",
90                                         QMessageBox::Ok
91                                 );
92                         }
93                 }
94                 else {
95                         QMessageBox::warning(this,
96                                 "Error!",
97                                 "ID must be unique!",
98                                 QMessageBox::Ok
99                         );
100                 }
101         }
102 }
103
104 void NodeListDialog::removeNodes(QList<QListWidgetItem *> selectedNodes)
105 {
106         QListIterator<VLPEntry *> nodesIterator(*_nodes);
107
108         fprintf(stderr, " > Removing nodes\n");
109         for (auto selectedItem : selectedNodes) {
110                 fprintf(stderr, " > Selected item\n");
111                 VLPEntry *node = NULL;
112                 QString selectedNodeInfo = selectedItem->text();
113
114                 while (nodesIterator.hasNext()) {
115                         node = nodesIterator.next();
116                         if (selectedNodeInfo == node->item) {
117                                 fprintf(stderr, "   - found\n");
118                                 break;
119                         }
120                 }
121                 if (node != NULL) {
122                         fprintf(stderr, "   - removed\n");
123                         int row = nodeList->row(selectedItem);
124                         delete nodeList->takeItem(row);
125                         _nodes->removeOne(node);
126                 }
127         }
128 }
129
130 void NodeListDialog::on_deleteButton_clicked()
131 {
132         if (nodeList->selectedItems().size() > 0) {
133                 if (QMessageBox::question(this,
134                         "Delete VLP",
135                         "Are you sure?",
136                         QMessageBox::Ok | QMessageBox::Cancel
137                 ) == QMessageBox::Ok) {
138                         removeNodes(nodeList->selectedItems());
139                 }
140         }
141 }
142
143 void NodeListDialog::on_saveButton_clicked()
144 {
145         
146 }
147
148 void NodeListDialog::on_cancelButton_clicked()
149 {
150 }
151
152
153 }
154 }
155 }