Added wrappers for wxBookCtrl and wxListbook. wxNotebook now derives

from wxBookCtrl.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23120 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn 2003-08-22 22:46:58 +00:00
parent 6946b604e8
commit edadef3f00
3 changed files with 234 additions and 91 deletions

View File

@ -35,6 +35,9 @@ copies of them.
Added Python wrappers for the new wxVScrolledWindow, wxVListBox, and
wxHtmlListBox classes.
Added wrappers for wxBookCtrl and wxListbook. wxNotebook now derives
from wxBookCtrl.

View File

@ -476,14 +476,6 @@ def EVT_COMMAND_ENTER(win, id, func):
win.Connect(id, -1, wxEVT_COMMAND_ENTER, func)
# wxNotebook events
def EVT_NOTEBOOK_PAGE_CHANGED(win, id, func):
win.Connect(id, -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, func)
def EVT_NOTEBOOK_PAGE_CHANGING(win, id, func):
win.Connect(id, -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, func)
# wxSpinButton
def EVT_SPIN_UP(win, id, func):
win.Connect(id, -1, wxEVT_SCROLL_LINEUP, func)

View File

@ -15,6 +15,7 @@
%{
#include "helpers.h"
#include <wx/notebook.h>
#include <wx/listbook.h>
#include <wx/splitter.h>
#include <wx/imaglist.h>
#ifdef __WXMSW__
@ -50,6 +51,122 @@
%pragma(python) code = "import wx"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// TODO: Virtualize this class so other book controls can be derived in Python
class wxBookCtrl : public wxControl
{
public:
// This is an ABC, it can't be constructed...
// wxBookCtrl(wxWindow *parent,
// wxWindowID id,
// const wxPoint& pos = wxDefaultPosition,
// const wxSize& size = wxDefaultSize,
// long style = 0,
// const wxString& name = wxPyEmptyString);
// %name(wxPreBookCtrl)wxBookCtrl();
// bool Create(wxWindow *parent,
// wxWindowID id,
// const wxPoint& pos = wxDefaultPosition,
// const wxSize& size = wxDefaultSize,
// long style = 0,
// const wxString& name = wxPyEmptyString);
// %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
// %pragma(python) addtomethod = "wxPreBookCtrl:val._setOORInfo(val)"
// get number of pages in the dialog
virtual size_t GetPageCount() const;
// get the panel which represents the given page
virtual wxWindow *GetPage(size_t n);
// get the currently selected page or wxNOT_FOUND if none
virtual int GetSelection() const = 0;
// set/get the title of a page
virtual bool SetPageText(size_t n, const wxString& strText) = 0;
virtual wxString GetPageText(size_t n) const = 0;
// image list stuff: each page may have an image associated with it (all
// images belong to the same image list)
// sets the image list to use, it is *not* deleted by the control
virtual void SetImageList(wxImageList *imageList);
// as SetImageList() but we will delete the image list ourselves
void AssignImageList(wxImageList *imageList);
%pragma(python) addtomethod = "AssignImageList:_args[0].thisown = 0"
// get pointer (may be NULL) to the associated image list
wxImageList* GetImageList() const;
// sets/returns item's image index in the current image list
virtual int GetPageImage(size_t n) const = 0;
virtual bool SetPageImage(size_t n, int imageId) = 0;
// resize the notebook so that all pages will have the specified size
virtual void SetPageSize(const wxSize& size);
// calculate the size of the control from the size of its page
virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const = 0;
// remove one page from the control and delete it
virtual bool DeletePage(size_t n);
// remove one page from the notebook, without deleting it
virtual bool RemovePage(size_t n);
// remove all pages and delete them
virtual bool DeleteAllPages();
// adds a new page to the control
virtual bool AddPage(wxWindow *page,
const wxString& text,
bool bSelect = false,
int imageId = -1);
// the same as AddPage(), but adds the page at the specified position
virtual bool InsertPage(size_t n,
wxWindow *page,
const wxString& text,
bool bSelect = false,
int imageId = -1) = 0;
// set the currently selected page, return the index of the previously
// selected one (or -1 on error)
//
// NB: this function will _not_ generate PAGE_CHANGING/ED events
virtual int SetSelection(size_t n) = 0;
// cycle thru the pages
void AdvanceSelection(bool forward = true);
};
class wxBookCtrlEvent : public wxNotifyEvent
{
public:
wxBookCtrlEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
int nSel = -1, int nOldSel = -1);
// the currently selected page (-1 if none)
int GetSelection() const;
void SetSelection(int nSel);
// the page that was selected before the change (-1 if none)
int GetOldSelection() const;
void SetOldSelection(int nOldSel);
};
//---------------------------------------------------------------------------
enum {
@ -74,20 +191,8 @@ enum {
};
class wxNotebookEvent : public wxNotifyEvent {
public:
wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
int sel = -1, int oldSel = -1);
int GetSelection();
int GetOldSelection();
void SetOldSelection(int page);
void SetSelection(int page);
};
class wxNotebook : public wxControl {
class wxNotebook : public wxBookCtrl {
public:
wxNotebook(wxWindow *parent,
wxWindowID id,
@ -108,89 +213,132 @@ public:
%pragma(python) addtomethod = "wxPreNotebook:val._setOORInfo(val)"
// get number of pages in the dialog
int GetPageCount() const;
// get the panel which represents the given page
wxWindow *GetPage(int page);
// get the currently selected page
int GetSelection() const;
// set/get the title of a page
bool SetPageText(int page, const wxString& text);
wxString GetPageText(int page) const;
// image list stuff: each page may have an image associated with it (all
// images belong to the same image list)
void SetImageList(wxImageList* imageList);
// as SetImageList() but the notebook will take ownership of the image list
void AssignImageList(wxImageList* imageList);
%pragma(python) addtomethod = "AssignImageList:_args[0].thisown = 0"
// get pointer (may be NULL) to the associated image list
wxImageList* GetImageList() const;
// sets/returns item's image index in the current image list
int GetPageImage(int page) const;
bool SetPageImage(int page, int nImage);
// get the number of rows for a control with wxNB_MULTILINE style (not all
// versions support it - they will always return 1 then)
int GetRowCount() const;
// set the size (the same for all pages)
void SetPageSize(const wxSize& size);
virtual int GetRowCount() const;
// set the padding between tabs (in pixels)
void SetPadding(const wxSize& padding);
virtual void SetPadding(const wxSize& padding);
// set the size of the tabs for wxNB_FIXEDWIDTH controls
void SetTabSize(const wxSize& sz);
// calculate the size of the notebook from the size of its page
wxSize CalcSizeFromPage(const wxSize& sizePage) const;
// remove one page from the notebook and delete it
bool DeletePage(int page);
// remove one page from the notebook, without deleting it
bool RemovePage(int page);
// remove all pages and delete them
bool DeleteAllPages();
// adds a new page to the notebook (it will be deleted by the notebook,
// don't delete it yourself) and make it the current one if select
bool AddPage(wxWindow *page,
const wxString& text,
bool telect = FALSE,
int imageId = -1);
// the same as AddPage(), but adds the page at the specified position
bool InsertPage(int index,
wxWindow *page,
const wxString& text,
bool select = FALSE,
int imageId = -1);
// set the currently selected page, return the index of the previously
// selected one (or -1 on error)
//
// NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
int SetSelection(int page);
virtual void SetTabSize(const wxSize& sz);
// hit test, returns which tab is hit and, optionally, where (icon, label)
// (not implemented on all platforms)
int HitTest(const wxPoint& pt, long* OUTPUT);
virtual int HitTest(const wxPoint& pt, long* OUTPUT) const;
// cycle thru the tabs
void AdvanceSelection(bool forward = TRUE);
// implement some base class functions
virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
#ifdef __WXMSW__
// Windows-only at present. Also, you must use the wxNB_FIXEDWIDTH
// style.
void SetTabSize(const wxSize& sz);
// Windows only: attempts to apply the UX theme page background to this page
void ApplyThemeBackground(wxWindow* window, const wxColour& colour);
#endif
};
class wxNotebookEvent : public wxNotifyEvent {
public:
wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
int sel = -1, int oldSel = -1);
int GetSelection();
int GetOldSelection();
void SetOldSelection(int page);
void SetSelection(int page);
};
%pragma(python) code = "
# wxNotebook events
def EVT_NOTEBOOK_PAGE_CHANGED(win, id, func):
win.Connect(id, -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, func)
def EVT_NOTEBOOK_PAGE_CHANGING(win, id, func):
win.Connect(id, -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, func)
"
//---------------------------------------------------------------------------
enum
{
// default alignment: left everywhere except Mac where it is top
wxLB_DEFAULT = 0,
// put the list control to the left/right/top/bottom of the page area
wxLB_TOP = 0x1,
wxLB_BOTTOM = 0x2,
wxLB_LEFT = 0x4,
wxLB_RIGHT = 0x8,
// the mask which can be used to extract the alignment from the style
wxLB_ALIGN_MASK = 0xf,
wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED,
wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING,
};
class wxListbook : public wxBookCtrl
{
public:
wxListbook(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
const wxString& name = wxPyEmptyString);
%name(wxPreListbook)wxListbook();
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
%pragma(python) addtomethod = "wxPreListbook:val._setOORInfo(val)"
bool Create(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
const wxString& name = wxPyEmptyString);
// returns true if we have wxLB_TOP or wxLB_BOTTOM style
bool IsVertical() const;
};
class wxListbookEvent : public wxBookCtrlEvent
{
public:
wxListbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
int nSel = -1, int nOldSel = -1);
};
%pragma(python) code = "
#wxListbook events
def EVT_LISTBOOK_PAGE_CHANGED(win, id, func):
win.Connect(id, -1, wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, func)
def EVT_LISTBOOK_PAGE_CHANGING(win, id, func):
win.Connect(id, -1, wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, func)
"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------