1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/gtk1/notebook.h
3// Purpose:     wxNotebook class
4// Author:      Robert Roebling
5// Modified by:
6// RCS-ID:      $Id: notebook.h 41738 2006-10-08 17:37:23Z VZ $
7// Copyright:   (c) Julian Smart and Robert Roebling
8// Licence:     wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11#ifndef __GTKNOTEBOOKH__
12#define __GTKNOTEBOOKH__
13
14//-----------------------------------------------------------------------------
15// internal class
16//-----------------------------------------------------------------------------
17
18class WXDLLIMPEXP_CORE wxGtkNotebookPage;
19
20#include "wx/list.h"
21WX_DECLARE_LIST(wxGtkNotebookPage, wxGtkNotebookPagesList);
22
23//-----------------------------------------------------------------------------
24// wxNotebook
25//-----------------------------------------------------------------------------
26
27class WXDLLIMPEXP_CORE wxNotebook : public wxNotebookBase
28{
29public:
30      // default for dynamic class
31    wxNotebook();
32      // the same arguments as for wxControl
33    wxNotebook(wxWindow *parent,
34             wxWindowID id,
35             const wxPoint& pos = wxDefaultPosition,
36             const wxSize& size = wxDefaultSize,
37             long style = 0,
38             const wxString& name = wxNotebookNameStr);
39      // Create() function
40    bool Create(wxWindow *parent,
41              wxWindowID id,
42              const wxPoint& pos = wxDefaultPosition,
43              const wxSize& size = wxDefaultSize,
44              long style = 0,
45              const wxString& name = wxNotebookNameStr);
46      // dtor
47    virtual ~wxNotebook();
48
49  // accessors
50  // ---------
51
52    // set the currently selected page, return the index of the previously
53    // selected one (or -1 on error)
54    // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
55    int SetSelection(size_t nPage) { return DoSetSelection(nPage, SetSelection_SendEvent); }
56    // get the currently selected page
57    int GetSelection() const;
58
59    // changes selected page without sending events
60    int ChangeSelection(size_t nPage) { return DoSetSelection(nPage); }
61
62    // set/get the title of a page
63  bool SetPageText(size_t nPage, const wxString& strText);
64  wxString GetPageText(size_t nPage) const;
65
66    // sets/returns item's image index in the current image list
67  int  GetPageImage(size_t nPage) const;
68  bool SetPageImage(size_t nPage, int nImage);
69
70  // control the appearance of the notebook pages
71    // set the size (the same for all pages)
72  void SetPageSize(const wxSize& size);
73    // set the padding between tabs (in pixels)
74  void SetPadding(const wxSize& padding);
75    // sets the size of the tabs (assumes all tabs are the same size)
76  void SetTabSize(const wxSize& sz);
77
78  virtual int HitTest(const wxPoint& pt, long *flags = NULL) const;
79
80  // operations
81  // ----------
82    // remove all pages
83  bool DeleteAllPages();
84
85    // adds a new page to the notebook (it will be deleted by the notebook,
86    // don't delete it yourself). If bSelect, this page becomes active.
87    // the same as AddPage(), but adds it at the specified position
88    bool InsertPage( size_t position,
89                     wxNotebookPage *win,
90                     const wxString& strText,
91                     bool bSelect = false,
92                     int imageId = -1 );
93
94    // handler for tab navigation
95    // --------------------------
96    void OnNavigationKey(wxNavigationKeyEvent& event);
97
98
99    static wxVisualAttributes
100    GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
101
102    // implementation
103    // --------------
104
105#if wxUSE_CONSTRAINTS
106    void SetConstraintSizes(bool recurse);
107    bool DoPhase(int phase);
108#endif
109
110    // set all page's attributes
111    void DoApplyWidgetStyle(GtkRcStyle *style);
112
113    // report if window belongs to notebook
114    bool IsOwnGtkWindow( GdkWindow *window );
115
116    // common part of all ctors
117    void Init();
118
119    // helper function
120    wxGtkNotebookPage* GetNotebookPage(int page) const;
121
122    // the additional page data (the pages themselves are in m_pages array)
123    wxGtkNotebookPagesList m_pagesData;
124
125    // for reasons explained in gtk/notebook.cpp we store the current
126    // selection internally instead of querying the notebook for it
127    int m_selection;
128
129    // flag set to true while we're inside "switch_page" callback
130    bool m_inSwitchPage;
131
132    // flag set to true when the switch-page signal has been programatically generated
133    bool m_skipNextPageChangeEvent;
134
135protected:
136    // remove one page from the notebook but do not destroy it
137    virtual wxNotebookPage *DoRemovePage(size_t nPage);
138
139    int DoSetSelection(size_t nPage, int flags = 0);
140
141private:
142    // the padding set by SetPadding()
143    int m_padding;
144
145    DECLARE_DYNAMIC_CLASS(wxNotebook)
146    DECLARE_EVENT_TABLE()
147};
148
149#endif
150    // __GTKNOTEBOOKH__
151