aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2007-11-24 00:33:42 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2007-11-24 00:33:42 +0000
commitc00ea30f26399a1e94e923bcb5707434e745530a (patch)
tree9cbfa84436300ab3ad0fba0bd660797c4b4a5899
parent91e2f3ffda622e180b88bb8ae0fa6ebbb42c8888 (diff)
- created tkwidgets_list_options() to query which Tk options are supported
- removed set_tk_widgets_ids() from places where it wasn't need AFAIK - minor renames and cleanups svn path=/trunk/externals/tkwidgets/; revision=9029
-rw-r--r--checkbutton.c12
-rw-r--r--shared/tkwidgets.c23
-rw-r--r--shared/tkwidgets.h5
-rw-r--r--text.c25
4 files changed, 44 insertions, 21 deletions
diff --git a/checkbutton.c b/checkbutton.c
index 75ec581..8764907 100644
--- a/checkbutton.c
+++ b/checkbutton.c
@@ -115,7 +115,6 @@ static void set_tkwidgets_ids(t_checkbutton* x, t_canvas* canvas)
static void checkbutton_drawme(t_checkbutton *x, t_glist *glist)
{
-
set_tkwidgets_ids(x,glist_getcanvas(glist));
sys_vgui("destroy %s\n", x->widget_id->s_name); /* just in case it exists */
sys_vgui("checkbutton %s\n",
@@ -128,12 +127,13 @@ static void checkbutton_drawme(t_checkbutton *x, t_glist *glist)
text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
x->widget_id->s_name,
x->window_tag->s_name, x->all_tag->s_name);
+ tkwidgets_bind_key_events(x->canvas_id, x->widget_id);
+ tkwidgets_bind_mouse_events(x->canvas_id, x->widget_id);
}
-static void checkbutton_erase(t_checkbutton* x, t_glist* glist)
+static void checkbutton_erase(t_checkbutton* x)
{
- set_tkwidgets_ids(x, glist_getcanvas(glist));
sys_vgui("destroy %s\n", x->widget_id->s_name);
sys_vgui("%s delete %s\n", x->canvas_id->s_name, x->all_tag->s_name);
}
@@ -185,8 +185,8 @@ static void checkbutton_displace(t_gobj *z, t_glist *glist, int dx, int dy)
x->x_obj.te_ypix += dy;
if (glist_isvisible(glist))
{
- set_tkwidgets_ids(x,glist_getcanvas(glist));
- sys_vgui("%s move %s %d %d\n", x->canvas_id->s_name, x->all_tag->s_name, dx, dy);
+ sys_vgui("%s move %s %d %d\n",
+ x->canvas_id->s_name, x->all_tag->s_name, dx, dy);
sys_vgui("%s move RSZ %d %d\n", x->canvas_id->s_name, dx, dy);
canvas_fixlinesfor(glist_getcanvas(glist), (t_text*) x);
}
@@ -204,7 +204,7 @@ static void checkbutton_vis(t_gobj *z, t_glist *glist, int vis)
if (vis)
checkbutton_drawme(s, glist);
else
- checkbutton_erase(s, glist);
+ checkbutton_erase(s);
}
/* --------------------------- methods -------------------------------------- */
diff --git a/shared/tkwidgets.c b/shared/tkwidgets.c
index eec524a..65dba8f 100644
--- a/shared/tkwidgets.c
+++ b/shared/tkwidgets.c
@@ -51,11 +51,11 @@ void tkwidgets_store_options(t_symbol *receive_name, t_symbol *tcl_namespace,
int i;
for(i = 0; i < argc; i++)
{
- sys_vgui("set ::%s::ret [%s cget -%s]\n",
+ sys_vgui("set ::%s::tmp [%s cget -%s]\n",
tcl_namespace->s_name, widget_id->s_name, argv[i]);
- sys_vgui("if {[string length $::%s::ret] > 0} {\n",
+ sys_vgui("if {[string length $::%s::tmp] > 0} {\n",
tcl_namespace->s_name);
- sys_vgui("lappend ::%s::list -%s; lappend ::%s::list $::%s::ret}\n",
+ sys_vgui("lappend ::%s::list -%s; lappend ::%s::list $::%s::tmp}\n",
tcl_namespace->s_name, argv[i],
tcl_namespace->s_name, tcl_namespace->s_name);
}
@@ -64,8 +64,7 @@ void tkwidgets_store_options(t_symbol *receive_name, t_symbol *tcl_namespace,
sys_vgui("unset ::%s::list \n", tcl_namespace->s_name);
}
-void tkwidgets_restore_options(t_symbol *receive_name, t_symbol *tcl_namespace,
- t_symbol *widget_id, t_binbuf *options_binbuf)
+void tkwidgets_restore_options(t_symbol *widget_id, t_binbuf *options_binbuf)
{
int length;
char *options;
@@ -74,6 +73,20 @@ void tkwidgets_restore_options(t_symbol *receive_name, t_symbol *tcl_namespace,
sys_vgui("%s configure %s\n", widget_id->s_name, options);
}
+/* output a list of available options for this widget */
+void tkwidgets_list_options(t_outlet *status_outlet, int argc, char** argv)
+{
+ int i;
+ t_binbuf *bb = binbuf_new();
+ for(i = 0; i < argc; ++i)
+ {
+ binbuf_addv(bb, "s", gensym(argv[i]));
+ }
+ outlet_anything(status_outlet, gensym("options"),
+ binbuf_getnatom(bb), binbuf_getvec(bb));
+}
+
+
/* -------------------- generate names for various elements ----------------- */
t_symbol* tkwidgets_gen_tcl_namespace(t_object* x, t_symbol* widget_name)
diff --git a/shared/tkwidgets.h b/shared/tkwidgets.h
index 342162e..fa444fa 100644
--- a/shared/tkwidgets.h
+++ b/shared/tkwidgets.h
@@ -71,11 +71,10 @@ 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_restore_options(t_symbol *receive_name, t_symbol *tcl_namespace,
- t_symbol *widget_id, t_binbuf *options_binbuf);
+void tkwidgets_restore_options(t_symbol *widget_id, t_binbuf *options_binbuf);
void tkwidgets_query_options(t_symbol *receive_name, t_symbol *widget_id,
int argc, char** argv);
-
+void tkwidgets_list_options(t_outlet *status_outlet, 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);
diff --git a/text.c b/text.c
index 209951f..a9c8266 100644
--- a/text.c
+++ b/text.c
@@ -27,6 +27,7 @@
/* TODO: set message doesnt work with a loadbang */
/* TODO: window name "handle1376fc00" already exists in parent */
/* TODO: figure out window vs. text width/height */
+/* TODO: handle bg color on select/deselect */
#define DEFAULT_COLOR "grey70"
@@ -193,8 +194,7 @@ static void textwidget_drawme(t_textwidget *x, t_glist *glist)
text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
x->frame_id->s_name, x->window_tag->s_name, x->all_tag->s_name,
x->width, x->height);
- tkwidgets_restore_options(x->receive_name, x->tcl_namespace,
- x->widget_id, x->options_binbuf);
+ tkwidgets_restore_options(x->widget_id, x->options_binbuf);
}
static void textwidget_erase(t_textwidget* x)
@@ -228,7 +228,7 @@ static void textwidget_displace(t_gobj *z, t_glist *glist, int dx, int dy)
x->x_obj.te_ypix += dy;
if (glist_isvisible(glist))
{
- set_tkwidgets_ids(x,glist_getcanvas(glist));
+// set_tkwidgets_ids(x,glist_getcanvas(glist)); /* TODO is this needed here? */
sys_vgui("%s move %s %d %d\n", x->canvas_id->s_name, x->all_tag->s_name, dx, dy);
sys_vgui("%s move RESIZE %d %d\n", x->canvas_id->s_name, dx, dy);
canvas_fixlinesfor(glist_getcanvas(glist), (t_text*) x);
@@ -471,7 +471,9 @@ static void textwidget_save(t_gobj *z, t_binbuf *b)
binbuf_addv(b, ";");
}
-static void textwidget_option(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
+/* this function uses the selector as the Tk option and applies the whole
+ * message directly to the Tk widget itself using Tk's "configure" */
+static void textwidget_set_option(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
{
if(s != &s_list)
{
@@ -483,7 +485,6 @@ static void textwidget_option(t_textwidget *x, t_symbol *s, int argc, t_atom *ar
binbuf_gettext(argument_binbuf, &argument_buffer, &buffer_length);
binbuf_free(argument_binbuf);
argument_buffer[buffer_length] = 0;
- post("argument_buffer: %s", argument_buffer);
sys_vgui("%s configure -%s {%s} \n",
x->widget_id->s_name, s->s_name, argument_buffer);
tkwidgets_store_options(x->receive_name, x->tcl_namespace, x->widget_id,
@@ -492,6 +493,13 @@ static void textwidget_option(t_textwidget *x, t_symbol *s, int argc, t_atom *ar
}
}
+static void textwidget_options(t_textwidget *x)
+{
+ tkwidgets_list_options(x->x_status_outlet,
+ sizeof(textwidget_tk_options)/sizeof(char *),
+ (char **)&textwidget_tk_options);
+}
+
static void query_scrollbars(t_textwidget *x)
{
t_atom state[2];
@@ -665,7 +673,7 @@ static void *textwidget_new(t_symbol *s, int argc, t_atom *argv)
pd_bind(&x->x_obj.ob_pd, x->receive_name);
x->x_glist = canvas_getcurrent();
- set_tkwidgets_ids(x, x->x_glist);
+// set_tkwidgets_ids(x, x->x_glist); /* TODO: is this needed here? */
x->iolets_tag = tkwidgets_gen_iolets_tag((t_object*)x);
x->all_tag = tkwidgets_gen_all_tag((t_object*)x);
@@ -681,7 +689,7 @@ void text_setup(void) {
0, A_GIMME, 0);
class_addbang(textwidget_class, (t_method)textwidget_bang_output);
- class_addanything(textwidget_class, (t_method)textwidget_option);
+ class_addanything(textwidget_class, (t_method)textwidget_set_option);
class_addmethod(textwidget_class, (t_method)textwidget_append,
gensym("append"), A_GIMME, 0);
@@ -689,6 +697,8 @@ void text_setup(void) {
gensym("clear"), 0);
class_addmethod(textwidget_class, (t_method)textwidget_key,
gensym("key"), A_GIMME, 0);
+ class_addmethod(textwidget_class, (t_method)textwidget_options,
+ gensym("options"), 0);
class_addmethod(textwidget_class, (t_method)textwidget_query,
gensym("query"), A_DEFSYMBOL, 0);
class_addmethod(textwidget_class, (t_method)textwidget_scrollbars,
@@ -697,6 +707,7 @@ void text_setup(void) {
gensym("set"), A_GIMME, 0);
class_addmethod(textwidget_class, (t_method)textwidget_size,
gensym("size"), A_DEFFLOAT, A_DEFFLOAT, 0);
+
/* callbacks */
class_addmethod(textwidget_class, (t_method)textwidget_store_callback,
gensym("store_callback"), A_GIMME, 0);