summaryrefslogtreecommitdiffstats
path: root/kcontrol/display/display.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/display/display.cpp')
-rw-r--r--kcontrol/display/display.cpp110
1 files changed, 110 insertions, 0 deletions
diff --git a/kcontrol/display/display.cpp b/kcontrol/display/display.cpp
new file mode 100644
index 000000000..1c514810c
--- /dev/null
+++ b/kcontrol/display/display.cpp
@@ -0,0 +1,110 @@
+/* This file is part of the KDE project
+ Copyright (C) 2003-2004 Nadeem Hasan <[email protected]>
+
+ 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; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <qapplication.h>
+#include <qlayout.h>
+#include <qtabwidget.h>
+
+#include <kcmoduleloader.h>
+#include <kdialog.h>
+#include <kgenericfactory.h>
+
+#include "display.h"
+
+typedef KGenericFactory<KCMDisplay, QWidget> DisplayFactory;
+K_EXPORT_COMPONENT_FACTORY ( kcm_display, DisplayFactory( "display" ) )
+
+KCMDisplay::KCMDisplay( QWidget *parent, const char *name, const QStringList& )
+ : KCModule( parent, name )
+ , m_changed(false)
+{
+ m_tabs = new QTabWidget( this );
+
+ addTab( "randr", i18n( "Size && Orientation" ) );
+ addTab( "nvidiadisplay", i18n( "Graphics Adaptor" ) );
+ addTab( "nvidia3d", i18n( "3D Options" ) );
+ addTab( "kgamma", i18n( "Monitor Gamma" ) );
+ if ( QApplication::desktop()->isVirtualDesktop() )
+ addTab( "xinerama", i18n( "Multiple Monitors" ) );
+ addTab( "energy", i18n( "Power Control" ) );
+
+ QVBoxLayout *top = new QVBoxLayout( this, 0, KDialog::spacingHint() );
+ top->addWidget( m_tabs );
+
+ setButtons( Apply|Help );
+ load();
+}
+
+void KCMDisplay::addTab( const QString &name, const QString &label )
+{
+ QWidget *page = new QWidget( m_tabs, name.latin1() );
+ QVBoxLayout *top = new QVBoxLayout( page, KDialog::marginHint() );
+
+ KCModule *kcm = KCModuleLoader::loadModule( name, page );
+
+ if ( kcm )
+ {
+ top->addWidget( kcm );
+ m_tabs->addTab( page, label );
+
+ connect( kcm, SIGNAL( changed(bool) ), SLOT( moduleChanged(bool) ) );
+ m_modules.insert(kcm, false);
+ }
+ else
+ delete page;
+}
+
+void KCMDisplay::load()
+{
+ for (QMap<KCModule*, bool>::ConstIterator it = m_modules.begin(); it != m_modules.end(); ++it)
+ it.key()->load();
+}
+
+void KCMDisplay::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);
+ }
+}
+
+#include "display.moc"