X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingsdlg.cpp;h=50c64137913ef6e3a93c24be5c49eb38910b409c;hp=5f255b1092d8f19f1e576faaddd1034b277eff58;hb=83efa7dcd9771008e7600b4c35db0dde6e0bc995;hpb=613850196857c7e29b0ef5c09175aadb9492642d diff --git a/src/qtui/settingsdlg.cpp b/src/qtui/settingsdlg.cpp index 5f255b10..50c64137 100644 --- a/src/qtui/settingsdlg.cpp +++ b/src/qtui/settingsdlg.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,11 +20,17 @@ #include "settingsdlg.h" +#include "client.h" +#include "iconloader.h" + SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent), _currentPage(0) { ui.setupUi(this); + setModal(true); + setAttribute(Qt::WA_DeleteOnClose, true); + setWindowIcon(SmallIcon("configure")); updateGeometry(); @@ -32,12 +38,33 @@ SettingsDlg::SettingsDlg(QWidget *parent) connect(ui.settingsTree, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelected())); connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); + + connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), SLOT(coreConnectionStateChanged())); + + setButtonStates(); +} + +void SettingsDlg::coreConnectionStateChanged() { + for(int i = 0; i < ui.settingsTree->topLevelItemCount(); i++) { + QTreeWidgetItem *catItem = ui.settingsTree->topLevelItem(i); + for(int j = 0; j < catItem->childCount(); j++) { + QTreeWidgetItem *item = catItem->child(j); + setItemState(item); + } + setItemState(catItem); + } +} + +void SettingsDlg::setItemState(QTreeWidgetItem *item) { + SettingsPage *sp = qobject_cast(item->data(0, SettingsPageRole).value()); + 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; @@ -45,13 +72,24 @@ void SettingsDlg::registerSettingsPage(SettingsPage *sp) { if(!cats.count()) { cat = new QTreeWidgetItem(ui.settingsTree, QStringList(sp->category())); cat->setExpanded(true); - cat->setFlags(Qt::ItemIsEnabled); + cat->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); } else { cat = cats[0]; } - QTreeWidgetItem *item = new QTreeWidgetItem(cat, QStringList(sp->title())); - item->setData(0, SettingsPageRole, qVariantFromValue(sp)); + + QTreeWidgetItem *item; + if(sp->title().isEmpty()) + item = cat; + else + item = new QTreeWidgetItem(cat, QStringList(sp->title())); + + item->setData(0, SettingsPageRole, QVariant::fromValue(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) { @@ -79,7 +117,15 @@ void SettingsDlg::selectPage(SettingsPage *sp) { } if(sp != currentPage()) { - ui.pageTitle->setText(sp->title()); + 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; }