bazaar: Property: const not practical, PropEdit local AccessorMap issue

git-svn-id: svn://ultimatepp.org/upp/trunk@3900 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
kohait 2011-09-21 21:19:54 +00:00
parent 1de1a82e41
commit f9476b32bb
4 changed files with 17 additions and 11 deletions

View file

@ -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<GetAccessorMapI*>(ctrl);
if(ami) am <<= ami->GetAccessorMap();
else if(!Props<Ctrl>::SetupAccessorMap(*ctrl, am)) return;
if(ami)
am = &ami->GetAccessorMap();
else
{
oam.Create();
if(!Props<Ctrl>::SetupAccessorMap(*ctrl, *oam))
return;
am = ~oam;
}
SetMap(&am);
ASSERT(am);
SetMap(am);
for(int i = 0; i < avae.GetCount(); i++)
{

View file

@ -19,13 +19,12 @@ public:
virtual void SetData(const Value& v) { SetCtrl(RawValue<Ctrl*>::Extract(v)); }
void OnAction();
const AccessorMap& GetAccessorMap() const { return am; }
protected:
void UpdateCtrl();
Ctrl* ctrl;
AccessorMap am;
One<AccessorMap> oam;
};
class PropEdit : public WithCloserKeys<PopUpC>

View file

@ -221,7 +221,7 @@ void PropKeeper<KLASS>::Init() \
class GetAccessorMapI
{
public:
virtual const AccessorMap& GetAccessorMap() const = 0;
virtual AccessorMap& GetAccessorMap() = 0;
};
template<class T, class C = GetAccessorMapI>
@ -229,8 +229,7 @@ class WithAccessorMap : public C
{
public:
WithAccessorMap() { PropKeeper<T>::SetupAccessorMap((T&)(*this), am); }
virtual const AccessorMap& GetAccessorMap() const { return am; }
protected:
virtual AccessorMap& GetAccessorMap() { return am; }
AccessorMap am;
};

View file

@ -112,7 +112,7 @@ void AccessorMapCtrl::UpdateMap()
if(ValueAccessorInstance* vi = dynamic_cast<ValueAccessorInstance*>(&a))
{
//special ValueAccessors, need their own editor
Value q = vi->TypeOf(); //defines which editor
String q = vi->TypeOf(); //defines which editor
Instancer<ValueAccessorEdit>::MapType& map = Instancer<ValueAccessorEdit>::Map();
int ix = map.Find(q);