diff options
author | Thomas Grill <xovo@users.sourceforge.net> | 2002-10-22 23:16:30 +0000 |
---|---|---|
committer | Thomas Grill <xovo@users.sourceforge.net> | 2002-10-22 23:16:30 +0000 |
commit | c2645dc4003b1391aba9b387a79a66cff1e63d3e (patch) | |
tree | 1ea6dccb8011a8ff64efb7c2ecf9a22caad860b3 /externals/grill/guitest/flgui.h | |
parent | d62e56f4df9594f72ce501f5e19c974fd18e7295 (diff) |
This commit was generated by cvs2svn to compensate for changes in r189,
which included commits to RCS files with non-trunk default branches.
svn path=/trunk/; revision=190
Diffstat (limited to 'externals/grill/guitest/flgui.h')
-rw-r--r-- | externals/grill/guitest/flgui.h | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/externals/grill/guitest/flgui.h b/externals/grill/guitest/flgui.h new file mode 100644 index 00000000..ac42ab7b --- /dev/null +++ b/externals/grill/guitest/flgui.h @@ -0,0 +1,232 @@ +#ifndef __FLEXT_GUI +#define __FLEXT_GUI + +#define FLEXT_GUI +#include <flext.h> + +#ifdef PD +#pragma warning( disable : 4091 ) +#include <g_canvas.h> +#endif + +class Canvas; +class GuiObj; +class GuiGroup; +class GuiSingle; + +class flext_gui: + virtual public flext_base +{ + FLEXT_HEADER_S(flext_gui,flext_base,setup) + +public: + flext_gui(int xs,int ys); + ~flext_gui(); + + enum CBEvs { + evNone = 0, + evMotion = 0x01, + evMouseDown = 0x02, + evMouseUp = 0x04, + evMouseWheel = 0x08, + evKeyDown = 0x10, + evKeyUp = 0x20 + }; + + class CBParams { + public: + CBParams(CBEvs k = evNone): kind(k),ext(false) {} + + CBEvs kind; + union { + struct { int x,y,mod; } pMotion; + struct { int x,y,b,mod; } pMouseKey; + struct { int x,y,mod,delta; } pMouseWheel; + struct { int k,a,mod; } pKey; + }; + bool ext; + }; + + static int EventMask() { return evmask; } + + bool BindEvent(GuiSingle &o,bool (*cb)(flext_gui &o,GuiSingle &obj,const CBParams &p),int evs); + void UnbindEvent(GuiSingle &o,bool (*cb)(flext_gui &o,GuiSingle &obj,const CBParams &p),int evs); + +protected: + + virtual void g_Create() {} + virtual void g_Delete(); +// virtual void g_GetRect(int &xp1,int &yp1,int &xp2,int &yp2); + virtual void g_Edit(bool selected) {} + virtual void g_Displace(int dx, int dy); +// virtual void g_Activate(bool state) {} +// virtual int g_Click(int xpix, int ypix, int shift, int alt, int dbl, int doit) { return 0; } + virtual void g_Properties() {} + virtual void g_Save(t_binbuf *b) {} +/* + virtual bool g_Motion(GuiObj &obj,int x,int y,int mod) { return false; } + virtual bool g_MouseKey(GuiObj &obj,bool down,int x,int y,int b,int mod) { return false; } + virtual bool g_MouseWheel(GuiObj &obj,int x,int y,int d,int mod) { return false; } + virtual bool g_Key(GuiObj &obj,bool down,int k,int a,int n,int mod) { return false; } + virtual bool g_Region(GuiObj &obj,bool on,int mod) { return false; } + virtual bool g_Focus(GuiObj &obj,bool on,int mod) { return false; } +*/ + +#ifdef PD + bool Selected() const { return selected; } + + void FixLines() { canvas_fixlinesfor( thisCanvas(), thisHdr() ); } + void DelLines() { canvas_deletelinesfor( glist_getcanvas(thisCanvas()), (t_text *)thisHdr()); } + + int XLo() const { return thisHdr()->te_xpix; } + int YLo() const { return thisHdr()->te_ypix; } + int XHi() const { return XLo()+XSize()-1; } + int YHi() const { return YLo()+YSize()-1; } + void XLo(int x) { thisHdr()->te_xpix = x; } + void YLo(int y) { thisHdr()->te_ypix = y; } + + int XSize() const { return xsize; } + int YSize() const { return ysize; } +#else // MAXMSP + bool Selected() const { return box_ownerlocked((t_box *)(&thisHdr()->z_box)) == 0; } + + void FixLines() {} + void DelLines() {} + + int XLo() const { return thisHdr()->z_box.b_rect.left; } + int YLo() const { return thisHdr()->z_box.b_rect.top; } + int XHi() const { return thisHdr()->z_box.b_rect.right; } + int YHi() const { return thisHdr()->z_box.b_rect.bottom; } + void XLo(int x) { thisHdr()->z_box.b_rect.left = x; } + void YLo(int y) { thisHdr()->z_box.b_rect.top = y; } + + int XSize() const { return XHi()-XLo()+1; } + int YSize() const { return YHi()-YLo()+1; } +#endif + + const t_symbol *Id() const { return bindsym; } + + GuiGroup &Group() { return *objs; } + + + static void Setup(t_class *c); + + + enum Modifier { + mod_None = 0, + mod_Ctrl = 0x0001, + mod_Shift = 0x0002, + mod_Alt = 0x0004, + mod_Meta = 0x0008, + mod_Mod1 = 0x0010, + mod_Mod2 = 0x0020, + mod_Mod3 = 0x0040, + mod_Caps = 0x0080, + mod_Double = 0x0100, +// mod_Triple = 0x0200, + mod_Button1 = 0x1000, + mod_Button2 = 0x2000, + mod_Button3 = 0x4000, + mod_Button4 = 0x8000 + }; + +private: + bool visible; + Canvas *canvas; + GuiGroup *objs; + + const t_symbol *bindsym; + + static int evmask; + + static void setup(t_class *); + + virtual void m_Method(const CBParams &p); + +#ifdef PD + bool selected; + int xsize,ysize; + + static void sg_getrect(t_gobj *c, t_glist *,int *xp1, int *yp1, int *xp2, int *yp2); + static void sg_displace(t_gobj *c, t_glist *, int dx, int dy); + static void sg_select(t_gobj *c, t_glist *, int selected); +// static void sg_activate(t_gobj *c, t_glist *, int state) { thisObject(c)->g_Activate(state != 0); } + static void sg_delete(t_gobj *c, t_glist *); + static void sg_vis(t_gobj *c, t_glist *, int vis); + static int sg_click(t_gobj *c, t_glist *,int xpix, int ypix, int shift, int alt, int dbl, int doit); + static void sg_properties(t_gobj *c, t_glist *); + static void sg_save(t_gobj *c, t_binbuf *b); +// static void sg_motion(void *c, float dx,float dy) { thisObject((t_gobj *)c)->g_Motion(dx,dy); } + + static bool sg_Key(flext_base *c,int argc,t_atom *argv); + static bool sg_KeyNum(flext_base *c,int &keynum); + static bool sg_KeyUp(flext_base *c,int &keynum); + + static t_widgetbehavior widgetbehavior; + static void SetWidget(t_class *c); + + struct px_object; + struct pxkey_object; + static int curmod; //,lastkey; + static pxkey_object *pxkey; + + class canvobj { + public: + canvobj(flext_gui *go): guiobj(go),nxt(NULL) {} + + flext_gui *guiobj; + canvobj *nxt; + }; + + class guicanv { + public: + guicanv(t_canvas *c); + ~guicanv(); + + int Refs() const { return ref; } + void Push(flext_gui *o); + void Pop(flext_gui *o); + +#ifdef DIRECT_TK + px_object *px; +#endif + const t_symbol *sym; + t_canvas *canv; + guicanv *nxt; + canvobj *head,*tail; + int ref; + }; + + static guicanv *gcanv; + static const t_symbol *gcm_motion,*gcm_mousekey,*gcm_mousewheel,*gcm_key,*gcm_destroy; + static void px_method(px_object *c,const t_symbol *s,int argc,t_atom *argv); + static void pxkey_method(pxkey_object *c,const t_symbol *s,int argc,t_atom *argv); + + void AddCanvas(); + void RmvCanvas(); + static void DelCanvas(t_canvas *c); + +public: + static t_class *px_class,*pxkey_class; + static void sg_tk(t_canvas *c,const t_symbol *s,int argc,t_atom *argv); + +#else + int curx,cury,curmod; + bool created; + static t_clock clock; + static t_qelem qelem; + + void Update(); + + static void sg_click(t_object *x, Point pt, short modifiers); + static void sg_update(t_object *x); + static void sg_psave (t_object *x, t_binbuf *dest); + static void sg_bfont (t_object *x, short size, short font); + static void sg_key (t_object *x,short keyvalue); + static void sg_enter (t_object *x); + static void sg_clipregion (t_object *x, RgnHandle *rgn, short *result); + static void sg_bidle(t_object *x); +#endif +}; + +#endif |