[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdebase/kcontrol/display
From:       Hamish Rodda <rodda () kde ! org>
Date:       2004-09-19 9:20:59
Message-ID: 20040919092059.68A4512660 () office ! kde ! org
[Download RAW message or body]

CVS commit by rodda: 

Two changes:
1) Remember each sub-module's changed state so that if one submodule reports
   it is unchanged after another has reported a change, this module
   will not declare itself unchanged.

2) Include the new nvidia modules if present.


  M +40 -26    display.cpp   1.12
  M +6 -6      display.h   1.8


--- kdebase/kcontrol/display/display.cpp  #1.11:1.12
@@ -32,14 +32,16 @@ K_EXPORT_COMPONENT_FACTORY ( kcm_display
 
 KCMDisplay::KCMDisplay( QWidget *parent, const char *name, const QStringList& )
-    : KCModule( parent, name ),
-      m_randr( 0 ), m_gamma( 0 ), m_xiner( 0 ), m_energy( 0 )
+    : KCModule( parent, name )
+    , m_changed(false)
 {
   m_tabs = new QTabWidget( this );
 
-  m_randr = addTab( "randr", i18n( "Size && Orientation" ) );
-  m_gamma = addTab( "kgamma", i18n( "Monitor Gamma" ) );
+  addTab( "randr", i18n( "Size && Orientation" ) );
+  addTab( "nvidiadisplay", i18n( "Graphics Adaptor" ) );
+  addTab( "nvidia3d", i18n( "3D Options" ) );
+  addTab( "kgamma", i18n( "Monitor Gamma" ) );
   if ( QApplication::desktop()->isVirtualDesktop() )
-    m_xiner = addTab( "xinerama", i18n( "Multiple Monitors" ) );
-  m_energy = addTab( "energy", i18n( "Power Control" ) );
+    addTab( "xinerama", i18n( "Multiple Monitors" ) );
+  addTab( "energy", i18n( "Power Control" ) );
 
   QVBoxLayout *top = new QVBoxLayout( this, 0, KDialog::spacingHint() );
@@ -50,5 +52,5 @@ KCMDisplay::KCMDisplay( QWidget *parent,
 }
 
-KCModule* KCMDisplay::addTab( const QString &name, const QString &label )
+void KCMDisplay::addTab( const QString &name, const QString &label )
 {
   QWidget *page = new QWidget( m_tabs, name.latin1() );
@@ -62,34 +64,46 @@ KCModule* KCMDisplay::addTab( const QStr
     m_tabs->addTab( page, label );
 
-    connect( kcm, SIGNAL( changed(bool) ), SIGNAL( changed(bool) ) );
+    connect( kcm, SIGNAL( changed(bool) ), SLOT( moduleChanged(bool) ) );
+    m_modules.insert(kcm, false);
   }
   else
     delete page;
-
-  return kcm;
 }
 
 void KCMDisplay::load()
 {
-  if ( m_randr )
-    m_randr->load();
-  if ( m_gamma )
-    m_gamma->load();
-  if ( m_xiner )
-    m_xiner->load();
-  if ( m_energy )
-    m_energy->load();
+  for (QMap<KCModule*, bool>::ConstIterator it = m_modules.begin(); it != \
m_modules.end(); ++it) +    it.key()->load();
 }
 
 void KCMDisplay::save()
 {
-  if ( m_randr )
-    m_randr->save();
-  if ( m_gamma )
-    m_gamma->save();
-  if ( m_xiner )
-    m_xiner->save();
-  if ( m_energy )
-    m_energy->save();
+  for (QMap<KCModule*, bool>::Iterator it = m_modules.begin(); it != \
m_modules.end(); ++it) +    if (it.data())
+      it.key()->save();
+}
+
+void KCMDisplay::moduleChanged( bool isChanged )
+{
+  QMap<KCModule*, bool>::Iterator currentModule = \
m_modules.find(static_cast<KCModule*>(const_cast<QObject*>(sender()))); +  \
Q_ASSERT(currentModule != m_modules.end()); +  if (currentModule.data() == isChanged)
+    return;
+    
+  currentModule.data() = isChanged;
+
+  bool c = false;
+  
+  for (QMap<KCModule*, bool>::ConstIterator it = m_modules.begin(); it != \
m_modules.end(); ++it) { +    if (it.data()) {
+      c = true;
+      break;
+    }
+  }
+    
+  if (m_changed != c) {
+    m_changed = c;
+    emit changed(c);
+  }
 }
 

--- kdebase/kcontrol/display/display.h  #1.7:1.8
@@ -34,13 +34,13 @@ class KCMDisplay : public KCModule
     void save();
 
-  protected:
-    KCModule* addTab( const QString &name, const QString &label );
+  private slots:
+    void moduleChanged(bool isChanged);
 
   private:
+    void addTab( const QString &name, const QString &label );
+    
     QTabWidget *m_tabs;
-    KCModule *m_randr;
-    KCModule *m_gamma;
-    KCModule *m_xiner;
-    KCModule *m_energy;
+    QMap<KCModule*, bool> m_modules;
+    bool m_changed;
 };
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic