[ 1550698 ] Bottom aligned toolbar

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41268 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2006-09-17 11:51:08 +00:00
parent 982a6623f7
commit 5b2acc3a4f
8 changed files with 122 additions and 16 deletions

View File

@@ -72,6 +72,7 @@ use this option under Windows XP with true colour:
2 only). This style must be used with wxTB\_TEXT.}
\twocolitem{\windowstyle{wxTB\_HORZ\_TEXT}}{Combination of wxTB\_HORZ\_LAYOUT and wxTB\_TEXT.}
\twocolitem{\windowstyle{wxTB\_NO\_TOOLTIPS}}{Don't show the short help tooltips for the tools when the mouse hovers over them.}
\twocolitem{\windowstyle{wxTB\_BOTTOM}}{Align the toolbar at the bottom of parent window.}
\end{twocollist}
See also \helpref{window styles overview}{windowstyles}. Note that the Win32

View File

@@ -52,7 +52,10 @@ enum
wxTB_HORZ_TEXT = wxTB_HORZ_LAYOUT | wxTB_TEXT,
// don't show the toolbar short help tooltips
wxTB_NO_TOOLTIPS = 0x1000
wxTB_NO_TOOLTIPS = 0x1000,
// lay out toolbar at the bottom of the window
wxTB_BOTTOM = 0x2000
};
#if wxUSE_TOOLBAR

View File

@@ -97,6 +97,7 @@ public:
void OnToggleAnotherToolbar(wxCommandEvent& event);
void OnToggleHorizontalText(wxCommandEvent& WXUNUSED(event));
void OnBottomToolbar(wxCommandEvent& WXUNUSED(event));
void OnToggleToolbarSize(wxCommandEvent& event);
void OnToggleToolbarOrient(wxCommandEvent& event);
void OnToggleToolbarRows(wxCommandEvent& event);
@@ -133,6 +134,7 @@ private:
bool m_smallToolbar,
m_horzToolbar,
m_bottomToolbar,
m_horzText,
m_useCustomDisabled,
m_showTooltips;
@@ -181,12 +183,13 @@ enum
IDM_TOOLBAR_SHOW_ICONS,
IDM_TOOLBAR_SHOW_BOTH,
IDM_TOOLBAR_CUSTOM_PATH,
IDM_TOOLBAR_BOTTOM_ORIENTATION,
IDM_TOOLBAR_OTHER_1,
IDM_TOOLBAR_OTHER_2,
IDM_TOOLBAR_OTHER_3,
ID_COMBO = 1000
ID_COMBO = 1000,
ID_SPIN = 1001
};
// ----------------------------------------------------------------------------
@@ -206,6 +209,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(IDM_TOOLBAR_TOGGLE_ANOTHER_TOOLBAR, MyFrame::OnToggleAnotherToolbar)
EVT_MENU(IDM_TOOLBAR_TOGGLE_HORIZONTAL_TEXT, MyFrame::OnToggleHorizontalText)
EVT_MENU(IDM_TOOLBAR_BOTTOM_ORIENTATION, MyFrame::OnBottomToolbar)
EVT_MENU(IDM_TOOLBAR_TOGGLETOOLBARSIZE, MyFrame::OnToggleToolbarSize)
EVT_MENU(IDM_TOOLBAR_TOGGLETOOLBARORIENT, MyFrame::OnToggleToolbarOrient)
EVT_MENU(IDM_TOOLBAR_TOGGLETOOLBARROWS, MyFrame::OnToggleToolbarRows)
@@ -290,7 +294,10 @@ void MyFrame::RecreateToolbar()
SetToolBar(NULL);
style &= ~(wxTB_HORIZONTAL | wxTB_VERTICAL | wxTB_HORZ_LAYOUT);
style &= ~(wxTB_HORIZONTAL | wxTB_VERTICAL | wxTB_BOTTOM | wxTB_HORZ_LAYOUT);
if( m_bottomToolbar )
style |= wxTB_BOTTOM;
else
style |= m_horzToolbar ? wxTB_HORIZONTAL : wxTB_VERTICAL;
if ( m_showTooltips )
@@ -369,6 +376,9 @@ void MyFrame::RecreateToolbar()
combo->Append(_T("in a"));
combo->Append(_T("toolbar"));
toolBar->AddControl(combo);
//wxSpinCtrl *spin = new wxSpinCtrl( toolBar, ID_SPIN, wxT("0"), wxDefaultPosition, wxSize(80,wxDefaultCoord), 0, 100, 0 );
//toolBar->AddControl( spin );
}
#endif // toolbars which don't support controls
@@ -440,6 +450,7 @@ MyFrame::MyFrame(wxFrame* parent,
m_smallToolbar = true;
m_horzToolbar = true;
m_bottomToolbar = false;
m_horzText = false;
m_useCustomDisabled = false;
m_showTooltips = true;
@@ -490,6 +501,9 @@ MyFrame::MyFrame(wxFrame* parent,
_T("Switch between using system-generated and custom disabled images"));
tbarMenu->AppendCheckItem(IDM_TOOLBAR_BOTTOM_ORIENTATION,
_T("Set toolbar at the bottom of the window"),
_T("Set toolbar at the bottom of the window"));
tbarMenu->AppendSeparator();
tbarMenu->Append(IDM_TOOLBAR_ENABLEPRINT, _T("&Enable print button\tCtrl-E"));
@@ -530,9 +544,22 @@ MyFrame::MyFrame(wxFrame* parent,
// Create the toolbar
RecreateToolbar();
m_textWindow = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxPoint(0, 0), wxDefaultSize, wxTE_MULTILINE);
m_textWindow = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);
}
#if USE_GENERIC_TBAR
wxToolBar* MyFrame::OnCreateToolBar(long style,
wxWindowID id,
const wxString& name)
{
return (wxToolBar *)new wxToolBarSimple(this, id,
wxDefaultPosition, wxDefaultSize,
style, name);
}
#endif // USE_GENERIC_TBAR
void MyFrame::LayoutChildren()
{
wxSize size = GetClientSize();
@@ -652,7 +679,12 @@ void MyFrame::OnToggleCustomDisabled(wxCommandEvent& WXUNUSED(event))
void MyFrame::OnToggleToolbarOrient(wxCommandEvent& WXUNUSED(event))
{
if( m_bottomToolbar )
m_bottomToolbar = false;
m_horzToolbar = !m_horzToolbar;
wxMenuBar *menuBar = GetMenuBar();
if( menuBar->IsChecked( IDM_TOOLBAR_BOTTOM_ORIENTATION ) )
menuBar->Check( IDM_TOOLBAR_BOTTOM_ORIENTATION, false );
RecreateToolbar();
}
@@ -818,3 +850,13 @@ void MyFrame::OnToggleRadioBtn(wxCommandEvent& event)
event.GetId() - IDM_TOOLBAR_TOGGLERADIOBTN1, true);
}
}
void MyFrame::OnBottomToolbar(wxCommandEvent& event )
{
m_bottomToolbar = !m_bottomToolbar;
wxMenuBar *menuBar = GetMenuBar();
if( menuBar->IsChecked( IDM_TOOLBAR_TOGGLETOOLBARORIENT ) )
menuBar->Check( IDM_TOOLBAR_TOGGLETOOLBARORIENT, false );
if( !m_horzToolbar )
m_horzToolbar = true;
RecreateToolbar();
}

View File

@@ -421,6 +421,19 @@ void wxFrame::GtkOnSize()
client_area_x_offset += ww;
}
else if( m_frameToolBar->GetWindowStyle() & wxTB_BOTTOM )
{
xx = m_miniEdge;
yy = GetClientSize().y;
#if wxUSE_MENUS_NATIVE
yy += m_menuBarHeight;
#endif // wxUSE_MENU_NATIVE
m_frameToolBar->m_x = xx;
m_frameToolBar->m_y = yy;
ww = m_width - 2*m_miniEdge;
hh = m_toolBarDetached ? wxPLACE_HOLDER
: m_frameToolBar->m_height;
}
else
{
ww = m_width - 2*m_miniEdge;

View File

@@ -366,6 +366,12 @@ void wxFrame::PositionToolBar()
// have the original client size.
GetToolBar()->SetSize(tx , ty , tw, ch , wxSIZE_NO_ADJUSTMENTS );
}
else if (GetToolBar->GetWindowStyleFlag() & wxTB_BOTTOM)
{
tx = 0;
ty = statusY - th;
GetToolBar->SetSize(tx, ty, cw, th, wxSIZE_NO_ADJUSTMENTS );
}
else
{
#if !wxMAC_USE_NATIVE_TOOLBAR

View File

@@ -248,7 +248,16 @@ void wxFrame::DoGetClientSize(int *x, int *y) const
if ( y )
*y -= pt.y;
#if wxUSE_TOOLBAR
if( y )
{
wxToolBar *toolbar = GetToolBar();
if( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
{
*y -= toolbar->GetClientSize().y;
}
}
#endif
#if wxUSE_STATUSBAR
// adjust client area height to take the status bar into account
if ( y )
@@ -315,6 +324,11 @@ void wxFrame::PositionStatusBar()
int w, h;
GetClientSize(&w, &h);
#if wxUSE_TOOLBAR
wxToolBar *toolbar = GetToolBar();
if( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
h += toolbar->GetClientRect().height;
#endif
int sw, sh;
m_frameStatusBar->GetSize(&sw, &sh);
@@ -560,6 +574,7 @@ wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& nam
void wxFrame::PositionToolBar()
{
int x = 0, y = 0;
wxToolBar *toolbar = GetToolBar();
if ( toolbar && toolbar->IsShown() )
{
@@ -581,9 +596,19 @@ void wxFrame::PositionToolBar()
height -= statbar->GetClientSize().y;
}
#endif // wxUSE_STATUSBAR
int x = 0;
int y = 0;
int tx, ty, tw, th;
toolbar->GetPosition( &tx, &ty );
toolbar->GetSize( &tw, &th );
if( ( toolbar->GetWindowStyleFlag() & wxTB_HORIZONTAL ) || ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) )
{
x = 0;
y = 0;
}
else if( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM )
{
x = 0;
y = height - th;
}
#if defined(WINCE_WITH_COMMANDBAR)
// We're using a commandbar - so we have to allow for it.
if (GetMenuBar() && GetMenuBar()->GetCommandBar())
@@ -593,17 +618,21 @@ void wxFrame::PositionToolBar()
y = rect.bottom - rect.top;
}
#endif
int tx, ty;
int tw, th;
toolbar->GetPosition(&tx, &ty);
toolbar->GetSize(&tw, &th);
if( ( toolbar->GetWindowStyleFlag() & wxTB_HORIZONTAL ) || ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) )
{
// Adjust
if (ty < 0 && (-ty == th))
ty = 0;
if (tx < 0 && (-tx == tw))
tx = 0;
}
else if( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM )
{
if( ty < 0 && ( -ty == th ) )
ty = height - th;
if( tx < 0 && ( -tx == tw ) )
tx = 0;
}
int desiredW = tw;
int desiredH = th;
@@ -1055,7 +1084,7 @@ wxPoint wxFrame::GetClientAreaOrigin() const
{
pt.x += w;
}
else
else if( !( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM ) )
{
pt.y += h;
}

View File

@@ -402,6 +402,9 @@ WXDWORD wxToolBar::MSWGetStyle(long style, WXDWORD *exstyle) const
if ( style & wxTB_VERTICAL )
msStyle |= CCS_VERT;
if( style & wxTB_BOTTOM )
msStyle |= CCS_BOTTOM;
return msStyle;
}

View File

@@ -704,6 +704,15 @@ void wxFrame::PositionToolBar()
,vTHeight
);
}
else if (pToolBar->GetWindowStyleFlag() & wxTB_BOTTOM )
{
vWidth = (wxCoord)(vRect.xRight - vRect.xLeft);
pToolBar->SetSize( vRect.xLeft - vFRect.xLeft
,vRect.yBottom - vTHeight // assuming the vRect contains the client coordinates
,vWidth
,vHeight
);
}
else
{
wxCoord vSwidth = 0;