#pragma once #ifndef TSELECTION_H #define TSELECTION_H #include "menubarcommand.h" #include "tcommon.h" #undef DVAPI #undef DVVAR #ifdef TOONZQT_EXPORTS #define DVAPI DV_EXPORT_API #define DVVAR DV_EXPORT_VAR #else #define DVAPI DV_IMPORT_API #define DVVAR DV_IMPORT_VAR #endif class QMenu; class QWidget; //============================================================================= // TSelection //----------------------------------------------------------------------------- class DVAPI TSelection { public: class View { public: virtual ~View(){}; virtual void onSelectionChanged() = 0; virtual void enableCommands() {} }; public: TSelection(); virtual ~TSelection(); // override this to define selection related commands virtual void enableCommands() { if (m_view) m_view->enableCommands(); } // call selection handler enableCommand() void enableCommand(CommandId cmdId, CommandHandlerInterface *handler); // overridden enableCommands() will call enableCommand() template inline void enableCommand(T *target, CommandId cmdId, void (T::*method)()) { enableCommand(cmdId, new CommandHandlerHelper(target, method)); } template inline void enableCommand(T *target, CommandId cmdId, void (T::*method)(R), R value) { enableCommand(cmdId, new CommandHandlerHelper2(target, method, value)); } void makeCurrent(); void makeNotCurrent(); static TSelection *getCurrent(); static void setCurrent(TSelection *selection); virtual bool isEmpty() const = 0; virtual void selectNone() = 0; virtual bool addMenuActions(QMenu *menu) { return false; } void addMenuAction(QMenu *menu, CommandId cmdId); void setView(View *view) { m_view = view; } View *getView() const { return m_view; } void notifyView(); private: View *m_view; }; #endif // TSELECTION_H