From: Manuel Nickschas Date: Sun, 3 Feb 2008 02:17:57 +0000 (+0000) Subject: Added a container dialog for stand-alone settingspages (SettingsPageDlg). X-Git-Tag: 0.2.0-alpha1~137 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=f18d7db990cb23c87fa3586e19b2f8aa5509a66c Added a container dialog for stand-alone settingspages (SettingsPageDlg). Used that for enabling direct access to the networks settings via File -> Networks. Gotta love modularity... --- diff --git a/Quassel.kdevelop.filelist b/Quassel.kdevelop.filelist index e24ff46e..19f4d2eb 100644 --- a/Quassel.kdevelop.filelist +++ b/Quassel.kdevelop.filelist @@ -44,8 +44,6 @@ src/client/modelpropertymapper.cpp src/client/modelpropertymapper.h src/client/networkmodel.cpp src/client/networkmodel.h -src/client/nickmodel.cpp -src/client/nickmodel.h src/client/quasselui.h src/client/selectionmodelsynchronizer.cpp src/client/selectionmodelsynchronizer.h @@ -162,8 +160,6 @@ src/qtui/debugconsole.cpp src/qtui/debugconsole.h src/qtui/guisettings.cpp src/qtui/guisettings.h -src/qtui/identities.cpp -src/qtui/identities.h src/qtui/inputwidget.cpp src/qtui/inputwidget.h src/qtui/mainwin.cpp @@ -175,10 +171,10 @@ src/qtui/qtui.h src/qtui/qtui.pri src/qtui/qtuistyle.cpp src/qtui/qtuistyle.h -src/qtui/serverlist.cpp -src/qtui/serverlist.h src/qtui/settingsdlg.cpp src/qtui/settingsdlg.h +src/qtui/settingspagedlg.cpp +src/qtui/settingspagedlg.h src/qtui/settingspages src/qtui/settingspages/createidentitydlg.ui src/qtui/settingspages/fontssettingspage.cpp @@ -188,15 +184,12 @@ src/qtui/settingspages/identitiessettingspage.cpp src/qtui/settingspages/identitiessettingspage.h src/qtui/settingspages/identitiessettingspage.ui src/qtui/settingspages/networkeditdlg.ui -src/qtui/settingspages/networkeditdlgnew.ui src/qtui/settingspages/networkssettingspage.cpp src/qtui/settingspages/networkssettingspage.h src/qtui/settingspages/networkssettingspage.ui src/qtui/settingspages/nickeditdlg.ui -src/qtui/settingspages/nickeditdlgnew.ui src/qtui/settingspages/saveidentitiesdlg.ui src/qtui/settingspages/servereditdlg.ui -src/qtui/settingspages/servereditdlgnew.ui src/qtui/settingspages/settingspages.pri src/qtui/topicwidget.cpp src/qtui/topicwidget.h @@ -206,14 +199,8 @@ src/qtui/ui/bufferviewwidget.ui src/qtui/ui/bufferwidget.ui src/qtui/ui/coreconnectdlg.ui src/qtui/ui/debugconsole.ui -src/qtui/ui/identitiesdlg.ui -src/qtui/ui/identitieseditdlg.ui src/qtui/ui/mainwin.ui -src/qtui/ui/networkeditdlg.ui -src/qtui/ui/nickeditdlg.ui src/qtui/ui/nicklistwidget.ui -src/qtui/ui/servereditdlg.ui -src/qtui/ui/serverlistdlg.ui src/qtui/ui/settingsdlg.ui src/qtui/ui/topicwidget.ui src/qtui/verticaldock.cpp diff --git a/src/common/logger.cpp b/src/common/logger.cpp index 26296bb7..de206518 100644 --- a/src/common/logger.cpp +++ b/src/common/logger.cpp @@ -25,7 +25,7 @@ Logger::~Logger() { - //qInstallMsgHandler(0); + qInstallMsgHandler(0); } void messageHandler(QtMsgType type, const char *msg) { @@ -46,5 +46,5 @@ void messageHandler(QtMsgType type, const char *msg) { } Logger::Logger() { - //qInstallMsgHandler(messageHandler); + qInstallMsgHandler(messageHandler); } diff --git a/src/common/main.cpp b/src/common/main.cpp index 6b39f5fc..f34cfd16 100644 --- a/src/common/main.cpp +++ b/src/common/main.cpp @@ -24,6 +24,7 @@ #include #include "global.h" +#include "logger.h" #include "settings.h" #if defined BUILD_CORE @@ -61,6 +62,8 @@ int main(int argc, char **argv) { signal(SIGTERM, handle_signal); signal(SIGINT, handle_signal); + // Logger logger; + Global::registerMetaTypes(); #include "../../version.inc" diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 83032f1d..e88dd355 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -30,6 +30,7 @@ #include "buffermodel.h" #include "nicklistwidget.h" #include "settingsdlg.h" +#include "settingspagedlg.h" #include "signalproxy.h" #include "topicwidget.h" #include "inputwidget.h" @@ -118,8 +119,8 @@ void MainWin::setupMenus() { connect(ui.actionAboutQt, SIGNAL(triggered()), QApplication::instance(), SLOT(aboutQt())); actionEditNetworks = new QAction(QIcon(":/22x22/actions/configure"), tr("Edit &Networks..."), this); - actionEditNetworks->setEnabled(false); // FIXME ui.menuNetworks->addAction(actionEditNetworks); + connect(actionEditNetworks, SIGNAL(triggered()), this, SLOT(showNetworkDlg())); } void MainWin::setupViews() { @@ -330,6 +331,11 @@ void MainWin::systrayActivated( QSystemTrayIcon::ActivationReason activationReas } } +void MainWin::showNetworkDlg() { + SettingsPageDlg dlg(new NetworksSettingsPage(this), this); + dlg.exec(); +} + void MainWin::clientNetworkCreated(NetworkId id) { const Network *net = Client::network(id); QAction *act = new QAction(net->networkName(), this); diff --git a/src/qtui/mainwin.h b/src/qtui/mainwin.h index d194a6fe..e2858961 100644 --- a/src/qtui/mainwin.h +++ b/src/qtui/mainwin.h @@ -61,6 +61,7 @@ class MainWin : public QMainWindow { private slots: void showSettingsDlg(); + void showNetworkDlg(); void showDebugConsole(); void showCoreConnectionDlg(bool autoConnect = false); diff --git a/src/qtui/qtui.pri b/src/qtui/qtui.pri index 033e7beb..bffc1088 100644 --- a/src/qtui/qtui.pri +++ b/src/qtui/qtui.pri @@ -3,15 +3,15 @@ QT_MOD = core gui network SRCS += bufferwidget.cpp chatline-old.cpp \ chatwidget.cpp coreconnectdlg.cpp configwizard.cpp \ - guisettings.cpp mainwin.cpp nicklistwidget.cpp qtui.cpp qtuistyle.cpp settingsdlg.cpp \ + guisettings.cpp mainwin.cpp nicklistwidget.cpp qtui.cpp qtuistyle.cpp settingsdlg.cpp settingspagedlg.cpp \ topicwidget.cpp debugconsole.cpp inputwidget.cpp verticaldock.cpp HDRS += bufferwidget.h chatline-old.h chatwidget.h configwizard.h \ - coreconnectdlg.h mainwin.h nicklistwidget.h qtui.h qtuistyle.h settingsdlg.h \ + coreconnectdlg.h mainwin.h nicklistwidget.h qtui.h qtuistyle.h settingsdlg.h settingspagedlg.h \ topicwidget.h debugconsole.h inputwidget.h verticaldock.h FORMNAMES = mainwin.ui coreaccounteditdlg.ui coreconnectdlg.ui bufferviewwidget.ui bufferwidget.ui nicklistwidget.ui settingsdlg.ui \ - topicwidget.ui debugconsole.ui inputwidget.ui + settingspagedlg.ui topicwidget.ui debugconsole.ui inputwidget.ui for(ui, FORMNAMES) { FRMS += ui/$${ui} diff --git a/src/qtui/settingsdlg.cpp b/src/qtui/settingsdlg.cpp index 919ca34c..eb073193 100644 --- a/src/qtui/settingsdlg.cpp +++ b/src/qtui/settingsdlg.cpp @@ -65,6 +65,7 @@ void SettingsDlg::registerSettingsPage(SettingsPage *sp) { QTreeWidgetItem *item = new QTreeWidgetItem(cat, QStringList(sp->title())); treeItems[sp] = item; pages[QString("%1$%2").arg(sp->category(), sp->title())] = sp; + sp->load(); // TESTING selectPage(sp->category(), sp->title()); } diff --git a/src/qtui/settingsdlg.h b/src/qtui/settingsdlg.h index 31be186d..cefc7806 100644 --- a/src/qtui/settingsdlg.h +++ b/src/qtui/settingsdlg.h @@ -59,17 +59,5 @@ class SettingsDlg : public QDialog { //QSize recommendedSize; }; -/* -class CoreSettingsPage : public QWidget, SettingsInterface { - Q_OBJECT - - public: - - - private: - Ui::CoreSettingsPage ui; - -}; -*/ #endif diff --git a/src/qtui/settingspagedlg.cpp b/src/qtui/settingspagedlg.cpp new file mode 100644 index 00000000..7d36cf5f --- /dev/null +++ b/src/qtui/settingspagedlg.cpp @@ -0,0 +1,107 @@ +/*************************************************************************** + * Copyright (C) 2005-08 by the Quassel IRC 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) version 3. * + * * + * 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. * + ***************************************************************************/ + +#include "settingspagedlg.h" + +SettingsPageDlg::SettingsPageDlg(SettingsPage *page, QWidget *parent) : QDialog(parent) { + ui.setupUi(this); + _currentPage = page; + page->setParent(this); + ui.pageTitle->setText(page->title()); + + // make the scrollarea behave sanely + ui.settingsFrame->setWidgetResizable(true); + ui.settingsFrame->setWidget(page); + + updateGeometry(); + + connect(page, SIGNAL(changed(bool)), this, SLOT(setButtonStates())); + connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); + page->load(); + setButtonStates(); +} + +SettingsPage *SettingsPageDlg::currentPage() const { + return _currentPage; +} + +void SettingsPageDlg::setButtonStates() { + SettingsPage *sp = currentPage(); + ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(sp && sp->hasChanged()); + ui.buttonBox->button(QDialogButtonBox::Apply)->setEnabled(sp && sp->hasChanged()); + ui.buttonBox->button(QDialogButtonBox::Reset)->setEnabled(sp && sp->hasChanged()); + ui.buttonBox->button(QDialogButtonBox::RestoreDefaults)->setEnabled(sp && sp->hasDefaults()); +} + +void SettingsPageDlg::buttonClicked(QAbstractButton *button) { + switch(ui.buttonBox->standardButton(button)) { + case QDialogButtonBox::Ok: + if(applyChanges()) accept(); + break; + case QDialogButtonBox::Apply: + applyChanges(); + break; + case QDialogButtonBox::Cancel: + undoChanges(); + reject(); + break; + case QDialogButtonBox::Reset: + reload(); + break; + case QDialogButtonBox::RestoreDefaults: + loadDefaults(); + break; + default: + break; + } +} + +bool SettingsPageDlg::applyChanges() { + if(!currentPage()) return false; + if(currentPage()->aboutToSave()) { + currentPage()->save(); + return true; + } + return false; +} + +void SettingsPageDlg::undoChanges() { + if(currentPage()) { + currentPage()->load(); + } +} + +void SettingsPageDlg::reload() { + if(!currentPage()) return; + int ret = QMessageBox::question(this, tr("Reload Settings"), tr("Do you like to reload the settings, undoing your changes on this page?"), + QMessageBox::Yes|QMessageBox::No, QMessageBox::No); + if(ret == QMessageBox::Yes) { + currentPage()->load(); + } +} + +void SettingsPageDlg::loadDefaults() { + if(!currentPage()) return; + int ret = QMessageBox::question(this, tr("Restore Defaults"), tr("Do you like to restore the default values for this page?"), + QMessageBox::RestoreDefaults|QMessageBox::Cancel, QMessageBox::Cancel); + if(ret == QMessageBox::Yes) { + currentPage()->defaults(); + } +} diff --git a/src/qtui/settingspagedlg.h b/src/qtui/settingspagedlg.h new file mode 100644 index 00000000..febf8bd1 --- /dev/null +++ b/src/qtui/settingspagedlg.h @@ -0,0 +1,51 @@ +/*************************************************************************** + * Copyright (C) 2005-08 by the Quassel IRC 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) version 3. * + * * + * 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 _SETTINGSPAGEDLG_H_ +#define _SETTINGSPAGEDLG_H_ + +#include +#include "ui_settingspagedlg.h" + +#include "settingspage.h" + +class SettingsPageDlg : public QDialog { + Q_OBJECT + public: + SettingsPageDlg(SettingsPage * page, QWidget *parent = 0); + + SettingsPage *currentPage() const; + + private slots: + void buttonClicked(QAbstractButton *); + bool applyChanges(); + void undoChanges(); + void reload(); + void loadDefaults(); + void setButtonStates(); + + private: + Ui::SettingsPageDlg ui; + + SettingsPage *_currentPage; + +}; + +#endif diff --git a/src/qtui/settingspages/identitiessettingspage.cpp b/src/qtui/settingspages/identitiessettingspage.cpp index bd8fccdb..9c677db9 100644 --- a/src/qtui/settingspages/identitiessettingspage.cpp +++ b/src/qtui/settingspages/identitiessettingspage.cpp @@ -29,7 +29,7 @@ IdentitiesSettingsPage::IdentitiesSettingsPage(QWidget *parent) : SettingsPage(tr("General"), tr("Identities"), parent) { ui.setupUi(this); - setEnabled(false); // need a core connection! + setEnabled(Client::isConnected()); // need a core connection! setWidgetStates(); connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool))); connect(Client::instance(), SIGNAL(identityCreated(IdentityId)), this, SLOT(clientIdentityCreated(IdentityId))); diff --git a/src/qtui/settingspages/networkssettingspage.cpp b/src/qtui/settingspages/networkssettingspage.cpp index 66b76492..cbfa1923 100644 --- a/src/qtui/settingspages/networkssettingspage.cpp +++ b/src/qtui/settingspages/networkssettingspage.cpp @@ -37,7 +37,7 @@ NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("G disconnectedIcon = QIcon(":/22x22/actions/network-disconnect"); currentId = 0; - setEnabled(false); // need a core connection! + setEnabled(Client::isConnected()); // need a core connection! setWidgetStates(); connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool))); connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(clientNetworkAdded(NetworkId))); diff --git a/src/qtui/ui/settingsdlg.ui b/src/qtui/ui/settingsdlg.ui index a4615f79..88f9cee8 100644 --- a/src/qtui/ui/settingsdlg.ui +++ b/src/qtui/ui/settingsdlg.ui @@ -5,8 +5,8 @@ 0 0 - 881 - 663 + 828 + 587 diff --git a/src/qtui/ui/settingspagedlg.ui b/src/qtui/ui/settingspagedlg.ui new file mode 100644 index 00000000..56f75146 --- /dev/null +++ b/src/qtui/ui/settingspagedlg.ui @@ -0,0 +1,107 @@ + + SettingsPageDlg + + + + 0 + 0 + 703 + 588 + + + + Dialog + + + + + + + 75 + true + + + + Settings + + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults + + + + + + + + QScrollArea + QFrame +
QScrollArea
+ 1 +
+
+ + + + buttonBox + accepted() + SettingsPageDlg + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + SettingsPageDlg + reject() + + + 316 + 260 + + + 286 + 274 + + + + +