1 #include <QtGui/QDialog>
6 OptionsDialog::OptionsDialog(QString configFilePath, QWidget * parent)
11 connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
12 connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
14 loadConfig(configFilePath.toStdString().c_str());
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(const char * fname)
72 config_setting_t *setting;
74 /* Hack for checking if file exists without using external libs.*/
75 FILE * file = fopen(fname, "rt");
77 fprintf(stderr, "Error: Cannot load configuration file %s!\n", fname);
80 /* File exists, so file has been locked. Release it. */
84 /* Read the file. If there is an error, report it and exit. */
85 if (!config_read(&cfg, file)) {
86 fprintf(stderr, "%s! In file %s, line %d\n",
87 config_error_text(&cfg),
88 config_error_file(&cfg),
89 config_error_line(&cfg));
95 setting = config_lookup(&cfg, "node_number");
97 nodeNumber->setValue(config_setting_get_int(setting));
99 fprintf(stderr, "%s! In file %s, '%s' was not found.\n",
100 "Warning", fname, "node_number");
101 config_destroy(&cfg);
106 setting = config_lookup(&cfg, "type");
108 /* same as strcmp(..) == 0 */
109 if (!strcmp(config_setting_get_string(setting), "explicit")) {
110 explicitConnectionMode->setEnabled(true);
111 registrationConnectionMode->setDisabled(true);
113 registrationConnectionMode->setEnabled(true);
114 explicitConnectionMode->setDisabled(true);
117 fprintf(stderr, "%s! In file %s, '%s' was not found.\n", "Warning", fname, "type");
120 setting = config_lookup(&cfg, "host");
122 switch(config_setting_type(setting)) {
123 /* TODO: Deprecated. Made for back compatibility. */
124 case CONFIG_TYPE_STRING:
125 connections->addItem(config_setting_get_string(setting));
127 case CONFIG_TYPE_ARRAY: {
128 int size = config_setting_length(setting);
129 for (int i = 0; i < size; i++) {
130 connections->addItem(config_setting_get_string_elem(setting, i));
135 fprintf(stderr, "%s! In file %s, bad entry type for %s."
136 " Will not be read.\n",
137 "Error", fname, "host");
140 fprintf(stderr, "%s! In file %s, '%s' was not found.\n",
141 "Warning", fname, "host");
144 setting = config_lookup(&cfg, "progdir");
146 programsDirectory->setText(config_setting_get_string(setting));
148 fprintf(stderr, "%s! In file %s, '%s' was not found.\n", "Warning", fname, "progdir");
151 config_destroy(&cfg);
155 void OptionsDialog::saveConfig(QString fname)
157 saveConfig(fname.toStdString().c_str());
160 void OptionsDialog::saveConfig(const char * fname)
163 config_setting_t *root;
164 config_setting_t *setting;
167 root = config_root_setting(&cfg);
169 setting = config_setting_add(root, "progdir", CONFIG_TYPE_STRING);
170 config_setting_set_string(setting, programsDirectory->text().toStdString().c_str());
172 setting = config_setting_add(root, "node_number", CONFIG_TYPE_INT);
173 config_setting_set_int(setting, nodeNumber->value());
175 setting = config_setting_add(root, "type", CONFIG_TYPE_STRING);
176 if (explicitConnectionMode->isChecked()) {
177 config_setting_set_string(setting, "explicit");
179 config_setting_t *hosts = NULL;
180 hosts = config_setting_add(root, "host", CONFIG_TYPE_ARRAY);
181 for(int i = 0; i < connections->count(); i++) {
182 setting = config_setting_add(hosts, NULL, CONFIG_TYPE_STRING);
183 config_setting_set_string(setting, connections->item(i)->text().toStdString().c_str());
186 config_setting_set_string(setting, "register");
189 if (!config_write_file(&cfg, fname)) {
190 fprintf(stderr, "Error while writing to file: %s.\n", fname);
192 config_destroy(&cfg);