data->IncRef();
variant.SetData(data);
variant.SetName(it->first);
- it++;
+ ++it;
return true;
}
Helper class for managing choices of wxPropertyGrid properties.
Each entry can have label, value, bitmap, text colour, and background
colour.
+
+ wxPGChoices uses reference counting, similar to other wxWidgets classes.
+ This means that assignment operator and copy constructor only copy the
+ reference and not the actual data. Use Copy() member function to create a
+ real copy.
@remarks If you do not specify value for entry, index is used.
Init();
}
- /** Copy constructor. */
+ /**
+ Copy constructor, uses reference counting. To create a real copy,
+ use Copy() member function instead.
+ */
wxPGChoices( const wxPGChoices& a )
{
if ( a.m_data != wxPGChoicesEmptyData )
wxPGChoiceEntry& AddAsSorted( const wxString& label,
int value = wxPG_INVALID_VALUE );
+ /**
+ Assigns choices data, using reference counting. To create a real copy,
+ use Copy() member function instead.
+ */
void Assign( const wxPGChoices& a )
{
AssignData(a.m_data);
void AssignData( wxPGChoicesData* data );
/** Delete all choices. */
- void Clear()
+ void Clear();
+
+ /**
+ Returns a real copy of the choices.
+ */
+ wxPGChoices Copy() const
{
- if ( m_data != wxPGChoicesEmptyData )
- m_data->Clear();
+ wxPGChoices dst;
+ dst.EnsureData();
+ dst.m_data->CopyDataFrom(m_data);
+ return dst;
}
void EnsureData()
}
// Creates exclusive copy of current choices
- void SetExclusive()
- {
- if ( m_data->m_refCount != 1 )
- {
- wxPGChoicesData* data = new wxPGChoicesData();
- data->CopyDataFrom(m_data);
- Free();
- m_data = data;
- }
- }
+ void AllocExclusive();
// Returns data, increases refcount.
wxPGChoicesData* GetData()
#ifndef SWIG
void operator= (const wxPGChoices& a)
{
- AssignData(a.m_data);
+ if (this != &a)
+ AssignData(a.m_data);
}
wxPGChoiceEntry& operator[](unsigned int i)
*/
virtual wxPGEditorDialogAdapter* GetEditorDialog() const;
+ /**
+ Called whenever validation has failed with given pending value.
+
+ @remarks If you implement this in your custom property class, please
+ remember to call the baser implementation as well, since they
+ may use it to revert property into pre-change state.
+ */
+ virtual void OnValidationFailure( wxVariant& pendingValue );
+
/** Append a new choice to property's list of choices.
*/
int AddChoice( const wxString& label, int value = wxPG_INVALID_VALUE )
return false;
}
+ /**
+ Deletes children of the property.
+ */
+ void DeleteChildren();
+
/**
Removes entry from property's wxPGChoices and editor control (if it is
active).
*/
wxDEPRECATED( wxString GetValueString( int argFlags = 0 ) const );
- void UpdateControl( wxWindow* primary );
-
/**
Returns wxPGCell of given column.
*/
*/
void SetValueImage( wxBitmap& bmp );
- /** If property has choices and they are not yet exclusive, new such copy
- of them will be created.
- */
- void SetChoicesExclusive()
- {
- m_choices.SetExclusive();
- }
-
/** Sets selected choice and changes property value.
Tries to retain value type, although currently if it is not string,
/** Returns index of given child property. */
int Index( const wxPGProperty* p ) const;
- /** Deletes all sub-properties. */
- void Empty();
-
// Puts correct indexes to children
void FixIndicesOfChildren( unsigned int starthere = 0 );
void DoSetName(const wxString& str) { m_name = str; }
+ /** Deletes all sub-properties. */
+ void Empty();
+
void InitAfterAdded( wxPropertyGridPageState* pageState,
wxPropertyGrid* propgrid );
public:
/** Constructor. */
- wxPGRootProperty();
+ wxPGRootProperty( const wxString& name = wxS("<Root>") );
virtual ~wxPGRootProperty();
virtual bool StringToValue( wxVariant&, const wxString&, int ) const
int GetTextExtent( const wxWindow* wnd, const wxFont& font ) const;
-protected:
virtual wxString ValueToString( wxVariant& value, int argFlags ) const;
+protected:
void SetTextColIndex( unsigned int colInd )
{ m_capFgColIndex = (wxByte) colInd; }
unsigned int GetTextColIndex() const