-void SettingsDlg::selectPage(SettingsPage *sp) {
- if(!sp) {
- _currentPage = 0;
- ui.settingsStack->setCurrentIndex(0);
- ui.pageTitle->setText(tr("Settings"));
- return;
- }
-
- if(!pageIsLoaded[sp]) {
- sp->load();
- pageIsLoaded[sp] = true;
- }
-
- if(sp != currentPage() && currentPage() != 0 && currentPage()->hasChanged()) {
- int ret = QMessageBox::warning(this, tr("Save changes"),
- tr("There are unsaved changes on the current configuration page. Would you like to apply your changes now?"),
- QMessageBox::Discard|QMessageBox::Save|QMessageBox::Cancel, QMessageBox::Cancel);
- if(ret == QMessageBox::Save) {
- if(!applyChanges()) sp = currentPage();
- } else if(ret == QMessageBox::Discard) {
- undoChanges();
- } else sp = currentPage();
- }
-
- if(sp != currentPage()) {
- ui.pageTitle->setText(sp->title());
- ui.settingsStack->setCurrentWidget(sp);
- _currentPage = sp;
- }
- setButtonStates();
+
+void SettingsDlg::setItemState(QTreeWidgetItem *item)
+{
+ SettingsPage *sp = qobject_cast<SettingsPage *>(item->data(0, SettingsPageRole).value<QObject *>());
+ Q_ASSERT(sp);
+ item->setDisabled(!Client::isConnected() && sp->needsCoreConnection());
+}
+
+
+void SettingsDlg::registerSettingsPage(SettingsPage *sp)
+{
+ sp->setParent(ui.settingsStack);
+ ui.settingsStack->addWidget(sp);
+
+ connect(sp, SIGNAL(changed(bool)), this, SLOT(setButtonStates()));
+
+ QTreeWidgetItem *cat;
+ QList<QTreeWidgetItem *> cats = ui.settingsTree->findItems(sp->category(), Qt::MatchExactly);
+ if (!cats.count()) {
+ cat = new QTreeWidgetItem(ui.settingsTree, QStringList(sp->category()));
+ cat->setExpanded(true);
+ cat->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
+ }
+ else {
+ cat = cats[0];
+ }
+
+ QTreeWidgetItem *item;
+ if (sp->title().isEmpty())
+ item = cat;
+ else
+ item = new QTreeWidgetItem(cat, QStringList(sp->title()));
+
+ item->setData(0, SettingsPageRole, QVariant::fromValue<QObject *>(sp));
+ ui.settingsTree->setMinimumWidth(ui.settingsTree->header()->sectionSizeHint(0) + 5);
+ pageIsLoaded[sp] = false;
+ if (!ui.settingsTree->selectedItems().count())
+ ui.settingsTree->setCurrentItem(item);
+
+ setItemState(item);
+}
+
+
+void SettingsDlg::selectPage(SettingsPage *sp)
+{
+ if (!sp) {
+ _currentPage = 0;
+ ui.settingsStack->setCurrentIndex(0);
+ ui.pageTitle->setText(tr("Settings"));
+ return;
+ }
+
+ if (!pageIsLoaded[sp]) {
+ sp->load();
+ pageIsLoaded[sp] = true;
+ }
+
+ if (sp != currentPage() && currentPage() != 0 && currentPage()->hasChanged()) {
+ int ret = QMessageBox::warning(this, tr("Save changes"),
+ tr("There are unsaved changes on the current configuration page. Would you like to apply your changes now?"),
+ QMessageBox::Discard|QMessageBox::Save|QMessageBox::Cancel, QMessageBox::Cancel);
+ if (ret == QMessageBox::Save) {
+ if (!applyChanges()) sp = currentPage();
+ }
+ else if (ret == QMessageBox::Discard) {
+ undoChanges();
+ }
+ else sp = currentPage();
+ }
+
+ if (sp != currentPage()) {
+ if (sp->title().isEmpty()) {
+ ui.pageTitle->setText(sp->category());
+ setWindowTitle(tr("Configure %1").arg(sp->category()));
+ }
+ else {
+ ui.pageTitle->setText(sp->title());
+ setWindowTitle(tr("Configure %1").arg(sp->title()));
+ }
+
+ ui.settingsStack->setCurrentWidget(sp);
+ _currentPage = sp;
+ }
+ setButtonStates();