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)
40 QListIterator<VLPEntry *> nodesIterator(Nodes);
42 while (nodesIterator.hasNext()) {
43 node = nodesIterator.next();
50 bool QInstall::check_addr(char *addr)
53 QListIterator<VLPEntry *> nodesIterator(Nodes);
55 while (nodesIterator.hasNext()) {
56 node = nodesIterator.next();
57 if (strcmp(node->addr, addr) == 0)
63 void QInstall::AddNode()
65 dialog::AddNodeDialog dialog(this);
71 pom->ID = dialog.getNodeNumber();
72 if (check_id(pom->ID)) {
73 strcpy(pom->addr, dialog.getIPAddress().toStdString().c_str());
74 if (check_addr(pom->addr)) {
75 if (dialog.getConnectionType() == "Explicit") {
78 strcpy(pom->progdir, dialog.getProgramsDirectory().toStdString().c_str());
79 strcpy(pom->homedir, dialog.getVLPDirectory().toStdString().c_str());
83 info.sprintf("Node: %d\tAddr: %s\tHome dir: %s",
84 pom->ID, pom->addr, pom->homedir
87 nodelist->insertItem(info);
88 strcpy(pom->item, info.toStdString().c_str());
90 QMessageBox::warning(this, "Error!", "Only one VLP on a single computer!", "Ok");
93 QMessageBox::warning(this, "Error!", "ID must be unique!", "Ok");
98 void QInstall::DelNode()
103 if (nodelist->currentItem() >= 0) {
104 strcpy(pom, nodelist->text(nodelist->currentItem()).toStdString().c_str());
106 QListIterator<VLPEntry *> nodesIterator(Nodes);
108 while (nodesIterator.hasNext()) {
109 vpom = nodesIterator.next();
110 if (strcmp(pom, vpom->item) == 0)
114 if (QMessageBox::question(this, "Delete VLP", "Are you sure?", "Yes", "No")) {
115 nodelist->removeItem(nodelist->currentItem());
116 Nodes.removeOne(vpom);
121 void QInstall::on_actionConfigure_triggered()
125 QPushButton *addbtn, *delbtn, *okbtn, *cancelbtn;
130 //dlg.setStyle(WindowsStyle);
131 nodelist = new Q3ListBox(&dlg);
132 nodelist->setGeometry(20, 40, 480, 160);
134 tmpQLabel = new QLabel(&dlg);
135 tmpQLabel->setGeometry(20, 10, 100, 30);
136 tmpQLabel->setText("Nodes:");
138 addbtn = new QPushButton(&dlg);
139 addbtn->setGeometry(30, 210, 100, 30);
140 addbtn->setText("Add VLP");
141 connect(addbtn, SIGNAL(clicked()), this, SLOT(AddNode()));
143 delbtn = new QPushButton(&dlg);
144 delbtn->setGeometry(150, 210, 100, 30);
145 delbtn->setText("Del VLP");
146 connect(delbtn, SIGNAL(clicked()), this, SLOT(DelNode()));
148 okbtn = new QPushButton(&dlg);
149 okbtn->setGeometry(270, 210, 100, 30);
150 okbtn->setText("Save files");
151 connect(okbtn, SIGNAL(clicked()), &dlg, SLOT(accept()));
153 cancelbtn = new QPushButton(&dlg);
154 cancelbtn->setGeometry(390, 210, 100, 30);
155 cancelbtn->setText("Cancel");
156 connect(cancelbtn, SIGNAL(clicked()), &dlg, SLOT(reject()));
158 dlg.resize(520, 260);
161 if (!Nodes.isEmpty()) {
162 QListIterator<VLPEntry *> nodesIterator(Nodes);
164 while (nodesIterator.hasNext()) {
165 pom = nodesIterator.next();
166 i = Nodes.indexOf(pom);
167 sprintf(pomstr, "%s.cfg", pom->addr);
170 config_setting_t *root, *setting;
173 root = config_root_setting(&cfg);
175 setting = config_setting_get_member(root, "progdir");
177 setting = config_setting_add(root, "progdir", CONFIG_TYPE_STRING);
179 config_setting_set_string(setting, pom->progdir);
181 setting = config_setting_get_member(root, "homedir");
183 setting = config_setting_add(root, "homedir", CONFIG_TYPE_STRING);
185 config_setting_set_string(setting, pom->homedir);
187 setting = config_setting_get_member(root, "node_number");
189 setting = config_setting_add(root, "node_number", CONFIG_TYPE_INT);
191 config_setting_set_int(setting, pom->ID);
193 if (pom->type == 0) {
194 setting = config_setting_get_member(root, "type");
196 setting = config_setting_add(root, "type", CONFIG_TYPE_STRING);
198 config_setting_set_string(setting, "explicit");
200 for (auto node : Nodes) {
202 setting = config_setting_get_member(root, "host");
204 setting = config_setting_add(root, "host", CONFIG_TYPE_STRING);
206 config_setting_set_string(setting, node->addr);
210 if(!config_write_file(&cfg, pomstr)) {
211 fprintf(stderr, "Error while writing to file: %s.\n", pomstr);
213 config_destroy(&cfg);
222 void QInstall::on_actionQuit_triggered()
224 QApplication::instance()->quit();
231 int main(int argc, char **argv)
233 QApplication *app = new QApplication(argc,argv);
234 loglan::vlp::QInstall cfg;