From 8dc797d705eafed9ed68b9d0498ce3a8ce7adfd2 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Thu, 21 Jun 2007 15:07:51 +0000 Subject: [PATCH] Added font setting and ability to determine AUI notebook height for a given page height git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@46583 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/latex/wx/auinotebook.tex | 37 ++++++++++++ include/wx/aui/auibook.h | 104 ++++++++++++++++++++-------------- src/aui/auibook.cpp | 77 ++++++++++++++++++++----- 3 files changed, 163 insertions(+), 55 deletions(-) diff --git a/docs/latex/wx/auinotebook.tex b/docs/latex/wx/auinotebook.tex index b7d3ba5921..3c26493a78 100644 --- a/docs/latex/wx/auinotebook.tex +++ b/docs/latex/wx/auinotebook.tex @@ -81,6 +81,13 @@ Deletes a page at the given index. Calling this method will generate a page cha Returns the associated art provider. +\membersection{wxAuiNotebook::GetHeightForPageHeight}\label{wxauinotebookgetheightforpageheight} + +\func{int}{GetHeightForPageHeight}{\param{int }{pageHeight}} + +Returns the desired height of the notebook for the given page height. Use this to fit the notebook to +a given page size. + \membersection{wxAuiNotebook::GetPage}\label{wxauinotebookgetpage} \constfunc{wxWindow*}{GetPage}{\param{size\_t }{page\_idx}} @@ -118,6 +125,12 @@ Returns the tab label for the page. Returns the currently selected page. +\membersection{wxAuiNotebook::GetTabCtrlHeight}\label{wxauinotebookgettabctrlheight} + +\constfunc{int}{GetTabCtrlHeight}{\void} + +Returns the height of the tab control. + \membersection{wxAuiNotebook::InsertPage}\label{wxauinotebookinsertpage} \func{bool}{InsertPage}{\param{size\_t }{page\_idx}, \param{wxWindow* }{page}, \param{const wxString\& }{caption}, \param{bool }{select = false}, \param{const wxBitmap\& }{bitmap = wxNullBitmap}} @@ -137,6 +150,30 @@ Removes a page, without deleting the window pointer. Sets the art provider to be used by the notebook. +\membersection{wxAuiNotebook::SetFont}\label{wxauinotebooksetfont} + +\func{bool}{SetFont}{\param{const wxFont\& }{font}} + +Sets the font for drawing the tab labels, using a bold version of the font for selected tab labels. + +\membersection{wxAuiNotebook::SetNormalFont}\label{wxauinotebooksetnormalfont} + +\func{void}{SetNormalFont}{\param{const wxFont\& }{font}} + +Sets the font for drawing unselected tab labels. + +\membersection{wxAuiNotebook::SetSelectedFont}\label{wxauinotebooksetselectedfont} + +\func{void}{SetSelectedFont}{\param{const wxFont\& }{font}} + +Sets the font for drawing selected tab labels. + +\membersection{wxAuiNotebook::SetMeasuringFont}\label{wxauinotebooksetmeasuringfont} + +\func{void}{SetMeasuringFont}{\param{const wxFont\& }{font}} + +Sets the font for measuring tab labels. + \membersection{wxAuiNotebook::SetPageBitmap}\label{wxauinotebooksetpagebitmap} \func{bool}{SetPageBitmap}{\param{size\_t }{page}, \param{const wxBitmap\& }{bitmap}} diff --git a/include/wx/aui/auibook.h b/include/wx/aui/auibook.h index 13f85d08e1..b4a6d67925 100644 --- a/include/wx/aui/auibook.h +++ b/include/wx/aui/auibook.h @@ -45,8 +45,8 @@ enum wxAuiNotebookOption wxAUI_NB_CLOSE_BUTTON = 1 << 10, wxAUI_NB_CLOSE_ON_ACTIVE_TAB = 1 << 11, wxAUI_NB_CLOSE_ON_ALL_TABS = 1 << 12, - - + + wxAUI_NB_DEFAULT_STYLE = wxAUI_NB_TOP | wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_MOVE | @@ -82,10 +82,10 @@ public: void SetSelection(int s) { selection = s; m_commandInt = s; } int GetSelection() const { return selection; } - + void SetOldSelection(int s) { old_selection = s; } int GetOldSelection() const { return old_selection; } - + void SetDragSource(wxAuiNotebook* s) { drag_source = s; } wxAuiNotebook* GetDragSource() const { return drag_source; } @@ -138,13 +138,13 @@ public: wxAuiTabArt() { } virtual ~wxAuiTabArt() { } - + virtual wxAuiTabArt* Clone() = 0; virtual void SetFlags(unsigned int flags) = 0; virtual void SetSizingInfo(const wxSize& tab_ctrl_size, size_t tab_count) = 0; - + virtual void SetNormalFont(const wxFont& font) = 0; virtual void SetSelectedFont(const wxFont& font) = 0; virtual void SetMeasuringFont(const wxFont& font) = 0; @@ -161,8 +161,8 @@ public: int close_button_state, wxRect* out_tab_rect, wxRect* out_button_rect, - int* x_extent) = 0; - + int* x_extent) = 0; + virtual void DrawButton( wxDC& dc, wxWindow* wnd, @@ -171,7 +171,7 @@ public: int button_state, int orientation, wxRect* out_rect) = 0; - + virtual wxSize GetTabSize( wxDC& dc, wxWindow* wnd, @@ -180,18 +180,18 @@ public: bool active, int close_button_state, int* x_extent) = 0; - + virtual int ShowDropDown( wxWindow* wnd, const wxAuiNotebookPageArray& items, int active_idx) = 0; - + virtual int GetIndentSize() = 0; - + virtual int GetBestTabCtrlSize( wxWindow* wnd, const wxAuiNotebookPageArray& pages, - const wxSize& required_bmp_size) = 0; + const wxSize& required_bmp_size) = 0; }; @@ -202,7 +202,7 @@ public: wxAuiDefaultTabArt(); virtual ~wxAuiDefaultTabArt(); - + wxAuiTabArt* Clone(); void SetFlags(unsigned int flags); void SetSizingInfo(const wxSize& tab_ctrl_size, @@ -216,7 +216,7 @@ public: wxDC& dc, wxWindow* wnd, const wxRect& rect); - + void DrawTab(wxDC& dc, wxWindow* wnd, const wxAuiNotebookPage& pane, @@ -225,7 +225,7 @@ public: wxRect* out_tab_rect, wxRect* out_button_rect, int* x_extent); - + void DrawButton( wxDC& dc, wxWindow* wnd, @@ -234,9 +234,9 @@ public: int button_state, int orientation, wxRect* out_rect); - + int GetIndentSize(); - + wxSize GetTabSize( wxDC& dc, wxWindow* wnd, @@ -245,7 +245,7 @@ public: bool active, int close_button_state, int* x_extent); - + int ShowDropDown( wxWindow* wnd, const wxAuiNotebookPageArray& items, @@ -253,7 +253,7 @@ public: int GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& pages, - const wxSize& required_bmp_size); + const wxSize& required_bmp_size); protected: @@ -272,7 +272,7 @@ protected: wxBitmap m_disabled_right_bmp; wxBitmap m_active_windowlist_bmp; wxBitmap m_disabled_windowlist_bmp; - + int m_fixed_tab_width; int m_tab_ctrl_height; unsigned int m_flags; @@ -286,7 +286,7 @@ public: wxAuiSimpleTabArt(); virtual ~wxAuiSimpleTabArt(); - + wxAuiTabArt* Clone(); void SetFlags(unsigned int flags); @@ -301,7 +301,7 @@ public: wxDC& dc, wxWindow* wnd, const wxRect& rect); - + void DrawTab(wxDC& dc, wxWindow* wnd, const wxAuiNotebookPage& pane, @@ -310,7 +310,7 @@ public: wxRect* out_tab_rect, wxRect* out_button_rect, int* x_extent); - + void DrawButton( wxDC& dc, wxWindow* wnd, @@ -319,9 +319,9 @@ public: int button_state, int orientation, wxRect* out_rect); - + int GetIndentSize(); - + wxSize GetTabSize( wxDC& dc, wxWindow* wnd, @@ -330,7 +330,7 @@ public: bool active, int close_button_state, int* x_extent); - + int ShowDropDown( wxWindow* wnd, const wxAuiNotebookPageArray& items, @@ -338,7 +338,7 @@ public: int GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& pages, - const wxSize& required_bmp_size); + const wxSize& required_bmp_size); protected: @@ -358,7 +358,7 @@ protected: wxBitmap m_disabled_right_bmp; wxBitmap m_active_windowlist_bmp; wxBitmap m_disabled_windowlist_bmp; - + int m_fixed_tab_width; unsigned int m_flags; }; @@ -405,7 +405,7 @@ public: void SetMeasuringFont(const wxFont& measuring_font); void DoShowHide(); void SetRect(const wxRect& rect); - + void RemoveButton(int id); void AddButton(int id, int location, @@ -414,7 +414,7 @@ public: size_t GetTabOffset() const; void SetTabOffset(size_t offset); - + protected: virtual void Render(wxDC* dc, wxWindow* wnd); @@ -444,7 +444,7 @@ public: long style = 0); ~wxAuiTabCtrl(); - + protected: void OnPaint(wxPaintEvent& evt); @@ -456,7 +456,7 @@ protected: void OnLeaveWindow(wxMouseEvent& evt); void OnButton(wxAuiNotebookEvent& evt); - + protected: wxPoint m_click_pt; @@ -494,14 +494,14 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); - + void SetWindowStyleFlag(long style); void SetArtProvider(wxAuiTabArt* art); wxAuiTabArt* GetArtProvider() const; - + virtual void SetUniformBitmapSize(const wxSize& size); virtual void SetTabCtrlHeight(int height); - + bool AddPage(wxWindow* page, const wxString& caption, bool select = false, @@ -515,7 +515,7 @@ public: bool DeletePage(size_t page); bool RemovePage(size_t page); - + size_t GetPageCount() const; wxWindow* GetPage(size_t page_idx) const; int GetPageIndex(wxWindow* page_wnd) const; @@ -535,13 +535,33 @@ public: const wxAuiManager& GetAuiManager() const { return m_mgr; } #endif +#if wxABI_VERSION >= 20805 + // Sets the normal font + void SetNormalFont(const wxFont& font); + + // Sets the selected tab font + void SetSelectedFont(const wxFont& font); + + // Sets the measuring font + void SetMeasuringFont(const wxFont& font); + + // Sets the tab font + virtual bool SetFont(const wxFont& font); + + // Gets the tab control height + int GetTabCtrlHeight() const; + + // Gets the height of the notebook for a given page height + int GetHeightForPageHeight(int pageHeight); +#endif + protected: // these can be overridden virtual void UpdateTabCtrlHeight(); virtual int CalculateTabCtrlHeight(); virtual wxSize CalculateNewSplitSize(); - + protected: void DoSizing(); @@ -552,7 +572,7 @@ protected: bool FindTab(wxWindow* page, wxAuiTabCtrl** ctrl, int* idx); void RemoveEmptyTabFrames(); void UpdateHintWindowSize(); - + protected: void OnChildFocus(wxChildFocusEvent& evt); @@ -563,7 +583,7 @@ protected: void OnTabDragMotion(wxCommandEvent& evt); void OnTabEndDrag(wxCommandEvent& evt); void OnTabButton(wxCommandEvent& evt); - + protected: wxAuiManager m_mgr; @@ -577,7 +597,7 @@ protected: wxFont m_selected_font; wxFont m_normal_font; int m_tab_ctrl_height; - + int m_last_drag_x; unsigned int m_flags; @@ -609,7 +629,7 @@ typedef void (wxEvtHandler::*wxAuiNotebookEventFunction)(wxAuiNotebookEvent&); #define wxAuiNotebookEventHandler(func) \ (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxAuiNotebookEventFunction, &func) - + #define EVT_AUINOTEBOOK_PAGE_CLOSE(winid, fn) \ wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, winid, wxAuiNotebookEventHandler(fn)) #define EVT_AUINOTEBOOK_PAGE_CHANGED(winid, fn) \ diff --git a/src/aui/auibook.cpp b/src/aui/auibook.cpp index 985658fa98..fed8c8c061 100644 --- a/src/aui/auibook.cpp +++ b/src/aui/auibook.cpp @@ -667,12 +667,12 @@ int wxAuiDefaultTabArt::ShowDropDown(wxWindow* wnd, { const wxAuiNotebookPage& page = pages.Item(i); wxString caption = page.caption; - + // if there is no caption, make it a space. This will prevent // an assert in the menu code. if (caption.IsEmpty()) caption = wxT(" "); - + menuPopup.AppendCheckItem(1000+i, caption); } @@ -2977,16 +2977,16 @@ bool wxAuiNotebook::FindTab(wxWindow* page, wxAuiTabCtrl** ctrl, int* idx) void wxAuiNotebook::Split(size_t page, int direction) { wxSize cli_size = GetClientSize(); - + // get the page's window pointer wxWindow* wnd = GetPage(page); if (!wnd) return; - + // notebooks with 1 or less pages can't be split if (GetPageCount() < 2) return; - + // find out which tab control the page currently belongs to wxAuiTabCtrl *src_tabs, *dest_tabs; int src_idx = -1; @@ -2995,7 +2995,7 @@ void wxAuiNotebook::Split(size_t page, int direction) return; if (!src_tabs || src_idx == -1) return; - + // choose a split size wxSize split_size; if (GetPageCount() > 2) @@ -3010,8 +3010,8 @@ void wxAuiNotebook::Split(size_t page, int direction) split_size.x /= 2; split_size.y /= 2; } - - + + // create a new tab frame wxTabFrame* new_tabs = new wxTabFrame; new_tabs->m_rect = wxRect(wxPoint(0,0), split_size); @@ -3029,7 +3029,7 @@ void wxAuiNotebook::Split(size_t page, int direction) // about where the pane should be added wxAuiPaneInfo pane_info = wxAuiPaneInfo().Bottom().CaptionVisible(false); wxPoint mouse_pt; - + if (direction == wxLEFT) { pane_info.Left(); @@ -3050,10 +3050,10 @@ void wxAuiNotebook::Split(size_t page, int direction) pane_info.Bottom(); mouse_pt = wxPoint(cli_size.x/2, cli_size.y); } - + m_mgr.AddPane(new_tabs, pane_info, mouse_pt); m_mgr.Update(); - + // remove the page from the source tabs wxAuiNotebookPage page_info = src_tabs->GetPage(src_idx); page_info.active = false; @@ -3080,10 +3080,10 @@ void wxAuiNotebook::Split(size_t page, int direction) // 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(); } @@ -3591,6 +3591,57 @@ void wxAuiNotebook::OnTabButton(wxCommandEvent& command_evt) } +// Sets the normal font +void wxAuiNotebook::SetNormalFont(const wxFont& font) +{ + m_normal_font = font; + GetArtProvider()->SetNormalFont(font); +} + +// Sets the selected tab font +void wxAuiNotebook::SetSelectedFont(const wxFont& font) +{ + m_selected_font = font; + GetArtProvider()->SetSelectedFont(font); +} + +// Sets the measuring font +void wxAuiNotebook::SetMeasuringFont(const wxFont& font) +{ + GetArtProvider()->SetMeasuringFont(font); +} + +// Sets the tab font +bool wxAuiNotebook::SetFont(const wxFont& font) +{ + wxControl::SetFont(font); + + wxFont normalFont(font); + wxFont selectedFont(normalFont); + selectedFont.SetWeight(wxBOLD); + + SetNormalFont(normalFont); + SetSelectedFont(selectedFont); + SetMeasuringFont(selectedFont); + + return true; +} + +// Gets the tab control height +int wxAuiNotebook::GetTabCtrlHeight() const +{ + return m_tab_ctrl_height; +} + +// Gets the height of the notebook for a given page height +int wxAuiNotebook::GetHeightForPageHeight(int pageHeight) +{ + UpdateTabCtrlHeight(); + + int tabCtrlHeight = GetTabCtrlHeight(); + int decorHeight = 2; + return tabCtrlHeight + pageHeight + decorHeight; +} #endif // wxUSE_AUI