30 #include <libxml/parser.h>
37 #define square(x) ((x)*(x))
117 std::set <TypeId> PossibleChildren;
118 std::set <TypeId> PossibleParents;
119 std::set <TypeId> RequiredChildren;
120 std::set <TypeId> RequiredParents;
121 std::string CreationLabel;
122 std::list <BuildMenuCb> MenuCbs;
181 void SetId (gchar
const *Id);
185 char const *
GetId ()
const {
return m_Id;}
288 virtual xmlNodePtr
Save (xmlDocPtr xml)
const;
305 virtual bool Load (xmlNodePtr node);
314 virtual bool GetCoords (
double *x,
double *y,
double *z = NULL)
const;
323 virtual void Move (
double x,
double y,
double z = 0.);
343 bool SaveChildren (xmlDocPtr xml, xmlNodePtr node)
const;
349 void SaveId (xmlNodePtr node)
const;
360 xmlNodePtr
GetNodeByProp (xmlNodePtr node,
char const *Property,
char const *Id);
370 xmlNodePtr
GetNextNodeByProp (xmlNodePtr node,
char const *Property,
char const *Id);
416 virtual bool Build (std::set < Object * >
const &Children)
throw (std::invalid_argument);
466 void Lock (
bool state =
true);
531 virtual bool SetProperty (
unsigned property,
char const *value);
539 virtual std::string
GetProperty (
unsigned property)
const;
555 virtual void Clear ();
560 virtual std::string
Name ();
669 static void AddRule (
const std::string& type1,
RuleId rule,
const std::string& type2);
689 static const std::set<TypeId>&
GetRules (
const std::string& type,
RuleId rule);
732 Object* RealGetDescendant (
const gchar* Id)
const;
738 std::map<std::string, Object*> m_Children;
739 std::set<Object*> m_Links;
740 TypeDesc
const *m_TypeDesc;
756 #endif //GCU_OBJECT_H
bool(* BuildMenuCb)(Object *target, UIManager *uim, Object *object, double x, double y)
virtual xmlNodePtr Save(xmlDocPtr xml) const
void EmitSignal(SignalId Signal)
Object * GetReaction() const
static TypeId GetTypeId(const std::string &Name)
Document * GetDocument() const
#define GCU_RO_PROP(type, member)
xmlNodePtr GetNextNodeByName(xmlNodePtr node, char const *Name)
virtual void AddChild(Object *object)
xmlNodePtr GetNodeByName(xmlNodePtr node, char const *Name)
Object * GetParentOfType(TypeId Id) const
virtual bool BuildContextualMenu(UIManager *uim, Object *object, double x, double y)
Object * GetFirstChild(std::map< std::string, Object * >::iterator &i)
static void SetCreationLabel(TypeId Id, std::string Label)
void SaveId(xmlNodePtr node) const
static const std::set< TypeId > & GetRules(TypeId type, RuleId rule)
virtual bool Build(std::set< Object * > const &Children)
xmlNodePtr GetNodeByProp(xmlNodePtr node, char const *Property, char const *Id)
void Lock(bool state=true)
virtual Dialog * BuildPropertiesDialog()
virtual void OnUnlink(Object *object)
Object * GetGroup() const
xmlNodePtr GetNextNodeByProp(xmlNodePtr node, char const *Property, char const *Id)
virtual void NotifyEmpty()
virtual double GetYAlign()
static const std::string & GetCreationLabel(TypeId Id)
Object(TypeId Id=OtherType)
base class for a user interface manager
Object * GetMolecule() const
void ShowPropertiesDialog()
void Link(Object *object)
static TypeId AddType(std::string TypeName, Object *(*CreateFunc)(), TypeId id=OtherType)
void SetParent(Object *Parent)
virtual bool Load(xmlNodePtr node)
virtual void Transform2D(Matrix2D &m, double x, double y)
char const * GetId() const
static void AddAlias(TypeId id, std::string TypeName)
void SetDirty(bool dirty=true)
virtual bool SetProperty(unsigned property, char const *value)
virtual Object * GetAtomAt(double x, double y, double z=0.)
Object * GetDescendant(const char *Id) const
virtual void Move(double x, double y, double z=0.)
Object * GetParent() const
static SignalId CreateNewSignalId()
Object * GetFirstLink(std::set< Object * >::iterator &i)
static Object * CreateObject(const std::string &TypeName, Object *parent=NULL)
static void AddMenuCallback(TypeId Id, BuildMenuCb cb)
void Unlink(Object *object)
bool SaveChildren(xmlDocPtr xml, xmlNodePtr node) const
virtual bool OnSignal(SignalId Signal, Object *Child)
virtual std::string GetProperty(unsigned property) const
static std::string GetTypeName(TypeId Id)
Object * GetNextLink(std::set< Object * >::iterator &i)
virtual std::string Name()
virtual bool CanSelect() const
void SetId(gchar const *Id)
unsigned GetChildrenNumber() const
Object * GetNextChild(std::map< std::string, Object * >::iterator &i)
Object * GetChild(const gchar *Id) const
static void AddRule(TypeId type1, RuleId rule, TypeId type2)
virtual bool GetCoords(double *x, double *y, double *z=NULL) const
void GetPossibleAncestorTypes(std::set< TypeId > &types) const
virtual char const * HasPropertiesDialog() const
Application * GetApplication() const