X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Factioncollection.h;h=41bc044a2f33c2f1b4a9167fee4868b022ade48c;hp=d73b97328f1ff1d8c73dd5b1943853c6b2ef9be1;hb=bfc967d449565c7435aecfb007e2df6fab1f9188;hpb=952da9aeecc6c778a7c3cd62b1ecfdc13b24bc8b diff --git a/src/uisupport/actioncollection.h b/src/uisupport/actioncollection.h index d73b9732..41bc044a 100644 --- a/src/uisupport/actioncollection.h +++ b/src/uisupport/actioncollection.h @@ -16,5 +16,101 @@ * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + *************************************************************************** + * This is a subset of the API of KDE's KActionCollection. * ***************************************************************************/ +#ifndef ACTIONCOLLECTION_H_ +#define ACTIONCOLLECTION_H_ + +#include +#include +#include +#include + +class QWidget; + +class Action; +class QAction; + +class ActionCollection : public QObject { + Q_OBJECT + + public: + explicit ActionCollection(QObject *parent); + virtual ~ActionCollection(); + + /// Clears the entire action collection, deleting all actions. + void clear(); + + /// Associate all action in this collection to the given \a widget. + /** Not that this only adds all current actions in the collection to that widget; + * subsequently added actions won't be added automatically. + */ + void associateWidget(QWidget *widget) const; + + /// Associate all actions in this collection to the given \a widget. + /** Subsequently added actions will be automagically associated with this widget as well. + */ + void addAssociatedWidget(QWidget *widget); + + void removeAssociatedWidget(QWidget *widget); + QList associatedWidgets() const; + void clearAssociatedWidgets(); + + void readSettings(); + void writeSettings() const; + + inline int count() const; + inline bool isEmpty() const; + + QAction *action(int index) const; + QAction *action(const QString &name) const; + QList actions() const; + + QAction *addAction(const QString &name, QAction *action); + Action *addAction(const QString &name, Action *action); + Action *addAction(const QString &name, const QObject *receiver = 0, const char *member = 0); + void removeAction(QAction *action); + QAction *takeAction(QAction *action); + + /// Create new action under the given name, add it to the collection and connect its triggered(bool) signal to the specified receiver. + template + ActionType *add(const QString &name, const QObject *receiver = 0, const char *member = 0) { + ActionType *a = new ActionType(this); + if(receiver && member) + connect(a, SIGNAL(triggered(bool)), receiver, member); + addAction(name, a); + return a; + } + + signals: + void inserted(QAction *action); + void actionHovered(QAction *action); + void actionTriggered(QAction *action); + + protected slots: + virtual void connectNotify(const char *signal); + virtual void slotActionTriggered(); + + private slots: + void slotActionHovered(); + void actionDestroyed(QObject *); + void associatedWidgetDestroyed(QObject *); + + private: + bool unlistAction(QAction *); + + QMap _actionByName; + QList _actions; + QList _associatedWidgets; + + bool _connectHovered; + bool _connectTriggered; +}; + +int ActionCollection::count() const { return actions().count(); } +bool ActionCollection::isEmpty() const { return actions().count(); } + + +#endif