Code refactoring
[vlp.git] / src / lgconfig / lgconfig.cpp
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 <stdio.h>
18 #include <stdlib.h>
19 #include <unistd.h>
20
21 #include <libconfig.h>
22
23 #include "lgconfig.h"
24 #include "NodeListDialog.h"
25
26 namespace loglan {
27 namespace vlp {
28
29 QInstall::QInstall()
30 {
31         setupUi(this);
32
33         Nodes.clear();
34 }
35
36 void QInstall::on_actionConfigure_triggered()
37 {
38         dialog::NodeListDialog dialog(&Nodes, this);
39
40         if (dialog.exec()) {
41                 if (!Nodes.isEmpty()) {
42
43                         VLPEntry *pom;
44                         int i;
45                         char pomstr[255];
46
47                         QListIterator<VLPEntry *> nodesIterator(Nodes);
48
49                         while (nodesIterator.hasNext()) {
50                                 pom = nodesIterator.next();
51                                 i = Nodes.indexOf(pom);
52                                 sprintf(pomstr, "%s.cfg", pom->addr);
53
54                                 config_t cfg;
55                                 config_setting_t *root, *setting;
56                                 config_init(&cfg);
57
58                                 root = config_root_setting(&cfg);
59
60                                 setting = config_setting_get_member(root, "progdir");
61                                 if(!setting) {
62                                         setting = config_setting_add(root, "progdir", CONFIG_TYPE_STRING);
63                                 }
64                                 config_setting_set_string(setting, pom->progdir);
65
66                                 setting = config_setting_get_member(root, "homedir");
67                                 if(!setting) {
68                                         setting = config_setting_add(root, "homedir", CONFIG_TYPE_STRING);
69                                 }
70                                 config_setting_set_string(setting, pom->homedir);
71
72                                 setting = config_setting_get_member(root, "node_number");
73                                 if(!setting) {
74                                         setting = config_setting_add(root, "node_number", CONFIG_TYPE_INT);
75                                 }
76                                 config_setting_set_int(setting, pom->ID);
77
78                                 if (pom->type == 0) {
79                                         setting = config_setting_get_member(root, "type");
80                                         if(!setting) {
81                                                 setting = config_setting_add(root, "type", CONFIG_TYPE_STRING);
82                                         }
83                                         config_setting_set_string(setting, "explicit");
84                                 }
85                                 for (auto node : Nodes) {
86                                         if (pom != node) {
87                                                 setting = config_setting_get_member(root, "host");
88                                                 if (!setting) {
89                                                         setting = config_setting_add(root, "host", CONFIG_TYPE_STRING);
90                                                 }
91                                                 config_setting_set_string(setting, node->addr);
92                                         }
93                                 }
94
95                                 if(!config_write_file(&cfg, pomstr)) {
96                                         fprintf(stderr, "Error while writing to file: %s.\n", pomstr);
97                                 }
98                                 config_destroy(&cfg);
99
100                                 pom = Nodes.at(i);
101                         }
102                 }
103         }
104 }
105
106
107 void QInstall::on_actionQuit_triggered()
108 {
109         QApplication::instance()->quit();
110 }
111
112 }
113 }
114
115
116 int main(int argc, char **argv)
117 {
118         QApplication *app = new QApplication(argc,argv);
119         loglan::vlp::QInstall cfg;
120         cfg.show();
121         return app->exec();
122 }