Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //---------------------------------------------------------------------------
- enum ETightness
- {
- ET_VERY,
- ET_MODERATE,
- ET_ALMOST,
- ET_LOOSE,
- ET_FREE
- };
- KRTTI_ENUM_BEGIN(ETightness);
- KRTTI_ENUM_MEMBER(ET_VERY, "Very tight object");
- KRTTI_ENUM_MEMBER(ET_MODERATE, "Moderately tight object");
- KRTTI_ENUM_MEMBER(ET_ALMOST, "Object that is almost tight");
- KRTTI_ENUM_MEMBER(ET_LOOSE, "Loose object");
- KRTTI_ENUM_MEMBER(ET_FREE, "Totally free object");
- KRTTI_ENUM_END();
- KRTTI_ENUM_IMPLEMENTATION(ETightness);
- //---------------------------------------------------------------------------
- class KNode : public KObject
- {
- KRTTI_CLASS_HEADER(KNode);
- public:
- virtual ~KNode()
- {
- for (KUInt64 i=0; i < m_children.GetSize(); ++i)
- {
- delete m_children[i];
- }
- }
- void SetName(const KString& name)
- {
- m_name = name;
- }
- void AddChild(KNode* child)
- {
- child->m_parent = this;
- m_children.Add(child);
- }
- void SetColor(KUInt64 c) { m_color = c; }
- const KString& GetName() const { return m_name; }
- const KString& GetDescription() const { return m_description; }
- virtual KObject* GetParent() const { return m_parent; }
- const KDynArray<KNode*>& GetChildren() const { return m_children; }
- KInt64 GetColor() const { return m_color; }
- protected:
- KNode() : m_parent(NULL), m_color(42), m_enabled(false), m_tightness(ET_MODERATE), m_relA(NULL), m_relB(NULL) {}
- virtual KBool OnCanModify() const
- {
- return !Form1->cbReadOnly->Checked;
- }
- private:
- ETightness m_tightness;
- KDynArray<KNode*> m_children;
- KString m_name;
- KString m_description;
- KInt64 m_color;
- KBool m_enabled;
- KNode* m_parent;
- KNode* m_relA;
- KNode* m_relB;
- };
- KRTTI_CLASS_DECLARATION_BEGIN(KNode, KObject);
- KRTTI_EDITABLE_FIELD(KString, name, , "Object name");
- KRTTI_FIELD(KDynArray<KNode*>, children);
- KRTTI_EDITABLE_FIELD(KString, description, Appearance, "Object description");
- KRTTI_FIELD_OPTION(KCFO_ADVANCED_EDITOR);
- KRTTI_EDITABLE_FIELD(KInt64, color, Appearance, "Color to use");
- KRTTI_FIELD_OPTION(KCFO_TRANSIENT);
- KRTTI_EDITABLE_FIELD(KBool, enabled, Appearance, "Enable the object");
- KRTTI_FIELD(ETightness, tightness);
- KRTTI_FIELD(KNode*, parent);
- KRTTI_EDITABLE_FIELD(KNode*, relA, Relations, "");
- KRTTI_EDITABLE_FIELD(KNode*, relB, Relations, "");
- KRTTI_CLASS_DECLARATION_END();
- KRTTI_CLASS_IMPLEMENTATION(KNode);
- //---------------------------------------------------------------------------
- ...
- KMemoryStream stream;
- KNode* root = KNode::New();
- ...
- stream.WriteObject(root);
- ...
- KObjectPanel* op = new KObjectPanel(plParent);
- stream.SeekToStart();
- if (stream.ReadObject((KObject**)&root))
- {
- op->SetObject(root);
- }
- ...
- const KClassField* fld = node->GetClass()->FindField(KName("tightness"));
- KFieldEditor* ed = fld->GetEditor();
- KFieldEditUI* ui = ed->CreateEditUI(node, *fld);
- ui->LoadDataFromObject();
- SetEditControl(ui->GetControl());
Add Comment
Please, Sign In to add comment