#pragma once #ifndef TNZ_BUTTON_INCLUDED #define TNZ_BUTTON_INCLUDED #include "tw/tw.h" #include "tw/action.h" #include "traster.h" #undef DVAPI #undef DVVAR #ifdef TWIN_EXPORTS #define DVAPI DV_EXPORT_API #define DVVAR DV_EXPORT_VAR #else #define DVAPI DV_IMPORT_API #define DVVAR DV_IMPORT_VAR #endif class TButtonSet; class DVAPI TButton : public TWidget, public TCommandSource { protected: bool m_pressed, m_active; int m_border; vector *m_buttonSets; friend class TButtonSet; public: TButton(TWidget *parent, string name = "button"); ~TButton(); void repaint(); void enter(const TPoint &p); void leave(const TPoint &p); void leftButtonDown(const TMouseEvent &); void leftButtonUp(const TMouseEvent &); virtual void setTitle(string title) { m_name = title; } }; class DVAPI TIconButton : public TButton { TRaster32P m_rasterUp, m_rasterDown; public: TIconButton(TWidget *parent, TRaster32P raster, string name = "button"); TIconButton(TWidget *parent, TRaster32P rasterUp, TRaster32P rasterDown, string name = "button"); void repaint(); void leftButtonDown(const TMouseEvent &); void leftButtonUp(const TMouseEvent &); }; class DVAPI TIconToggle : public TButton { TRaster32P m_up, m_down; public: TIconToggle(TWidget *parent, TRaster32P up, TRaster32P down, string name = "button"); void repaint(); void setStatus(bool v); bool getStatus(); void leftButtonDown(const TMouseEvent &e); void leftButtonUp(const TMouseEvent &e); }; class TButtonSetAction { public: TButtonSetAction(){}; virtual ~TButtonSetAction(){}; virtual void sendCommand(string value) = 0; }; template class TButtonSetActionT : public TButtonSetAction { public: typedef void (T::*CommandMethod)(string); T *m_target; CommandMethod m_method; TButtonSetActionT(T *target, CommandMethod method) : m_target(target), m_method(method){}; void sendCommand(string value) { (m_target->*m_method)(value); }; }; class DVAPI TButtonSet { std::map *m_buttons; string m_currentValue; TButtonSetAction *m_action; public: TButtonSet(); ~TButtonSet(); private: // not implemented TButtonSet(const TButtonSet &); TButtonSet &operator=(const TButtonSet &); public: void addButton(TButton *button, string value); void removeButton(TButton *button); void setValue(string value); void setValue(TButton *value); // Note: setValue fires the buttons actions as well as the buttonset action string getValue() { return m_currentValue; }; void setAction(TButtonSetAction *action); void enable(bool on); }; #endif