wxAuiTabArt* wxAuiDefaultTabArt::Clone()
{
- wxAuiDefaultTabArt* art = new wxAuiDefaultTabArt;
- art->SetNormalFont(m_normal_font);
- art->SetSelectedFont(m_selected_font);
- art->SetMeasuringFont(m_measuring_font);
-
- return art;
+ return new wxAuiDefaultTabArt(*this);
}
void wxAuiDefaultTabArt::SetFlags(unsigned int flags)
int wxAuiDefaultTabArt::ShowDropDown(wxWindow* wnd,
const wxAuiNotebookPageArray& pages,
- int active_idx)
+ int /*active_idx*/)
{
wxMenu menuPopup;
if (caption.IsEmpty())
caption = wxT(" ");
- menuPopup.AppendCheckItem(1000+i, caption);
- }
-
- if (active_idx != -1)
- {
- menuPopup.Check(1000+active_idx, true);
+ wxMenuItem* item = new wxMenuItem(NULL, 1000+i, caption);
+ if (page.bitmap.IsOk())
+ item->SetBitmap(page.bitmap);
+ menuPopup.Append(item);
}
// find out where to put the popup menu of window items
return false;
wxAuiTabContainerButton* btn = NULL;
- if (ButtonHitTest(x, y, &btn))
+ if (ButtonHitTest(x, y, &btn) && !(btn->cur_state & wxAUI_BUTTON_STATE_DISABLED))
{
if (m_buttons.Index(*btn) != wxNOT_FOUND)
return false;
{
wxAuiTabContainerButton& button = m_buttons.Item(i);
if (button.rect.Contains(x,y) &&
- !(button.cur_state & (wxAUI_BUTTON_STATE_HIDDEN |
- wxAUI_BUTTON_STATE_DISABLED)))
+ !(button.cur_state & wxAUI_BUTTON_STATE_HIDDEN ))
{
if (hit)
*hit = &button;
{
// make sure we're still clicking the button
wxAuiTabContainerButton* button = NULL;
- if (!ButtonHitTest(evt.m_x, evt.m_y, &button))
+ if (!ButtonHitTest(evt.m_x, evt.m_y, &button) ||
+ button->cur_state & wxAUI_BUTTON_STATE_DISABLED)
return;
if (button != m_pressed_button)
// check if the mouse is hovering above a button
wxAuiTabContainerButton* button;
- if (ButtonHitTest(pos.x, pos.y, &button))
+ if (ButtonHitTest(pos.x, pos.y, &button) && !(button->cur_state & wxAUI_BUTTON_STATE_DISABLED))
{
if (m_hover_button && button != m_hover_button)
{
{
m_tabs.SetArtProvider(art);
- UpdateTabCtrlHeight();
+ // Update the height and do nothing else if it did something but otherwise
+ // (i.e. if the new art provider uses the same height as the old one) we
+ // need to manually set the art provider for all tabs ourselves.
+ if ( !UpdateTabCtrlHeight() )
+ {
+ wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes();
+ const size_t pane_count = all_panes.GetCount();
+ for (size_t i = 0; i < pane_count; ++i)
+ {
+ wxAuiPaneInfo& pane = all_panes.Item(i);
+ if (pane.name == wxT("dummy"))
+ continue;
+ wxTabFrame* tab_frame = (wxTabFrame*)pane.window;
+ wxAuiTabCtrl* tabctrl = tab_frame->m_tabs;
+ tabctrl->SetArtProvider(art->Clone());
+ }
+ }
}
// SetTabCtrlHeight() is the highest-level override of the
}
// UpdateTabCtrlHeight() does the actual tab resizing. It's meant
-// to be used interally
-void wxAuiNotebook::UpdateTabCtrlHeight()
+// to be used internally
+bool wxAuiNotebook::UpdateTabCtrlHeight()
{
// get the tab ctrl height we will use
int height = CalculateTabCtrlHeight();
// if the tab control height needs to change, update
// all of our tab controls with the new height
- if (m_tab_ctrl_height != height)
- {
- wxAuiTabArt* art = m_tabs.GetArtProvider();
+ if (m_tab_ctrl_height == height)
+ return false;
- m_tab_ctrl_height = height;
+ wxAuiTabArt* art = m_tabs.GetArtProvider();
- wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes();
- size_t i, pane_count = all_panes.GetCount();
- for (i = 0; i < pane_count; ++i)
- {
- wxAuiPaneInfo& pane = all_panes.Item(i);
- if (pane.name == wxT("dummy"))
- continue;
- wxTabFrame* tab_frame = (wxTabFrame*)pane.window;
- wxAuiTabCtrl* tabctrl = tab_frame->m_tabs;
- tab_frame->SetTabCtrlHeight(m_tab_ctrl_height);
- tabctrl->SetArtProvider(art->Clone());
- tab_frame->DoSizing();
- }
+ m_tab_ctrl_height = height;
+
+ wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes();
+ size_t i, pane_count = all_panes.GetCount();
+ for (i = 0; i < pane_count; ++i)
+ {
+ wxAuiPaneInfo& pane = all_panes.Item(i);
+ if (pane.name == wxT("dummy"))
+ continue;
+ wxTabFrame* tab_frame = (wxTabFrame*)pane.window;
+ wxAuiTabCtrl* tabctrl = tab_frame->m_tabs;
+ tab_frame->SetTabCtrlHeight(m_tab_ctrl_height);
+ tabctrl->SetArtProvider(art->Clone());
+ tab_frame->DoSizing();
}
+
+ return true;
}
void wxAuiNotebook::UpdateHintWindowSize()
void wxAuiNotebook::OnChildFocusNotebook(wxChildFocusEvent& evt)
{
+ evt.Skip();
+
// if we're dragging a tab, don't change the current selection.
// This code prevents a bug that used to happen when the hint window
// was hidden. In the bug, the focus would return to the notebook