summaryrefslogtreecommitdiffstats
path: root/kutils/ksettings/dialog.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2013-01-26 13:17:21 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2013-01-26 13:17:21 -0600
commitdfe289850f068f19ba4a83ab4e7e22a7e09c13c9 (patch)
treec297348a55df66c571de4525646e0b9762427353 /kutils/ksettings/dialog.cpp
parentb7658a0d5eca24a9d37c6e04f88298ef02389db0 (diff)
downloadtdelibs-dfe289850f068f19ba4a83ab4e7e22a7e09c13c9.tar.gz
tdelibs-dfe289850f068f19ba4a83ab4e7e22a7e09c13c9.zip
Rename a number of libraries and executables to avoid conflicts with KDE4
Diffstat (limited to 'kutils/ksettings/dialog.cpp')
-rw-r--r--kutils/ksettings/dialog.cpp642
1 files changed, 0 insertions, 642 deletions
diff --git a/kutils/ksettings/dialog.cpp b/kutils/ksettings/dialog.cpp
deleted file mode 100644
index e3bfa579f..000000000
--- a/kutils/ksettings/dialog.cpp
+++ /dev/null
@@ -1,642 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2003 Matthias Kretz <kretz@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-
-*/
-
-#include "ksettings/dialog.h"
-
-
-#include <kcmultidialog.h>
-#include <klocale.h>
-#include <kservicegroup.h>
-#include <kdebug.h>
-#include <ktrader.h>
-#include <kplugininfo.h>
-#include "ksettings/dispatcher.h"
-#include "ksettings/componentsdialog.h"
-#include <ksimpleconfig.h>
-#include <kstandarddirs.h>
-#include <kiconloader.h>
-#include <tqvbox.h>
-#include <tqlabel.h>
-#include "tdecmoduleinfo.h"
-
-namespace KSettings
-{
-
-struct GroupInfo
-{
- TQString id;
- TQString name;
- TQString comment;
- TQString icon;
- int weight;
- TQString parentid;
- TQWidget * page;
-};
-
-// The TreeList can get really complicated. That's why a tree data structure
-// is necessary to make it suck less
-class PageNode
-{
- private:
- typedef TQValueList<PageNode*> List;
- enum Type { KCM, Group, Root };
- union Value
- {
- TDECModuleInfo * kcm;
- GroupInfo * group;
- };
- Type m_type;
- Value m_value;
-
- Dialog * m_dialog;
- List m_children;
- PageNode * m_parent;
- bool m_visible;
- bool m_dirty;
-
- protected:
- PageNode( TDECModuleInfo * info, PageNode * parent )
- : m_type( KCM )
- , m_parent( parent )
- , m_visible( true )
- , m_dirty( true )
- {
- m_value.kcm = info;
- m_dialog = parent->m_dialog;
- }
-
- PageNode( GroupInfo & group, PageNode * parent )
- : m_type( Group )
- , m_parent( parent )
- , m_visible( true )
- , m_dirty( true )
- {
- m_value.group = new GroupInfo( group );
- m_value.group->page = 0;
- m_dialog = parent->m_dialog;
- }
-
- void bubbleSort( List::Iterator begin, List::Iterator end )
- {
- --end;
- bool finished;
- List::Iterator lastswapped = begin;
- List::Iterator i;
- List::Iterator j;
- while( begin != end )
- {
- finished = true;
- i = j = end;
- do {
- --j;
- if( **i < **j )
- {
- finished = false;
- tqSwap( *i, *j );
- lastswapped = j;
- }
- --i;
- } while( j != begin );
- if( finished )
- return;
- ++lastswapped;
- begin = lastswapped;
- }
- }
-
- public:
- PageNode( Dialog * dialog )
- : m_type( Root )
- , m_dialog( dialog )
- , m_parent( 0 )
- , m_visible( true )
- , m_dirty( true )
- {}
-
- ~PageNode()
- {
- if( KCM == m_type )
- delete m_value.kcm;
- else if( Group == m_type )
- delete m_value.group;
- List::Iterator end = m_children.end();
- for( List::Iterator it = m_children.begin(); it != end; ++it )
- delete ( *it );
- }
-
- int weight() const
- {
- int w = ( KCM == m_type ) ? m_value.kcm->weight()
- : m_value.group->weight;
- kdDebug( 700 ) << k_funcinfo << name() << " " << w << endl;
- return w;
- }
-
- bool operator<( const PageNode & rhs ) const
- {
- return weight() < rhs.weight();
- }
-
- bool isVisible()
- {
- if( m_dirty )
- {
- if( KCM == m_type )
- m_visible = m_dialog->isPluginForKCMEnabled( m_value.kcm );
- else
- {
- m_visible = false;
- List::Iterator end = m_children.end();
- for( List::Iterator it = m_children.begin(); it != end;
- ++it )
- if( ( *it )->isVisible() )
- {
- m_visible = true;
- break;
- }
- }
- m_dirty = false;
- }
- kdDebug( 700 ) << k_funcinfo << "returns " << m_visible << endl;
- return m_visible;
- }
-
- void makeDirty()
- {
- m_dirty = true;
- List::Iterator end = m_children.end();
- for( List::Iterator it = m_children.begin(); it != end; ++it )
- ( *it )->makeDirty();
- }
-
- TQString name() const
- {
- if( Root == m_type )
- return TQString::fromAscii( "root node" );
- return ( KCM == m_type ) ? m_value.kcm->moduleName()
- : m_value.group->name;
- }
-
- TQStringList parentNames() const
- {
- TQStringList ret;
- PageNode * node = m_parent;
- while( node && node->m_type != Root )
- {
- ret.prepend( node->name() );
- node = node->m_parent;
- }
- return ret;
- }
-
- void addToDialog( KCMultiDialog * dlg )
- {
- kdDebug( 700 ) << k_funcinfo << "for " << name() << endl;
- if( ! isVisible() )
- return;
-
- if( KCM == m_type )
- {
- dlg->addModule( *m_value.kcm, parentNames() );
- return;
- }
- if( Group == m_type && 0 == m_value.group->page )
- {
- TQPixmap icon;
- if( ! m_value.group->icon.isNull() )
- icon = SmallIcon( m_value.group->icon,
- IconSize( KIcon::Small ) );
- TQVBox * page = dlg->addVBoxPage( m_value.group->name,
- TQString::null, icon );
- TQLabel * comment = new TQLabel( m_value.group->comment, page );
- comment->setTextFormat( TQt::RichText );
- m_value.group->page = page;
- }
- List::Iterator end = m_children.end();
- for( List::Iterator it = m_children.begin(); it != end; ++it )
- ( *it )->addToDialog( dlg );
- }
-
- void removeFromDialog( KCMultiDialog * dlg )
- {
- kdDebug( 700 ) << k_funcinfo << "for " << name() << endl;
- if( KCM == m_type )
- return;
- if( Root == m_type )
- dlg->removeAllModules();
- List::Iterator end = m_children.end();
- for( List::Iterator it = m_children.begin(); it != end; ++it )
- ( *it )->removeFromDialog( dlg );
- if( Group == m_type )
- {
- delete m_value.group->page;
- m_value.group->page = 0;
- }
- }
-
- void sort()
- {
- kdDebug( 700 ) << k_funcinfo << name() << endl;
- List::Iterator begin = m_children.begin();
- List::Iterator end = m_children.end();
- bubbleSort( begin, end );
- for( List::Iterator it = begin ; it != end; ++it )
- ( *it )->sort();
- }
-
- bool insert( GroupInfo & group )
- {
- if( group.parentid.isNull() )
- {
- if( Root == m_type )
- {
- m_children.append( new PageNode( group, this ) );
- return true;
- }
- else
- kdFatal( 700 ) << "wrong PageNode insertion"
- << kdBacktrace() << endl;
- }
- if( Group == m_type && group.parentid == m_value.group->id )
- {
- m_children.append( new PageNode( group, this ) );
- return true;
- }
- List::Iterator end = m_children.end();
- for( List::Iterator it = m_children.begin(); it != end; ++it )
- if( ( *it )->insert( group ) )
- return true;
- // no parent with the right parentid
- if( Root == m_type )
- {
- m_children.append( new PageNode( group, this ) );
- return true;
- }
- return false;
- }
-
- bool insert( TDECModuleInfo * info, const TQString & parentid )
- {
- if( parentid.isNull() )
- {
- if( Root == m_type )
- {
- m_children.append( new PageNode( info, this ) );
- return true;
- }
- else
- kdFatal( 700 ) << "wrong PageNode insertion"
- << kdBacktrace() << endl;
- }
- if( Group == m_type && parentid == m_value.group->id )
- {
- m_children.append( new PageNode( info, this ) );
- return true;
- }
- List::Iterator end = m_children.end();
- for( List::Iterator it = m_children.begin(); it != end; ++it )
- if( ( *it )->insert( info, parentid ) )
- return true;
- // no parent with the right parentid
- if( Root == m_type )
- {
- m_children.append( new PageNode( info, this ) );
- return true;
- }
- return false;
- }
-
- bool needTree()
- {
- List::ConstIterator end = m_children.end();
- for( List::ConstIterator it = m_children.begin(); it != end; ++it )
- if( ( *it )->m_children.count() > 0 )
- return true;
- return false;
- }
-
- bool singleChild()
- {
- return ( m_children.count() == 1 );
- }
-};
-
-class Dialog::DialogPrivate
-{
- public:
- DialogPrivate( Dialog * parent )
- : dlg( 0 )
- , pagetree( parent )
- {
- }
-
- bool staticlistview;
- KCMultiDialog * dlg;
- PageNode pagetree;
- TQWidget * parentwidget;
- TQStringList registeredComponents;
- TQValueList<KService::Ptr> services;
- TQMap<TQString, KPluginInfo*> plugininfomap;
-};
-
-Dialog::Dialog( TQWidget * parent, const char * name )
- : TQObject( parent, name )
- , d( new DialogPrivate( this ) )
-{
- d->parentwidget = parent;
- d->staticlistview = true;
- d->services = instanceServices();
-}
-
-Dialog::Dialog( ContentInListView content,
- TQWidget * parent, const char * name )
- : TQObject( parent, name )
- , d( new DialogPrivate( this ) )
-{
- d->parentwidget = parent;
- d->staticlistview = ( content == Static );
- d->services = instanceServices();
-}
-
-Dialog::Dialog( const TQStringList & components,
- TQWidget * parent, const char * name )
- : TQObject( parent, name )
- , d( new DialogPrivate( this ) )
-{
- d->parentwidget = parent;
- d->staticlistview = true;
- d->services = instanceServices() + parentComponentsServices( components );
-}
-
-Dialog::Dialog( const TQStringList & components,
- ContentInListView content, TQWidget * parent, const char * name )
- : TQObject( parent, name )
- , d( new DialogPrivate( this ) )
-{
- d->parentwidget = parent;
- d->staticlistview = ( content == Static );
- d->services = instanceServices() + parentComponentsServices( components );
-}
-
-Dialog::~Dialog()
-{
- delete d;
-}
-
-void Dialog::addPluginInfos( const TQValueList<KPluginInfo*> & plugininfos )
-{
- for( TQValueList<KPluginInfo*>::ConstIterator it = plugininfos.begin();
- it != plugininfos.end(); ++it )
- {
- d->registeredComponents.append( ( *it )->pluginName() );
- d->services += ( *it )->kcmServices();
- d->plugininfomap[ ( *it )->pluginName() ] = *it;
- }
-}
-
-void Dialog::show()
-{
- if( 0 == d->dlg )
- createDialogFromServices();
- Dispatcher::self()->syncConfiguration();
- return d->dlg->show();
-}
-
-KCMultiDialog * Dialog::dialog()
-{
- if( 0 == d->dlg )
- createDialogFromServices();
- return d->dlg;
-}
-
-TQValueList<KService::Ptr> Dialog::instanceServices() const
-{
- kdDebug( 700 ) << k_funcinfo << endl;
- TQString instanceName = TDEGlobal::instance()->instanceName();
- d->registeredComponents.append( instanceName );
- kdDebug( 700 ) << "calling KServiceGroup::childGroup( " << instanceName
- << " )" << endl;
- KServiceGroup::Ptr service = KServiceGroup::childGroup( instanceName );
-
- TQValueList<KService::Ptr> ret;
-
- if( service && service->isValid() )
- {
- kdDebug( 700 ) << "call was successfull" << endl;
- KServiceGroup::List list = service->entries();
- for( KServiceGroup::List::ConstIterator it = list.begin();
- it != list.end(); ++it )
- {
- KSycocaEntry * p = *it;
- if( p->isType( KST_KService ) )
- {
- kdDebug( 700 ) << "found service" << endl;
- ret << static_cast<KService *>( p );
- }
- else
- kdWarning( 700 ) << "KServiceGroup::childGroup returned"
- " something else than a KService (kinda)" << endl;
- }
- }
-
- return ret;
-}
-
-TQValueList<KService::Ptr> Dialog::parentComponentsServices(
- const TQStringList & kcdparents ) const
-{
- d->registeredComponents += kcdparents;
- TQString constraint = kcdparents.join(
- "' in [X-TDE-ParentComponents]) or ('" );
- constraint = "('" + constraint + "' in [X-TDE-ParentComponents])";
-
- kdDebug( 700 ) << "constraint = " << constraint << endl;
- return KTrader::self()->query( "TDECModule", constraint );
-}
-
-bool Dialog::isPluginForKCMEnabled( TDECModuleInfo * moduleinfo ) const
-{
- // if the user of this class requested to hide disabled modules
- // we check whether it should be enabled or not
- bool enabled = true;
- kdDebug( 700 ) << "check whether the " << moduleinfo->moduleName()
- << " KCM should be shown" << endl;
- // for all parent components
- TQStringList parentComponents = moduleinfo->service()->property(
- "X-TDE-ParentComponents" ).toStringList();
- for( TQStringList::ConstIterator pcit = parentComponents.begin();
- pcit != parentComponents.end(); ++pcit )
- {
- // if the parentComponent is not registered ignore it
- if( d->registeredComponents.find( *pcit ) ==
- d->registeredComponents.end() )
- continue;
-
- // we check if the parent component is a plugin
- if( ! d->plugininfomap.contains( *pcit ) )
- {
- // if not the TDECModule must be enabled
- enabled = true;
- // we're done for this TDECModuleInfo
- break;
- }
- // if it is a plugin we check whether the plugin is enabled
- KPluginInfo * pinfo = d->plugininfomap[ *pcit ];
- pinfo->load();
- enabled = pinfo->isPluginEnabled();
- kdDebug( 700 ) << "parent " << *pcit << " is "
- << ( enabled ? "enabled" : "disabled" ) << endl;
- // if it is enabled we're done for this TDECModuleInfo
- if( enabled )
- break;
- }
- return enabled;
-}
-
-void Dialog::parseGroupFile( const TQString & filename )
-{
- KSimpleConfig file( filename );
- TQStringList groups = file.groupList();
- for( TQStringList::ConstIterator it = groups.begin(); it != groups.end();
- ++it )
- {
- GroupInfo group;
- TQString id = *it;
- file.setGroup( id.utf8() );
- group.id = id;
- group.name = file.readEntry( "Name" );
- group.comment = file.readEntry( "Comment" );
- group.weight = file.readNumEntry( "Weight", 100 );
- group.parentid = file.readEntry( "Parent" );
- group.icon = file.readEntry( "Icon" );
- d->pagetree.insert( group );
- }
-}
-
-void Dialog::createDialogFromServices()
-{
- // read .setdlg files
- TQString setdlgpath = locate( "appdata",
- TDEGlobal::instance()->instanceName() + ".setdlg" );
- TQStringList setdlgaddon = TDEGlobal::dirs()->findAllResources( "appdata",
- "ksettingsdialog/*.setdlg" );
- if( ! setdlgpath.isNull() )
- parseGroupFile( setdlgpath );
- if( setdlgaddon.size() > 0 )
- for( TQStringList::ConstIterator it = setdlgaddon.begin();
- it != setdlgaddon.end(); ++it )
- parseGroupFile( *it );
-
- // now we process the TDECModule services
- for( TQValueList<KService::Ptr>::ConstIterator it = d->services.begin();
- it != d->services.end(); ++it )
- {
- // we create the TDECModuleInfo
- TDECModuleInfo * info = new TDECModuleInfo( *it );
- TQString parentid;
- TQVariant tmp = info->service()->property( "X-TDE-CfgDlgHierarchy",
- TQVariant::String );
- if( tmp.isValid() )
- parentid = tmp.toString();
- d->pagetree.insert( info, parentid );
- }
-
- // At this point d->pagetree holds a nice structure of the pages we want
- // to show. It's not going to change anymore so we can sort it now.
- d->pagetree.sort();
-
- int dialogface = KJanusWidget::IconList;
- if( d->pagetree.needTree() )
- dialogface = KJanusWidget::TreeList;
- else if( d->pagetree.singleChild() )
- dialogface = KJanusWidget::Plain;
-
- kdDebug( 700 ) << "creating KCMultiDialog" << endl;
- d->dlg = new KCMultiDialog( dialogface, i18n( "Configure" ),
- d->parentwidget );
-
- if( dialogface == KJanusWidget::TreeList )
- d->dlg->setShowIconsInTreeList( true );
-
- // TODO: Don't show the reset button until the issue with the
- // KPluginSelector::load() method is solved.
- // Problem:
- // KCMultiDialog::show() call TDECModule::load() to reset all KCMs
- // (KPluginSelector::load() resets all plugin selections and all plugin
- // KCMs).
- // The reset button calls TDECModule::load(), too but in this case we want the
- // KPluginSelector to only reset the current visible plugin KCM and not
- // touch the plugin selections.
- // I have no idea how to check that in KPluginSelector::load()...
- //d->dlg->showButton( KDialogBase::User1, true );
-
- if( ! d->staticlistview )
- d->dlg->addButtonBelowList( i18n( "Select Components..." ), this,
- TQT_SLOT( configureTree() ) );
-
- connect( d->dlg, TQT_SIGNAL( okClicked() ), Dispatcher::self(),
- TQT_SLOT( syncConfiguration() ) );
- connect( d->dlg, TQT_SIGNAL( applyClicked() ), Dispatcher::self(),
- TQT_SLOT( syncConfiguration() ) );
- connect( d->dlg, TQT_SIGNAL( configCommitted( const TQCString & ) ),
- Dispatcher::self(), TQT_SLOT( reparseConfiguration( const TQCString & ) ) );
-
- d->pagetree.addToDialog( d->dlg );
-
- if( dialogface == KJanusWidget::TreeList )
- d->dlg->unfoldTreeList();
-}
-
-void Dialog::configureTree()
-{
- kdDebug( 700 ) << k_funcinfo << endl;
- ComponentsDialog * subdlg = new ComponentsDialog( d->dlg );
- subdlg->setPluginInfos( d->plugininfomap );
- subdlg->show();
- connect( subdlg, TQT_SIGNAL( okClicked() ), this, TQT_SLOT( updateTreeList() ) );
- connect( subdlg, TQT_SIGNAL( applyClicked() ), this, TQT_SLOT( updateTreeList() ) );
- connect( subdlg, TQT_SIGNAL( okClicked() ), this,
- TQT_SIGNAL( pluginSelectionChanged() ) );
- connect( subdlg, TQT_SIGNAL( applyClicked() ), this,
- TQT_SIGNAL( pluginSelectionChanged() ) );
- connect( subdlg, TQT_SIGNAL( finished() ), subdlg, TQT_SLOT( delayedDestruct() ) );
-}
-
-void Dialog::updateTreeList()
-{
- kdDebug( 700 ) << k_funcinfo << endl;
-
- d->pagetree.makeDirty();
-
- // remove all pages from the dialog and then add them again. This is needed
- // because KDialogBase/KJanusWidget can only append to the end of the list
- // and we need to have a predefined order.
-
- d->pagetree.removeFromDialog( d->dlg );
- d->pagetree.addToDialog( d->dlg );
-
- if( d->pagetree.needTree() )
- d->dlg->unfoldTreeList( true );
-}
-
-} //namespace
-
-#include "dialog.moc"
-
-// vim: sw=4 ts=4 noet