From c92435f277bd2c081fb6f712548f42a6c35f076c Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 13 Nov 2007 05:31:50 +0000 Subject: got selecting with a click working, but not deselecting afterwards svn path=/trunk/externals/bbogart/; revision=8984 --- entry/entry.c | 243 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 188 insertions(+), 55 deletions(-) (limited to 'entry') diff --git a/entry/entry.c b/entry/entry.c index 5f84bab..c2d55c9 100644 --- a/entry/entry.c +++ b/entry/entry.c @@ -26,6 +26,8 @@ /* TODO: make [size( message redraw object */ /* TODO: set message doesnt work with a loadbang */ /* TODO: complete inlet draw/erase logic */ +/* TODO: unbind text from all key events when selected */ +/* TODO try binding to FocusIn and FocusOut for making selection */ #ifdef _MSC_VER #pragma warning( disable : 4244 ) @@ -38,6 +40,15 @@ #define BACKGROUNDCOLOR "grey70" +#define TKW_HANDLE_HEIGHT 10 +#define TKW_HANDLE_WIDTH 10 + +#define SCOPE_SELBDWIDTH 3.0 +#define SCOPE_DEFWIDTH 130 /* CHECKED */ +#define SCOPE_MINWIDTH 66 +#define SCOPE_DEFHEIGHT 130 /* CHECKED */ +#define SCOPE_MINHEIGHT 34 + #define TOTAL_INLETS 1 #define TOTAL_OUTLETS 2 @@ -46,11 +57,17 @@ typedef struct _entry { t_object x_obj; + t_canvas *x_canvas; + t_glist *x_glist; int x_rect_width; int x_rect_height; t_symbol* x_receive_name; + int h_dragon; + int h_dragx; + int h_dragy; + /* TODO: these all should be settable by messages */ int x_height; int x_width; @@ -65,8 +82,8 @@ typedef struct _entry t_float x_border; t_symbol *x_relief; t_int x_have_scrollbar; - - t_canvas *canvas; + t_int x_selected; + /* IDs for Tk widgets */ char *tcl_namespace; char *canvas_id; @@ -74,7 +91,9 @@ typedef struct _entry char *text_id; char *scrollbar_id; char *handle_id; - char *window_id; + char *window_tag; + char *all_tag; + char *outline_tag; t_outlet* x_data_outlet; t_outlet* x_status_outlet; @@ -102,6 +121,8 @@ static void entry_select(t_gobj *z, t_glist *glist, int state); static void entry_activate(t_gobj *z, t_glist *glist, int state); static void entry_delete(t_gobj *z, t_glist *glist); static void entry_vis(t_gobj *z, t_glist *glist, int vis); +static void entry_activate(t_gobj *x, struct _glist *glist, int state); +//static int entry_click(t_gobj *x, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit); static void entry_save(t_gobj *z, t_binbuf *b); @@ -128,7 +149,7 @@ static void set_tk_widget_ids(t_entry *x, t_canvas *canvas) { char buf[MAXPDSTRING]; - x->canvas = canvas; + x->x_canvas = canvas; /* Tk ID for the current canvas that this object is drawn in */ sprintf(buf,".x%lx.c", (long unsigned int) canvas); @@ -140,29 +161,26 @@ static void set_tk_widget_ids(t_entry *x, t_canvas *canvas) x->frame_id = getbytes(strlen(buf)); strcpy(x->frame_id, buf); - sprintf(buf,"%s.text", x->frame_id); + sprintf(buf,"%s.text%lx", x->frame_id, (long unsigned int)x); x->text_id = getbytes(strlen(buf)); strcpy(x->text_id, buf); /* Tk ID for the "text", the meat! */ sprintf(buf,"%s.window%lx", x->canvas_id, (long unsigned int)x); - x->window_id = getbytes(strlen(buf)); - strcpy(x->window_id, buf); /* Tk ID for the resizing "window" */ + x->window_tag = getbytes(strlen(buf)); + strcpy(x->window_tag, buf); /* Tk ID for the resizing "window" */ + post(""); sprintf(buf,"%s.handle%lx", x->canvas_id, (long unsigned int)x); x->handle_id = getbytes(strlen(buf)); strcpy(x->handle_id, buf); /* Tk ID for the resizing "handle" */ - sprintf(buf,"%s.scrollbar", x->frame_id); + sprintf(buf,"%s.scrollbar%lx", x->frame_id, (long unsigned int)x); x->scrollbar_id = getbytes(strlen(buf)); strcpy(x->scrollbar_id, buf); /* Tk ID for the optional "scrollbar" */ - post("buf: %s scrollbar_id %s", buf, x->scrollbar_id); - post("buf: %s handle_id %s", buf, x->handle_id); -} - -static void draw_resize_handle(t_entry *x) -{ - + sprintf(buf,"all%lx", (long unsigned int)x); + x->all_tag = getbytes(strlen(buf)); + strcpy(x->all_tag, buf); /* Tk ID for the optional "scrollbar" */ } static int calculate_onset(t_entry *x, t_glist *glist, @@ -185,35 +203,35 @@ static void draw_inlets(t_entry *x, t_glist *glist, int firsttime, onset = calculate_onset(x, glist, i, total_inlets); if (firsttime) { - sys_vgui("%s create rectangle %d %d %d %d -tags {%xi%d %xi}\n", + sys_vgui("%s create rectangle %d %d %d %d -tags {%xi%d %xi %s}\n", x->canvas_id, onset, text_ypix(&x->x_obj, glist) - 1, onset + IOWIDTH, text_ypix(&x->x_obj, glist), - x, i, x); + x, i, x, x->all_tag); } - else +/* else { sys_vgui("%s coords %xi%d %d %d %d %d\n", x->canvas_id, x, i, onset, text_ypix(&x->x_obj, glist) - 1, onset + IOWIDTH, text_ypix(&x->x_obj, glist)); - } + }*/ } for (i = 0; i < total_outlets; i++) /* outlets */ { onset = calculate_onset(x, glist, i, total_outlets); if (firsttime) { - sys_vgui("%s create rectangle %d %d %d %d -tags {%xo%d %xo}\n", + sys_vgui("%s create rectangle %d %d %d %d -tags {%xo%d %xo %s}\n", x->canvas_id, onset, text_ypix(&x->x_obj, glist) + x->x_rect_height - 1, onset + IOWIDTH, text_ypix(&x->x_obj, glist) + x->x_rect_height, - x, i, x); + x, i, x, x->all_tag); } - else +/* else { sys_vgui("%s coords %xo%d %d %d %d %d\n", x->canvas_id, x, i, onset, text_ypix(&x->x_obj, glist) + x->x_rect_height - 1, onset + IOWIDTH, text_ypix(&x->x_obj, glist) + x->x_rect_height); - } + }*/ } DEBUG(post("draw inlet end");); } @@ -242,20 +260,31 @@ static void erase_scrollbar(t_entry *x) x->x_have_scrollbar = 0; } +static void draw_resize_handle(t_entry *x) +{ +} + +static void erase_resize_handle(t_entry *x) +{ +} + + static void bind_button_events(t_entry *x) { + sys_vgui("bind %s