X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/174b59aceeb95f1e48fbe91543bf89e105a561ac..cbeda384e51acb82e13994cb67ac1714669cae10:/include/wx/propgrid/propgrid.h diff --git a/include/wx/propgrid/propgrid.h b/include/wx/propgrid/propgrid.h index b566b7679a..6001261918 100644 --- a/include/wx/propgrid/propgrid.h +++ b/include/wx/propgrid/propgrid.h @@ -24,9 +24,10 @@ #ifndef SWIG -extern WXDLLIMPEXP_PROPGRID const wxChar *wxPropertyGridNameStr; +extern WXDLLIMPEXP_DATA_PROPGRID(const char) wxPropertyGridNameStr[]; #endif +class wxPGComboBox; // ----------------------------------------------------------------------- // Global variables @@ -86,9 +87,7 @@ public: int m_extraStyle; // global extra style -#ifdef __WXDEBUG__ int m_warnings; -#endif int HasExtraStyle( int style ) const { return (m_extraStyle & style); } }; @@ -418,10 +417,10 @@ enum wxPG_KEYBOARD_ACTIONS wxPG_ACTION_EXPAND_PROPERTY, wxPG_ACTION_COLLAPSE_PROPERTY, wxPG_ACTION_CANCEL_EDIT, - wxPG_ACTION_PRESS_BUTTON, // Causes editor button (if any) to be pressed + wxPG_ACTION_PRESS_BUTTON, // Causes editor button (if any) to be pressed wxPG_ACTION_MAX }; - + /** @} */ @@ -488,14 +487,14 @@ enum wxPG_KEYBOARD_ACTIONS #define wxPG_FL_SPLITTER_PRE_SET 0x00400000 // Validation failed. Clear on modify event. #define wxPG_FL_VALIDATION_FAILED 0x00800000 -// Set if selected is fully painted (ie. both image and text) -//#define wxPG_FL_SELECTED_IS_FULL_PAINT 0x01000000 +// Auto sort is enabled (for categorized mode) +#define wxPG_FL_CATMODE_AUTO_SORT 0x01000000 // Set after page has been inserted to manager #define wxPG_MAN_FL_PAGE_INSERTED 0x02000000 // Active editor control is abnormally large #define wxPG_FL_ABNORMAL_EDITOR 0x04000000 -// Recursion guard for OnCustomEditorEvent -#define wxPG_FL_IN_ONCUSTOMEDITOREVENT 0x08000000 +// Recursion guard for HandleCustomEditorEvent +#define wxPG_FL_IN_HANDLECUSTOMEDITOREVENT 0x08000000 #define wxPG_FL_VALUE_CHANGE_IN_EVENT 0x10000000 // Editor control width should not change on resize #define wxPG_FL_FIXED_WIDTH_EDITOR 0x20000000 @@ -614,19 +613,21 @@ public: /** The default constructor. The styles to be used are styles valid for the wxWindow and wxScrolledWindow. - @see @link wndflags Additional Window Styles@endlink + + @see @link wndflags Additional Window Styles @endlink */ wxPropertyGrid( wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxPG_DEFAULT_STYLE, - const wxChar* name = wxPropertyGridNameStr ); + const wxString& name = wxPropertyGridNameStr ); /** Destructor */ virtual ~wxPropertyGrid(); #endif /** Adds given key combination to trigger given action. + @param action Which action to trigger. See @link pgactions List of list of wxPropertyGrid actions@endlink. @@ -693,7 +694,7 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxPG_DEFAULT_STYLE, - const wxChar* name = wxPropertyGridNameStr ); + const wxString& name = wxPropertyGridNameStr ); /** Call when editor widget's contents is modified. @@ -837,12 +838,6 @@ public: */ wxVariant GetUncommittedPropertyValue(); - /** Returns cell background colour of a property. */ - wxColour GetPropertyBackgroundColour( wxPGPropArg id ) const; - - /** Returns cell background colour of a property. */ - wxColour GetPropertyTextColour( wxPGPropArg id ) const; - /** Returns "root property". It does not have name, etc. and it is not visible. It is only useful for accessing its children. */ @@ -883,15 +878,24 @@ public: /** Returns current vertical spacing. */ int GetVerticalSpacing() const { return (int)m_vspacing; } + /** + Returns @true if a property editor control has focus. + */ + bool IsEditorFocused() const; + /** Returns true if editor's value was marked modified. */ bool IsEditorsValueModified() const { return ( m_iFlags & wxPG_FL_VALUE_MODIFIED ) ? true : false; } - /** Returns information about arbitrary position in the grid. + /** + Returns information about arbitrary position in the grid. - For wxPropertyGridHitTestResult definition, see - wxPropertyGridPageState::HitTest(). + @param pt + Coordinates in the virtual grid space. You may need to use + wxScrolledWindow::CalcScrolledPosition() for translating + wxPropertyGrid client coordinates into something this member + function can use. */ wxPropertyGridHitTestResult HitTest( const wxPoint& pt ) const; @@ -987,22 +991,6 @@ public: /** Sets background colour of margin. */ void SetMarginColour(const wxColour& col); - /** Sets background colour of property and all its children. Colours of - captions are not affected. Background brush cache is optimized for often - set colours to be set last. - */ - void SetPropertyBackgroundColour( wxPGPropArg id, const wxColour& col ); - - /** Resets text and background colours of given property. - */ - void SetPropertyColoursToDefault( wxPGPropArg id ); - - /** Sets text colour of property and all its children. - */ - void SetPropertyTextColour( wxPGPropArg id, - const wxColour& col, - bool recursively = true ); - /** Sets selection background colour - applies to selected property name background. @@ -1027,6 +1015,45 @@ public: m_iFlags |= wxPG_FL_SPLITTER_PRE_SET; } + /** + Sets the property sorting function. + + @param sortFunction + The sorting function to be used. It should return a value greater + than 0 if position of p1 is after p2. So, for instance, when + comparing property names, you can use following implementation: + + @code + int MyPropertySortFunction(wxPropertyGrid* propGrid, + wxPGProperty* p1, + wxPGProperty* p2) + { + return p1->GetBaseName().compare( p2->GetBaseName() ); + } + @endcode + + @remarks + Default property sort function sorts properties by their labels + (case-insensitively). + + @see GetSortFunction, wxPropertyGridInterface::Sort, + wxPropertyGridInterface::SortChildren + */ + void SetSortFunction( wxPGSortCallback sortFunction ) + { + m_sortFunction = sortFunction; + } + + /** + Returns the property sort function (default is @NULL). + + @see SetSortFunction + */ + wxPGSortCallback GetSortFunction() const + { + return m_sortFunction; + } + /** Set virtual width for this particular page. Width -1 indicates that the virtual width should be disabled. */ void SetVirtualWidth( int width ); @@ -1060,13 +1087,6 @@ public: DoShowPropertyError(p, msg); } - /** Sorts all items at all levels (except sub-properties). */ - void Sort(); - - /** Sorts children of a category. - */ - void SortChildren( wxPGPropArg id ); - ///////////////////////////////////////////////////////////////// // // Following methods do not need to be (currently) documented @@ -1198,6 +1218,14 @@ public: return m_wndEditor2; } + /** + Refreshes any active editor control. + */ + void RefreshEditor(); + + // Events from editor controls are forward to this function + void HandleCustomEditorEvent( wxEvent &event ); + #ifndef SWIG /** @@ -1215,10 +1243,6 @@ public: // Mostly useful for page switching. void SwitchState( wxPropertyGridPageState* pNewState ); - /** Pass this function to Connect calls in propertyclass::CreateEditor. - */ - void OnCustomEditorEvent( wxCommandEvent &event ); - long GetInternalFlags() const { return m_iFlags; } bool HasInternalFlag( long flag ) const { return (m_iFlags & flag) ? true : false; } @@ -1227,8 +1251,11 @@ public: void IncFrozen() { m_frozen++; } void DecFrozen() { m_frozen--; } - void OnComboItemPaint( wxPGCustomComboControl* pCb,int item,wxDC& dc, - wxRect& rect,int flags ); + void OnComboItemPaint( const wxPGComboBox* pCb, + int item, + wxDC* pDc, + wxRect& rect, + int flags ); /** Standardized double-to-string conversion. */ @@ -1274,12 +1301,8 @@ public: To add your own validation failure behavior, override wxPropertyGrid::DoOnValidationFailure(). */ - bool OnValidationFailure( wxPGProperty* property, wxVariant& invalidValue ) - { - bool res = DoOnValidationFailure(property, invalidValue); - property->SetFlag(wxPG_PROP_INVALID_VALUE); - return res; - } + bool OnValidationFailure( wxPGProperty* property, + wxVariant& invalidValue ); /** Called to indicate property and editor has valid value now. */ @@ -1331,6 +1354,23 @@ public: */ bool UnfocusEditor(); + virtual void SetWindowStyleFlag( long style ); + + void DrawItems( const wxPGProperty* p1, const wxPGProperty* p2 ); + + void DrawItem( wxPGProperty* p ) + { + DrawItems(p,p); + } + + virtual void DrawItemAndChildren( wxPGProperty* p ); + + /** + Draws item, children, and consequtive parents as long as category is + not met. + */ + void DrawItemAndValueRelated( wxPGProperty* p ); + protected: /** @@ -1361,6 +1401,16 @@ public: // Control font changer helper. void SetCurControlBoldFont(); + wxPGCell& GetPropertyDefaultCell() + { + return m_propertyDefaultCell; + } + + wxPGCell& GetCategoryDefaultCell() + { + return m_categoryDefaultCell; + } + // // Public methods for semi-public use // (not protected for optimization) @@ -1369,7 +1419,6 @@ public: // Overridden functions. virtual bool Destroy(); - virtual wxSize DoGetBestSize() const; // Returns property at given y coordinate (relative to grid's top left). wxPGProperty* GetItemAtY( int y ) const { return DoGetItemAtY(y); } @@ -1385,6 +1434,7 @@ public: protected: + virtual wxSize DoGetBestSize() const; #ifndef wxPG_ICON_WIDTH wxBitmap *m_expandbmp, *m_collbmp; @@ -1577,6 +1627,9 @@ protected: // Top level parent wxWindow* m_tlp; + // Sort function + wxPGSortCallback m_sortFunction; + // y coordinate of property that mouse hovering int m_propHoverY; // Which column's editor is selected (usually 1)? @@ -1607,13 +1660,16 @@ protected: // background colour for empty space below the grid wxColour m_colEmptySpace; - // NB: These *cannot* be moved to globals. + // Default property colours + wxPGCell m_propertyDefaultCell; + + // Default property category + wxPGCell m_categoryDefaultCell; - // Array of background colour brushes. - wxArrayPtrVoid m_arrBgBrushes; + // Backup of selected property's cells + wxVector m_propCellsBackup; - // Array of foreground colours. - wxArrayPtrVoid m_arrFgCols; + // NB: These *cannot* be moved to globals. // labels when properties use common values wxVector m_commonValues; @@ -1642,7 +1698,6 @@ protected: void OnMouseDoubleClick( wxMouseEvent &event ); void OnMouseUp( wxMouseEvent &event ); void OnKey( wxKeyEvent &event ); - void OnKeyUp( wxKeyEvent &event ); void OnResize( wxSizeEvent &event ); // event handlers @@ -1651,9 +1706,7 @@ protected: bool HandleMouseRightClick( int x, unsigned int y, wxMouseEvent &event ); bool HandleMouseDoubleClick( int x, unsigned int y, wxMouseEvent &event ); bool HandleMouseUp( int x, unsigned int y, wxMouseEvent &event ); - void HandleKeyEvent( wxKeyEvent &event ); - // Handle TAB and ESCAPE in control - bool HandleChildKey( wxKeyEvent& event ); + void HandleKeyEvent( wxKeyEvent &event, bool fromChild ); void OnMouseEntry( wxMouseEvent &event ); @@ -1670,7 +1723,6 @@ protected: void OnMouseMoveChild( wxMouseEvent &event ); void OnMouseUpChild( wxMouseEvent &event ); void OnChildKeyDown( wxKeyEvent &event ); - void OnChildKeyUp( wxKeyEvent &event ); void OnCaptureChange( wxMouseCaptureChangedEvent &event ); @@ -1699,23 +1751,14 @@ protected: */ void CorrectEditorWidgetPosY(); -#ifdef __WXDEBUG__ - void _log_items(); - void OnScreenNote( const wxChar* format, ... ); -#endif - /** Deselect current selection, if any. Returns true if success (ie. validator did not intercept). */ bool DoClearSelection(); int DoDrawItems( wxDC& dc, - const wxPGProperty* first_item, - const wxPGProperty* last_item, - const wxRect* clip_rect, + const wxRect* clipRect, bool isBuffered ) const; - void DoSetPropertyValueUnspecified( wxPGProperty* p ); - /** Draws an expand/collapse (ie. +/-) button. */ virtual void DrawExpanderButton( wxDC& dc, const wxRect& rect, @@ -1725,21 +1768,6 @@ protected: void DrawItems( wxDC& dc, unsigned int topitemy, unsigned int bottomitemy, const wxRect* clip_rect = (const wxRect*) NULL ); - void DrawItems( const wxPGProperty* p1, const wxPGProperty* p2 ); - - void DrawItem( wxPGProperty* p ) - { - DrawItems(p,p); - } - - virtual void DrawItemAndChildren( wxPGProperty* p ); - - /** - Draws item, children, and consequtive parents as long as category is - not met. - */ - void DrawItemAndValueRelated( wxPGProperty* p ); - // Translate wxKeyEvent to wxPG_ACTION_XXX int KeyEventToActions(wxKeyEvent &event, int* pSecond) const; @@ -1779,22 +1807,11 @@ protected: static void RegisterDefaultEditors(); - // Sets m_bgColIndex to this property and all its children. - void SetBackgroundColourIndex( wxPGProperty* p, int index ); - - // Sets m_fgColIndex to this property and all its children. - void SetTextColourIndex( wxPGProperty* p, int index, int flags ); - - int CacheColour( const wxColour& colour ); - // Sets up basic event handling for child control void SetupChildEventHandling( wxWindow* wnd ); void CustomSetCursor( int type, bool override = false ); - virtual bool ProcessEvent(wxEvent& event); - virtual void SetWindowStyleFlag( long style ); - /** Repositions scrollbar and underlying panel according to changed virtual size. @@ -1870,22 +1887,20 @@ inline bool wxPGProperty::SetMaxLength( int maxLen ) // ----------------------------------------------------------------------- +#define wxPG_BASE_EVT_PRE_ID 1775 #ifndef SWIG -#define wxPG_BASE_EVT_PRE_ID 1775 +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_SELECTED, wxPropertyGridEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_CHANGING, wxPropertyGridEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_CHANGED, wxPropertyGridEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_HIGHLIGHTED, wxPropertyGridEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_RIGHT_CLICK, wxPropertyGridEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_PAGE_CHANGED, wxPropertyGridEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_ITEM_COLLAPSED, wxPropertyGridEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_ITEM_EXPANDED, wxPropertyGridEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_DOUBLE_CLICK, wxPropertyGridEvent ); -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_SELECTED, wxPG_BASE_EVT_PRE_ID) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_CHANGING, wxPG_BASE_EVT_PRE_ID+1) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_CHANGED, wxPG_BASE_EVT_PRE_ID+2) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_HIGHLIGHTED, wxPG_BASE_EVT_PRE_ID+3) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_RIGHT_CLICK, wxPG_BASE_EVT_PRE_ID+4) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_PAGE_CHANGED, wxPG_BASE_EVT_PRE_ID+5) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_ITEM_COLLAPSED, wxPG_BASE_EVT_PRE_ID+6) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_ITEM_EXPANDED, wxPG_BASE_EVT_PRE_ID+7) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_DOUBLE_CLICK, wxPG_BASE_EVT_PRE_ID+8) -END_DECLARE_EVENT_TYPES() #else enum { wxEVT_PG_SELECTED = wxPG_BASE_EVT_PRE_ID, @@ -1908,18 +1923,18 @@ END_DECLARE_EVENT_TYPES() #ifndef SWIG typedef void (wxEvtHandler::*wxPropertyGridEventFunction)(wxPropertyGridEvent&); -#define EVT_PG_SELECTED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_PG_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_PG_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_PG_HIGHLIGHTED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_HIGHLIGHTED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_PG_RIGHT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_RIGHT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_PG_DOUBLE_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_DOUBLE_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_PG_PAGE_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_PAGE_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_PG_ITEM_COLLAPSED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_ITEM_COLLAPSED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_PG_ITEM_EXPANDED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_ITEM_EXPANDED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ), - -#define wxPropertyGridEventHandler(A) \ - ((wxObjectEventFunction)(wxEventFunction)(wxPropertyGridEventFunction)&A) +#define EVT_PG_SELECTED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_SELECTED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ), +#define EVT_PG_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_CHANGING, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ), +#define EVT_PG_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_CHANGED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ), +#define EVT_PG_HIGHLIGHTED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_HIGHLIGHTED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ), +#define EVT_PG_RIGHT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_RIGHT_CLICK, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ), +#define EVT_PG_DOUBLE_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_DOUBLE_CLICK, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ), +#define EVT_PG_PAGE_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_PAGE_CHANGED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ), +#define EVT_PG_ITEM_COLLAPSED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_ITEM_COLLAPSED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ), +#define EVT_PG_ITEM_EXPANDED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_ITEM_EXPANDED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ), + +#define wxPropertyGridEventHandler(fn) \ + wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ) #endif