From 869129b31cbc62bf88c685ab61d419a1815aedc7 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Mon, 20 Aug 2007 13:13:44 +0000 Subject: [PATCH] Checking in current work on settings dialogs. We will move away from SettingsInterface and switch to SettingsPage instead, which will offer support for change notification and stuff. Work is only partly done right now, nothing really works, so the SettingsDlg is disabled for now. Checking in now primarily because I will tackle QxtRPCPeer now with higher priority. --- Quassel.kdevelop.filelist | 3 +- src/plugins/plugin.h | 2 + src/qtgui/CMakeLists.txt | 8 +- src/qtgui/mainwin.cpp | 6 +- src/qtgui/settingsdlg.cpp | 28 +++-- src/qtgui/settingsdlg.h | 12 +- src/qtgui/settingspage.h | 43 +++++++ src/qtgui/settingspages.cpp | 10 ++ src/qtgui/settingspages.h | 25 +++- ...mgmntsettingspage.ui => buffermgmtpage.ui} | 0 ...ctionsettingspage.ui => connectionpage.ui} | 0 src/qtgui/ui/usermgmtpage.ui | 109 ++++++++++++++++++ 12 files changed, 219 insertions(+), 27 deletions(-) create mode 100644 src/qtgui/settingspage.h rename src/qtgui/ui/{buffermgmntsettingspage.ui => buffermgmtpage.ui} (100%) rename src/qtgui/ui/{connectionsettingspage.ui => connectionpage.ui} (100%) create mode 100644 src/qtgui/ui/usermgmtpage.ui diff --git a/Quassel.kdevelop.filelist b/Quassel.kdevelop.filelist index 78be97ae..4d05c530 100644 --- a/Quassel.kdevelop.filelist +++ b/Quassel.kdevelop.filelist @@ -81,11 +81,9 @@ src/qtgui/tabcompleter.cpp src/qtgui/tabcompleter.h src/qtgui/ui src/qtgui/ui/aboutdlg.ui -src/qtgui/ui/buffermgmntsettingspage.ui src/qtgui/ui/bufferviewwidget.ui src/qtgui/ui/bufferwidget.ui src/qtgui/ui/channelwidget.ui -src/qtgui/ui/connectionsettingspage.ui src/qtgui/ui/coreconnectdlg.ui src/qtgui/ui/coresettingspage.ui src/qtgui/ui/identitiesdlg.ui @@ -102,3 +100,4 @@ src/qtgui/guisettings.h src/qtgui/guisettings.cpp src/common/ircuser.h src/common/ircuser.cpp +src/qtgui/settingspage.h diff --git a/src/plugins/plugin.h b/src/plugins/plugin.h index b8c0d135..72268f6b 100644 --- a/src/plugins/plugin.h +++ b/src/plugins/plugin.h @@ -61,6 +61,7 @@ Q_DECLARE_INTERFACE(CorePluginInterface, * the application's settings dialog. * This is also used by built-in settings dialogs. */ +/* class SettingsInterface { public: virtual ~SettingsInterface() {}; @@ -73,6 +74,7 @@ class SettingsInterface { Q_DECLARE_INTERFACE(SettingsInterface, "eu.quassel.plugins.SettingsInterface/1.0"); +*/ /** Plugins implementing this interface will be provided with the raw text the users enters. * The output they generate is in turn treated like generic user input. Note that the order in diff --git a/src/qtgui/CMakeLists.txt b/src/qtgui/CMakeLists.txt index dd5a73c2..edd5c455 100644 --- a/src/qtgui/CMakeLists.txt +++ b/src/qtgui/CMakeLists.txt @@ -1,12 +1,12 @@ SET(qtgui_SRCS bufferview.cpp bufferviewfilter.cpp bufferwidget.cpp channelwidgetinput.cpp chatline.cpp chatwidget.cpp coreconnectdlg.cpp - guisettings.cpp identities.cpp mainwin.cpp qtgui.cpp serverlist.cpp settingsdlg.cpp settingspages.cpp style.cpp tabcompleter.cpp) -SET(qtgui_HDRS style.h) + guisettings.cpp identities.cpp mainwin.cpp qtgui.cpp serverlist.cpp settingsdlg.cpp style.cpp tabcompleter.cpp) +SET(qtgui_HDRS style.h settingspage.h) SET(qtgui_MOCS bufferview.h bufferviewfilter.h bufferwidget.h channelwidgetinput.h chatline.h chatwidget.h coreconnectdlg.h - guisettings.h identities.h mainwin.h qtgui.h serverlist.h settingsdlg.h settingspages.h tabcompleter.h) + guisettings.h identities.h mainwin.h qtgui.h serverlist.h settingsdlg.h tabcompleter.h) SET(qtgui_UICS identitiesdlg.ui identitieseditdlg.ui networkeditdlg.ui mainwin.ui nickeditdlg.ui serverlistdlg.ui servereditdlg.ui coreconnectdlg.ui bufferviewwidget.ui bufferwidget.ui settingsdlg.ui - buffermgmntsettingspage.ui connectionsettingspage.ui) + buffermgmtpage.ui connectionpage.ui usermgmtpage.ui) # This prepends ui/ to the UIC names, so we don't have to do this ourselves. FOREACH(ui ${qtgui_UICS}) diff --git a/src/qtgui/mainwin.cpp b/src/qtgui/mainwin.cpp index 0824c811..74d62679 100644 --- a/src/qtgui/mainwin.cpp +++ b/src/qtgui/mainwin.cpp @@ -27,7 +27,7 @@ #include "coreconnectdlg.h" #include "serverlist.h" #include "settingsdlg.h" -#include "settingspages.h" +//#include "settingspage.h" MainWin::MainWin(QtGui *_gui, QWidget *parent) : QMainWindow(parent), gui(_gui) { ui.setupUi(this); @@ -59,7 +59,7 @@ void MainWin::init() { serverListDlg = new ServerListDlg(this); serverListDlg->setVisible(serverListDlg->showOnStartup()); - setupSettingsDlg(); + //setupSettingsDlg(); setupMenus(); setupViews(); @@ -104,7 +104,7 @@ void MainWin::setupMenus() { connect(ui.actionNetworkList, SIGNAL(triggered()), this, SLOT(showServerList())); connect(ui.actionEditIdentities, SIGNAL(triggered()), serverListDlg, SLOT(editIdentities())); connect(ui.actionSettingsDlg, SIGNAL(triggered()), this, SLOT(showSettingsDlg())); - //ui.actionSettingsDlg->setEnabled(false); + ui.actionSettingsDlg->setEnabled(false); connect(ui.actionAboutQt, SIGNAL(triggered()), QApplication::instance(), SLOT(aboutQt())); // for debugging connect(ui.actionImportBacklog, SIGNAL(triggered()), this, SLOT(importBacklog())); diff --git a/src/qtgui/settingsdlg.cpp b/src/qtgui/settingsdlg.cpp index 33a6e410..42064822 100644 --- a/src/qtgui/settingsdlg.cpp +++ b/src/qtgui/settingsdlg.cpp @@ -27,12 +27,12 @@ SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) { ui.settingsFrame->setWidget(ui.settingsStack); ui.settingsTree->setRootIsDecorated(false); - connect(ui.settingsTree, SIGNAL(itemSelectionChanged()), this, SLOT(pageSelected())); + connect(ui.settingsTree, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelected())); connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); } -void SettingsDlg::registerSettingsPage(SettingsInterface *sp) { - QWidget *w = sp->settingsWidget(); +void SettingsDlg::registerSettingsPage(SettingsPage *sp) { + QWidget *w = sp->widget(); w->setParent(this); ui.settingsStack->addWidget(w); @@ -44,17 +44,25 @@ void SettingsDlg::registerSettingsPage(SettingsInterface *sp) { cat->setFlags(Qt::ItemIsEnabled); } else cat = cats[0]; QTreeWidgetItem *p = new QTreeWidgetItem(cat, QStringList(sp->title())); - p->setData(0, Qt::UserRole, QVariant::fromValue(w)); + pages[QString("%1$%2").arg(sp->category()).arg(sp->title())] = sp; } -void SettingsDlg::pageSelected() { +void SettingsDlg::selectPage(const QString &cat, const QString &title) { + QWidget *w = pages[QString("%1$%2").arg(cat).arg(title)]->widget(); + Q_ASSERT(w); + ui.settingsStack->setCurrentWidget(w); +} + +void SettingsDlg::itemSelected() { QList items = ui.settingsTree->selectedItems(); if(!items.count()) { return; } else { - QWidget *sp = items[0]->data(0, Qt::UserRole).value(); - Q_ASSERT(sp); - ui.settingsStack->setCurrentWidget(sp); + QTreeWidgetItem *parent = items[0]->parent(); + if(!parent) return; + QString cat = parent->text(0); + QString title = items[0]->text(0); + selectPage(cat, title); } } @@ -76,6 +84,6 @@ void SettingsDlg::buttonClicked(QAbstractButton *button) { } void SettingsDlg::applyChanges() { - SettingsInterface *sp = qobject_cast(ui.settingsStack->currentWidget()); - if(sp) sp->applyChanges(); + //SettingsInterface *sp = qobject_cast(ui.settingsStack->currentWidget()); + //if(sp) sp->applyChanges(); } diff --git a/src/qtgui/settingsdlg.h b/src/qtgui/settingsdlg.h index a52cbb64..ff21c58f 100644 --- a/src/qtgui/settingsdlg.h +++ b/src/qtgui/settingsdlg.h @@ -24,23 +24,27 @@ #include #include "ui_settingsdlg.h" -#include "plugin.h" +#include "settingspage.h" class SettingsDlg : public QDialog { Q_OBJECT public: SettingsDlg(QWidget *parent = 0); - void registerSettingsPage(SettingsInterface *); - void unregisterSettingsPage(SettingsInterface *); + void registerSettingsPage(SettingsPage *); + void unregisterSettingsPage(SettingsPage *); + + public slots: + void selectPage(const QString &category, const QString &title); private slots: - void pageSelected(); + void itemSelected(); void buttonClicked(QAbstractButton *); void applyChanges(); private: Ui::SettingsDlg ui; + QHash pages; }; /* diff --git a/src/qtgui/settingspage.h b/src/qtgui/settingspage.h new file mode 100644 index 00000000..2821c217 --- /dev/null +++ b/src/qtgui/settingspage.h @@ -0,0 +1,43 @@ +/*************************************************************************** + * Copyright (C) 2005-07 by The Quassel IRC Development Team * + * devel@quassel-irc.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef _SETTINGSPAGE_H_ +#define _SETTINGSPAGE_H_ + +//! Interface that needs to be implemented by pages of the settings dialog. +class SettingsPage { + public: + virtual ~SettingsPage() {}; + virtual QString category() = 0; + virtual QString title() = 0; + virtual QWidget *widget() = 0; + virtual void saveSettings() = 0; + virtual void loadSettings() = 0; + + virtual bool hasChanged() = 0; + + signals: + void modified(); + +}; + +Q_DECLARE_INTERFACE(SettingsPage, "org.quassel-irc.iface.SettingsPage/1.0"); + +#endif diff --git a/src/qtgui/settingspages.cpp b/src/qtgui/settingspages.cpp index 9d550ca1..9e431855 100644 --- a/src/qtgui/settingspages.cpp +++ b/src/qtgui/settingspages.cpp @@ -27,6 +27,7 @@ void MainWin::setupSettingsDlg() { settingsDlg->registerSettingsPage(new BufferManagementSettingsPage()); settingsDlg->registerSettingsPage(new ConnectionSettingsPage()); + settingsDlg->registerSettingsPage(new AccountManagementSettingsPage()); } @@ -51,4 +52,13 @@ ConnectionSettingsPage::ConnectionSettingsPage() { void ConnectionSettingsPage::applyChanges() { +} + +AccountManagementSettingsPage::AccountManagementSettingsPage() { + ui.setupUi(this); + +} + +void AccountManagementSettingsPage::applyChanges() { + } diff --git a/src/qtgui/settingspages.h b/src/qtgui/settingspages.h index 4e169b5a..3c95afa3 100644 --- a/src/qtgui/settingspages.h +++ b/src/qtgui/settingspages.h @@ -24,14 +24,14 @@ #include #include -#include "plugin.h" -#include "settingsdlg.h" +#include "settingspage.h" #include "ui_buffermgmntsettingspage.h" #include "ui_connectionsettingspage.h" +#include "ui_usermgmtsettingspage.h" class BufferManagementSettingsPage : public QWidget, public SettingsInterface { Q_OBJECT - Q_INTERFACES(SettingsInterface) + Q_INTERFACES(SettingsInterface); public: QString category() { return tr("Buffers"); } @@ -50,7 +50,7 @@ class BufferManagementSettingsPage : public QWidget, public SettingsInterface { class ConnectionSettingsPage : public QWidget, public SettingsInterface { Q_OBJECT - Q_INTERFACES(SettingsInterface) + Q_INTERFACES(SettingsInterface); public: QString category() { return tr("Behavior"); } @@ -66,6 +66,23 @@ class ConnectionSettingsPage : public QWidget, public SettingsInterface { }; +class AccountManagementSettingsPage : public QWidget, public SettingsInterface { + Q_OBJECT + Q_INTERFACES(SettingsInterface); + + public: + QString category() { return tr("Administration"); } + QString title() { return tr("Account Management"); } + QWidget *settingsWidget() { return this; } + + AccountManagementSettingsPage(); + + void applyChanges(); + + private: + Ui::AccountManagementSettingsPage ui; + +}; diff --git a/src/qtgui/ui/buffermgmntsettingspage.ui b/src/qtgui/ui/buffermgmtpage.ui similarity index 100% rename from src/qtgui/ui/buffermgmntsettingspage.ui rename to src/qtgui/ui/buffermgmtpage.ui diff --git a/src/qtgui/ui/connectionsettingspage.ui b/src/qtgui/ui/connectionpage.ui similarity index 100% rename from src/qtgui/ui/connectionsettingspage.ui rename to src/qtgui/ui/connectionpage.ui diff --git a/src/qtgui/ui/usermgmtpage.ui b/src/qtgui/ui/usermgmtpage.ui new file mode 100644 index 00000000..f9f31eda --- /dev/null +++ b/src/qtgui/ui/usermgmtpage.ui @@ -0,0 +1,109 @@ + + AccountManagementSettingsPage + + + + 0 + 0 + 376 + 287 + + + + Form + + + + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Trebuchet MS'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Bitstream Vera Sans'; font-size:11pt;"><span style=" font-weight:600;">Account Management</span></p></body></html> + + + + + + + Qt::Horizontal + + + + + + + + + + + + + + Add... + + + + + + + Remove + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Rename + + + + + + + Password... + + + + + + + Admin + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + -- 2.20.1