class GUI_Object_Builder { // ... }; class Image_Builder { public: Image_Builder(); virtual void Handle_Field_Change(const std::string& data); private: image_ptr image; }; class Button_Builder {}; // etc. Image_Builder::Do_Registration() { GEM.Register(this, Trigger("property_grid", INPUT / PROPERTY_FIELD_CHANGED)); } Image_Builder::Notify(const GUI_Event& event_) { if(Has_Focus() && event_.Name() == "property_grid" && event_.Type() == INPUT / PROPERTY_FIELD_CHANGED) { GUI_Object_Builder::Handle_Field_Change(event_.Data()); Handle_Field_Change(event_); } } Image_Builder::Handle_Field_Change(const std::string& data) { std::string field = Get_Field(data); std::string value = Get_Value(data); if(field == "size") { image->Set_Size(from_string<PointI>(data)); } else if(field == "position") { image->Set_Position(from_string<PointI>(data)); } // etc. }
Is there a nicer way to do this? It's gonna involve a lot of work, but I'm guessing any alternative will...
Cheers.