diff options
author | Thomas Grill <xovo@users.sourceforge.net> | 2003-01-02 04:37:31 +0000 |
---|---|---|
committer | Thomas Grill <xovo@users.sourceforge.net> | 2003-01-02 04:37:31 +0000 |
commit | 10e0265429983876e2fd69950df4d51c8faf5635 (patch) | |
tree | 3e1c45e40bedd1b92225696ce955b902c4daf8e0 /externals/grill/flext/tutorial/attr3 | |
parent | 59e66762250fe61d570c5baf6c9ce6896a09e027 (diff) |
""
svn path=/trunk/; revision=316
Diffstat (limited to 'externals/grill/flext/tutorial/attr3')
-rw-r--r-- | externals/grill/flext/tutorial/attr3/main.cpp | 68 |
1 files changed, 31 insertions, 37 deletions
diff --git a/externals/grill/flext/tutorial/attr3/main.cpp b/externals/grill/flext/tutorial/attr3/main.cpp index 835c2881..4c2736c5 100644 --- a/externals/grill/flext/tutorial/attr3/main.cpp +++ b/externals/grill/flext/tutorial/attr3/main.cpp @@ -1,7 +1,7 @@ /* flext tutorial - attributes 3 -Copyright (c) 2002 Thomas Grill (xovo@gmx.net) +Copyright (c) 2002,2003 Thomas Grill (xovo@gmx.net) For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see the file, "license.txt," in this distribution. @@ -11,19 +11,23 @@ This is tutorial example "advanced 3" with the usage of attributes. */ + // IMPORTANT: enable attribute processing (specify before inclusion of flext headers!) // For clarity, this is done here, but you'd better specify it as a compiler definition // FLEXT_ATTRIBUTES must be 0 or 1, #define FLEXT_ATTRIBUTES 1 + // include flext header #include <flext.h> + // check for appropriate flext version #if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 401) #error You need at least flext version 0.4.1 #endif + class attr3: public flext_base { @@ -31,28 +35,11 @@ class attr3: public: // constructor with no arguments - attr3(int argc,t_atom *argv): - i_step(1) + // initial values are set by attributes at creation time (see help file) + attr3(): + // initialize data members + i_down(0),i_up(0),i_count(0),i_step(1) { - // --- initialize bounds and step size --- - int f1 = 0,f2 = 0; - switch(argc) { - default: - case 3: - i_step = GetInt(argv[2]); - case 2: - f2 = GetInt(argv[1]); - case 1: - f1 = GetInt(argv[0]); - case 0: - ; - } - if(argc < 2) f2 = f1; - - m_bound(f1,f2); - - i_count = i_down; - // --- define inlets and outlets --- AddInAnything(); // default inlet AddInList(); // inlet for bounds @@ -88,7 +75,7 @@ protected: ToOutInt(0,f); } - void m_bound(int f1,int f2) + void m_bounds(int f1,int f2) { i_down = f1 < f2?f1:f2; i_up = f1 > f2?f1:f2; @@ -96,27 +83,29 @@ protected: void m_step(int s) { i_step = s; } - int i_count,i_down,i_up,i_step; // setter method of bounds variables - void ms_bound(const AtomList &l) + void ms_bounds(const AtomList &l) { if(l.Count() == 2 && CanbeInt(l[0]) && CanbeInt(l[1])) - // if it is a two element integer list use m_bound method - m_bound(GetAInt(l[0]),GetAInt(l[1])); + // if it is a two element integer list use m_bounds method + m_bounds(GetAInt(l[0]),GetAInt(l[1])); else // else post a warning - post("%s - bound needs to integer parameters",thisName()); + post("%s - 'bounds' needs two integer parameters",thisName()); } // getter method of bounds variables - void mg_bound(AtomList &l) const + void mg_bounds(AtomList &l) const { l(2); // initialize two element list SetInt(l[0],i_down); // set first element SetInt(l[1],i_up); // set second element } + + int i_count,i_down,i_up,i_step; + private: static void setup(t_class *c) @@ -132,15 +121,19 @@ private: // set up methods for inlets 1 and 2 // no message tag used - FLEXT_CADDMETHOD(c,1,m_bound); // variable arg type recognized automatically + FLEXT_CADDMETHOD(c,1,m_bounds); // variable arg type recognized automatically FLEXT_CADDMETHOD(c,2,m_step); // single int arg also recognized automatically // --- set up attributes (class scope) --- + // these have equally named getters and setters + // see the wrappers below FLEXT_CADDATTR_VAR1(c,"count",i_count); FLEXT_CADDATTR_VAR1(c,"step",i_step); - FLEXT_CADDATTR_VAR(c,"bound",mg_bound,ms_bound); + // bounds has differently named getter and setter functions + // see the wrappers below + FLEXT_CADDATTR_VAR(c,"bounds",mg_bounds,ms_bounds); } // normal method callbacks for bang and reset @@ -148,16 +141,17 @@ private: FLEXT_CALLBACK(m_reset) FLEXT_CALLBACK_V(m_set) // normal method wrapper for m_set - FLEXT_ATTRVAR_I(i_count) // wrapper function for integer variable i_count + FLEXT_ATTRVAR_I(i_count) // wrapper functions (get and set) for integer variable i_count - FLEXT_CALLBACK_II(m_bound) // normal method wrapper for m_bound - FLEXT_CALLVAR_V(mg_bound,ms_bound) // getter and setter method of bounds + FLEXT_CALLBACK_II(m_bounds) // normal method wrapper for m_bounds + FLEXT_CALLVAR_V(mg_bounds,ms_bounds) // getter and setter method of bounds FLEXT_CALLBACK_I(m_step) // normal method wrapper for m_step - FLEXT_ATTRVAR_I(i_step) // wrapper function for integer variable i_step + FLEXT_ATTRVAR_I(i_step) // wrapper functions (get and set) for integer variable i_step }; -// instantiate the class (constructor has a variable argument list) -FLEXT_NEW_V("attr3",attr3) + +// instantiate the class (constructor takes no arguments) +FLEXT_NEW("attr3",attr3) |