]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/os2/notebook.h
synchronize GTK2 minimum version in docs
[wxWidgets.git] / include / wx / os2 / notebook.h
index 18b0793da201a93c99693c17e0a48cb92b0e6611..82a7601880e84e3fd6f65091632326c690a77614 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
-// Name:        notebook.h
+// Name:        wx/os2/notebook.h
 // Purpose:     MSW/GTK compatible notebook (a.k.a. property sheet)
-// Author:      AUTHOR
+// Author:      David Webster
 // Modified by:
 // RCS-ID:      $Id$
-// Copyright:   (c) AUTHOR
-// Licence:    wxWindows licence
+// Copyright:   (c) David Webster
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifndef _WX_NOTEBOOK_H_
-#define _WX_NOTEBOOK_H_
+#ifndef _NOTEBOOK_H
+#define _NOTEBOOK_H
 
-#ifdef __GNUG__
-#pragma interface "notebook.h"
-#endif
+#if wxUSE_NOTEBOOK
 
 // ----------------------------------------------------------------------------
 // headers
 // ----------------------------------------------------------------------------
-#include "wx/dynarray.h"
-#include "wx/event.h"
-#include "wx/control.h"
-
-// ----------------------------------------------------------------------------
-// types
-// ----------------------------------------------------------------------------
-
-// fwd declarations
-class WXDLLEXPORT wxImageList;
-class WXDLLEXPORT wxWindow;
-
-// array of notebook pages
-typedef wxWindow wxNotebookPage;  // so far, any window can be a page
-WX_DEFINE_ARRAY(wxNotebookPage *, wxArrayPages);
-
-// ----------------------------------------------------------------------------
-// notebook events
-// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxNotebookEvent : public wxCommandEvent
-{
-public:
-  wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0, 
-                  int nSel = -1, int nOldSel = -1)
-    : wxCommandEvent(commandType, id) { m_nSel = nSel; m_nOldSel = nOldSel; }
 
-  // accessors
-  int GetSelection() const { return m_nSel; }
-  int GetOldSelection() const { return m_nOldSel; }
-
-private:
-  int m_nSel,     // currently selected page
-      m_nOldSel;  // previously selected page
-
-  DECLARE_DYNAMIC_CLASS(wxNotebookEvent)
-};
+#include "wx/control.h"
 
 // ----------------------------------------------------------------------------
 // wxNotebook
 // ----------------------------------------------------------------------------
 
-// @@@ this class should really derive from wxTabCtrl, but the interface is not
-//     exactly the same, so I can't do it right now and instead we reimplement
-//     part of wxTabCtrl here
-class wxNotebook : public wxControl
+class WXDLLIMPEXP_CORE wxNotebook : public wxNotebookBase
 {
 public:
-  // ctors
-  // -----
-    // default for dynamic class
-  wxNotebook();
-    // the same arguments as for wxControl (@@@ any special styles?)
-  wxNotebook(wxWindow *parent,
-             wxWindowID id, 
-             const wxPoint& pos = wxDefaultPosition,
-             const wxSize& size = wxDefaultSize,
-             long style = 0,
-             const wxString& name = "notebook");
-    // Create() function
-  bool Create(wxWindow *parent,
-              wxWindowID id, 
-              const wxPoint& pos = wxDefaultPosition,
-              const wxSize& size = wxDefaultSize,
-              long style = 0,
-              const wxString& name = "notebook");
-    // dtor
-  ~wxNotebook();
-
-  // accessors
-  // ---------
-    // get number of pages in the dialog
-  int GetPageCount() const;
-
-    // set the currently selected page, return the index of the previously
-    // selected one (or -1 on error)
+    //
+    // Ctors
+    // -----
+    // Default for dynamic class
+    //
+    wxNotebook();
+
+    //
+    // the same arguments as for wxControl
+    //
+    wxNotebook( wxWindow*       pParent
+               ,wxWindowID      vId
+               ,const wxPoint&  rPos = wxDefaultPosition
+               ,const wxSize&   rSize = wxDefaultSize
+               ,long            lStyle = 0
+               ,const wxString& rsName = wxNotebookNameStr
+              );
+
+    bool Create( wxWindow*       pParent
+                ,wxWindowID      vId
+                ,const wxPoint&  rPos = wxDefaultPosition
+                ,const wxSize&   rSize = wxDefaultSize
+                ,long            lStyle = 0
+                ,const wxString& rsName = wxNotebookNameStr
+               );
+
+    //
+    // Accessors
+    // ---------
+    // Get number of pages in the dialog
+    //
+    virtual size_t GetPageCount(void) const;
+
+    //
+    // Set the currently selected page, return the index of the previously
+    // selected one (or wxNOT_FOUND on error)
     // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
-  int SetSelection(int nPage);
-    // cycle thru the tabs
-  void AdvanceSelection(bool bForward = TRUE);
-    // get the currently selected page
-  int GetSelection() const { return m_nSelection; }
-
-    // set/get the title of a page
-  bool SetPageText(int nPage, const wxString& strText);
-  wxString GetPageText(int nPage) const;
-
-  // image list stuff: each page may have an image associated with it. All
-  // the images belong to an image list, so you have to
-  // 1) create an image list
-  // 2) associate it with the notebook
-  // 3) set for each page it's image
+    //
+    int      SetSelection(size_t nPage);
+
+    // changes selected page without sending events
+    int ChangeSelection(size_t nPage);
+
+    //
+    // Set/Get the title of a page
+    //
+    bool     SetPageText( size_t             nPage
+                         ,const wxString& sStrText
+                        );
+    wxString GetPageText(size_t nPage) const;
+
+    //
+    // Image list stuff: each page may have an image associated with it. All
+    // the images belong to an image list, so you have to
+    // 1) create an image list
+    // 2) associate it with the notebook
+    // 3) set for each page it's image
     // associate image list with a control
-  void SetImageList(wxImageList* imageList);
-    // get pointer (may be NULL) to the associated image list
-  wxImageList* GetImageList() const { return m_pImageList; }
-
-    // sets/returns item's image index in the current image list
-  int  GetPageImage(int nPage) const;
-  bool SetPageImage(int nPage, int nImage);
-
-    // currently it's always 1 because wxGTK doesn't support multi-row
+    //
+           void     SetImageList(wxImageList* pImageList);
+
+    //
+    // Sets/returns item's image index in the current image list
+    //
+    int      GetPageImage(size_t nPage) const;
+    bool     SetPageImage( size_t nPage
+                          ,int nImage
+                         );
+
+    //
+    // Currently it's always 1 because wxGTK doesn't support multi-row
     // tab controls
-  int GetRowCount() const;
+    //
+           int      GetRowCount(void) const;
 
-  // control the appearance of the notebook pages
+    //
+    // control the appearance of the notebook pages
     // set the size (the same for all pages)
-  void SetPageSize(const wxSize& size);
-    // set the padding between tabs (in pixels)
-  void SetPadding(const wxSize& padding);
-
-    // Sets the size of the tabs (assumes all tabs are the same size)
-  void SetTabSize(const wxSize& sz);
-
-  // operations
-  // ----------
-    // remove one page from the notebook
-  bool DeletePage(int nPage);
-    // remove one page from the notebook, without deleting
-  bool RemovePage(int nPage);
-    // remove all pages
-  bool DeleteAllPages();
-    // adds a new page to the notebook (it will be deleted ny the notebook,
+    //
+           void     SetPageSize(const wxSize& rSize);
+
+    //
+    // Set the padding between tabs (in pixels)
+    //
+           void     SetPadding(const wxSize& rPadding);
+
+    //
+    // Operations
+    // ----------
+    // Remove all pages
+    //
+           bool     DeleteAllPages(void);
+
+    //
+    // Adds a new page to the notebook (it will be deleted ny the notebook,
     // don't delete it yourself). If bSelect, this page becomes active.
-  bool AddPage(wxNotebookPage *pPage,
-               const wxString& strText,
-               bool bSelect = FALSE,
-               int imageId = -1);
-    // the same as AddPage(), but adds it at the specified position
-  bool InsertPage(int nPage,
-                  wxNotebookPage *pPage,
-                  const wxString& strText,
-                  bool bSelect = FALSE,
-                  int imageId = -1);
-    // get the panel which represents the given page
-  wxNotebookPage *GetPage(int nPage) { return m_aPages[nPage]; }
-
-  // callbacks
-  // ---------
-  void OnSize(wxSizeEvent& event);
-  void OnSelChange(wxNotebookEvent& event);
-  void OnSetFocus(wxFocusEvent& event);
-  void OnNavigationKey(wxNavigationKeyEvent& event);
-  
-  // base class virtuals
-  // -------------------
-  virtual void Command(wxCommandEvent& event);
-  virtual void SetConstraintSizes(bool recurse = TRUE);
-  virtual bool DoPhase(int nPhase);
+    //
+           bool     AddPage( wxNotebookPage* pPage
+                            ,const wxString& rsStrText
+                            ,bool            bSelect = false
+                            ,int             nImageId = -1
+                           );
+
+    //
+    // The same as AddPage(), but adds it at the specified position
+    //
+    bool     InsertPage( size_t nPage
+                        ,wxNotebookPage* pPage
+                        ,const wxString& rsStrText
+                        ,bool            bSelect = false
+                        ,int             nImageId = -1
+                       );
+
+    //
+    // Windows-only at present. Also, you must use the wxNB_FIXEDWIDTH
+    // style.
+    //
+           void     SetTabSize(const wxSize& rSize);
+
+    //
+    // Callbacks
+    // ---------
+    //
+    void OnSize(wxSizeEvent& rEvent);
+    void OnSelChange(wxBookCtrlEvent& rEvent);
+    void OnSetFocus(wxFocusEvent& rEvent);
+    void OnNavigationKey(wxNavigationKeyEvent& rEvent);
+
+    //
+    // Base class virtuals
+    // -------------------
+    //
+    virtual bool OS2OnScroll( int    nOrientation
+                             ,WXWORD wSBCode
+                             ,WXWORD wPos
+                             ,WXHWND hControl
+                            );
+    virtual void SetConstraintSizes(bool bRecurse = true);
+    virtual bool DoPhase(int nPhase);
 
 protected:
-  // common part of all ctors
-  void Init();
-
-  // helper functions
-  void ChangePage(int nOldSel, int nSel); // change pages
+    //
+    // Common part of all ctors
+    //
+    void                    Init(void);
+
+    //
+    // Translate wxWin styles to the PM ones
+    //
+    virtual WXDWORD         OS2GetStyle( long     lFlags
+                                        ,WXDWORD* pwExstyle = NULL
+                                       ) const;
+
+    //
+    // Remove one page from the notebook, without deleting
+    //
+    virtual wxNotebookPage* DoRemovePage(size_t nPage);
+
+    //
+    // Helper functions
+    //
 
-  wxImageList  *m_pImageList; // we can have an associated image list
-  wxArrayPages  m_aPages;     // array of pages
+private:
+    wxArrayLong                     m_alPageId;
+    int                             m_nTabSize; // holds the largest tab size
 
-  int m_nSelection;           // the current selection (-1 if none)
+    DECLARE_DYNAMIC_CLASS(wxNotebook)
+    DECLARE_EVENT_TABLE()
+}; // end of CLASS wxNotebook
 
-  DECLARE_DYNAMIC_CLASS(wxNotebook)
-  DECLARE_EVENT_TABLE()
-};
+#endif // wxUSE_NOTEBOOK
 
-// ----------------------------------------------------------------------------
-// event macros
-// ----------------------------------------------------------------------------
-typedef void (wxEvtHandler::*wxNotebookEventFunction)(wxNotebookEvent&);
-
-#define EVT_NOTEBOOK_PAGE_CHANGED(id, fn)                                   \
-  {                                                                         \
-    wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,                                    \
-    id,                                                                     \
-    -1,                                                                     \
-    (wxObjectEventFunction)(wxEventFunction)(wxNotebookEventFunction) &fn,  \
-    NULL                                                                    \
-  },
-
-#define EVT_NOTEBOOK_PAGE_CHANGING(id, fn)                                  \
-  {                                                                         \
-    wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, \                                 \
-    id,                                                                     \
-    -1,                                                                     \
-    (wxObjectEventFunction)(wxEventFunction)(wxNotebookEventFunction) &fn,  \
-    NULL                                                                    \
-  },
-
-#endif // _WX_NOTEBOOK_H_
+#endif // _NOTEBOOK_H