X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/521f1d8371b4f010e8d8c55b55720eb11ff052e6..c81aea07393c320a930a63eafbc762f7c404b989:/include/wx/propgrid/propgrid.h?ds=sidebyside diff --git a/include/wx/propgrid/propgrid.h b/include/wx/propgrid/propgrid.h index 0bcd775d78..aa8b8f169c 100644 --- a/include/wx/propgrid/propgrid.h +++ b/include/wx/propgrid/propgrid.h @@ -14,6 +14,7 @@ #if wxUSE_PROPGRID +#include "wx/thread.h" #include "wx/dcclient.h" #include "wx/scrolwin.h" #include "wx/tooltip.h" @@ -43,6 +44,14 @@ public: wxPGGlobalVarsClass(); ~wxPGGlobalVarsClass(); +#if wxUSE_THREADS + // Critical section for handling the globals. Generally it is not needed + // since GUI code is supposed to be in single thread. However, + // we do want the user to be able to convey wxPropertyGridEvents to other + // threads. + wxCriticalSection m_critSect; +#endif + // Used by advprops, but here to make things easier. wxString m_pDefaultImageWildcard; @@ -183,11 +192,19 @@ wxPG_TOOLBAR = 0x00001000, */ wxPG_DESCRIPTION = 0x00002000, -/** wxPropertyGridManager only: don't show an internal border around the property grid +/** wxPropertyGridManager only: don't show an internal border around + the property grid. */ wxPG_NO_INTERNAL_BORDER = 0x00004000 }; +#if wxPG_COMPATIBILITY_1_4 + // In wxPG 1.4 this was used to enable now-default theme border support + // in wxPropertyGridManager. + #define wxPG_THEME_BORDER 0x00000000 +#endif + + enum wxPG_EX_WINDOW_STYLES { @@ -280,11 +297,11 @@ wxPG_EX_ENABLE_TLP_TRACKING = 0x04000000, /** Don't show divider above toolbar, on Windows. */ -wxPG_EX_NO_TOOLBAR_DIVIDER = 0x04000000, +wxPG_EX_NO_TOOLBAR_DIVIDER = 0x08000000, /** Show a separator below the toolbar. */ -wxPG_EX_TOOLBAR_SEPARATOR = 0x08000000 +wxPG_EX_TOOLBAR_SEPARATOR = 0x10000000 }; @@ -412,7 +429,7 @@ public: /** Returns reference to pending value. */ - const wxVariant& GetValue() const + wxVariant& GetValue() { wxASSERT(m_pValue); return *m_pValue; @@ -532,8 +549,6 @@ enum wxPG_KEYBOARD_ACTIONS #define wxPG_FL_IN_SELECT_PROPERTY 0x00100000 // Set when help string is shown in status bar #define wxPG_FL_STRING_IN_STATUSBAR 0x00200000 -// Splitter position has been custom-set by the user -#define wxPG_FL_SPLITTER_PRE_SET 0x00400000 // Validation failed. Clear on modify event. #define wxPG_FL_VALIDATION_FAILED 0x00800000 // Auto sort is enabled (for categorized mode) @@ -634,10 +649,10 @@ enum wxPG_KEYBOARD_ACTIONS class WXDLLIMPEXP_PROPGRID wxPropertyGrid : public wxScrolledWindow, public wxPropertyGridInterface { + friend class wxPropertyGridEvent; friend class wxPropertyGridPageState; friend class wxPropertyGridInterface; friend class wxPropertyGridManager; - friend class wxPGCanvas; DECLARE_DYNAMIC_CLASS(wxPropertyGrid) public: @@ -796,9 +811,9 @@ public: Returns wxWindow that the properties are painted on, and which should be used as the parent for editor controls. */ - wxPanel* GetPanel() const + wxWindow* GetPanel() { - return m_canvas; + return this; } /** Returns current category caption background colour. */ @@ -1155,7 +1170,7 @@ public: void SetSplitterPosition( int newxpos, int col = 0 ) { DoSetSplitterPosition_(newxpos, true, col); - m_iFlags |= wxPG_FL_SPLITTER_PRE_SET; + m_pState->m_isSplitterPreSet = true; } /** @@ -1605,9 +1620,6 @@ protected: wxWindow *m_wndEditor; wxWindow *m_wndEditor2; - /** wxPGCanvas instance. */ - wxPanel *m_canvas; - #if wxPG_DOUBLE_BUFFER wxBitmap *m_doubleBuffer; #endif @@ -1843,6 +1855,9 @@ protected: // labels when properties use common values wxVector m_commonValues; + // array of live events + wxVector m_liveEvents; + // Which cv selection really sets value to unspecified? int m_cvUnspecified; @@ -1861,7 +1876,6 @@ protected: // main event receivers void OnMouseMove( wxMouseEvent &event ); - void OnMouseMoveBottom( wxMouseEvent &event ); void OnMouseClick( wxMouseEvent &event ); void OnMouseRightClick( wxMouseEvent &event ); void OnMouseDoubleClick( wxMouseEvent &event ); @@ -1928,7 +1942,7 @@ protected: void CorrectEditorWidgetPosY(); int DoDrawItems( wxDC& dc, - const wxRect* clipRect, + const wxRect* drawRect, bool isBuffered ) const; /** Draws an expand/collapse (ie. +/-) button. @@ -1937,8 +1951,10 @@ protected: wxPGProperty* property ) const; /** Draws items from topitemy to bottomitemy */ - void DrawItems( wxDC& dc, unsigned int topitemy, unsigned int bottomitemy, - const wxRect* clip_rect = (const wxRect*) NULL ); + void DrawItems( wxDC& dc, + unsigned int topItemY, + unsigned int bottomItemY, + const wxRect* drawRect = NULL ); // Translate wxKeyEvent to wxPG_ACTION_XXX int KeyEventToActions(wxKeyEvent &event, int* pSecond) const; @@ -2207,14 +2223,43 @@ public: */ void Veto( bool veto = true ) { m_wasVetoed = veto; } - /** Returns value that is about to be set for wxEVT_PG_CHANGING. + /** + Returns name of the associated property. + + @remarks Property name is stored in event, so it remains + accessible even after the associated property or + the property grid has been deleted. + */ + wxString GetPropertyName() const + { + return m_propertyName; + } + + /** + Returns value of the associated property. Works for all event + types, but for wxEVT_PG_CHANGING this member function returns + the value that is pending, so you can call Veto() if the + value is not satisfactory. + + @remarks Property value is stored in event, so it remains + accessible even after the associated property or + the property grid has been deleted. + */ + wxVariant GetPropertyValue() const + { + if ( m_validationInfo ) + return m_validationInfo->GetValue(); + return m_value; + } + + /** + Returns value of the associated property. + + @see GetPropertyValue */ - const wxVariant& GetValue() const + wxVariant GetValue() const { - wxASSERT_MSG( m_validationInfo, - "Only call GetValue from a handler " - "of event type that supports it" ); - return m_validationInfo->GetValue(); + return GetPropertyValue(); } /** @@ -2254,25 +2299,44 @@ public: bool WasVetoed() const { return m_wasVetoed; } /** Changes the associated property. */ - void SetProperty( wxPGProperty* p ) { m_property = p; } + void SetProperty( wxPGProperty* p ) + { + m_property = p; + if ( p ) + m_propertyName = p->GetName(); + } - void SetPropertyGrid( wxPropertyGrid* pg ) { m_pg = pg; } + void SetPropertyValue( wxVariant value ) + { + m_value = value; + } + + void SetPropertyGrid( wxPropertyGrid* pg ) + { + m_pg = pg; + OnPropertyGridSet(); + } void SetupValidationInfo() { wxASSERT(m_pg); wxASSERT( GetEventType() == wxEVT_PG_CHANGING ); m_validationInfo = &m_pg->GetValidationInfo(); + m_value = m_validationInfo->GetValue(); } private: void Init(); + void OnPropertyGridSet(); DECLARE_DYNAMIC_CLASS(wxPropertyGridEvent) wxPGProperty* m_property; wxPropertyGrid* m_pg; wxPGValidationInfo* m_validationInfo; + wxString m_propertyName; + wxVariant m_value; + unsigned int m_column; bool m_canVeto; @@ -2399,7 +2463,6 @@ protected: #undef wxPG_FL_MOUSE_CAPTURED #undef wxPG_FL_INITIALIZED #undef wxPG_FL_ACTIVATION_BY_CLICK - #undef wxPG_FL_DONT_CENTER_SPLITTER #undef wxPG_SUPPORT_TOOLTIPS #undef wxPG_DOUBLE_BUFFER #undef wxPG_ICON_WIDTH