8739358531aecf8c439917a697d1afd65a079e47
[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         VLPEntry *pom;
41         int i;
42         char pomstr[255];
43
44         if (dialog.exec()) {
45                 if (!Nodes.isEmpty()) {
46                         QListIterator<VLPEntry *> nodesIterator(Nodes);
47
48                         while (nodesIterator.hasNext()) {
49                                 pom = nodesIterator.next();
50                                 i = Nodes.indexOf(pom);
51                                 sprintf(pomstr, "%s.cfg", pom->addr);
52
53                                 config_t cfg;
54                                 config_setting_t *root, *setting;
55                                 config_init(&cfg);
56
57                                 root = config_root_setting(&cfg);
58
59                                 setting = config_setting_get_member(root, "progdir");
60                                 if(!setting) {
61                                         setting = config_setting_add(root, "progdir", CONFIG_TYPE_STRING);
62                                 }
63                                 config_setting_set_string(setting, pom->progdir);
64
65                                 setting = config_setting_get_member(root, "homedir");
66                                 if(!setting) {
67                                         setting = config_setting_add(root, "homedir", CONFIG_TYPE_STRING);
68                                 }
69                                 config_setting_set_string(setting, pom->homedir);
70
71                                 setting = config_setting_get_member(root, "node_number");
72                                 if(!setting) {
73                                         setting = config_setting_add(root, "node_number", CONFIG_TYPE_INT);
74                                 }
75                                 config_setting_set_int(setting, pom->ID);
76
77                                 if (pom->type == 0) {
78                                         setting = config_setting_get_member(root, "type");
79                                         if(!setting) {
80                                                 setting = config_setting_add(root, "type", CONFIG_TYPE_STRING);
81                                         }
82                                         config_setting_set_string(setting, "explicit");
83                                 }
84                                 for (auto node : Nodes) {
85                                         if (pom != node) {
86                                                 setting = config_setting_get_member(root, "host");
87                                                 if (!setting) {
88                                                         setting = config_setting_add(root, "host", CONFIG_TYPE_STRING);
89                                                 }
90                                                 config_setting_set_string(setting, node->addr);
91                                         }
92                                 }
93
94                                 if(!config_write_file(&cfg, pomstr)) {
95                                         fprintf(stderr, "Error while writing to file: %s.\n", pomstr);
96                                 }
97                                 config_destroy(&cfg);
98
99                                 pom = Nodes.at(i);
100                         }
101                 }
102         }
103 }
104
105
106 void QInstall::on_actionQuit_triggered()
107 {
108         QApplication::instance()->quit();
109 }
110
111 }
112 }
113
114
115 int main(int argc, char **argv)
116 {
117         QApplication *app = new QApplication(argc,argv);
118         loglan::vlp::QInstall cfg;
119         cfg.show();
120         return app->exec();
121 }