Guest User

Untitled

a guest
May 26th, 2020
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.27 KB | None | 0 0
  1. //---------------------------------------------------------------------------
  2. enum ETightness
  3. {
  4.     ET_VERY,
  5.     ET_MODERATE,
  6.     ET_ALMOST,
  7.     ET_LOOSE,
  8.     ET_FREE
  9. };
  10. KRTTI_ENUM_BEGIN(ETightness);
  11.     KRTTI_ENUM_MEMBER(ET_VERY, "Very tight object");
  12.     KRTTI_ENUM_MEMBER(ET_MODERATE, "Moderately tight object");
  13.     KRTTI_ENUM_MEMBER(ET_ALMOST, "Object that is almost tight");
  14.     KRTTI_ENUM_MEMBER(ET_LOOSE, "Loose object");
  15.     KRTTI_ENUM_MEMBER(ET_FREE, "Totally free object");
  16. KRTTI_ENUM_END();
  17. KRTTI_ENUM_IMPLEMENTATION(ETightness);
  18. //---------------------------------------------------------------------------
  19. class KNode : public KObject
  20. {
  21.     KRTTI_CLASS_HEADER(KNode);
  22. public:
  23.     virtual ~KNode()
  24.     {
  25.         for (KUInt64 i=0; i < m_children.GetSize(); ++i)
  26.         {
  27.             delete m_children[i];
  28.         }
  29.     }
  30.  
  31.     void SetName(const KString& name)
  32.     {
  33.         m_name = name;
  34.     }
  35.  
  36.     void AddChild(KNode* child)
  37.     {
  38.         child->m_parent = this;
  39.         m_children.Add(child);
  40.     }
  41.  
  42.     void SetColor(KUInt64 c) { m_color = c; }
  43.  
  44.     const KString& GetName() const { return m_name; }
  45.     const KString& GetDescription() const { return m_description; }
  46.     virtual KObject* GetParent() const { return m_parent; }
  47.     const KDynArray<KNode*>& GetChildren() const { return m_children; }
  48.     KInt64 GetColor() const { return m_color; }
  49. protected:                                
  50.     KNode() : m_parent(NULL), m_color(42), m_enabled(false), m_tightness(ET_MODERATE), m_relA(NULL), m_relB(NULL) {}
  51.     virtual KBool OnCanModify() const
  52.     {
  53.         return !Form1->cbReadOnly->Checked;
  54.     }
  55. private:
  56.     ETightness          m_tightness;
  57.     KDynArray<KNode*>   m_children;
  58.     KString             m_name;
  59.     KString             m_description;
  60.     KInt64              m_color;
  61.     KBool               m_enabled;
  62.     KNode*              m_parent;
  63.     KNode*              m_relA;
  64.     KNode*              m_relB;
  65. };
  66.  
  67. KRTTI_CLASS_DECLARATION_BEGIN(KNode, KObject);
  68.     KRTTI_EDITABLE_FIELD(KString, name, , "Object name");
  69.     KRTTI_FIELD(KDynArray<KNode*>, children);
  70.     KRTTI_EDITABLE_FIELD(KString, description, Appearance, "Object description");
  71.         KRTTI_FIELD_OPTION(KCFO_ADVANCED_EDITOR);
  72.     KRTTI_EDITABLE_FIELD(KInt64, color, Appearance, "Color to use");
  73.         KRTTI_FIELD_OPTION(KCFO_TRANSIENT);
  74.     KRTTI_EDITABLE_FIELD(KBool, enabled, Appearance, "Enable the object");
  75.     KRTTI_FIELD(ETightness, tightness);
  76.     KRTTI_FIELD(KNode*, parent);
  77.     KRTTI_EDITABLE_FIELD(KNode*, relA, Relations, "");
  78.     KRTTI_EDITABLE_FIELD(KNode*, relB, Relations, "");
  79. KRTTI_CLASS_DECLARATION_END();
  80. KRTTI_CLASS_IMPLEMENTATION(KNode);
  81. //---------------------------------------------------------------------------
  82. ...
  83.     KMemoryStream stream;
  84.     KNode* root = KNode::New();
  85.     ...
  86.     stream.WriteObject(root);
  87. ...
  88.     KObjectPanel* op = new KObjectPanel(plParent);
  89.     stream.SeekToStart();
  90.     if (stream.ReadObject((KObject**)&root))
  91.     {
  92.         op->SetObject(root);
  93.     }
  94. ...
  95.     const KClassField* fld = node->GetClass()->FindField(KName("tightness"));
  96.     KFieldEditor* ed = fld->GetEditor();
  97.     KFieldEditUI* ui = ed->CreateEditUI(node, *fld);
  98.     ui->LoadDataFromObject();
  99.     SetEditControl(ui->GetControl());
Add Comment
Please, Sign In to add comment