1 #include <QtGui/QApplication>
2 #include <QtGui/QMainWindow>
3 #include <Qt3Support/q3multilineedit.h>
4 #include <QtGui/QDialog>
5 #include <QtGui/QButtonGroup>
6 #include <QtGui/QLabel>
7 #include <QtGui/QLineEdit>
8 #include <Qt3Support/Q3ListBox>
9 #include <QtGui/QPushButton>
10 #include <QtGui/QRadioButton>
11 #include <QtCore/QList>
12 #include <QtCore/qfile.h>
13 #include <QtGui/qcombobox.h>
14 #include <QtGui/QToolTip>
15 #include <QtGui/QFont>
16 #include <QtGui/QPixmap>
17 #include <QtGui/QMessageBox>
22 #include <libconfig.h>
25 #include "AddNodeDialog.h"
37 bool QInstall::check_id(int id)
39 QListIterator<VLPEntry *> nodesIterator(Nodes);
40 VLPEntry *node = NULL;
42 while (nodesIterator.hasNext()) {
43 node = nodesIterator.next();
50 bool QInstall::check_addr(QString addr)
52 QListIterator<VLPEntry *> nodesIterator(Nodes);
53 VLPEntry *node = NULL;
55 while (nodesIterator.hasNext()) {
56 node = nodesIterator.next();
57 if (node->addr == addr)
63 void QInstall::AddNode()
65 dialog::AddNodeDialog dialog(this);
68 int nodeId = dialog.getNodeNumber();
69 QString ipAddress = dialog.getIPAddress();
70 if (check_id(nodeId)) {
71 if (check_addr(ipAddress)) {
73 VLPEntry *pom = new VLPEntry;
75 if (dialog.getConnectionType() == "Explicit") {
78 strcpy(pom->addr, ipAddress.toStdString().c_str());
79 strcpy(pom->progdir, dialog.getProgramsDirectory().toStdString().c_str());
80 strcpy(pom->homedir, dialog.getVLPDirectory().toStdString().c_str());
83 info.sprintf("Node: %d\tAddr: %s\tHome dir: %s",
89 strcpy(pom->item, info.toStdString().c_str());
91 nodelist->insertItem(info);
95 QMessageBox::warning(this, "Error!", "Only one VLP on a single computer!", QMessageBox::Ok);
99 QMessageBox::warning(this, "Error!", "ID must be unique!", QMessageBox::Ok);
104 void QInstall::DelNode()
106 if (nodelist->currentItem() >= 0) {
107 VLPEntry *node = NULL;
108 QString currentNodeInfo = nodelist->text(nodelist->currentItem());
110 QListIterator<VLPEntry *> nodesIterator(Nodes);
112 while (nodesIterator.hasNext()) {
113 node = nodesIterator.next();
114 if (currentNodeInfo == node->item) {
120 if (QMessageBox::question(this,
123 QMessageBox::Ok | QMessageBox::Cancel
124 ) == QMessageBox::Ok) {
125 nodelist->removeItem(nodelist->currentItem());
126 Nodes.removeOne(node);
132 void QInstall::on_actionConfigure_triggered()
136 QPushButton *addbtn, *delbtn, *okbtn, *cancelbtn;
141 //dlg.setStyle(WindowsStyle);
142 nodelist = new Q3ListBox(&dlg);
143 nodelist->setGeometry(20, 40, 480, 160);
145 tmpQLabel = new QLabel(&dlg);
146 tmpQLabel->setGeometry(20, 10, 100, 30);
147 tmpQLabel->setText("Nodes:");
149 addbtn = new QPushButton(&dlg);
150 addbtn->setGeometry(30, 210, 100, 30);
151 addbtn->setText("Add VLP");
152 connect(addbtn, SIGNAL(clicked()), this, SLOT(AddNode()));
154 delbtn = new QPushButton(&dlg);
155 delbtn->setGeometry(150, 210, 100, 30);
156 delbtn->setText("Del VLP");
157 connect(delbtn, SIGNAL(clicked()), this, SLOT(DelNode()));
159 okbtn = new QPushButton(&dlg);
160 okbtn->setGeometry(270, 210, 100, 30);
161 okbtn->setText("Save files");
162 connect(okbtn, SIGNAL(clicked()), &dlg, SLOT(accept()));
164 cancelbtn = new QPushButton(&dlg);
165 cancelbtn->setGeometry(390, 210, 100, 30);
166 cancelbtn->setText("Cancel");
167 connect(cancelbtn, SIGNAL(clicked()), &dlg, SLOT(reject()));
169 dlg.resize(520, 260);
172 if (!Nodes.isEmpty()) {
173 QListIterator<VLPEntry *> nodesIterator(Nodes);
175 while (nodesIterator.hasNext()) {
176 pom = nodesIterator.next();
177 i = Nodes.indexOf(pom);
178 sprintf(pomstr, "%s.cfg", pom->addr);
181 config_setting_t *root, *setting;
184 root = config_root_setting(&cfg);
186 setting = config_setting_get_member(root, "progdir");
188 setting = config_setting_add(root, "progdir", CONFIG_TYPE_STRING);
190 config_setting_set_string(setting, pom->progdir);
192 setting = config_setting_get_member(root, "homedir");
194 setting = config_setting_add(root, "homedir", CONFIG_TYPE_STRING);
196 config_setting_set_string(setting, pom->homedir);
198 setting = config_setting_get_member(root, "node_number");
200 setting = config_setting_add(root, "node_number", CONFIG_TYPE_INT);
202 config_setting_set_int(setting, pom->ID);
204 if (pom->type == 0) {
205 setting = config_setting_get_member(root, "type");
207 setting = config_setting_add(root, "type", CONFIG_TYPE_STRING);
209 config_setting_set_string(setting, "explicit");
211 for (auto node : Nodes) {
213 setting = config_setting_get_member(root, "host");
215 setting = config_setting_add(root, "host", CONFIG_TYPE_STRING);
217 config_setting_set_string(setting, node->addr);
221 if(!config_write_file(&cfg, pomstr)) {
222 fprintf(stderr, "Error while writing to file: %s.\n", pomstr);
224 config_destroy(&cfg);
233 void QInstall::on_actionQuit_triggered()
235 QApplication::instance()->quit();
242 int main(int argc, char **argv)
244 QApplication *app = new QApplication(argc,argv);
245 loglan::vlp::QInstall cfg;