Destribes minimum required functionality of single state property to be correctly processed in Form Builder.

You can find more information in comments below.

class IProperty
    struct ForwardDeclaration
        String Declaration;
        String HeaderFile;
        String Namespace;
    String m_sName;
    String m_sPropertyHandlerName;
    IClass *m_pParent;
    IPropertyList *m_pPropertyList;
    bool m_bAffectItems;
    String const &Name; // Name
    String const &PropertyHandlerName; // Name of property handler which can edit this property
    IClass* const &Parent; // Owner of the property
    IPropertyList* const &PropertyList; // Property list containing the property
    bool const &AffectItems; // Whether property change may affect control list items. By default false. If true, the Form Builder will perform list items(tree) update after property changes. Used only for components and controls(not for IListItem)

    virtual String getPreview() = 0; // Return preview of property value
    virtual String getPreview(const String &state) = 0; // Return preview by state
    virtual bool isChanged() = 0; // Return whether current value differs from one which was when property was created
    virtual bool isSkip() = 0; // Return whether property should be skipped when saving in Form Builder
    virtual int getHeaderFileCount() = 0; // Return header file count
    virtual String getHeaderFile(const int index) = 0; // Return header file by index. Relative to the package directory(for example, if entity will be in "/Packages/Vendor/Components/Name/Name.h", this should return "Vendor/Components/Name.h")
    virtual int getForwardDeclarationCount() = 0;
    virtual ForwardDeclaration getForwardDeclaration(const int index) = 0;

    virtual void setParent(IClass *parent) = 0; // Set owner. Do not set null or object which is incompatible with prev parent. No checks are performed. Currently used only in saving list items to check if list item was changed(differs from same list item just created)
    virtual IProperty *setAffectItems(const bool value) = 0; // Set whether changing the property affects on owner list items
    virtual IProperty *setChanged(const bool value) = 0; // Mark as changed/unchanged

    virtual void Release() = 0; // Destroy instance
    virtual bool Copy(IProperty *dest) = 0; // Copy to destination. Can copy only if dest has same type(could be casted to same type). Copy only value part
    virtual void Save(Variant &dest) = 0; // Save to Variant
    virtual void Load(const Variant &src) = 0; // Load from Variant
    Should output property as c++ code(like setColor({255, 0, 0, 55});)
    @param f File stream
    @param shift Just a spaces for good code alignment. Add it to output
    @param control Control/Component name
    virtual void Export(std::wofstream &f, const String &shift, const String &control) = 0;
Namespace: nitisa
Include: Nitisa/Package/Interfaces/IProperty.h