• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

kdeui

kactioncollection.cpp

Go to the documentation of this file.
00001 /* This file is part of the KDE libraries
00002     Copyright (C) 1999 Reginald Stadlbauer <reggie@kde.org>
00003               (C) 1999 Simon Hausmann <hausmann@kde.org>
00004               (C) 2000 Nicolas Hadacek <haadcek@kde.org>
00005               (C) 2000 Kurt Granroth <granroth@kde.org>
00006               (C) 2000 Michael Koch <koch@kde.org>
00007               (C) 2001 Holger Freyther <freyther@kde.org>
00008               (C) 2002 Ellis Whitehead <ellis@kde.org>
00009               (C) 2002 Joseph Wenninger <jowenn@kde.org>
00010 
00011     This library is free software; you can redistribute it and/or
00012     modify it under the terms of the GNU Library General Public
00013     License version 2 as published by the Free Software Foundation.
00014 
00015     This library is distributed in the hope that it will be useful,
00016     but WITHOUT ANY WARRANTY; without even the implied warranty of
00017     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018     Library General Public License for more details.
00019 
00020     You should have received a copy of the GNU Library General Public License
00021     along with this library; see the file COPYING.LIB.  If not, write to
00022     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00023     Boston, MA 02110-1301, USA.
00024 */
00025 
00026 #include "kactioncollection.h"
00027 #include "kactionshortcutlist.h"
00028 #include "ktoolbar.h"
00029 #include "kxmlguifactory.h"
00030 #include "kxmlguiclient.h"
00031 
00032 #include <kaccel.h>
00033 #include <kaccelbase.h>
00034 #include <kapplication.h>
00035 #include <kdebug.h>
00036 
00037 #include <qpopupmenu.h>
00038 #include <qptrdict.h>
00039 #include <qvariant.h>
00040 
00041 class KActionCollection::KActionCollectionPrivate
00042 {
00043 public:
00044   KActionCollectionPrivate()
00045   {
00046     m_instance = 0;
00047     //m_bOneKAccelOnly = false;
00048     //m_iWidgetCurrent = 0;
00049     m_bAutoConnectShortcuts = true;
00050     m_widget = 0;
00051     m_kaccel = m_builderKAccel = 0;
00052     m_dctHighlightContainers.setAutoDelete( true );
00053     m_highlight = false;
00054     m_currentHighlightAction = 0;
00055     m_statusCleared = true;
00056     m_parentGUIClient = 0L;
00057   }
00058 
00059   KInstance *m_instance;
00060   QString m_sXMLFile;
00061   bool m_bAutoConnectShortcuts;
00062   //bool m_bOneKAccelOnly;
00063   //int m_iWidgetCurrent;
00064   //QValueList<QWidget*> m_widgetList;
00065   //QValueList<KAccel*> m_kaccelList;
00066   QValueList<KActionCollection*> m_docList;
00067   QWidget *m_widget;
00068   KAccel *m_kaccel;
00069   KAccel *m_builderKAccel;
00070 
00071   QAsciiDict<KAction> m_actionDict;
00072   QPtrDict< QPtrList<KAction> > m_dctHighlightContainers;
00073   bool m_highlight;
00074   KAction *m_currentHighlightAction;
00075   bool m_statusCleared;
00076   const KXMLGUIClient *m_parentGUIClient;
00077 };
00078 
00079 KActionCollection::KActionCollection( QWidget *parent, const char *name,
00080                                       KInstance *instance )
00081   : QObject( parent, name )
00082 {
00083   kdDebug(129) << "KActionCollection::KActionCollection( " << parent << ", " << name << " ): this = " << this << endl; // ellis
00084   d = new KActionCollectionPrivate;
00085   if( parent )
00086     setWidget( parent );
00087   //d->m_bOneKAccelOnly = (d->m_kaccelList.count() > 0);
00088   setInstance( instance );
00089 }
00090 
00091 
00092 KActionCollection::KActionCollection( QWidget *watch, QObject* parent, const char *name,
00093                                       KInstance *instance )
00094   : QObject( parent, name )
00095 {
00096   kdDebug(129) << "KActionCollection::KActionCollection( " << watch << ", " << parent << ", " << name << " ): this = " << this << endl; //ellis
00097   d = new KActionCollectionPrivate;
00098   if( watch )
00099     setWidget( watch );
00100   //d->m_bOneKAccelOnly = (d->m_kaccelList.count() > 0);
00101   setInstance( instance );
00102 }
00103 
00104 #ifndef KDE_NO_COMPAT
00105 // KDE 4: remove
00106 KActionCollection::KActionCollection( QObject *parent, const char *name,
00107                                       KInstance *instance )
00108   : QObject( parent, name )
00109 {
00110   kdWarning(129) << "KActionCollection::KActionCollection( QObject *parent, const char *name, KInstance *instance )" << endl; //ellis
00111   kdDebug(129) << kdBacktrace() << endl;
00112   d = new KActionCollectionPrivate;
00113   QWidget* w = dynamic_cast<QWidget*>( parent );
00114   if( w )
00115     setWidget( w );
00116   //d->m_bOneKAccelOnly = (d->m_kaccelList.count() > 0);
00117   setInstance( instance );
00118 }
00119 
00120 KActionCollection::KActionCollection( const KActionCollection &copy )
00121     : QObject()
00122 {
00123   kdWarning(129) << "KActionCollection::KActionCollection( const KActionCollection & ): function is severely deprecated." << endl;
00124   d = new KActionCollectionPrivate;
00125   *this = copy;
00126 }
00127 #endif // KDE 4: remove end
00128 
00129 KActionCollection::KActionCollection( const char *name, const KXMLGUIClient *parent )
00130     : QObject( 0L, name )
00131 {
00132   d = new KActionCollectionPrivate;
00133   d->m_parentGUIClient=parent;
00134   d->m_instance=parent->instance();
00135 }
00136 
00137 
00138 KActionCollection::~KActionCollection()
00139 {
00140   kdDebug(129) << "KActionCollection::~KActionCollection(): this = " << this << endl;
00141   for ( QAsciiDictIterator<KAction> it( d->m_actionDict ); it.current(); ++it ) {
00142     KAction* pAction = it.current();
00143     if ( pAction->m_parentCollection == this )
00144       pAction->m_parentCollection = 0L;
00145   }
00146 
00147   delete d->m_kaccel;
00148   delete d->m_builderKAccel;
00149   delete d; d = 0;
00150 }
00151 
00152 void KActionCollection::setWidget( QWidget* w )
00153 {
00154   //if ( d->m_actionDict.count() > 0 ) {
00155   //  kdError(129) << "KActionCollection::setWidget(): must be called before any actions are added to collection!" << endl;
00156   //  kdDebug(129) << kdBacktrace() << endl;
00157   //}
00158   //else
00159   if ( !d->m_widget ) {
00160     d->m_widget = w;
00161     d->m_kaccel = new KAccel( w, this, "KActionCollection-KAccel" );
00162   }
00163   else if ( d->m_widget != w )
00164     kdWarning(129) << "KActionCollection::setWidget(): tried to change widget from " << d->m_widget << " to " << w << endl;
00165 }
00166 
00167 void KActionCollection::setAutoConnectShortcuts( bool b )
00168 {
00169   d->m_bAutoConnectShortcuts = b;
00170 }
00171 
00172 bool KActionCollection::isAutoConnectShortcuts()
00173 {
00174   return d->m_bAutoConnectShortcuts;
00175 }
00176 
00177 bool KActionCollection::addDocCollection( KActionCollection* pDoc )
00178 {
00179     d->m_docList.append( pDoc );
00180     return true;
00181 }
00182 
00183 void KActionCollection::beginXMLPlug( QWidget *widget )
00184 {
00185     kdDebug(129) << "KActionCollection::beginXMLPlug( buildWidget = " << widget << " ): this = " <<  this << " d->m_builderKAccel = " << d->m_builderKAccel << endl;
00186 
00187     if( widget && !d->m_builderKAccel ) {
00188             d->m_builderKAccel = new KAccel( widget, this, "KActionCollection-BuilderKAccel" );
00189     }
00190 }
00191 
00192 void KActionCollection::endXMLPlug()
00193 {
00194     kdDebug(129) << "KActionCollection::endXMLPlug(): this = " <<  this << endl;
00195     //s_kaccelXML = 0;
00196 }
00197 
00198 void KActionCollection::prepareXMLUnplug()
00199 {
00200     kdDebug(129) << "KActionCollection::prepareXMLUnplug(): this = " <<  this << endl;
00201     unplugShortcuts( d->m_kaccel );
00202 
00203     if( d->m_builderKAccel ) {
00204         unplugShortcuts( d->m_builderKAccel );
00205         delete d->m_builderKAccel;
00206         d->m_builderKAccel = 0;
00207     }
00208 }
00209 
00210 void KActionCollection::unplugShortcuts( KAccel* kaccel )
00211 {
00212   for ( QAsciiDictIterator<KAction> it( d->m_actionDict ); it.current(); ++it ) {
00213     KAction* pAction = it.current();
00214     pAction->removeKAccel( kaccel );
00215   }
00216 
00217   for( uint i = 0; i < d->m_docList.count(); i++ )
00218     d->m_docList[i]->unplugShortcuts( kaccel );
00219 }
00220 
00221 /*void KActionCollection::addWidget( QWidget* w )
00222 {
00223   if( !d->m_bOneKAccelOnly ) {
00224     kdDebug(129) << "KActionCollection::addWidget( " << w << " ): this = " << this << endl;
00225     for( uint i = 0; i < d->m_widgetList.count(); i++ ) {
00226       if( d->m_widgetList[i] == w ) {
00227         d->m_iWidgetCurrent = i;
00228         return;
00229       }
00230   }
00231     d->m_iWidgetCurrent = d->m_widgetList.count();
00232     d->m_widgetList.append( w );
00233     d->m_kaccelList.append( new KAccel( w, this, "KActionCollection-KAccel" ) );
00234   }
00235 }
00236 
00237 void KActionCollection::removeWidget( QWidget* w )
00238 {
00239   if( !d->m_bOneKAccelOnly ) {
00240     kdDebug(129) << "KActionCollection::removeWidget( " << w << " ): this = " << this << endl;
00241     for( uint i = 0; i < d->m_widgetList.count(); i++ ) {
00242       if( d->m_widgetList[i] == w ) {
00243         // Remove KAccel object from children.
00244         KAccel* pKAccel = d->m_kaccelList[i];
00245         for ( QAsciiDictIterator<KAction> it( d->m_actionDict ); it.current(); ++it ) {
00246           KAction* pAction = it.current();
00247           if ( pAction->m_parentCollection == this ) {
00248             pAction->removeKAccel( pKAccel );
00249           }
00250         }
00251         delete pKAccel;
00252 
00253         d->m_widgetList.remove( d->m_widgetList.at( i ) );
00254         d->m_kaccelList.remove( d->m_kaccelList.at( i ) );
00255 
00256         if( d->m_iWidgetCurrent == (int)i )
00257           d->m_iWidgetCurrent = -1;
00258         else if( d->m_iWidgetCurrent > (int)i )
00259           d->m_iWidgetCurrent--;
00260         return;
00261       }
00262     }
00263     kdWarning(129) << "KActionCollection::removeWidget( " << w << " ): widget not in list." << endl;
00264   }
00265 }
00266 
00267 bool KActionCollection::ownsKAccel() const
00268 {
00269   return d->m_bOneKAccelOnly;
00270 }
00271 
00272 uint KActionCollection::widgetCount() const
00273 {
00274   return d->m_widgetList.count();
00275 }
00276 
00277 const KAccel* KActionCollection::widgetKAccel( uint i ) const
00278 {
00279   return d->m_kaccelList[i];
00280 }*/
00281 
00282 KAccel* KActionCollection::kaccel()
00283 {
00284   //if( d->m_kaccelList.count() > 0 )
00285   //  return d->m_kaccelList[d->m_iWidgetCurrent];
00286   //else
00287   //  return 0;
00288   return d->m_kaccel;
00289 }
00290 
00291 const KAccel* KActionCollection::kaccel() const
00292 {
00293   //if( d->m_kaccelList.count() > 0 )
00294   //  return d->m_kaccelList[d->m_iWidgetCurrent];
00295   //else
00296   //  return 0;
00297   return d->m_kaccel;
00298 }
00299 
00300 // Return the key to use in d->m_actionDict for the given action.
00301 // Usually name(), except when unnamed.
00302 static const char* actionDictKey( KAction* action, char* buffer )
00303 {
00304   const char* name = action->name();
00305   if( !qstrcmp( name, "unnamed" ) )
00306   {
00307      sprintf(buffer, "unnamed-%p", (void *)action);
00308      return buffer;
00309   }
00310   return name;
00311 }
00312 
00313 void KActionCollection::_insert( KAction* action )
00314 {
00315   char unnamed_name[100];
00316   const char *name = actionDictKey( action, unnamed_name );
00317   KAction *a = d->m_actionDict[ name ];
00318   if ( a == action )
00319       return;
00320 
00321   d->m_actionDict.insert( name, action );
00322 
00323   emit inserted( action );
00324 }
00325 
00326 void KActionCollection::_remove( KAction* action )
00327 {
00328   char unnamed_name[100];
00329   const char *name = actionDictKey( action, unnamed_name );
00330 
00331   KAction *a = d->m_actionDict.take( name );
00332   if ( !a || a != action )
00333       return;
00334 
00335   emit removed( action );
00336   // note that we delete the action without its parent collection set to 0.
00337   // This triggers kaccel::remove, to remove any shortcut.
00338   delete a;
00339 }
00340 
00341 KAction* KActionCollection::_take( KAction* action )
00342 {
00343   char unnamed_name[100];
00344   const char *name = actionDictKey( action, unnamed_name );
00345 
00346   KAction *a = d->m_actionDict.take( name );
00347   if ( !a || a != action )
00348       return 0;
00349 
00350   if ( a->m_parentCollection == this )
00351       a->m_parentCollection = 0;
00352 
00353   emit removed( action );
00354 
00355   return a;
00356 }
00357 
00358 void KActionCollection::_clear()
00359 {
00360   QAsciiDictIterator<KAction> it( d->m_actionDict );
00361   while ( it.current() )
00362     _remove( it.current() );
00363 }
00364 
00365 void KActionCollection::insert( KAction* action )   { _insert( action ); }
00366 void KActionCollection::remove( KAction* action )   { _remove( action ); }
00367 KAction* KActionCollection::take( KAction* action ) { return _take( action ); }
00368 void KActionCollection::clear()                     { _clear(); }
00369 KAccel* KActionCollection::accel()                  { return kaccel(); }
00370 const KAccel* KActionCollection::accel() const      { return kaccel(); }
00371 KAccel* KActionCollection::builderKAccel() const    { return d->m_builderKAccel; }
00372 
00373 KAction* KActionCollection::action( const char* name, const char* classname ) const
00374 {
00375   KAction* pAction = 0;
00376 
00377   if ( !classname && name )
00378     pAction = d->m_actionDict[ name ];
00379 
00380   else {
00381     QAsciiDictIterator<KAction> it( d->m_actionDict );
00382     for( ; it.current(); ++it )
00383     {
00384       if ( ( !name || !strcmp( it.current()->name(), name ) ) &&
00385           ( !classname || !strcmp( it.current()->className(), classname ) ) ) {
00386         pAction = it.current();
00387         break;
00388       }
00389     }
00390   }
00391 
00392   if( !pAction ) {
00393     for( uint i = 0; i < d->m_docList.count() && !pAction; i++ )
00394       pAction = d->m_docList[i]->action( name, classname );
00395   }
00396 
00397   return pAction;
00398 }
00399 
00400 KAction* KActionCollection::action( int index ) const
00401 {
00402   QAsciiDictIterator<KAction> it( d->m_actionDict );
00403   it += index;
00404   return it.current();
00405 //  return d->m_actions.at( index );
00406 }
00407 
00408 bool KActionCollection::readShortcutSettings( const QString& sConfigGroup, KConfigBase* pConfig )
00409 {
00410   return KActionShortcutList(this).readSettings( sConfigGroup, pConfig );
00411 }
00412 
00413 bool KActionCollection::writeShortcutSettings( const QString& sConfigGroup, KConfigBase* pConfig ) const
00414 {
00415   return KActionShortcutList((KActionCollection*)this).writeSettings( sConfigGroup, pConfig );
00416 }
00417 
00418 uint KActionCollection::count() const
00419 {
00420   return d->m_actionDict.count();
00421 }
00422 
00423 QStringList KActionCollection::groups() const
00424 {
00425   QStringList lst;
00426 
00427   QAsciiDictIterator<KAction> it( d->m_actionDict );
00428   for( ; it.current(); ++it )
00429     if ( !it.current()->group().isEmpty() && !lst.contains( it.current()->group() ) )
00430       lst.append( it.current()->group() );
00431 
00432   return lst;
00433 }
00434 
00435 KActionPtrList KActionCollection::actions( const QString& group ) const
00436 {
00437   KActionPtrList lst;
00438 
00439   QAsciiDictIterator<KAction> it( d->m_actionDict );
00440   for( ; it.current(); ++it )
00441     if ( it.current()->group() == group )
00442       lst.append( it.current() );
00443     else if ( it.current()->group().isEmpty() && group.isEmpty() )
00444       lst.append( it.current() );
00445 
00446   return lst;
00447 }
00448 
00449 KActionPtrList KActionCollection::actions() const
00450 {
00451   KActionPtrList lst;
00452 
00453   QAsciiDictIterator<KAction> it( d->m_actionDict );
00454   for( ; it.current(); ++it )
00455     lst.append( it.current() );
00456 
00457   return lst;
00458 }
00459 
00460 void KActionCollection::setInstance( KInstance *instance )
00461 {
00462   if ( instance )
00463     d->m_instance = instance;
00464   else
00465     d->m_instance = KGlobal::instance();
00466 }
00467 
00468 KInstance *KActionCollection::instance() const
00469 {
00470   return d->m_instance;
00471 }
00472 
00473 void KActionCollection::setXMLFile( const QString& sXMLFile )
00474 {
00475   d->m_sXMLFile = sXMLFile;
00476 }
00477 
00478 const QString& KActionCollection::xmlFile() const
00479 {
00480   return d->m_sXMLFile;
00481 }
00482 
00483 void KActionCollection::setHighlightingEnabled( bool enable )
00484 {
00485   d->m_highlight = enable;
00486 }
00487 
00488 bool KActionCollection::highlightingEnabled() const
00489 {
00490   return d->m_highlight;
00491 }
00492 
00493 void KActionCollection::connectHighlight( QWidget *container, KAction *action )
00494 {
00495   if ( !d->m_highlight )
00496     return;
00497 
00498   QPtrList<KAction> *actionList = d->m_dctHighlightContainers[ container ];
00499 
00500   if ( !actionList )
00501   {
00502     actionList = new QPtrList<KAction>;
00503 
00504     if ( ::qt_cast<QPopupMenu *>( container ) )
00505     {
00506       connect( container, SIGNAL( highlighted( int ) ),
00507                this, SLOT( slotMenuItemHighlighted( int ) ) );
00508       connect( container, SIGNAL( aboutToHide() ),
00509                this, SLOT( slotMenuAboutToHide() ) );
00510     }
00511     else if ( ::qt_cast<KToolBar *>( container ) )
00512     {
00513       connect( container, SIGNAL( highlighted( int, bool ) ),
00514                this, SLOT( slotToolBarButtonHighlighted( int, bool ) ) );
00515     }
00516 
00517     connect( container, SIGNAL( destroyed() ),
00518              this, SLOT( slotDestroyed() ) );
00519 
00520     d->m_dctHighlightContainers.insert( container, actionList );
00521   }
00522 
00523   actionList->append( action );
00524 }
00525 
00526 void KActionCollection::disconnectHighlight( QWidget *container, KAction *action )
00527 {
00528   if ( !d->m_highlight )
00529     return;
00530 
00531   QPtrList<KAction> *actionList = d->m_dctHighlightContainers[ container ];
00532 
00533   if ( !actionList )
00534     return;
00535 
00536   actionList->removeRef( action );
00537 
00538   if ( actionList->isEmpty() )
00539     d->m_dctHighlightContainers.remove( container );
00540 }
00541 
00542 void KActionCollection::slotMenuItemHighlighted( int id )
00543 {
00544   if ( !d->m_highlight )
00545     return;
00546 
00547   if ( d->m_currentHighlightAction )
00548     emit actionHighlighted( d->m_currentHighlightAction, false );
00549 
00550   QWidget *container = static_cast<QWidget *>( const_cast<QObject *>( sender() ) );
00551 
00552   d->m_currentHighlightAction = findAction( container, id );
00553 
00554   if ( !d->m_currentHighlightAction )
00555   {
00556       if ( !d->m_statusCleared )
00557           emit clearStatusText();
00558       d->m_statusCleared = true;
00559       return;
00560   }
00561 
00562   d->m_statusCleared = false;
00563   emit actionHighlighted( d->m_currentHighlightAction );
00564   emit actionHighlighted( d->m_currentHighlightAction, true );
00565   emit actionStatusText( d->m_currentHighlightAction->toolTip() );
00566 }
00567 
00568 void KActionCollection::slotMenuAboutToHide()
00569 {
00570     if ( d->m_currentHighlightAction )
00571         emit actionHighlighted( d->m_currentHighlightAction, false );
00572     d->m_currentHighlightAction = 0;
00573 
00574     if ( !d->m_statusCleared )
00575         emit clearStatusText();
00576     d->m_statusCleared = true;
00577 }
00578 
00579 void KActionCollection::slotToolBarButtonHighlighted( int id, bool highlight )
00580 {
00581   if ( !d->m_highlight )
00582     return;
00583 
00584   QWidget *container = static_cast<QWidget *>( const_cast<QObject *>( sender() ) );
00585 
00586   KAction *action = findAction( container, id );
00587 
00588   if ( !action )
00589   {
00590       d->m_currentHighlightAction = 0;
00591       // use tooltip groups for toolbar status text stuff instead (Simon)
00592 //      emit clearStatusText();
00593       return;
00594   }
00595 
00596   emit actionHighlighted( action, highlight );
00597 
00598   if ( highlight )
00599     d->m_currentHighlightAction = action;
00600   else
00601   {
00602     d->m_currentHighlightAction = 0;
00603 //    emit clearStatusText();
00604   }
00605 }
00606 
00607 void KActionCollection::slotDestroyed()
00608 {
00609     d->m_dctHighlightContainers.remove( reinterpret_cast<void *>( const_cast<QObject *>(sender()) ) );
00610 }
00611 
00612 KAction *KActionCollection::findAction( QWidget *container, int id )
00613 {
00614   QPtrList<KAction> *actionList = d->m_dctHighlightContainers[ reinterpret_cast<void *>( container ) ];
00615 
00616   if ( !actionList )
00617     return 0;
00618 
00619   QPtrListIterator<KAction> it( *actionList );
00620   for (; it.current(); ++it )
00621     if ( it.current()->isPlugged( container, id ) )
00622       return it.current();
00623 
00624   return 0;
00625 }
00626 
00627 const KXMLGUIClient *KActionCollection::parentGUIClient() const
00628 {
00629     return d->m_parentGUIClient;
00630 }
00631 
00632 #ifndef KDE_NO_COMPAT
00633 // KDE 4: remove
00634 KActionCollection KActionCollection::operator+(const KActionCollection &c ) const
00635 {
00636   kdWarning(129) << "KActionCollection::operator+(): function is severely deprecated." << endl;
00637   KActionCollection ret( *this );
00638 
00639   QValueList<KAction *> actions = c.actions();
00640   QValueList<KAction *>::ConstIterator it = actions.begin();
00641   QValueList<KAction *>::ConstIterator end = actions.end();
00642   for (; it != end; ++it )
00643     ret.insert( *it );
00644 
00645   return ret;
00646 }
00647 
00648 KActionCollection &KActionCollection::operator=( const KActionCollection &copy )
00649 {
00650   kdWarning(129) << "KActionCollection::operator=(): function is severely deprecated." << endl;
00651   //d->m_bOneKAccelOnly = copy.d->m_bOneKAccelOnly;
00652   //d->m_iWidgetCurrent = copy.d->m_iWidgetCurrent;
00653   //d->m_widgetList = copy.d->m_widgetList;
00654   //d->m_kaccelList = copy.d->m_kaccelList;
00655   d->m_widget = copy.d->m_widget;
00656   d->m_kaccel = copy.d->m_kaccel;
00657   d->m_actionDict = copy.d->m_actionDict;
00658   setInstance( copy.instance() );
00659   return *this;
00660 }
00661 
00662 KActionCollection &KActionCollection::operator+=( const KActionCollection &c )
00663 {
00664   kdWarning(129) << "KActionCollection::operator+=(): function is severely deprecated." << endl;
00665   QAsciiDictIterator<KAction> it(c.d->m_actionDict);
00666   for ( ; it.current(); ++it )
00667     insert( it.current() );
00668 
00669   return *this;
00670 }
00671 #endif // KDE 4: remove end
00672 
00673 //---------------------------------------------------------------------
00674 // KActionShortcutList
00675 //---------------------------------------------------------------------
00676 
00677 KActionShortcutList::KActionShortcutList( KActionCollection* pColl )
00678 : m_actions( *pColl )
00679     { }
00680 KActionShortcutList::~KActionShortcutList()
00681     { }
00682 uint KActionShortcutList::count() const
00683     { return m_actions.count(); }
00684 QString KActionShortcutList::name( uint i ) const
00685     { return m_actions.action(i)->name(); }
00686 QString KActionShortcutList::label( uint i ) const
00687     { return m_actions.action(i)->text(); }
00688 QString KActionShortcutList::whatsThis( uint i ) const
00689     { return m_actions.action(i)->whatsThis(); }
00690 const KShortcut& KActionShortcutList::shortcut( uint i ) const
00691     { return m_actions.action(i)->shortcut(); }
00692 const KShortcut& KActionShortcutList::shortcutDefault( uint i ) const
00693     { return m_actions.action(i)->shortcutDefault(); }
00694 bool KActionShortcutList::isConfigurable( uint i ) const
00695     { return m_actions.action(i)->isShortcutConfigurable(); }
00696 bool KActionShortcutList::setShortcut( uint i, const KShortcut& cut )
00697     { return m_actions.action(i)->setShortcut( cut ); }
00698 const KInstance* KActionShortcutList::instance() const
00699     { return m_actions.instance(); }
00700 QVariant KActionShortcutList::getOther( Other, uint ) const
00701     { return QVariant(); }
00702 bool KActionShortcutList::setOther( Other, uint, QVariant )
00703     { return false; }
00704 const KAction *KActionShortcutList::action( uint i) const
00705     { return m_actions.action(i); }
00706 
00707 bool KActionShortcutList::save() const
00708 {
00709     const KXMLGUIClient* guiClient=m_actions.parentGUIClient();
00710     const QString xmlFile=guiClient ? guiClient->xmlFile() : m_actions.xmlFile();
00711     kdDebug(129) << "KActionShortcutList::save(): xmlFile = " << xmlFile << endl;
00712 
00713     if( m_actions.xmlFile().isEmpty() )
00714         return writeSettings();
00715 
00716     QString attrShortcut  = QString::fromLatin1("shortcut");
00717     QString attrAccel     = QString::fromLatin1("accel"); // Depricated attribute
00718 
00719     // Read XML file
00720     QString sXml( KXMLGUIFactory::readConfigFile( xmlFile, false, instance() ) );
00721     QDomDocument doc;
00722     doc.setContent( sXml );
00723 
00724     // Process XML data
00725 
00726         // Get hold of ActionProperties tag
00727         QDomElement elem = KXMLGUIFactory::actionPropertiesElement( doc );
00728 
00729     // now, iterate through our actions
00730     uint nSize = count();
00731     for( uint i = 0; i < nSize; i++ ) {
00732         const QString& sName = name(i);
00733 
00734         bool bSameAsDefault = (shortcut(i) == shortcutDefault(i));
00735         //kdDebug(129) << "name = " << sName << " shortcut = " << shortcut(i).toStringInternal() << " def = " << shortcutDefault(i).toStringInternal() << endl;
00736 
00737         // now see if this element already exists
00738                 // and create it if necessary (unless bSameAsDefault)
00739         QDomElement act_elem = KXMLGUIFactory::findActionByName( elem, sName, !bSameAsDefault );
00740                 if ( act_elem.isNull() )
00741                     continue;
00742 
00743         act_elem.removeAttribute( attrAccel );
00744         if( bSameAsDefault ) {
00745             act_elem.removeAttribute( attrShortcut );
00746             //kdDebug(129) << "act_elem.attributes().count() = " << act_elem.attributes().count() << endl;
00747             if( act_elem.attributes().count() == 1 )
00748                 elem.removeChild( act_elem );
00749         } else {
00750             act_elem.setAttribute( attrShortcut, shortcut(i).toStringInternal() );
00751         }
00752     }
00753 
00754     // Write back to XML file
00755     return KXMLGUIFactory::saveConfigFile( doc, guiClient ? guiClient->localXMLFile() : m_actions.xmlFile(), instance() );
00756 }
00757 
00758 //---------------------------------------------------------------------
00759 // KActionPtrShortcutList
00760 //---------------------------------------------------------------------
00761 
00762 KActionPtrShortcutList::KActionPtrShortcutList( KActionPtrList& list )
00763 : m_actions( list )
00764     { }
00765 KActionPtrShortcutList::~KActionPtrShortcutList()
00766     { }
00767 uint KActionPtrShortcutList::count() const
00768     { return m_actions.count(); }
00769 QString KActionPtrShortcutList::name( uint i ) const
00770     { return m_actions[i]->name(); }
00771 QString KActionPtrShortcutList::label( uint i ) const
00772     { return m_actions[i]->text(); }
00773 QString KActionPtrShortcutList::whatsThis( uint i ) const
00774     { return m_actions[i]->whatsThis(); }
00775 const KShortcut& KActionPtrShortcutList::shortcut( uint i ) const
00776     { return m_actions[i]->shortcut(); }
00777 const KShortcut& KActionPtrShortcutList::shortcutDefault( uint i ) const
00778     { return m_actions[i]->shortcutDefault(); }
00779 bool KActionPtrShortcutList::isConfigurable( uint i ) const
00780     { return m_actions[i]->isShortcutConfigurable(); }
00781 bool KActionPtrShortcutList::setShortcut( uint i, const KShortcut& cut )
00782     { return m_actions[i]->setShortcut( cut ); }
00783 QVariant KActionPtrShortcutList::getOther( Other, uint ) const
00784     { return QVariant(); }
00785 bool KActionPtrShortcutList::setOther( Other, uint, QVariant )
00786     { return false; }
00787 bool KActionPtrShortcutList::save() const
00788     { return false; }
00789 
00790 void KActionShortcutList::virtual_hook( int id, void* data )
00791 { KShortcutList::virtual_hook( id, data ); }
00792 
00793 void KActionPtrShortcutList::virtual_hook( int id, void* data )
00794 { KShortcutList::virtual_hook( id, data ); }
00795 
00796 void KActionCollection::virtual_hook( int, void* )
00797 { /*BASE::virtual_hook( id, data );*/ }
00798 
00799 /* vim: et sw=2 ts=2
00800  */
00801 
00802 #include "kactioncollection.moc"

kdeui

Skip menu "kdeui"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal