xref: /aosp_15_r20/external/libchrome-gestures/include/prop_registry.h (revision aed3e5085e770be5b69ce25295ecf6ddf906af95)
1*aed3e508SAndroid Build Coastguard Worker // Copyright 2011 The ChromiumOS Authors
2*aed3e508SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*aed3e508SAndroid Build Coastguard Worker // found in the LICENSE file.
4*aed3e508SAndroid Build Coastguard Worker 
5*aed3e508SAndroid Build Coastguard Worker #ifndef GESTURES_PROP_REGISTRY_H__
6*aed3e508SAndroid Build Coastguard Worker #define GESTURES_PROP_REGISTRY_H__
7*aed3e508SAndroid Build Coastguard Worker 
8*aed3e508SAndroid Build Coastguard Worker #include <set>
9*aed3e508SAndroid Build Coastguard Worker #include <string>
10*aed3e508SAndroid Build Coastguard Worker 
11*aed3e508SAndroid Build Coastguard Worker #include <json/value.h>
12*aed3e508SAndroid Build Coastguard Worker 
13*aed3e508SAndroid Build Coastguard Worker #include "include/gestures.h"
14*aed3e508SAndroid Build Coastguard Worker #include "include/logging.h"
15*aed3e508SAndroid Build Coastguard Worker 
16*aed3e508SAndroid Build Coastguard Worker namespace gestures {
17*aed3e508SAndroid Build Coastguard Worker 
18*aed3e508SAndroid Build Coastguard Worker class ActivityLog;
19*aed3e508SAndroid Build Coastguard Worker class Property;
20*aed3e508SAndroid Build Coastguard Worker 
21*aed3e508SAndroid Build Coastguard Worker class PropRegistry {
22*aed3e508SAndroid Build Coastguard Worker  public:
PropRegistry()23*aed3e508SAndroid Build Coastguard Worker   PropRegistry() : prop_provider_(nullptr), activity_log_(nullptr) {}
24*aed3e508SAndroid Build Coastguard Worker 
25*aed3e508SAndroid Build Coastguard Worker   void Register(Property* prop);
26*aed3e508SAndroid Build Coastguard Worker   void Unregister(Property* prop);
27*aed3e508SAndroid Build Coastguard Worker 
28*aed3e508SAndroid Build Coastguard Worker   void SetPropProvider(GesturesPropProvider* prop_provider, void* data);
PropProvider()29*aed3e508SAndroid Build Coastguard Worker   GesturesPropProvider* PropProvider() const { return prop_provider_; }
PropProviderData()30*aed3e508SAndroid Build Coastguard Worker   void* PropProviderData() const { return prop_provider_data_; }
props()31*aed3e508SAndroid Build Coastguard Worker   const std::set<Property*>& props() const { return props_; }
32*aed3e508SAndroid Build Coastguard Worker 
set_activity_log(ActivityLog * activity_log)33*aed3e508SAndroid Build Coastguard Worker   void set_activity_log(ActivityLog* activity_log) {
34*aed3e508SAndroid Build Coastguard Worker     activity_log_ = activity_log;
35*aed3e508SAndroid Build Coastguard Worker   }
activity_log()36*aed3e508SAndroid Build Coastguard Worker   ActivityLog* activity_log() const { return activity_log_; }
37*aed3e508SAndroid Build Coastguard Worker 
38*aed3e508SAndroid Build Coastguard Worker  private:
39*aed3e508SAndroid Build Coastguard Worker   GesturesPropProvider* prop_provider_;
40*aed3e508SAndroid Build Coastguard Worker   void* prop_provider_data_;
41*aed3e508SAndroid Build Coastguard Worker   std::set<Property*> props_;
42*aed3e508SAndroid Build Coastguard Worker   ActivityLog* activity_log_;
43*aed3e508SAndroid Build Coastguard Worker };
44*aed3e508SAndroid Build Coastguard Worker 
45*aed3e508SAndroid Build Coastguard Worker class PropertyDelegate;
46*aed3e508SAndroid Build Coastguard Worker 
47*aed3e508SAndroid Build Coastguard Worker class Property {
48*aed3e508SAndroid Build Coastguard Worker  public:
Property(PropRegistry * parent,const char * name)49*aed3e508SAndroid Build Coastguard Worker   Property(PropRegistry* parent, const char* name)
50*aed3e508SAndroid Build Coastguard Worker       : parent_(parent), name_(name) {}
51*aed3e508SAndroid Build Coastguard Worker 
~Property()52*aed3e508SAndroid Build Coastguard Worker   virtual ~Property() {
53*aed3e508SAndroid Build Coastguard Worker     if (parent_)
54*aed3e508SAndroid Build Coastguard Worker       parent_->Unregister(this);
55*aed3e508SAndroid Build Coastguard Worker   }
56*aed3e508SAndroid Build Coastguard Worker 
57*aed3e508SAndroid Build Coastguard Worker   void CreateProp();
58*aed3e508SAndroid Build Coastguard Worker   virtual void CreatePropImpl() = 0;
59*aed3e508SAndroid Build Coastguard Worker   void DestroyProp();
60*aed3e508SAndroid Build Coastguard Worker 
SetDelegate(PropertyDelegate * delegate)61*aed3e508SAndroid Build Coastguard Worker   void SetDelegate(PropertyDelegate* delegate) {
62*aed3e508SAndroid Build Coastguard Worker     delegate_ = delegate;
63*aed3e508SAndroid Build Coastguard Worker   }
64*aed3e508SAndroid Build Coastguard Worker 
name()65*aed3e508SAndroid Build Coastguard Worker   const char* name() { return name_; }
66*aed3e508SAndroid Build Coastguard Worker   // Returns a newly allocated Value object
67*aed3e508SAndroid Build Coastguard Worker   virtual Json::Value NewValue() const = 0;
68*aed3e508SAndroid Build Coastguard Worker   // Returns true on success
69*aed3e508SAndroid Build Coastguard Worker   virtual bool SetValue(const Json::Value& value) = 0;
70*aed3e508SAndroid Build Coastguard Worker 
StaticHandleGesturesPropWillRead(void * data)71*aed3e508SAndroid Build Coastguard Worker   static GesturesPropBool StaticHandleGesturesPropWillRead(void* data) {
72*aed3e508SAndroid Build Coastguard Worker     GesturesPropBool ret =
73*aed3e508SAndroid Build Coastguard Worker         reinterpret_cast<Property*>(data)->HandleGesturesPropWillRead();
74*aed3e508SAndroid Build Coastguard Worker     return ret;
75*aed3e508SAndroid Build Coastguard Worker   }
76*aed3e508SAndroid Build Coastguard Worker   // TODO(adlr): pass on will-read notifications
HandleGesturesPropWillRead()77*aed3e508SAndroid Build Coastguard Worker   virtual GesturesPropBool HandleGesturesPropWillRead() { return 0; }
StaticHandleGesturesPropWritten(void * data)78*aed3e508SAndroid Build Coastguard Worker   static void StaticHandleGesturesPropWritten(void* data) {
79*aed3e508SAndroid Build Coastguard Worker     reinterpret_cast<Property*>(data)->HandleGesturesPropWritten();
80*aed3e508SAndroid Build Coastguard Worker   }
81*aed3e508SAndroid Build Coastguard Worker   virtual void HandleGesturesPropWritten() = 0;
82*aed3e508SAndroid Build Coastguard Worker 
83*aed3e508SAndroid Build Coastguard Worker  protected:
84*aed3e508SAndroid Build Coastguard Worker   GesturesProp* gprop_ = nullptr;
85*aed3e508SAndroid Build Coastguard Worker   PropRegistry* parent_;
86*aed3e508SAndroid Build Coastguard Worker   PropertyDelegate* delegate_ = nullptr;
87*aed3e508SAndroid Build Coastguard Worker 
88*aed3e508SAndroid Build Coastguard Worker  private:
89*aed3e508SAndroid Build Coastguard Worker   const char* name_;
90*aed3e508SAndroid Build Coastguard Worker };
91*aed3e508SAndroid Build Coastguard Worker 
92*aed3e508SAndroid Build Coastguard Worker class BoolProperty : public Property {
93*aed3e508SAndroid Build Coastguard Worker  public:
BoolProperty(PropRegistry * reg,const char * name,GesturesPropBool val)94*aed3e508SAndroid Build Coastguard Worker   BoolProperty(PropRegistry* reg, const char* name, GesturesPropBool val)
95*aed3e508SAndroid Build Coastguard Worker       : Property(reg, name), val_(val) {
96*aed3e508SAndroid Build Coastguard Worker     if (parent_)
97*aed3e508SAndroid Build Coastguard Worker       parent_->Register(this);
98*aed3e508SAndroid Build Coastguard Worker   }
99*aed3e508SAndroid Build Coastguard Worker   virtual void CreatePropImpl();
100*aed3e508SAndroid Build Coastguard Worker   virtual Json::Value NewValue() const;
101*aed3e508SAndroid Build Coastguard Worker   virtual bool SetValue(const Json::Value& value);
102*aed3e508SAndroid Build Coastguard Worker   virtual void HandleGesturesPropWritten();
103*aed3e508SAndroid Build Coastguard Worker 
104*aed3e508SAndroid Build Coastguard Worker   GesturesPropBool val_;
105*aed3e508SAndroid Build Coastguard Worker };
106*aed3e508SAndroid Build Coastguard Worker 
107*aed3e508SAndroid Build Coastguard Worker class BoolArrayProperty : public Property {
108*aed3e508SAndroid Build Coastguard Worker  public:
BoolArrayProperty(PropRegistry * reg,const char * name,GesturesPropBool * vals,size_t count)109*aed3e508SAndroid Build Coastguard Worker   BoolArrayProperty(PropRegistry* reg, const char* name, GesturesPropBool* vals,
110*aed3e508SAndroid Build Coastguard Worker                     size_t count)
111*aed3e508SAndroid Build Coastguard Worker       : Property(reg, name), vals_(vals), count_(count) {
112*aed3e508SAndroid Build Coastguard Worker     if (parent_)
113*aed3e508SAndroid Build Coastguard Worker       parent_->Register(this);
114*aed3e508SAndroid Build Coastguard Worker   }
115*aed3e508SAndroid Build Coastguard Worker   virtual void CreatePropImpl();
116*aed3e508SAndroid Build Coastguard Worker   virtual Json::Value NewValue() const;
117*aed3e508SAndroid Build Coastguard Worker   virtual bool SetValue(const Json::Value& list);
118*aed3e508SAndroid Build Coastguard Worker   virtual void HandleGesturesPropWritten();
119*aed3e508SAndroid Build Coastguard Worker 
120*aed3e508SAndroid Build Coastguard Worker   GesturesPropBool* vals_;
121*aed3e508SAndroid Build Coastguard Worker   size_t count_;
122*aed3e508SAndroid Build Coastguard Worker };
123*aed3e508SAndroid Build Coastguard Worker 
124*aed3e508SAndroid Build Coastguard Worker class DoubleProperty : public Property {
125*aed3e508SAndroid Build Coastguard Worker  public:
DoubleProperty(PropRegistry * reg,const char * name,double val)126*aed3e508SAndroid Build Coastguard Worker   DoubleProperty(PropRegistry* reg, const char* name, double val)
127*aed3e508SAndroid Build Coastguard Worker       : Property(reg, name), val_(val) {
128*aed3e508SAndroid Build Coastguard Worker     if (parent_)
129*aed3e508SAndroid Build Coastguard Worker       parent_->Register(this);
130*aed3e508SAndroid Build Coastguard Worker   }
131*aed3e508SAndroid Build Coastguard Worker   virtual void CreatePropImpl();
132*aed3e508SAndroid Build Coastguard Worker   virtual Json::Value NewValue() const;
133*aed3e508SAndroid Build Coastguard Worker   virtual bool SetValue(const Json::Value& value);
134*aed3e508SAndroid Build Coastguard Worker   virtual void HandleGesturesPropWritten();
135*aed3e508SAndroid Build Coastguard Worker 
136*aed3e508SAndroid Build Coastguard Worker   double val_;
137*aed3e508SAndroid Build Coastguard Worker };
138*aed3e508SAndroid Build Coastguard Worker 
139*aed3e508SAndroid Build Coastguard Worker class DoubleArrayProperty : public Property {
140*aed3e508SAndroid Build Coastguard Worker  public:
DoubleArrayProperty(PropRegistry * reg,const char * name,double * vals,size_t count)141*aed3e508SAndroid Build Coastguard Worker   DoubleArrayProperty(PropRegistry* reg, const char* name, double* vals,
142*aed3e508SAndroid Build Coastguard Worker                       size_t count)
143*aed3e508SAndroid Build Coastguard Worker       : Property(reg, name), vals_(vals), count_(count) {
144*aed3e508SAndroid Build Coastguard Worker     if (parent_)
145*aed3e508SAndroid Build Coastguard Worker       parent_->Register(this);
146*aed3e508SAndroid Build Coastguard Worker   }
147*aed3e508SAndroid Build Coastguard Worker   virtual void CreatePropImpl();
148*aed3e508SAndroid Build Coastguard Worker   virtual Json::Value NewValue() const;
149*aed3e508SAndroid Build Coastguard Worker   virtual bool SetValue(const Json::Value& list);
150*aed3e508SAndroid Build Coastguard Worker   virtual void HandleGesturesPropWritten();
151*aed3e508SAndroid Build Coastguard Worker 
152*aed3e508SAndroid Build Coastguard Worker   double* vals_;
153*aed3e508SAndroid Build Coastguard Worker   size_t count_;
154*aed3e508SAndroid Build Coastguard Worker };
155*aed3e508SAndroid Build Coastguard Worker 
156*aed3e508SAndroid Build Coastguard Worker class IntProperty : public Property {
157*aed3e508SAndroid Build Coastguard Worker  public:
IntProperty(PropRegistry * reg,const char * name,int val)158*aed3e508SAndroid Build Coastguard Worker   IntProperty(PropRegistry* reg, const char* name, int val)
159*aed3e508SAndroid Build Coastguard Worker       : Property(reg, name), val_(val) {
160*aed3e508SAndroid Build Coastguard Worker     if (parent_)
161*aed3e508SAndroid Build Coastguard Worker       parent_->Register(this);
162*aed3e508SAndroid Build Coastguard Worker   }
163*aed3e508SAndroid Build Coastguard Worker   virtual void CreatePropImpl();
164*aed3e508SAndroid Build Coastguard Worker   virtual Json::Value NewValue() const;
165*aed3e508SAndroid Build Coastguard Worker   virtual bool SetValue(const Json::Value& value);
166*aed3e508SAndroid Build Coastguard Worker   virtual void HandleGesturesPropWritten();
167*aed3e508SAndroid Build Coastguard Worker 
168*aed3e508SAndroid Build Coastguard Worker   int val_;
169*aed3e508SAndroid Build Coastguard Worker };
170*aed3e508SAndroid Build Coastguard Worker 
171*aed3e508SAndroid Build Coastguard Worker class IntArrayProperty : public Property {
172*aed3e508SAndroid Build Coastguard Worker  public:
IntArrayProperty(PropRegistry * reg,const char * name,int * vals,size_t count)173*aed3e508SAndroid Build Coastguard Worker   IntArrayProperty(PropRegistry* reg, const char* name, int* vals,
174*aed3e508SAndroid Build Coastguard Worker                    size_t count)
175*aed3e508SAndroid Build Coastguard Worker       : Property(reg, name), vals_(vals), count_(count) {
176*aed3e508SAndroid Build Coastguard Worker     if (parent_)
177*aed3e508SAndroid Build Coastguard Worker       parent_->Register(this);
178*aed3e508SAndroid Build Coastguard Worker   }
179*aed3e508SAndroid Build Coastguard Worker   virtual void CreatePropImpl();
180*aed3e508SAndroid Build Coastguard Worker   virtual Json::Value NewValue() const;
181*aed3e508SAndroid Build Coastguard Worker   virtual bool SetValue(const Json::Value& list);
182*aed3e508SAndroid Build Coastguard Worker   virtual void HandleGesturesPropWritten();
183*aed3e508SAndroid Build Coastguard Worker 
184*aed3e508SAndroid Build Coastguard Worker   int* vals_;
185*aed3e508SAndroid Build Coastguard Worker   size_t count_;
186*aed3e508SAndroid Build Coastguard Worker };
187*aed3e508SAndroid Build Coastguard Worker 
188*aed3e508SAndroid Build Coastguard Worker class StringProperty : public Property {
189*aed3e508SAndroid Build Coastguard Worker  public:
StringProperty(PropRegistry * reg,const char * name,const char * val)190*aed3e508SAndroid Build Coastguard Worker   StringProperty(PropRegistry* reg, const char* name, const char* val)
191*aed3e508SAndroid Build Coastguard Worker       : Property(reg, name), val_(val) {
192*aed3e508SAndroid Build Coastguard Worker     if (parent_)
193*aed3e508SAndroid Build Coastguard Worker       parent_->Register(this);
194*aed3e508SAndroid Build Coastguard Worker   }
195*aed3e508SAndroid Build Coastguard Worker   virtual void CreatePropImpl();
196*aed3e508SAndroid Build Coastguard Worker   virtual Json::Value NewValue() const;
197*aed3e508SAndroid Build Coastguard Worker   virtual bool SetValue(const Json::Value& value);
198*aed3e508SAndroid Build Coastguard Worker   virtual void HandleGesturesPropWritten();
199*aed3e508SAndroid Build Coastguard Worker 
200*aed3e508SAndroid Build Coastguard Worker   std::string parsed_val_;
201*aed3e508SAndroid Build Coastguard Worker   const char* val_;
202*aed3e508SAndroid Build Coastguard Worker };
203*aed3e508SAndroid Build Coastguard Worker 
204*aed3e508SAndroid Build Coastguard Worker class PropertyDelegate {
205*aed3e508SAndroid Build Coastguard Worker  public:
BoolWasWritten(BoolProperty * prop)206*aed3e508SAndroid Build Coastguard Worker   virtual void BoolWasWritten(BoolProperty* prop) {};
BoolArrayWasWritten(BoolArrayProperty * prop)207*aed3e508SAndroid Build Coastguard Worker   virtual void BoolArrayWasWritten(BoolArrayProperty* prop) {};
DoubleWasWritten(DoubleProperty * prop)208*aed3e508SAndroid Build Coastguard Worker   virtual void DoubleWasWritten(DoubleProperty* prop) {};
DoubleArrayWasWritten(DoubleArrayProperty * prop)209*aed3e508SAndroid Build Coastguard Worker   virtual void DoubleArrayWasWritten(DoubleArrayProperty* prop) {};
IntWasWritten(IntProperty * prop)210*aed3e508SAndroid Build Coastguard Worker   virtual void IntWasWritten(IntProperty* prop) {};
IntArrayWasWritten(IntArrayProperty * prop)211*aed3e508SAndroid Build Coastguard Worker   virtual void IntArrayWasWritten(IntArrayProperty* prop) {};
StringWasWritten(StringProperty * prop)212*aed3e508SAndroid Build Coastguard Worker   virtual void StringWasWritten(StringProperty* prop) {};
213*aed3e508SAndroid Build Coastguard Worker };
214*aed3e508SAndroid Build Coastguard Worker 
215*aed3e508SAndroid Build Coastguard Worker }  // namespace gestures
216*aed3e508SAndroid Build Coastguard Worker 
217*aed3e508SAndroid Build Coastguard Worker #endif  // GESTURES_PROP_REGISTRY_H__
218