#ifndef _WX_NOTEBOOK_H_BASE_
#define _WX_NOTEBOOK_H_BASE_
+#if defined(__GNUG__) && !defined(__APPLE__)
+ #pragma interface "notebookbase.h"
+#endif
+
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "wx/control.h"
#include "wx/dynarray.h"
+#include "wx/imaglist.h"
-class WXDLLEXPORT wxImageList;
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+// wxNotebook hit results
+enum
+{
+ wxNB_HITTEST_NOWHERE = 1, // not on tab
+ wxNB_HITTEST_ONICON = 2, // on icon
+ wxNB_HITTEST_ONLABEL = 4, // on label
+ wxNB_HITTEST_ONITEM = wxNB_HITTEST_ONICON | wxNB_HITTEST_ONLABEL
+};
// ----------------------------------------------------------------------------
// types
// array of notebook pages
typedef wxWindow wxNotebookPage; // so far, any window can be a page
-WX_DEFINE_EXPORTED_ARRAY(wxNotebookPage *, wxArrayPages);
+WX_DEFINE_EXPORTED_ARRAY_NO_PTR(wxNotebookPage *, wxArrayPages);
#define wxNOTEBOOK_NAME _T("notebook")
// ctor
wxNotebookBase()
{
- m_imageList = NULL;
+ Init();
}
// quasi ctor
long style = 0,
const wxString& name = wxNOTEBOOK_NAME);
+ // dtor
+ virtual ~wxNotebookBase();
+
// accessors
// ---------
// get number of pages in the dialog
- int GetPageCount() const { return m_pages.GetCount(); }
+ int GetPageCount() const { return (int) m_pages.GetCount(); }
// get the panel which represents the given page
wxNotebookPage *GetPage(int nPage) { return m_pages[nPage]; }
// image list stuff: each page may have an image associated with it (all
// images belong to the same image list)
- virtual void SetImageList(wxImageList* imageList)
- {
- m_imageList = imageList;
- }
+ virtual void SetImageList(wxImageList* imageList);
+
+ // as SetImageList() but we will delete the image list ourselves
+ void AssignImageList(wxImageList* imageList);
// get pointer (may be NULL) to the associated image list
wxImageList* GetImageList() const { return m_imageList; }
virtual void SetTabSize(const wxSize& sz) = 0;
// calculate the size of the notebook from the size of its page
- virtual wxSize CalcSizeFromPage(const wxSize& sizePage)
- {
- // this was just taken from wxNotebookSizer::CalcMin() and is, of
- // course, totally bogus - just like the original code was
- wxSize sizeTotal = sizePage;
- if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) )
- sizeTotal.x += 90;
- else
- sizeTotal.y += 40;
-
- return sizeTotal;
- }
+ virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
// operations
// ----------
// remove one page from the notebook and delete it
- virtual bool DeletePage(int nPage)
- {
- wxNotebookPage *page = DoRemovePage(nPage);
- if ( !page )
- return FALSE;
-
- delete page;
-
- return TRUE;
- }
+ virtual bool DeletePage(int nPage);
// remove one page from the notebook, without deleting it
virtual bool RemovePage(int nPage) { return DoRemovePage(nPage) != NULL; }
// NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
virtual int SetSelection(int nPage) = 0;
+ // hit test, returns which tab is hit and, optionally, where (icon, label)
+ // (not implemented on all platforms)
+ virtual int HitTest(const wxPoint& WXUNUSED(pt),
+ long * WXUNUSED(flags) = NULL) const
+ {
+ return wxNOT_FOUND;
+ }
+
// cycle thru the tabs
void AdvanceSelection(bool forward = TRUE)
{
protected:
// remove the page and return a pointer to it
- virtual wxNotebookPage *DoRemovePage(int page) = 0;
+ virtual wxNotebookPage *DoRemovePage(int page);
+ // return the minimum size large enough to display the largest page entirely
+ virtual wxSize DoGetBestSize() const;
- // get the next page wrapping if we reached the end
- int GetNextPage(bool forward) const
- {
- int nPage;
-
- int nMax = GetPageCount();
- if ( nMax-- ) // decrement it to get the last valid index
- {
- int nSel = GetSelection();
+ // common part of all ctors
+ void Init();
- // change selection wrapping if it becomes invalid
- nPage = forward ? nSel == nMax ? 0
- : nSel + 1
- : nSel == 0 ? nMax
- : nSel - 1;
- }
- else // notebook is empty, no next page
- {
- nPage = -1;
- }
+ // get the next page wrapping if we reached the end
+ int GetNextPage(bool forward) const;
- return nPage;
- }
+ wxArrayPages m_pages; // array of pages
+ wxImageList *m_imageList; // we can have an associated image list
+ bool m_ownsImageList; // true if we must delete m_imageList
- wxImageList *m_imageList; // we can have an associated image list
- wxArrayPages m_pages; // array of pages
+ DECLARE_NO_COPY_CLASS(wxNotebookBase)
};
// ----------------------------------------------------------------------------
int m_nSel, // currently selected page
m_nOldSel; // previously selected page
- DECLARE_DYNAMIC_CLASS(wxNotebookEvent)
+ DECLARE_DYNAMIC_CLASS_NO_COPY(wxNotebookEvent)
};
// ----------------------------------------------------------------------------
// event types and macros for them
// ----------------------------------------------------------------------------
-#if defined(__BORLANDC__) && defined(__WIN16__)
- // For 16-bit BC++, these 2 would be identical otherwise (truncated)
- #define wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED wxEVT_COMMAND_NB_PAGE_CHANGED
- #define wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING wxEVT_COMMAND_NB_PAGE_CHANGING
-#endif
-
BEGIN_DECLARE_EVENT_TYPES()
DECLARE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, 802)
DECLARE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, 803)
typedef void (wxEvtHandler::*wxNotebookEventFunction)(wxNotebookEvent&);
-// Truncation in 16-bit BC++ means we need to define these differently
-#if defined(__BORLANDC__) && defined(__WIN16__)
-#define EVT_NOTEBOOK_PAGE_CHANGED(id, fn) \
- DECLARE_EVENT_TABLE_ENTRY( \
- wxEVT_COMMAND_NB_PAGE_CHANGED, \
- id, \
- -1, \
- (wxObjectEventFunction)(wxEventFunction)(wxNotebookEventFunction) &fn, \
- NULL \
- ),
-
-#define EVT_NOTEBOOK_PAGE_CHANGING(id, fn) \
- DECLARE_EVENT_TABLE_ENTRY( \
- wxEVT_COMMAND_NB_PAGE_CHANGING, \
- id, \
- -1, \
- (wxObjectEventFunction)(wxEventFunction)(wxNotebookEventFunction) &fn, \
- NULL \
- ),
-
-#else
-
#define EVT_NOTEBOOK_PAGE_CHANGED(id, fn) \
DECLARE_EVENT_TABLE_ENTRY( \
wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, \
NULL \
),
-#endif
-
// ----------------------------------------------------------------------------
// wxNotebook class itself
// ----------------------------------------------------------------------------
#if defined(__WXUNIVERSAL__)
#include "wx/univ/notebook.h"
#elif defined(__WXMSW__)
- #ifdef __WIN16__
- #include "wx/generic/notebook.h"
- #else
- #include "wx/msw/notebook.h"
- #endif
+ #include "wx/msw/notebook.h"
#elif defined(__WXMOTIF__)
#include "wx/generic/notebook.h"
#elif defined(__WXGTK__)
#include "wx/gtk/notebook.h"
-#elif defined(__WXQT__)
- #include "wx/qt/notebook.h"
#elif defined(__WXMAC__)
#include "wx/mac/notebook.h"
+#elif defined(__WXCOCOA__)
+ #include "wx/generic/notebook.h"
#elif defined(__WXPM__)
#include "wx/os2/notebook.h"
-#elif defined(__WXSTUBS__)
- #include "wx/stubs/notebook.h"
#endif
#endif // wxUSE_NOTEBOOK