#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 <class T>
inline void enableCommand(T *target, CommandId cmdId, void (T::*method)())
{
enableCommand(cmdId, new CommandHandlerHelper<T>(target, method));
}
template <class T, typename R>
inline void enableCommand(T *target, CommandId cmdId, void (T::*method)(R), R value)
{
enableCommand(cmdId, new CommandHandlerHelper2<T, R>(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