1 #include <QtGui/QApplication>
2 #include <QtGui/QMainWindow>
3 #include <Qt3Support/q3multilineedit.h>
4 #include <QtGui/QMenuBar>
5 // #include <qpopmenu.h>
6 #include <QtGui/QDialog>
7 #include <QtGui/QButtonGroup>
8 #include <QtGui/QLabel>
9 #include <QtGui/QLineEdit>
10 #include <Qt3Support/Q3ListBox>
11 #include <QtGui/QPushButton>
12 #include <QtGui/QRadioButton>
13 #include <QtCore/QList>
14 #include <QtCore/qfile.h>
15 #include <QtGui/qcombobox.h>
16 #include <QtGui/QToolTip>
17 #include <QtGui/QFont>
18 #include <QtGui/QPixmap>
19 #include <QtGui/QMessageBox>
24 #include <libconfig.h>
37 class QInstall: public QMainWindow {
43 QList<VLPEntry*> Nodes;
47 bool check_addr(char*);
61 QFont f("Helvetica", 12, QFont::Bold);
64 // infob = new QPushButton(this);
66 setWindowTitle("VLP Configuration Tool");
68 QMenu * programMenu = NULL;
69 programMenu = menuBar()->addMenu("&Program");
70 programMenu->addAction("Configure", this, SLOT(SetOptions()));
71 programMenu->addAction("Quit", app, SLOT(quit()));
73 // bar = new QMenuBar(this);
74 // bar->insertItem("Configure", this, SLOT(SetOptions()));
75 // bar->insertItem("Quit", app, SLOT(quit()));
77 // infob->setGeometry(0, bar->height(), 200, 30);
78 if (mp.load("logo.bmp")) {
79 // infob->setPixmap(mp);
80 // infob->resize(mp.width(), mp.height());
82 // resize(infob->width(), infob->height() + bar->height());
86 bool QInstall::check_id(int id)
94 pom = Nodes.takeFirst();
99 bool QInstall::check_addr(char *addr)
104 while (pom != NULL) {
105 if (strcmp(pom->addr, addr) == 0)
107 pom = Nodes.takeFirst();
113 * @attention Currently not in use
115 void QInstall::Info()
119 void QInstall::AddNode()
123 QLineEdit *id, *addr, *progs, *home;
124 QPushButton *okbtn, *cancelbtn;
128 tmpQLabel = new QLabel(&dlg);
129 tmpQLabel->setGeometry(110, 10, 180, 30);
130 tmpQLabel->setFrameStyle(49);
131 tmpQLabel->setText("Virtual Processor Properties");
133 id = new QLineEdit(&dlg);
134 id->setGeometry(130, 50, 50, 30);
137 tmpQLabel = new QLabel(&dlg);
138 tmpQLabel->setGeometry(20, 50, 90, 30);
139 tmpQLabel->setText("Node number");
141 tmpQLabel = new QLabel(&dlg);
142 tmpQLabel->setGeometry(20, 90, 80, 30);
143 tmpQLabel->setText("IP Address");
145 addr = new QLineEdit(&dlg);
146 addr->setGeometry(130, 90, 120, 30);
149 tmpQLabel = new QLabel(&dlg);
150 tmpQLabel->setGeometry(20, 130, 100, 30);
151 tmpQLabel->setText("Connection type");
153 QComboBox* tmpQComboBox;
154 tmpQComboBox = new QComboBox(&dlg);
155 tmpQComboBox->setGeometry(130, 130, 100, 30);
156 tmpQComboBox->insertItem(0, "Explicit");
158 tmpQLabel = new QLabel(&dlg);
159 tmpQLabel->setGeometry(20, 170, 110, 30);
160 tmpQLabel->setText("Programs directory");
162 progs = new QLineEdit(&dlg);
163 progs->setGeometry(130, 170, 230, 30);
166 tmpQLabel = new QLabel(&dlg);
167 tmpQLabel->setGeometry(20, 210, 100, 30);
168 tmpQLabel->setText("VLP directory");
170 home = new QLineEdit(&dlg);
171 home->setGeometry(130, 210, 230, 30);
174 okbtn = new QPushButton(&dlg);
175 okbtn->setGeometry(80, 250, 100, 30);
176 okbtn->setText("Ok");
177 connect(okbtn,SIGNAL(clicked()), &dlg, SLOT(accept()));
178 cancelbtn = new QPushButton(&dlg);
179 cancelbtn->setGeometry(210, 250, 100, 30);
180 cancelbtn->setText("Cancel");
181 connect(cancelbtn,SIGNAL(clicked()), &dlg, SLOT(reject()));
182 dlg.resize(380, 300);
185 pom->ID = id->text().toInt();
186 if (check_id(pom->ID)) {
187 strcpy(pom->addr, addr->text().toStdString().c_str());
188 if (check_addr(pom->addr)) {
189 if (tmpQComboBox->currentText() == "Explicit") {
192 strcpy(pom->progdir, progs->text().toStdString().c_str());
193 strcpy(pom->homedir, home->text().toStdString().c_str());
195 sprintf(pomstr, "Node: %d\t"
197 "Home dir: %s", pom->ID, pom->addr, pom->homedir);
198 nodelist->insertItem(pomstr);
199 strcpy(pom->item, pomstr);
201 QMessageBox::warning(this, "Error!", "Only one VLP on a single computer!", "Ok");
204 QMessageBox::warning(this, "Error!", "ID must be unique!", "Ok");
209 void QInstall::DelNode()
214 if (nodelist->currentItem() >= 0) {
215 strcpy(pom, nodelist->text(nodelist->currentItem()).toStdString().c_str());
216 vpom = Nodes.first();
217 while (vpom != NULL) {
218 if (strcmp(pom, vpom->item) == 0)
220 vpom = Nodes.takeFirst();
223 if (QMessageBox::question(this, "Delete VLP", "Are you sure?", "Yes", "No")) {
224 nodelist->removeItem(nodelist->currentItem());
225 Nodes.removeOne(vpom);
230 void QInstall::SetOptions()
234 QPushButton *addbtn, *delbtn, *okbtn, *cancelbtn;
239 //dlg.setStyle(WindowsStyle);
240 nodelist = new Q3ListBox(&dlg);
241 nodelist->setGeometry(20, 40, 480, 160);
243 tmpQLabel = new QLabel(&dlg);
244 tmpQLabel->setGeometry(20, 10, 100, 30);
245 tmpQLabel->setText("Nodes:");
247 addbtn = new QPushButton(&dlg);
248 addbtn->setGeometry(30, 210, 100, 30);
249 addbtn->setText("Add VLP");
250 connect(addbtn, SIGNAL(clicked()), this, SLOT(AddNode()));
252 delbtn = new QPushButton(&dlg);
253 delbtn->setGeometry(150, 210, 100, 30);
254 delbtn->setText("Del VLP");
255 connect(delbtn, SIGNAL(clicked()), this, SLOT(DelNode()));
257 okbtn = new QPushButton(&dlg);
258 okbtn->setGeometry(270, 210, 100, 30);
259 okbtn->setText("Save files");
260 connect(okbtn, SIGNAL(clicked()), &dlg, SLOT(accept()));
262 cancelbtn = new QPushButton(&dlg);
263 cancelbtn->setGeometry(390, 210, 100, 30);
264 cancelbtn->setText("Cancel");
265 connect(cancelbtn, SIGNAL(clicked()), &dlg, SLOT(reject()));
267 dlg.resize(520, 260);
270 if (!Nodes.isEmpty()) {
272 while (pom != NULL) {
273 j = Nodes.indexOf(pom);
274 sprintf(pomstr, "%s.cfg", pom->addr);
277 config_setting_t *root, *setting;
280 root = config_root_setting(&cfg);
282 setting = config_setting_get_member(root, "progdir");
284 setting = config_setting_add(root, "progdir", CONFIG_TYPE_STRING);
286 config_setting_set_string(setting, pom->progdir);
288 setting = config_setting_get_member(root, "homedir");
290 setting = config_setting_add(root, "homedir", CONFIG_TYPE_STRING);
292 config_setting_set_string(setting, pom->homedir);
294 setting = config_setting_get_member(root, "node_number");
296 setting = config_setting_add(root, "node_number", CONFIG_TYPE_INT);
298 config_setting_set_int(setting, pom->ID);
300 if (pom->type == 0) {
301 setting = config_setting_get_member(root, "type");
303 setting = config_setting_add(root, "type", CONFIG_TYPE_STRING);
305 config_setting_set_string(setting, "explicit");
307 for (i = 0; i < Nodes.count(); i++) {
308 if (pom != Nodes.at(i)) {
309 setting = config_setting_get_member(root, "host");
311 setting = config_setting_add(root, "host", CONFIG_TYPE_STRING);
313 config_setting_set_string(setting, Nodes.at(i)->addr);
317 if(!config_write_file(&cfg, pomstr)) {
318 fprintf(stderr, "Error while writing to file: %s.\n", pomstr);
320 config_destroy(&cfg);
323 pom = Nodes.takeFirst();
329 #include "lgconfig.moc"
331 int main(int argc, char **argv)
333 app = new QApplication(argc,argv);