void wxAuiDefaultTabArt::DrawTab(wxDC& dc,
wxWindow* wnd,
+ const wxAuiNotebookPage& page,
const wxRect& in_rect,
- const wxString& caption_text,
- const wxBitmap& bitmap,
- bool active,
int close_button_state,
wxRect* out_tab_rect,
wxRect* out_button_rect,
wxCoord textx, texty;
// if the caption is empty, measure some temporary text
- wxString caption = caption_text;
- if (caption_text.empty())
+ wxString caption = page.caption;
+ if (caption.empty())
caption = wxT("Xj");
dc.SetFont(m_selected_font);
// figure out the size of the tab
wxSize tab_size = GetTabSize(dc,
wnd,
- caption,
- bitmap,
- active,
+ page.caption,
+ page.bitmap,
+ page.active,
close_button_state,
x_extent);
wxCoord tab_y = in_rect.y + in_rect.height - tab_height;
- caption = caption_text;
+ caption = page.caption;
// select pen, brush and font for the tab to be drawn
- if (active)
+ if (page.active)
{
dc.SetFont(m_selected_font);
textx = selected_textx;
int drawn_tab_height = border_points[0].y - border_points[1].y;
- if (active)
+ if (page.active)
{
// draw active tab
// there are two horizontal grey lines at the bottom of the tab control,
// this gets rid of the top one of those lines in the tab control
- if (active)
+ if (page.active)
{
wxColor start_color = m_base_colour;
dc.SetPen(m_base_colour_pen);
}
- if (bitmap.IsOk())
+ if (page.bitmap.IsOk())
{
int bitmap_offset = tab_x + 8;
// draw bitmap
- dc.DrawBitmap(bitmap,
+ dc.DrawBitmap(page.bitmap,
bitmap_offset,
- drawn_tab_yoff + (drawn_tab_height/2) - (bitmap.GetHeight()/2),
+ drawn_tab_yoff + (drawn_tab_height/2) - (page.bitmap.GetHeight()/2),
true);
- text_offset = bitmap_offset + bitmap.GetWidth();
+ text_offset = bitmap_offset + page.bitmap.GetWidth();
text_offset += 3; // bitmap padding
}
else
int bitmap_id,
int button_state,
int orientation,
- const wxBitmap& bitmap_override,
wxRect* out_rect)
{
wxBitmap bmp;
wxRect rect;
- if (bitmap_override.IsOk())
- {
- bmp = bitmap_override;
- }
- else
+ switch (bitmap_id)
{
- switch (bitmap_id)
- {
- case wxAUI_BUTTON_CLOSE:
- if (button_state & wxAUI_BUTTON_STATE_DISABLED)
- bmp = m_disabled_close_bmp;
- else
- bmp = m_active_close_bmp;
- break;
- case wxAUI_BUTTON_LEFT:
- if (button_state & wxAUI_BUTTON_STATE_DISABLED)
- bmp = m_disabled_left_bmp;
- else
- bmp = m_active_left_bmp;
- break;
- case wxAUI_BUTTON_RIGHT:
- if (button_state & wxAUI_BUTTON_STATE_DISABLED)
- bmp = m_disabled_right_bmp;
- else
- bmp = m_active_right_bmp;
- break;
- case wxAUI_BUTTON_WINDOWLIST:
- if (button_state & wxAUI_BUTTON_STATE_DISABLED)
- bmp = m_disabled_windowlist_bmp;
- else
- bmp = m_active_windowlist_bmp;
- break;
- }
+ case wxAUI_BUTTON_CLOSE:
+ if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+ bmp = m_disabled_close_bmp;
+ else
+ bmp = m_active_close_bmp;
+ break;
+ case wxAUI_BUTTON_LEFT:
+ if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+ bmp = m_disabled_left_bmp;
+ else
+ bmp = m_active_left_bmp;
+ break;
+ case wxAUI_BUTTON_RIGHT:
+ if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+ bmp = m_disabled_right_bmp;
+ else
+ bmp = m_active_right_bmp;
+ break;
+ case wxAUI_BUTTON_WINDOWLIST:
+ if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+ bmp = m_disabled_windowlist_bmp;
+ else
+ bmp = m_active_windowlist_bmp;
+ break;
}
+
if (!bmp.IsOk())
return;
}
-int wxAuiDefaultTabArt::ShowWindowList(wxWindow* wnd,
- const wxArrayString& items,
- int active_idx)
+int wxAuiDefaultTabArt::ShowDropDown(wxWindow* wnd,
+ const wxAuiNotebookPageArray& pages,
+ int active_idx)
{
wxMenu menuPopup;
- size_t i, count = items.GetCount();
+ size_t i, count = pages.GetCount();
for (i = 0; i < count; ++i)
{
- menuPopup.AppendCheckItem(1000+i, items.Item(i));
+ const wxAuiNotebookPage& page = pages.Item(i);
+ menuPopup.AppendCheckItem(1000+i, page.caption);
}
if (active_idx != -1)
}
int wxAuiDefaultTabArt::GetBestTabCtrlSize(wxWindow* wnd,
- wxAuiNotebookPageArray& pages,
+ const wxAuiNotebookPageArray& pages,
const wxSize& required_bmp_size)
{
wxClientDC dc(wnd);
void wxAuiSimpleTabArt::DrawTab(wxDC& dc,
wxWindow* wnd,
+ const wxAuiNotebookPage& page,
const wxRect& in_rect,
- const wxString& caption_text,
- const wxBitmap& bitmap,
- bool active,
int close_button_state,
wxRect* out_tab_rect,
wxRect* out_button_rect,
wxCoord textx, texty;
// if the caption is empty, measure some temporary text
- wxString caption = caption_text;
- if (caption_text.empty())
+ wxString caption = page.caption;
+ if (caption.empty())
caption = wxT("Xj");
dc.SetFont(m_selected_font);
// figure out the size of the tab
wxSize tab_size = GetTabSize(dc,
wnd,
- caption,
- bitmap,
- active,
+ page.caption,
+ page.bitmap,
+ page.active,
close_button_state,
x_extent);
wxCoord tab_x = in_rect.x;
wxCoord tab_y = in_rect.y + in_rect.height - tab_height;
- caption = caption_text;
+ caption = page.caption;
// select pen, brush and font for the tab to be drawn
- if (active)
+ if (page.active)
{
dc.SetPen(m_selected_bkpen);
dc.SetBrush(m_selected_bkbrush);
if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN)
{
wxBitmap bmp;
- if (active)
+ if (page.active)
bmp = m_active_close_bmp;
else
bmp = m_disabled_close_bmp;
int bitmap_id,
int button_state,
int orientation,
- const wxBitmap& bitmap_override,
wxRect* out_rect)
{
wxBitmap bmp;
wxRect rect;
- if (bitmap_override.IsOk())
+ switch (bitmap_id)
{
- bmp = bitmap_override;
- }
- else
- {
- switch (bitmap_id)
- {
- case wxAUI_BUTTON_CLOSE:
- if (button_state & wxAUI_BUTTON_STATE_DISABLED)
- bmp = m_disabled_close_bmp;
- else
- bmp = m_active_close_bmp;
- break;
- case wxAUI_BUTTON_LEFT:
- if (button_state & wxAUI_BUTTON_STATE_DISABLED)
- bmp = m_disabled_left_bmp;
- else
- bmp = m_active_left_bmp;
- break;
- case wxAUI_BUTTON_RIGHT:
- if (button_state & wxAUI_BUTTON_STATE_DISABLED)
- bmp = m_disabled_right_bmp;
- else
- bmp = m_active_right_bmp;
- break;
- case wxAUI_BUTTON_WINDOWLIST:
- if (button_state & wxAUI_BUTTON_STATE_DISABLED)
- bmp = m_disabled_windowlist_bmp;
- else
- bmp = m_active_windowlist_bmp;
- break;
- }
+ case wxAUI_BUTTON_CLOSE:
+ if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+ bmp = m_disabled_close_bmp;
+ else
+ bmp = m_active_close_bmp;
+ break;
+ case wxAUI_BUTTON_LEFT:
+ if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+ bmp = m_disabled_left_bmp;
+ else
+ bmp = m_active_left_bmp;
+ break;
+ case wxAUI_BUTTON_RIGHT:
+ if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+ bmp = m_disabled_right_bmp;
+ else
+ bmp = m_active_right_bmp;
+ break;
+ case wxAUI_BUTTON_WINDOWLIST:
+ if (button_state & wxAUI_BUTTON_STATE_DISABLED)
+ bmp = m_disabled_windowlist_bmp;
+ else
+ bmp = m_active_windowlist_bmp;
+ break;
}
if (!bmp.IsOk())
}
-int wxAuiSimpleTabArt::ShowWindowList(wxWindow* wnd,
- const wxArrayString& items,
- int active_idx)
+int wxAuiSimpleTabArt::ShowDropDown(wxWindow* wnd,
+ const wxAuiNotebookPageArray& pages,
+ int active_idx)
{
wxMenu menuPopup;
- size_t i, count = items.GetCount();
+ size_t i, count = pages.GetCount();
for (i = 0; i < count; ++i)
{
- menuPopup.AppendCheckItem(1000+i, items.Item(i));
+ const wxAuiNotebookPage& page = pages.Item(i);
+ menuPopup.AppendCheckItem(1000+i, page.caption);
}
if (active_idx != -1)
}
int wxAuiSimpleTabArt::GetBestTabCtrlSize(wxWindow* wnd,
- wxAuiNotebookPageArray& WXUNUSED(pages),
+ const wxAuiNotebookPageArray& WXUNUSED(pages),
const wxSize& WXUNUSED(required_bmp_size))
{
wxClientDC dc(wnd);
button.id,
button.cur_state,
wxRIGHT,
- wxNullBitmap,
&button.rect);
offset -= button.rect.GetWidth();
button.id,
button.cur_state,
wxLEFT,
- wxNullBitmap,
&button.rect);
offset += button.rect.GetWidth();
m_art->DrawTab(dc,
wnd,
+ page,
rect,
- page.caption,
- page.bitmap,
- page.active,
tab_button.cur_state,
&page.rect,
&tab_button.rect,
rect.x = active_offset;
m_art->DrawTab(dc,
wnd,
+ page,
active_rect,
- page.caption,
- page.bitmap,
- page.active,
tab_button.cur_state,
&page.rect,
&tab_button.rect,
{
int new_selection = GetIdxFromWindow(wnd);
- if (new_selection != GetActivePage())
+ // wxAuiNotebooks always want to receive this event
+ // even if the tab is already active, because they may
+ // have multiple tab controls
+ if (new_selection != GetActivePage() ||
+ GetParent()->IsKindOf(CLASSINFO(wxAuiNotebook)))
{
wxAuiNotebookEvent e(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, m_windowId);
e.SetSelection(new_selection);
}
else if (button == wxAUI_BUTTON_WINDOWLIST)
{
- wxArrayString as;
-
- size_t i, page_count = m_pages.GetCount();
- for (i = 0; i < page_count; ++i)
- {
- wxAuiNotebookPage& page = m_pages.Item(i);
- as.Add(page.caption);
- }
-
- int idx = GetArtProvider()->ShowWindowList(this, as, GetActivePage());
+ int idx = GetArtProvider()->ShowDropDown(this, m_pages, GetActivePage());
if (idx != -1)
{
};
-
+const int wxAuiBaseTabCtrlId = 5380;
// -- wxAuiNotebook class implementation --
BEGIN_EVENT_TABLE(wxAuiNotebook, wxControl)
EVT_SIZE(wxAuiNotebook::OnSize)
EVT_CHILD_FOCUS(wxAuiNotebook::OnChildFocus)
- EVT_COMMAND_RANGE(10000, 10100,
+ EVT_COMMAND_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500,
wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING,
wxAuiNotebook::OnTabClicked)
- EVT_COMMAND_RANGE(10000, 10100,
+ EVT_COMMAND_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500,
wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG,
wxAuiNotebook::OnTabBeginDrag)
- EVT_COMMAND_RANGE(10000, 10100,
+ EVT_COMMAND_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500,
wxEVT_COMMAND_AUINOTEBOOK_END_DRAG,
wxAuiNotebook::OnTabEndDrag)
- EVT_COMMAND_RANGE(10000, 10100,
+ EVT_COMMAND_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500,
wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION,
wxAuiNotebook::OnTabDragMotion)
- EVT_COMMAND_RANGE(10000, 10100,
+ EVT_COMMAND_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500,
wxEVT_COMMAND_AUINOTEBOOK_BUTTON,
wxAuiNotebook::OnTabButton)
END_EVENT_TABLE()
wxAuiNotebook::wxAuiNotebook()
{
m_curpage = -1;
- m_tab_id_counter = 10000;
+ m_tab_id_counter = wxAuiBaseTabCtrlId;
m_dummy_wnd = NULL;
m_tab_ctrl_height = 20;
m_requested_bmp_size = wxDefaultSize;
void wxAuiNotebook::InitNotebook(long style)
{
m_curpage = -1;
- m_tab_id_counter = 10000;
+ m_tab_id_counter = wxAuiBaseTabCtrlId;
m_dummy_wnd = NULL;
m_flags = (unsigned int)style;
m_tab_ctrl_height = 20;
m_dummy_wnd->Show(false);
m_mgr.SetManagedWindow(this);
- m_mgr.SetFlags(wxAUI_MGR_DEFAULT | (1 << 28) /*wxAUI_MGR_NO_DOCK_SIZE_LIMIT*/);
+ m_mgr.SetFlags(wxAUI_MGR_DEFAULT);
+ m_mgr.SetDockSizeConstraint(1.0, 1.0); // no dock size constraint
m_mgr.AddPane(m_dummy_wnd,
wxAuiPaneInfo().Name(wxT("dummy")).Bottom().CaptionVisible(false).Show(false));
// SetSelection() sets the currently active page
size_t wxAuiNotebook::SetSelection(size_t new_page)
{
+ // don't change the page unless necessary
+ if (new_page == m_curpage)
+ return m_curpage;
+
wxWindow* wnd = m_tabs.GetWindowFromIdx(new_page);
if (!wnd)
return m_curpage;
dest_tabs->DoShowHide();
dest_tabs->Refresh();
+ // force the set selection function reset the selection
+ m_curpage = -1;
+
+ // set the active page to the one we just split off
SetSelection(m_tabs.GetIdxFromWindow(page_info.window));
UpdateHintWindowSize();