Changeset 154 for cpp/frams/param/param.h
- Timestamp:
- 03/01/14 22:25:20 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/frams/param/param.h
r144 r154 33 33 #define PARAM_DEPRECATED 8192 34 34 35 // wynik z param::set() to kombinacja bitow: 36 35 // the result of param::set() is a combination of bits: 36 37 // read-only: cannot modify 37 38 #define PSET_RONLY 1 38 // oznacza,ze nie mozna zmienic 39 39 40 // value has been modified 40 41 #define PSET_CHANGED 2 41 // zaawansowane: wartosc zostala zmieniona 42 42 43 //value has been adjusted because it tried to exceed min or max 43 44 #define PSET_HITMIN 4 44 45 #define PSET_HITMAX 8 45 // wartosc zostala dopasowana do min lub max 46 46 47 // useful combination: need to get and display the value so that a user knows that the value they tried to set has been rejected or changed 47 48 #define PSET_WARN (PSET_RONLY | PSET_HITMIN | PSET_HITMAX) 48 // pozyteczna kombinacja - oznacza, ze nalezy pobrac i wyswietlic49 // wartosc, zeby uzytkownik wiedzial, ze jego propozycja jest odrzucona50 49 51 50 #define PSET_NOPROPERTY 16 … … 57 56 { 58 57 public: 59 virtual int getGroupCount()=0; ///< @returnnumber of property groups60 virtual int getPropCount()=0; ///< @returnnumber of properties61 62 virtual const char* getName()=0;63 virtual const char* getDescription() {return 0;}64 virtual ParamEntry *getParamTab() const {return NULL;}65 66 int findId(const char *n); ///< find id number for internal name67 int findIdn(const char *naz,int n);68 69 virtual const char *id(int i)=0; ///< get internal name70 virtual const char *name(int i)=0; ///< get humanreadable name71 72 /** get type description.73 74 75 76 77 78 79 80 virtual const char *type(int i)=0; 81 82 virtual const char *help(int i)=0; ///< get long description (tooltip)83 84 virtual int flags(int i)=0; ///< get flags85 86 virtual int group(int i)=0; ///< get group id for a property87 virtual const char *grname(int gi)=0; ///< get group name88 virtual int grmember(int gi,int n)=0; ///< get property id for n'th member of group "gi"89 90 virtual void call(int i,ExtValue* args,ExtValue *ret)=0;91 92 void get(int,ExtValue &retval); ///< most universal get, can be used for every datatype93 94 virtual SString getString(int)=0; ///< get string value, you can only use this for "s" type property95 virtual long getInt(int)=0; ///< get long value, you can only use this for "d" type property96 virtual double getDouble(int)=0; ///< get double value, you can only use this for "f" type property97 virtual ExtObject getObject(int)=0; ///< get object reference, you can only use this for "o" type property98 virtual ExtValue getExtValue(int)=0; ///< get extvalue object, you can only use this for "x" type property99 100 SString get(int); ///< old style get, can convert long or double to string101 SString getText(int); ///< like getString, returns enumeration label for subtype "d 0 n ~enum1~enum2...102 103 SString getStringById(const char*prop); ///< get string value, you can only use this for "s" type property104 long getIntById(const char* prop); ///< get long value, you can only use this for "d" type property105 double getDoubleById(const char* prop);///< get double value, you can only use this for "f" type property106 ExtObject getObjectById(const char* prop);///< get object reference, you can only use this for "o" type property107 ExtValue getExtValueById(const char* prop);///< get extvalue object, you can only use this for "x" type property108 ExtValue getById(const char* prop);109 110 int setInt(int i,const char* str);111 int setDouble(int i,const char* str);112 virtual int setInt(int,long)=0; ///< set long value, you can only use this for "d" type prop113 virtual int setDouble(int,double)=0; ///< set double value, you can only use this for "f" type prop114 virtual int setString(int,const SString &)=0; ///< set string value, you can only use this for "s" type prop115 virtual int setObject(int,const ExtObject &)=0; ///< set object reference, you can only use this for "o" type prop116 virtual int setExtValue(int,const ExtValue &)=0; ///< 4 in 1117 118 int set(int,const ExtValue &);///< most universal set, can be used for every datatype119 120 int set(int,const char*); ///< oldstyle set, can convert string to long or double121 122 int setIntById(const char* prop,long);///< set long value, you can only use this for "d" type prop123 int setDoubleById(const char* prop,double);///< set double value, you can only use this for "f" type prop124 int setStringById(const char* prop,const SString &);///< set string value, you can only use this for "s" type prop125 int setObjectById(const char* prop,const ExtObject &);///< set object reference, you can only use this for "o" type prop126 int setExtValueById(const char* prop,const ExtValue &);///< for ExtValue types only127 int setById(const char* prop,const ExtValue &);///< can be used for all property types128 129 /** get valid minimum, maximum and default value for property 'prop'130 131 int getMinMax(int prop,long& minumum,long& maximum,long& def);132 /** get valid minimum, maximum and default value for property 'prop'133 134 int getMinMax(int prop,double& minumum,double& maximum,double& def);135 136 virtual void setDefault(bool numericonly=false);137 virtual void setDefault(int i,bool numericonly=false);138 void setMin();139 void setMax();140 void setMin(int i);141 void setMax(int i);142 143 /** copy all property values from other ParamInterface object */144 void copyFrom(ParamInterface *src);145 146 /** copy all property values from compatible ParamInterface object.147 this method is more efficient than copyFrom,148 but can be used only if the other object has the same properties sequence, eg:149 150 151 152 void quickCopyFrom(ParamInterface *src);153 154 int save(VirtFILE*,const char* altname=NULL,bool force=0);155 int saveprop(VirtFILE*,int i,const char* p,bool force=0);156 int load(VirtFILE*);///< @returnnumber of fields loaded157 int load2(const SString &,int &);///< @returnnumber of fields loaded158 159 static const char* SERIALIZATION_PREFIX;58 virtual int getGroupCount() = 0; ///< @return the number of property groups 59 virtual int getPropCount() = 0; ///< @return the number of properties 60 61 virtual const char* getName() = 0; 62 virtual const char* getDescription() { return 0; } 63 virtual ParamEntry *getParamTab() const { return NULL; } 64 65 int findId(const char *n); ///< find id number for internal name 66 int findIdn(const char *naz, int n); 67 68 virtual const char *id(int i) = 0; ///< get internal name 69 virtual const char *name(int i) = 0; ///< get the human-readable name 70 71 /** get type description. 72 first character defines basic datatype: 73 - d = integer 74 - f = floating point 75 - s = string 76 - o = ExtObject 77 - x = ExtValue (universal datatype) 78 */ 79 virtual const char *type(int i) = 0; 80 81 virtual const char *help(int i) = 0; ///< get long description (tooltip) 82 83 virtual int flags(int i) = 0; ///< get flags 84 85 virtual int group(int i) = 0; ///< get group id for a property 86 virtual const char *grname(int gi) = 0; ///< get group name 87 virtual int grmember(int gi, int n) = 0; ///< get property id for n'th member of group "gi" 88 89 virtual void call(int i, ExtValue* args, ExtValue *ret) = 0; 90 91 void get(int, ExtValue &retval); ///< most universal get, can be used for every datatype 92 93 virtual SString getString(int) = 0; ///< get string value, you can only use this for "s" type property 94 virtual long getInt(int) = 0; ///< get long value, you can only use this for "d" type property 95 virtual double getDouble(int) = 0; ///< get double value, you can only use this for "f" type property 96 virtual ExtObject getObject(int) = 0; ///< get object reference, you can only use this for "o" type property 97 virtual ExtValue getExtValue(int) = 0; ///< get extvalue object, you can only use this for "x" type property 98 99 SString get(int); ///< old style get, can convert long or double to string 100 SString getText(int); ///< like getString, returns enumeration label for subtype "d 0 n ~enum1~enum2... 101 102 SString getStringById(const char*prop); ///< get string value, you can only use this for "s" type property 103 long getIntById(const char* prop); ///< get long value, you can only use this for "d" type property 104 double getDoubleById(const char* prop);///< get double value, you can only use this for "f" type property 105 ExtObject getObjectById(const char* prop);///< get object reference, you can only use this for "o" type property 106 ExtValue getExtValueById(const char* prop);///< get extvalue object, you can only use this for "x" type property 107 ExtValue getById(const char* prop); 108 109 int setInt(int i, const char* str); 110 int setDouble(int i, const char* str); 111 virtual int setInt(int, long) = 0; ///< set long value, you can only use this for "d" type prop 112 virtual int setDouble(int, double) = 0; ///< set double value, you can only use this for "f" type prop 113 virtual int setString(int, const SString &) = 0; ///< set string value, you can only use this for "s" type prop 114 virtual int setObject(int, const ExtObject &) = 0; ///< set object reference, you can only use this for "o" type prop 115 virtual int setExtValue(int, const ExtValue &) = 0; ///< 4 in 1 116 117 int set(int, const ExtValue &);///< most universal set, can be used for every datatype 118 119 int set(int, const char*); ///< oldstyle set, can convert string to long or double 120 121 int setIntById(const char* prop, long);///< set long value, you can only use this for "d" type prop 122 int setDoubleById(const char* prop, double);///< set double value, you can only use this for "f" type prop 123 int setStringById(const char* prop, const SString &);///< set string value, you can only use this for "s" type prop 124 int setObjectById(const char* prop, const ExtObject &);///< set object reference, you can only use this for "o" type prop 125 int setExtValueById(const char* prop, const ExtValue &); ///< for ExtValue types only 126 int setById(const char* prop, const ExtValue &);///< can be used for all property types 127 128 /** get valid minimum, maximum and default value for property 'prop' 129 @return 0 if min/max/def information is not available */ 130 int getMinMax(int prop, long& minumum, long& maximum, long& def); 131 /** get valid minimum, maximum and default value for property 'prop' 132 @return 0 if min/max/def information is not available */ 133 int getMinMax(int prop, double& minumum, double& maximum, double& def); 134 135 virtual void setDefault(bool numericonly = false); 136 virtual void setDefault(int i, bool numericonly = false); 137 void setMin(); 138 void setMax(); 139 void setMin(int i); 140 void setMax(int i); 141 142 /** copy all property values from other ParamInterface object */ 143 void copyFrom(ParamInterface *src); 144 145 /** Copy all property values from compatible ParamInterface object. 146 This method is more efficient than copyFrom, 147 but can be used only if the other object has the same properties sequence, e.g.: 148 - any two Param objects having common paramtab 149 - any ParamInterface object and the Param with paramtab constructed by ParamObject::makeParamTab 150 */ 151 void quickCopyFrom(ParamInterface *src); 152 153 int save(VirtFILE*, const char* altname = NULL, bool force = 0); 154 int saveprop(VirtFILE*, int i, const char* p, bool force = 0); 155 int load(VirtFILE*);///< @return the number of fields loaded 156 int load2(const SString &, int &);///< @return the number of fields loaded 157 158 static const char* SERIALIZATION_PREFIX; 160 159 }; 161 160 … … 193 192 struct ParamEntry 194 193 { 195 const char *id;196 short group,flags;197 const char *name,*type;198 long offset;199 void *fun1; ///< procedure or get200 void *fun2; ///< set201 const char *help;202 }; 203 204 struct ParamEntryConstructor : public ParamEntry194 const char *id; 195 short group, flags; 196 const char *name, *type; 197 long offset; 198 void *fun1; ///< procedure or get 199 void *fun2; ///< set 200 const char *help; 201 }; 202 203 struct ParamEntryConstructor : public ParamEntry 205 204 { 206 205 public: 207 ParamEntryConstructor(const char *_id,short _group=0,short _flags=0,const char *_name=0,const char *_type=0,long _offset=0,void *_fun1=0, void *_fun2=0, const char *_help=0) 208 {id=_id;group=_group;flags=_flags;name=_name;type=_type;offset=_offset;fun1=_fun1;fun2=_fun2;help=_help;} 209 }; 210 211 class SimpleAbstractParam: public virtual ParamInterface 206 ParamEntryConstructor(const char *_id, short _group = 0, short _flags = 0, const char *_name = 0, const char *_type = 0, long _offset = 0, void *_fun1 = 0, void *_fun2 = 0, const char *_help = 0) 207 { 208 id = _id; group = _group; flags = _flags; name = _name; type = _type; offset = _offset; fun1 = _fun1; fun2 = _fun2; help = _help; 209 } 210 }; 211 212 class SimpleAbstractParam : public virtual ParamInterface 212 213 { 213 214 protected: 214 virtual void *getTarget(int i);215 virtual ParamEntry *entry(int i)=0;216 const char* myname;217 bool dontcheckchanges;215 virtual void *getTarget(int i); 216 virtual ParamEntry *entry(int i) = 0; 217 const char* myname; 218 bool dontcheckchanges; 218 219 219 220 public: 220 void *object;221 222 const char* getName() {return myname;}223 void setName(const char* n) {myname=n;}224 225 /**226 @param t ParamEntry table227 @param o controlled object228 @param n Param's name229 */230 SimpleAbstractParam(void* o=0,const char*n=0):myname(n),dontcheckchanges(0),object(o) {}231 void setDontCheckChanges(bool x) {dontcheckchanges=x;}232 233 void select(void *o) {object=o;}234 void* getSelected() {return object;}235 236 const char *id(int i) {return (i>=getPropCount())?0:entry(i)->id;}237 const char *name(int i) {return entry(i)->name;}238 const char *type(int i) {return entry(i)->type;}239 const char *help(int i) {return entry(i)->help;}240 int flags(int i) {return entry(i)->flags;}241 int group(int i) {return entry(i)->group;}242 void call(int i,ExtValue* args,ExtValue *ret);243 244 SString getString(int);245 long getInt(int);246 double getDouble(int);247 ExtObject getObject(int);248 ExtValue getExtValue(int);249 250 template<typename T> void messageOnExceedRange(int i,int setflags, T valuetoset) ///< prints a warning when setflags indicates that allowed param range has been exceeded during set251 {252 if (setflags & (PSET_HITMIN | PSET_HITMAX))253 254 SString svaluetoset=SString::valueOf(valuetoset); //converts any type to SString255 SString actual=get(i);256 FMprintf("Param","set",FMLV_WARN,"Setting '%s.%s = %s' exceeded allowed range (too %s). Adjusted to %s.",257 getName(),id(i),(const char*)svaluetoset,(setflags&PSET_HITMAX)?"big":"small",(const char*)actual);258 259 } 260 261 int setInt(int,long);262 int setDouble(int,double);263 int setString(int,const SString &);264 int setObject(int,const ExtObject &);265 int setExtValue(int,const ExtValue &);266 267 int isequal(int i,void* defdata);268 void save2(SString&,void *defdata,bool addcr=true,bool all_names=true);269 270 virtual void setDefault(bool numericonly=false);271 virtual void setDefault(int i,bool numericonly=false);272 }; 273 274 class Param : public SimpleAbstractParam221 void *object; 222 223 const char* getName() { return myname; } 224 void setName(const char* n) { myname = n; } 225 226 /** 227 @param t ParamEntry table 228 @param o controlled object 229 @param n Param's name 230 */ 231 SimpleAbstractParam(void* o = 0, const char*n = 0) :myname(n), dontcheckchanges(0), object(o) {} 232 void setDontCheckChanges(bool x) { dontcheckchanges = x; } 233 234 void select(void *o) { object = o; } 235 void* getSelected() { return object; } 236 237 const char *id(int i) { return (i >= getPropCount()) ? 0 : entry(i)->id; } 238 const char *name(int i) { return entry(i)->name; } 239 const char *type(int i) { return entry(i)->type; } 240 const char *help(int i) { return entry(i)->help; } 241 int flags(int i) { return entry(i)->flags; } 242 int group(int i) { return entry(i)->group; } 243 void call(int i, ExtValue* args, ExtValue *ret); 244 245 SString getString(int); 246 long getInt(int); 247 double getDouble(int); 248 ExtObject getObject(int); 249 ExtValue getExtValue(int); 250 251 template<typename T> void messageOnExceedRange(int i, int setflags, T valuetoset) ///< prints a warning when setflags indicates that allowed param range has been exceeded during set 252 { 253 if (setflags & (PSET_HITMIN | PSET_HITMAX)) 254 { 255 SString svaluetoset = SString::valueOf(valuetoset); //converts any type to SString 256 SString actual = get(i); 257 FMprintf("Param", "set", FMLV_WARN, "Setting '%s.%s = %s' exceeded allowed range (too %s). Adjusted to %s.", 258 getName(), id(i), (const char*)svaluetoset, (setflags&PSET_HITMAX) ? "big" : "small", (const char*)actual); 259 } 260 } 261 262 int setInt(int, long); 263 int setDouble(int, double); 264 int setString(int, const SString &); 265 int setObject(int, const ExtObject &); 266 int setExtValue(int, const ExtValue &); 267 268 int isequal(int i, void* defdata); 269 void save2(SString&, void *defdata, bool addcr = true, bool all_names = true); 270 271 virtual void setDefault(bool numericonly = false); 272 virtual void setDefault(int i, bool numericonly = false); 273 }; 274 275 class Param : public SimpleAbstractParam 275 276 { 276 277 protected: 277 ParamEntry *entry(int i) {return tab+tab[0].group+i;}278 ParamEntry *entry(int i) { return tab + tab[0].group + i; } 278 279 public: 279 ParamEntry *tab; 280 /** 281 @param t ParamEntry table 282 @param o controlled object 283 @param n Param's name 284 */ 285 286 Param(ParamEntry *t=0,void* o=0,const char*n=0):SimpleAbstractParam(o,n),tab(t) 287 {if (!n&&tab) myname=tab[0].name;} 288 289 Param(const Param& p):SimpleAbstractParam(p.object,p.myname),tab(p.tab) {} 290 void operator=(const Param&p) {object=p.object; myname=p.myname; tab=p.tab;} 291 292 const char* getDescription() {return tab[0].type;} 293 294 int getGroupCount() {return tab[0].group;} 295 int getPropCount() {return tab[0].flags;} 296 const char *grname(int i) {return (i<getGroupCount())?tab[i].id:0;} 297 int grmember(int,int); 298 void setParamTab(ParamEntry *t,int dontupdatename=0) {tab=t; if ((!dontupdatename)&&tab) myname=tab[0].name; } 299 ParamEntry *getParamTab() const {return tab;} 280 ParamEntry *tab; 281 /** 282 @param t ParamEntry table 283 @param o controlled object 284 @param n Param's name 285 */ 286 287 Param(ParamEntry *t = 0, void* o = 0, const char*n = 0) :SimpleAbstractParam(o, n), tab(t) 288 { 289 if (!n&&tab) myname = tab[0].name; 290 } 291 292 Param(const Param& p) :SimpleAbstractParam(p.object, p.myname), tab(p.tab) {} 293 void operator=(const Param&p) { object = p.object; myname = p.myname; tab = p.tab; } 294 295 const char* getDescription() { return tab[0].type; } 296 297 int getGroupCount() { return tab[0].group; } 298 int getPropCount() { return tab[0].flags; } 299 const char *grname(int i) { return (i < getGroupCount()) ? tab[i].id : 0; } 300 int grmember(int, int); 301 void setParamTab(ParamEntry *t, int dontupdatename = 0) { tab = t; if ((!dontupdatename) && tab) myname = tab[0].name; } 302 ParamEntry *getParamTab() const { return tab; } 300 303 }; 301 304
Note: See TracChangeset
for help on using the changeset viewer.