Generate class diagram in doxygen docs
[vlp.git] / src / lgconfig / lgconfig.cpp
index f167848b5af6e8dd61ff1e31d90168b26fbe60d4..7b7fca89d910cf4b12b32a7576cb798e1326bc0b 100644 (file)
@@ -1,20 +1,5 @@
 #include <QtGui/QApplication>
-#include <QtGui/QMainWindow>
-#include <Qt3Support/q3multilineedit.h>
-#include <QtGui/QDialog>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <Qt3Support/Q3ListBox>
-#include <QtGui/QPushButton>
-#include <QtGui/QRadioButton>
 #include <QtCore/QList>
-#include <QtCore/qfile.h>
-#include <QtGui/qcombobox.h>
-#include <QtGui/QToolTip>
-#include <QtGui/QFont>
-#include <QtGui/QPixmap>
-#include <QtGui/QMessageBox>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -22,7 +7,8 @@
 #include <libconfig.h>
 
 #include "lgconfig.h"
-#include "AddNodeDialog.h"
+#include "NodeListDialog.h"
+#include "vlp/config.h"
 
 namespace loglan {
 namespace vlp {
@@ -30,189 +16,56 @@ namespace vlp {
 QInstall::QInstall()
 {
        setupUi(this);
-
-       Nodes.clear();
-}
-
-bool QInstall::check_id(int id)
-{
-       VLPEntry *node;
-       QListIterator<VLPEntry *> nodesIterator(Nodes);
-
-       while (nodesIterator.hasNext()) {
-               node = nodesIterator.next();
-               if (node->ID == id)
-                       return FALSE;
-       }
-       return TRUE;
-}
-
-bool QInstall::check_addr(char *addr)
-{
-       VLPEntry *node;
-       QListIterator<VLPEntry *> nodesIterator(Nodes);
-
-       while (nodesIterator.hasNext()) {
-               node = nodesIterator.next();
-               if (strcmp(node->addr, addr) == 0)
-                       return FALSE;
-       }
-       return TRUE;
 }
 
-void QInstall::AddNode()
+void QInstall::on_actionConfigure_triggered()
 {
-       dialog::AddNodeDialog dialog(this);
-
-       VLPEntry *pom;
+       dialog::NodeListDialog dialog(nodes, this);
 
        if (dialog.exec()) {
-               pom = new VLPEntry;
-               pom->ID = dialog.getNodeNumber();
-               if (check_id(pom->ID)) {
-                       strcpy(pom->addr, dialog.getIPAddress().toStdString().c_str());
-                       if (check_addr(pom->addr)) {
-                               if (dialog.getConnectionType() == "Explicit") {
-                                       pom->type=0;
-                               }
-                               strcpy(pom->progdir, dialog.getProgramsDirectory().toStdString().c_str());
-                               strcpy(pom->homedir, dialog.getVLPDirectory().toStdString().c_str());
-                               Nodes.append(pom);
-                               
-                               QString info;
-                               info.sprintf("Node: %d\tAddr: %s\tHome dir: %s",
-                                       pom->ID, pom->addr, pom->homedir
-                               );
+               nodes = dialog.getNodes();
 
-                               nodelist->insertItem(info);
-                               strcpy(pom->item, info.toStdString().c_str());
-                       } else {
-                               QMessageBox::warning(this, "Error!", "Only one VLP on a single computer!", "Ok");
-                       }
-               } else {
-                       QMessageBox::warning(this, "Error!", "ID must be unique!", "Ok");
-               }
-       }
-}
+               if (!nodes.isEmpty()) {
 
-void QInstall::DelNode()
-{
-       char pom[255];
-       VLPEntry *vpom;
-
-       if (nodelist->currentItem() >= 0) {
-               strcpy(pom, nodelist->text(nodelist->currentItem()).toStdString().c_str());
-
-               QListIterator<VLPEntry *> nodesIterator(Nodes);
-               
-               while (nodesIterator.hasNext()) {
-                       vpom = nodesIterator.next();
-                       if (strcmp(pom, vpom->item) == 0)
-                               break;
-               }
-               if (vpom != NULL)
-                       if (QMessageBox::question(this, "Delete VLP", "Are you sure?", "Yes", "No")) {
-                               nodelist->removeItem(nodelist->currentItem());
-                               Nodes.removeOne(vpom);
-                       }
-       }
-}
+                       VLPEntry *pom;
+                       int i;
+                       char pomstr[255];
+
+                       QListIterator<VLPEntry *> nodesIterator(nodes);
 
-void QInstall::on_actionConfigure_triggered()
-{
-       QDialog dlg(this);
-       QLabel *tmpQLabel;
-       QPushButton *addbtn, *delbtn, *okbtn, *cancelbtn;
-       VLPEntry *pom;
-       int i;
-       char pomstr[255];
-
-       //dlg.setStyle(WindowsStyle);
-       nodelist = new Q3ListBox(&dlg);
-       nodelist->setGeometry(20, 40, 480, 160);
-
-       tmpQLabel = new QLabel(&dlg);
-       tmpQLabel->setGeometry(20, 10, 100, 30);
-       tmpQLabel->setText("Nodes:");
-
-       addbtn = new QPushButton(&dlg);
-       addbtn->setGeometry(30, 210, 100, 30);
-       addbtn->setText("Add VLP");
-       connect(addbtn, SIGNAL(clicked()), this, SLOT(AddNode()));
-
-       delbtn = new QPushButton(&dlg);
-       delbtn->setGeometry(150, 210, 100, 30);
-       delbtn->setText("Del VLP");
-       connect(delbtn, SIGNAL(clicked()), this, SLOT(DelNode()));
-
-       okbtn = new QPushButton(&dlg);
-       okbtn->setGeometry(270, 210, 100, 30);
-       okbtn->setText("Save files");
-       connect(okbtn, SIGNAL(clicked()), &dlg, SLOT(accept()));
-
-       cancelbtn = new QPushButton(&dlg);
-       cancelbtn->setGeometry(390, 210, 100, 30);
-       cancelbtn->setText("Cancel");
-       connect(cancelbtn, SIGNAL(clicked()), &dlg, SLOT(reject()));
-
-       dlg.resize(520, 260);
-
-       if (dlg.exec()) {
-               if (!Nodes.isEmpty()) {
-                       QListIterator<VLPEntry *> nodesIterator(Nodes);
-                       
                        while (nodesIterator.hasNext()) {
                                pom = nodesIterator.next();
-                               i = Nodes.indexOf(pom);
+                               i = nodes.indexOf(pom);
                                sprintf(pomstr, "%s.cfg", pom->addr);
 
-                               config_t cfg;
-                               config_setting_t *root, *setting;
-                               config_init(&cfg);
-
-                               root = config_root_setting(&cfg);
-
-                               setting = config_setting_get_member(root, "progdir");
-                               if(!setting) {
-                                       setting = config_setting_add(root, "progdir", CONFIG_TYPE_STRING);
-                               }
-                               config_setting_set_string(setting, pom->progdir);
-
-                               setting = config_setting_get_member(root, "homedir");
-                               if(!setting) {
-                                       setting = config_setting_add(root, "homedir", CONFIG_TYPE_STRING);
-                               }
-                               config_setting_set_string(setting, pom->homedir);
+                               
+                               loglan::vlp::Config config;
 
-                               setting = config_setting_get_member(root, "node_number");
-                               if(!setting) {
-                                       setting = config_setting_add(root, "node_number", CONFIG_TYPE_INT);
-                               }
-                               config_setting_set_int(setting, pom->ID);
+                               config.setProgramDir(pom->progdir);
+                               config.setNodeNumber(pom->ID);
+                               config.setConnectionType(
+                                       (pom->type == 0) ? EXPLICIT : REGISTER
+                               );
 
-                               if (pom->type == 0) {
-                                       setting = config_setting_get_member(root, "type");
-                                       if(!setting) {
-                                               setting = config_setting_add(root, "type", CONFIG_TYPE_STRING);
-                                       }
-                                       config_setting_set_string(setting, "explicit");
-                               }
-                               for (auto node : Nodes) {
+                               std::vector<std::string> hosts;
+                               for (auto node : nodes) {
                                        if (pom != node) {
-                                               setting = config_setting_get_member(root, "host");
-                                               if (!setting) {
-                                                       setting = config_setting_add(root, "host", CONFIG_TYPE_STRING);
-                                               }
-                                               config_setting_set_string(setting, node->addr);
+                                               hosts.push_back(node->addr);
                                        }
                                }
+                               config.setHosts(hosts);
+
+                               config.save(pomstr);
+
+// TODO: add handling of homedir or remove it at all
+//                             setting = config_setting_get_member(root, "homedir");
+//                             if(!setting) {
+//                                     setting = config_setting_add(root, "homedir", CONFIG_TYPE_STRING);
+//                             }
+//                             config_setting_set_string(setting, pom->homedir);
 
-                               if(!config_write_file(&cfg, pomstr)) {
-                                       fprintf(stderr, "Error while writing to file: %s.\n", pomstr);
-                               }
-                               config_destroy(&cfg);
 
-                               pom = Nodes.at(i);
+                               pom = nodes.at(i);
                        }
                }
        }