X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Flgconfig%2Flgconfig.cpp;h=7b7fca89d910cf4b12b32a7576cb798e1326bc0b;hb=refs%2Ftags%2F3.4-b1;hp=b8036db4797d5ba8163eccb1edbb22af1b6608fe;hpb=c4807f0a3bb9f6cbcdbcb00f1d401b8d3a1c2b02;p=vlp.git diff --git a/src/lgconfig/lgconfig.cpp b/src/lgconfig/lgconfig.cpp index b8036db..7b7fca8 100644 --- a/src/lgconfig/lgconfig.cpp +++ b/src/lgconfig/lgconfig.cpp @@ -1,20 +1,5 @@ #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include #include #include #include @@ -22,7 +7,8 @@ #include #include "lgconfig.h" -#include "AddNodeDialog.h" +#include "NodeListDialog.h" +#include "vlp/config.h" namespace loglan { namespace vlp { @@ -30,200 +16,56 @@ namespace vlp { QInstall::QInstall() { setupUi(this); - - Nodes.clear(); -} - -bool QInstall::check_id(int id) -{ - QListIterator nodesIterator(Nodes); - VLPEntry *node = NULL; - - while (nodesIterator.hasNext()) { - node = nodesIterator.next(); - if (node->ID == id) - return false; - } - return true; } -bool QInstall::check_addr(QString addr) -{ - QListIterator nodesIterator(Nodes); - VLPEntry *node = NULL; - - while (nodesIterator.hasNext()) { - node = nodesIterator.next(); - if (node->addr == addr) - return false; - } - return true; -} - -void QInstall::AddNode() +void QInstall::on_actionConfigure_triggered() { - dialog::AddNodeDialog dialog(this); + dialog::NodeListDialog dialog(nodes, this); if (dialog.exec()) { - int nodeId = dialog.getNodeNumber(); - QString ipAddress = dialog.getIPAddress(); - if (check_id(nodeId)) { - if (check_addr(ipAddress)) { - - VLPEntry *pom = new VLPEntry; - pom->ID = nodeId; - if (dialog.getConnectionType() == "Explicit") { - pom->type = 0; - } - strcpy(pom->addr, ipAddress.toStdString().c_str()); - strcpy(pom->progdir, dialog.getProgramsDirectory().toStdString().c_str()); - strcpy(pom->homedir, dialog.getVLPDirectory().toStdString().c_str()); - - QString info; - info.sprintf("Node: %d\tAddr: %s\tHome dir: %s", - pom->ID, - pom->addr, - pom->homedir - ); + nodes = dialog.getNodes(); - strcpy(pom->item, info.toStdString().c_str()); + if (!nodes.isEmpty()) { - nodelist->insertItem(info); - Nodes.append(pom); - } - else { - QMessageBox::warning(this, "Error!", "Only one VLP on a single computer!", QMessageBox::Ok); - } - } - else { - QMessageBox::warning(this, "Error!", "ID must be unique!", QMessageBox::Ok); - } - } -} + VLPEntry *pom; + int i; + char pomstr[255]; -void QInstall::DelNode() -{ - if (nodelist->currentItem() >= 0) { - VLPEntry *node = NULL; - QString currentNodeInfo = nodelist->text(nodelist->currentItem()); - - QListIterator nodesIterator(Nodes); - - while (nodesIterator.hasNext()) { - node = nodesIterator.next(); - if (currentNodeInfo == node->item) { - break; - } - } - - if (node != NULL) { - if (QMessageBox::question(this, - "Delete VLP", - "Are you sure?", - QMessageBox::Ok | QMessageBox::Cancel - ) == QMessageBox::Ok) { - nodelist->removeItem(nodelist->currentItem()); - Nodes.removeOne(node); - } - } - } -} - -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 nodesIterator(Nodes); + QListIterator 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 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); } } }