/* 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 "tdeactioncollection.h" #include "tdeactionshortcutlist.h" #include "tdetoolbar.h" #include "kxmlguifactory.h" #include "kxmlguiclient.h" #include <tdeaccel.h> #include <tdeaccelbase.h> #include <tdeapplication.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_tdeaccel = 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_tdeaccelList; TQValueList<TDEActionCollection*> m_docList; TQWidget *m_widget; TDEAccel *m_tdeaccel; 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_tdeaccelList.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_tdeaccelList.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_tdeaccelList.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_tdeaccel; 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_tdeaccel = 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_tdeaccelXML = 0; } void TDEActionCollection::prepareXMLUnplug() { kdDebug(129) << "TDEActionCollection::prepareXMLUnplug(): this = " << this << endl; unplugShortcuts( d->m_tdeaccel ); if( d->m_builderTDEAccel ) { unplugShortcuts( d->m_builderTDEAccel ); delete d->m_builderTDEAccel; d->m_builderTDEAccel = 0; } } void TDEActionCollection::unplugShortcuts( TDEAccel* tdeaccel ) { for ( TQAsciiDictIterator<TDEAction> it( d->m_actionDict ); it.current(); ++it ) { TDEAction* pAction = it.current(); pAction->removeTDEAccel( tdeaccel ); } for( uint i = 0; i < d->m_docList.count(); i++ ) d->m_docList[i]->unplugShortcuts( tdeaccel ); } /*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_tdeaccelList.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_tdeaccelList[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_tdeaccelList.remove( d->m_tdeaccelList.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_tdeaccelList[i]; }*/ TDEAccel* TDEActionCollection::tdeaccel() { //if( d->m_tdeaccelList.count() > 0 ) // return d->m_tdeaccelList[d->m_iWidgetCurrent]; //else // return 0; return d->m_tdeaccel; } const TDEAccel* TDEActionCollection::tdeaccel() const { //if( d->m_tdeaccelList.count() > 0 ) // return d->m_tdeaccelList[d->m_iWidgetCurrent]; //else // return 0; return d->m_tdeaccel; } // 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 tdeaccel::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 tdeaccel(); } const TDEAccel* TDEActionCollection::accel() const { return tdeaccel(); } 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_tdeaccelList = copy.d->m_tdeaccelList; d->m_widget = copy.d->m_widget; d->m_tdeaccel = copy.d->m_tdeaccel; 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 "tdeactioncollection.moc"