ModulePreferencesScrollArea::ModulePreferencesScrollArea(module_t *module, QWidget *parent) : QScrollArea(parent), ui(new Ui::ModulePreferencesScrollArea), module_(module) { ui->setupUi(this); if (!module) return; /* Add items for each of the preferences */ prefs_pref_foreach(module, pref_show, (gpointer) ui->verticalLayout); foreach (QLineEdit *le, findChildren<QLineEdit *>()) { pref_t *pref = le->property(pref_prop_).value<pref_t *>(); if (!pref) continue; switch (pref->type) { case PREF_UINT: connect(le, SIGNAL(textEdited(QString)), this, SLOT(uintLineEditTextEdited(QString))); break; case PREF_STRING: case PREF_FILENAME: case PREF_DIRNAME: connect(le, SIGNAL(textEdited(QString)), this, SLOT(stringLineEditTextEdited(QString))); break; case PREF_RANGE: connect(le, SIGNAL(textEdited(QString)), this, SLOT(rangeSyntaxLineEditTextEdited(QString))); break; default: break; } }
void ProtocolPreferencesMenu::setModule(const char *module_name) { QAction *action; int proto_id = -1; if (module_name) { proto_id = proto_get_id_by_filter_name(module_name); } clear(); module_name_.clear(); module_ = NULL; protocol_ = find_protocol_by_id(proto_id); const QString long_name = proto_get_protocol_long_name(protocol_); const QString short_name = proto_get_protocol_short_name(protocol_); if (!module_name || proto_id < 0 || !protocol_) { action = addAction(tr("No protocol preferences available")); action->setDisabled(true); return; } QAction *disable_action = new QAction(tr("Disable %1" UTF8_HORIZONTAL_ELLIPSIS).arg(short_name), this); connect(disable_action, SIGNAL(triggered(bool)), this, SLOT(disableProtocolTriggered())); module_ = prefs_find_module(module_name); if (!module_ || !prefs_is_registered_protocol(module_name)) { action = addAction(tr("%1 has no preferences").arg(long_name)); action->setDisabled(true); addSeparator(); addAction(disable_action); return; } module_name_ = module_name; action = addAction(tr("Open %1 preferences" UTF8_HORIZONTAL_ELLIPSIS).arg(long_name)); action->setData(QString(module_name)); connect(action, SIGNAL(triggered(bool)), this, SLOT(modulePreferencesTriggered())); addSeparator(); prefs_pref_foreach(module_, add_prefs_menu_item, this); if (!actions().last()->isSeparator()) { addSeparator(); } addAction(disable_action); }
ModulePreferencesScrollArea::ModulePreferencesScrollArea(module_t *module, QWidget *parent) : QScrollArea(parent), ui(new Ui::ModulePreferencesScrollArea), module_(module) { ui->setupUi(this); if (!module) return; /* Show the preference's description at the top of the page */ QFont font; font.setBold(TRUE); QLabel *label = new QLabel(module->description); label->setFont(font); ui->verticalLayout->addWidget(label); /* Add items for each of the preferences */ prefs_pref_foreach(module, pref_show, (gpointer) ui->verticalLayout); foreach (QLineEdit *le, findChildren<QLineEdit *>()) { pref_t *pref = VariantPointer<pref_t>::asPtr(le->property(pref_prop_)); if (!pref) continue; switch (prefs_get_type(pref)) { case PREF_DECODE_AS_UINT: connect(le, SIGNAL(textEdited(QString)), this, SLOT(uintLineEditTextEdited(QString))); break; case PREF_UINT: connect(le, SIGNAL(textEdited(QString)), this, SLOT(uintLineEditTextEdited(QString))); break; case PREF_STRING: case PREF_SAVE_FILENAME: case PREF_OPEN_FILENAME: case PREF_DIRNAME: connect(le, SIGNAL(textEdited(QString)), this, SLOT(stringLineEditTextEdited(QString))); break; case PREF_RANGE: case PREF_DECODE_AS_RANGE: connect(le, SIGNAL(textEdited(QString)), this, SLOT(rangeSyntaxLineEditTextEdited(QString))); break; default: break; } }
static guint module_prefs_show(module_t *module, gpointer ti_ptr) { QTreeWidgetItem *item = static_cast<QTreeWidgetItem *>(ti_ptr); if (!item) return 0; QStackedWidget *stacked_widget = item->data(0, Qt::UserRole).value<QStackedWidget *>(); if (!stacked_widget) return 0; if (!module->use_gui) { /* This module uses its own GUI interface to modify its * preferences, so ignore it */ return 0; } /* * Is this module an interior node, with modules underneath it? */ if (!prefs_module_has_submodules(module)) { /* * No. * Does it have any preferences (other than possibly obsolete ones)? */ if (prefs_pref_foreach(module, pref_exists, NULL) == 0) { /* * No. Don't put the module into the preferences window, * as there's nothing to show. * * XXX - we should do the same for interior ndes; if the module * has no non-obsolete preferences *and* nothing under it has * non-obsolete preferences, don't put it into the window. */ return 0; } } /* * Add this module to the tree. */ QTreeWidgetItem *new_item = new QTreeWidgetItem(item); new_item->setText(0, module->title); new_item->setData(0, Qt::UserRole, item->data(0, Qt::UserRole)); /* * Is this an interior node? */ if (prefs_module_has_submodules(module)) { /* * Yes. Walk the subtree and attach stuff to it. */ prefs_modules_foreach_submodules(module, module_prefs_show, (gpointer) new_item); } /* * We create pages for interior nodes even if they don't have * preferences, so that we at least have something to show * if the user clicks on them, even if it's empty. */ /* Scrolled window */ ModulePreferencesScrollArea *mpsa = new ModulePreferencesScrollArea(module); // /* Associate this module with the page's frame. */ // g_object_set_data(G_OBJECT(frame), E_PAGE_MODULE_KEY, module); /* Add the page to the notebook */ stacked_widget->addWidget(mpsa); /* Attach the page to the tree item */ new_item->setData(0, Qt::UserRole, qVariantFromValue(qobject_cast<QWidget *>(mpsa))); return 0; }