diff --git a/bazaar/CtrlProp/PropEdit.cpp b/bazaar/CtrlProp/PropEdit.cpp index 2374b5d5e..aee168dc5 100644 --- a/bazaar/CtrlProp/PropEdit.cpp +++ b/bazaar/CtrlProp/PropEdit.cpp @@ -5,17 +5,25 @@ NAMESPACE_UPP void PropEditCtrl::UpdateCtrl() { ClearMap(); - am.Clear(); + oam.Clear(); if(!ctrl) return; - //init local accessor map //prefer the dynamic access //fall back to the static accessors from Props<> + AccessorMap* am = NULL; GetAccessorMapI* ami = dynamic_cast(ctrl); - if(ami) am <<= ami->GetAccessorMap(); - else if(!Props::SetupAccessorMap(*ctrl, am)) return; + if(ami) + am = &ami->GetAccessorMap(); + else + { + oam.Create(); + if(!Props::SetupAccessorMap(*ctrl, *oam)) + return; + am = ~oam; + } - SetMap(&am); + ASSERT(am); + SetMap(am); for(int i = 0; i < avae.GetCount(); i++) { diff --git a/bazaar/CtrlProp/PropEdit.h b/bazaar/CtrlProp/PropEdit.h index a9095f8e8..c94d891ef 100644 --- a/bazaar/CtrlProp/PropEdit.h +++ b/bazaar/CtrlProp/PropEdit.h @@ -19,13 +19,12 @@ public: virtual void SetData(const Value& v) { SetCtrl(RawValue::Extract(v)); } void OnAction(); - const AccessorMap& GetAccessorMap() const { return am; } protected: void UpdateCtrl(); Ctrl* ctrl; - AccessorMap am; + One oam; }; class PropEdit : public WithCloserKeys diff --git a/bazaar/Property/Property.h b/bazaar/Property/Property.h index c61d9cd5a..863d11864 100644 --- a/bazaar/Property/Property.h +++ b/bazaar/Property/Property.h @@ -221,7 +221,7 @@ void PropKeeper::Init() \ class GetAccessorMapI { public: - virtual const AccessorMap& GetAccessorMap() const = 0; + virtual AccessorMap& GetAccessorMap() = 0; }; template @@ -229,8 +229,7 @@ class WithAccessorMap : public C { public: WithAccessorMap() { PropKeeper::SetupAccessorMap((T&)(*this), am); } - virtual const AccessorMap& GetAccessorMap() const { return am; } -protected: + virtual AccessorMap& GetAccessorMap() { return am; } AccessorMap am; }; diff --git a/bazaar/ValueAccessorEdit/ValueAccessorEdit.cpp b/bazaar/ValueAccessorEdit/ValueAccessorEdit.cpp index d713207c2..e67d502b6 100644 --- a/bazaar/ValueAccessorEdit/ValueAccessorEdit.cpp +++ b/bazaar/ValueAccessorEdit/ValueAccessorEdit.cpp @@ -112,7 +112,7 @@ void AccessorMapCtrl::UpdateMap() if(ValueAccessorInstance* vi = dynamic_cast(&a)) { //special ValueAccessors, need their own editor - Value q = vi->TypeOf(); //defines which editor + String q = vi->TypeOf(); //defines which editor Instancer::MapType& map = Instancer::Map(); int ix = map.Find(q);