#include <wx/treectrl.h>
#include <wx/imaglist.h>
#include <wx/dirctrl.h>
+
+#include "pytree.h"
%}
//----------------------------------------------------------------------
static const wxString wxPyEmptyString(wxT(""));
%}
+
+%{
+ static const long longzero = 0;
+%}
+
//----------------------------------------------------------------------
enum {
wxListItem m_item;
%readwrite
- int GetCode();
+ int GetKeyCode();
+ %pragma(python) addtoclass = "GetCode = GetKeyCode"
long GetIndex();
int GetColumn();
wxPoint GetPoint();
long GetCacheFrom();
long GetCacheTo();
+
+ // was label editing canceled? (for wxEVT_COMMAND_LIST_END_LABEL_EDIT only)
+ bool IsEditCancelled() const { return m_editCancelled; }
+ void SetEditCanceled(bool editCancelled) { m_editCancelled = editCancelled; }
};
%addmethods {
%new wxListItem* GetColumn(int col) {
wxListItem item;
+ item.SetMask(0xFFFF);
if (self->GetColumn(col, item))
return new wxListItem(item);
else
return NULL;
}
- } // The OOR typemaps don't know what to do with the %new, so fix it up.
+ } // The OOR typemaps don't know what to do with the %new, so fix it up.
%pragma(python) addtoclass = "
- def GetItem(self, *_args, **_kwargs):
- val = apply(controls2c.wxListCtrl_GetColumn,(self,) + _args, _kwargs)
+ def GetColumn(self, *_args, **_kwargs):
+ val = controls2c.wxListCtrl_GetColumn(self, *_args, **_kwargs)
if val is not None: val.thisown = 1
return val
"
// or small icon view)
int GetCountPerPage() const;
+ // return the total area occupied by all the items (icon/small icon only)
+ wxRect GetViewRect() const;
+
#ifdef __WXMSW__
// Gets the edit control for editing labels.
wxTextCtrl* GetEditControl() const;
} // The OOR typemaps don't know what to do with the %new, so fix it up.
%pragma(python) addtoclass = "
def GetItem(self, *_args, **_kwargs):
- val = apply(controls2c.wxListCtrl_GetItem,(self,) + _args, _kwargs)
- val.thisown = 1
+ val = controls2c.wxListCtrl_GetItem(self, *_args, **_kwargs)
+ if val is not None: val.thisown = 1
return val
"
-
// Sets information about the item
bool SetItem(wxListItem& info) ;
// Gets the number of columns in the list control
int GetColumnCount() const;
- // Retrieves the spacing between icons in pixels.
- // If small is TRUE, gets the spacing for the small icon
- // view, otherwise the large icon view.
- int GetItemSpacing(bool isSmall) const;
+ // get the horizontal and vertical components of the item spacing
+ wxSize GetItemSpacing() const;
+
+#ifndef __WXMSW__
+ void SetItemSpacing( int spacing, bool isSmall = FALSE );
+#endif
// Gets the number of selected items in the list control
int GetSelectedItemCount() const;
// End label editing, optionally cancelling the edit
bool EndEditLabel(bool cancel);
+#else
+ void EditLabel(long item);
#endif
// Ensures this item is visible
'''get the currently focused item or -1 if none'''
return self.GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED)
+ def GetFirstSelected(self, *args):
+ '''return first selected item, or -1 when none'''
+ return self.GetNextSelected(-1)
+
+ def GetNextSelected(self, item):
+ '''return subsequent selected items, or -1 when no more'''
+ return self.GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED)
+
def IsSelected(self, idx):
'''return TRUE if the item is selected'''
return self.GetItemState(idx, wxLIST_STATE_SELECTED) != 0
'''Append an item to the list control. The entry parameter should be a
sequence with an item for each column'''
if len(entry):
+ if wx.wxUSE_UNICODE:
+ cvtfunc = unicode
+ else:
+ cvtfunc = str
pos = self.GetItemCount()
- self.InsertStringItem(pos, str(entry[0]))
+ self.InsertStringItem(pos, cvtfunc(entry[0]))
for i in range(1, len(entry)):
- self.SetStringItem(pos, i, str(entry[i]))
+ self.SetStringItem(pos, i, cvtfunc(entry[i]))
return pos
"
return self->SortItems(wxPyListCtrl_SortItems, (long)func);
}
}
+
+
+ %addmethods {
+ wxWindow* GetMainWindow() {
+ #ifdef __WXMSW__
+ return self;
+ #else
+ return (wxWindow*)self->m_mainWin;
+ #endif
+ }
+ }
};
};
-//----------------------------------------------------------------------
+//--------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------
// wxTreeCtrl flags
enum {
wxTR_NO_BUTTONS,
wxTR_HAS_BUTTONS,
- wxTR_TWIST_BUTTONS,
wxTR_NO_LINES,
- wxTR_MAC_BUTTONS,
- wxTR_AQUA_BUTTONS,
+ wxTR_LINES_AT_ROOT,
wxTR_SINGLE,
wxTR_MULTIPLE,
wxTR_EXTENDED,
- wxTR_FULL_ROW_HIGHLIGHT,
+ wxTR_HAS_VARIABLE_ROW_HEIGHT,
wxTR_EDIT_LABELS,
- wxTR_LINES_AT_ROOT,
wxTR_HIDE_ROOT,
wxTR_ROW_LINES,
- wxTR_HAS_VARIABLE_ROW_HEIGHT,
+ wxTR_FULL_ROW_HIGHLIGHT,
wxTR_DEFAULT_STYLE,
+
+ wxTR_TWIST_BUTTONS,
+ wxTR_MAC_BUTTONS,
+ wxTR_AQUA_BUTTONS,
};
+
enum wxTreeItemIcon
{
wxTreeItemIcon_Normal, // not selected, not expanded
wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK,
wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK,
wxEVT_COMMAND_TREE_END_DRAG,
+ wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK,
};
def EVT_TREE_BEGIN_RDRAG(win, id, func):
win.Connect(id, -1, wxEVT_COMMAND_TREE_BEGIN_RDRAG, func)
-def EVT_TREE_END_DRAG(win, id, func):
- win.Connect(id, -1, wxEVT_COMMAND_TREE_END_DRAG, func)
-
def EVT_TREE_BEGIN_LABEL_EDIT(win, id, func):
win.Connect(id, -1, wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, func)
def EVT_TREE_ITEM_MIDDLE_CLICK(win, id, func):
win.Connect(id, -1, wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, func)
+
+def EVT_TREE_END_DRAG(win, id, func):
+ win.Connect(id, -1, wxEVT_COMMAND_TREE_END_DRAG, func)
+
+def EVT_TREE_STATE_IMAGE_CLICK(win, id, func):
+ win.Connect(id, -1, wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK, func)
+
"
+typedef void *wxTreeItemIdValue;
+
+
class wxTreeItemAttr
{
public:
wxTreeItemId();
~wxTreeItemId();
bool IsOk();
- %pragma(python) addtoclass = "Ok = IsOk"
+ %pragma(python) addtoclass = "
+ Ok = IsOk
+ def __nonzero__(self):
+ return self.IsOk()
+"
%addmethods {
int __cmp__(wxTreeItemId* other) {
-%{
-class wxPyTreeItemData : public wxTreeItemData {
-public:
- wxPyTreeItemData(PyObject* obj = NULL) {
- if (obj == NULL)
- obj = Py_None;
- Py_INCREF(obj);
- m_obj = obj;
- }
-
- ~wxPyTreeItemData() {
- wxPyBeginBlockThreads();
- Py_DECREF(m_obj);
- wxPyEndBlockThreads();
- }
-
- PyObject* GetData() {
- Py_INCREF(m_obj);
- return m_obj;
- }
-
- void SetData(PyObject* obj) {
- wxPyBeginBlockThreads();
- Py_DECREF(m_obj);
- wxPyEndBlockThreads();
- m_obj = obj;
- Py_INCREF(obj);
- }
-
- PyObject* m_obj;
-};
-%}
-
-
-%name(wxTreeItemData) class wxPyTreeItemData : public wxObject {
+%name(wxTreeItemData) class wxPyTreeItemData {
public:
wxPyTreeItemData(PyObject* obj = NULL);
public:
wxTreeEvent(wxEventType commandType = wxEVT_NULL, int id = 0);
- wxTreeItemId GetItem();
- wxTreeItemId GetOldItem();
- wxPoint GetPoint();
- const wxKeyEvent& GetKeyEvent();
- int GetCode();
- const wxString& GetLabel();
+ // get the item on which the operation was performed or the newly
+ // selected item for wxEVT_COMMAND_TREE_SEL_CHANGED/ING events
+ wxTreeItemId GetItem() const;
+ void SetItem(const wxTreeItemId& item);
+
+ // for wxEVT_COMMAND_TREE_SEL_CHANGED/ING events, get the previously
+ // selected item
+ wxTreeItemId GetOldItem() const;
+ void SetOldItem(const wxTreeItemId& item);
+
+ // the point where the mouse was when the drag operation started (for
+ // wxEVT_COMMAND_TREE_BEGIN_(R)DRAG events only) or click position
+ wxPoint GetPoint() const;
+ void SetPoint(const wxPoint& pt);
+
+ // keyboard data (for wxEVT_COMMAND_TREE_KEY_DOWN only)
+ const wxKeyEvent& GetKeyEvent() const;
+ int GetKeyCode() const;
+ void SetKeyEvent(const wxKeyEvent& evt);
+
+ // label (for EVT_TREE_{BEGIN|END}_LABEL_EDIT only)
+ const wxString& GetLabel() const;
+ void SetLabel(const wxString& label);
+
+ // edit cancel flag (for EVT_TREE_{BEGIN|END}_LABEL_EDIT only)
+ bool IsEditCancelled() const;
+ void SetEditCanceled(bool editCancelled);
+
};
int rval = 0;
bool found;
wxPyBeginBlockThreads();
- if ((found = m_myInst.findCallback("OnCompareItems")))
- rval = m_myInst.callCallback(Py_BuildValue(
- "(OO)",
- wxPyConstructObject((void*)&item1, "wxTreeItemId"),
- wxPyConstructObject((void*)&item2, "wxTreeItemId")));
+ if ((found = m_myInst.findCallback("OnCompareItems"))) {
+ PyObject *o1 = wxPyConstructObject((void*)&item1, wxT("wxTreeItemId"));
+ PyObject *o2 = wxPyConstructObject((void*)&item2, wxT("wxTreeItemId"));
+ rval = m_myInst.callCallback(Py_BuildValue("(OO)",o1,o2));
+ Py_DECREF(o1);
+ Py_DECREF(o2);
+ }
wxPyEndBlockThreads();
if (! found)
rval = wxTreeCtrl::OnCompareItems(item1, item2);
%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,
- const wxString& name = wxPy_TreeCtrlNameStr);
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = wxTR_DEFAULT_STYLE,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxPy_TreeCtrlNameStr);
%name(wxPreTreeCtrl)wxPyTreeCtrl();
bool Create(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,
- const wxString& name = wxPy_TreeCtrlNameStr);
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = wxTR_DEFAULT_STYLE,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxPy_TreeCtrlNameStr);
void _setCallbackInfo(PyObject* self, PyObject* _class);
%pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxTreeCtrl)"
}
+ // get the item's text colour
+ wxColour GetItemTextColour(const wxTreeItemId& item) const;
+
+ // get the item's background colour
+ wxColour GetItemBackgroundColour(const wxTreeItemId& item) const;
+
+ // get the item's font
+ wxFont GetItemFont(const wxTreeItemId& item) const;
+
+
bool IsVisible(const wxTreeItemId& item);
bool ItemHasChildren(const wxTreeItemId& item);
bool IsExpanded(const wxTreeItemId& item);
wxTreeItemId GetRootItem();
wxTreeItemId GetSelection();
- %name(GetItemParent) wxTreeItemId GetParent(const wxTreeItemId& item);
+ wxTreeItemId GetItemParent(const wxTreeItemId& item);
//size_t GetSelections(wxArrayTreeItemIds& selection);
%addmethods {
PyObject* GetSelections() {
num = self->GetSelections(array);
for (x=0; x < num; x++) {
wxTreeItemId *tii = new wxTreeItemId(array.Item(x));
- PyObject* item = wxPyConstructObject((void*)tii, "wxTreeItemId", TRUE);
+ PyObject* item = wxPyConstructObject((void*)tii, wxT("wxTreeItemId"), TRUE);
PyList_Append(rval, item);
}
wxPyEndBlockThreads();
size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = TRUE);
- wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& INOUT=0);
+ wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& INOUT = longzero);
wxTreeItemId GetNextChild(const wxTreeItemId& item, long& INOUT);
wxTreeItemId GetNextSibling(const wxTreeItemId& item);
wxTreeItemId GetPrevSibling(const wxTreeItemId& item);
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);
+#ifdef __WXMSW__
+ void EndEditLabel(const wxTreeItemId& item, int discardChanges = FALSE);
#endif
void SortChildren(const wxTreeItemId& item);
if (self->GetBoundingRect(item, rect, textOnly)) {
wxPyBeginBlockThreads();
wxRect* r = new wxRect(rect);
- PyObject* val = wxPyConstructObject((void*)r, "wxRect");
+ PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), 1);
wxPyEndBlockThreads();
return val;
}
%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,val2 = 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,val2 = 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, val2 = controls2c.wxTreeCtrl_HitTest(self, *_args, **_kwargs)
val1 = wxTreeItemIdPtr(val1)
val1.thisown = 1
return (val1,val2)
wxTreeCtrl* GetTreeCtrl() const;
wxDirFilterListCtrl* GetFilterListCtrl() const;
+ // Collapse & expand the tree, thus re-creating it from scratch:
+ void ReCreateTree();
+
// //// Helpers
// void SetupSections();
// // Parse the filter into an array of filters and an array of descriptions
};
+class wxFileIconsTable
+{
+public:
+ wxFileIconsTable();
+ ~wxFileIconsTable();
+
+ enum iconId_Type
+ {
+ folder,
+ folder_open,
+ computer,
+ drive,
+ cdrom,
+ floppy,
+ removeable,
+ file,
+ executable
+ };
+
+ int GetIconID(const wxString& extension, const wxString& mime = wxEmptyString);
+ wxImageList *GetSmallImageList();
+};
+
+
//----------------------------------------------------------------------
//----------------------------------------------------------------------