From e1e0533814d29fea5d0ba318df034a9e82ec6df3 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 22 Nov 2007 02:53:22 +0000 Subject: - moved store_options() to tkwidgets_store_options() in tkwidgets.c and made [text] work with it there. - made tkwidgets_store_options() ignore blank options - minor cleanups svn path=/trunk/externals/tkwidgets/; revision=9023 --- shared/tkwidgets.c | 46 ++++++++++++++++++++++++++++++++++++---------- shared/tkwidgets.h | 8 ++++++++ 2 files changed, 44 insertions(+), 10 deletions(-) (limited to 'shared') diff --git a/shared/tkwidgets.c b/shared/tkwidgets.c index 4d3ec2e..a2c520f 100644 --- a/shared/tkwidgets.c +++ b/shared/tkwidgets.c @@ -32,6 +32,7 @@ t_symbol *canvas_getname(t_canvas *canvas) return gensym(buf); } +/* -------------------- options handling ------------------------------------ */ void tkwidgets_query_options(t_symbol *receive_name, t_symbol *widget_id, int argc, char** argv) @@ -42,6 +43,29 @@ void tkwidgets_query_options(t_symbol *receive_name, t_symbol *widget_id, receive_name->s_name, argv[i], widget_id->s_name, argv[i]); } +/* this function queries the widget and sends the data to the store_callback */ +void tkwidgets_store_options(t_symbol *receive_name, t_symbol *tcl_namespace, + t_symbol *widget_id, int argc, char **argv) +{ + // build list then send the whole shebang to store_callback + int i; + post("tkwidgets_store_options total options: %d", argc); + for(i = 0; i < argc; i++) + { + // TODO: only send if there is a value, not when blank + sys_vgui("set ::%s::ret [%s cget -%s]\n", + tcl_namespace->s_name, widget_id->s_name, argv[i]); + sys_vgui("if {[string length $::%s::ret] > 0} {\n", + tcl_namespace->s_name); + sys_vgui("lappend ::%s::store_list -%s ; lappend ::%s::store_list $::%s::ret}\n", + tcl_namespace->s_name, argv[i], + tcl_namespace->s_name, tcl_namespace->s_name); + } + sys_vgui("pd [concat %s store_callback $::%s::store_list \\;]\n", + receive_name->s_name, tcl_namespace->s_name); + sys_vgui("unset ::%s::store_list \n", tcl_namespace->s_name); +} + void tkwidgets_restore_options(t_symbol *receive_name, t_symbol *widget_id, int argc, char** argv) { @@ -54,6 +78,8 @@ void tkwidgets_restore_options(t_symbol *receive_name, t_symbol *widget_id, } } +/* -------------------- generate names for various elements ----------------- */ + t_symbol* tkwidgets_gen_tcl_namespace(t_object* x, t_symbol* widget_name) { char buf[MAXPDSTRING]; @@ -124,16 +150,6 @@ t_symbol* tkwidgets_gen_all_tag(t_object *x) return gensym(buf); } -void tkwidgets_draw_handle() -{ - // TODO draw resize handle when selected in editmode -} - -void tkwidgets_draw_resize_window() -{ - // TODO draw the resize window while resizing -} - /* -------------------- inlets/outlets -------------------------------------- */ static int calculate_onset(int x_location, int width, @@ -178,4 +194,14 @@ void tkwidgets_erase_inlets(t_symbol* canvas_id, t_symbol* iolets_tag) sys_vgui("%s delete %s\n", canvas_id->s_name, iolets_tag); } +/* -------------------- gui elements for resizing --------------------------- */ +void tkwidgets_draw_handle() +{ + // TODO draw resize handle when selected in editmode +} + +void tkwidgets_draw_resize_window() +{ + // TODO draw the resize window while resizing +} diff --git a/shared/tkwidgets.h b/shared/tkwidgets.h index 9f0dea4..999e2ac 100644 --- a/shared/tkwidgets.h +++ b/shared/tkwidgets.h @@ -68,6 +68,14 @@ t_symbol* canvas_getname(t_canvas *canvas); void tkwidgets_setcallbackname(void *x, char *widget_name); +/* handle options */ +void tkwidgets_store_options(t_symbol *receive_name, t_symbol *tcl_namespace, + t_symbol *widget_id, int argc, char **argv); +void tkwidgets_query_options(t_symbol *receive_name, t_symbol *widget_id, + int argc, char** argv); + + +/* generate ID and tag names for using in Tcl/Tk space */ t_symbol* tkwidgets_gen_tcl_namespace(t_object* x, t_symbol* widget_name); t_symbol* tkwidgets_gen_callback_name(t_symbol* tcl_namespace); t_symbol* tkwidgets_gen_canvas_id(t_canvas* canvas); -- cgit v1.2.1