]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_listctrl.i
fixed memory leaks when reading invalid GIFs
[wxWidgets.git] / wxPython / src / _listctrl.i
index 0d3269c53f8f180020e5ffd8a676860fc0185d77..2c5e865413347adbcb0f97ab192583c8009c48bd 100644 (file)
@@ -19,7 +19,7 @@
 #include <wx/listctrl.h>
 %}
 
-MAKE_CONST_WXSTRING2(ListCtrlNameStr, _T("wxListCtrl"));
+MAKE_CONST_WXSTRING(ListCtrlNameStr);
 
 //---------------------------------------------------------------------------
 %newgroup
@@ -84,6 +84,9 @@ enum {
     wxLIST_HITTEST_TOLEFT,
     wxLIST_HITTEST_TORIGHT,
     wxLIST_HITTEST_ONITEM,
+
+// GetSubItemRect constants
+    wxLIST_GETSUBITEMRECT_WHOLEITEM,
 };
 
 
@@ -153,7 +156,7 @@ public:
     wxListItemAttr(const wxColour& colText = wxNullColour,
                    const wxColour& colBack = wxNullColour,
                    const wxFont& font = wxNullFont);
-
+    ~wxListItemAttr();
 
     // setters
     void SetTextColour(const wxColour& colText);
@@ -169,7 +172,14 @@ public:
     wxColour GetBackgroundColour();
     wxFont GetFont();
 
+    void AssignFrom(const wxListItemAttr& source);
+
+    %pythonPrepend Destroy "args[0].this.own(False)"
     %extend { void Destroy() { delete self; } }
+
+    %property(BackgroundColour, GetBackgroundColour, SetBackgroundColour, doc="See `GetBackgroundColour` and `SetBackgroundColour`");
+    %property(Font, GetFont, SetFont, doc="See `GetFont` and `SetFont`");
+    %property(TextColour, GetTextColour, SetTextColour, doc="See `GetTextColour` and `SetTextColour`");
 };
 
 
@@ -182,9 +192,15 @@ public:
 // wxListItem: the item or column info, used to exchange data with wxListCtrl
 class wxListItem : public wxObject {
 public:
+    // turn off this typemap
+    %typemap(out) wxListItem*;
+
     wxListItem();
     ~wxListItem();
 
+    // Turn it back on again
+    %typemap(out) wxListItem* { $result = wxPyMake_wxObject($1, $owner); }
+
     // resetting
     void Clear();
     void ClearAttributes();
@@ -239,6 +255,19 @@ public:
     int             m_format;   // left, right, centre
     int             m_width;    // width of column
 
+    %property(Align, GetAlign, SetAlign, doc="See `GetAlign` and `SetAlign`");
+    %property(Attributes, GetAttributes, doc="See `GetAttributes`");
+    %property(BackgroundColour, GetBackgroundColour, SetBackgroundColour, doc="See `GetBackgroundColour` and `SetBackgroundColour`");
+    %property(Column, GetColumn, SetColumn, doc="See `GetColumn` and `SetColumn`");
+    %property(Data, GetData, SetData, doc="See `GetData` and `SetData`");
+    %property(Font, GetFont, SetFont, doc="See `GetFont` and `SetFont`");
+    %property(Id, GetId, SetId, doc="See `GetId` and `SetId`");
+    %property(Image, GetImage, SetImage, doc="See `GetImage` and `SetImage`");
+    %property(Mask, GetMask, SetMask, doc="See `GetMask` and `SetMask`");
+    %property(State, GetState, SetState, doc="See `GetState` and `SetState`");
+    %property(Text, GetText, SetText, doc="See `GetText` and `SetText`");
+    %property(TextColour, GetTextColour, SetTextColour, doc="See `GetTextColour` and `SetTextColour`");
+    %property(Width, GetWidth, SetWidth, doc="See `GetWidth` and `SetWidth`");
 };
 
 
@@ -279,6 +308,20 @@ public:
     // was label editing canceled? (for wxEVT_COMMAND_LIST_END_LABEL_EDIT only)
     bool IsEditCancelled() const;
     void SetEditCanceled(bool editCancelled);
+
+    %property(CacheFrom, GetCacheFrom, doc="See `GetCacheFrom`");
+    %property(CacheTo, GetCacheTo, doc="See `GetCacheTo`");
+    %property(Column, GetColumn, doc="See `GetColumn`");
+    %property(Data, GetData, doc="See `GetData`");
+    %property(Image, GetImage, doc="See `GetImage`");
+    %property(Index, GetIndex, doc="See `GetIndex`");
+    %property(Item, GetItem, doc="See `GetItem`");
+    %property(KeyCode, GetKeyCode, doc="See `GetKeyCode`");
+    %property(Label, GetLabel, doc="See `GetLabel`");
+    %property(Mask, GetMask, doc="See `GetMask`");
+    %property(Point, GetPoint, doc="See `GetPoint`");
+    %property(Text, GetText, doc="See `GetText`");
+
 };
 
 /* List control event types */
@@ -288,8 +331,6 @@ public:
 %constant wxEventType wxEVT_COMMAND_LIST_END_LABEL_EDIT;
 %constant wxEventType wxEVT_COMMAND_LIST_DELETE_ITEM;
 %constant wxEventType wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
-%constant wxEventType wxEVT_COMMAND_LIST_GET_INFO;
-%constant wxEventType wxEVT_COMMAND_LIST_SET_INFO;
 %constant wxEventType wxEVT_COMMAND_LIST_ITEM_SELECTED;
 %constant wxEventType wxEVT_COMMAND_LIST_ITEM_DESELECTED;
 %constant wxEventType wxEVT_COMMAND_LIST_KEY_DOWN;
@@ -305,7 +346,11 @@ public:
 %constant wxEventType wxEVT_COMMAND_LIST_COL_END_DRAG;
 %constant wxEventType wxEVT_COMMAND_LIST_ITEM_FOCUSED;
 
-
+// WXWIN_COMPATIBILITY_2_4
+#if 0
+%constant wxEventType wxEVT_COMMAND_LIST_GET_INFO;
+%constant wxEventType wxEVT_COMMAND_LIST_SET_INFO;
+#endif
 
 %pythoncode {
 
@@ -315,8 +360,10 @@ EVT_LIST_BEGIN_LABEL_EDIT  = wx.PyEventBinder(wxEVT_COMMAND_LIST_BEGIN_LABEL_EDI
 EVT_LIST_END_LABEL_EDIT    = wx.PyEventBinder(wxEVT_COMMAND_LIST_END_LABEL_EDIT   , 1)
 EVT_LIST_DELETE_ITEM       = wx.PyEventBinder(wxEVT_COMMAND_LIST_DELETE_ITEM      , 1)
 EVT_LIST_DELETE_ALL_ITEMS  = wx.PyEventBinder(wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS , 1)
-EVT_LIST_GET_INFO          = wx.PyEventBinder(wxEVT_COMMAND_LIST_GET_INFO         , 1)
-EVT_LIST_SET_INFO          = wx.PyEventBinder(wxEVT_COMMAND_LIST_SET_INFO         , 1)
+#WXWIN_COMPATIBILITY_2_4
+#EVT_LIST_GET_INFO          = wx.PyEventBinder(wxEVT_COMMAND_LIST_GET_INFO         , 1)
+#EVT_LIST_SET_INFO          = wx.PyEventBinder(wxEVT_COMMAND_LIST_SET_INFO         , 1)
+#END WXWIN_COMPATIBILITY_2_4
 EVT_LIST_ITEM_SELECTED     = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_SELECTED    , 1)
 EVT_LIST_ITEM_DESELECTED   = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_DESELECTED  , 1)
 EVT_LIST_KEY_DOWN          = wx.PyEventBinder(wxEVT_COMMAND_LIST_KEY_DOWN         , 1)
@@ -332,8 +379,9 @@ EVT_LIST_COL_DRAGGING      = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_DRAGGING
 EVT_LIST_COL_END_DRAG      = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_END_DRAG     , 1)
 EVT_LIST_ITEM_FOCUSED      = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_FOCUSED     , 1)
 
-EVT_LIST_GET_INFO = wx._deprecated(EVT_LIST_GET_INFO)
-EVT_LIST_SET_INFO = wx._deprecated(EVT_LIST_SET_INFO)
+#WXWIN_COMPATIBILITY_2_4
+#EVT_LIST_GET_INFO = wx._deprecated(EVT_LIST_GET_INFO)
+#EVT_LIST_SET_INFO = wx._deprecated(EVT_LIST_SET_INFO)
 }
 
 //---------------------------------------------------------------------------
@@ -344,7 +392,7 @@ EVT_LIST_SET_INFO = wx._deprecated(EVT_LIST_SET_INFO)
     static int wxCALLBACK wxPyListCtrl_SortItems(long item1, long item2, long funcPtr) {
         int retval = 0;
         PyObject* func = (PyObject*)funcPtr;
-        bool blocked = wxPyBeginBlockThreads();
+        wxPyBlock_t blocked = wxPyBeginBlockThreads();
 
         PyObject* args = Py_BuildValue("(ii)", item1, item2);
         PyObject* result = PyEval_CallObject(func, args);
@@ -363,7 +411,7 @@ EVT_LIST_SET_INFO = wx._deprecated(EVT_LIST_SET_INFO)
 
 %{  // C++ Version of a Python aware class
 class wxPyListCtrl : public wxListCtrl {
-    DECLARE_ABSTRACT_CLASS(wxPyListCtrl);
+    DECLARE_ABSTRACT_CLASS(wxPyListCtrl)
 public:
     wxPyListCtrl() : wxListCtrl() {}
     wxPyListCtrl(wxWindow* parent, wxWindowID id,
@@ -388,6 +436,7 @@ public:
 
     // use the virtual version to avoid a confusing assert in the base class
     DEC_PYCALLBACK_INT_LONG_virtual(OnGetItemImage);
+    DEC_PYCALLBACK_INT_LONGLONG(OnGetItemColumnImage);
 
     PYPRIVATE;
 };
@@ -397,20 +446,25 @@ IMPLEMENT_ABSTRACT_CLASS(wxPyListCtrl, wxListCtrl);
 IMP_PYCALLBACK_STRING_LONGLONG(wxPyListCtrl, wxListCtrl, OnGetItemText);
 IMP_PYCALLBACK_LISTATTR_LONG(wxPyListCtrl, wxListCtrl, OnGetItemAttr);
 IMP_PYCALLBACK_INT_LONG_virtual(wxPyListCtrl, wxListCtrl, OnGetItemImage);
-%}
+IMP_PYCALLBACK_INT_LONGLONG(wxPyListCtrl, wxListCtrl, OnGetItemColumnImage);
 
+%}
 
 
 
+// NOTE: The following option is set in _settings.i
+//     # Until the new native control for wxMac is up to par, still use the generic one.
+//     SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 1)
 
 MustHaveApp(wxPyListCtrl);
 
 %rename(ListCtrl) wxPyListCtrl;
 class wxPyListCtrl : public wxControl {
 public:
+    // turn off this typemap
+    %typemap(out) wxPyListCtrl*;
 
-    %pythonAppend wxPyListCtrl         "self._setOORInfo(self);self._setCallbackInfo(self, ListCtrl)"
+    %pythonAppend wxPyListCtrl         "self._setOORInfo(self);" setCallbackInfo(ListCtrl)
     %pythonAppend wxPyListCtrl()       ""
 
     wxPyListCtrl(wxWindow* parent, wxWindowID id = -1,
@@ -421,6 +475,9 @@ public:
                  const wxString& name = wxPyListCtrlNameStr);
     %RenameCtor(PreListCtrl, wxPyListCtrl());
 
+    // Turn it back on again
+    %typemap(out) wxPyListCtrl* { $result = wxPyMake_wxObject($1, $owner); }
+
     bool Create(wxWindow* parent, wxWindowID id = -1,
                  const wxPoint& pos = wxDefaultPosition,
                  const wxSize& size = wxDefaultSize,
@@ -473,10 +530,8 @@ public:
     // 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;
-#endif
 
     // Gets information about the item
     %pythonAppend GetItem "if val is not None: val.thisown = 1";  // %newobject doesn't work with OOR typemap
@@ -505,6 +560,7 @@ public:
 
     // Sets the item image
     bool SetItemImage(long item, int image, int selImage=-1) ;
+    bool SetItemColumnImage( long item, long column, int image );
 
     // Gets the item text
     wxString GetItemText(long item) const ;
@@ -535,6 +591,13 @@ public:
             self->GetItemRect(item, rect, code);
             return rect;
         }
+
+// MSW only so far...
+//         wxRect GetSubItemRect(long item, long subItem, int code = wxLIST_RECT_BOUNDS) {
+//             wxRect rect;
+//             self->GetSubItemRect(item, subItem, rect, code);
+//             return rect;
+//         }
     }
 
 
@@ -549,9 +612,11 @@ public:
 
     // get the horizontal and vertical components of the item spacing
     wxSize GetItemSpacing() const;
+    %pythoncode { GetItemSpacing = wx._deprecated(GetItemSpacing) }
 
 #ifndef __WXMSW__
     void SetItemSpacing( int spacing, bool isSmall = false );
+    %pythoncode { SetItemSpacing = wx._deprecated(SetItemSpacing) }
 #endif
 
     // Gets the number of selected items in the list control
@@ -585,11 +650,9 @@ public:
     // Sets the image list
     void SetImageList(wxImageList *imageList, int which);
 
-    // is there a way to tell SWIG to disown this???
-
-    %apply SWIGTYPE *DISOWN { wxImageList *imageList };
+    %disownarg( wxImageList *imageList );
     void AssignImageList(wxImageList *imageList, int which);
-    %clear wxImageList *imageList;
+    %cleardisown( wxImageList *imageList );
 
     // are we in report mode?
     bool InReportView() const;
@@ -649,23 +712,36 @@ public:
         long, HitTest(const wxPoint& point, int& OUTPUT),
         "HitTest(Point point) -> (item, where)",
         "Determines which item (if any) is at the specified point, giving
-details in the second return value (see wxLIST_HITTEST_... flags.)", "");
+details in the second return value (see wx.LIST_HITTEST flags.)", "");
+
+    DocDeclAStrName(
+        long, HitTest(const wxPoint& point, int& OUTPUT, long* OUTPUT),
+        "HitTestSubItem(Point point) -> (item, where, subItem)",
+        "Determines which item (if any) is at the specified point, giving details in
+the second return value (see wx.LIST_HITTEST flags) and also the subItem, if
+any.", "",
+        HitTestSubItem);
+
 
     // Inserts an item, returning the index of the new item if successful,
     // -1 otherwise.
     long InsertItem(wxListItem& info);
 
     // Insert a string item
-    %Rename(InsertStringItem,  long, InsertItem(long index, const wxString& label));
+    %Rename(InsertStringItem,
+            long, InsertItem(long index, const wxString& label, int imageIndex=-1));
 
     // Insert an image item
-    %Rename(InsertImageItem,  long, InsertItem(long index, int imageIndex));
+    %Rename(InsertImageItem,
+            long, InsertItem(long index, int imageIndex));
 
     // Insert an image/string item
-    %Rename(InsertImageStringItem,  long, InsertItem(long index, const wxString& label, int imageIndex));
+    %Rename(InsertImageStringItem,
+            long, InsertItem(long index, const wxString& label, int imageIndex));
 
     // For list view mode (only), inserts a column.
-    %Rename(InsertColumnInfo,  long, InsertColumn(long col, wxListItem& info));
+    %Rename(InsertColumnItem,  long, InsertColumn(long col, wxListItem& info));
+    %pythoncode { InsertColumnInfo = InsertColumnItem }
 
     long InsertColumn(long col,
                       const wxString& heading,
@@ -687,6 +763,9 @@ details in the second return value (see wxLIST_HITTEST_... flags.)", "");
     void SetItemBackgroundColour( long item, const wxColour &col);
     wxColour GetItemBackgroundColour( long item ) const;
 
+    // Font of an item.
+    void SetItemFont( long item, const wxFont &f);
+    wxFont GetItemFont( long item ) const;
 
     %pythoncode {
     %#
@@ -716,7 +795,7 @@ details in the second return value (see wxLIST_HITTEST_... flags.)", "");
 
     def IsSelected(self, idx):
         '''return True if the item is selected'''
-        return self.GetItemState(idx, wx.LIST_STATE_SELECTED) != 0
+        return (self.GetItemState(idx, wx.LIST_STATE_SELECTED) & wx.LIST_STATE_SELECTED) != 0
 
     def SetColumnImage(self, col, image):
         item = self.GetColumn(col)
@@ -769,7 +848,7 @@ details in the second return value (see wxLIST_HITTEST_... flags.)", "");
 
     %extend {
         wxWindow* GetMainWindow() {
-        #ifdef __WXMSW__
+        #if defined(__WXMSW__) || defined(__WXMAC__)
             return self;
         #else
             return (wxWindow*)self->m_mainWin;
@@ -779,6 +858,17 @@ details in the second return value (see wxLIST_HITTEST_... flags.)", "");
 
     static wxVisualAttributes
     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
+
+    %property(ColumnCount, GetColumnCount, doc="See `GetColumnCount`");
+    %property(CountPerPage, GetCountPerPage, doc="See `GetCountPerPage`");
+    %property(EditControl, GetEditControl, doc="See `GetEditControl`");
+    %property(FocusedItem, GetFocusedItem, doc="See `GetFocusedItem`");
+    %property(ItemCount, GetItemCount, SetItemCount, doc="See `GetItemCount` and `SetItemCount`");
+    %property(MainWindow, GetMainWindow, doc="See `GetMainWindow`");
+    %property(SelectedItemCount, GetSelectedItemCount, doc="See `GetSelectedItemCount`");
+    %property(TextColour, GetTextColour, SetTextColour, doc="See `GetTextColour` and `SetTextColour`");
+    %property(TopItem, GetTopItem, doc="See `GetTopItem`");
+    %property(ViewRect, GetViewRect, doc="See `GetViewRect`");
 };
 
 
@@ -831,6 +921,8 @@ public:
 
     void SetColumnImage(int col, int image);
     void ClearColumnImage(int col);
+
+    %property(FocusedItem, GetFocusedItem, doc="See `GetFocusedItem`");
 };