kactioncollection.h
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 00010 This library is free software; you can redistribute it and/or 00011 modify it under the terms of the GNU Library General Public 00012 License version 2 as published by the Free Software Foundation. 00013 00014 This library is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 Library General Public License for more details. 00018 00019 You should have received a copy of the GNU Library General Public License 00020 along with this library; see the file COPYING.LIB. If not, write to 00021 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00022 Boston, MA 02110-1301, USA. 00023 */ 00024 00025 #ifndef __kactioncollection_h__ 00026 #define __kactioncollection_h__ 00027 00028 #include <kaction.h> 00029 00030 #include <qkeysequence.h> 00031 #include <qobject.h> 00032 #include <qvaluelist.h> 00033 #include <qguardedptr.h> 00034 #include <kguiitem.h> 00035 #include <kshortcut.h> 00036 #include <kstdaction.h> 00037 #include <kicontheme.h> 00038 00039 class QMenuBar; 00040 class QPopupMenu; 00041 class QComboBox; 00042 class QPoint; 00043 class QIconSet; 00044 class QString; 00045 class KToolBar; 00046 00047 class KAccel; 00048 class KAccelActions; 00049 class KConfig; 00050 class KConfigBase; 00051 class KURL; 00052 class KInstance; 00053 class KToolBar; 00054 class KActionCollection; 00055 class KPopupMenu; 00056 class KMainWindow; 00057 class KXMLGUIClient; 00058 00059 typedef QValueList<KAction *> KActionPtrList; 00060 00078 class KDEUI_EXPORT KActionCollection : public QObject 00079 { 00080 friend class KAction; 00081 friend class KXMLGUIClient; 00082 00083 Q_OBJECT 00084 00085 public: 00086 KActionCollection( QWidget *parent, const char *name = 0, KInstance *instance = 0 ); 00092 KActionCollection( QWidget *watch, QObject* parent, const char *name = 0, KInstance *instance = 0 ); 00093 #ifndef KDE_NO_COMPAT 00094 KActionCollection( const KActionCollection © ); 00095 #endif 00096 virtual ~KActionCollection(); 00097 00102 virtual void setWidget( QWidget *widget ); 00103 00111 void setAutoConnectShortcuts( bool ); 00112 00119 bool isAutoConnectShortcuts(); 00120 00127 //void setDefaultScope( KAction::Scope ); 00128 00133 bool addDocCollection( KActionCollection* pDoc ); 00134 00136 //uint widgetCount() const; 00137 00143 //bool ownsKAccel() const; 00144 00146 virtual KAccel* accel() KDE_DEPRECATED; 00148 virtual const KAccel* accel() const KDE_DEPRECATED; 00149 00151 KAccel* kaccel(); 00153 const KAccel* kaccel() const; 00154 00156 KAccel* builderKAccel() const; 00158 //KAccel* widgetKAccel( uint i ); 00159 //const KAccel* widgetKAccel( uint i ) const; 00160 00162 virtual uint count() const; 00163 bool isEmpty() const { return (count() == 0); } 00168 virtual KAction* action( int index ) const; 00176 virtual KAction* action( const char* name, const char* classname = 0 ) const; 00177 00182 virtual QStringList groups() const; 00187 virtual KActionPtrList actions( const QString& group ) const; 00189 virtual KActionPtrList actions() const; 00190 00194 bool readShortcutSettings( const QString& sConfigGroup = QString::null, KConfigBase* pConfig = 0 ); 00198 bool writeShortcutSettings( const QString& sConfigGroup = QString::null, KConfigBase* pConfig = 0 ) const; 00199 00200 void setInstance( KInstance *instance ); 00202 KInstance *instance() const; 00203 00207 void setXMLFile( const QString& ); 00211 const QString& xmlFile() const; 00212 00213 //TODO FOR KDE4 make this default true 00225 void setHighlightingEnabled( bool enable ); 00234 bool highlightingEnabled() const; 00235 00249 void connectHighlight( QWidget *container, KAction *action ); 00263 void disconnectHighlight( QWidget *container, KAction *action ); 00264 00268 const KXMLGUIClient *parentGUIClient() const; 00269 00270 signals: 00271 void inserted( KAction* ); 00272 void removed( KAction* ); 00273 00282 void actionHighlighted( KAction *action ); 00291 void actionHighlighted( KAction *action, bool highlight ); 00301 void actionStatusText( const QString &text ); 00307 void clearStatusText(); 00308 00309 private: 00316 void beginXMLPlug( QWidget *widget ); 00317 void endXMLPlug(); 00319 void prepareXMLUnplug(); 00320 void unplugShortcuts( KAccel* kaccel ); 00321 00322 void _clear(); 00323 void _insert( KAction* ); 00324 void _remove( KAction* ); 00325 KAction* _take( KAction* ); 00326 00327 private slots: 00328 void slotMenuItemHighlighted( int id ); 00329 void slotToolBarButtonHighlighted( int id, bool highlight ); 00330 void slotMenuAboutToHide(); 00331 void slotDestroyed(); 00332 00333 private: 00334 KAction *findAction( QWidget *container, int id ); 00335 00336 #ifndef KDE_NO_COMPAT 00337 public: 00338 KActionCollection( QObject *parent, const char *name = 0, KInstance *instance = 0 ); 00339 #endif 00340 00341 public: 00352 void insert( KAction* action); 00353 00360 void remove( KAction* action ); 00361 00369 KAction* take( KAction* action ); 00370 00371 #ifndef KDE_NO_COMPAT 00372 KActionCollection operator+ ( const KActionCollection& ) const; 00373 KActionCollection& operator= ( const KActionCollection& ); 00374 KActionCollection& operator+= ( const KActionCollection& ); 00375 #endif // !KDE_NO_COMPAT 00376 00377 // KDE4: clear() doesn't need to be a slot 00378 public slots: 00383 void clear(); 00384 00385 protected: 00386 virtual void virtual_hook( int id, void* data ); 00387 private: 00388 KActionCollection( const char* name, const KXMLGUIClient* parent ); 00389 class KActionCollectionPrivate; 00390 KActionCollectionPrivate *d; 00391 }; 00392 00393 #endif