115 lines
2.6 KiB
C++
115 lines
2.6 KiB
C++
#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<TButtonSet *> *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 T>
|
|
class TButtonSetActionT : public TButtonSetAction {
|
|
public:
|
|
typedef void (T::*CommandMethod)(string);
|
|
|
|
T *m_target;
|
|
CommandMethod m_method;
|
|
|
|
TButtonSetActionT<T>(T *target, CommandMethod method)
|
|
: m_target(target), m_method(method){};
|
|
void sendCommand(string value) { (m_target->*m_method)(value); };
|
|
};
|
|
|
|
class DVAPI TButtonSet {
|
|
std::map<TButton *, string> *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
|