Updated documentation of some wxPropertyGrid-related classes.

Updated wxPropertyGridPageState, wxPropertyGridHitTestResult, wxPropertyGridIterator,  documentation.
This commit is contained in:
Artur Wieczorek
2016-07-02 23:20:11 +02:00
parent 4d91d6d2ff
commit 7968f37883
2 changed files with 524 additions and 279 deletions

View File

@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////
// Name: property.h
// Name: propgridpagestate.h
// Purpose: interface of wxPGProperty
// Author: wxWidgets team
// Licence: wxWindows licence
@@ -12,29 +12,40 @@
A return value from wxPropertyGrid::HitTest(),
contains all you need to know about an arbitrary location on the grid.
*/
struct wxPropertyGridHitTestResult
class wxPropertyGridHitTestResult
{
friend class wxPropertyGridPageState;
public:
wxPropertyGridHitTestResult();
wxPGProperty* GetProperty() const { return property; }
~wxPropertyGridHitTestResult();
/** Column. -1 for margin. */
int column;
/**
Returns column hit. -1 for margin.
*/
int GetColumn() const;
/** Index of splitter hit, -1 for none. */
int splitter;
/**
Returns property hit. NULL if empty space below
properties was hit instead.
*/
wxPGProperty* GetProperty() const;
/** If splitter hit, offset to that */
int splitterHitOffset;
/**
Returns index of splitter hit, -1 for none.
*/
int GetSplitter() const;
private:
/** Property. NULL if empty space below properties was hit */
wxPGProperty* property;
/**
If splitter hit, then this member function
returns offset to the exact splitter position.
*/
int GetSplitterHitOffset() const;
};
// -----------------------------------------------------------------------
#define wxPG_IT_CHILDREN(A) (A<<16)
#define wxPG_IT_CHILDREN(A) ((A)<<16)
/** @section propgrid_iterator_flags wxPropertyGridIterator Flags
@{
@@ -45,53 +56,106 @@ private:
enum wxPG_ITERATOR_FLAGS
{
/** Iterate through 'normal' property items (does not include children of aggregate or hidden items by default).
/**
Iterate through 'normal' property items (does not include children of
aggregate or hidden items by default).
@hideinitializer
*/
wxPG_ITERATE_PROPERTIES = (wxPG_PROP_PROPERTY|wxPG_PROP_MISC_PARENT|wxPG_PROP_AGGREGATE| \
wxPG_PROP_COLLAPSED|((wxPG_PROP_MISC_PARENT|wxPG_PROP_CATEGORY)<<16)),
wxPG_ITERATE_PROPERTIES = wxPG_PROP_PROPERTY |
wxPG_PROP_MISC_PARENT |
wxPG_PROP_AGGREGATE |
wxPG_PROP_COLLAPSED |
wxPG_IT_CHILDREN(wxPG_PROP_MISC_PARENT) |
wxPG_IT_CHILDREN(wxPG_PROP_CATEGORY),
/** Iterate children of collapsed parents, and individual items that are hidden.
/**
Iterate children of collapsed parents, and individual items that are hidden.
@hideinitializer
*/
wxPG_ITERATE_HIDDEN = (wxPG_PROP_HIDDEN|wxPG_IT_CHILDREN(wxPG_PROP_COLLAPSED)),
wxPG_ITERATE_HIDDEN = wxPG_PROP_HIDDEN |
wxPG_IT_CHILDREN(wxPG_PROP_COLLAPSED),
/** Iterate children of parent that is an aggregate property (ie. has fixed children).
/**
Iterate children of parent that is an aggregate property (ie has fixed
children).
@hideinitializer
*/
wxPG_ITERATE_FIXED_CHILDREN = (wxPG_IT_CHILDREN(wxPG_PROP_AGGREGATE)|wxPG_ITERATE_PROPERTIES),
wxPG_ITERATE_FIXED_CHILDREN = wxPG_IT_CHILDREN(wxPG_PROP_AGGREGATE) |
wxPG_ITERATE_PROPERTIES,
/** Iterate categories. Note that even without this flag, children of categories
are still iterated through.
/** Iterate categories.
Note that even without this flag, children of categories are still iterated
through.
@hideinitializer
*/
wxPG_ITERATE_CATEGORIES = (wxPG_PROP_CATEGORY|wxPG_IT_CHILDREN(wxPG_PROP_CATEGORY)|wxPG_PROP_COLLAPSED),
wxPG_ITERATE_CATEGORIES = wxPG_PROP_CATEGORY |
wxPG_IT_CHILDREN(wxPG_PROP_CATEGORY) |
wxPG_PROP_COLLAPSED,
wxPG_ITERATE_ALL_PARENTS = (wxPG_PROP_MISC_PARENT|wxPG_PROP_AGGREGATE|wxPG_PROP_CATEGORY),
/**
@hideinitializer
*/
wxPG_ITERATE_ALL_PARENTS = wxPG_PROP_MISC_PARENT |
wxPG_PROP_AGGREGATE |
wxPG_PROP_CATEGORY,
wxPG_ITERATE_ALL_PARENTS_RECURSIVELY = (wxPG_ITERATE_ALL_PARENTS|wxPG_IT_CHILDREN(wxPG_ITERATE_ALL_PARENTS)),
/**
@hideinitializer
*/
wxPG_ITERATE_ALL_PARENTS_RECURSIVELY = wxPG_ITERATE_ALL_PARENTS |
wxPG_IT_CHILDREN(
wxPG_ITERATE_ALL_PARENTS),
wxPG_ITERATOR_FLAGS_ALL = (wxPG_PROP_PROPERTY|wxPG_PROP_MISC_PARENT|wxPG_PROP_AGGREGATE| \
wxPG_PROP_HIDDEN|wxPG_PROP_CATEGORY|wxPG_PROP_COLLAPSED),
/**
@hideinitializer
*/
wxPG_ITERATOR_FLAGS_ALL = wxPG_PROP_PROPERTY |
wxPG_PROP_MISC_PARENT |
wxPG_PROP_AGGREGATE |
wxPG_PROP_HIDDEN |
wxPG_PROP_CATEGORY |
wxPG_PROP_COLLAPSED,
wxPG_ITERATOR_MASK_OP_ITEM = wxPG_ITERATOR_FLAGS_ALL,
/**
@hideinitializer
*/
wxPG_ITERATOR_MASK_OP_ITEM = wxPG_ITERATOR_FLAGS_ALL,
wxPG_ITERATOR_MASK_OP_PARENT = wxPG_ITERATOR_FLAGS_ALL, // (wxPG_PROP_MISC_PARENT|wxPG_PROP_AGGREGATE|wxPG_PROP_CATEGORY)
// (wxPG_PROP_MISC_PARENT|wxPG_PROP_AGGREGATE|wxPG_PROP_CATEGORY)
/**
@hideinitializer
*/
wxPG_ITERATOR_MASK_OP_PARENT = wxPG_ITERATOR_FLAGS_ALL,
/** Combines all flags needed to iterate through visible properties
/**
Combines all flags needed to iterate through visible properties
(ie. hidden properties and children of collapsed parents are skipped).
@hideinitializer
*/
wxPG_ITERATE_VISIBLE = (wxPG_ITERATE_PROPERTIES|wxPG_PROP_CATEGORY|wxPG_IT_CHILDREN(wxPG_PROP_AGGREGATE)),
wxPG_ITERATE_VISIBLE = wxPG_ITERATE_PROPERTIES |
wxPG_PROP_CATEGORY |
wxPG_IT_CHILDREN(wxPG_PROP_AGGREGATE),
/** Iterate all items.
/**
Iterate all items.
@hideinitializer
*/
wxPG_ITERATE_ALL = (wxPG_ITERATE_VISIBLE|wxPG_ITERATE_HIDDEN),
wxPG_ITERATE_ALL = wxPG_ITERATE_VISIBLE |
wxPG_ITERATE_HIDDEN,
/** Iterate through individual properties (ie. categories and children of
/**
Iterate through individual properties (ie categories and children of
aggregate properties are skipped).
@hideinitializer
*/
wxPG_ITERATE_NORMAL = (wxPG_ITERATE_PROPERTIES|wxPG_ITERATE_HIDDEN),
wxPG_ITERATE_NORMAL = wxPG_ITERATE_PROPERTIES |
wxPG_ITERATE_HIDDEN,
/** Default iterator flags.
/**
Default iterator flags.
@hideinitializer
*/
wxPG_ITERATE_DEFAULT = wxPG_ITERATE_NORMAL
wxPG_ITERATE_DEFAULT = wxPG_ITERATE_NORMAL
};
@@ -109,19 +173,35 @@ wxPG_ITERATE_DEFAULT = wxPG_ITERATE_NORMAL
@library{wxpropgrid}
@category{propgrid}
@{
*/
class wxPropertyGridIterator : public wxPropertyGridIteratorBase
/**
Base for wxPropertyGridIterator classes.
*/
class wxPropertyGridIteratorBase
{
public:
wxPropertyGridIteratorBase();
void Assign( const wxPropertyGridIteratorBase& it );
bool AtEnd() const { return m_property == NULL; }
bool AtEnd() const;
/**
Get current property.
*/
wxPGProperty* GetProperty() const { return m_property; }
wxPGProperty* GetProperty() const;
void Init( wxPropertyGridPageState* state,
int flags,
wxPGProperty* property,
int dir = 1 );
void Init( wxPropertyGridPageState* state,
int flags,
int startPos = wxTOP,
int dir = 0 );
/**
Iterate to the next property.
@@ -133,9 +213,40 @@ public:
*/
void Prev();
protected:
/**
Set base parent, i.e. a property when, in which iteration returns,
it ends.
Default base parent is the root of the used wxPropertyGridPageState.
*/
void SetBaseParent( wxPGProperty* baseParent );
};
class wxPropertyGridIterator : public wxPropertyGridIteratorBase
{
public:
};
/**
Const version of wxPropertyGridIterator.
*/
class wxPropertyGridConstIterator : public wxPropertyGridIteratorBase
{
public:
/**
Additional copy constructor.
*/
wxPropertyGridConstIterator( const wxPropertyGridIterator& other );
/**
Additional assignment operator.
*/
const wxPropertyGridConstIterator& operator=( const wxPropertyGridIterator& it );
};
/** @}
*/
// -----------------------------------------------------------------------
/**
@@ -149,27 +260,256 @@ protected:
class wxPGVIterator
{
public:
wxPGVIterator() { m_pIt = NULL; }
wxPGVIterator( wxPGVIteratorBase* obj ) { m_pIt = obj; }
~wxPGVIterator() { UnRef(); }
void UnRef() { if (m_pIt) m_pIt->DecRef(); }
wxPGVIterator( const wxPGVIterator& it )
{
m_pIt = it.m_pIt;
m_pIt->IncRef();
}
const wxPGVIterator& operator=( const wxPGVIterator& it )
{
UnRef();
m_pIt = it.m_pIt;
m_pIt->IncRef();
return *this;
}
void Next() { m_pIt->Next(); }
bool AtEnd() const { return m_pIt->m_it.AtEnd(); }
wxPGProperty* GetProperty() const { return m_pIt->m_it.GetProperty(); }
protected:
wxPGVIteratorBase* m_pIt;
wxPGVIterator();
wxPGVIterator( wxPGVIteratorBase* obj );
~wxPGVIterator();
void UnRef();
wxPGVIterator( const wxPGVIterator& it );
const wxPGVIterator& operator=( const wxPGVIterator& it );
void Next();
bool AtEnd() const;
wxPGProperty* GetProperty() const;
};
// -----------------------------------------------------------------------
/** @class wxPropertyGridPageState
Contains low-level property page information (properties, column widths,
etc.) of a single wxPropertyGrid or single wxPropertyGridPage. Generally you
should not use this class directly, but instead member functions in
wxPropertyGridInterface, wxPropertyGrid, wxPropertyGridPage, and
wxPropertyGridManager.
@remarks
- In separate wxPropertyGrid component this class was known as
wxPropertyGridState.
- Currently this class is not implemented in wxPython.
@library{wxpropgrid}
@category{propgrid}
*/
class wxPropertyGridPageState
{
friend class wxPGProperty;
friend class wxPropertyGrid;
friend class wxPGCanvas;
friend class wxPropertyGridInterface;
friend class wxPropertyGridPage;
friend class wxPropertyGridManager;
public:
/**
Default constructor.
*/
wxPropertyGridPageState();
/**
Destructor.
*/
virtual ~wxPropertyGridPageState();
/**
Makes sure all columns have minimum width.
*/
void CheckColumnWidths( int widthChange = 0 );
/**
Override this member function to add custom behaviour on property
deletion.
*/
virtual void DoDelete( wxPGProperty* item, bool doDelete = true );
wxSize DoFitColumns( bool allowGridResize = false );
wxPGProperty* DoGetItemAtY( int y ) const;
/**
Override this member function to add custom behaviour on property
insertion.
*/
virtual wxPGProperty* DoInsert( wxPGProperty* parent,
int index,
wxPGProperty* property );
/**
This needs to be overridden in grid used the manager so that splitter
changes can be propagated to other pages.
*/
virtual void DoSetSplitterPosition( int pos,
int splitterColumn = 0,
int flags = 0 );
bool EnableCategories( bool enable );
/**
Make sure virtual height is up-to-date.
*/
void EnsureVirtualHeight();
/**
Returns (precalculated) height of contained visible properties.
*/
unsigned int GetVirtualHeight() const;
/**
Returns (precalculated) height of contained visible properties.
*/
unsigned int GetVirtualHeight();
/**
Returns actual height of contained visible properties.
@remarks
Mostly used for internal diagnostic purposes.
*/
inline unsigned int GetActualVirtualHeight() const;
unsigned int GetColumnCount() const'
int GetColumnMinWidth( int column ) const;
int GetColumnWidth( unsigned int column ) const;
wxPropertyGrid* GetGrid() const;
/**
Returns last item which could be iterated using given flags.
@param flags
@ref propgrid_iterator_flags
*/
wxPGProperty* GetLastItem( int flags = wxPG_ITERATE_DEFAULT );
const wxPGProperty* GetLastItem( int flags = wxPG_ITERATE_DEFAULT ) const;
/**
Returns currently selected property.
*/
wxPGProperty* GetSelection() const;
void DoSetSelection( wxPGProperty* prop );
bool DoClearSelection();
void DoRemoveFromSelection( wxPGProperty* prop );
void DoSetColumnProportion( unsigned int column, int proportion );
int DoGetColumnProportion( unsigned int column ) const;
void ResetColumnSizes( int setSplitterFlags );
wxPropertyCategory* GetPropertyCategory( const wxPGProperty* p ) const;
wxVariant DoGetPropertyValues( const wxString& listname,
wxPGProperty* baseparent,
long flags ) const;
wxPGProperty* DoGetRoot() const;
void DoSetPropertyName( wxPGProperty* p, const wxString& newName );
/**
Returns combined width of margin and all the columns.
*/
int GetVirtualWidth() const;
/**
Returns minimal width for given column so that all images and texts
will fit entirely.
Used by SetSplitterLeft() and DoFitColumns().
*/
int GetColumnFitWidth(wxClientDC& dc,
wxPGProperty* pwc,
unsigned int col,
bool subProps) const;
int GetColumnFullWidth(wxClientDC &dc, wxPGProperty *p, unsigned int col);
/**
Returns information about arbitrary position in the grid.
@param pt
Logical coordinates in the virtual grid space. Use
wxScrolled<T>::CalcUnscrolledPosition() if you need to
translate a scrolled position into a logical one.
*/
wxPropertyGridHitTestResult HitTest( const wxPoint& pt ) const;
/**
Returns true if page is visibly displayed.
*/
inline bool IsDisplayed() const;
bool IsInNonCatMode() const;
void DoLimitPropertyEditing( wxPGProperty* p, bool limit = true );
bool DoSelectProperty( wxPGProperty* p, unsigned int flags = 0 );
/**
widthChange is non-client.
*/
void OnClientWidthChange( int newWidth,
int widthChange,
bool fromOnResize = false );
/**
Recalculates m_virtualHeight.
*/
void RecalculateVirtualHeight();
void SetColumnCount( int colCount );
void PropagateColSizeDec( int column, int decrease, int dir );
bool DoHideProperty( wxPGProperty* p, bool hide, int flags = wxPG_RECURSE );
bool DoSetPropertyValueString( wxPGProperty* p, const wxString& value );
bool DoSetPropertyValue( wxPGProperty* p, wxVariant& value );
bool DoSetPropertyValueWxObjectPtr( wxPGProperty* p, wxObject* value );
void DoSetPropertyValues( const wxVariantList& list,
wxPGProperty* default_category );
void SetSplitterLeft( bool subProps = false );
/**
Set virtual width for this particular page.
*/
void SetVirtualWidth( int width );
void DoSortChildren( wxPGProperty* p, int flags = 0 );
void DoSort( int flags = 0 );
bool PrepareAfterItemsAdded();
/**
Called after virtual height needs to be recalculated.
*/
void VirtualHeightChanged();
/**
Base append.
*/
wxPGProperty* DoAppend( wxPGProperty* property );
/**
Returns property by its name.
*/
wxPGProperty* BaseGetPropertyByName( const wxString& name ) const;
/**
Called in, for example, wxPropertyGrid::Clear.
*/
void DoClear();
bool DoIsPropertySelected( wxPGProperty* prop ) const;
bool DoCollapse( wxPGProperty* p );
bool DoExpand( wxPGProperty* p );
void CalculateFontAndBitmapStuff( int vspacing );
}: