X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Factioncollection.h;h=71e0195577af270ec69ff9ebcca11f2703580328;hp=d73b97328f1ff1d8c73dd5b1943853c6b2ef9be1;hb=f9efdde7f3a6004af8f834c409cfa6ae1d877692;hpb=bde6f40f73d85cff300b133a722e4f59bff77f84 diff --git a/src/uisupport/actioncollection.h b/src/uisupport/actioncollection.h index d73b9732..71e01955 100644 --- a/src/uisupport/actioncollection.h +++ b/src/uisupport/actioncollection.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,6 +15,106 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + *************************************************************************** + * This is a subset of the API of KDE's KActionCollection. * ***************************************************************************/ +#pragma once + +#include "uisupport-export.h" + +#include +#include + +#ifdef HAVE_KDE +# include +#endif + +#include +#include +#include +#include +#include + +class QWidget; + +class Action; +class QAction; + +#ifdef HAVE_KDE +using ActionCollectionParent = KActionCollection; +#else +using ActionCollectionParent = QObject; +#endif + +class UISUPPORT_EXPORT ActionCollection : public ActionCollectionParent +{ + Q_OBJECT + +public: + using ActionCollectionParent::ActionCollectionParent; + + // Convenience function that takes a list of Actions + void addActions(const std::vector> &actions); + +// Everything else is defined in KActionCollection +#ifndef HAVE_KDE + /// 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; + + int count() const; + bool isEmpty() const; + + QAction *action(int index) const; + QAction *action(const QString &name) const; + QList actions() const; + + QAction *addAction(const QString &name, QAction *action); + void removeAction(QAction *action); + QAction *takeAction(QAction *action); + +signals: + void inserted(QAction *action); + void actionHovered(QAction *action); + void actionTriggered(QAction *action); + +protected slots: + void connectNotify(const QMetaMethod &signal) override; + 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{false}; + bool _connectTriggered{false}; + +#endif /* HAVE_KDE */ +};