aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/flext/tutorial/attr3/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'externals/grill/flext/tutorial/attr3/main.cpp')
-rw-r--r--externals/grill/flext/tutorial/attr3/main.cpp68
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)