aboutsummaryrefslogtreecommitdiff
path: root/test/pmenu.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/pmenu.c')
-rw-r--r--test/pmenu.c436
1 files changed, 0 insertions, 436 deletions
diff --git a/test/pmenu.c b/test/pmenu.c
deleted file mode 100644
index 458a0b6..0000000
--- a/test/pmenu.c
+++ /dev/null
@@ -1,436 +0,0 @@
-/* pmenu widget for PD *
- * Based on:
- * pmenu by Ben Bogart
- * and button from GGEE by Guenter Geiger *
-
- * This program is distributed under the terms of the GNU General Public *
- * License *
-
- * pmenu is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
-
- * pmenu is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. */
-
-
-
-
-/* Append " x " to the following line to show debugging messages */
-#define DEBUG(x)
-
-
-#include <m_pd.h>
-#include <g_canvas.h>
-#include <stdio.h>
-#include <string.h>
-
-
-
-
-
-typedef struct _pmenu
-{
- t_object x_obj;
-
- t_glist * x_glist;
-
- t_symbol* callback;
-
- int current_selection;
- int x_num_options;
- t_symbol* bg_color;
- t_symbol* fg_color;
- t_symbol* hi_color;
- t_symbol* co_color;
-
- t_symbol** x_options;
- int x_maxoptions;
-
- int indicator;
- int focusing;
-
-} t_pmenu;
-
-#include "pmenu_w.h"
-
-static void pmenu_output(t_pmenu* x)
-{
-
-
-
- t_atom atoms[2];
- SETFLOAT(atoms,x->current_selection);
- SETSYMBOL(atoms+1,x->x_options[x->current_selection]);
- outlet_list(x->x_obj.ob_outlet, &s_list, 2, atoms);
- //if ( x->send != x->s_empty && x->send->s_thing) pd_forwardmess(x->send->s_thing, 2,atoms);
-
-}
-
-
-static void pmenu_callback(t_pmenu* x, t_floatarg f)
-{
- //DEBUG(post("output start");)
- x->current_selection= (int)f;
- //pmenu_w_text(x,x->x_options[x->current_selection]);
- pmenu_output(x);
-
-}
-/*
-static void pmenu_save(t_gobj *z, t_binbuf *b)
-{
- DEBUG(post("save start");)
-
-
- t_pmenu *x = (t_pmenu *)z;
-
- t_atom* creation = binbuf_getvec(x->x_obj.te_binbuf);
-
-
- t_symbol* send = x->s_empty;
- t_symbol* receive = x->s_empty;
- char buf[80];
- if ( x->send_set ) {
- atom_string(creation + 3, buf, 80);
- send = gensym(buf);
- }
-
- if ( x->receive_set ) {
- atom_string(creation + 4, buf, 80);
- receive = gensym(buf);
- }
-
- DEBUG(post("send: %s receive: %s",send->s_name,receive->s_name);)
-
- binbuf_addv(b, "ssiisiississss", gensym("#X"), gensym("obj"),
- x->x_obj.te_xpix, x->x_obj.te_ypix ,
- atom_getsymbol(creation),
- x->x_width, x->x_height, send,receive,x->saveitems,
- x->bg_color, x->fg_color,x->hi_color,x->co_color);
-
- // Loop for menu items
- int i;
- if ( x->saveitems) {
- for(i=0 ; i<x->x_num_options ; i++)
- {
- DEBUG(post("saving option: %s",x->x_options[i]->s_name);)
- binbuf_addv(b, "s", x->x_options[i]);
- }
- }
- binbuf_addv(b, ";");
-
- DEBUG(post("save end");)
-}
-*/
-
-static void pmenu_clear(t_pmenu* x) {
-
- x->x_num_options = 0;
- x->current_selection = -1;
- pmenu_w_clear(x);
-
-}
-
-/*
-static void pmenu_size(t_pmenu* x,t_symbol *s, int argc, t_atom *argv) {
-
- if (argc>2) argc =2;
- switch (argc) {
- case 2: if ( (argv+1)->a_type == A_FLOAT) x->x_height = atom_getfloat(argv+1);
- case 1: if ( argv->a_type == A_FLOAT) x->x_width = atom_getfloat(argv);
- break;
- }
-
- if ( x->x_width < 10) x->x_width = 10;
- if ( x->x_height < 10) x->x_height = 10;
-
- if ( pmenu_w_is_visible(x) ) {
- pmenu_w_resize(x);
- }
-}
-*/
-
-
-static void pmenu_add(t_pmenu* x, t_symbol *s, int argc, t_atom *argv) {
-
-
-
- // resize the options-array if it is too small
- if((argc + x->x_num_options) > x->x_maxoptions){
-
- x->x_options = resizebytes( x->x_options, x->x_maxoptions*sizeof(*(x->x_options)),
- (argc + x->x_num_options+10)*sizeof(*(x->x_options)));
- x->x_maxoptions=argc + x->x_num_options+10;
- }
-
- int i;
- t_symbol* label;
- for ( i=0;i<argc;i++) {
- if ((argv+i)->a_type==A_SYMBOL) {
-
- label = atom_getsymbol(argv+i);
- DEBUG(post("adding option: %s",label->s_name);)
- x->x_options[x->x_num_options] = label;
-
- pmenu_w_additem( x,label,x->x_num_options);
-
- x->x_num_options = x->x_num_options + 1;
- }
-
- }
-
-
-}
-
-
-
-// function to change the colors
-
-static void pmenu_colors(t_pmenu* x, t_symbol* s, int argc, t_atom* argv)
-{
-
- DEBUG(post("bgcolour start");)
-
- if ( argc && argv->a_type==A_SYMBOL && atom_getsymbol(argv)==gensym("default")) {
- x->bg_color = gensym("grey90");
- x->fg_color = gensym("black");
- x->hi_color = gensym("grey95");
- x->co_color = gensym("black");
- } else {
-
- if (argc > 4) argc = 4;
- switch (argc) {
- case 4: if ((argv+3)->a_type==A_SYMBOL) x->co_color = atom_getsymbol(argv+3);
- case 3: if ((argv+2)->a_type==A_SYMBOL) x->hi_color = atom_getsymbol(argv+2);
- case 2: if ((argv+1)->a_type==A_SYMBOL) x->fg_color = atom_getsymbol(argv+1);
- case 1: if ((argv)->a_type==A_SYMBOL) x->bg_color = atom_getsymbol(argv);
- break;
- }
- }
-
- pmenu_w_apply_colors(x);
-
-}
-
-
-static int pmenu_set_float(t_pmenu* x, t_floatarg item) {
-
-
- int i=(int)item;
- if( (i < x->x_num_options) && (i >= 0)) {
- x->current_selection = i;
- //if(pmenu_w_is_visible(x)) pmenu_w_text(x,x->x_options[x->current_selection]);
- pmenu_w_activate(x);
- return 1;
- } else {
- x->current_selection = -1;
- pmenu_w_activate(x);
- return 0;
- }
-
-}
-
-/* Function to select a menu option by inlet */
-static void pmenu_float(t_pmenu* x, t_floatarg item)
-{
- DEBUG(post("iselect start");)
-
- if ( pmenu_set_float(x,item) ) {
- pmenu_output(x);
- } else {
-
- //pd_error(x,"pmenu: expecting value between 0 and %i",x->x_num_options);
- }
-
- DEBUG(post("iselect end");)
-}
-
-static int pmenu_set_symbol(t_pmenu* x, t_symbol *s) {
-
-
- int i;
-
- /* Compare inlet symbol to each option */
- for(i=0; i < x->x_num_options; i++) {
- if(x->x_options[i]->s_name == s->s_name) {
- x->current_selection = i;
- //if(pmenu_w_is_visible(x)) pmenu_w_text(x,s);
- pmenu_w_activate(x);
- return 1;
- }
- }
- x->current_selection = -1;
- pmenu_w_activate(x);
- return 0;
-}
-
-
-/* Function to choose value via symbol name */
-static void pmenu_symbol(t_pmenu* x, t_symbol *s)
-{
- if(pmenu_set_symbol(x,s)) {
- pmenu_output(x);
- } else {
- post("pmenu: '%s' is not an available option.", s->s_name);
- }
-
-}
-
-/* Function to choose value via name/index but without outputting it*/
-static void pmenu_set(t_pmenu* x, t_symbol *S, int argc, t_atom*argv)
-{
- if(!argc)return;
-
- if(argv->a_type==A_FLOAT) {
- pmenu_set_float(x,atom_getfloat(argv));
- } else if(argv->a_type==A_SYMBOL) {
- pmenu_set_symbol(x,atom_getsymbol(argv));
- } else {
- pd_error(x, "pmenu: can only 'set' symbols or floats");
- }
-}
-
-
-
-
-
-
-static t_class *pmenu_class;
-
-/*
-static void pmenu_receive(t_pmenu* x, t_symbol* s) {
- if ( x->receive != x->s_empty ) pd_unbind(&x->x_obj.ob_pd, x->receive);
- if ( s == x->s_empty || s == x->s_) {
- x->receive = x->s_empty;
- } else {
- x->receive = s;
- pd_bind(&x->x_obj.ob_pd, x->receive);
- }
-
-}
-
-static void pmenu_send(t_pmenu* x, t_symbol* s) {
-
- if ( s == x->s_empty || s == x->s_ ) {
- x->send = x->s_empty;
- } else {
- x->send = s;
- }
-
-
-
-}
-*/
-
-static void pmenu_free(t_pmenu*x)
-{
- pmenu_w_menu(x,DESTROY);
-
-
- if(x->x_options)freebytes(x->x_options, sizeof(t_symbol*)*x->x_maxoptions);
- pd_unbind(&x->x_obj.ob_pd, x->callback);
-
- //if ( x->receive != x->s_empty ) pd_unbind(&x->x_obj.ob_pd, x->receive);
-}
-/*
-static void pmenu_saveitems( t_pmenu* x, t_float f) {
- x->saveitems = (f != 0);
-}
-*/
-
-static void *pmenu_new(t_symbol *s, int argc, t_atom *argv)
-{
- DEBUG(post("pmenu new start");)
-
- t_pmenu *x = (t_pmenu *)pd_new(pmenu_class);
- int i;
- char buf[256];
-
-
- x->current_selection = -1;
-
- x->x_maxoptions=10;
- x->x_options=(t_symbol**)getbytes(sizeof(t_symbol*)*x->x_maxoptions);
-
- x->x_num_options = 0 ;
-
- x->indicator = 1;
- x->focusing = 1;
-
-
- // These should match the default colors in pmenu_colors
- x->bg_color = gensym("grey90");
- x->fg_color = gensym("black");
- x->hi_color = gensym("grey95");
- x->co_color = gensym("black");
-
-
- if (argc > 6) argc = 6;
- switch(argc){
- case 6: if ((argv+5)->a_type==A_SYMBOL) x->co_color = atom_getsymbol(argv+5);
- case 5: if ((argv+4)->a_type==A_SYMBOL) x->hi_color = atom_getsymbol(argv+4);
- case 4: if ((argv+3)->a_type==A_SYMBOL) x->fg_color = atom_getsymbol(argv+3);
- case 3: if ((argv+2)->a_type==A_SYMBOL) x->bg_color = atom_getsymbol(argv+2);
- case 2: if ((argv+1)->a_type==A_FLOAT) x->focusing = atom_getfloat(argv+1);
- case 1: if ((argv)->a_type==A_FLOAT) x->indicator = atom_getfloat(argv);
- break;
- }
-
- /* Bind the recieve "pmenu%p" to the widget outlet*/
- sprintf(buf,"pmenu%p",x);
- x->callback = gensym(buf);
- pd_bind(&x->x_obj.ob_pd, x->callback);
-
- /* define proc in tcl/tk where "pmenu%p" is the receive, "callback" is the method, and "$index" is an argument. */
- sys_vgui("proc select%x {index} {\n pd [concat pmenu%p callback $index \\;]\n }\n",x,x);
-
-
- outlet_new(&x->x_obj, &s_symbol);
-
- pmenu_w_menu(x,CREATE);
- pmenu_w_apply_colors(x);
- //if (argc > 5) pmenu_add(x,&s_list,argc-5,argv+5);
-
-
-DEBUG(post("pmenu new end");)
-
- return (x);
-}
-
-void pmenu_setup(void) {
-
- DEBUG(post("setup start");)
-
- pmenu_class = class_new(gensym("pmenu"), (t_newmethod)pmenu_new, (t_method)pmenu_free,
- sizeof(t_pmenu),0,A_GIMME,0);
-
- class_addbang(pmenu_class, (t_method)pmenu_w_pop);
-
- class_addmethod(pmenu_class, (t_method)pmenu_callback,
- gensym("callback"),A_DEFFLOAT,0);
-
- class_addmethod(pmenu_class, (t_method)pmenu_add,
- gensym("add"), A_GIMME,0);
-
- class_addmethod(pmenu_class, (t_method)pmenu_clear,
- gensym("clear"), 0);
-
- class_addmethod(pmenu_class, (t_method)pmenu_colors,
- gensym("colors"),A_GIMME,0);
-
- class_addmethod(pmenu_class, (t_method)pmenu_set,
- gensym("set"),A_GIMME,0);
-
- class_addsymbol(pmenu_class, (t_method)pmenu_symbol);
-
- class_addfloat(pmenu_class, (t_method)pmenu_float);
-
-
-
- post("pmenu v0.02 by tof");
-}
-
-