tilde~
Puredata Qt-based GUI
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PropertyList.h
Go to the documentation of this file.
1 // (c) 2017 Alex Nadzharov
2 // License: GPL3
3 
4 #ifndef CM_PROPERTYLIST_H
5 #define CM_PROPERTYLIST_H
6 
7 #include "Property.h"
8 
9 #include <map>
10 
11 #include <QDebug>
12 #include <QObject>
13 
14 using namespace std;
15 
16 namespace tilde {
17 
18 class UIObject;
19 
20 typedef map<string, Property*> UIPropertyData;
21 typedef map<string, UIPropertyData*> UIPropertyGroups;
22 
23 typedef map<string, Property*>::iterator UIPropertyDataIterator;
24 typedef map<string, UIPropertyData*>::iterator UIPropertyGroupIterator;
25 
26 #define PROPERTY_LISTENER(x, y) connect(objectData()->properties()->get(x), &Property::changed, this, y)
27 #define PROPERTY_DISCONNECT_LISTENER(x, y) disconnect(objectData()->properties()->get(x), &Property::changed, this, y)
28 #define PROPERTY_SET(x, y) objectData()->properties()->set(x, y)
29 #define PROPERTY_GET(x) objectData()->properties()->get(x)
30 
34 class PropertyList : public QObject {
35  Q_OBJECT
36 
37 private:
38  UIPropertyData _data;
39  UIPropertyGroups _groups;
40 
41 public:
43 
44  UIPropertyData* group(QString grpName);
45  UIPropertyData* fromGroup(QString grpName);
46 
47  template <typename T>
48  void create(string pName, string pGroup, QString pVersion, T defaultData)
49  {
50  Property* newP = new Property;
51 
52  //newP->setGroup(pGroup);
53  newP->setVersion(pVersion);
54  newP->set(defaultData);
55  newP->copyDataToDefault();
56 
57  _data[pName] = newP;
58  //fix
59 
60  UIPropertyData* grp = _groups[pGroup];
61  if (!grp)
62  grp = new UIPropertyData();
63  (*grp)[pName] = newP;
64  _groups[pGroup] = grp;
65  }
66 
67  // ----------
68 
69  template <typename U>
70  void set(string pName, U value)
71  {
72  if (_data[pName]) {
73  _data[pName]->set(value);
74  // emit propertyChangedSignal(QString(pName.c_str()));
75 
76  emit get(pName.c_str())->changed();
77  }
78  };
79 
80  Property* get(QString pName);
81 
82  //todo
83 
84  // Property* operator[](QString pName)
85  // {
86  // return get(pName);
87  // }
88 
89  // Property* operator[](QString pName) const
90  // {
91  // return get(pName);
92  // }
93 
94  // ------------
95 
100  string asPdFileString();
101 
106  QStringList names();
107 
113  QStringList names(UIPropertyData* data1);
114 
119  QStringList groupNames();
120 
126  QString extractFromPdFileString(QString input);
127 
128  // void addListener(QString name, QObject *obj, t_PropertyListener func)
129  // {
130  // Property *prop = get(name);
131 
132  // if (prop)
133  // {
134  // connect(prop, &Property::changed, (UIObject*)obj, func);
135 
136  // }
137 
138  // }
139 
140 signals:
141  void propertyChangedSignal();
142 };
143 }
144 
145 #endif // CM_PROPERTYLIST_H
void create(string pName, string pGroup, QString pVersion, T defaultData)
Definition: PropertyList.h:48
void set(T val)
void setVersion(QString version)
copy current value to default value
Definition: Property.cpp:306
property handling class for ui object.
Definition: Property.h:44
void copyDataToDefault()
Definition: Property.cpp:301
Property handling class for ui object - property list.
Definition: PropertyList.h:34
map< string, UIPropertyData * > UIPropertyGroups
Definition: PropertyList.h:21
map< string, UIPropertyData * >::iterator UIPropertyGroupIterator
Definition: PropertyList.h:24
map< string, Property * >::iterator UIPropertyDataIterator
Definition: PropertyList.h:23
Definition: UIObject.h:44
map< string, Property * > UIPropertyData
Definition: PropertyList.h:18
PropertyList()
Definition: PropertyList.h:42
void set(string pName, U value)
Definition: PropertyList.h:70