X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f525476870e4baa3e5d303d94d8bc70026603b4c..04fa04d8067d235ab45b5bc05b65f0679634b541:/src/propgrid/manager.cpp diff --git a/src/propgrid/manager.cpp b/src/propgrid/manager.cpp index 0b148c403e..2030ec2ea3 100644 --- a/src/propgrid/manager.cpp +++ b/src/propgrid/manager.cpp @@ -6,7 +6,7 @@ // Created: 2005-01-14 // RCS-ID: $Id$ // Copyright: (c) Jaakko Salli -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx/wx.h". @@ -411,12 +411,6 @@ private: IMPLEMENT_CLASS(wxPropertyGridManager, wxPanel) -#define ID_ADVTOOLBAR_OFFSET 1 -#define ID_ADVHELPCAPTION_OFFSET 2 -#define ID_ADVHELPCONTENT_OFFSET 3 -#define ID_ADVHEADERCTRL_OFFSET 4 -#define ID_ADVTBITEMSBASE_OFFSET 5 // Must be last. - // ----------------------------------------------------------------------- BEGIN_EVENT_TABLE(wxPropertyGridManager, wxPanel) @@ -508,6 +502,9 @@ void wxPropertyGridManager::Init1() m_nextDescBoxSize = -1; + m_categorizedModeToolId = -1; + m_alphabeticModeToolId = -1; + m_extraHeight = 0; m_dragStatus = 0; m_onSplitter = 0; @@ -555,8 +552,6 @@ void wxPropertyGridManager::Init2( int style ) if ( baseId < 0 ) baseId = wxPG_MAN_ALTERNATE_BASE_ID; - m_baseId = baseId; - #ifdef __WXMAC__ // Smaller controls on Mac SetWindowVariant(wxWINDOW_VARIANT_SMALL); @@ -590,9 +585,6 @@ void wxPropertyGridManager::Init2( int style ) m_pPropGrid->SetExtraStyle(wxPG_EX_INIT_NOCAT); - m_nextTbInd = baseId+ID_ADVTBITEMSBASE_OFFSET + 2; - - // Connect to property grid onselect event. // NB: Even if wxID_ANY is used, this doesn't connect properly in wxPython // (see wxPropertyGridManager::ProcessEvent). @@ -604,11 +596,6 @@ void wxPropertyGridManager::Init2( int style ) wxEVT_PG_COL_DRAGGING, wxPropertyGridEventHandler(wxPropertyGridManager::OnPGColDrag)); - // Connect to toolbar button events. - Connect(baseId+ID_ADVTBITEMSBASE_OFFSET,baseId+ID_ADVTBITEMSBASE_OFFSET+50, - wxEVT_COMMAND_TOOL_CLICKED, - wxCommandEventHandler(wxPropertyGridManager::OnToolbarClick) ); - // Optional initial controls. m_width = -12345; @@ -623,8 +610,7 @@ wxPropertyGridManager::~wxPropertyGridManager() END_MOUSE_CAPTURE //m_pPropGrid->ClearSelection(); - delete m_pPropGrid; - m_pPropGrid = NULL; + wxDELETE(m_pPropGrid); size_t i; for ( i=0; i= 0 ) - m_pToolbar->ToggleTool( nextPage->m_id, true ); + m_pToolbar->ToggleTool( nextPage->m_toolId, true ); else - m_pToolbar->ToggleTool( prevPage->m_id, false ); + m_pToolbar->ToggleTool( prevPage->m_toolId, false ); } #endif @@ -882,9 +868,6 @@ void wxPropertyGridManager::Clear() for ( i=(int)GetPageCount()-1; i>=0; i-- ) RemovePage(i); - // Reset toolbar ids - m_nextTbInd = m_baseId+ID_ADVTBITEMSBASE_OFFSET + 2; - m_pPropGrid->Thaw(); } @@ -1003,14 +986,14 @@ wxPropertyGridPage* wxPropertyGridManager::InsertPage( int index, state->InitNonCatMode(); } - if ( label.length() ) + if ( !label.empty() ) { wxASSERT_MSG( !pageObj->m_label.length(), wxT("If page label is given in constructor, empty label must be given in AddPage")); pageObj->m_label = label; } - pageObj->m_id = m_nextTbInd; + pageObj->m_toolId = -1; if ( !HasFlag(wxPG_SPLITTER_AUTO_CENTER) ) pageObj->m_dontCenterSplitter = true; @@ -1033,14 +1016,23 @@ wxPropertyGridPage* wxPropertyGridManager::InsertPage( int index, m_pToolbar->GetToolsCount() < 3 ) m_pToolbar->AddSeparator(); + wxToolBarToolBase* tool; + if ( &bmp != &wxNullBitmap ) - m_pToolbar->AddTool(m_nextTbInd,label,bmp,label,wxITEM_RADIO); - //m_pToolbar->InsertTool(index+3,m_nextTbInd,bmp); + tool = m_pToolbar->AddTool(wxID_ANY, label, bmp, + label, wxITEM_RADIO); else - m_pToolbar->AddTool(m_nextTbInd,label,wxBitmap(gs_xpm_defpage), - label,wxITEM_RADIO); + tool = m_pToolbar->AddTool(wxID_ANY, label, + wxBitmap(gs_xpm_defpage), + label, wxITEM_RADIO); - m_nextTbInd++; + pageObj->m_toolId = tool->GetId(); + + // Connect to toolbar button events. + Connect(pageObj->m_toolId, + wxEVT_COMMAND_TOOL_CLICKED, + wxCommandEventHandler( + wxPropertyGridManager::OnToolbarClick)); m_pToolbar->Realize(); } @@ -1462,10 +1454,6 @@ void wxPropertyGridManager::RecreateControls() if ( was_shown ) Show ( false ); - wxWindowID baseId = m_pPropGrid->GetId(); - if ( baseId < 0 ) - baseId = wxPG_MAN_ALTERNATE_BASE_ID; - #if wxUSE_TOOLBAR if ( m_windowStyle & wxPG_TOOLBAR ) { @@ -1476,8 +1464,9 @@ void wxPropertyGridManager::RecreateControls() if (GetExtraStyle() & wxPG_EX_NO_TOOLBAR_DIVIDER) toolBarFlags |= wxTB_NODIVIDER; - m_pToolbar = new wxToolBar(this,baseId+ID_ADVTOOLBAR_OFFSET, - wxDefaultPosition,wxDefaultSize, + m_pToolbar = new wxToolBar(this, wxID_ANY, + wxDefaultPosition, + wxDefaultSize, toolBarFlags); m_pToolbar->SetToolBitmapSize(wxSize(16, 15)); @@ -1504,32 +1493,62 @@ void wxPropertyGridManager::RecreateControls() { wxString desc1(_("Categorized Mode")); wxString desc2(_("Alphabetic Mode")); - m_pToolbar->AddTool(baseId+ID_ADVTBITEMSBASE_OFFSET+0, - desc1,wxBitmap (gs_xpm_catmode), - desc1,wxITEM_RADIO); - m_pToolbar->AddTool(baseId+ID_ADVTBITEMSBASE_OFFSET+1, - desc2,wxBitmap (gs_xpm_noncatmode), - desc2,wxITEM_RADIO); + + wxToolBarToolBase* tool; + + tool = m_pToolbar->AddTool(wxID_ANY, + desc1, + wxBitmap(gs_xpm_catmode), + desc1, + wxITEM_RADIO); + m_categorizedModeToolId = tool->GetId(); + + tool = m_pToolbar->AddTool(wxID_ANY, + desc2, + wxBitmap(gs_xpm_noncatmode), + desc2, + wxITEM_RADIO); + m_alphabeticModeToolId = tool->GetId(); + m_pToolbar->Realize(); + + Connect(m_categorizedModeToolId, + wxEVT_COMMAND_TOOL_CLICKED, + wxCommandEventHandler( + wxPropertyGridManager::OnToolbarClick)); + Connect(m_alphabeticModeToolId, + wxEVT_COMMAND_TOOL_CLICKED, + wxCommandEventHandler( + wxPropertyGridManager::OnToolbarClick)); + } + else + { + m_categorizedModeToolId = -1; + m_alphabeticModeToolId = -1; } } - if ( (GetExtraStyle()&wxPG_EX_MODE_BUTTONS) ) + if ( (GetExtraStyle() & wxPG_EX_MODE_BUTTONS) ) { // Toggle correct mode button. // TODO: This doesn't work in wxMSW (when changing, // both items will get toggled). - int toggle_but_on_ind = ID_ADVTBITEMSBASE_OFFSET+0; - int toggle_but_off_ind = ID_ADVTBITEMSBASE_OFFSET+1; + int toggle_but_on_ind; + int toggle_but_off_ind; if ( m_pPropGrid->m_pState->IsInNonCatMode() ) { - toggle_but_on_ind++; - toggle_but_off_ind--; + toggle_but_on_ind = m_alphabeticModeToolId; + toggle_but_off_ind = m_categorizedModeToolId; + } + else + { + toggle_but_on_ind = m_categorizedModeToolId; + toggle_but_off_ind = m_alphabeticModeToolId; } - m_pToolbar->ToggleTool(baseId+toggle_but_on_ind,true); - m_pToolbar->ToggleTool(baseId+toggle_but_off_ind,false); + m_pToolbar->ToggleTool(toggle_but_on_ind, true); + m_pToolbar->ToggleTool(toggle_but_off_ind, false); } } @@ -1550,7 +1569,7 @@ void wxPropertyGridManager::RecreateControls() if ( !m_pHeaderCtrl ) { hc = new wxPGHeaderCtrl(this); - hc->Create(this, baseId+ID_ADVHEADERCTRL_OFFSET); + hc->Create(this, wxID_ANY); m_pHeaderCtrl = hc; } else @@ -1575,7 +1594,7 @@ void wxPropertyGridManager::RecreateControls() if ( !m_pTxtHelpCaption ) { m_pTxtHelpCaption = new wxStaticText(this, - baseId+ID_ADVHELPCAPTION_OFFSET, + wxID_ANY, wxT(""), wxDefaultPosition, wxDefaultSize, @@ -1586,7 +1605,7 @@ void wxPropertyGridManager::RecreateControls() if ( !m_pTxtHelpContent ) { m_pTxtHelpContent = new wxStaticText(this, - baseId+ID_ADVHELPCONTENT_OFFSET, + wxID_ANY, wxT(""), wxDefaultPosition, wxDefaultSize, @@ -1659,69 +1678,60 @@ bool wxPropertyGridManager::EnsureVisible( wxPGPropArg id ) void wxPropertyGridManager::OnToolbarClick( wxCommandEvent &event ) { int id = event.GetId(); - if ( id >= 0 ) - { - int baseId = m_pPropGrid->GetId(); - if ( baseId < 0 ) - baseId = wxPG_MAN_ALTERNATE_BASE_ID; - if ( id == ( baseId + ID_ADVTBITEMSBASE_OFFSET + 0 ) ) + if ( id == m_categorizedModeToolId ) + { + // Categorized mode. + if ( m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES ) { - // Categorized mode. - if ( m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES ) - { - if ( !m_pPropGrid->HasInternalFlag(wxPG_FL_CATMODE_AUTO_SORT) ) - m_pPropGrid->m_windowStyle &= ~wxPG_AUTO_SORT; - m_pPropGrid->EnableCategories( true ); - } + if ( !m_pPropGrid->HasInternalFlag(wxPG_FL_CATMODE_AUTO_SORT) ) + m_pPropGrid->m_windowStyle &= ~wxPG_AUTO_SORT; + m_pPropGrid->EnableCategories( true ); } - else if ( id == ( baseId + ID_ADVTBITEMSBASE_OFFSET + 1 ) ) + } + else if ( id == m_alphabeticModeToolId ) + { + // Alphabetic mode. + if ( !(m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES) ) { - // Alphabetic mode. - if ( !(m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES) ) - { - if ( m_pPropGrid->HasFlag(wxPG_AUTO_SORT) ) - m_pPropGrid->SetInternalFlag(wxPG_FL_CATMODE_AUTO_SORT); - else - m_pPropGrid->ClearInternalFlag(wxPG_FL_CATMODE_AUTO_SORT); + if ( m_pPropGrid->HasFlag(wxPG_AUTO_SORT) ) + m_pPropGrid->SetInternalFlag(wxPG_FL_CATMODE_AUTO_SORT); + else + m_pPropGrid->ClearInternalFlag(wxPG_FL_CATMODE_AUTO_SORT); - m_pPropGrid->m_windowStyle |= wxPG_AUTO_SORT; - m_pPropGrid->EnableCategories( false ); - } + m_pPropGrid->m_windowStyle |= wxPG_AUTO_SORT; + m_pPropGrid->EnableCategories( false ); } - else - { - // Page Switching. + } + else + { + // Page Switching. - int index = -1; - size_t i; - wxPropertyGridPage* pdc; + int index = -1; + size_t i; + wxPropertyGridPage* pdc; - // Find page with given id. - for ( i=0; im_toolId == id ) { - pdc = m_arrPages[i]; - if ( pdc->m_id == id ) - { - index = i; - break; - } + index = i; + break; } + } - wxASSERT( index >= 0 ); - - if ( DoSelectPage( index ) ) - { - - // Event dispatching must be last. - m_pPropGrid->SendEvent( wxEVT_PG_PAGE_CHANGED, NULL ); - - } - else - { - // TODO: Depress the old button on toolbar. - } + wxASSERT( index >= 0 ); + if ( DoSelectPage( index ) ) + { + // Event dispatching must be last. + m_pPropGrid->SendEvent( wxEVT_PG_PAGE_CHANGED, NULL ); + } + else + { + // TODO: Depress the old button on toolbar. } } }