text in the demo for more details of what this means, but in a nutshell methods such as wxWindow.GetParent or FindWindowById will now return a shadow object of the proper type if it can. By "proper type" I mean that if the wxWindow pointer returned from FindWindowById really points to a wxButton then the Python object constructed will be of a wxButtonPtr class instead of wxWindowPtr as before. This should reduce or eliminiate the need for wxPyTypeCast. (Woo Hoo!) The objects returned are still not the original Python object, but that is the next step. (Although it will probably only work on Python 2.1 and beyond because it will use weak references.) A few other minor tweaks and fixes and additions for things found while doing the OOR stuff. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10197 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
824 lines
25 KiB
OpenEdge ABL
824 lines
25 KiB
OpenEdge ABL
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: controls2.i
|
|
// Purpose: More control (widget) classes for wxPython
|
|
//
|
|
// Author: Robin Dunn
|
|
//
|
|
// Created: 6/10/98
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 1998 by Total Control Software
|
|
// Licence: wxWindows license
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
%module controls2
|
|
|
|
%{
|
|
#include "helpers.h"
|
|
#ifdef __WXMSW__
|
|
#include <windows.h>
|
|
#endif
|
|
#include <wx/listctrl.h>
|
|
#include <wx/treectrl.h>
|
|
#include <wx/imaglist.h>
|
|
%}
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
%include typemaps.i
|
|
%include my_typemaps.i
|
|
|
|
// Import some definitions of other classes, etc.
|
|
%import _defs.i
|
|
%import misc.i
|
|
%import windows.i
|
|
%import gdi.i
|
|
%import events.i
|
|
%import controls.i
|
|
|
|
%pragma(python) code = "import wx"
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
|
|
enum {
|
|
wxLIST_MASK_TEXT,
|
|
wxLIST_MASK_IMAGE,
|
|
wxLIST_MASK_DATA,
|
|
wxLIST_MASK_WIDTH,
|
|
wxLIST_MASK_FORMAT,
|
|
wxLIST_MASK_STATE,
|
|
wxLIST_STATE_DONTCARE,
|
|
wxLIST_STATE_DROPHILITED,
|
|
wxLIST_STATE_FOCUSED,
|
|
wxLIST_STATE_SELECTED,
|
|
wxLIST_STATE_CUT,
|
|
wxLIST_HITTEST_ABOVE,
|
|
wxLIST_HITTEST_BELOW,
|
|
wxLIST_HITTEST_NOWHERE,
|
|
wxLIST_HITTEST_ONITEMICON,
|
|
wxLIST_HITTEST_ONITEMLABEL,
|
|
wxLIST_HITTEST_ONITEMRIGHT,
|
|
wxLIST_HITTEST_ONITEMSTATEICON,
|
|
wxLIST_HITTEST_TOLEFT,
|
|
wxLIST_HITTEST_TORIGHT,
|
|
wxLIST_HITTEST_ONITEM,
|
|
wxLIST_NEXT_ABOVE,
|
|
wxLIST_NEXT_ALL,
|
|
wxLIST_NEXT_BELOW,
|
|
wxLIST_NEXT_LEFT,
|
|
wxLIST_NEXT_RIGHT,
|
|
wxLIST_ALIGN_DEFAULT,
|
|
wxLIST_ALIGN_LEFT,
|
|
wxLIST_ALIGN_TOP,
|
|
wxLIST_ALIGN_SNAP_TO_GRID,
|
|
wxLIST_AUTOSIZE,
|
|
wxLIST_AUTOSIZE_USEHEADER,
|
|
wxLIST_RECT_BOUNDS,
|
|
wxLIST_RECT_ICON,
|
|
wxLIST_RECT_LABEL,
|
|
wxLIST_FIND_UP,
|
|
wxLIST_FIND_DOWN,
|
|
wxLIST_FIND_LEFT,
|
|
wxLIST_FIND_RIGHT,
|
|
};
|
|
|
|
|
|
enum wxListColumnFormat
|
|
{
|
|
wxLIST_FORMAT_LEFT,
|
|
wxLIST_FORMAT_RIGHT,
|
|
wxLIST_FORMAT_CENTRE,
|
|
wxLIST_FORMAT_CENTER = wxLIST_FORMAT_CENTRE
|
|
};
|
|
|
|
|
|
enum {
|
|
/* List control event types */
|
|
wxEVT_COMMAND_LIST_BEGIN_DRAG,
|
|
wxEVT_COMMAND_LIST_BEGIN_RDRAG,
|
|
wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT,
|
|
wxEVT_COMMAND_LIST_END_LABEL_EDIT,
|
|
wxEVT_COMMAND_LIST_DELETE_ITEM,
|
|
wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS,
|
|
wxEVT_COMMAND_LIST_GET_INFO,
|
|
wxEVT_COMMAND_LIST_SET_INFO,
|
|
wxEVT_COMMAND_LIST_ITEM_SELECTED,
|
|
wxEVT_COMMAND_LIST_ITEM_DESELECTED,
|
|
wxEVT_COMMAND_LIST_KEY_DOWN,
|
|
wxEVT_COMMAND_LIST_INSERT_ITEM,
|
|
wxEVT_COMMAND_LIST_COL_CLICK,
|
|
wxEVT_COMMAND_LIST_ITEM_ACTIVATED,
|
|
wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK,
|
|
wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK,
|
|
};
|
|
|
|
|
|
|
|
class wxListItemAttr
|
|
{
|
|
public:
|
|
// ctors
|
|
wxListItemAttr();
|
|
//wxListItemAttr(const wxColour& colText,
|
|
// const wxColour& colBack,
|
|
// const wxFont& font)
|
|
// : m_colText(colText), m_colBack(colBack), m_font(font) { }
|
|
|
|
// setters
|
|
void SetTextColour(const wxColour& colText);
|
|
void SetBackgroundColour(const wxColour& colBack);
|
|
void SetFont(const wxFont& font);
|
|
|
|
// accessors
|
|
bool HasTextColour();
|
|
bool HasBackgroundColour();
|
|
bool HasFont();
|
|
|
|
const wxColour& GetTextColour();
|
|
const wxColour& GetBackgroundColour();
|
|
const wxFont& GetFont();
|
|
};
|
|
|
|
|
|
class wxListItem : public wxObject {
|
|
public:
|
|
wxListItem();
|
|
~wxListItem();
|
|
|
|
// resetting
|
|
void Clear();
|
|
void ClearAttributes();
|
|
|
|
// setters
|
|
void SetMask(long mask);
|
|
void SetId(long id);
|
|
void SetColumn(int col);
|
|
void SetState(long state);
|
|
void SetStateMask(long stateMask);
|
|
void SetText(const wxString& text);
|
|
void SetImage(int image);
|
|
void SetData(long data);
|
|
|
|
void SetWidth(int width);
|
|
void SetAlign(wxListColumnFormat align);
|
|
|
|
void SetTextColour(const wxColour& colText);
|
|
void SetBackgroundColour(const wxColour& colBack);
|
|
void SetFont(const wxFont& font);
|
|
|
|
// accessors
|
|
long GetMask();
|
|
long GetId();
|
|
int GetColumn();
|
|
long GetState();
|
|
const wxString& GetText();
|
|
int GetImage();
|
|
long GetData();
|
|
|
|
int GetWidth();
|
|
wxListColumnFormat GetAlign();
|
|
|
|
wxListItemAttr *GetAttributes();
|
|
bool HasAttributes();
|
|
|
|
wxColour GetTextColour() const;
|
|
wxColour GetBackgroundColour() const;
|
|
wxFont GetFont() const;
|
|
|
|
// these members are public for compatibility
|
|
long m_mask; // Indicates what fields are valid
|
|
long m_itemId; // The zero-based item position
|
|
int m_col; // Zero-based column, if in report mode
|
|
long m_state; // The state of the item
|
|
long m_stateMask;// Which flags of m_state are valid (uses same flags)
|
|
wxString m_text; // The label/header text
|
|
int m_image; // The zero-based index into an image list
|
|
long m_data; // App-defined data
|
|
|
|
// For columns only
|
|
int m_format; // left, right, centre
|
|
int m_width; // width of column
|
|
|
|
};
|
|
|
|
|
|
class wxListEvent: public wxNotifyEvent {
|
|
public:
|
|
int m_code;
|
|
long m_itemIndex;
|
|
long m_oldItemIndex;
|
|
int m_col;
|
|
bool m_cancelled;
|
|
wxPoint m_pointDrag;
|
|
wxListItem m_item;
|
|
|
|
int GetCode();
|
|
long GetIndex();
|
|
long GetOldIndex();
|
|
long GetOldItem();
|
|
int GetColumn();
|
|
bool Cancelled();
|
|
wxPoint GetPoint();
|
|
const wxString& GetLabel();
|
|
const wxString& GetText();
|
|
int GetImage();
|
|
long GetData();
|
|
long GetMask();
|
|
const wxListItem& GetItem();
|
|
};
|
|
|
|
|
|
|
|
class wxListCtrl : public wxControl {
|
|
public:
|
|
wxListCtrl(wxWindow* parent, wxWindowID id,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = wxLC_ICON,
|
|
const wxValidator& validator = wxDefaultValidator,
|
|
char* name = "listCtrl");
|
|
|
|
%pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)"
|
|
|
|
bool Arrange(int flag = wxLIST_ALIGN_DEFAULT);
|
|
void AssignImageList(wxImageList* imageList, int which);
|
|
%pragma(python) addtomethod = "AssignImageList:_args[0].thisown = 0"
|
|
bool DeleteItem(long item);
|
|
bool DeleteAllItems();
|
|
bool DeleteColumn(int col);
|
|
bool DeleteAllColumns(void);
|
|
void ClearAll(void);
|
|
#ifdef __WXMSW__
|
|
wxTextCtrl* EditLabel(long item);
|
|
bool EndEditLabel(bool cancel);
|
|
wxTextCtrl* GetEditControl();
|
|
#else
|
|
void EditLabel(long item);
|
|
#endif
|
|
bool EnsureVisible(long item);
|
|
long FindItem(long start, const wxString& str, bool partial = FALSE);
|
|
%name(FindItemData)long FindItem(long start, long data);
|
|
%name(FindItemAtPos)long FindItem(long start, const wxPoint& pt,
|
|
int direction);
|
|
bool GetColumn(int col, wxListItem& item);
|
|
int GetColumnWidth(int col);
|
|
int GetCountPerPage();
|
|
wxImageList* GetImageList(int which);
|
|
long GetItemData(long item);
|
|
|
|
%addmethods {
|
|
%new wxListItem* GetItem(long itemId, int col=0) {
|
|
wxListItem* info = new wxListItem;
|
|
info->m_itemId = itemId;
|
|
info->m_col = col;
|
|
info->m_mask = 0xFFFF;
|
|
self->GetItem(*info);
|
|
return info;
|
|
}
|
|
%new wxPoint* GetItemPosition(long item) {
|
|
wxPoint* pos = new wxPoint;
|
|
self->GetItemPosition(item, *pos);
|
|
return pos;
|
|
}
|
|
%new wxRect* GetItemRect(long item, int code = wxLIST_RECT_BOUNDS) {
|
|
wxRect* rect= new wxRect;
|
|
self->GetItemRect(item, *rect, code);
|
|
return rect;
|
|
}
|
|
}
|
|
|
|
int GetItemState(long item, long stateMask);
|
|
int GetItemCount();
|
|
int GetItemSpacing(bool isSmall);
|
|
wxString GetItemText(long item);
|
|
long GetNextItem(long item,
|
|
int geometry = wxLIST_NEXT_ALL,
|
|
int state = wxLIST_STATE_DONTCARE);
|
|
int GetSelectedItemCount();
|
|
#ifdef __WXMSW__
|
|
wxColour GetTextColour();
|
|
void SetTextColour(const wxColour& col);
|
|
#endif
|
|
long GetTopItem();
|
|
long HitTest(const wxPoint& point, int& OUTPUT);
|
|
%name(InsertColumnInfo)long InsertColumn(long col, wxListItem& info);
|
|
long InsertColumn(long col, const wxString& heading,
|
|
int format = wxLIST_FORMAT_LEFT,
|
|
int width = -1);
|
|
|
|
long InsertItem(wxListItem& info);
|
|
%name(InsertStringItem) long InsertItem(long index, const wxString& label);
|
|
%name(InsertImageItem) long InsertItem(long index, int imageIndex);
|
|
%name(InsertImageStringItem)long InsertItem(long index, const wxString& label,
|
|
int imageIndex);
|
|
|
|
bool ScrollList(int dx, int dy);
|
|
void SetBackgroundColour(const wxColour& col);
|
|
bool SetColumn(int col, wxListItem& item);
|
|
bool SetColumnWidth(int col, int width);
|
|
void SetImageList(wxImageList* imageList, int which);
|
|
|
|
bool SetItem(wxListItem& info);
|
|
%name(SetStringItem)long SetItem(long index, int col, const wxString& label,
|
|
int imageId = -1);
|
|
|
|
bool SetItemData(long item, long data);
|
|
bool SetItemImage(long item, int image, int selImage);
|
|
bool SetItemPosition(long item, const wxPoint& pos);
|
|
bool SetItemState(long item, long state, long stateMask);
|
|
void SetItemText(long item, const wxString& text);
|
|
void SetSingleStyle(long style, bool add = TRUE);
|
|
void SetWindowStyleFlag(long style);
|
|
|
|
// bool SortItems(wxListCtrlCompare fn, long data);
|
|
%addmethods {
|
|
bool SortItems(PyObject* func) {
|
|
if (!PyCallable_Check(func))
|
|
return FALSE;
|
|
|
|
return self->SortItems(wxPyListCtrl_SortItems, (long)func);
|
|
}
|
|
}
|
|
};
|
|
|
|
%{
|
|
int wxCALLBACK wxPyListCtrl_SortItems(long item1, long item2, long funcPtr) {
|
|
int retval = 0;
|
|
PyObject* func = (PyObject*)funcPtr;
|
|
bool doSave = wxPyRestoreThread();
|
|
|
|
PyObject* args = Py_BuildValue("(ii)", item1, item2);
|
|
PyObject* result = PyEval_CallObject(func, args);
|
|
Py_DECREF(args);
|
|
if (result) {
|
|
retval = PyInt_AsLong(result);
|
|
Py_DECREF(result);
|
|
}
|
|
|
|
wxPySaveThread(doSave);
|
|
return retval;
|
|
}
|
|
|
|
%}
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
enum wxTreeItemIcon
|
|
{
|
|
wxTreeItemIcon_Normal, // not selected, not expanded
|
|
wxTreeItemIcon_Selected, // selected, not expanded
|
|
wxTreeItemIcon_Expanded, // not selected, expanded
|
|
wxTreeItemIcon_SelectedExpanded, // selected, expanded
|
|
wxTreeItemIcon_Max
|
|
};
|
|
|
|
|
|
// constants for HitTest
|
|
enum {
|
|
wxTREE_HITTEST_ABOVE,
|
|
wxTREE_HITTEST_BELOW,
|
|
wxTREE_HITTEST_NOWHERE,
|
|
wxTREE_HITTEST_ONITEMBUTTON,
|
|
wxTREE_HITTEST_ONITEMICON,
|
|
wxTREE_HITTEST_ONITEMINDENT,
|
|
wxTREE_HITTEST_ONITEMLABEL,
|
|
wxTREE_HITTEST_ONITEMRIGHT,
|
|
wxTREE_HITTEST_ONITEMSTATEICON,
|
|
wxTREE_HITTEST_TOLEFT,
|
|
wxTREE_HITTEST_TORIGHT,
|
|
wxTREE_HITTEST_ONITEMUPPERPART,
|
|
wxTREE_HITTEST_ONITEMLOWERPART,
|
|
wxTREE_HITTEST_ONITEM
|
|
};
|
|
|
|
|
|
enum {
|
|
/* Tree control event types */
|
|
wxEVT_COMMAND_TREE_BEGIN_DRAG,
|
|
wxEVT_COMMAND_TREE_BEGIN_RDRAG,
|
|
wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT,
|
|
wxEVT_COMMAND_TREE_END_LABEL_EDIT,
|
|
wxEVT_COMMAND_TREE_DELETE_ITEM,
|
|
wxEVT_COMMAND_TREE_GET_INFO,
|
|
wxEVT_COMMAND_TREE_SET_INFO,
|
|
wxEVT_COMMAND_TREE_ITEM_EXPANDED,
|
|
wxEVT_COMMAND_TREE_ITEM_EXPANDING,
|
|
wxEVT_COMMAND_TREE_ITEM_COLLAPSED,
|
|
wxEVT_COMMAND_TREE_ITEM_COLLAPSING,
|
|
wxEVT_COMMAND_TREE_SEL_CHANGED,
|
|
wxEVT_COMMAND_TREE_SEL_CHANGING,
|
|
wxEVT_COMMAND_TREE_KEY_DOWN,
|
|
wxEVT_COMMAND_TREE_ITEM_ACTIVATED,
|
|
wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK,
|
|
wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK,
|
|
wxEVT_COMMAND_TREE_END_DRAG,
|
|
};
|
|
|
|
|
|
class wxTreeItemId {
|
|
public:
|
|
wxTreeItemId();
|
|
~wxTreeItemId();
|
|
bool IsOk();
|
|
|
|
%addmethods {
|
|
int __cmp__(wxTreeItemId* other) {
|
|
if (! other) return -1;
|
|
return *self != *other;
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
|
|
%{
|
|
class wxPyTreeItemData : public wxTreeItemData {
|
|
public:
|
|
wxPyTreeItemData(PyObject* obj = NULL) {
|
|
if (obj == NULL)
|
|
obj = Py_None;
|
|
Py_INCREF(obj);
|
|
m_obj = obj;
|
|
}
|
|
|
|
~wxPyTreeItemData() {
|
|
bool doSave = wxPyRestoreThread();
|
|
Py_DECREF(m_obj);
|
|
wxPySaveThread(doSave);
|
|
}
|
|
|
|
PyObject* GetData() {
|
|
Py_INCREF(m_obj);
|
|
return m_obj;
|
|
}
|
|
|
|
void SetData(PyObject* obj) {
|
|
bool doSave = wxPyRestoreThread();
|
|
Py_DECREF(m_obj);
|
|
wxPySaveThread(doSave);
|
|
m_obj = obj;
|
|
Py_INCREF(obj);
|
|
}
|
|
|
|
PyObject* m_obj;
|
|
};
|
|
%}
|
|
|
|
|
|
|
|
%name(wxTreeItemData) class wxPyTreeItemData : public wxObject {
|
|
public:
|
|
wxPyTreeItemData(PyObject* obj = NULL);
|
|
|
|
PyObject* GetData();
|
|
void SetData(PyObject* obj);
|
|
|
|
const wxTreeItemId& GetId();
|
|
void SetId(const wxTreeItemId& id);
|
|
};
|
|
|
|
|
|
|
|
class wxTreeEvent : public wxNotifyEvent {
|
|
public:
|
|
wxTreeItemId GetItem();
|
|
wxTreeItemId GetOldItem();
|
|
wxPoint GetPoint();
|
|
int GetCode();
|
|
const wxString& GetLabel();
|
|
};
|
|
|
|
|
|
|
|
%{
|
|
class wxPyTreeCtrl : public wxTreeCtrl {
|
|
DECLARE_ABSTRACT_CLASS(wxPyTreeCtrl);
|
|
public:
|
|
wxPyTreeCtrl(wxWindow *parent, wxWindowID id,
|
|
const wxPoint& pos,
|
|
const wxSize& size,
|
|
long style,
|
|
const wxValidator& validator,
|
|
char* name) :
|
|
wxTreeCtrl(parent, id, pos, size, style, validator, name) {}
|
|
|
|
int OnCompareItems(const wxTreeItemId& item1,
|
|
const wxTreeItemId& item2) {
|
|
int rval = 0;
|
|
bool doSave = wxPyRestoreThread();
|
|
if (m_myInst.findCallback("OnCompareItems"))
|
|
rval = m_myInst.callCallback(Py_BuildValue(
|
|
"(OO)",
|
|
wxPyConstructObject((void*)&item1, "wxTreeItemId"),
|
|
wxPyConstructObject((void*)&item2, "wxTreeItemId")));
|
|
else
|
|
rval = wxTreeCtrl::OnCompareItems(item1, item2);
|
|
wxPySaveThread(doSave);
|
|
return rval;
|
|
}
|
|
PYPRIVATE;
|
|
};
|
|
|
|
IMPLEMENT_ABSTRACT_CLASS(wxPyTreeCtrl, wxTreeCtrl);
|
|
|
|
%}
|
|
|
|
// These are for the GetFirstChild/GetNextChild methods below
|
|
%typemap(python, in) long& INOUT = long* INOUT;
|
|
%typemap(python, argout) long& INOUT = long* INOUT;
|
|
|
|
|
|
%name(wxTreeCtrl)class wxPyTreeCtrl : public wxControl {
|
|
public:
|
|
wxPyTreeCtrl(wxWindow *parent, wxWindowID id = -1,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT,
|
|
const wxValidator& validator = wxDefaultValidator,
|
|
char* name = "wxTreeCtrl");
|
|
|
|
void _setSelf(PyObject* self, PyObject* _class);
|
|
%pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)"
|
|
%pragma(python) addtomethod = "__init__:self._setSelf(self, wxTreeCtrl)"
|
|
|
|
void AssignImageList(wxImageList* imageList);
|
|
%pragma(python) addtomethod = "AssignImageList:_args[0].thisown = 0"
|
|
size_t GetCount();
|
|
unsigned int GetIndent();
|
|
void SetIndent(unsigned int indent);
|
|
wxImageList *GetImageList();
|
|
wxImageList *GetStateImageList();
|
|
void SetImageList(wxImageList *imageList);
|
|
void SetStateImageList(wxImageList *imageList);
|
|
|
|
unsigned int GetSpacing();
|
|
void SetSpacing(unsigned int spacing);
|
|
|
|
wxString GetItemText(const wxTreeItemId& item);
|
|
int GetItemImage(const wxTreeItemId& item,
|
|
wxTreeItemIcon which = wxTreeItemIcon_Normal);
|
|
int GetItemSelectedImage(const wxTreeItemId& item);
|
|
|
|
void SetItemText(const wxTreeItemId& item, const wxString& text);
|
|
void SetItemImage(const wxTreeItemId& item, int image,
|
|
wxTreeItemIcon which = wxTreeItemIcon_Normal);
|
|
void SetItemSelectedImage(const wxTreeItemId& item, int image);
|
|
void SetItemHasChildren(const wxTreeItemId& item, bool hasChildren = TRUE);
|
|
|
|
%addmethods {
|
|
// [Get|Set]ItemData substitutes. Automatically create wxPyTreeItemData
|
|
// if needed.
|
|
wxPyTreeItemData* GetItemData(const wxTreeItemId& item) {
|
|
wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
|
|
if (data == NULL) {
|
|
data = new wxPyTreeItemData();
|
|
data->SetId(item); // set the id
|
|
self->SetItemData(item, data);
|
|
}
|
|
return data;
|
|
}
|
|
|
|
void SetItemData(const wxTreeItemId& item, wxPyTreeItemData* data) {
|
|
data->SetId(item); // set the id
|
|
self->SetItemData(item, data);
|
|
}
|
|
|
|
// [Get|Set]PyData are short-cuts. Also made somewhat crash-proof by
|
|
// automatically creating data classes.
|
|
PyObject* GetPyData(const wxTreeItemId& item) {
|
|
wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
|
|
if (data == NULL) {
|
|
data = new wxPyTreeItemData();
|
|
data->SetId(item); // set the id
|
|
self->SetItemData(item, data);
|
|
}
|
|
return data->GetData();
|
|
}
|
|
|
|
void SetPyData(const wxTreeItemId& item, PyObject* obj) {
|
|
wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
|
|
if (data == NULL) {
|
|
data = new wxPyTreeItemData(obj);
|
|
data->SetId(item); // set the id
|
|
self->SetItemData(item, data);
|
|
} else
|
|
data->SetData(obj);
|
|
}
|
|
}
|
|
|
|
|
|
bool IsVisible(const wxTreeItemId& item);
|
|
bool ItemHasChildren(const wxTreeItemId& item);
|
|
bool IsExpanded(const wxTreeItemId& item);
|
|
bool IsSelected(const wxTreeItemId& item);
|
|
|
|
wxTreeItemId GetRootItem();
|
|
wxTreeItemId GetSelection();
|
|
%name(GetItemParent) wxTreeItemId GetParent(const wxTreeItemId& item);
|
|
//size_t GetSelections(wxArrayTreeItemIds& selection);
|
|
%addmethods {
|
|
PyObject* GetSelections() {
|
|
bool doSave = wxPyRestoreThread();
|
|
PyObject* rval = PyList_New(0);
|
|
wxArrayTreeItemIds array;
|
|
size_t num, x;
|
|
num = self->GetSelections(array);
|
|
for (x=0; x < num; x++) {
|
|
wxTreeItemId *tii = new wxTreeItemId(array.Item(x));
|
|
PyObject* item = wxPyConstructObject((void*)tii, "wxTreeItemId", TRUE);
|
|
PyList_Append(rval, item);
|
|
}
|
|
wxPySaveThread(doSave);
|
|
return rval;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = TRUE);
|
|
|
|
wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& INOUT);
|
|
wxTreeItemId GetNextChild(const wxTreeItemId& item, long& INOUT);
|
|
wxTreeItemId GetNextSibling(const wxTreeItemId& item);
|
|
wxTreeItemId GetPrevSibling(const wxTreeItemId& item);
|
|
wxTreeItemId GetFirstVisibleItem();
|
|
wxTreeItemId GetNextVisible(const wxTreeItemId& item);
|
|
wxTreeItemId GetPrevVisible(const wxTreeItemId& item);
|
|
wxTreeItemId GetLastChild(const wxTreeItemId& item);
|
|
|
|
|
|
|
|
wxTreeItemId AddRoot(const wxString& text,
|
|
int image = -1, int selectedImage = -1,
|
|
wxPyTreeItemData *data = NULL);
|
|
wxTreeItemId PrependItem(const wxTreeItemId& parent,
|
|
const wxString& text,
|
|
int image = -1, int selectedImage = -1,
|
|
wxPyTreeItemData *data = NULL);
|
|
wxTreeItemId InsertItem(const wxTreeItemId& parent,
|
|
const wxTreeItemId& idPrevious,
|
|
const wxString& text,
|
|
int image = -1, int selectedImage = -1,
|
|
wxPyTreeItemData *data = NULL);
|
|
%name(InsertItemBefore)
|
|
wxTreeItemId InsertItem(const wxTreeItemId& parent,
|
|
size_t before,
|
|
const wxString& text,
|
|
int image = -1, int selectedImage = -1,
|
|
wxTreeItemData *data = NULL);
|
|
wxTreeItemId AppendItem(const wxTreeItemId& parent,
|
|
const wxString& text,
|
|
int image = -1, int selectedImage = -1,
|
|
wxPyTreeItemData *data = NULL);
|
|
|
|
void Delete(const wxTreeItemId& item);
|
|
void DeleteChildren(const wxTreeItemId& item);
|
|
void DeleteAllItems();
|
|
|
|
void Expand(const wxTreeItemId& item);
|
|
void Collapse(const wxTreeItemId& item);
|
|
void CollapseAndReset(const wxTreeItemId& item);
|
|
void Toggle(const wxTreeItemId& item);
|
|
|
|
void Unselect();
|
|
void UnselectAll();
|
|
void SelectItem(const wxTreeItemId& item);
|
|
void EnsureVisible(const wxTreeItemId& item);
|
|
void ScrollTo(const wxTreeItemId& item);
|
|
#ifdef __WXMSW__
|
|
wxTextCtrl* EditLabel(const wxTreeItemId& item);
|
|
wxTextCtrl* GetEditControl();
|
|
void EndEditLabel(const wxTreeItemId& item, int discardChanges = FALSE);
|
|
#else
|
|
void EditLabel(const wxTreeItemId& item);
|
|
#endif
|
|
|
|
void SortChildren(const wxTreeItemId& item);
|
|
|
|
void SetItemBold(const wxTreeItemId& item, int bold = TRUE);
|
|
bool IsBold(const wxTreeItemId& item) const;
|
|
wxTreeItemId HitTest(const wxPoint& point, int& OUTPUT);
|
|
|
|
|
|
|
|
void SetItemTextColour(const wxTreeItemId& item, const wxColour& col);
|
|
void SetItemBackgroundColour(const wxTreeItemId& item, const wxColour& col);
|
|
void SetItemFont(const wxTreeItemId& item, const wxFont& font);
|
|
|
|
#ifdef __WXMSW__
|
|
void SetItemDropHighlight(const wxTreeItemId& item, int highlight = TRUE);
|
|
|
|
//bool GetBoundingRect(const wxTreeItemId& item, wxRect& rect, int textOnly = FALSE)
|
|
%addmethods {
|
|
PyObject* GetBoundingRect(const wxTreeItemId& item, int textOnly = FALSE) {
|
|
wxRect rect;
|
|
if (self->GetBoundingRect(item, rect, textOnly)) {
|
|
bool doSave = wxPyRestoreThread();
|
|
wxRect* r = new wxRect(rect);
|
|
PyObject* val = wxPyConstructObject((void*)r, "wxRect");
|
|
wxPySaveThread(doSave);
|
|
return val;
|
|
}
|
|
else {
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
%pragma(python) addtoclass = "
|
|
# Redefine some methods that SWIG gets a bit confused on...
|
|
def GetFirstChild(self, *_args, **_kwargs):
|
|
val1,val2 = apply(controls2c.wxTreeCtrl_GetFirstChild,(self,) + _args, _kwargs)
|
|
val1 = wxTreeItemIdPtr(val1)
|
|
val1.thisown = 1
|
|
return (val1,val2)
|
|
def GetNextChild(self, *_args, **_kwargs):
|
|
val1,val2 = apply(controls2c.wxTreeCtrl_GetNextChild,(self,) + _args, _kwargs)
|
|
val1 = wxTreeItemIdPtr(val1)
|
|
val1.thisown = 1
|
|
return (val1,val2)
|
|
def HitTest(self, *_args, **_kwargs):
|
|
val1, val2 = apply(controls2c.wxTreeCtrl_HitTest,(self,) + _args, _kwargs)
|
|
val1 = wxTreeItemIdPtr(val1)
|
|
val1.thisown = 1
|
|
return (val1,val2)
|
|
"
|
|
};
|
|
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
#ifdef SKIPTHIS
|
|
#ifdef __WXMSW__
|
|
|
|
|
|
enum {
|
|
/* tab control event types */
|
|
wxEVT_COMMAND_TAB_SEL_CHANGED,
|
|
wxEVT_COMMAND_TAB_SEL_CHANGING,
|
|
};
|
|
|
|
|
|
class wxTabEvent : public wxCommandEvent {
|
|
public:
|
|
};
|
|
|
|
|
|
|
|
class wxTabCtrl : public wxControl {
|
|
public:
|
|
wxTabCtrl(wxWindow* parent, wxWindowID id,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = 0,
|
|
char* name = "tabCtrl");
|
|
|
|
%pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)"
|
|
|
|
bool DeleteAllItems();
|
|
bool DeleteItem(int item);
|
|
wxImageList* GetImageList();
|
|
int GetItemCount();
|
|
// TODO: void* GetItemData();
|
|
int GetItemImage(int item);
|
|
|
|
%addmethods {
|
|
%new wxRect* GetItemRect(int item) {
|
|
wxRect* rect = new wxRect;
|
|
self->GetItemRect(item, *rect);
|
|
return rect;
|
|
}
|
|
}
|
|
|
|
wxString GetItemText(int item);
|
|
bool GetRowCount();
|
|
int GetSelection();
|
|
int HitTest(const wxPoint& pt, long& OUTPUT);
|
|
void InsertItem(int item, const wxString& text,
|
|
int imageId = -1, void* clientData = NULL);
|
|
// TODO: bool SetItemData(int item, void* data);
|
|
bool SetItemImage(int item, int image);
|
|
void SetImageList(wxImageList* imageList);
|
|
void SetItemSize(const wxSize& size);
|
|
bool SetItemText(int item, const wxString& text);
|
|
void SetPadding(const wxSize& padding);
|
|
int SetSelection(int item);
|
|
|
|
};
|
|
|
|
#endif
|
|
#endif
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
%init %{
|
|
wxPyPtrTypeMap_Add("wxTreeItemData", "wxPyTreeItemData");
|
|
wxPyPtrTypeMap_Add("wxTreeCtrl", "wxPyTreeCtrl");
|
|
%}
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
|