home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / include / wx / notebook.h < prev    next >
C/C++ Source or Header  |  2002-08-31  |  11KB  |  287 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name:        wx/notebook.h
  3. // Purpose:     wxNotebook interface
  4. // Author:      Vadim Zeitlin
  5. // Modified by:
  6. // Created:     01.02.01
  7. // RCS-ID:      $Id: notebook.h,v 1.22 2002/08/31 11:29:11 GD Exp $
  8. // Copyright:   (c) 1996-2000 wxWindows team
  9. // Licence:     wxWindows licence
  10. ///////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifndef _WX_NOTEBOOK_H_BASE_
  13. #define _WX_NOTEBOOK_H_BASE_
  14.  
  15. #if defined(__GNUG__) && !defined(__APPLE__)
  16.     #pragma interface "notebookbase.h"
  17. #endif
  18.  
  19. // ----------------------------------------------------------------------------
  20. // headers
  21. // ----------------------------------------------------------------------------
  22.  
  23. #include "wx/defs.h"
  24.  
  25. #if wxUSE_NOTEBOOK
  26.  
  27. #include "wx/control.h"
  28. #include "wx/dynarray.h"
  29. #include "wx/imaglist.h"
  30.  
  31. // ----------------------------------------------------------------------------
  32. // types
  33. // ----------------------------------------------------------------------------
  34.  
  35. // array of notebook pages
  36. typedef wxWindow wxNotebookPage;  // so far, any window can be a page
  37.  
  38. WX_DEFINE_EXPORTED_ARRAY(wxNotebookPage *, wxArrayPages);
  39.  
  40. #define wxNOTEBOOK_NAME _T("notebook")
  41.  
  42. // ----------------------------------------------------------------------------
  43. // wxNotebookBase: define wxNotebook interface
  44. // ----------------------------------------------------------------------------
  45.  
  46. class WXDLLEXPORT wxNotebookBase : public wxControl
  47. {
  48. public:
  49.     // ctor
  50.     wxNotebookBase()
  51.     {
  52.         Init();
  53.     }
  54.  
  55.     // quasi ctor
  56.     bool Create(wxWindow *parent,
  57.                 wxWindowID id,
  58.                 const wxPoint& pos = wxDefaultPosition,
  59.                 const wxSize& size = wxDefaultSize,
  60.                 long style = 0,
  61.                 const wxString& name = wxNOTEBOOK_NAME);
  62.  
  63.     // dtor
  64.     virtual ~wxNotebookBase();
  65.  
  66.     // accessors
  67.     // ---------
  68.  
  69.     // get number of pages in the dialog
  70.     int GetPageCount() const { return m_pages.GetCount(); }
  71.  
  72.     // get the panel which represents the given page
  73.     wxNotebookPage *GetPage(int nPage) { return m_pages[nPage]; }
  74.  
  75.     // get the currently selected page
  76.     virtual int GetSelection() const = 0;
  77.  
  78.     // set/get the title of a page
  79.     virtual bool SetPageText(int nPage, const wxString& strText) = 0;
  80.     virtual wxString GetPageText(int nPage) const = 0;
  81.  
  82.     // image list stuff: each page may have an image associated with it (all
  83.     // images belong to the same image list)
  84.     virtual void SetImageList(wxImageList* imageList);
  85.  
  86.     // as SetImageList() but we will delete the image list ourselves
  87.     void AssignImageList(wxImageList* imageList);
  88.  
  89.     // get pointer (may be NULL) to the associated image list
  90.     wxImageList* GetImageList() const { return m_imageList; }
  91.  
  92.     // sets/returns item's image index in the current image list
  93.     virtual int GetPageImage(int nPage) const = 0;
  94.     virtual bool SetPageImage(int nPage, int nImage) = 0;
  95.  
  96.     // get the number of rows for a control with wxNB_MULTILINE style (not all
  97.     // versions support it - they will always return 1 then)
  98.     virtual int GetRowCount() const { return 1; }
  99.  
  100.     // set the size (the same for all pages)
  101.     virtual void SetPageSize(const wxSize& size) = 0;
  102.  
  103.     // set the padding between tabs (in pixels)
  104.     virtual void SetPadding(const wxSize& padding) = 0;
  105.  
  106.     // set the size of the tabs for wxNB_FIXEDWIDTH controls
  107.     virtual void SetTabSize(const wxSize& sz) = 0;
  108.  
  109.     // calculate the size of the notebook from the size of its page
  110.     virtual wxSize CalcSizeFromPage(const wxSize& sizePage);
  111.  
  112.     // operations
  113.     // ----------
  114.  
  115.     // remove one page from the notebook and delete it
  116.     virtual bool DeletePage(int nPage);
  117.  
  118.     // remove one page from the notebook, without deleting it
  119.     virtual bool RemovePage(int nPage) { return DoRemovePage(nPage) != NULL; }
  120.  
  121.     // remove all pages and delete them
  122.     virtual bool DeleteAllPages() { WX_CLEAR_ARRAY(m_pages); return TRUE; }
  123.  
  124.     // adds a new page to the notebook (it will be deleted by the notebook,
  125.     // don't delete it yourself) and make it the current one if bSelect
  126.     virtual bool AddPage(wxNotebookPage *pPage,
  127.                          const wxString& strText,
  128.                          bool bSelect = FALSE,
  129.                          int imageId = -1)
  130.     {
  131.         return InsertPage(GetPageCount(), pPage, strText, bSelect, imageId);
  132.     }
  133.  
  134.     // the same as AddPage(), but adds the page at the specified position
  135.     virtual bool InsertPage(int nPage,
  136.                             wxNotebookPage *pPage,
  137.                             const wxString& strText,
  138.                             bool bSelect = FALSE,
  139.                             int imageId = -1) = 0;
  140.  
  141.     // set the currently selected page, return the index of the previously
  142.     // selected one (or -1 on error)
  143.     //
  144.     // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
  145.     virtual int SetSelection(int nPage) = 0;
  146.  
  147.     // cycle thru the tabs
  148.     void AdvanceSelection(bool forward = TRUE)
  149.     {
  150.         int nPage = GetNextPage(forward);
  151.         if ( nPage != -1 )
  152.             SetSelection(nPage);
  153.     }
  154.  
  155. protected:
  156.     // remove the page and return a pointer to it
  157.     virtual wxNotebookPage *DoRemovePage(int page);
  158.  
  159.     // common part of all ctors
  160.     void Init();
  161.  
  162.     // get the next page wrapping if we reached the end
  163.     int GetNextPage(bool forward) const;
  164.  
  165.     wxArrayPages  m_pages;      // array of pages
  166.     wxImageList  *m_imageList;  // we can have an associated image list
  167.     bool m_ownsImageList;       // true if we must delete m_imageList
  168. };
  169.  
  170. // ----------------------------------------------------------------------------
  171. // notebook event class (used by NOTEBOOK_PAGE_CHANGED/ING events)
  172. // ----------------------------------------------------------------------------
  173.  
  174. class WXDLLEXPORT wxNotebookEvent : public wxNotifyEvent
  175. {
  176. public:
  177.     wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
  178.                     int nSel = -1, int nOldSel = -1)
  179.         : wxNotifyEvent(commandType, id)
  180.         {
  181.             m_nSel = nSel;
  182.             m_nOldSel = nOldSel;
  183.         }
  184.  
  185.     // accessors
  186.         // the currently selected page (-1 if none)
  187.     int GetSelection() const { return m_nSel; }
  188.     void SetSelection(int nSel) { m_nSel = nSel; }
  189.         // the page that was selected before the change (-1 if none)
  190.     int GetOldSelection() const { return m_nOldSel; }
  191.     void SetOldSelection(int nOldSel) { m_nOldSel = nOldSel; }
  192.  
  193. private:
  194.     int m_nSel,     // currently selected page
  195.         m_nOldSel;  // previously selected page
  196.  
  197.     DECLARE_DYNAMIC_CLASS(wxNotebookEvent)
  198. };
  199.  
  200. // ----------------------------------------------------------------------------
  201. // event types and macros for them
  202. // ----------------------------------------------------------------------------
  203.  
  204. #if defined(__BORLANDC__) && defined(__WIN16__)
  205.     // For 16-bit BC++, these 2 would be identical otherwise (truncated)
  206.     #define wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED wxEVT_COMMAND_NB_PAGE_CHANGED
  207.     #define wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING wxEVT_COMMAND_NB_PAGE_CHANGING
  208. #endif
  209.  
  210. BEGIN_DECLARE_EVENT_TYPES()
  211.     DECLARE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, 802)
  212.     DECLARE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, 803)
  213. END_DECLARE_EVENT_TYPES()
  214.  
  215. typedef void (wxEvtHandler::*wxNotebookEventFunction)(wxNotebookEvent&);
  216.  
  217. // Truncation in 16-bit BC++ means we need to define these differently
  218. #if defined(__BORLANDC__) && defined(__WIN16__)
  219. #define EVT_NOTEBOOK_PAGE_CHANGED(id, fn)                                   \
  220.   DECLARE_EVENT_TABLE_ENTRY(                                                \
  221.     wxEVT_COMMAND_NB_PAGE_CHANGED,                                          \
  222.     id,                                                                     \
  223.     -1,                                                                     \
  224.     (wxObjectEventFunction)(wxEventFunction)(wxNotebookEventFunction) &fn,  \
  225.     NULL                                                                    \
  226.   ),
  227.  
  228. #define EVT_NOTEBOOK_PAGE_CHANGING(id, fn)                                  \
  229.   DECLARE_EVENT_TABLE_ENTRY(                                                \
  230.     wxEVT_COMMAND_NB_PAGE_CHANGING,                                         \
  231.     id,                                                                     \
  232.     -1,                                                                     \
  233.     (wxObjectEventFunction)(wxEventFunction)(wxNotebookEventFunction) &fn,  \
  234.     NULL                                                                    \
  235.   ),
  236.  
  237. #else
  238.  
  239. #define EVT_NOTEBOOK_PAGE_CHANGED(id, fn)                                   \
  240.   DECLARE_EVENT_TABLE_ENTRY(                                                \
  241.     wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,                                    \
  242.     id,                                                                     \
  243.     -1,                                                                     \
  244.     (wxObjectEventFunction)(wxEventFunction)(wxNotebookEventFunction) &fn,  \
  245.     NULL                                                                    \
  246.   ),
  247.  
  248. #define EVT_NOTEBOOK_PAGE_CHANGING(id, fn)                                  \
  249.   DECLARE_EVENT_TABLE_ENTRY(                                                \
  250.     wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING,                                   \
  251.     id,                                                                     \
  252.     -1,                                                                     \
  253.     (wxObjectEventFunction)(wxEventFunction)(wxNotebookEventFunction) &fn,  \
  254.     NULL                                                                    \
  255.   ),
  256.  
  257. #endif
  258.  
  259. // ----------------------------------------------------------------------------
  260. // wxNotebook class itself
  261. // ----------------------------------------------------------------------------
  262.  
  263. #if defined(__WXUNIVERSAL__)
  264.     #include "wx/univ/notebook.h"
  265. #elif defined(__WXMSW__)
  266.     #ifdef __WIN16__
  267.         #include  "wx/generic/notebook.h"
  268.     #else
  269.         #include  "wx/msw/notebook.h"
  270.     #endif
  271. #elif defined(__WXMOTIF__)
  272.     #include  "wx/generic/notebook.h"
  273. #elif defined(__WXGTK__)
  274.     #include  "wx/gtk/notebook.h"
  275. #elif defined(__WXMAC__)
  276.     #include  "wx/mac/notebook.h"
  277. #elif defined(__WXPM__)
  278.     #include  "wx/os2/notebook.h"
  279. #elif defined(__WXSTUBS__)
  280.     #include  "wx/stubs/notebook.h"
  281. #endif
  282.  
  283. #endif // wxUSE_NOTEBOOK
  284.  
  285. #endif
  286.     // _WX_NOTEBOOK_H_BASE_
  287.