From e7b405ec084b703c04481d554e984438e4456a90 Mon Sep 17 00:00:00 2001 From: Artur Wieczorek <7330332+a-wi@users.noreply.github.com> Date: Sun, 22 Jan 2023 20:18:39 +0200 Subject: [PATCH] Refactor internal flags in wxPropertyGrid Move wxPropertyGrid and wxPropertyGridManager internal flags from global namespace to the corresponding classes. --- include/wx/propgrid/propgrid.h | 119 +++++++++++++-------------------- src/propgrid/advprops.cpp | 2 +- src/propgrid/editors.cpp | 6 +- src/propgrid/manager.cpp | 41 +++++++----- src/propgrid/property.cpp | 2 +- 5 files changed, 77 insertions(+), 93 deletions(-) diff --git a/include/wx/propgrid/propgrid.h b/include/wx/propgrid/propgrid.h index f003ca78e6..e8300db5fd 100644 --- a/include/wx/propgrid/propgrid.h +++ b/include/wx/propgrid/propgrid.h @@ -529,57 +529,6 @@ enum wxPG_SET_SPLITTER_POSITION_SPLITTER_FLAGS // ----------------------------------------------------------------------- -// Internal flags -enum wxPG_INTERNAL_FLAGS -{ - wxPG_FL_INITIALIZED = 0x0001, - // Set when creating editor controls if it was clicked on. - wxPG_FL_ACTIVATION_BY_CLICK = 0x0002, - wxPG_FL_DONT_CENTER_SPLITTER = 0x0004, - wxPG_FL_FOCUSED = 0x0008, - wxPG_FL_MOUSE_CAPTURED = 0x0010, - wxPG_FL_MOUSE_INSIDE = 0x0020, - wxPG_FL_VALUE_MODIFIED = 0x0040, - // don't clear background of m_wndEditor - wxPG_FL_PRIMARY_FILLS_ENTIRE = 0x0080, - // currently active editor uses custom image - wxPG_FL_CUR_USES_CUSTOM_IMAGE = 0x0100, - // cell colours override selection colours for selected cell - wxPG_FL_CELL_OVERRIDES_SEL = 0x0200, - wxPG_FL_SCROLLED = 0x0400, - // set when all added/inserted properties get hideable flag - wxPG_FL_ADDING_HIDEABLES = 0x0800, - // Disables showing help strings on statusbar. - wxPG_FL_NOSTATUSBARHELP = 0x1000, - // Marks that we created the state, so we have to destroy it too. - wxPG_FL_CREATEDSTATE = 0x2000, - // Set if wxPGMan requires redrawing of description text box. - wxPG_FL_DESC_REFRESH_REQUIRED = 0x8000, - // Set if contained in wxPropertyGridManager - wxPG_FL_IN_MANAGER = 0x00020000, - // Set after wxPropertyGrid is shown in its initial good size - wxPG_FL_GOOD_SIZE_SET = 0x00040000, - // Set when in SelectProperty. - wxPG_FL_IN_SELECT_PROPERTY = 0x00100000, - // Set when help string is shown in status bar - wxPG_FL_STRING_IN_STATUSBAR = 0x00200000, - // Auto sort is enabled (for categorized mode) - wxPG_FL_CATMODE_AUTO_SORT = 0x01000000, - // Set after page has been inserted to manager - wxPG_MAN_FL_PAGE_INSERTED = 0x02000000, - // Active editor control is abnormally large - wxPG_FL_ABNORMAL_EDITOR = 0x04000000, - // Recursion guard for HandleCustomEditorEvent - wxPG_FL_IN_HANDLECUSTOMEDITOREVENT = 0x08000000, - wxPG_FL_VALUE_CHANGE_IN_EVENT = 0x10000000, - // Editor control width should not change on resize - wxPG_FL_FIXED_WIDTH_EDITOR = 0x20000000, - // Width of panel can be different from width of grid - wxPG_FL_HAS_VIRTUAL_WIDTH = 0x40000000, - // Prevents RecalculateVirtualSize re-entrancy - wxPG_FL_RECALCULATING_VIRTUAL_SIZE = 0x80000000 -}; - #if !defined(__wxPG_SOURCE_FILE__) // Reduce compile time, but still include in user app #include "wx/propgrid/props.h" @@ -1260,6 +1209,52 @@ public: // Mostly useful for page switching. void SwitchState( wxPropertyGridPageState* pNewState ); + // Internal flags + enum wxPG_INTERNAL_FLAGS : long + { + wxPG_FL_INITIALIZED = 0x0001, + // Set when creating editor controls if it was clicked on. + wxPG_FL_ACTIVATION_BY_CLICK = 0x0002, + wxPG_FL_FOCUSED = 0x0004, + wxPG_FL_MOUSE_CAPTURED = 0x0008, + wxPG_FL_MOUSE_INSIDE = 0x0010, + wxPG_FL_VALUE_MODIFIED = 0x0020, + // don't clear background of m_wndEditor + wxPG_FL_PRIMARY_FILLS_ENTIRE = 0x0040, + // currently active editor uses custom image + wxPG_FL_CUR_USES_CUSTOM_IMAGE = 0x0080, + // cell colours override selection colours for selected cell + wxPG_FL_CELL_OVERRIDES_SEL = 0x0100, + wxPG_FL_SCROLLED = 0x0200, + // set when all added/inserted properties get hideable flag + wxPG_FL_ADDING_HIDEABLES = 0x0400, + // Disables showing help strings on statusbar. + wxPG_FL_NOSTATUSBARHELP = 0x0800, + // Marks that we created the state, so we have to destroy it too. + wxPG_FL_CREATEDSTATE = 0x1000, + // Set if contained in wxPropertyGridManager + wxPG_FL_IN_MANAGER = 0x2000, + // Set after wxPropertyGrid is shown in its initial good size + wxPG_FL_GOOD_SIZE_SET = 0x4000, + // Set when in SelectProperty. + wxPG_FL_IN_SELECT_PROPERTY = 0x8000, + // Set when help string is shown in status bar + wxPG_FL_STRING_IN_STATUSBAR = 0x00010000, + // Auto sort is enabled (for categorized mode) + wxPG_FL_CATMODE_AUTO_SORT = 0x00020000, + // Active editor control is abnormally large + wxPG_FL_ABNORMAL_EDITOR = 0x00040000, + // Recursion guard for HandleCustomEditorEvent + wxPG_FL_IN_HANDLECUSTOMEDITOREVENT = 0x00080000, + wxPG_FL_VALUE_CHANGE_IN_EVENT = 0x00100000, + // Editor control width should not change on resize + wxPG_FL_FIXED_WIDTH_EDITOR = 0x00200000, + // Width of panel can be different from width of grid + wxPG_FL_HAS_VIRTUAL_WIDTH = 0x00400000, + // Prevents RecalculateVirtualSize re-entrancy + wxPG_FL_RECALCULATING_VIRTUAL_SIZE = 0x00800000 + }; + long GetInternalFlags() const { return m_iFlags; } bool HasInternalFlag( long flag ) const { return (m_iFlags & flag) != 0; } @@ -2224,28 +2219,6 @@ protected: // ----------------------------------------------------------------------- -// -// Undefine macros that are not needed outside propertygrid sources -// -#ifndef __wxPG_SOURCE_FILE__ - #undef wxPG_FL_DESC_REFRESH_REQUIRED - #undef wxPG_FL_CREATEDSTATE - #undef wxPG_FL_NOSTATUSBARHELP - #undef wxPG_FL_SCROLLED - #undef wxPG_FL_CUR_USES_CUSTOM_IMAGE - #undef wxPG_FL_PRIMARY_FILLS_ENTIRE - #undef wxPG_FL_VALUE_MODIFIED - #undef wxPG_FL_MOUSE_INSIDE - #undef wxPG_FL_FOCUSED - #undef wxPG_FL_MOUSE_CAPTURED - #undef wxPG_FL_INITIALIZED - #undef wxPG_FL_ACTIVATION_BY_CLICK - #undef wxPG_ICON_WIDTH - #undef wxPG_USE_RENDERER_NATIVE -#endif - -// ----------------------------------------------------------------------- - #endif #endif // _WX_PROPGRID_PROPGRID_H_ diff --git a/src/propgrid/advprops.cpp b/src/propgrid/advprops.cpp index cb2f4f686e..a9580a2122 100644 --- a/src/propgrid/advprops.cpp +++ b/src/propgrid/advprops.cpp @@ -1139,7 +1139,7 @@ bool wxSystemColourProperty::QueryColourFromUser( wxVariant& variant ) const wxASSERT( propgrid ); // Must only occur when user triggers event - if ( !propgrid->HasInternalFlag(wxPG_FL_IN_HANDLECUSTOMEDITOREVENT) ) + if ( !propgrid->HasInternalFlag(wxPropertyGrid::wxPG_FL_IN_HANDLECUSTOMEDITOREVENT) ) return res; wxColourPropertyValue val = GetVal(); diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index 6be641df03..48004b4f65 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -1107,7 +1107,7 @@ bool wxPGChoiceEditor::OnEvent( wxPropertyGrid* propGrid, wxPGProperty* property if ( propGrid->GetUnspecifiedCommonValue() == cmnValIndex ) { if ( !property->IsValueUnspecified() ) - propGrid->SetInternalFlag(wxPG_FL_VALUE_CHANGE_IN_EVENT); + propGrid->SetInternalFlag(wxPropertyGrid::wxPG_FL_VALUE_CHANGE_IN_EVENT); property->SetValueToUnspecified(); if ( !cb->HasFlag(wxCB_READONLY) ) { @@ -1616,7 +1616,7 @@ wxPGWindowList wxPGCheckBoxEditor::CreateControls( wxPropertyGrid* propGrid, if ( !property->IsValueUnspecified() ) { - if ( propGrid->HasInternalFlag(wxPG_FL_ACTIVATION_BY_CLICK) ) + if ( propGrid->HasInternalFlag(wxPropertyGrid::wxPG_FL_ACTIVATION_BY_CLICK) ) { // Send the event to toggle the value (if mouse cursor is on the item) wxPoint point = cb->ScreenToClient(::wxGetMousePosition()); @@ -1628,7 +1628,7 @@ wxPGWindowList wxPGCheckBoxEditor::CreateControls( wxPropertyGrid* propGrid, } } - propGrid->SetInternalFlag( wxPG_FL_FIXED_WIDTH_EDITOR ); + propGrid->SetInternalFlag(wxPropertyGrid::wxPG_FL_FIXED_WIDTH_EDITOR); return cb; } diff --git a/src/propgrid/manager.cpp b/src/propgrid/manager.cpp index 678832bb95..471d59c11d 100644 --- a/src/propgrid/manager.cpp +++ b/src/propgrid/manager.cpp @@ -39,17 +39,17 @@ // when using custom controls #define BEGIN_MOUSE_CAPTURE \ - if ( !(m_iFlags & wxPG_FL_MOUSE_CAPTURED) ) \ + if ( !(m_iFlags & wxPG_MAN_FL_MOUSE_CAPTURED) ) \ { \ CaptureMouse(); \ - m_iFlags |= wxPG_FL_MOUSE_CAPTURED; \ + m_iFlags |= wxPG_MAN_FL_MOUSE_CAPTURED; \ } #define END_MOUSE_CAPTURE \ - if ( m_iFlags & wxPG_FL_MOUSE_CAPTURED ) \ + if ( m_iFlags & wxPG_MAN_FL_MOUSE_CAPTURED ) \ { \ ReleaseMouse(); \ - m_iFlags &= ~(wxPG_FL_MOUSE_CAPTURED); \ + m_iFlags &= ~(wxPG_MAN_FL_MOUSE_CAPTURED); \ } // ----------------------------------------------------------------------- @@ -571,6 +571,17 @@ private: // wxPropertyGridManager // ----------------------------------------------------------------------- +// Internal flags +enum wxPGMAN_INTERNAL_FLAGS : long +{ + wxPG_MAN_FL_INITIALIZED = 0x0001, + wxPG_MAN_FL_MOUSE_CAPTURED = 0x0002, + // Set if wxPGMan requires redrawing of description text box. + wxPG_MAN_FL_DESC_REFRESH_REQUIRED = 0x0004, + // Set after page has been inserted to manager + wxPG_MAN_FL_PAGE_INSERTED = 0x0008 +}; + // Final default splitter y is client height minus this. #define wxPGMAN_DEFAULT_NEGATIVE_SPLITTER_Y 100 @@ -689,7 +700,7 @@ constexpr long wxPG_MAN_PASS_FLAGS_MASK = wxPG_WINDOW_STYLE_MASK | wxTAB_TRAVERS void wxPropertyGridManager::Init2( int style ) { - if ( m_iFlags & wxPG_FL_INITIALIZED ) + if ( m_iFlags & wxPG_MAN_FL_INITIALIZED ) return; m_windowStyle |= (style & wxPG_WINDOW_STYLE_MASK); @@ -742,7 +753,7 @@ void wxPropertyGridManager::Init2( int style ) m_pPropGrid->SetId(useId); - m_pPropGrid->SetInternalFlag(wxPG_FL_IN_MANAGER); + m_pPropGrid->SetInternalFlag(wxPropertyGrid::wxPG_FL_IN_MANAGER); m_pState = m_pPropGrid->m_pState; @@ -762,7 +773,7 @@ void wxPropertyGridManager::Init2( int style ) // Optional initial controls. m_width = -12345; - m_iFlags |= wxPG_FL_INITIALIZED; + m_iFlags |= wxPG_MAN_FL_INITIALIZED; } @@ -935,7 +946,7 @@ bool wxPropertyGridManager::DoSelectPage( int index ) nextPage = m_emptyPage; } - m_iFlags |= wxPG_FL_DESC_REFRESH_REQUIRED; + m_iFlags |= wxPG_MAN_FL_DESC_REFRESH_REQUIRED; m_pPropGrid->SwitchState( nextPage->GetStatePtr() ); @@ -1491,7 +1502,7 @@ void wxPropertyGridManager::UpdateDescriptionBox( int new_splittery, int new_wid m_splitterY = new_splittery; - m_iFlags &= ~(wxPG_FL_DESC_REFRESH_REQUIRED); + m_iFlags &= ~(wxPG_MAN_FL_DESC_REFRESH_REQUIRED); } // ----------------------------------------------------------------------- @@ -1558,7 +1569,7 @@ void wxPropertyGridManager::RecalculatePositions( int width, int height ) UpdateDescriptionBox( new_splittery, width, height ); } - if ( m_iFlags & wxPG_FL_INITIALIZED ) + if ( m_iFlags & wxPG_MAN_FL_INITIALIZED ) { int pgh = propgridBottomY - propgridY; if ( pgh < 0 ) @@ -1833,7 +1844,7 @@ void wxPropertyGridManager::RecreateControls() if ( m_windowStyle & wxPG_DESCRIPTION ) { // Has help box. - m_pPropGrid->SetInternalFlag(wxPG_FL_NOSTATUSBARHELP); + m_pPropGrid->SetInternalFlag(wxPropertyGrid::wxPG_FL_NOSTATUSBARHELP); if ( !m_pTxtHelpCaption ) { @@ -1862,7 +1873,7 @@ void wxPropertyGridManager::RecreateControls() else { // No help box. - m_pPropGrid->ClearInternalFlag(wxPG_FL_NOSTATUSBARHELP); + m_pPropGrid->ClearInternalFlag(wxPropertyGrid::wxPG_FL_NOSTATUSBARHELP); if ( m_pTxtHelpCaption ) m_pTxtHelpCaption->Destroy(); @@ -1928,7 +1939,7 @@ void wxPropertyGridManager::OnToolbarClick( wxCommandEvent &event ) // Categorized mode. if ( m_pPropGrid->HasFlag(wxPG_HIDE_CATEGORIES) ) { - if ( !m_pPropGrid->HasInternalFlag(wxPG_FL_CATMODE_AUTO_SORT) ) + if ( !m_pPropGrid->HasInternalFlag(wxPropertyGrid::wxPG_FL_CATMODE_AUTO_SORT) ) m_pPropGrid->m_windowStyle &= ~wxPG_AUTO_SORT; m_pPropGrid->EnableCategories( true ); } @@ -1939,9 +1950,9 @@ void wxPropertyGridManager::OnToolbarClick( wxCommandEvent &event ) if ( !m_pPropGrid->HasFlag(wxPG_HIDE_CATEGORIES) ) { if ( m_pPropGrid->HasFlag(wxPG_AUTO_SORT) ) - m_pPropGrid->SetInternalFlag(wxPG_FL_CATMODE_AUTO_SORT); + m_pPropGrid->SetInternalFlag(wxPropertyGrid::wxPG_FL_CATMODE_AUTO_SORT); else - m_pPropGrid->ClearInternalFlag(wxPG_FL_CATMODE_AUTO_SORT); + m_pPropGrid->ClearInternalFlag(wxPropertyGrid::wxPG_FL_CATMODE_AUTO_SORT); m_pPropGrid->m_windowStyle |= wxPG_AUTO_SORT; m_pPropGrid->EnableCategories( false ); diff --git a/src/propgrid/property.cpp b/src/propgrid/property.cpp index 2176221419..7d28e6b10c 100644 --- a/src/propgrid/property.cpp +++ b/src/propgrid/property.cpp @@ -604,7 +604,7 @@ void wxPGProperty::InitAfterAdded( wxPropertyGridPageState* pageState, // make this one hideable. if ( ( !parentIsRoot && parent->HasFlag(wxPG_PROP_HIDDEN) ) || - ( propgrid && (propgrid->HasInternalFlag(wxPG_FL_ADDING_HIDEABLES)) ) + ( propgrid && (propgrid->HasInternalFlag(wxPropertyGrid::wxPG_FL_ADDING_HIDEABLES)) ) ) SetFlag( wxPG_PROP_HIDDEN );