/*************************************************************************** * Copyright (c) 2015 Werner Mayer * * * * This file is part of the FreeCAD CAx development system. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * * 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., 59 Temple Place, * * Suite 330, Boston, MA 02111-1307, USA * * * ***************************************************************************/ #ifndef GUI_ACTIONFUNCTION_H #define GUI_ACTIONFUNCTION_H #include #include #include #include class QAction; namespace Gui { class ActionFunctionPrivate; /*! The class connects the triggered() signal of a QAction instance with the method of a usual C++ class not derived from QObject. The class can e.g be used to fill up the context-menu of the view provider classes. \code void MyViewProvider::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) { Gui::ActionFunction* func = new Gui::ActionFunction(menu); QAction* a1 = menu->addAction(QObject::tr("Menu item 1...")); func->triggered(a1, std::bind(&MyViewProvider::doItem1, this)); QAction* a2 = menu->addAction(QObject::tr("Menu item 2...")); func->triggered(a2, std::bind(&MyViewProvider::doItem2, this)); QAction* a3 = menu->addAction(QObject::tr("Menu item 3...")); func->triggered(a3, std::bind(&MyViewProvider::doItem3, this)); } \endcode @author Werner Mayer http://www.boost.org/doc/libs/1_57_0/libs/bind/bind.html#with_boost_function */ class GuiExport ActionFunction: public QObject { Q_OBJECT public: /// Constructor explicit ActionFunction(QObject*); ~ActionFunction() override; /*! Connects the QAction's triggered() signal with the function \a func */ void trigger(QAction* a, std::function func); void toggle(QAction* a, std::function func); void hover(QAction* a, std::function func); private Q_SLOTS: void triggered(); void toggled(bool); void hovered(); private: QScopedPointer d_ptr; Q_DISABLE_COPY(ActionFunction) Q_DECLARE_PRIVATE(ActionFunction) }; class TimerFunctionPrivate; class GuiExport TimerFunction: public QObject { Q_OBJECT public: /// Constructor explicit TimerFunction(QObject* = nullptr); ~TimerFunction() override; void setFunction(std::function func); void setFunction(std::function func, QObject* args); void setFunction(std::function func, QVariant args); void setAutoDelete(bool); void singleShot(int ms); private Q_SLOTS: void timeout(); private: QScopedPointer d_ptr; Q_DISABLE_COPY(TimerFunction) Q_DECLARE_PRIVATE(TimerFunction) }; } // namespace Gui #endif // GUI_ACTIONFUNCTION_H