Merged the wxPy_newswig branch into the HEAD branch (main trunk)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24541 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2003-11-12 21:34:20 +00:00
parent eb6a4098a0
commit d14a1e2856
987 changed files with 671143 additions and 783083 deletions

View File

@@ -1,12 +0,0 @@
# Stuff these names into the wx namespace so wxPyConstructObject can find them
wx.wxDynamicSashSplitEventPtr = wxDynamicSashSplitEventPtr
wx.wxDynamicSashUnifyEventPtr = wxDynamicSashUnifyEventPtr
wx.wxDynamicSashWindowPtr = wxDynamicSashWindowPtr
wx.wxEditableListBoxPtr = wxEditableListBoxPtr
wx.wxRemotelyScrolledTreeCtrlPtr = wxRemotelyScrolledTreeCtrlPtr
wx.wxTreeCompanionWindowPtr = wxTreeCompanionWindowPtr
wx.wxThinSplitterWindowPtr = wxThinSplitterWindowPtr
wx.wxSplitterScrolledWindowPtr = wxSplitterScrolledWindowPtr

View File

@@ -0,0 +1,30 @@
// A bunch of %rename directives generated by ./distrib/build_renamers.py
// in order to remove the wx prefix from all global scope names.
#ifndef SWIGXML
%rename(DS_MANAGE_SCROLLBARS) wxDS_MANAGE_SCROLLBARS;
%rename(DS_DRAG_CORNER) wxDS_DRAG_CORNER;
%rename(DynamicSashSplitEvent) wxDynamicSashSplitEvent;
%rename(DynamicSashUnifyEvent) wxDynamicSashUnifyEvent;
%rename(DynamicSashWindow) wxDynamicSashWindow;
%rename(EL_ALLOW_NEW) wxEL_ALLOW_NEW;
%rename(EL_ALLOW_EDIT) wxEL_ALLOW_EDIT;
%rename(EL_ALLOW_DELETE) wxEL_ALLOW_DELETE;
%rename(EditableListBox) wxEditableListBox;
%rename(RemotelyScrolledTreeCtrl) wxRemotelyScrolledTreeCtrl;
%rename(ThinSplitterWindow) wxThinSplitterWindow;
%rename(SplitterScrolledWindow) wxSplitterScrolledWindow;
%rename(LED_ALIGN_LEFT) wxLED_ALIGN_LEFT;
%rename(LED_ALIGN_RIGHT) wxLED_ALIGN_RIGHT;
%rename(LED_ALIGN_CENTER) wxLED_ALIGN_CENTER;
%rename(LED_ALIGN_MASK) wxLED_ALIGN_MASK;
%rename(LED_DRAW_FADED) wxLED_DRAW_FADED;
%rename(LEDNumberCtrl) wxLEDNumberCtrl;
%rename(TL_ALIGN_LEFT) wxTL_ALIGN_LEFT;
%rename(TL_ALIGN_RIGHT) wxTL_ALIGN_RIGHT;
%rename(TL_ALIGN_CENTER) wxTL_ALIGN_CENTER;
%rename(TREE_HITTEST_ONITEMCOLUMN) wxTREE_HITTEST_ONITEMCOLUMN;
%rename(TreeListColumnInfo) wxTreeListColumnInfo;
#endif

View File

@@ -0,0 +1,3 @@
# Other names that need to be reverse-renamed for the old namespace
EVT*

File diff suppressed because it is too large Load Diff

View File

@@ -14,7 +14,9 @@
%{
#include "wxPython.h"
#include "wx/wxPython/wxPython.h"
#include "wx/wxPython/pyclasses.h"
#include <wx/gizmos/dynamicsash.h>
#include <wx/gizmos/editlbox.h>
#include <wx/gizmos/splittree.h>
@@ -23,35 +25,26 @@
#include <wx/listctrl.h>
#include <wx/treectrl.h>
#include <wx/imaglist.h>
#include "treelistctrl.h"
#include "pytree.h"
%}
#include "wx/wxPython/pytree.h"
//---------------------------------------------------------------------------
%include typemaps.i
%include my_typemaps.i
%extern wx.i
%extern windows.i
%extern _defs.i
%extern events.i
%extern controls.i
%extern controls2.i
%extern gdi.i
//----------------------------------------------------------------------
%{
// Put some wx default wxChar* values into wxStrings.
static const wxString wxPyDynamicSashNameStr(wxT("dynamicSashWindow"));
static const wxString wxPyEditableListBoxNameStr(wxT("editableListBox"));
static const wxString wxPyTreeListCtrlNameStr(wxT("treelistctrl"));
static const wxString wxPyEmptyString(wxT(""));
%}
///----------------------------------------------------------------------
//---------------------------------------------------------------------------
%import windows.i
%import controls.i
%pythoncode { wx = core }
%include _gizmos_rename.i
//---------------------------------------------------------------------------
enum {
wxEVT_DYNAMIC_SASH_SPLIT,
@@ -139,39 +132,33 @@ public:
class wxDynamicSashWindow : public wxWindow {
public:
%addtofunc wxDynamicSashWindow "self._setOORInfo(self)"
%addtofunc wxDynamicSashWindow() ""
wxDynamicSashWindow(wxWindow *parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER,
const wxString& name = wxPyDynamicSashNameStr);
%name(wxPreDynamicSashWindow)wxDynamicSashWindow();
%name(PreDynamicSashWindow)wxDynamicSashWindow();
bool Create(wxWindow *parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER,
const wxString& name = wxPyDynamicSashNameStr);
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
%pragma(python) addtomethod = "wxPreDynamicSashWindow:val._setOORInfo(val)"
wxScrollBar *GetHScrollBar(const wxWindow *child) const;
wxScrollBar *GetVScrollBar(const wxWindow *child) const;
};
//----------------------------------------------------------------------
// Python functions to act like the event macros
%pythoncode {
EVT_DYNAMIC_SASH_SPLIT = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_SPLIT, 1 )
EVT_DYNAMIC_SASH_UNIFY = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_UNIFY, 1 )
}
%pragma(python) code = "
def EVT_DYNAMIC_SASH_SPLIT(win, id, func):
win.Connect(id, -1, wxEVT_DYNAMIC_SASH_SPLIT, func)
def EVT_DYNAMIC_SASH_UNIFY(win, id, func):
win.Connect(id, -1, wxEVT_DYNAMIC_SASH_UNIFY, func)
"
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
enum {
wxEL_ALLOW_NEW,
@@ -184,6 +171,9 @@ enum {
class wxEditableListBox : public wxPanel
{
public:
%addtofunc wxEditableListBox "self._setOORInfo(self)"
%addtofunc wxEditableListBox() ""
wxEditableListBox(wxWindow *parent, wxWindowID id,
const wxString& label,
const wxPoint& pos = wxDefaultPosition,
@@ -191,12 +181,11 @@ public:
long style = wxEL_ALLOW_NEW | wxEL_ALLOW_EDIT | wxEL_ALLOW_DELETE,
const wxString& name = wxPyEditableListBoxNameStr);
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
void SetStrings(const wxArrayString& strings);
//void GetStrings(wxArrayString& strings);
%addmethods {
%extend {
PyObject* GetStrings() {
wxArrayString strings;
self->GetStrings(strings);
@@ -204,17 +193,17 @@ public:
}
}
wxListCtrl* GetListCtrl() { return m_listCtrl; }
wxBitmapButton* GetDelButton() { return m_bDel; }
wxBitmapButton* GetNewButton() { return m_bNew; }
wxBitmapButton* GetUpButton() { return m_bUp; }
wxBitmapButton* GetDownButton() { return m_bDown; }
wxBitmapButton* GetEditButton() { return m_bEdit; }
wxListCtrl* GetListCtrl();
wxBitmapButton* GetDelButton();
wxBitmapButton* GetNewButton();
wxBitmapButton* GetUpButton();
wxBitmapButton* GetDownButton();
wxBitmapButton* GetEditButton();
};
//----------------------------------------------------------------------
//---------------------------------------------------------------------------
/*
@@ -232,11 +221,13 @@ public:
class wxRemotelyScrolledTreeCtrl: public wxPyTreeCtrl
{
public:
%addtofunc wxRemotelyScrolledTreeCtrl "self._setOORInfo(self)"
%addtofunc wxRemotelyScrolledTreeCtrl() ""
wxRemotelyScrolledTreeCtrl(wxWindow* parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxTR_HAS_BUTTONS);
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
void HideVScrollbar();
@@ -298,16 +289,17 @@ public:
%}
%name(wxTreeCompanionWindow) class wxPyTreeCompanionWindow: public wxWindow
%name(TreeCompanionWindow) class wxPyTreeCompanionWindow: public wxWindow
{
public:
%addtofunc wxPyTreeCompanionWindow "self._setOORInfo(self);self._setCallbackInfo(self, TreeCompanionWindow)"
%addtofunc wxPyTreeCompanionWindow() ""
wxPyTreeCompanionWindow(wxWindow* parent, wxWindowID id = -1,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0);
void _setCallbackInfo(PyObject* self, PyObject* _class);
%pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxTreeCompanionWindow)"
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
wxRemotelyScrolledTreeCtrl* GetTreeCtrl() const;
void SetTreeCtrl(wxRemotelyScrolledTreeCtrl* treeCtrl);
@@ -325,15 +317,17 @@ public:
class wxThinSplitterWindow: public wxSplitterWindow
{
public:
%addtofunc wxThinSplitterWindow "self._setOORInfo(self)"
%addtofunc wxThinSplitterWindow() ""
wxThinSplitterWindow(wxWindow* parent, wxWindowID id = -1,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxSP_3D | wxCLIP_CHILDREN);
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
};
/*
* wxSplitterScrolledWindow
*
@@ -346,16 +340,18 @@ public:
class wxSplitterScrolledWindow: public wxScrolledWindow
{
public:
%addtofunc wxSplitterScrolledWindow "self._setOORInfo(self)"
%addtofunc wxSplitterScrolledWindow() ""
wxSplitterScrolledWindow(wxWindow* parent, wxWindowID id = -1,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0);
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
};
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
enum wxLEDValueAlign
@@ -373,25 +369,23 @@ enum wxLEDValueAlign
class wxLEDNumberCtrl : public wxControl
{
public:
// Constructors.
%addtofunc wxLEDNumberCtrl "self._setOORInfo(self)"
%addtofunc wxLEDNumberCtrl() ""
wxLEDNumberCtrl(wxWindow *parent, wxWindowID id = -1,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxLED_ALIGN_LEFT | wxLED_DRAW_FADED);
%name(wxPreLEDNumberCtrl) wxLEDNumberCtrl();
%name(PreLEDNumberCtrl) wxLEDNumberCtrl();
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
%pragma(python) addtomethod = "wxPreLEDNumberCtrl:val._setOORInfo(val)"
// Create functions.
bool Create(wxWindow *parent, wxWindowID id = -1,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxLED_ALIGN_LEFT | wxLED_DRAW_FADED);
wxLEDValueAlign GetAlignment() const { return m_Alignment; }
bool GetDrawFaded() const { return m_DrawFaded; }
const wxString &GetValue() const { return m_Value; }
wxLEDValueAlign GetAlignment() const;
bool GetDrawFaded() const;
const wxString &GetValue() const;
void SetAlignment(wxLEDValueAlign Alignment, bool Redraw = true);
void SetDrawFaded(bool DrawFaded, bool Redraw = true);
@@ -483,24 +477,21 @@ IMPLEMENT_ABSTRACT_CLASS(wxPyTreeListCtrl, wxTreeListCtrl)
// These are for the GetFirstChild/GetNextChild methods below
%{
static const long longzero = 0;
%}
%typemap(python, in) long& INOUT = long* INOUT;
%typemap(python, argout) long& INOUT = long* INOUT;
%name(wxTreeListCtrl) class wxPyTreeListCtrl : public wxControl
%name(TreeListCtrl) class wxPyTreeListCtrl : public wxControl
{
public:
%addtofunc wxPyTreeListCtrl "self._setOORInfo(self);self._setCallbackInfo(self, TreeListCtrl)"
%addtofunc wxPyTreeListCtrl() ""
wxPyTreeListCtrl(wxWindow *parent, wxWindowID id = -1,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxTR_DEFAULT_STYLE,
const wxValidator &validator = wxDefaultValidator,
const wxString& name = wxPyTreeListCtrlNameStr );
%name(wxPreTreeListCtrl)wxPyTreeListCtrl();
%name(PreTreeListCtrl)wxPyTreeListCtrl();
bool Create(wxWindow *parent, wxWindowID id = -1,
const wxPoint& pos = wxDefaultPosition,
@@ -510,13 +501,8 @@ public:
const wxString& name = wxPyTreeListCtrlNameStr );
void _setCallbackInfo(PyObject* self, PyObject* _class);
%pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxTreeListCtrl)"
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
%pragma(python) addtomethod = "wxPreTreeListCtrl:val._setOORInfo(val)"
// get the total number of items in the control
size_t GetCount() const;
@@ -554,14 +540,14 @@ public:
void SetStateImageList(wxImageList *imageList);
void SetButtonsImageList(wxImageList *imageList);
%addtofunc AssignImageList "args[1].thisown = 0";
void AssignImageList(wxImageList *imageList);
%pragma(python) addtomethod = "AssignImageList:_args[0].thisown = 0"
%addtofunc AssignStateImageList "args[1].thisown = 0";
void AssignStateImageList(wxImageList *imageList);
%pragma(python) addtomethod = "AssignStateImageList:_args[0].thisown = 0"
%addtofunc AssignButtonsImageList "args[1].thisown = 0";
void AssignButtonsImageList(wxImageList *imageList);
%pragma(python) addtomethod = "AssignButtonsImageList:_args[0].thisown = 0"
@@ -601,7 +587,7 @@ public:
int GetColumnImage(size_t column) const;
%addmethods {
%extend {
// retrieves item's label of the given column (main column by default)
wxString GetItemText(const wxTreeItemId& item, int column = -1) {
if (column < 0) column = self->GetMainColumn();
@@ -647,9 +633,9 @@ public:
self->SetItemData(item, data);
}
// [Get|Set]PyData are short-cuts. Also made somewhat crash-proof by
// [Get|Set]ItemPyData are short-cuts. Also made somewhat crash-proof by
// automatically creating data classes.
PyObject* GetPyData(const wxTreeItemId& item) {
PyObject* GetItemPyData(const wxTreeItemId& item) {
wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
if (data == NULL) {
data = new wxPyTreeItemData();
@@ -659,7 +645,7 @@ public:
return data->GetData();
}
void SetPyData(const wxTreeItemId& item, PyObject* obj) {
void SetItemPyData(const wxTreeItemId& item, PyObject* obj) {
wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
if (data == NULL) {
data = new wxPyTreeItemData(obj);
@@ -726,7 +712,7 @@ public:
// get the items currently selected, return the number of such item
//size_t GetSelections(wxArrayTreeItemIds&) const;
%addmethods {
%extend {
PyObject* GetSelections() {
wxPyBeginBlockThreads();
PyObject* rval = PyList_New(0);
@@ -754,11 +740,37 @@ public:
// the "cookie" passed to GetFirstChild() and GetNextChild() should be
// the same!
// get the first child of this item
wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& INOUT = longzero) const;
// get the next child
wxTreeItemId GetNextChild(const wxTreeItemId& item, long& INOUT) const;
%extend {
// Get the first child of this item. Returns a wxTreeItemId and an
// opaque "cookie" value that should be passed to GetNextChild in
// order to continue the search.
PyObject* GetFirstChild(const wxTreeItemId& item) {
long cookie = 0;
wxTreeItemId ritem = self->GetFirstChild(item, cookie);
wxPyBeginBlockThreads();
PyObject* tup = PyTuple_New(2);
PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(&ritem, wxT("wxTreeItemId"), true));
PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(cookie));
wxPyEndBlockThreads();
return tup;
}
// Get the next child of this item. The cookie parameter is the 2nd
// value returned from GetFirstChild or the previous GetNextChild.
// Returns a wxTreeItemId and an opaque "cookie" value that should be
// passed to GetNextChild in order to continue the search.
PyObject* GetNextChild(const wxTreeItemId& item, long cookie) {
wxTreeItemId ritem = self->GetNextChild(item, cookie);
wxPyBeginBlockThreads();
PyObject* tup = PyTuple_New(2);
PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(&ritem, wxT("wxTreeItemId"), true));
PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(cookie));
wxPyEndBlockThreads();
return tup;
}
}
// get the last child of this item - this method doesn't use cookies
wxTreeItemId GetLastChild(const wxTreeItemId& item) const;
@@ -859,7 +871,7 @@ public:
// Returns wxTreeItemId, flags, and column
wxTreeItemId HitTest(const wxPoint& point, int& OUTPUT, int& OUTPUT);
%addmethods {
%extend {
// get the bounding rectangle of the item (or of its label only)
PyObject* GetBoundingRect(const wxTreeItemId& item, bool textOnly = FALSE) {
wxRect rect;
@@ -871,8 +883,7 @@ public:
return val;
}
else {
Py_INCREF(Py_None);
return Py_None;
RETURN_NONE();
}
}
}
@@ -897,24 +908,6 @@ public:
wxWindow* GetHeaderWindow() const;
wxWindow* GetMainWindow() const;
%pragma(python) addtoclass = "
# Redefine some methods that SWIG gets a bit confused on...
def GetFirstChild(self, *_args, **_kwargs):
val1,val2 = gizmosc.wxTreeListCtrl_GetFirstChild(self, *_args, **_kwargs)
val1 = wxTreeItemIdPtr(val1)
val1.thisown = 1
return (val1,val2)
def GetNextChild(self, *_args, **_kwargs):
val1,val2 = gizmosc.wxTreeListCtrl_GetNextChild(self, *_args, **_kwargs)
val1 = wxTreeItemIdPtr(val1)
val1.thisown = 1
return (val1,val2)
def HitTest(self, *_args, **_kwargs):
val1, val2, val3 = gizmosc.wxTreeListCtrl_HitTest(self, *_args, **_kwargs)
val1 = wxTreeItemIdPtr(val1)
val1.thisown = 1
return (val1, val2, val3)
"
};

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -2457,12 +2457,92 @@ void wxTreeListMainWindow::SendDeleteEvent(wxTreeListItem *item)
m_owner->ProcessEvent( event );
}
// inline
// void wxTreeListMainWindow::DeleteChildren(const wxTreeItemId& itemId)
// {
// m_dirty = TRUE; // do this first so stuff below doesn't cause flicker
// wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
// item->DeleteChildren(this);
// }
// inline
// void wxTreeListMainWindow::Delete(const wxTreeItemId& itemId)
// {
// m_dirty = TRUE; // do this first so stuff below doesn't cause flicker
// wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
// // don't stay with invalid m_key_current or we will crash in
// // the next call to OnChar()
// bool changeKeyCurrent = FALSE;
// wxTreeListItem *itemKey = m_key_current;
// while ( itemKey )
// {
// if ( itemKey == item )
// {
// // m_key_current is a descendant of the item being deleted
// changeKeyCurrent = TRUE;
// break;
// }
// itemKey = itemKey->GetParent();
// }
// wxTreeListItem *parent = item->GetParent();
// if ( parent )
// {
// parent->GetChildren().Remove( item ); // remove by value
// }
// if ( changeKeyCurrent )
// {
// // may be NULL or not
// m_key_current = parent;
// }
// item->DeleteChildren(this);
// SendDeleteEvent(item);
// delete item;
// }
// inline
// void wxTreeListMainWindow::DeleteAllItems()
// {
// if ( m_anchor )
// {
// m_dirty = TRUE;
// m_anchor->DeleteChildren(this);
// delete m_anchor;
// m_anchor = NULL;
// }
// }
inline
void wxTreeListMainWindow::DeleteChildren(const wxTreeItemId& itemId)
{
m_dirty = TRUE; // do this first so stuff below doesn't cause flicker
wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
// mst:16.10.03
// moved from Delete()
// don't stay with invalid m_key_current or we will crash in
// the next call to OnChar()
wxTreeListItem *itemKey = m_key_current;
while ( itemKey )
{
if ( itemKey == item )
{
// m_key_current is a descendant of the item which childrens being deleted
m_key_current = item;
break;
}
itemKey = itemKey->GetParent();
}
item->DeleteChildren(this);
}
@@ -2473,35 +2553,19 @@ void wxTreeListMainWindow::Delete(const wxTreeItemId& itemId)
wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
// don't stay with invalid m_key_current or we will crash in
// the next call to OnChar()
bool changeKeyCurrent = FALSE;
wxTreeListItem *itemKey = m_key_current;
while ( itemKey )
{
if ( itemKey == item )
{
// m_key_current is a descendant of the item being deleted
changeKeyCurrent = TRUE;
break;
}
itemKey = itemKey->GetParent();
}
// mst:16.10.03
item->DeleteChildren(this);
wxTreeListItem *parent = item->GetParent();
if ( parent )
{
parent->GetChildren().Remove( item ); // remove by value
}
parent->GetChildren().Remove( item ); // remove by value
if ( changeKeyCurrent )
{
// may be NULL or not
m_key_current = parent;
}
if (m_key_current == item)
m_key_current = parent;
item->DeleteChildren(this);
SendDeleteEvent(item);
delete item;
}
@@ -2512,6 +2576,8 @@ void wxTreeListMainWindow::DeleteAllItems()
{
m_dirty = TRUE;
m_key_current = NULL; // mst:16.10.03
m_anchor->DeleteChildren(this);
delete m_anchor;
@@ -2519,6 +2585,7 @@ void wxTreeListMainWindow::DeleteAllItems()
}
}
void wxTreeListMainWindow::Expand(const wxTreeItemId& itemId)
{
wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;