git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43673
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
#ifndef WX_PRECOMP
#include "wx/settings.h"
#include "wx/image.h"
#ifndef WX_PRECOMP
#include "wx/settings.h"
#include "wx/image.h"
#endif
#include "wx/aui/tabmdi.h"
#include "wx/dcbuffer.h"
#endif
#include "wx/aui/tabmdi.h"
#include "wx/dcbuffer.h"
#ifdef __WXMAC__
#include "wx/mac/carbon/private.h"
#ifdef __WXMAC__
#include "wx/mac/carbon/private.h"
{
base_colour = wxAuiStepColour(base_colour, 92);
}
{
base_colour = wxAuiStepColour(base_colour, 92);
}
m_base_colour = base_colour;
wxColor border_colour = wxAuiStepColour(base_colour, 75);
m_base_colour = base_colour;
wxColor border_colour = wxAuiStepColour(base_colour, 75);
m_fixed_tab_width = 100;
int tot_width = (int)tab_ctrl_size.x - GetIndentSize() - 4;
m_fixed_tab_width = 100;
int tot_width = (int)tab_ctrl_size.x - GetIndentSize() - 4;
if (m_flags & wxAUI_NB_CLOSE_BUTTON)
tot_width -= m_active_close_bmp.GetWidth();
if (m_flags & wxAUI_NB_WINDOWLIST_BUTTON)
if (m_flags & wxAUI_NB_CLOSE_BUTTON)
tot_width -= m_active_close_bmp.GetWidth();
if (m_flags & wxAUI_NB_WINDOWLIST_BUTTON)
// we'll just use a rectangle for the clipping region for now --
dc.SetClippingRegion(tab_x, tab_y, clip_width+1, tab_height-3);
// we'll just use a rectangle for the clipping region for now --
dc.SetClippingRegion(tab_x, tab_y, clip_width+1, tab_height-3);
wxPoint border_points[6];
border_points[0] = wxPoint(tab_x, tab_y+tab_height-4);
border_points[1] = wxPoint(tab_x, tab_y+2);
wxPoint border_points[6];
border_points[0] = wxPoint(tab_x, tab_y+tab_height-4);
border_points[1] = wxPoint(tab_x, tab_y+2);
r.width -= 4;
r.height /= 2;
r.height--;
r.width -= 4;
r.height /= 2;
r.height--;
// -- draw top gradient fill for glossy look
wxColor top_color = m_base_colour;
wxColor bottom_color = wxAuiStepColour(top_color, 160);
dc.GradientFillLinear(r, bottom_color, top_color, wxNORTH);
// -- draw top gradient fill for glossy look
wxColor top_color = m_base_colour;
wxColor bottom_color = wxAuiStepColour(top_color, 160);
dc.GradientFillLinear(r, bottom_color, top_color, wxNORTH);
// -- draw bottom fill for glossy look
top_color = m_base_colour;
bottom_color = m_base_colour;
// -- draw bottom fill for glossy look
top_color = m_base_colour;
bottom_color = m_base_colour;
const wxAuiNotebookPageArray& pages,
int active_idx)
{
const wxAuiNotebookPageArray& pages,
int active_idx)
{
size_t i, count = pages.GetCount();
for (i = 0; i < count; ++i)
size_t i, count = pages.GetCount();
for (i = 0; i < count; ++i)
measure_bmp.Create(required_bmp_size.x,
required_bmp_size.y);
}
measure_bmp.Create(required_bmp_size.x,
required_bmp_size.y);
}
int max_y = 0;
size_t i, page_count = pages.GetCount();
int max_y = 0;
size_t i, page_count = pages.GetCount();
true,
wxAUI_BUTTON_STATE_HIDDEN,
&x_ext);
true,
wxAUI_BUTTON_STATE_HIDDEN,
&x_ext);
max_y = wxMax(max_y, s.y);
}
max_y = wxMax(max_y, s.y);
}
const wxAuiNotebookPageArray& pages,
int active_idx)
{
const wxAuiNotebookPageArray& pages,
int active_idx)
{
size_t i, count = pages.GetCount();
for (i = 0; i < count; ++i)
size_t i, count = pages.GetCount();
for (i = 0; i < count; ++i)
EVT_LEFT_UP(wxAuiTabCtrl::OnLeftUp)
EVT_MOTION(wxAuiTabCtrl::OnMotion)
EVT_LEAVE_WINDOW(wxAuiTabCtrl::OnLeaveWindow)
EVT_LEFT_UP(wxAuiTabCtrl::OnLeftUp)
EVT_MOTION(wxAuiTabCtrl::OnMotion)
EVT_LEAVE_WINDOW(wxAuiTabCtrl::OnLeaveWindow)
- EVT_AUINOTEBOOK_BUTTON(-1, wxAuiTabCtrl::OnButton)
+ EVT_AUINOTEBOOK_BUTTON(wxID_ANY, wxAuiTabCtrl::OnButton)
m_dummy_wnd = NULL;
m_flags = (unsigned int)style;
m_tab_ctrl_height = 20;
m_dummy_wnd = NULL;
m_flags = (unsigned int)style;
m_tab_ctrl_height = 20;
m_normal_font = *wxNORMAL_FONT;
m_selected_font = *wxNORMAL_FONT;
m_selected_font.SetWeight(wxBOLD);
m_normal_font = *wxNORMAL_FONT;
m_selected_font = *wxNORMAL_FONT;
m_selected_font.SetWeight(wxBOLD);
void wxAuiNotebook::SetTabCtrlHeight(int height)
{
m_requested_tabctrl_height = height;
void wxAuiNotebook::SetTabCtrlHeight(int height)
{
m_requested_tabctrl_height = height;
// if window is already initialized, recalculate the tab height
if (m_dummy_wnd)
{
// if window is already initialized, recalculate the tab height
if (m_dummy_wnd)
{
void wxAuiNotebook::SetUniformBitmapSize(const wxSize& size)
{
m_requested_bmp_size = size;
void wxAuiNotebook::SetUniformBitmapSize(const wxSize& size)
{
m_requested_bmp_size = size;
// if window is already initialized, recalculate the tab height
if (m_dummy_wnd)
{
// if window is already initialized, recalculate the tab height
if (m_dummy_wnd)
{
{
// get the tab ctrl height we will use
int height = CalculateTabCtrlHeight();
{
// 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)
// if the tab control height needs to change, update
// all of our tab controls with the new height
if (m_tab_ctrl_height != height)
void wxAuiNotebook::UpdateHintWindowSize()
{
wxSize size = CalculateNewSplitSize();
void wxAuiNotebook::UpdateHintWindowSize()
{
wxSize size = CalculateNewSplitSize();
// the placeholder hint window should be set to this size
wxAuiPaneInfo& info = m_mgr.GetPane(wxT("dummy"));
if (info.IsOk())
// the placeholder hint window should be set to this size
wxAuiPaneInfo& info = m_mgr.GetPane(wxT("dummy"));
if (info.IsOk())
// if there is only one tab control, the first split
// should happen around the middle
if (tab_ctrl_count < 2)
// if there is only one tab control, the first split
// should happen around the middle
if (tab_ctrl_count < 2)
// that needs to be implemented
new_split_size = wxSize(180,180);
}
// that needs to be implemented
new_split_size = wxSize(180,180);
}
// tab height
if (m_requested_tabctrl_height != -1)
return m_requested_tabctrl_height;
// tab height
if (m_requested_tabctrl_height != -1)
return m_requested_tabctrl_height;
// find out new best tab height
wxAuiTabArt* art = m_tabs.GetArtProvider();
// find out new best tab height
wxAuiTabArt* art = m_tabs.GetArtProvider();
size_t wxAuiNotebook::SetSelection(size_t new_page)
{
// don't change the page unless necessary
size_t wxAuiNotebook::SetSelection(size_t new_page)
{
// don't change the page unless necessary
- if (new_page == m_curpage)
+ if ((int)new_page == m_curpage)
wxWindow* wnd = m_tabs.GetWindowFromIdx(new_page);
if (!wnd)
return m_curpage;
wxWindow* wnd = m_tabs.GetWindowFromIdx(new_page);
if (!wnd)
return m_curpage;
void wxAuiNotebook::OnSize(wxSizeEvent& evt)
{
UpdateHintWindowSize();
void wxAuiNotebook::OnSize(wxSizeEvent& evt)
{
UpdateHintWindowSize();
// force the set selection function reset the selection
m_curpage = -1;
// 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));
// set the active page to the one we just split off
SetSelection(m_tabs.GetIdxFromWindow(page_info.window));
UpdateHintWindowSize();
}
}
UpdateHintWindowSize();
}
}