[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdebase/workspace/systemsettings
From: Darío Andrés Rodríguez <andresbajotierra () gmail ! co
Date: 2009-04-09 15:49:32
Message-ID: 1239292172.146288.20636.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 951549 by darioandres:
KPageDialog -> ( KPageWidget + KDialogButtonBox )
This remove a lot of hacks (an internal widget is not a dialog )
BUG: 180160
M +81 -53 kcmultiwidget.cpp
M +23 -19 kcmultiwidget.h
M +1 -1 mainwindow.cpp
--- trunk/KDE/kdebase/workspace/systemsettings/kcmultiwidget.cpp #951548:951549
@@ -4,6 +4,7 @@
Copyright (c) 2003 Matthias Kretz <kretz@kde.org>
Copyright (c) 2004 Frans Englich <englich@kde.org>
Copyright (c) 2008 Michael Jansen <kde@michael-jansen.biz>
+ Copyright (c) 2009 Dario Andres Rodriguez <andresbajotierra@gmail.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@@ -28,6 +29,10 @@
#include <QProcess>
#include <QScrollArea>
+#include <QtGui/QKeyEvent>
+#include <QtGui/QVBoxLayout>
+#include <QtGui/QWhatsThis>
+
#include <kdebug.h>
#include <kiconloader.h>
#include <klibloader.h>
@@ -39,6 +44,9 @@
#include <kauthorized.h>
#include <ktoolinvocation.h>
+#include <kpushbutton.h>
+#include <kdialogbuttonbox.h>
+
#include "kcmoduleloader.h"
#include "kcmoduleproxy.h"
@@ -59,54 +67,74 @@
bool hasRootKCM;
};
-KCMultiWidget::KCMultiWidget(QWidget *parent, Qt::WindowModality modality)
- : KPageDialog( parent ),
+KCMultiWidget::KCMultiWidget(QWidget *parent)
+ : QWidget( parent ),
d( new KCMultiWidgetPrivate )
{
- InitKIconDialog(i18n("Configure"), modality);
- init();
+ QVBoxLayout * mainLayout = new QVBoxLayout();
+ setLayout( mainLayout );
+
+ m_pageWidget = new KPageWidget( this );
+ mainLayout->addWidget( m_pageWidget );
+
+ connect( m_pageWidget, SIGNAL(currentPageChanged(KPageWidgetItem*, \
KPageWidgetItem*)), + this, SLOT(slotAboutToShow(KPageWidgetItem*, \
KPageWidgetItem* )) ); + m_pageWidget->setFaceType( KPageWidget::Auto );
+
+ m_buttonBox = new KDialogButtonBox( this, Qt::Horizontal );
+ mainLayout->addWidget( m_buttonBox );
+ setupButtonBox();
}
-// Maybe move into init()?
-void KCMultiWidget::InitKIconDialog(const QString& caption,
- Qt::WindowModality modality)
+KCMultiWidget::~KCMultiWidget()
{
- setCaption(caption);
- setButtons(KDialog::Help |
- KDialog::Default |
- KDialog::Apply |
- KDialog::Reset );
- setDefaultButton(KDialog::Reset);
-
- setWindowModality(modality);
+ delete d;
+ delete m_pageWidget;
}
-
-inline void KCMultiWidget::init()
+void KCMultiWidget::setupButtonBox()
{
- // A bit hackish: KCMultiWidget inherits from KPageDialog, but it really is
- // a widget...
- setWindowFlags(Qt::Widget);
-
- enableButton(Apply, false);
- enableButton(Reset, false);
- enableButton(Default, false);
- enableButton(Help, false);
-
- connect(
- this, SIGNAL(currentPageChanged(KPageWidgetItem*, KPageWidgetItem*)),
- this, SLOT(slotAboutToShow(KPageWidgetItem*, KPageWidgetItem* )) );
- setInitialSize(QSize(640,480));
- setFaceType( Auto );
- connect( this, SIGNAL(helpClicked()), this, SLOT(slotHelp()) );
- connect( this, SIGNAL(defaultClicked()), this, SLOT(slotDefault()) );
- connect( this, SIGNAL(applyClicked()), this, SLOT(slotApply()) );
- connect( this, SIGNAL(resetClicked()), this, SLOT(slotReset()) );
+ //Set up buttons
+ m_helpButton = m_buttonBox->addButton( KStandardGuiItem::help(), \
QDialogButtonBox::HelpRole ); + m_defaultsButton = m_buttonBox->addButton( \
KStandardGuiItem::defaults(), QDialogButtonBox::ResetRole ); + m_applyButton = \
m_buttonBox->addButton( KStandardGuiItem::apply(), QDialogButtonBox::ApplyRole ); + \
m_resetButton = m_buttonBox->addButton( KStandardGuiItem::reset(), \
QDialogButtonBox::ResetRole ); +
+ m_helpButton->setEnabled( false );
+ m_defaultsButton->setEnabled( false );
+ m_applyButton->setEnabled( false );
+ m_resetButton->setEnabled( false );
+
+ connect( m_helpButton, SIGNAL(clicked()), this, SLOT(slotHelp()) );
+ connect( m_defaultsButton, SIGNAL(clicked()), this, SLOT(slotDefault()) );
+ connect( m_applyButton, SIGNAL(clicked()), this, SLOT(slotApply()) );
+ connect( m_resetButton, SIGNAL(clicked()), this, SLOT(slotReset()) );
}
-KCMultiWidget::~KCMultiWidget()
+void KCMultiWidget::keyPressEvent ( QKeyEvent * event )
{
- delete d;
+ //Mimic part of the KDialog behaviour
+ if ( event->modifiers() == 0 ) {
+ if ( event->key() == Qt::Key_F1 ) {
+ if ( m_helpButton->isVisible() && m_helpButton->isEnabled() ) {
+ m_helpButton->animateClick();
+ event->accept();
+ return;
+ }
+ }
+ if ( event->key() == Qt::Key_Escape ) {
+ event->accept();
+ if( queryClose() ) //Close modules
+ emit finished();
+ return;
+ }
+ } else if ( event->key() == Qt::Key_F1 && event->modifiers() == \
Qt::ShiftModifier ) { + QWhatsThis::enterWhatsThisMode();
+ event->accept();
+ return;
+ }
+
+ QWidget::keyPressEvent( event );
}
void KCMultiWidget::slotDefault()
@@ -147,12 +175,12 @@
kDebug( 710 ) << state;
foreach( const CreatedModule &it, m_modules )
if( it.kcm->changed() ) {
- enableButton( Apply, true );
- enableButton( Reset, true);
+ m_applyButton->setEnabled( true );
+ m_resetButton->setEnabled( true );
return;
}
- enableButton( Apply, false );
- enableButton( Reset, false);
+ m_applyButton->setEnabled( false );
+ m_resetButton->setEnabled( false );
}
@@ -172,7 +200,7 @@
return;
}
- QScrollArea* moduleScrollArea = new QScrollArea( this );
+ QScrollArea* moduleScrollArea = new QScrollArea( m_pageWidget );
KCModuleProxy *module = new KCModuleProxy( moduleinfo, moduleScrollArea );
moduleScrollArea->setWidget( module );
moduleScrollArea->setWidgetResizable( true );
@@ -207,7 +235,7 @@
if( m_modules.count() == 1 ) {
slotAboutToShow( module );
}
- KPageWidgetItem* page = addPage(moduleScrollArea, moduleinfo.moduleName());
+ KPageWidgetItem* page = m_pageWidget->addPage(moduleScrollArea, \
moduleinfo.moduleName()); page->setIcon( KIcon(moduleinfo.icon()) );
page->setHeader(moduleinfo.comment());
}
@@ -215,7 +243,7 @@
KCModuleProxy* KCMultiWidget::currentModule()
{
- KPageWidgetItem *pageWidget = currentPage();
+ KPageWidgetItem *pageWidget = m_pageWidget->currentPage();
if ( pageWidget == 0 )
return 0;
@@ -232,7 +260,7 @@
QScrollArea *scrollArea = qobject_cast<QScrollArea*>( before->widget() );
KCModuleProxy *module = qobject_cast<KCModuleProxy*>( scrollArea->widget() \
); if (!queryClose(module)) {
- setCurrentPage(before);
+ m_pageWidget->setCurrentPage(before);
return;
}
}
@@ -260,7 +288,7 @@
bool found = false;
foreach( const CreatedModule &it, m_modules ) {
if( it.kcm==module) {
- showButton(User2, it.adminmode);
+ //showButton(User2, it.adminmode);
buttons = it.kcm->buttons();
found = true;
}
@@ -269,14 +297,14 @@
buttons = module->buttons();
}
- showButton(Apply, buttons & KCModule::Apply);
- showButton(Reset, buttons & KCModule::Apply);
+ m_applyButton->setVisible( buttons & KCModule::Apply );
+ m_resetButton->setVisible( buttons & KCModule::Apply );
+
+ m_helpButton->setEnabled( buttons & KCModule::Help );
+ m_defaultsButton->setEnabled( buttons & KCModule::Help );
+
+ //disconnect( this, SIGNAL(user3Clicked()), 0, 0 );
- enableButton( KDialog::Help, buttons & KCModule::Help );
- enableButton( KDialog::Default, buttons & KCModule::Default );
-
- disconnect( this, SIGNAL(user3Clicked()), 0, 0 );
-
// if (module->moduleInfo().needsRootPrivileges() &&
// !module->rootMode() )
// { /* Enable the Admin Mode button */
--- trunk/KDE/kdebase/workspace/systemsettings/kcmultiwidget.h #951548:951549
@@ -28,16 +28,19 @@
#include <QtCore/QList>
// KDE
-#include <kpagedialog.h>
#include <kservice.h>
+#include <kpagewidget.h>
+class QKeyEvent;
+class KDialogButtonBox;
+class KPushButton;
class KCModuleProxy;
class KCModuleInfo;
/**
* @short A method that offers a KDialog containing arbitrary Control Modules.
*/
-class /*KUTILS_EXPORT*/ KCMultiWidget : public KPageDialog
+class /*KUTILS_EXPORT*/ KCMultiWidget : public QWidget
{
Q_OBJECT
@@ -46,23 +49,10 @@
* Constructs a new KCMultiWidget
*
* @param parent The parent widget
- * @param modality Qt::WindowModality value indicating the modality of the \
window.
**/
- KCMultiWidget( QWidget *parent=0,
- Qt::WindowModality modality = Qt::NonModal );
+ KCMultiWidget( QWidget *parent=0 );
/**
- * Initialize the KIconDialog widget
- *
- * @param caption Specify the caption for the KIconDialog
- * @param modality Qt::WindowModality value indicating the modality of the \
window.
- * If @p Qt::NonModal, the rest of the program interface
- * (example: other dialogs) is accessible while the dialog is open.
- **/
- void InitKIconDialog(const QString& caption,
- Qt::WindowModality modality = Qt::NonModal);
-
- /**
* Destructor
**/
virtual ~KCMultiWidget();
@@ -119,6 +109,12 @@
*/
void aboutToShow( KCModuleProxy *moduleProxy );
+ /**
+ * Signal to emulate former KDialog behaviour
+ * Emitted when quitting manually (Esc key)
+ */
+ void finished();
+
protected slots:
/**
* This slot is called when the user presses the "Default" Button.
@@ -181,10 +177,10 @@
#endif
private:
+ void setupButtonBox();
-
- void init();
-
+ void keyPressEvent(QKeyEvent *);
+
void apply(KCModuleProxy *module);
void reset(KCModuleProxy *module);
void defaults(KCModuleProxy *module);
@@ -203,6 +199,14 @@
QHash<KCModuleProxy*,QStringList> moduleParentComponents;
QString _docPath;
+ KPageWidget * m_pageWidget;
+ KDialogButtonBox * m_buttonBox;
+
+ KPushButton * m_helpButton;
+ KPushButton * m_resetButton;
+ KPushButton * m_defaultsButton;
+ KPushButton * m_applyButton;
+
class KCMultiWidgetPrivate;
KCMultiWidgetPrivate *d;
};
--- trunk/KDE/kdebase/workspace/systemsettings/mainwindow.cpp #951548:951549
@@ -327,7 +327,7 @@
groupWidget = moduleItemToWidgetDict[mItem->service];
if( !groupWidget ) {
- groupWidget = new KCMultiWidget(windowStack, Qt::NonModal); // THAT ZERO IS \
NEW (actually the 0 can go, jr) + groupWidget = new \
KCMultiWidget(windowStack); windowStack->addWidget(groupWidget);
moduleItemToWidgetDict.insert(mItem->service,groupWidget);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic