10 #include "PreferencesDialog.h"
11 #include "ui_PreferencesDialog.h"
13 #include <QMetaObject>
14 #include <QMetaMethod>
16 #include <QDialogButtonBox>
17 #include <QListWidgetItem>
22 PreferencesDialog::PreferencesDialog(QWidget *parent) :
24 ui(new Ui::PreferencesDialog)
29 loadPreferencesPages();
31 connect( ui->listWidget,
32 SIGNAL(itemSelectionChanged()),
34 SLOT(changeActivePage()));
36 connect(ui->buttonBox_2,
37 SIGNAL(clicked(QAbstractButton*)),
39 SLOT(buttonClicked(QAbstractButton*)));
42 connect(
this, SIGNAL(accepted()),
this, SLOT(applyCurrentValues()));
47 PreferencesDialog::~PreferencesDialog()
54 if (pF->getPreferencePageWidget() == NULL)
return;
57 addPreferencePage(pF->icon(), pF->name(), pF->getPreferencePageWidget());
60 void PreferencesDialog::addPreferencePage(QIcon icon, QString name,
63 new QListWidgetItem(icon, name, ui->listWidget, 0);
67 ui->scrollAreaVerticalLayout->addWidget(page);
72 new QListWidgetItem(page->getIcon(), page->getName(), ui->listWidget, 0);
74 pages[page->getName()] = page;
76 ui->scrollAreaVerticalLayout->addWidget(page);
79 void PreferencesDialog::loadPreferencesPages()
81 QList<IPluginFactory*> plugins = PluginControl::getInstance()->
83 QList<IPluginFactory*>::iterator it;
85 for (it = plugins.begin(); it != plugins.end(); it++)
88 if (pF->getPreferencePageWidget() == NULL)
continue;
90 new QListWidgetItem(pF->icon(),
94 QWidget *page = pF->getPreferencePageWidget();
95 pages[pF->name()] = page;
97 ui->scrollAreaVerticalLayout->addWidget(page);
101 void PreferencesDialog::changeActivePage()
103 if (currentItem != NULL)
105 if(pages.contains(currentItem->text())){
106 pages[currentItem->text()]->hide();
110 currentItem = ui->listWidget->currentItem();
111 if(currentItem != NULL)
113 if(pages.contains(currentItem->text()))
115 pages[currentItem->text()]->show();
116 currentPage = pages[currentItem->text()];
121 void PreferencesDialog::buttonClicked(QAbstractButton* button)
123 QDialogButtonBox::StandardButton std = ui->buttonBox_2->standardButton(button);
125 if(std == QDialogButtonBox::Apply)
126 applyCurrentValues();
129 void PreferencesDialog::applyCurrentValues()
131 QString slotName(
"applyValues()");
133 QWidget *inst = currentPage;
134 int idxSlot = inst->metaObject()
135 ->indexOfSlot( slotName.toStdString().c_str() );
138 QMetaMethod method = inst->metaObject()->method(idxSlot);
139 method.invoke(inst, Qt::DirectConnection);