diff options
Diffstat (limited to 'tdeui/tdeactioncollection.cpp')
-rw-r--r-- | tdeui/tdeactioncollection.cpp | 802 |
1 files changed, 802 insertions, 0 deletions
diff --git a/tdeui/tdeactioncollection.cpp b/tdeui/tdeactioncollection.cpp new file mode 100644 index 000000000..74f273994 --- /dev/null +++ b/tdeui/tdeactioncollection.cpp @@ -0,0 +1,802 @@ +/* This file is part of the KDE libraries + Copyright (C) 1999 Reginald Stadlbauer <reggie@kde.org> + (C) 1999 Simon Hausmann <hausmann@kde.org> + (C) 2000 Nicolas Hadacek <haadcek@kde.org> + (C) 2000 Kurt Granroth <granroth@kde.org> + (C) 2000 Michael Koch <koch@kde.org> + (C) 2001 Holger Freyther <freyther@kde.org> + (C) 2002 Ellis Whitehead <ellis@kde.org> + (C) 2002 Joseph Wenninger <jowenn@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 "kactioncollection.h" +#include "kactionshortcutlist.h" +#include "ktoolbar.h" +#include "kxmlguifactory.h" +#include "kxmlguiclient.h" + +#include <kaccel.h> +#include <kaccelbase.h> +#include <kapplication.h> +#include <kdebug.h> + +#include <tqpopupmenu.h> +#include <tqptrdict.h> +#include <tqvariant.h> + +class TDEActionCollection::TDEActionCollectionPrivate +{ +public: + TDEActionCollectionPrivate() + { + m_instance = 0; + //m_bOneTDEAccelOnly = false; + //m_iWidgetCurrent = 0; + m_bAutoConnectShortcuts = true; + m_widget = 0; + m_kaccel = m_builderTDEAccel = 0; + m_dctHighlightContainers.setAutoDelete( true ); + m_highlight = false; + m_currentHighlightAction = 0; + m_statusCleared = true; + m_parentGUIClient = 0L; + } + + TDEInstance *m_instance; + TQString m_sXMLFile; + bool m_bAutoConnectShortcuts; + //bool m_bOneTDEAccelOnly; + //int m_iWidgetCurrent; + //TQValueList<TQWidget*> m_widgetList; + //TQValueList<TDEAccel*> m_kaccelList; + TQValueList<TDEActionCollection*> m_docList; + TQWidget *m_widget; + TDEAccel *m_kaccel; + TDEAccel *m_builderTDEAccel; + + TQAsciiDict<TDEAction> m_actionDict; + TQPtrDict< TQPtrList<TDEAction> > m_dctHighlightContainers; + bool m_highlight; + TDEAction *m_currentHighlightAction; + bool m_statusCleared; + const KXMLGUIClient *m_parentGUIClient; +}; + +TDEActionCollection::TDEActionCollection( TQWidget *parent, const char *name, + TDEInstance *instance ) + : TQObject( parent, name ) +{ + kdDebug(129) << "TDEActionCollection::TDEActionCollection( " << parent << ", " << name << " ): this = " << this << endl; // ellis + d = new TDEActionCollectionPrivate; + if( parent ) + setWidget( parent ); + //d->m_bOneTDEAccelOnly = (d->m_kaccelList.count() > 0); + setInstance( instance ); +} + + +TDEActionCollection::TDEActionCollection( TQWidget *watch, TQObject* parent, const char *name, + TDEInstance *instance ) + : TQObject( parent, name ) +{ + kdDebug(129) << "TDEActionCollection::TDEActionCollection( " << watch << ", " << parent << ", " << name << " ): this = " << this << endl; //ellis + d = new TDEActionCollectionPrivate; + if( watch ) + setWidget( watch ); + //d->m_bOneTDEAccelOnly = (d->m_kaccelList.count() > 0); + setInstance( instance ); +} + +#ifndef KDE_NO_COMPAT +// KDE 4: remove +TDEActionCollection::TDEActionCollection( TQObject *parent, const char *name, + TDEInstance *instance ) + : TQObject( parent, name ) +{ + kdWarning(129) << "TDEActionCollection::TDEActionCollection( TQObject *parent, const char *name, TDEInstance *instance )" << endl; //ellis + kdDebug(129) << kdBacktrace() << endl; + d = new TDEActionCollectionPrivate; + TQWidget* w = tqt_dynamic_cast<TQWidget*>( parent ); + if( w ) + setWidget( w ); + //d->m_bOneTDEAccelOnly = (d->m_kaccelList.count() > 0); + setInstance( instance ); +} + +TDEActionCollection::TDEActionCollection( const TDEActionCollection © ) + : TQObject() +{ + kdWarning(129) << "TDEActionCollection::TDEActionCollection( const TDEActionCollection & ): function is severely deprecated." << endl; + d = new TDEActionCollectionPrivate; + *this = copy; +} +#endif // KDE 4: remove end + +TDEActionCollection::TDEActionCollection( const char *name, const KXMLGUIClient *parent ) + : TQObject( 0L, name ) +{ + d = new TDEActionCollectionPrivate; + d->m_parentGUIClient=parent; + d->m_instance=parent->instance(); +} + + +TDEActionCollection::~TDEActionCollection() +{ + kdDebug(129) << "TDEActionCollection::~TDEActionCollection(): this = " << this << endl; + for ( TQAsciiDictIterator<TDEAction> it( d->m_actionDict ); it.current(); ++it ) { + TDEAction* pAction = it.current(); + if ( pAction->m_parentCollection == this ) + pAction->m_parentCollection = 0L; + } + + delete d->m_kaccel; + delete d->m_builderTDEAccel; + delete d; d = 0; +} + +void TDEActionCollection::setWidget( TQWidget* w ) +{ + //if ( d->m_actionDict.count() > 0 ) { + // kdError(129) << "TDEActionCollection::setWidget(): must be called before any actions are added to collection!" << endl; + // kdDebug(129) << kdBacktrace() << endl; + //} + //else + if ( !d->m_widget ) { + d->m_widget = w; + d->m_kaccel = new TDEAccel( w, this, "TDEActionCollection-TDEAccel" ); + } + else if ( d->m_widget != w ) + kdWarning(129) << "TDEActionCollection::setWidget(): tried to change widget from " << d->m_widget << " to " << w << endl; +} + +void TDEActionCollection::setAutoConnectShortcuts( bool b ) +{ + d->m_bAutoConnectShortcuts = b; +} + +bool TDEActionCollection::isAutoConnectShortcuts() +{ + return d->m_bAutoConnectShortcuts; +} + +bool TDEActionCollection::addDocCollection( TDEActionCollection* pDoc ) +{ + d->m_docList.append( pDoc ); + return true; +} + +void TDEActionCollection::beginXMLPlug( TQWidget *widget ) +{ + kdDebug(129) << "TDEActionCollection::beginXMLPlug( buildWidget = " << widget << " ): this = " << this << " d->m_builderTDEAccel = " << d->m_builderTDEAccel << endl; + + if( widget && !d->m_builderTDEAccel ) { + d->m_builderTDEAccel = new TDEAccel( widget, this, "TDEActionCollection-BuilderTDEAccel" ); + } +} + +void TDEActionCollection::endXMLPlug() +{ + kdDebug(129) << "TDEActionCollection::endXMLPlug(): this = " << this << endl; + //s_kaccelXML = 0; +} + +void TDEActionCollection::prepareXMLUnplug() +{ + kdDebug(129) << "TDEActionCollection::prepareXMLUnplug(): this = " << this << endl; + unplugShortcuts( d->m_kaccel ); + + if( d->m_builderTDEAccel ) { + unplugShortcuts( d->m_builderTDEAccel ); + delete d->m_builderTDEAccel; + d->m_builderTDEAccel = 0; + } +} + +void TDEActionCollection::unplugShortcuts( TDEAccel* kaccel ) +{ + for ( TQAsciiDictIterator<TDEAction> it( d->m_actionDict ); it.current(); ++it ) { + TDEAction* pAction = it.current(); + pAction->removeTDEAccel( kaccel ); + } + + for( uint i = 0; i < d->m_docList.count(); i++ ) + d->m_docList[i]->unplugShortcuts( kaccel ); +} + +/*void TDEActionCollection::addWidget( TQWidget* w ) +{ + if( !d->m_bOneTDEAccelOnly ) { + kdDebug(129) << "TDEActionCollection::addWidget( " << w << " ): this = " << this << endl; + for( uint i = 0; i < d->m_widgetList.count(); i++ ) { + if( d->m_widgetList[i] == w ) { + d->m_iWidgetCurrent = i; + return; + } + } + d->m_iWidgetCurrent = d->m_widgetList.count(); + d->m_widgetList.append( w ); + d->m_kaccelList.append( new TDEAccel( w, this, "TDEActionCollection-TDEAccel" ) ); + } +} + +void TDEActionCollection::removeWidget( TQWidget* w ) +{ + if( !d->m_bOneTDEAccelOnly ) { + kdDebug(129) << "TDEActionCollection::removeWidget( " << w << " ): this = " << this << endl; + for( uint i = 0; i < d->m_widgetList.count(); i++ ) { + if( d->m_widgetList[i] == w ) { + // Remove TDEAccel object from children. + TDEAccel* pTDEAccel = d->m_kaccelList[i]; + for ( TQAsciiDictIterator<TDEAction> it( d->m_actionDict ); it.current(); ++it ) { + TDEAction* pAction = it.current(); + if ( pAction->m_parentCollection == this ) { + pAction->removeTDEAccel( pTDEAccel ); + } + } + delete pTDEAccel; + + d->m_widgetList.remove( d->m_widgetList.at( i ) ); + d->m_kaccelList.remove( d->m_kaccelList.at( i ) ); + + if( d->m_iWidgetCurrent == (int)i ) + d->m_iWidgetCurrent = -1; + else if( d->m_iWidgetCurrent > (int)i ) + d->m_iWidgetCurrent--; + return; + } + } + kdWarning(129) << "TDEActionCollection::removeWidget( " << w << " ): widget not in list." << endl; + } +} + +bool TDEActionCollection::ownsTDEAccel() const +{ + return d->m_bOneTDEAccelOnly; +} + +uint TDEActionCollection::widgetCount() const +{ + return d->m_widgetList.count(); +} + +const TDEAccel* TDEActionCollection::widgetTDEAccel( uint i ) const +{ + return d->m_kaccelList[i]; +}*/ + +TDEAccel* TDEActionCollection::kaccel() +{ + //if( d->m_kaccelList.count() > 0 ) + // return d->m_kaccelList[d->m_iWidgetCurrent]; + //else + // return 0; + return d->m_kaccel; +} + +const TDEAccel* TDEActionCollection::kaccel() const +{ + //if( d->m_kaccelList.count() > 0 ) + // return d->m_kaccelList[d->m_iWidgetCurrent]; + //else + // return 0; + return d->m_kaccel; +} + +// Return the key to use in d->m_actionDict for the given action. +// Usually name(), except when unnamed. +static const char* actionDictKey( TDEAction* action, char* buffer ) +{ + const char* name = action->name(); + if( !qstrcmp( name, "unnamed" ) ) + { + sprintf(buffer, "unnamed-%p", (void *)action); + return buffer; + } + return name; +} + +void TDEActionCollection::_insert( TDEAction* action ) +{ + char unnamed_name[100]; + const char *name = actionDictKey( action, unnamed_name ); + TDEAction *a = d->m_actionDict[ name ]; + if ( a == action ) + return; + + d->m_actionDict.insert( name, action ); + + emit inserted( action ); +} + +void TDEActionCollection::_remove( TDEAction* action ) +{ + char unnamed_name[100]; + const char *name = actionDictKey( action, unnamed_name ); + + TDEAction *a = d->m_actionDict.take( name ); + if ( !a || a != action ) + return; + + emit removed( action ); + // note that we delete the action without its parent collection set to 0. + // This triggers kaccel::remove, to remove any shortcut. + delete a; +} + +TDEAction* TDEActionCollection::_take( TDEAction* action ) +{ + char unnamed_name[100]; + const char *name = actionDictKey( action, unnamed_name ); + + TDEAction *a = d->m_actionDict.take( name ); + if ( !a || a != action ) + return 0; + + if ( a->m_parentCollection == this ) + a->m_parentCollection = 0; + + emit removed( action ); + + return a; +} + +void TDEActionCollection::_clear() +{ + TQAsciiDictIterator<TDEAction> it( d->m_actionDict ); + while ( it.current() ) + _remove( it.current() ); +} + +void TDEActionCollection::insert( TDEAction* action ) { _insert( action ); } +void TDEActionCollection::remove( TDEAction* action ) { _remove( action ); } +TDEAction* TDEActionCollection::take( TDEAction* action ) { return _take( action ); } +void TDEActionCollection::clear() { _clear(); } +TDEAccel* TDEActionCollection::accel() { return kaccel(); } +const TDEAccel* TDEActionCollection::accel() const { return kaccel(); } +TDEAccel* TDEActionCollection::builderTDEAccel() const { return d->m_builderTDEAccel; } + +TDEAction* TDEActionCollection::action( const char* name, const char* classname ) const +{ + TDEAction* pAction = 0; + + if ( !classname && name ) + pAction = d->m_actionDict[ name ]; + + else { + TQAsciiDictIterator<TDEAction> it( d->m_actionDict ); + for( ; it.current(); ++it ) + { + if ( ( !name || !strcmp( it.current()->name(), name ) ) && + ( !classname || !strcmp( it.current()->className(), classname ) ) ) { + pAction = it.current(); + break; + } + } + } + + if( !pAction ) { + for( uint i = 0; i < d->m_docList.count() && !pAction; i++ ) + pAction = d->m_docList[i]->action( name, classname ); + } + + return pAction; +} + +TDEAction* TDEActionCollection::action( int index ) const +{ + TQAsciiDictIterator<TDEAction> it( d->m_actionDict ); + it += index; + return it.current(); +// return d->m_actions.at( index ); +} + +bool TDEActionCollection::readShortcutSettings( const TQString& sConfigGroup, TDEConfigBase* pConfig ) +{ + return TDEActionShortcutList(this).readSettings( sConfigGroup, pConfig ); +} + +bool TDEActionCollection::writeShortcutSettings( const TQString& sConfigGroup, TDEConfigBase* pConfig ) const +{ + return TDEActionShortcutList((TDEActionCollection*)this).writeSettings( sConfigGroup, pConfig ); +} + +uint TDEActionCollection::count() const +{ + return d->m_actionDict.count(); +} + +TQStringList TDEActionCollection::groups() const +{ + TQStringList lst; + + TQAsciiDictIterator<TDEAction> it( d->m_actionDict ); + for( ; it.current(); ++it ) + if ( !it.current()->group().isEmpty() && !lst.contains( it.current()->group() ) ) + lst.append( it.current()->group() ); + + return lst; +} + +TDEActionPtrList TDEActionCollection::actions( const TQString& group ) const +{ + TDEActionPtrList lst; + + TQAsciiDictIterator<TDEAction> it( d->m_actionDict ); + for( ; it.current(); ++it ) + if ( it.current()->group() == group ) + lst.append( it.current() ); + else if ( it.current()->group().isEmpty() && group.isEmpty() ) + lst.append( it.current() ); + + return lst; +} + +TDEActionPtrList TDEActionCollection::actions() const +{ + TDEActionPtrList lst; + + TQAsciiDictIterator<TDEAction> it( d->m_actionDict ); + for( ; it.current(); ++it ) + lst.append( it.current() ); + + return lst; +} + +void TDEActionCollection::setInstance( TDEInstance *instance ) +{ + if ( instance ) + d->m_instance = instance; + else + d->m_instance = TDEGlobal::instance(); +} + +TDEInstance *TDEActionCollection::instance() const +{ + return d->m_instance; +} + +void TDEActionCollection::setXMLFile( const TQString& sXMLFile ) +{ + d->m_sXMLFile = sXMLFile; +} + +const TQString& TDEActionCollection::xmlFile() const +{ + return d->m_sXMLFile; +} + +void TDEActionCollection::setHighlightingEnabled( bool enable ) +{ + d->m_highlight = enable; +} + +bool TDEActionCollection::highlightingEnabled() const +{ + return d->m_highlight; +} + +void TDEActionCollection::connectHighlight( TQWidget *container, TDEAction *action ) +{ + if ( !d->m_highlight ) + return; + + TQPtrList<TDEAction> *actionList = d->m_dctHighlightContainers[ container ]; + + if ( !actionList ) + { + actionList = new TQPtrList<TDEAction>; + + if ( ::tqqt_cast<TQPopupMenu *>( container ) ) + { + connect( container, TQT_SIGNAL( highlighted( int ) ), + this, TQT_SLOT( slotMenuItemHighlighted( int ) ) ); + connect( container, TQT_SIGNAL( aboutToHide() ), + this, TQT_SLOT( slotMenuAboutToHide() ) ); + } + else if ( ::tqqt_cast<TDEToolBar *>( container ) ) + { + connect( container, TQT_SIGNAL( highlighted( int, bool ) ), + this, TQT_SLOT( slotToolBarButtonHighlighted( int, bool ) ) ); + } + + connect( container, TQT_SIGNAL( destroyed() ), + this, TQT_SLOT( slotDestroyed() ) ); + + d->m_dctHighlightContainers.insert( container, actionList ); + } + + actionList->append( action ); +} + +void TDEActionCollection::disconnectHighlight( TQWidget *container, TDEAction *action ) +{ + if ( !d->m_highlight ) + return; + + TQPtrList<TDEAction> *actionList = d->m_dctHighlightContainers[ container ]; + + if ( !actionList ) + return; + + actionList->removeRef( action ); + + if ( actionList->isEmpty() ) + d->m_dctHighlightContainers.remove( container ); +} + +void TDEActionCollection::slotMenuItemHighlighted( int id ) +{ + if ( !d->m_highlight ) + return; + + if ( d->m_currentHighlightAction ) + emit actionHighlighted( d->m_currentHighlightAction, false ); + + TQWidget *container = const_cast<TQWidget*>(TQT_TQWIDGET_CONST( sender() )); + + d->m_currentHighlightAction = findAction( container, id ); + + if ( !d->m_currentHighlightAction ) + { + if ( !d->m_statusCleared ) + emit clearStatusText(); + d->m_statusCleared = true; + return; + } + + d->m_statusCleared = false; + emit actionHighlighted( d->m_currentHighlightAction ); + emit actionHighlighted( d->m_currentHighlightAction, true ); + emit actionStatusText( d->m_currentHighlightAction->toolTip() ); +} + +void TDEActionCollection::slotMenuAboutToHide() +{ + if ( d->m_currentHighlightAction ) + emit actionHighlighted( d->m_currentHighlightAction, false ); + d->m_currentHighlightAction = 0; + + if ( !d->m_statusCleared ) + emit clearStatusText(); + d->m_statusCleared = true; +} + +void TDEActionCollection::slotToolBarButtonHighlighted( int id, bool highlight ) +{ + if ( !d->m_highlight ) + return; + + TQWidget *container = const_cast<TQWidget*>(TQT_TQWIDGET_CONST( sender() )); + + TDEAction *action = findAction( container, id ); + + if ( !action ) + { + d->m_currentHighlightAction = 0; + // use tooltip groups for toolbar status text stuff instead (Simon) +// emit clearStatusText(); + return; + } + + emit actionHighlighted( action, highlight ); + + if ( highlight ) + d->m_currentHighlightAction = action; + else + { + d->m_currentHighlightAction = 0; +// emit clearStatusText(); + } +} + +void TDEActionCollection::slotDestroyed() +{ + d->m_dctHighlightContainers.remove( reinterpret_cast<void *>( const_cast<TQObject*>(TQT_TQOBJECT_CONST(sender())) ) ); +} + +TDEAction *TDEActionCollection::findAction( TQWidget *container, int id ) +{ + TQPtrList<TDEAction> *actionList = d->m_dctHighlightContainers[ reinterpret_cast<void *>( container ) ]; + + if ( !actionList ) + return 0; + + TQPtrListIterator<TDEAction> it( *actionList ); + for (; it.current(); ++it ) + if ( it.current()->isPlugged( container, id ) ) + return it.current(); + + return 0; +} + +const KXMLGUIClient *TDEActionCollection::parentGUIClient() const +{ + return d->m_parentGUIClient; +} + +#ifndef KDE_NO_COMPAT +// KDE 4: remove +TDEActionCollection TDEActionCollection::operator+(const TDEActionCollection &c ) const +{ + kdWarning(129) << "TDEActionCollection::operator+(): function is severely deprecated." << endl; + TDEActionCollection ret( *this ); + + TQValueList<TDEAction *> actions = c.actions(); + TQValueList<TDEAction *>::ConstIterator it = actions.begin(); + TQValueList<TDEAction *>::ConstIterator end = actions.end(); + for (; it != end; ++it ) + ret.insert( *it ); + + return ret; +} + +TDEActionCollection &TDEActionCollection::operator=( const TDEActionCollection © ) +{ + kdWarning(129) << "TDEActionCollection::operator=(): function is severely deprecated." << endl; + //d->m_bOneTDEAccelOnly = copy.d->m_bOneTDEAccelOnly; + //d->m_iWidgetCurrent = copy.d->m_iWidgetCurrent; + //d->m_widgetList = copy.d->m_widgetList; + //d->m_kaccelList = copy.d->m_kaccelList; + d->m_widget = copy.d->m_widget; + d->m_kaccel = copy.d->m_kaccel; + d->m_actionDict = copy.d->m_actionDict; + setInstance( copy.instance() ); + return *this; +} + +TDEActionCollection &TDEActionCollection::operator+=( const TDEActionCollection &c ) +{ + kdWarning(129) << "TDEActionCollection::operator+=(): function is severely deprecated." << endl; + TQAsciiDictIterator<TDEAction> it(c.d->m_actionDict); + for ( ; it.current(); ++it ) + insert( it.current() ); + + return *this; +} +#endif // KDE 4: remove end + +//--------------------------------------------------------------------- +// TDEActionShortcutList +//--------------------------------------------------------------------- + +TDEActionShortcutList::TDEActionShortcutList( TDEActionCollection* pColl ) +: m_actions( *pColl ) + { } +TDEActionShortcutList::~TDEActionShortcutList() + { } +uint TDEActionShortcutList::count() const + { return m_actions.count(); } +TQString TDEActionShortcutList::name( uint i ) const + { return m_actions.action(i)->name(); } +TQString TDEActionShortcutList::label( uint i ) const + { return m_actions.action(i)->text(); } +TQString TDEActionShortcutList::whatsThis( uint i ) const + { return m_actions.action(i)->whatsThis(); } +const TDEShortcut& TDEActionShortcutList::shortcut( uint i ) const + { return m_actions.action(i)->shortcut(); } +const TDEShortcut& TDEActionShortcutList::shortcutDefault( uint i ) const + { return m_actions.action(i)->shortcutDefault(); } +bool TDEActionShortcutList::isConfigurable( uint i ) const + { return m_actions.action(i)->isShortcutConfigurable(); } +bool TDEActionShortcutList::setShortcut( uint i, const TDEShortcut& cut ) + { return m_actions.action(i)->setShortcut( cut ); } +const TDEInstance* TDEActionShortcutList::instance() const + { return m_actions.instance(); } +TQVariant TDEActionShortcutList::getOther( Other, uint ) const + { return TQVariant(); } +bool TDEActionShortcutList::setOther( Other, uint, TQVariant ) + { return false; } +const TDEAction *TDEActionShortcutList::action( uint i) const + { return m_actions.action(i); } + +bool TDEActionShortcutList::save() const +{ + const KXMLGUIClient* guiClient=m_actions.parentGUIClient(); + const TQString xmlFile=guiClient ? guiClient->xmlFile() : m_actions.xmlFile(); + kdDebug(129) << "TDEActionShortcutList::save(): xmlFile = " << xmlFile << endl; + + if( m_actions.xmlFile().isEmpty() ) + return writeSettings(); + + TQString attrShortcut = TQString::fromLatin1("shortcut"); + TQString attrAccel = TQString::fromLatin1("accel"); // Depricated attribute + + // Read XML file + TQString sXml( KXMLGUIFactory::readConfigFile( xmlFile, false, instance() ) ); + TQDomDocument doc; + doc.setContent( sXml ); + + // Process XML data + + // Get hold of ActionProperties tag + TQDomElement elem = KXMLGUIFactory::actionPropertiesElement( doc ); + + // now, iterate through our actions + uint nSize = count(); + for( uint i = 0; i < nSize; i++ ) { + const TQString& sName = name(i); + + bool bSameAsDefault = (shortcut(i) == shortcutDefault(i)); + //kdDebug(129) << "name = " << sName << " shortcut = " << shortcut(i).toStringInternal() << " def = " << shortcutDefault(i).toStringInternal() << endl; + + // now see if this element already exists + // and create it if necessary (unless bSameAsDefault) + TQDomElement act_elem = KXMLGUIFactory::findActionByName( elem, sName, !bSameAsDefault ); + if ( act_elem.isNull() ) + continue; + + act_elem.removeAttribute( attrAccel ); + if( bSameAsDefault ) { + act_elem.removeAttribute( attrShortcut ); + //kdDebug(129) << "act_elem.attributes().count() = " << act_elem.attributes().count() << endl; + if( act_elem.attributes().count() == 1 ) + elem.removeChild( act_elem ); + } else { + act_elem.setAttribute( attrShortcut, shortcut(i).toStringInternal() ); + } + } + + // Write back to XML file + return KXMLGUIFactory::saveConfigFile( doc, guiClient ? guiClient->localXMLFile() : m_actions.xmlFile(), instance() ); +} + +//--------------------------------------------------------------------- +// TDEActionPtrShortcutList +//--------------------------------------------------------------------- + +TDEActionPtrShortcutList::TDEActionPtrShortcutList( TDEActionPtrList& list ) +: m_actions( list ) + { } +TDEActionPtrShortcutList::~TDEActionPtrShortcutList() + { } +uint TDEActionPtrShortcutList::count() const + { return m_actions.count(); } +TQString TDEActionPtrShortcutList::name( uint i ) const + { return m_actions[i]->name(); } +TQString TDEActionPtrShortcutList::label( uint i ) const + { return m_actions[i]->text(); } +TQString TDEActionPtrShortcutList::whatsThis( uint i ) const + { return m_actions[i]->whatsThis(); } +const TDEShortcut& TDEActionPtrShortcutList::shortcut( uint i ) const + { return m_actions[i]->shortcut(); } +const TDEShortcut& TDEActionPtrShortcutList::shortcutDefault( uint i ) const + { return m_actions[i]->shortcutDefault(); } +bool TDEActionPtrShortcutList::isConfigurable( uint i ) const + { return m_actions[i]->isShortcutConfigurable(); } +bool TDEActionPtrShortcutList::setShortcut( uint i, const TDEShortcut& cut ) + { return m_actions[i]->setShortcut( cut ); } +TQVariant TDEActionPtrShortcutList::getOther( Other, uint ) const + { return TQVariant(); } +bool TDEActionPtrShortcutList::setOther( Other, uint, TQVariant ) + { return false; } +bool TDEActionPtrShortcutList::save() const + { return false; } + +void TDEActionShortcutList::virtual_hook( int id, void* data ) +{ TDEShortcutList::virtual_hook( id, data ); } + +void TDEActionPtrShortcutList::virtual_hook( int id, void* data ) +{ TDEShortcutList::virtual_hook( id, data ); } + +void TDEActionCollection::virtual_hook( int, void* ) +{ /*BASE::virtual_hook( id, data );*/ } + +/* vim: et sw=2 ts=2 + */ + +#include "kactioncollection.moc" |