No longer use semi-static IDs for wxPropertyGrid embedded controls and tool bar tools.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66456 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2010-12-27 11:17:40 +00:00
parent a46cbd24b4
commit 538f4dd82b
2 changed files with 123 additions and 110 deletions

View File

@@ -128,7 +128,7 @@ public:
*/ */
int GetToolId() const int GetToolId() const
{ {
return m_id; return m_toolId;
} }
/** Do any member initialization in this method. /** Do any member initialization in this method.
@@ -176,7 +176,9 @@ protected:
wxPropertyGridManager* m_manager; wxPropertyGridManager* m_manager;
int m_id; // toolbar index // Toolbar tool id. Note that this is only valid when the tool bar
// exists.
int m_toolId;
private: private:
bool m_isDefault; // is this base page object? bool m_isDefault; // is this base page object?
@@ -688,15 +690,15 @@ protected:
int m_splitterHeight; int m_splitterHeight;
int m_nextTbInd;
int m_dragOffset; int m_dragOffset;
wxCursor m_cursorSizeNS; wxCursor m_cursorSizeNS;
int m_nextDescBoxSize; int m_nextDescBoxSize;
wxWindowID m_baseId; // Toolbar tool ids for categorized and alphabetic mode selectors.
int m_categorizedModeToolId;
int m_alphabeticModeToolId;
unsigned char m_dragStatus; unsigned char m_dragStatus;

View File

@@ -411,12 +411,6 @@ private:
IMPLEMENT_CLASS(wxPropertyGridManager, wxPanel) 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) BEGIN_EVENT_TABLE(wxPropertyGridManager, wxPanel)
@@ -508,6 +502,9 @@ void wxPropertyGridManager::Init1()
m_nextDescBoxSize = -1; m_nextDescBoxSize = -1;
m_categorizedModeToolId = -1;
m_alphabeticModeToolId = -1;
m_extraHeight = 0; m_extraHeight = 0;
m_dragStatus = 0; m_dragStatus = 0;
m_onSplitter = 0; m_onSplitter = 0;
@@ -555,8 +552,6 @@ void wxPropertyGridManager::Init2( int style )
if ( baseId < 0 ) if ( baseId < 0 )
baseId = wxPG_MAN_ALTERNATE_BASE_ID; baseId = wxPG_MAN_ALTERNATE_BASE_ID;
m_baseId = baseId;
#ifdef __WXMAC__ #ifdef __WXMAC__
// Smaller controls on Mac // Smaller controls on Mac
SetWindowVariant(wxWINDOW_VARIANT_SMALL); SetWindowVariant(wxWINDOW_VARIANT_SMALL);
@@ -590,9 +585,6 @@ void wxPropertyGridManager::Init2( int style )
m_pPropGrid->SetExtraStyle(wxPG_EX_INIT_NOCAT); m_pPropGrid->SetExtraStyle(wxPG_EX_INIT_NOCAT);
m_nextTbInd = baseId+ID_ADVTBITEMSBASE_OFFSET + 2;
// Connect to property grid onselect event. // Connect to property grid onselect event.
// NB: Even if wxID_ANY is used, this doesn't connect properly in wxPython // NB: Even if wxID_ANY is used, this doesn't connect properly in wxPython
// (see wxPropertyGridManager::ProcessEvent). // (see wxPropertyGridManager::ProcessEvent).
@@ -604,11 +596,6 @@ void wxPropertyGridManager::Init2( int style )
wxEVT_PG_COL_DRAGGING, wxEVT_PG_COL_DRAGGING,
wxPropertyGridEventHandler(wxPropertyGridManager::OnPGColDrag)); 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. // Optional initial controls.
m_width = -12345; m_width = -12345;
@@ -796,9 +783,9 @@ bool wxPropertyGridManager::DoSelectPage( int index )
if ( m_pToolbar ) if ( m_pToolbar )
{ {
if ( index >= 0 ) if ( index >= 0 )
m_pToolbar->ToggleTool( nextPage->m_id, true ); m_pToolbar->ToggleTool( nextPage->m_toolId, true );
else else
m_pToolbar->ToggleTool( prevPage->m_id, false ); m_pToolbar->ToggleTool( prevPage->m_toolId, false );
} }
#endif #endif
@@ -881,9 +868,6 @@ void wxPropertyGridManager::Clear()
for ( i=(int)GetPageCount()-1; i>=0; i-- ) for ( i=(int)GetPageCount()-1; i>=0; i-- )
RemovePage(i); RemovePage(i);
// Reset toolbar ids
m_nextTbInd = m_baseId+ID_ADVTBITEMSBASE_OFFSET + 2;
m_pPropGrid->Thaw(); m_pPropGrid->Thaw();
} }
@@ -1009,7 +993,7 @@ wxPropertyGridPage* wxPropertyGridManager::InsertPage( int index,
pageObj->m_label = label; pageObj->m_label = label;
} }
pageObj->m_id = m_nextTbInd; pageObj->m_toolId = -1;
if ( !HasFlag(wxPG_SPLITTER_AUTO_CENTER) ) if ( !HasFlag(wxPG_SPLITTER_AUTO_CENTER) )
pageObj->m_dontCenterSplitter = true; pageObj->m_dontCenterSplitter = true;
@@ -1032,14 +1016,23 @@ wxPropertyGridPage* wxPropertyGridManager::InsertPage( int index,
m_pToolbar->GetToolsCount() < 3 ) m_pToolbar->GetToolsCount() < 3 )
m_pToolbar->AddSeparator(); m_pToolbar->AddSeparator();
if ( &bmp != &wxNullBitmap ) wxToolBarToolBase* tool;
m_pToolbar->AddTool(m_nextTbInd,label,bmp,label,wxITEM_RADIO);
//m_pToolbar->InsertTool(index+3,m_nextTbInd,bmp);
else
m_pToolbar->AddTool(m_nextTbInd,label,wxBitmap(gs_xpm_defpage),
label,wxITEM_RADIO);
m_nextTbInd++; if ( &bmp != &wxNullBitmap )
tool = m_pToolbar->AddTool(wxID_ANY, label, bmp,
label, wxITEM_RADIO);
else
tool = m_pToolbar->AddTool(wxID_ANY, label,
wxBitmap(gs_xpm_defpage),
label, wxITEM_RADIO);
pageObj->m_toolId = tool->GetId();
// Connect to toolbar button events.
Connect(pageObj->m_toolId,
wxEVT_COMMAND_TOOL_CLICKED,
wxCommandEventHandler(
wxPropertyGridManager::OnToolbarClick));
m_pToolbar->Realize(); m_pToolbar->Realize();
} }
@@ -1461,10 +1454,6 @@ void wxPropertyGridManager::RecreateControls()
if ( was_shown ) if ( was_shown )
Show ( false ); Show ( false );
wxWindowID baseId = m_pPropGrid->GetId();
if ( baseId < 0 )
baseId = wxPG_MAN_ALTERNATE_BASE_ID;
#if wxUSE_TOOLBAR #if wxUSE_TOOLBAR
if ( m_windowStyle & wxPG_TOOLBAR ) if ( m_windowStyle & wxPG_TOOLBAR )
{ {
@@ -1475,8 +1464,9 @@ void wxPropertyGridManager::RecreateControls()
if (GetExtraStyle() & wxPG_EX_NO_TOOLBAR_DIVIDER) if (GetExtraStyle() & wxPG_EX_NO_TOOLBAR_DIVIDER)
toolBarFlags |= wxTB_NODIVIDER; toolBarFlags |= wxTB_NODIVIDER;
m_pToolbar = new wxToolBar(this,baseId+ID_ADVTOOLBAR_OFFSET, m_pToolbar = new wxToolBar(this, wxID_ANY,
wxDefaultPosition,wxDefaultSize, wxDefaultPosition,
wxDefaultSize,
toolBarFlags); toolBarFlags);
m_pToolbar->SetToolBitmapSize(wxSize(16, 15)); m_pToolbar->SetToolBitmapSize(wxSize(16, 15));
@@ -1503,32 +1493,62 @@ void wxPropertyGridManager::RecreateControls()
{ {
wxString desc1(_("Categorized Mode")); wxString desc1(_("Categorized Mode"));
wxString desc2(_("Alphabetic Mode")); wxString desc2(_("Alphabetic Mode"));
m_pToolbar->AddTool(baseId+ID_ADVTBITEMSBASE_OFFSET+0,
desc1,wxBitmap (gs_xpm_catmode), wxToolBarToolBase* tool;
desc1,wxITEM_RADIO);
m_pToolbar->AddTool(baseId+ID_ADVTBITEMSBASE_OFFSET+1, tool = m_pToolbar->AddTool(wxID_ANY,
desc2,wxBitmap (gs_xpm_noncatmode), desc1,
desc2,wxITEM_RADIO); 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(); 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. // Toggle correct mode button.
// TODO: This doesn't work in wxMSW (when changing, // TODO: This doesn't work in wxMSW (when changing,
// both items will get toggled). // both items will get toggled).
int toggle_but_on_ind = ID_ADVTBITEMSBASE_OFFSET+0; int toggle_but_on_ind;
int toggle_but_off_ind = ID_ADVTBITEMSBASE_OFFSET+1; int toggle_but_off_ind;
if ( m_pPropGrid->m_pState->IsInNonCatMode() ) if ( m_pPropGrid->m_pState->IsInNonCatMode() )
{ {
toggle_but_on_ind++; toggle_but_on_ind = m_alphabeticModeToolId;
toggle_but_off_ind--; 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(toggle_but_on_ind, true);
m_pToolbar->ToggleTool(baseId+toggle_but_off_ind,false); m_pToolbar->ToggleTool(toggle_but_off_ind, false);
} }
} }
@@ -1549,7 +1569,7 @@ void wxPropertyGridManager::RecreateControls()
if ( !m_pHeaderCtrl ) if ( !m_pHeaderCtrl )
{ {
hc = new wxPGHeaderCtrl(this); hc = new wxPGHeaderCtrl(this);
hc->Create(this, baseId+ID_ADVHEADERCTRL_OFFSET); hc->Create(this, wxID_ANY);
m_pHeaderCtrl = hc; m_pHeaderCtrl = hc;
} }
else else
@@ -1574,7 +1594,7 @@ void wxPropertyGridManager::RecreateControls()
if ( !m_pTxtHelpCaption ) if ( !m_pTxtHelpCaption )
{ {
m_pTxtHelpCaption = new wxStaticText(this, m_pTxtHelpCaption = new wxStaticText(this,
baseId+ID_ADVHELPCAPTION_OFFSET, wxID_ANY,
wxT(""), wxT(""),
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,
@@ -1585,7 +1605,7 @@ void wxPropertyGridManager::RecreateControls()
if ( !m_pTxtHelpContent ) if ( !m_pTxtHelpContent )
{ {
m_pTxtHelpContent = new wxStaticText(this, m_pTxtHelpContent = new wxStaticText(this,
baseId+ID_ADVHELPCONTENT_OFFSET, wxID_ANY,
wxT(""), wxT(""),
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,
@@ -1658,69 +1678,60 @@ bool wxPropertyGridManager::EnsureVisible( wxPGPropArg id )
void wxPropertyGridManager::OnToolbarClick( wxCommandEvent &event ) void wxPropertyGridManager::OnToolbarClick( wxCommandEvent &event )
{ {
int id = event.GetId(); 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->HasInternalFlag(wxPG_FL_CATMODE_AUTO_SORT) )
if ( m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES ) m_pPropGrid->m_windowStyle &= ~wxPG_AUTO_SORT;
m_pPropGrid->EnableCategories( true );
}
}
else if ( id == m_alphabeticModeToolId )
{
// 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);
m_pPropGrid->m_windowStyle |= wxPG_AUTO_SORT;
m_pPropGrid->EnableCategories( false );
}
}
else
{
// Page Switching.
int index = -1;
size_t i;
wxPropertyGridPage* pdc;
// Find page with given id.
for ( i=0; i<GetPageCount(); i++ )
{
pdc = m_arrPages[i];
if ( pdc->m_toolId == id )
{ {
if ( !m_pPropGrid->HasInternalFlag(wxPG_FL_CATMODE_AUTO_SORT) ) index = i;
m_pPropGrid->m_windowStyle &= ~wxPG_AUTO_SORT; break;
m_pPropGrid->EnableCategories( true );
} }
} }
else if ( id == ( baseId + ID_ADVTBITEMSBASE_OFFSET + 1 ) )
{
// 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);
m_pPropGrid->m_windowStyle |= wxPG_AUTO_SORT; wxASSERT( index >= 0 );
m_pPropGrid->EnableCategories( false );
} if ( DoSelectPage( index ) )
{
// Event dispatching must be last.
m_pPropGrid->SendEvent( wxEVT_PG_PAGE_CHANGED, NULL );
} }
else else
{ {
// Page Switching. // TODO: Depress the old button on toolbar.
int index = -1;
size_t i;
wxPropertyGridPage* pdc;
// Find page with given id.
for ( i=0; i<GetPageCount(); i++ )
{
pdc = m_arrPages[i];
if ( pdc->m_id == id )
{
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.
}
} }
} }
} }