wxWidgets/include/wx/univ/notebook.h
Vadim Zeitlin 3f66f6a5b3 Remove all lines containing cvs/svn "$Id$" keyword.
This keyword is not expanded by Git which means it's not replaced with the
correct revision value in the releases made using git-based scripts and it's
confusing to have lines with unexpanded "$Id$" in the released files. As
expanding them with Git is not that simple (it could be done with git archive
and export-subst attribute) and there are not many benefits in having them in
the first place, just remove all these lines.

If nothing else, this will make an eventual transition to Git simpler.

Closes #14487.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-26 16:02:46 +00:00

252 lines
7.7 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: wx/univ/notebook.h
// Purpose: universal version of wxNotebook
// Author: Vadim Zeitlin
// Modified by:
// Created: 01.02.01
// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_UNIV_NOTEBOOK_H_
#define _WX_UNIV_NOTEBOOK_H_
#include "wx/arrstr.h"
class WXDLLIMPEXP_FWD_CORE wxSpinButton;
// ----------------------------------------------------------------------------
// the actions supported by this control
// ----------------------------------------------------------------------------
// change the page: to the next/previous/given one
#define wxACTION_NOTEBOOK_NEXT wxT("nexttab")
#define wxACTION_NOTEBOOK_PREV wxT("prevtab")
#define wxACTION_NOTEBOOK_GOTO wxT("gototab")
// ----------------------------------------------------------------------------
// wxNotebook
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxNotebook : public wxNotebookBase
{
public:
// ctors and such
// --------------
wxNotebook() { Init(); }
wxNotebook(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
const wxString& name = wxNotebookNameStr)
{
Init();
(void)Create(parent, id, pos, size, style, name);
}
// quasi ctor
bool Create(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
const wxString& name = wxNotebookNameStr);
// dtor
virtual ~wxNotebook();
// implement wxNotebookBase pure virtuals
// --------------------------------------
virtual int SetSelection(size_t nPage) { return DoSetSelection(nPage, SetSelection_SendEvent); }
// changes selected page without sending events
int ChangeSelection(size_t nPage) { return DoSetSelection(nPage); }
virtual bool SetPageText(size_t nPage, const wxString& strText);
virtual wxString GetPageText(size_t nPage) const;
virtual int GetPageImage(size_t nPage) const;
virtual bool SetPageImage(size_t nPage, int nImage);
virtual void SetPageSize(const wxSize& size);
virtual void SetPadding(const wxSize& padding);
virtual void SetTabSize(const wxSize& sz);
virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
virtual bool DeleteAllPages();
virtual bool InsertPage(size_t nPage,
wxNotebookPage *pPage,
const wxString& strText,
bool bSelect = false,
int imageId = NO_IMAGE);
// style tests
// -----------
// return true if all tabs have the same width
bool FixedSizeTabs() const { return HasFlag(wxNB_FIXEDWIDTH); }
// return wxTOP/wxBOTTOM/wxRIGHT/wxLEFT
wxDirection GetTabOrientation() const;
// return true if the notebook has tabs at the sidesand not at the top (or
// bottom) as usual
bool IsVertical() const;
// hit testing
// -----------
virtual int HitTest(const wxPoint& pt, long *flags = NULL) const;
// input handling
// --------------
virtual bool PerformAction(const wxControlAction& action,
long numArg = 0l,
const wxString& strArg = wxEmptyString);
static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef);
virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef)
{
return GetStdInputHandler(handlerDef);
}
// refresh the currently selected tab
void RefreshCurrent();
protected:
virtual wxNotebookPage *DoRemovePage(size_t nPage);
// drawing
virtual void DoDraw(wxControlRenderer *renderer);
void DoDrawTab(wxDC& dc, const wxRect& rect, size_t n);
// resizing
virtual void DoMoveWindow(int x, int y, int width, int height);
virtual void DoSetSize(int x, int y,
int width, int height,
int sizeFlags = wxSIZE_AUTO);
int DoSetSelection(size_t nPage, int flags = 0);
// common part of all ctors
void Init();
// resize the tab to fit its title (and icon if any)
void ResizeTab(int page);
// recalculate the geometry of the notebook completely
void Relayout();
// is the spin button currently shown?
bool HasSpinBtn() const;
// calculate last (fully) visible tab: updates m_lastVisible
void CalcLastVisibleTab();
// show or hide the spin control for tabs scrolling depending on whether it
// is needed or not
void UpdateSpinBtn();
// position the spin button
void PositionSpinBtn();
// refresh the given tab only
void RefreshTab(int page, bool forceSelected = false);
// refresh all tabs
void RefreshAllTabs();
// get the tab rect (inefficient, don't use this in a loop)
wxRect GetTabRect(int page) const;
// get the rectangle containing all tabs
wxRect GetAllTabsRect() const;
// get the part occupied by the tabs - slightly smaller than
// GetAllTabsRect() because the tabs may be indented from it
wxRect GetTabsPart() const;
// calculate the tab size (without padding)
wxSize CalcTabSize(int page) const;
// get the (cached) size of a tab
void GetTabSize(int page, wxCoord *w, wxCoord *h) const;
// get the (cached) width of the tab
wxCoord GetTabWidth(int page) const
{ return FixedSizeTabs() ? m_widthMax : m_widths[page]; }
// return true if the tab has an associated image
bool HasImage(int page) const
{ return HasImageList() && m_images[page] != -1; }
// get the part of the notebook reserved for the pages (slightly larger
// than GetPageRect() as we draw a border and leave marginin between)
wxRect GetPagePart() const;
// get the page rect in our client coords
wxRect GetPageRect() const;
// get our client size from the page size
wxSize GetSizeForPage(const wxSize& size) const;
// scroll the tabs so that the first page shown becomes the given one
void ScrollTo(size_t page);
// scroll the tabs so that the first page shown becomes the given one
void ScrollLastTo(size_t page);
// the pages titles
wxArrayString m_titles;
// the spin button to change the pages
wxSpinButton *m_spinbtn;
// the offset of the first page shown (may be changed with m_spinbtn)
wxCoord m_offset;
// the first and last currently visible tabs: the name is not completely
// accurate as m_lastVisible is, in fact, the first tab which is *not*
// visible: so the visible tabs are those with indexes such that
// m_firstVisible <= n < m_lastVisible
size_t m_firstVisible,
m_lastVisible;
// the last fully visible item, usually just m_lastVisible - 1 but may be
// different from it
size_t m_lastFullyVisible;
// the height of tabs in a normal notebook or the width of tabs in a
// notebook with tabs on a side
wxCoord m_heightTab;
// the biggest height (or width) of a notebook tab (used only if
// FixedSizeTabs()) or -1 if not calculated yet
wxCoord m_widthMax;
// the cached widths (or heights) of tabs
wxArrayInt m_widths;
// the icon indices
wxArrayInt m_images;
// the accel indexes for labels
wxArrayInt m_accels;
// the padding
wxSize m_sizePad;
DECLARE_DYNAMIC_CLASS(wxNotebook)
};
#endif // _WX_UNIV_NOTEBOOK_H_