1 #include <QtGui/QDialog>
6 OptionsDialog::OptionsDialog(QWidget * parent)
11 connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
12 connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
14 loadConfig("vlp.cfg");
17 OptionsDialog::~OptionsDialog()
22 * Adds IP address to the configuration.
23 * Additional window is displayed to add address to the list
25 void OptionsDialog::on_addConnectionButton_clicked()
27 QDialog d(this, Qt::Dialog);
28 QLabel lab("IP Address:", &d);
30 QPushButton ob("", &d);
31 QPushButton cb("", &d);
34 ob.setGeometry(30, 60, 80, 30);
37 lab.setGeometry(10, 10, 60, 30);
38 lab.setText("Address");
39 ed.setGeometry(70, 10, 140, 30);
40 cb.setGeometry(130, 60, 80, 30);
43 connect(&ob, SIGNAL(clicked()), &d, SLOT(accept()));
44 connect(&cb, SIGNAL(clicked()), &d, SLOT(reject()));
46 if (strcmp(ed.text().toAscii().data(), "") != 0) {
47 connections->addItem(ed.text());
53 * Deletes current address from available connections.
55 void OptionsDialog::on_delConnectionButton_clicked()
57 if (connections->currentRow() != -1) {
58 connections->takeItem(connections->currentRow());
63 * Loads configuration from the given file.
65 * @see QKernel::LoadConfig
67 * @param fname Filename of the configuration file.
69 void OptionsDialog::loadConfig(char * fname)
72 config_setting_t *setting;
75 /* Hack for checking if file exists without using external libs.*/
76 FILE * file = fopen(fname, "rt");
78 fprintf(stderr, "Error: Cannot load configuration file %s!\n", fname);
81 /* File exists, so file has been locked. Release it. */
85 /* Read the file. If there is an error, report it and exit. */
86 if (!config_read(&cfg, file)) {
87 fprintf(stderr, "%s! In file %s, line %d\n",
88 config_error_text(&cfg),
89 config_error_file(&cfg),
90 config_error_line(&cfg));
96 setting = config_lookup(&cfg, "node_number");
98 nodeNumber->setValue(config_setting_get_int(setting));
100 fprintf(stderr, "%s! In file %s, '%s' was not found.\n",
101 "Warning", fname, "node_number");
102 config_destroy(&cfg);
107 setting = config_lookup(&cfg, "type");
109 /* same as strcmp(..) == 0 */
110 if (!strcmp(config_setting_get_string(setting), "explicit")) {
111 explicitConnectionMode->setEnabled(true);
112 registrationConnectionMode->setDisabled(true);
114 registrationConnectionMode->setEnabled(true);
115 explicitConnectionMode->setDisabled(true);
118 fprintf(stderr, "%s! In file %s, '%s' was not found.\n", "Warning", fname, "type");
121 setting = config_lookup(&cfg, "host");
123 switch(config_setting_type(setting)) {
124 /* TODO: Deprecated. Made for back compatibility. */
125 case CONFIG_TYPE_STRING:
126 connections->addItem(config_setting_get_string(setting));
128 case CONFIG_TYPE_ARRAY: {
129 int size = config_setting_length(setting);
130 for (int i = 0; i < size; i++) {
131 connections->addItem(config_setting_get_string_elem(setting, i));
136 fprintf(stderr, "%s! In file %s, bad entry type for %s."
137 " Will not be read.\n",
138 "Error", fname, "host");
141 fprintf(stderr, "%s! In file %s, '%s' was not found.\n",
142 "Warning", fname, "host");
145 setting = config_lookup(&cfg, "progdir");
147 programsDirectory->setText(config_setting_get_string(setting));
149 fprintf(stderr, "%s! In file %s, '%s' was not found.\n", "Warning", fname, "progdir");
152 setting = config_lookup(&cfg, "homedir");
154 homeDir = config_setting_get_string(setting);
156 fprintf(stderr, "%s! In file %s, '%s' was not found.\n", "Warning", fname, "homedir");
159 config_destroy(&cfg);
163 void OptionsDialog::saveConfig(char * fname)
166 config_setting_t *root;
167 config_setting_t *setting;
170 root = config_root_setting(&cfg);
172 setting = config_setting_add(root, "progdir", CONFIG_TYPE_STRING);
173 config_setting_set_string(setting, programsDirectory->text().toStdString().c_str());
175 setting = config_setting_add(root, "node_number", CONFIG_TYPE_INT);
176 config_setting_set_int(setting, nodeNumber->value());
178 setting = config_setting_add(root, "homedir", CONFIG_TYPE_STRING);
179 config_setting_set_string(setting, homeDir);
181 setting = config_setting_add(root, "type", CONFIG_TYPE_STRING);
182 if (explicitConnectionMode->isChecked()) {
183 config_setting_set_string(setting, "explicit");
185 config_setting_t *hosts = NULL;
186 hosts = config_setting_add(root, "host", CONFIG_TYPE_ARRAY);
187 for(int i = 0; i < connections->count(); i++) {
188 setting = config_setting_add(hosts, NULL, CONFIG_TYPE_STRING);
189 config_setting_set_string(setting, connections->item(i)->text().toStdString().c_str());
192 config_setting_set_string(setting, "register");
195 if (!config_write_file(&cfg, fname)) {
196 fprintf(stderr, "Error while writing to file: %s.\n", fname);
198 config_destroy(&cfg);