[PD-cvs] externals/grill/flext/source flattr_ed.cpp,1.25,1.26 flbase.cpp,1.18,1.19 flclass.h,1.45,1.46 flsimd.cpp,1.14,1.15
Thomas Grill
xovo at users.sourceforge.net
Sat Nov 13 04:30:52 CET 2004
Update of /cvsroot/pure-data/externals/grill/flext/source
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24128/source
Modified Files:
flattr_ed.cpp flbase.cpp flclass.h flsimd.cpp
Log Message:
fix for showing attributes on select (and recreate the object on edit)
Index: flattr_ed.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flattr_ed.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** flattr_ed.cpp 9 Nov 2004 03:31:34 -0000 1.25
--- flattr_ed.cpp 13 Nov 2004 03:30:49 -0000 1.26
***************
*** 42,45 ****
--- 42,46 ----
#ifndef FLEXT_CLONEWIDGET
static void (*ori_vis)(t_gobj *c, t_glist *, int vis) = NULL;
+ static void (*ori_select)(t_gobj *c, t_glist *, int state) = NULL;
#endif
***************
*** 414,430 ****
#ifndef FLEXT_CLONEWIDGET
ori_vis = c->c_wb->w_visfn;
widgetbehavior.w_getrectfn = c->c_wb->w_getrectfn;
widgetbehavior.w_displacefn = c->c_wb->w_displacefn;
- widgetbehavior.w_selectfn = c->c_wb->w_selectfn;
widgetbehavior.w_activatefn = c->c_wb->w_activatefn;
widgetbehavior.w_deletefn = c->c_wb->w_deletefn;
widgetbehavior.w_clickfn = c->c_wb->w_clickfn;
#else
widgetbehavior.w_getrectfn = text_widgetbehavior.w_getrectfn;
widgetbehavior.w_displacefn = text_widgetbehavior.w_displacefn;
- widgetbehavior.w_selectfn = text_widgetbehavior.w_selectfn;
widgetbehavior.w_activatefn = text_widgetbehavior.w_activatefn;
widgetbehavior.w_deletefn = text_widgetbehavior.w_deletefn;
widgetbehavior.w_clickfn = text_widgetbehavior.w_clickfn;
#endif
--- 415,432 ----
#ifndef FLEXT_CLONEWIDGET
ori_vis = c->c_wb->w_visfn;
+ ori_select = c->c_wb->w_selectfn;
widgetbehavior.w_getrectfn = c->c_wb->w_getrectfn;
widgetbehavior.w_displacefn = c->c_wb->w_displacefn;
widgetbehavior.w_activatefn = c->c_wb->w_activatefn;
widgetbehavior.w_deletefn = c->c_wb->w_deletefn;
widgetbehavior.w_clickfn = c->c_wb->w_clickfn;
+ widgetbehavior.w_selectfn = c->c_wb->w_selectfn;
#else
widgetbehavior.w_getrectfn = text_widgetbehavior.w_getrectfn;
widgetbehavior.w_displacefn = text_widgetbehavior.w_displacefn;
widgetbehavior.w_activatefn = text_widgetbehavior.w_activatefn;
widgetbehavior.w_deletefn = text_widgetbehavior.w_deletefn;
widgetbehavior.w_clickfn = text_widgetbehavior.w_clickfn;
+ widgetbehavior.w_selectfn = text_widgetbehavior.w_selectfn;
#endif
***************
*** 438,441 ****
--- 440,444 ----
widgetbehavior.w_visfn = cb_GfxVis;
+ widgetbehavior.w_selectfn = cb_GfxSelect;
class_setwidget(c, &widgetbehavior);
***************
*** 567,584 ****
// show object if it's not a GOP
if(!gl->gl_isgraph || gl->gl_havewindow) {
!
t_text *x = (t_text *)c;
FLEXT_ASSERT(x->te_binbuf);
! int argc = binbuf_getnatom(x->te_binbuf);
! t_atom *argv = binbuf_getvec(x->te_binbuf);
! int cnt = CheckAttrib(argc,argv);
! if(cnt) {
! t_binbuf *nb = binbuf_new();
! binbuf_restore(nb,cnt,argv);
! binbuf_free(x->te_binbuf);
! x->te_binbuf = nb;
! }
t_rtext *rt = glist_findrtext(gl,x);
--- 570,584 ----
// show object if it's not a GOP
if(!gl->gl_isgraph || gl->gl_havewindow) {
! flext_base *th = thisObject(c);
t_text *x = (t_text *)c;
FLEXT_ASSERT(x->te_binbuf);
! t_binbuf *b = binbuf_new();
! th->BinbufArgs(b,x->te_binbuf,true);
! // delete old object box text
! binbuf_free(x->te_binbuf);
! // set new one
! x->te_binbuf = b;
t_rtext *rt = glist_findrtext(gl,x);
***************
*** 594,616 ****
}
! static void BinbufAdd(t_binbuf *b,const t_atom &at)
{
! char tbuf[MAXPDSTRING];
! if(flext::IsString(at))
! binbuf_addv(b,"s",flext::GetSymbol(at));
! else if(flext::IsFloat(at))
! binbuf_addv(b,"f",flext::GetFloat(at));
! else if(flext::IsInt(at))
! binbuf_addv(b,"i",flext::GetInt(at));
! else if(at.a_type == A_DOLLAR) {
! sprintf(tbuf, "$%d", at.a_w.w_index);
! binbuf_addv(b,"s",flext::MakeSymbol(tbuf));
! }
! else if(at.a_type == A_DOLLSYM) {
! sprintf(tbuf, "$%s", at.a_w.w_symbol->s_name);
! binbuf_addv(b,"s",flext::MakeSymbol(tbuf));
}
- else
- FLEXT_ASSERT(false);
}
--- 594,631 ----
}
! void flext_base::cb_GfxSelect(t_gobj *c, struct _glist *gl, int state)
{
! // show object if it's not a GOP
! if(!gl->gl_isgraph || gl->gl_havewindow) {
! if(state || !gl->gl_editor->e_textdirty) {
! // change text only on selection
! // OR if text has _not_ been changed
! // -> since object will not be recreated we have to get rid
! // of the attribute text
!
! flext_base *th = thisObject(c);
! t_text *x = (t_text *)c;
! FLEXT_ASSERT(x->te_binbuf);
!
! t_binbuf *b = binbuf_new();
! th->BinbufArgs(b,x->te_binbuf,true);
! if(state) th->BinbufAttr(b);
!
! // delete old object box text
! binbuf_free(x->te_binbuf);
! // set new one
! x->te_binbuf = b;
!
! t_rtext *rt = glist_findrtext(gl,x);
! rtext_retext(rt);
! }
!
! // call original function
! #ifdef FLEXT_CLONEWIDGET
! text_widgetbehavior.w_selectfn(c,gl,state);
! #else
! ori_select(c,gl,state);
! #endif
}
}
***************
*** 621,686 ****
binbuf_addv(b, "ssiis", gensym("#X"),gensym("obj"), t->te_xpix, t->te_ypix,MakeSymbol(th->thisName()));
! int argc = binbuf_getnatom(t->te_binbuf);
! t_atom *argv = binbuf_getvec(t->te_binbuf);
! int i,cnt = CheckAttrib(argc,argv);
!
! // process the creation arguments
! for(i = 1; i < cnt; ++i) BinbufAdd(b,argv[i]);
!
// process the attributes
! AtomList la;
! th->ListAttrib(la);
! cnt = la.Count();
!
! for(i = 0; i < cnt; ++i) {
! const t_symbol *sym = GetSymbol(la[i]);
! AtomList lv;
! const AtomList *lref = NULL;
! AttrDataCont::iterator it = th->attrdata->find(sym);
!
! if(it != th->attrdata->end()) {
! const AttrData &a = *it.data();
! if(a.IsInit() && a.IsInitValue()) {
! lref = &a.GetInitValue();
! /*
! // check for $-parameters
! lv = lref->Count();
! for(int j = 0; j < lref->Count(); ++j) {
! const char *s = IsSymbol((*lref)[j])?GetString((*lref)[j]):NULL;
! if(s && s[0] == '$') { // TODO: More refined checking?
! // prepend a "\"
! char tmp[256]; *tmp = '\\';
! strcpy(tmp+1,s);
! SetString(lv[j],tmp);
! }
! else
! lv[i] = (*lref)[j];
! }
!
! lref = &lv;
! */
! }
! else if(a.IsSaved()) {
! AttrItem *attr = th->FindAttrib(sym,true);
!
! // attribute must be gettable (so that the data can be retrieved) and puttable (so that the data can be inited)
! if(attr && attr->BothExist()) {
! th->GetAttrib(sym,attr,lv);
! lref = &lv;
! }
! }
! }
!
! if(lref) {
! char attrname[256]; *attrname= '@';
! // store name
! strcpy(attrname+1,GetString(sym));
! binbuf_addv(b,"s",MakeSymbol(attrname));
!
! // store value
! for(int j = 0; j < lref->Count(); ++j) BinbufAdd(b,(*lref)[j]);
! }
! }
!
binbuf_addv(b, ";");
}
--- 636,644 ----
binbuf_addv(b, "ssiis", gensym("#X"),gensym("obj"), t->te_xpix, t->te_ypix,MakeSymbol(th->thisName()));
! // process the object arguments
! th->BinbufArgs(b,t->te_binbuf,false);
// process the attributes
! th->BinbufAttr(b);
! // add end sign
binbuf_addv(b, ";");
}
***************
*** 753,755 ****
--- 711,803 ----
}
+
+ static void BinbufAdd(t_binbuf *b,const t_atom &at)
+ {
+ char tbuf[MAXPDSTRING];
+ if(flext::IsString(at))
+ binbuf_addv(b,"s",flext::GetSymbol(at));
+ else if(flext::IsFloat(at))
+ binbuf_addv(b,"f",flext::GetFloat(at));
+ else if(flext::IsInt(at))
+ binbuf_addv(b,"i",flext::GetInt(at));
+ else if(at.a_type == A_DOLLAR) {
+ sprintf(tbuf, "$%d", at.a_w.w_index);
+ binbuf_addv(b,"s",flext::MakeSymbol(tbuf));
+ }
+ else if(at.a_type == A_DOLLSYM) {
+ sprintf(tbuf, "$%s", at.a_w.w_symbol->s_name);
+ binbuf_addv(b,"s",flext::MakeSymbol(tbuf));
+ }
+ else
+ FLEXT_ASSERT(false);
+ }
+
+ void flext_base::BinbufArgs(t_binbuf *b,t_binbuf *args,bool withname)
+ {
+ int argc = binbuf_getnatom(args);
+ t_atom *argv = binbuf_getvec(args);
+ int i,cnt = CheckAttrib(argc,argv);
+ // process the creation arguments
+ for(i = withname?0:1; i < cnt; ++i) BinbufAdd(b,argv[i]);
+ }
+
+ void flext_base::BinbufAttr(t_binbuf *b)
+ {
+ // process the attributes
+ AtomList la;
+ ListAttrib(la);
+ int i,cnt = la.Count();
+
+ for(i = 0; i < cnt; ++i) {
+ const t_symbol *sym = GetSymbol(la[i]);
+ AtomList lv;
+ const AtomList *lref = NULL;
+ AttrDataCont::iterator it = attrdata->find(sym);
+
+ if(it != attrdata->end()) {
+ const AttrData &a = *it.data();
+ if(a.IsInit() && a.IsInitValue()) {
+ lref = &a.GetInitValue();
+ /*
+ // check for $-parameters
+ lv = lref->Count();
+ for(int j = 0; j < lref->Count(); ++j) {
+ const char *s = IsSymbol((*lref)[j])?GetString((*lref)[j]):NULL;
+ if(s && s[0] == '$') { // TODO: More refined checking?
+ // prepend a "\"
+ char tmp[256]; *tmp = '\\';
+ strcpy(tmp+1,s);
+ SetString(lv[j],tmp);
+ }
+ else
+ lv[i] = (*lref)[j];
+ }
+
+ lref = &lv;
+ */
+ }
+ else if(a.IsSaved()) {
+ AttrItem *attr = FindAttrib(sym,true);
+
+ // attribute must be gettable (so that the data can be retrieved) and puttable (so that the data can be inited)
+ if(attr && attr->BothExist()) {
+ GetAttrib(sym,attr,lv);
+ lref = &lv;
+ }
+ }
+ }
+
+ if(lref) {
+ char attrname[256]; *attrname= '@';
+ // store name
+ strcpy(attrname+1,GetString(sym));
+ binbuf_addv(b,"s",MakeSymbol(attrname));
+
+ // store value
+ for(int j = 0; j < lref->Count(); ++j) BinbufAdd(b,(*lref)[j]);
+ }
+ }
+ }
+
#endif // FLEXT_SYS_PD
+
Index: flsimd.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flsimd.cpp,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** flsimd.cpp 26 Oct 2004 20:03:37 -0000 1.14
--- flsimd.cpp 13 Nov 2004 03:30:49 -0000 1.15
***************
*** 13,17 ****
If FLEXT_USE_SIMD is defined at compilation, SIMD instructions are used wherever feasible.
! If used with MSVC++ the "Processor Pack" must be installed.
If FLEXT_USE_IPP is defined the Intel Performance Package is used.
--- 13,17 ----
If FLEXT_USE_SIMD is defined at compilation, SIMD instructions are used wherever feasible.
! If used with MSVC++ 6 the "Processor Pack" must be installed.
If FLEXT_USE_IPP is defined the Intel Performance Package is used.
Index: flbase.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flbase.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** flbase.cpp 11 Aug 2004 04:04:25 -0000 1.18
--- flbase.cpp 13 Nov 2004 03:30:49 -0000 1.19
***************
*** 99,103 ****
bool flext_obj::GetParamSym(t_atom &dst,const t_symbol *sym,t_canvas *c)
{
! #if FLEXT_SYS == FLEXT_SYS_PD
if(!c) c = canvas_getcurrent();
--- 99,103 ----
bool flext_obj::GetParamSym(t_atom &dst,const t_symbol *sym,t_canvas *c)
{
! #if FLEXT_SYS == FLEXT_SYS_PD && defined(PD_MINOR_VERSION) && PD_MINOR_VERSION >= 37
if(!c) c = canvas_getcurrent();
Index: flclass.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flclass.h,v
retrieving revision 1.45
retrieving revision 1.46
diff -C2 -d -r1.45 -r1.46
*** flclass.h 11 Sep 2004 04:00:41 -0000 1.45
--- flclass.h 13 Nov 2004 03:30:49 -0000 1.46
***************
*** 862,865 ****
--- 862,869 ----
static void cb_GfxVis(t_gobj *c, t_glist *gl, int vis);
static void cb_GfxSave(t_gobj *c, t_binbuf *b);
+ static void cb_GfxSelect(t_gobj *x, struct _glist *glist, int state);
+
+ void BinbufArgs(t_binbuf *b,t_binbuf *args,bool withname);
+ void BinbufAttr(t_binbuf *b);
#endif
More information about the Pd-cvs
mailing list