#include "bitmaps/help.xpm"
#endif // USE_XPM_BITMAPS
+enum Positions
+{
+ TOOLBAR_LEFT,
+ TOOLBAR_TOP,
+ TOOLBAR_RIGHT,
+ TOOLBAR_BOTTOM
+};
+
// ----------------------------------------------------------------------------
// classes
// ----------------------------------------------------------------------------
void OnToggleAnotherToolbar(wxCommandEvent& event);
void OnToggleHorizontalText(wxCommandEvent& WXUNUSED(event));
- void OnBottomToolbar(wxCommandEvent& WXUNUSED(event));
void OnToggleToolbarSize(wxCommandEvent& event);
- void OnToggleToolbarOrient(wxCommandEvent& event);
+ void OnChangeOrientation(wxCommandEvent& event);
void OnToggleToolbarRows(wxCommandEvent& event);
void OnToggleTooltips(wxCommandEvent& event);
void OnToggleCustomDisabled(wxCommandEvent& event);
void LayoutChildren();
bool m_smallToolbar,
- m_horzToolbar,
- m_bottomToolbar,
m_horzText,
m_useCustomDisabled,
m_showTooltips;
// the number of print buttons we have (they're added/removed dynamically)
size_t m_nPrint;
+ // store toolbar position for future use
+ Positions m_toolbarPosition;
+
wxTextCtrl *m_textWindow;
wxToolBar *m_tbar;
enum
{
IDM_TOOLBAR_TOGGLETOOLBARSIZE = 200,
- IDM_TOOLBAR_TOGGLETOOLBARORIENT,
IDM_TOOLBAR_TOGGLETOOLBARROWS,
IDM_TOOLBAR_TOGGLETOOLTIPS,
IDM_TOOLBAR_TOGGLECUSTOMDISABLED,
IDM_TOOLBAR_SHOW_ICONS,
IDM_TOOLBAR_SHOW_BOTH,
IDM_TOOLBAR_CUSTOM_PATH,
+ IDM_TOOLBAR_TOP_ORIENTATION,
+ IDM_TOOLBAR_LEFT_ORIENTATION,
IDM_TOOLBAR_BOTTOM_ORIENTATION,
+ IDM_TOOLBAR_RIGHT_ORIENTATION,
IDM_TOOLBAR_OTHER_1,
IDM_TOOLBAR_OTHER_2,
IDM_TOOLBAR_OTHER_3,
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_RANGE(IDM_TOOLBAR_TOP_ORIENTATION, IDM_TOOLBAR_RIGHT_ORIENTATION, MyFrame::OnChangeOrientation)
EVT_MENU(IDM_TOOLBAR_TOGGLETOOLBARSIZE, MyFrame::OnToggleToolbarSize)
- EVT_MENU(IDM_TOOLBAR_TOGGLETOOLBARORIENT, MyFrame::OnToggleToolbarOrient)
EVT_MENU(IDM_TOOLBAR_TOGGLETOOLBARROWS, MyFrame::OnToggleToolbarRows)
EVT_MENU(IDM_TOOLBAR_TOGGLETOOLTIPS, MyFrame::OnToggleTooltips)
EVT_MENU(IDM_TOOLBAR_TOGGLECUSTOMDISABLED, MyFrame::OnToggleCustomDisabled)
SetToolBar(NULL);
- style &= ~(wxTB_HORIZONTAL | wxTB_VERTICAL | wxTB_BOTTOM | wxTB_HORZ_LAYOUT);
- if( m_bottomToolbar )
+ style &= ~(wxTB_HORIZONTAL | wxTB_VERTICAL | wxTB_BOTTOM | wxTB_RIGHT | wxTB_HORZ_LAYOUT);
+ switch( m_toolbarPosition )
+ {
+ case TOOLBAR_LEFT:
+ style |= wxTB_LEFT;
+ break;
+ case TOOLBAR_TOP:
+ style |= wxTB_TOP;
+ break;
+ case TOOLBAR_RIGHT:
+ style |= wxTB_RIGHT;
+ break;
+ case TOOLBAR_BOTTOM:
style |= wxTB_BOTTOM;
- else
- style |= m_horzToolbar ? wxTB_HORIZONTAL : wxTB_VERTICAL;
+ break;
+ }
if ( m_showTooltips )
style &= ~wxTB_NO_TOOLTIPS;
// the generic toolbar doesn't really support this
#if wxUSE_TOOLBAR_NATIVE && !defined(__WXX11__) || defined(__WXUNIVERSAL__)
// adding a combo to a vertical toolbar is not very smart
- if ( m_horzToolbar )
+ if ( !( toolBar->IsVertical() ) )
{
wxComboBox *combo = new wxComboBox(toolBar, ID_COMBO, wxEmptyString, wxDefaultPosition, wxSize(200,wxDefaultCoord) );
combo->Append(_T("This"));
// the changes
toolBar->Realize();
- toolBar->SetRows(m_horzToolbar ? m_rows : 10 / m_rows);
+ toolBar->SetRows(!(toolBar->IsVertical()) ? m_rows : 10 / m_rows);
}
// ----------------------------------------------------------------------------
m_tbar = NULL;
m_smallToolbar = true;
- m_horzToolbar = true;
- m_bottomToolbar = false;
m_horzText = false;
m_useCustomDisabled = false;
m_showTooltips = true;
_T("&Toggle toolbar size\tCtrl-S"),
_T("Toggle between big/small toolbar"));
- tbarMenu->AppendCheckItem(IDM_TOOLBAR_TOGGLETOOLBARORIENT,
- _T("Toggle toolbar &orientation\tCtrl-O"),
- _T("Toggle toolbar orientation"));
-
tbarMenu->AppendCheckItem(IDM_TOOLBAR_TOGGLETOOLBARROWS,
_T("Toggle number of &rows\tCtrl-R"),
_T("Toggle number of toolbar rows between 1 and 2"));
_T("Switch between using system-generated and custom disabled images"));
- tbarMenu->AppendCheckItem(IDM_TOOLBAR_BOTTOM_ORIENTATION,
+ tbarMenu->AppendSeparator();
+ tbarMenu->AppendRadioItem(IDM_TOOLBAR_TOP_ORIENTATION,
+ _T("Set toolbar at the top of the window"),
+ _T("Set toolbar at the top of the window"));
+ tbarMenu->AppendRadioItem(IDM_TOOLBAR_LEFT_ORIENTATION,
+ _T("Set toolbar at the left of the window"),
+ _T("Set toolbar at the left of the window"));
+ tbarMenu->AppendRadioItem(IDM_TOOLBAR_BOTTOM_ORIENTATION,
_T("Set toolbar at the bottom of the window"),
_T("Set toolbar at the bottom of the window"));
+ tbarMenu->AppendRadioItem(IDM_TOOLBAR_RIGHT_ORIENTATION,
+ _T("Set toolbar at the right edge of the window"),
+ _T("Set toolbar at the right edge of the window"));
tbarMenu->AppendSeparator();
tbarMenu->Append(IDM_TOOLBAR_ENABLEPRINT, _T("&Enable print button\tCtrl-E"));
menuBar->Check(IDM_TOOLBAR_SHOW_BOTH, true);
menuBar->Check(IDM_TOOLBAR_TOGGLETOOLTIPS, true);
+ menuBar->Check(IDM_TOOLBAR_TOP_ORIENTATION, true );
+ m_toolbarPosition = TOOLBAR_TOP;
// Create the toolbar
RecreateToolbar();
// m_rows may be only 1 or 2
m_rows = 3 - m_rows;
- GetToolBar()->SetRows(m_horzToolbar ? m_rows : 10 / m_rows);
+ GetToolBar()->SetRows(!(GetToolBar()->IsVertical()) ? m_rows : 10 / m_rows);
//RecreateToolbar(); -- this is unneeded
}
RecreateToolbar();
}
-void MyFrame::OnToggleToolbarOrient(wxCommandEvent& WXUNUSED(event))
+void MyFrame::OnChangeOrientation(wxCommandEvent& 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 );
-
+ switch( event.GetId() )
+ {
+ case IDM_TOOLBAR_LEFT_ORIENTATION:
+ m_toolbarPosition = TOOLBAR_LEFT;
+ break;
+ case IDM_TOOLBAR_TOP_ORIENTATION:
+ m_toolbarPosition = TOOLBAR_TOP;
+ break;
+ case IDM_TOOLBAR_RIGHT_ORIENTATION:
+ m_toolbarPosition = TOOLBAR_RIGHT;
+ break;
+ case IDM_TOOLBAR_BOTTOM_ORIENTATION:
+ m_toolbarPosition = TOOLBAR_BOTTOM;
+ break;
+ }
RecreateToolbar();
}
event.GetId() - IDM_TOOLBAR_TOGGLERADIOBTN1, true);
}
}
-void MyFrame::OnBottomToolbar(wxCommandEvent& WXUNUSED(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();
-}
wxPoint pt = GetClientAreaOrigin();
width += pt.x;
height += pt.y;
+#if wxUSE_TOOLBAR
+ if ( width )
+ {
+ wxToolBar *toolbar = GetToolBar();
+ if ( toolbar && toolbar->HasFlag(wxTB_RIGHT) )
+ {
+ width -= toolbar->GetClientSize().x;
+ }
+ if ( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
+ {
+ height -= toolbar->GetClientSize().y;
+ }
+ }
+#endif
wxTopLevelWindow::DoSetClientSize(width, height);
}
*y -= toolbar->GetClientSize().y;
}
}
+ if ( x )
+ {
+ wxToolBar *toolbar = GetToolBar();
+ if ( toolbar && toolbar->HasFlag(wxTB_RIGHT) )
+ {
+ *x -= toolbar->GetClientSize().x;
+ }
+ }
#endif
#if wxUSE_STATUSBAR
// adjust client area height to take the status bar into account
wxToolBar *toolbar = GetToolBar();
if( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
h += toolbar->GetClientRect().height;
+ if( toolbar && toolbar->HasFlag( wxTB_RIGHT ) )
+ w += toolbar->GetClientRect().width;
#endif
int sw, sh;
m_frameStatusBar->GetSize(&sw, &sh);
x = 0;
y = height - th;
}
+ else if( toolbar->HasFlag(wxTB_RIGHT) )
+ {
+ x = width - tw;
+ y = 0;
+ }
#if defined(WINCE_WITH_COMMANDBAR)
// We're using a commandbar - so we have to allow for it.
if (GetMenuBar() && GetMenuBar()->GetCommandBar())
if( tx < 0 && ( -tx == tw ) )
tx = 0;
}
+ else if( toolbar->HasFlag(wxTB_RIGHT) )
+ {
+ if( ty < 0 && ( -ty == th ) )
+ ty = 0;
+ if( tx < 0 && ( -tx == tw ) )
+ tx = width - tw;
+ }
int desiredW = tw;
int desiredH = th;
- if ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL )
+ if ( toolbar->IsVertical() )
{
desiredH = height;
}
bool heightChanging wxDUMMY_INITIALIZE(true);
bool widthChanging wxDUMMY_INITIALIZE(true);
- if ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL )
+ if ( toolbar->IsVertical() )
{
// It's OK if the current height is greater than what can be shown.
heightChanging = (desiredH > th) ;
{
pt.x += w;
}
- else if( !( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM ) )
+ else if( ( toolbar->GetWindowStyleFlag() & wxTB_TOP ) )
{
pt.y += h;
}