]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/propgrid/property.h
added a test to check if wxHtmlWindow::SelectionToText() inserts \n characters correctly
[wxWidgets.git] / include / wx / propgrid / property.h
index 021d5a90a8b28e323a36a9b6a714f9039866d5a4..ff2d2d53777b7517a2eb50f3d878de0842b6ab01 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2008-08-23
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2008-08-23
-// RCS-ID:      $Id:
+// RCS-ID:      $Id$
 // Copyright:   (c) Jaakko Salli
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) Jaakko Salli
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
@@ -215,7 +215,7 @@ public:
     ~wxPGAttributeStorage();
 
     void Set( const wxString& name, const wxVariant& value );
     ~wxPGAttributeStorage();
 
     void Set( const wxString& name, const wxVariant& value );
-    size_t GetCount() const { return m_map.size(); }
+    unsigned int GetCount() const { return (unsigned int) m_map.size(); }
     wxVariant FindValue( const wxString& name ) const
     {
         wxPGHashMapS2P::const_iterator it = m_map.find(name);
     wxVariant FindValue( const wxString& name ) const
     {
         wxPGHashMapS2P::const_iterator it = m_map.find(name);
@@ -619,7 +619,7 @@ public:
         if ( index == -1 )
         {
             it = m_items.end();
         if ( index == -1 )
         {
             it = m_items.end();
-            index = m_items.size();
+            index = (int) m_items.size();
         }
         else
         {
         }
         else
         {
@@ -636,7 +636,10 @@ public:
     // Delete all entries
     void Clear();
 
     // Delete all entries
     void Clear();
 
-    size_t GetCount() const { return m_items.size(); }
+    unsigned int GetCount() const
+    {
+        return (unsigned int) m_items.size();
+    }
 
     wxPGChoiceEntry* Item( unsigned int i ) const
     {
 
     wxPGChoiceEntry* Item( unsigned int i ) const
     {
@@ -781,12 +784,12 @@ public:
     /** Gets a unsigned number identifying this list. */
     wxPGChoicesId GetId() const { return (wxPGChoicesId) m_data; };
 
     /** Gets a unsigned number identifying this list. */
     wxPGChoicesId GetId() const { return (wxPGChoicesId) m_data; };
 
-    const wxString& GetLabel( size_t ind ) const
+    const wxString& GetLabel( unsigned int ind ) const
     {
         return Item(ind).GetText();
     }
 
     {
         return Item(ind).GetText();
     }
 
-    size_t GetCount () const
+    unsigned int GetCount () const
     {
         if ( !m_data )
             return 0;
     {
         if ( !m_data )
             return 0;
@@ -794,7 +797,7 @@ public:
         return m_data->GetCount();
     }
 
         return m_data->GetCount();
     }
 
-    int GetValue( size_t ind ) const { return Item(ind).GetValue(); }
+    int GetValue( unsigned int ind ) const { return Item(ind).GetValue(); }
 
     /** Returns array of values matching the given strings. Unmatching strings
         result in wxPG_INVALID_VALUE entry in array.
 
     /** Returns array of values matching the given strings. Unmatching strings
         result in wxPG_INVALID_VALUE entry in array.
@@ -971,7 +974,11 @@ public:
             variant << value;
             SetValue(variant);
 
             variant << value;
             SetValue(variant);
 
-            // If has private child properties then create them here, e.g.:
+            // If has private child properties then create them here. Also
+            // set flag that indicates presence of private children. E.g.:
+            //
+            //     SetParentalType(wxPG_PROP_AGGREGATE);
+            //
             //     AddChild( new wxStringProperty( "Subprop 1",
             //                                     wxPG_LABEL,
             //                                     value.GetSubProp1() ) );
             //     AddChild( new wxStringProperty( "Subprop 1",
             //                                     wxPG_LABEL,
             //                                     value.GetSubProp1() ) );
@@ -1016,9 +1023,15 @@ public:
                                 wxPGValidationInfo& validationInfo ) const;
 
     /**
                                 wxPGValidationInfo& validationInfo ) const;
 
     /**
-        Converts 'text' into proper value 'variant'.
-        Returns true if new (different than m_value) value could be interpreted
-        from the text.
+        Converts text into wxVariant value appropriate for this property.
+
+        @param variant
+            On function entry this is the old value (should not be wxNullVariant
+            in normal cases). Translated value must be assigned back to it.
+
+        @param text
+            Text to be translated into variant.
+
         @param argFlags
             If wxPG_FULL_VALUE is set, returns complete, storable value instead
             of displayable one (they may be different).
         @param argFlags
             If wxPG_FULL_VALUE is set, returns complete, storable value instead
             of displayable one (they may be different).
@@ -1026,25 +1039,36 @@ public:
             composite property string value (as generated by GetValueAsString()
             called with this same flag).
 
             composite property string value (as generated by GetValueAsString()
             called with this same flag).
 
-        @remarks
-        Default implementation converts semicolon delimited tokens into child
-        values. Only works for properties with children.
+        @return Returns @true if resulting wxVariant value was different.
+
+        @remarks Default implementation converts semicolon delimited tokens into
+                child values. Only works for properties with children.
+
+                You might want to take into account that m_value is Null variant
+                if property value is unspecified (which is usually only case if
+                you explicitly enabled that sort behavior).
     */
     virtual bool StringToValue( wxVariant& variant,
                                 const wxString& text,
                                 int argFlags = 0 ) const;
 
     /**
     */
     virtual bool StringToValue( wxVariant& variant,
                                 const wxString& text,
                                 int argFlags = 0 ) const;
 
     /**
-        Converts 'number' (including choice selection) into proper value
-        'variant'.
+        Converts integer (possibly a choice selection) into wxVariant value
+        appropriate for this property.
+
+        @param variant
+            On function entry this is the old value (should not be wxNullVariant
+            in normal cases). Translated value must be assigned back to it.
 
 
-        Returns true if new (different than m_value) value could be interpreted
-        from the integer.
+        @param number
+            Integer to be translated into variant.
 
         @param argFlags
             If wxPG_FULL_VALUE is set, returns complete, storable value instead
             of displayable one.
 
 
         @param argFlags
             If wxPG_FULL_VALUE is set, returns complete, storable value instead
             of displayable one.
 
+        @return Returns @true if resulting wxVariant value was different.
+
         @remarks
         - If property is not supposed to use choice or spinctrl or other editor
           with int-based value, it is not necessary to implement this method.
         @remarks
         - If property is not supposed to use choice or spinctrl or other editor
           with int-based value, it is not necessary to implement this method.
@@ -1052,6 +1076,9 @@ public:
         - If property uses choice control, and displays a dialog on some choice
           items, then it is preferred to display that dialog in IntToValue
           instead of OnEvent.
         - If property uses choice control, and displays a dialog on some choice
           items, then it is preferred to display that dialog in IntToValue
           instead of OnEvent.
+        - You might want to take into account that m_value is Null variant if
+          property value is unspecified (which is usually only case if you
+          explicitly enabled that sort behavior).
     */
     virtual bool IntToValue( wxVariant& value,
                              int number,
     */
     virtual bool IntToValue( wxVariant& value,
                              int number,
@@ -1772,6 +1799,27 @@ public:
 
     inline void SetName( const wxString& newName );
 
 
     inline void SetName( const wxString& newName );
 
+    /**
+        Changes what sort of parent this property is for its children.
+
+        @param flag
+            Use one of the following values: wxPG_PROP_MISC_PARENT (for generic
+            parents), wxPG_PROP_CATEGORY (for categories), or
+            wxPG_PROP_AGGREGATE (for derived property classes with private
+            children).
+
+        @remarks You only need to call this if you use AddChild() to add
+                 child properties. Adding properties with
+                 wxPropertyGridInterface::Insert() or
+                 wxPropertyGridInterface::AppendIn() will automatically set
+                 property to use wxPG_PROP_MISC_PARENT style.
+    */
+    void SetParentalType( int flag )
+    {
+        m_flags &= ~(wxPG_PROP_PROPERTY|wxPG_PROP_PARENTAL_FLAGS);
+        m_flags |= flag;
+    }
+
     void SetValueToUnspecified()
     {
         wxVariant val;  // Create NULL variant
     void SetValueToUnspecified()
     {
         wxVariant val;  // Create NULL variant
@@ -1794,23 +1842,6 @@ public:
     }
 #endif // #if wxUSE_VALIDATORS
 
     }
 #endif // #if wxUSE_VALIDATORS
 
-    /** Updates property value in case there were last minute
-        changes. If value was unspecified, it will be set to default.
-        Use only for properties that have TextCtrl-based editor.
-        @remarks
-        If you have code similar to
-        @code
-            // Update the value in case of last minute changes
-            if ( primary && propgrid->IsEditorsValueModified() )
-                 GetEditorClass()->CopyValueFromControl( this, primary );
-        @endcode
-        in wxPGProperty::OnEvent wxEVT_COMMAND_BUTTON_CLICKED handler,
-        then replace it with call to this method.
-        @return
-        True if value changed.
-    */
-    bool PrepareValueForDialogEditing( wxPropertyGrid* propgrid );
-
 #ifndef SWIG
     /** Returns client data (void*) of a property.
     */
 #ifndef SWIG
     /** Returns client data (void*) of a property.
     */
@@ -1877,7 +1908,23 @@ public:
     */
     void AdaptListToValue( wxVariant& list, wxVariant* value ) const;
 
     */
     void AdaptListToValue( wxVariant& list, wxVariant* value ) const;
 
-    /** This is used by properties that have fixed sub-properties. */
+    /**
+        Adds a child property. If you use this instead of
+        wxPropertyGridInterface::Insert() or
+        wxPropertyGridInterface::AppendIn(), then you must set up
+        property's parental type before making the call. To do this,
+        call property's SetParentalType() function with either
+        wxPG_PROP_MISC_PARENT (normal, public children) or with
+        wxPG_PROP_AGGREGATE (private children for subclassed property).
+        For instance:
+
+        @code
+            wxPGProperty* prop = new wxStringProperty(wxS("Property"));
+            prop->SetParentalType(wxPG_PROP_MISC_PARENT);
+            wxPGProperty* prop2 = new wxStringProperty(wxS("Property2"));
+            prop->AddChild(prop2);
+        @endcode
+    */
     void AddChild( wxPGProperty* prop );
 
     /** Returns height of children, recursively, and
     void AddChild( wxPGProperty* prop );
 
     /** Returns height of children, recursively, and
@@ -1888,10 +1935,13 @@ public:
     int GetChildrenHeight( int lh, int iMax = -1 ) const;
 
     /** Returns number of child properties */
     int GetChildrenHeight( int lh, int iMax = -1 ) const;
 
     /** Returns number of child properties */
-    unsigned int GetChildCount() const { return m_children.size(); }
+    unsigned int GetChildCount() const
+    {
+        return (unsigned int) m_children.size();
+    }
 
     /** Returns sub-property at index i. */
 
     /** Returns sub-property at index i. */
-    wxPGProperty* Item( size_t i ) const
+    wxPGProperty* Item( unsigned int i ) const
         { return m_children[i]; }
 
     /** Returns last sub-property.
         { return m_children[i]; }
 
     /** Returns last sub-property.
@@ -1905,7 +1955,7 @@ public:
     void Empty();
 
     // Puts correct indexes to children
     void Empty();
 
     // Puts correct indexes to children
-    void FixIndexesOfChildren( size_t starthere = 0 );
+    void FixIndicesOfChildren( unsigned int starthere = 0 );
 
 #ifndef SWIG
     // Returns wxPropertyGridPageState in which this property resides.
 
 #ifndef SWIG
     // Returns wxPropertyGridPageState in which this property resides.
@@ -1981,14 +2031,11 @@ protected:
 
     void DoSetName(const wxString& str) { m_name = str; }
 
 
     void DoSetName(const wxString& str) { m_name = str; }
 
-    // Call for after sub-properties added with AddChild
-    void PrepareSubProperties();
+    void InitAfterAdded( wxPropertyGridPageState* pageState,
+                         wxPropertyGrid* propgrid );
 
 
-    void SetParentalType( int flag )
-    {
-        m_flags &= ~(wxPG_PROP_PROPERTY|wxPG_PROP_PARENTAL_FLAGS);
-        m_flags |= flag;
-    }
+    // Removes child property with given pointer. Does not delete it.
+    void RemoveChild( wxPGProperty* p );
 
     void SetParentState( wxPropertyGridPageState* pstate )
         { m_parentState = pstate; }
 
     void SetParentState( wxPropertyGridPageState* pstate )
         { m_parentState = pstate; }