From: Marcus Eggenberger Date: Mon, 16 Jun 2008 14:38:55 +0000 (+0200) Subject: Merge branch 'master' of git@git.quassel-irc.org:quassel X-Git-Tag: 0.3.0~379 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=613850196857c7e29b0ef5c09175aadb9492642d;hp=4bee97e877d9ba4677ab90456377822da6203e29 Merge branch 'master' of git@git.quassel-irc.org:quassel --- diff --git a/src/qtui/settingsdlg.cpp b/src/qtui/settingsdlg.cpp index 0b372f62..5f255b10 100644 --- a/src/qtui/settingsdlg.cpp +++ b/src/qtui/settingsdlg.cpp @@ -20,15 +20,11 @@ #include "settingsdlg.h" -SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) { +SettingsDlg::SettingsDlg(QWidget *parent) + : QDialog(parent), + _currentPage(0) +{ ui.setupUi(this); - _currentPage = 0; - - //recommendedSize = layout()->minimumSize(); - - // make the scrollarea behave sanely - ui.settingsFrame->setWidgetResizable(true); - ui.settingsFrame->setWidget(ui.settingsStack); updateGeometry(); @@ -38,21 +34,10 @@ SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) { connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); } -/* -QSize SettingsDlg::sizeHint() const { - return recommendedSize; -} -*/ - -SettingsPage *SettingsDlg::currentPage() const { - return _currentPage; -} - void SettingsDlg::registerSettingsPage(SettingsPage *sp) { sp->setParent(ui.settingsStack); ui.settingsStack->addWidget(sp); - //recommendedSize = recommendedSize.expandedTo(sp->sizeHint()); - //updateGeometry(); + connect(sp, SIGNAL(changed(bool)), this, SLOT(setButtonStates())); QTreeWidgetItem *cat; @@ -61,27 +46,27 @@ void SettingsDlg::registerSettingsPage(SettingsPage *sp) { cat = new QTreeWidgetItem(ui.settingsTree, QStringList(sp->category())); cat->setExpanded(true); cat->setFlags(Qt::ItemIsEnabled); - } else cat = cats[0]; + } else { + cat = cats[0]; + } QTreeWidgetItem *item = new QTreeWidgetItem(cat, QStringList(sp->title())); - treeItems[sp] = item; - pages[QString("%1$%2").arg(sp->category(), sp->title())] = sp; + item->setData(0, SettingsPageRole, qVariantFromValue(sp)); pageIsLoaded[sp] = false; - // TESTING - // selectPage(sp->category(), sp->title()); } -void SettingsDlg::selectPage(const QString &cat, const QString &title) { - SettingsPage *sp = pages[QString("%1$%2").arg(cat, title)]; +void SettingsDlg::selectPage(SettingsPage *sp) { if(!sp) { _currentPage = 0; ui.settingsStack->setCurrentIndex(0); - ui.settingsTree->setCurrentItem(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?"), @@ -92,27 +77,22 @@ void SettingsDlg::selectPage(const QString &cat, const QString &title) { undoChanges(); } else sp = currentPage(); } + if(sp != currentPage()) { ui.pageTitle->setText(sp->title()); ui.settingsStack->setCurrentWidget(sp); - ui.settingsStack->setMinimumSize(sp->minimumSizeHint()); // we don't want our page shrinked, use scrollbars instead... _currentPage = sp; } - ui.settingsTree->setCurrentItem(treeItems[sp]); setButtonStates(); } void SettingsDlg::itemSelected() { QList items = ui.settingsTree->selectedItems(); - if(!items.count()) { - return; - } else { - QTreeWidgetItem *parent = items[0]->parent(); - if(!parent) return; - QString cat = parent->text(0); - QString title = items[0]->text(0); - selectPage(cat, title); + SettingsPage *sp = 0; + if(!items.isEmpty()) { + sp = qobject_cast(items[0]->data(0, SettingsPageRole).value()); } + selectPage(sp); } void SettingsDlg::setButtonStates() { diff --git a/src/qtui/settingsdlg.h b/src/qtui/settingsdlg.h index 3cfda437..ba47da31 100644 --- a/src/qtui/settingsdlg.h +++ b/src/qtui/settingsdlg.h @@ -28,36 +28,35 @@ class SettingsDlg : public QDialog { Q_OBJECT - public: - SettingsDlg(QWidget *parent = 0); - void registerSettingsPage(SettingsPage *); - void unregisterSettingsPage(SettingsPage *); - SettingsPage *currentPage() const; - - //QSize sizeHint() const; - - public slots: - void selectPage(const QString &category, const QString &title); - - private slots: - void itemSelected(); - void buttonClicked(QAbstractButton *); - bool applyChanges(); - void undoChanges(); - void reload(); - void loadDefaults(); - void setButtonStates(); - - private: - Ui::SettingsDlg ui; - - SettingsPage *_currentPage; - QHash pages; - QHash treeItems; - QHash pageIsLoaded; - - //QSize recommendedSize; +public: + SettingsDlg(QWidget *parent = 0); + void registerSettingsPage(SettingsPage *); + void unregisterSettingsPage(SettingsPage *); + + inline SettingsPage *currentPage() const { return _currentPage; } + +public slots: + void selectPage(SettingsPage *sp); // const QString &category, const QString &title); + +private slots: + void itemSelected(); + void buttonClicked(QAbstractButton *); + bool applyChanges(); + void undoChanges(); + void reload(); + void loadDefaults(); + void setButtonStates(); + +private: + Ui::SettingsDlg ui; + + SettingsPage *_currentPage; + QHash pageIsLoaded; + + enum { + SettingsPageRole = Qt::UserRole + }; }; diff --git a/src/qtui/ui/settingsdlg.ui b/src/qtui/ui/settingsdlg.ui index efb131b9..97d41ded 100644 --- a/src/qtui/ui/settingsdlg.ui +++ b/src/qtui/ui/settingsdlg.ui @@ -5,114 +5,84 @@ 0 0 - 828 - 587 + 725 + 575 Configure Quassel - + - - - - - Qt::Horizontal + + + Qt::Horizontal + + + + + 200 + 16777215 + + + + + Settings - - - - 0 - 0 - - - - - 200 - 16777215 - - - + + + + + + + + + 75 + true + + Settings - - - - - - - - - 75 - true - - - - Settings - - - - - - - Qt::Horizontal - - - - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - - - - - 16 - 16 - - - - 0 - - - - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults - - - - + + + + + + Qt::Horizontal + + + + + + + + + 0 + 0 + 492 + 466 + + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults + + - - - QScrollArea - QFrame -
QScrollArea
- 1 -
-