Gocator Development Kit
 All Classes Files Functions Variables Typedefs Friends Modules Pages
ExtParams.h
1 #ifndef GS_CFG_EXT_PARAMS_H
2 #define GS_CFG_EXT_PARAMS_H
3 
4 #include <Gdk/GdkDef.h>
6 #include <GoApi/Configuration/Nodes/Container.h>
7 #include <GoApi/Configuration/Nodes/DynamicContainer.h>
8 #include <GoApi/Configuration/Attributes.h>
9 #include <GoApi/Configuration/Nodes/Value.h>
10 #include <GoApi/GoApi.h>
11 
12 class ExtParamLUT;
13 
14 typedef struct ExtParamsStatic
15 {
16  ExtParamLUT* extParamsLut;
17 } ExtParamsStatic;
18 
19 kDeclareStaticClassEx(Gdk, ExtParams)
20 
21 GdkFx(kStatus) xExtParams_InitStatic();
22 GdkFx(kStatus) xExtParams_ReleaseStatic();
23 
24 namespace GoCfg = Go::Configuration;
25 
26 // Dedicated struct to enable custom serialization.
27 struct ExtParamType
28 {
29  GdkParamType type;
30 
31  ExtParamType() : type(GDK_PARAM_TYPE_UNKNOWN)
32  {
33  }
34 
35  ExtParamType(GdkParamType type) : type(type)
36  {
37  }
38 
39  operator GdkParamType() const
40  {
41  return type;
42  }
43 
44  ExtParamType& operator=(GdkParamType type)
45  {
46  this->type = type;
47  return *this;
48  }
49 };
50 
51 ///@cond IGNORE
52 GdkCppFx(std::ostream&) operator<<(std::ostream& stream, const ExtParamType& source);
53 GdkCppFx(std::istream&) operator>>(std::istream& stream, ExtParamType& source);
54 ///@endcond
55 
56 /**
57 * @class ExtParam
58 * @ingroup Gdk-Config
59 * @brief Shared interface of all GDK parameters.
60 * Note all parameters derive from both this and a model node type.
61 */
62 struct ExtParam
63 {
64  using UsedAttrType = GoCfg::UsedAttribute;
65  using StringAttrType = GoCfg::ValueAttribute<std::string>;
66  using ParamTypeAttrType = GoCfg::ValueAttribute<ExtParamType>;
67  using StringOptionsType = GoCfg::OptionsAttribute<std::string>;
68 
69  virtual ~ExtParam() {}
70 
71  virtual void Dispose() = 0;
72 
73  virtual GoCfg::Node& ModelNode() = 0;
74 
75  virtual UsedAttrType& Used() = 0;
76  virtual ParamTypeAttrType& ParamType() = 0;
77  virtual StringAttrType& Label() = 0;
78  virtual StringAttrType& Units() = 0;
79 
80  virtual StringOptionsType& OptionNames() = 0;
81  virtual void ClearOptions() = 0;
82  virtual size_t OptionCount() const = 0;
83  virtual void RemoveOptionAt(size_t index) = 0;
84 
85  virtual bool IsRead() const = 0;
86 
87  virtual GdkParamInfo ParamInfo() = 0;
88  virtual GdkParamInfo EditableParamInfo() = 0;
89  virtual void SetParamInfo(GdkParamInfo paramInfo) = 0;
90 
91  virtual void CopyValues(const ExtParam& other) = 0;
92 };
93 
94 /**
95 * @class ExtParamImpl
96 * @extends ExtParam
97 * @ingroup Gdk-Config
98 * @brief Shared common implementation of parameters. Extends a chosen model node
99 * type as template parameter "T".
100 */
101 template <class T>
102 struct ExtParamImpl : public T, public ExtParam
103 {
104  ParamTypeAttrType type;
105  StringAttrType label;
106  StringAttrType units;
107  StringOptionsType optionNames;
108  UsedAttrType used;
109 
110  GdkParamInfo paramInfo;
111  GdkParamInfo editableParamInfo;
112 
113  ExtParamImpl()
114  {
115  this->RegisterAttribute(used);
116  this->used = true;
117  this->RegisterAttribute(type, "type");
118  this->RegisterAttribute(label, "label");
119  this->RegisterAttribute(units, "units");
120  this->RegisterAttribute(optionNames, "optionNames");
121 
122  // Enabled by relevant derived classes (move into derived?).
123  optionNames.enabled = false;
124 
125  paramInfo = kNULL;
126  editableParamInfo = kNULL;
127 
128  // Perhaps these should just be virtual methods to begin with?
129  T::SetPreWriteHandler([=] () {
130  this->OnBeforeWrite();
131  });
132 
133  T::SetPostReadHandler([=] () {
134  this->OnAfterRead();
135  });
136  }
137 
138  ~ExtParamImpl()
139  {
140  kDestroyRef(&editableParamInfo);
141  }
142 
143  void Dispose()
144  {
145  delete this;
146  }
147 
148  void CopyValues(const ExtParam& other) override
149  {
150  auto& typedOther = dynamic_cast<const ExtParamImpl<T>&>(other);
151 
152  // GdkParamInfo fields are deliberately skiped - they contain meta data
153  // related to the type of the parameter, which doesn't have to be and
154  // shouldn't be updated.
155  type = typedOther.type.Get();
156  label = typedOther.label.Get();
157  units = typedOther.units.Get();
158  optionNames.CopyOptions(typedOther.optionNames);
159  }
160 
161  GoCfg::Node& ModelNode() override
162  {
163  return static_cast<GoCfg::Node&>(*this);
164  }
165 
166  ParamTypeAttrType& ParamType() override
167  {
168  return type;
169  }
170 
171  UsedAttrType& Used() override
172  {
173  return used;
174  }
175 
176  StringAttrType& Label() override
177  {
178  return label;
179  }
180 
181  StringAttrType& Units() override
182  {
183  return units;
184  }
185 
186  StringOptionsType& OptionNames() override
187  {
188  return optionNames;
189  }
190 
191  void ClearOptions() override
192  {
193  optionNames.Clear();
194  }
195 
196  size_t OptionCount() const override
197  {
198  return optionNames.Count();
199  }
200 
201  void RemoveOptionAt(size_t index)
202  {
203  optionNames.Remove(index);
204  }
205 
206  bool IsRead() const override
207  {
208  return T::IsRead();
209  }
210 
211  GdkParamInfo ParamInfo() override
212  {
213  return !kIsNull(editableParamInfo) ? editableParamInfo : paramInfo;
214  }
215 
216  GdkParamInfo EditableParamInfo() override
217  {
218  if (kIsNull(editableParamInfo) && !kIsNull(paramInfo))
219  {
220  Go::Test(GdkParamInfo_ConstructParamAttached(&editableParamInfo, (GdkParam)static_cast<ExtParam*>(this), kNULL));
221  }
222 
223  return editableParamInfo;
224  }
225 
226  void SetParamInfo(GdkParamInfo paramInfo) override
227  {
228  this->paramInfo = paramInfo;
229  kDestroyRef(&editableParamInfo);
230  }
231 
232 protected:
233  virtual void OnBeforeWrite()
234  {
235  units.enabled = (units.Get() != "");
236  used.enabled = (used.Get() != true);
237  };
238 
239  virtual void OnAfterRead()
240  {
241  }
242 };
243 
244 /**
245 * @class ExtValueParam
246 * @extends ExtParamImpl
247 * @ingroup Gdk-Config
248 * @brief Base simple value parameter.
249 */
250 template <class T>
251 struct ExtValueParam : ExtParamImpl<GoCfg::Value<T>>
252 {
254  GoCfg::OptionsAttribute<T> options;
255 
256  ExtValueParam()
257  {
258  GoCfg::Value<T>::RegisterAttribute(options, "options");
259  }
260 
261  void CopyValues(const ExtParam& other) override
262  {
263  ExtParamImpl<GoCfg::Value<T>>::CopyValues(other); // Copy base
264 
265  auto& typedOther = dynamic_cast<const ExtValueParam<T>&>(other);
266 
267  this->Set(typedOther.Get()); // Copy the actual value
268  options.CopyOptions(typedOther.options);
269  }
270 
271  void ClearOptions() override
272  {
273  options.Clear();
274  this->optionNames.Clear();
275  }
276 
277  size_t OptionCount() const override
278  {
279  return options.Count();
280  }
281 
282  void RemoveOptionAt(size_t index)
283  {
284  options.Remove(index);
285 
286  if (index < this->optionNames.Count())
287  {
288  this->optionNames.Remove(index);
289  }
290  }
291 
292  using GoCfg::Value<T>::operator=;
293 
294 protected:
295  void OnBeforeWrite() override
296  {
297  BaseType::OnBeforeWrite();
298 
299  bool enableOptions = options.Count() > 0;
300 
301  options.enabled = enableOptions;
302  this->optionNames.enabled = enableOptions;
303  }
304 };
305 
306 template <class T>
307 struct ExtNumericParam : ExtValueParam<T>
308 {
309  GoCfg::MinAttribute<T> min;
310  GoCfg::MaxAttribute<T> max;
311 
312  ExtNumericParam()
313  {
314  GoCfg::Value<T>::RegisterAttribute(min, "min");
315  GoCfg::Value<T>::RegisterAttribute(max, "max");
316  }
317 
318  void CopyValues(const ExtParam& other) override
319  {
320  ExtValueParam<T>::CopyValues(other); // Copy base
321 
322  auto& typedOther = dynamic_cast<const ExtNumericParam<T>&>(other);
323  min = typedOther.min.Get();
324  max = typedOther.max.Get();
325  }
326 
328 
329 protected:
330  void OnBeforeWrite() override
331  {
333  }
334 };
335 
336 /**
337 * @class ExtCompositeParam
338 * @extends ExtParamImpl
339 * @ingroup Gdk-Config
340 * @brief Base composite value parameter that contain child properties.
341 */
342 struct ExtCompositeParam : ExtParamImpl<GoCfg::Container>
343 {
345  {
346  }
347 };
348 
349 // GDK_PARAM_TYPE_INT
350 struct ExtIntParam : ExtNumericParam<k32s>
351 {
352  ExtIntParam()
353  {
354  optionNames.enabled = true;
355 
356  min = k32S_NULL;
357  max = k32S_NULL;
358  }
359 
360  using ExtNumericParam<k32s>::operator=;
361 
362 protected:
363  void OnBeforeWrite() override
364  {
365  ExtNumericParam<k32s>::OnBeforeWrite();
366 
367  min.enabled = min.Get() != k32S_NULL;
368  max.enabled = max.Get() != k32S_NULL;
369  }
370 };
371 
372 // GDK_PARAM_TYPE_FLOAT
373 struct ExtFloatParam : ExtNumericParam<k64f>
374 {
375  ExtFloatParam()
376  {
377  optionNames.enabled = true;
378 
379  min = k64F_NULL;
380  max = k64F_NULL;
381  }
382 
383  using ExtNumericParam<k64f>::operator=;
384 
385 protected:
386  void OnBeforeWrite() override
387  {
388  ExtNumericParam<k64f>::OnBeforeWrite();
389 
390  min.enabled = min.Get() != k64F_NULL;
391  max.enabled = max.Get() != k64F_NULL;
392  }
393 };
394 
395 // GDK_PARAM_TYPE_BOOL
396 struct ExtBoolParam : ExtValueParam<bool>
397 {
398  ExtBoolParam()
399  {
400  }
401 
403 };
404 
405 // GDK_PARAM_TYPE_STRING
407 
408 struct ExtRegionParam : ExtCompositeParam
409 {
410  ExtRegionParam()
411  {
412  }
413 
414  void CopyValues(const ExtParam& other) override
415  {
416  ExtCompositeParam::CopyValues(other); // Copy base
417  }
418 };
419 
420 // GDK_PARAM_TYPE_PROFILE_REGION
421 struct ExtProfileRegionParam : ExtRegionParam
422 {
423  GoCfg::Value<k64f> x;
424  GoCfg::Value<k64f> z;
425  GoCfg::Value<k64f> width;
426  GoCfg::Value<k64f> height;
427 
428  ExtProfileRegionParam()
429  {
430  Register(x, "X");
431  Register(z, "Z");
432  Register(width, "Width");
433  Register(height, "Height");
434  }
435 
436  GdkRegionXZ64f GdkRegion() const
437  {
438  GdkRegionXZ64f gdkRegion;
439 
440  gdkRegion.x = x;
441  gdkRegion.z = z;
442  gdkRegion.width = width;
443  gdkRegion.height = height;
444 
445  return gdkRegion;
446  }
447 
448  const GdkRegionXZ64f* GdkRegionPtr()
449  {
450  gdkRegionStore = GdkRegion();
451  return &gdkRegionStore;
452  }
453 
454  void SetGdkRegion(const GdkRegionXZ64f& region)
455  {
456  x = region.x;
457  z = region.z;
458  width = region.width;
459  height = region.height;
460  }
461 
462  void CopyValues(const ExtParam& other) override
463  {
464  ExtRegionParam::CopyValues(other); // Copy base
465 
466  auto& typedOther = dynamic_cast<const ExtProfileRegionParam&>(other);
467  SetGdkRegion(typedOther.GdkRegion());
468  }
469 
470 private:
471  GdkRegionXZ64f gdkRegionStore;
472 };
473 
474 // GDK_PARAM_TYPE_SURFACE_REGION
475 struct ExtSurfaceRegionParam : ExtRegionParam
476 {
477  GoCfg::Value<k64f> x;
478  GoCfg::Value<k64f> y;
479  GoCfg::Value<k64f> z;
480  GoCfg::Value<k64f> width;
481  GoCfg::Value<k64f> length;
482  GoCfg::Value<k64f> height;
483  GoCfg::Value<k64f> zAngle;
484  GoCfg::UsedAttribute zAngleUsed;
485 
486  ExtSurfaceRegionParam()
487  {
488  Register(x, "X");
489  Register(y, "Y");
490  Register(z, "Z");
491  Register(width, "Width");
492  Register(length, "Length");
493  Register(height, "Height");
494  Register(zAngle, "ZAngle");
495  zAngle.RegisterAttribute(zAngleUsed);
496  }
497 
498  GdkRegion3d64f GdkRegion() const
499  {
500  GdkRegion3d64f gdkRegion;
501 
502  gdkRegion.x = x;
503  gdkRegion.y = y;
504  gdkRegion.z = z;
505  gdkRegion.width = width;
506  gdkRegion.length = length;
507  gdkRegion.height = height;
508  gdkRegion.zAngle = zAngle;
509 
510  return gdkRegion;
511  }
512 
513  const GdkRegion3d64f* GdkRegionPtr()
514  {
515  gdkRegionStore = GdkRegion();
516  return &gdkRegionStore;
517  }
518 
519  void SetGdkRegion(const GdkRegion3d64f& region)
520  {
521  x = region.x;
522  y = region.y;
523  z = region.z;
524  width = region.width;
525  length = region.length;
526  height = region.height;
527  zAngle = region.zAngle;
528  }
529 
530  void CopyValues(const ExtParam& other) override
531  {
532  ExtRegionParam::CopyValues(other); // Copy base
533 
534  auto& typedOther = dynamic_cast<const ExtSurfaceRegionParam&>(other);
535  SetGdkRegion(typedOther.GdkRegion());
536  zAngleUsed = typedOther.zAngleUsed.Get(); // Set the z angle used flag
537  }
538 
539 private:
540  GdkRegion3d64f gdkRegionStore;
541 };
542 
543 // GDK_PARAM_TYPE_SURFACE_REGION_2D
544 struct ExtSurfaceRegion2dParam : ExtRegionParam
545 {
546  GoCfg::Value<k64f> x;
547  GoCfg::Value<k64f> y;
548  GoCfg::Value<k64f> width;
549  GoCfg::Value<k64f> length;
550 
551  ExtSurfaceRegion2dParam()
552  {
553  Register(x, "X");
554  Register(y, "Y");
555  Register(width, "Width");
556  Register(length, "Length");
557  }
558 
559  GdkRegion2d64f GdkRegion() const
560  {
561  GdkRegion2d64f gdkRegion;
562 
563  gdkRegion.x = x;
564  gdkRegion.y = y;
565  gdkRegion.width = width;
566  gdkRegion.length = length;
567 
568  return gdkRegion;
569  }
570 
571  const GdkRegion2d64f* GdkRegionPtr()
572  {
573  gdkRegionStore = GdkRegion();
574  return &gdkRegionStore;
575  }
576 
577  void SetGdkRegion(const GdkRegion2d64f& region)
578  {
579  x = region.x;
580  y = region.y;
581  width = region.width;
582  length = region.length;
583  }
584 
585  void CopyValues(const ExtParam& other) override
586  {
587  ExtRegionParam::CopyValues(other); // Copy base
588 
589  auto& typedOther = dynamic_cast<const ExtSurfaceRegion2dParam&>(other);
590  SetGdkRegion(typedOther.GdkRegion());
591  }
592 
593 private:
594  GdkRegion2d64f gdkRegionStore;
595 };
596 
597 // GDK_PARAM_TYPE_GEOMETRIC_FEATURE
598 struct ExtFeatureInputParam : ExtValueParam<k32s>
599 {
600  ExtFeatureInputParam()
601  {
602  }
603 
604 protected:
605  void OnBeforeWrite() override
606  {
608 
609  this->options.enabled = true;
610  this->optionNames.enabled = true;
611  }
612 };
613 
614 struct PointSetRegionAxisValue : GoCfg::Value<k64f>
615 {
616  GoCfg::ValueAttribute<k64f> actualValue;
617  GoCfg::ValueAttribute<bool> readonly;
618 
619  PointSetRegionAxisValue()
620  {
621  this->RegisterAttribute(actualValue, "value");
622  this->RegisterAttribute(readonly, "readonly");
623  }
624 
625  using GoCfg::Value<k64f>::operator=;
626 };
627 
628 struct PointSetRegionPoint : GoCfg::Container
629 {
630  PointSetRegionAxisValue x;
631  PointSetRegionAxisValue y;
632  PointSetRegionAxisValue z;
633 
634  PointSetRegionPoint()
635  {
636  this->Register(x, "X");
637  this->Register(y, "Y");
638  this->Register(z, "Z");
639  }
640 
641  const kPoint3d64f* Point3d64fPtr()
642  {
643  compatContainer.x = x;
644  compatContainer.y = y;
645  compatContainer.z = z;
646 
647  return &compatContainer;
648  }
649 
650 private:
651  kPoint3d64f compatContainer;
652 };
653 
654 // GDK_PARAM_TYPE_POINT_SET_REGION
655 struct ExtPointSetRegionParam : ExtParamImpl<GoCfg::DynamicContainer<PointSetRegionPoint>>
656 {
658 
659  GoCfg::ValueAttribute<k32u> maxPoints = k32U_MAX;
660  GoCfg::ValueAttribute<k32u> minPoints = 0;
661  GoCfg::ValueAttribute<kMarkerShape> pointShape = -1;
662  GoCfg::ValueAttribute<k16u> pointSize = 0;
663  GoCfg::ValueAttribute<GdkPointSetRegionMode> mode = -1;
664  GoCfg::ValueAttribute<GdkPointSetRegionColor> pointColor = k32U_MAX;
665  GoCfg::ValueAttribute<GdkPointSetRegionColor> lineColor = k32U_MAX;
666  GoCfg::ValueAttribute<bool> showProjection = true;
667 
668  bool useShowProjection = true;
669  k64f constantZ = k64F_NULL;
670 
671  ExtPointSetRegionParam()
672  {
673  // TODO: a lot of these attributes are optional
674  this->RegisterAttribute(maxPoints, "maxPointCount");
675  this->RegisterAttribute(minPoints, "minPointCount");
676  this->RegisterAttribute(pointShape, "pointShape");
677  this->RegisterAttribute(pointSize, "pointSize");
678  this->RegisterAttribute(mode, "mode");
679  this->RegisterAttribute(pointColor, "pointColor");
680  this->RegisterAttribute(lineColor, "lineColor");
681  this->RegisterAttribute(showProjection, "showProjection");
682 
683  this->RegisterType<PointSetRegionPoint>("Point");
684  }
685 
686  void CopyValues(const ExtParam& other) override
687  {
688  BaseType::CopyValues(other);
689 
690  auto& typedOther = dynamic_cast<const ExtPointSetRegionParam&>(other);
691 
692  maxPoints = typedOther.maxPoints.Get();
693  minPoints = typedOther.minPoints.Get();
694  pointShape = typedOther.pointShape.Get();
695  pointSize = typedOther.pointSize.Get();
696  mode = typedOther.mode.Get();
697  pointColor = typedOther.pointColor.Get();
698  lineColor = typedOther.lineColor.Get();
699  showProjection = typedOther.showProjection.Get();
700 
701  useShowProjection = typedOther.useShowProjection;
702  constantZ = typedOther.constantZ;
703  }
704 
705 protected:
706  void OnBeforeWrite() override
707  {
708  BaseType::OnBeforeWrite();
709 
710  mode.enabled = mode.Get() != -1;
711  pointShape.enabled = pointShape.Get() != -1;
712  pointSize.enabled = pointSize.Get() != 0;
713  pointColor.enabled = pointColor.Get() != k32U_MAX;
714  lineColor.enabled = lineColor.Get() != k32U_MAX;
715  showProjection.enabled = useShowProjection;
716  maxPoints.enabled = maxPoints.Get() != k32U_MAX;
717  minPoints.enabled = minPoints.Get() != 0;
718 
719  for (size_t i = 0; i < this->Count(); ++i)
720  {
721  PointSetRegionPoint& point = this->At(i);
722 
723  point.x.actualValue = point.x.Get();
724  point.x.readonly = false;
725 
726  point.y.actualValue = point.y.Get();
727  point.y.readonly = false;
728 
729  if (constantZ == k64F_NULL)
730  {
731  point.z.actualValue = point.z.Get();
732  point.z.readonly = false;
733  }
734  else
735  {
736  point.z.actualValue = constantZ;
737  point.z.readonly = true;
738  }
739  }
740  }
741 };
742 
743 /**
744 * @class ExtStreamId
745 * @ingroup Gdk-Config
746 * @brief Represents a stream ID. Supports usage as a model value.
747 */
748 struct GdkClass ExtStreamId
749 {
750  k32s step;
751  k32s id;
752  k32s source;
753 
754  ExtStreamId();
755  ExtStreamId(const GdkStreamId& other);
756 
757  bool operator==(const ExtStreamId& other) const;
758  bool operator!=(const ExtStreamId& other) const;
759 
760  operator GdkStreamId() const;
761 };
762 
763 ///@cond IGNORE
764 GdkCppFx(std::ostream&) operator<<(std::ostream& stream, const ExtStreamId& source);
765 GdkCppFx(std::istream&) operator>>(std::istream& stream, ExtStreamId& source);
766 ///@endcond
767 
768 // GDK_PARAM_TYPE_DATA_INPUT
769 struct ExtDataInputParam : ExtValueParam<ExtStreamId>
770 {
771  // GOC-13328: store parameter data input's supported data types
772  // defined for the tool's parameter so that the configuration
773  // XML will show the data types as options for that parameter.
774  GoCfg::OptionsAttribute<GdkDataType> dataTypes;
775 
776  ExtDataInputParam()
777  {
778  // GOC-13328: output the supported data types as a list of
779  // option values.
780  this->RegisterAttribute(dataTypes, "dataTypes");
781  }
782 
783  // This clears this class's "dataTypes" plus the parent classes'
784  // options: the ExtValueParam's "options" and ExtParamImpl's "optionNames".
785  void ClearOptions() override
786  {
787  dataTypes.Clear();
788  this->options.Clear();
789  this->optionNames.Clear();
790  }
791 
792 protected:
793  void OnBeforeWrite() override
794  {
796 
797  this->options.enabled = true;
798  this->optionNames.enabled = true;
799  }
800 };
801 
802 /**
803 * @class ExtParamSet
804 * @extends DynamicContainer
805 * @ingroup Gdk-Config
806 * @brief Represents a set of properties.
807 */
808 struct ExtParamSet : GoCfg::Container
809 {
810  using ParamType = std::unique_ptr<ExtParam>;
811 
812  ExtParamSet()
813  {
814  }
815 
816  ExtParam& ParamAt(size_t index)
817  {
818  // ExtParam and Node are not directly related. Must dynamic cast.
819  return dynamic_cast<ExtParam&>(At(index));
820  }
821 
822  ExtParam& Find(const std::string& name)
823  {
824  size_t index = paramNameMap.at(name);
825  return *(parameters[index].get());
826  }
827 
828  void Add(const std::string& name, ParamType parameter)
829  {
830  Register(parameter->ModelNode(), name);
831 
832  parameters.emplace_back(std::move(parameter));
833  paramNameMap[name] = parameters.size() - 1;
834  }
835 
836 protected:
837 
838  std::vector<ParamType> parameters;
839  std::map<std::string, size_t> paramNameMap;
840 };
841 
842 GdkCppFx(std::unique_ptr<ExtParam>) ConstructExtParamFromInfo(GdkParamInfo info, bool copyDefaults = true);
843 
844 #endif
Essential Gdk declarations.
Definition: GdkCfgInterfaces.h:14
Base composite value parameter that contain child properties.
Definition: ExtParams.h:342
Declares the GdkParamInfo class.
#define kIsNull(POINTER)
Represents a stream ID.
Definition: ExtParams.h:748
Shared common implementation of parameters. Extends a chosen model node type as template parameter "T...
Definition: ExtParams.h:102
#define k64F_NULL
Represents the schema of a configurable parameter.
#define k32S_NULL
#define GDK_PARAM_TYPE_UNKNOWN
Not yet set.
Definition: GdkParamInfo.h:31
Shared interface of all GDK parameters.
Definition: ExtParams.h:62
Represents the data of a configurable parameter.
#define k32U_MAX
Represents a set of properties.
Definition: ExtParams.h:808
Base simple value parameter.
Definition: ExtParams.h:251
#define kNULL
Type of a parameter.