[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