1 /////////////////////////////////////////////////////////////////////////////
 
   3 // Purpose:     SWIG interface file for wxListCtrl and related classes
 
   7 // Created:     10-June-1998
 
   9 // Copyright:   (c) 2002 by Total Control Software
 
  10 // Licence:     wxWindows license
 
  11 /////////////////////////////////////////////////////////////////////////////
 
  16 //---------------------------------------------------------------------------
 
  19 #include <wx/listctrl.h>
 
  22 MAKE_CONST_WXSTRING(ListCtrlNameStr);
 
  24 //---------------------------------------------------------------------------
 
  55     // Mask flags to tell app/GUI what fields of wxListItem are valid
 
  64 // State flags for indicating the state of an item
 
  65     wxLIST_STATE_DONTCARE,
 
  66     wxLIST_STATE_DROPHILITED,
 
  68     wxLIST_STATE_SELECTED,
 
  70     wxLIST_STATE_DISABLED,
 
  71     wxLIST_STATE_FILTERED,
 
  76 // Hit test flags, used in HitTest
 
  79     wxLIST_HITTEST_NOWHERE,
 
  80     wxLIST_HITTEST_ONITEMICON,
 
  81     wxLIST_HITTEST_ONITEMLABEL,
 
  82     wxLIST_HITTEST_ONITEMRIGHT,
 
  83     wxLIST_HITTEST_ONITEMSTATEICON,
 
  84     wxLIST_HITTEST_TOLEFT,
 
  85     wxLIST_HITTEST_TORIGHT,
 
  86     wxLIST_HITTEST_ONITEM,
 
  90 // Flags for GetNextItem (MSW only except wxLIST_NEXT_ALL)
 
  93     wxLIST_NEXT_ABOVE,          // Searches for an item above the specified item
 
  94     wxLIST_NEXT_ALL,            // Searches for subsequent item by index
 
  95     wxLIST_NEXT_BELOW,          // Searches for an item below the specified item
 
  96     wxLIST_NEXT_LEFT,           // Searches for an item to the left of the specified item
 
  97     wxLIST_NEXT_RIGHT           // Searches for an item to the right of the specified item
 
 100 // Alignment flags for Arrange (MSW only except wxLIST_ALIGN_LEFT)
 
 103     wxLIST_ALIGN_DEFAULT,
 
 106     wxLIST_ALIGN_SNAP_TO_GRID
 
 109 // Column format (MSW only except wxLIST_FORMAT_LEFT)
 
 110 enum wxListColumnFormat
 
 114     wxLIST_FORMAT_CENTRE,
 
 115     wxLIST_FORMAT_CENTER = wxLIST_FORMAT_CENTRE
 
 118 // Autosize values for SetColumnWidth
 
 121     wxLIST_AUTOSIZE = -1,
 
 122     wxLIST_AUTOSIZE_USEHEADER = -2      // partly supported by generic version
 
 125 // Flag values for GetItemRect
 
 133 // Flag values for FindItem (MSW only)
 
 144 //---------------------------------------------------------------------------
 
 147 // wxListItemAttr: a structure containing the visual attributes of an item
 
 153     wxListItemAttr(const wxColour& colText = wxNullColour,
 
 154                    const wxColour& colBack = wxNullColour,
 
 155                    const wxFont& font = wxNullFont);
 
 159     void SetTextColour(const wxColour& colText);
 
 160     void SetBackgroundColour(const wxColour& colBack);
 
 161     void SetFont(const wxFont& font);
 
 164     bool HasTextColour();
 
 165     bool HasBackgroundColour();
 
 168     wxColour GetTextColour();
 
 169     wxColour GetBackgroundColour();
 
 172     void AssignFrom(const wxListItemAttr& source);
 
 174     %pythonAppend Destroy "args[0].thisown = 0"
 
 175     %extend { void Destroy() { delete self; } }
 
 181 //---------------------------------------------------------------------------
 
 185 // wxListItem: the item or column info, used to exchange data with wxListCtrl
 
 186 class wxListItem : public wxObject {
 
 193     void ClearAttributes();
 
 196     void SetMask(long mask);
 
 198     void SetColumn(int col);
 
 199     void SetState(long state);
 
 200     void SetStateMask(long stateMask);
 
 201     void SetText(const wxString& text);
 
 202     void SetImage(int image);
 
 203     void SetData(long data);
 
 205     void SetWidth(int width);
 
 206     void SetAlign(wxListColumnFormat align);
 
 208     void SetTextColour(const wxColour& colText);
 
 209     void SetBackgroundColour(const wxColour& colBack);
 
 210     void SetFont(const wxFont& font);
 
 217     const wxString& GetText();
 
 222     wxListColumnFormat GetAlign();
 
 224     wxListItemAttr *GetAttributes();
 
 225     bool HasAttributes();
 
 227     wxColour GetTextColour() const;
 
 228     wxColour GetBackgroundColour() const;
 
 229     wxFont GetFont() const;
 
 231     // these members are public for compatibility
 
 232     long            m_mask;     // Indicates what fields are valid
 
 233     long            m_itemId;   // The zero-based item position
 
 234     int             m_col;      // Zero-based column, if in report mode
 
 235     long            m_state;    // The state of the item
 
 236     long            m_stateMask;// Which flags of m_state are valid (uses same flags)
 
 237     wxString        m_text;     // The label/header text
 
 238     int             m_image;    // The zero-based index into an image list
 
 239     long            m_data;     // App-defined data
 
 242     int             m_format;   // left, right, centre
 
 243     int             m_width;    // width of column
 
 248 //---------------------------------------------------------------------------
 
 252 // wxListEvent - the event class for the wxListCtrl notifications
 
 253 class wxListEvent: public wxNotifyEvent {
 
 255     wxListEvent(wxEventType commandType = wxEVT_NULL, int id = 0);
 
 267     %pythoncode { GetCode = GetKeyCode }
 
 271     %pythoncode { GetPosition = GetPoint }
 
 272     const wxString& GetLabel();
 
 273     const wxString& GetText();
 
 277     const wxListItem& GetItem();
 
 282     // was label editing canceled? (for wxEVT_COMMAND_LIST_END_LABEL_EDIT only)
 
 283     bool IsEditCancelled() const;
 
 284     void SetEditCanceled(bool editCancelled);
 
 287 /* List control event types */
 
 288 %constant wxEventType wxEVT_COMMAND_LIST_BEGIN_DRAG;
 
 289 %constant wxEventType wxEVT_COMMAND_LIST_BEGIN_RDRAG;
 
 290 %constant wxEventType wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT;
 
 291 %constant wxEventType wxEVT_COMMAND_LIST_END_LABEL_EDIT;
 
 292 %constant wxEventType wxEVT_COMMAND_LIST_DELETE_ITEM;
 
 293 %constant wxEventType wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
 
 294 %constant wxEventType wxEVT_COMMAND_LIST_ITEM_SELECTED;
 
 295 %constant wxEventType wxEVT_COMMAND_LIST_ITEM_DESELECTED;
 
 296 %constant wxEventType wxEVT_COMMAND_LIST_KEY_DOWN;
 
 297 %constant wxEventType wxEVT_COMMAND_LIST_INSERT_ITEM;
 
 298 %constant wxEventType wxEVT_COMMAND_LIST_COL_CLICK;
 
 299 %constant wxEventType wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK;
 
 300 %constant wxEventType wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK;
 
 301 %constant wxEventType wxEVT_COMMAND_LIST_ITEM_ACTIVATED;
 
 302 %constant wxEventType wxEVT_COMMAND_LIST_CACHE_HINT;
 
 303 %constant wxEventType wxEVT_COMMAND_LIST_COL_RIGHT_CLICK;
 
 304 %constant wxEventType wxEVT_COMMAND_LIST_COL_BEGIN_DRAG;
 
 305 %constant wxEventType wxEVT_COMMAND_LIST_COL_DRAGGING;
 
 306 %constant wxEventType wxEVT_COMMAND_LIST_COL_END_DRAG;
 
 307 %constant wxEventType wxEVT_COMMAND_LIST_ITEM_FOCUSED;
 
 309 // WXWIN_COMPATIBILITY_2_4
 
 311 %constant wxEventType wxEVT_COMMAND_LIST_GET_INFO;
 
 312 %constant wxEventType wxEVT_COMMAND_LIST_SET_INFO;
 
 317 EVT_LIST_BEGIN_DRAG        = wx.PyEventBinder(wxEVT_COMMAND_LIST_BEGIN_DRAG       , 1)
 
 318 EVT_LIST_BEGIN_RDRAG       = wx.PyEventBinder(wxEVT_COMMAND_LIST_BEGIN_RDRAG      , 1)
 
 319 EVT_LIST_BEGIN_LABEL_EDIT  = wx.PyEventBinder(wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT , 1)
 
 320 EVT_LIST_END_LABEL_EDIT    = wx.PyEventBinder(wxEVT_COMMAND_LIST_END_LABEL_EDIT   , 1)
 
 321 EVT_LIST_DELETE_ITEM       = wx.PyEventBinder(wxEVT_COMMAND_LIST_DELETE_ITEM      , 1)
 
 322 EVT_LIST_DELETE_ALL_ITEMS  = wx.PyEventBinder(wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS , 1)
 
 323 #WXWIN_COMPATIBILITY_2_4
 
 324 #EVT_LIST_GET_INFO          = wx.PyEventBinder(wxEVT_COMMAND_LIST_GET_INFO         , 1)
 
 325 #EVT_LIST_SET_INFO          = wx.PyEventBinder(wxEVT_COMMAND_LIST_SET_INFO         , 1)
 
 326 #END WXWIN_COMPATIBILITY_2_4
 
 327 EVT_LIST_ITEM_SELECTED     = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_SELECTED    , 1)
 
 328 EVT_LIST_ITEM_DESELECTED   = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_DESELECTED  , 1)
 
 329 EVT_LIST_KEY_DOWN          = wx.PyEventBinder(wxEVT_COMMAND_LIST_KEY_DOWN         , 1)
 
 330 EVT_LIST_INSERT_ITEM       = wx.PyEventBinder(wxEVT_COMMAND_LIST_INSERT_ITEM      , 1)
 
 331 EVT_LIST_COL_CLICK         = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_CLICK        , 1)
 
 332 EVT_LIST_ITEM_RIGHT_CLICK  = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK , 1)
 
 333 EVT_LIST_ITEM_MIDDLE_CLICK = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK, 1)
 
 334 EVT_LIST_ITEM_ACTIVATED    = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_ACTIVATED   , 1)
 
 335 EVT_LIST_CACHE_HINT        = wx.PyEventBinder(wxEVT_COMMAND_LIST_CACHE_HINT       , 1)
 
 336 EVT_LIST_COL_RIGHT_CLICK   = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK  , 1)
 
 337 EVT_LIST_COL_BEGIN_DRAG    = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG   , 1)
 
 338 EVT_LIST_COL_DRAGGING      = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_DRAGGING     , 1)
 
 339 EVT_LIST_COL_END_DRAG      = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_END_DRAG     , 1)
 
 340 EVT_LIST_ITEM_FOCUSED      = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_FOCUSED     , 1)
 
 342 #WXWIN_COMPATIBILITY_2_4
 
 343 #EVT_LIST_GET_INFO = wx._deprecated(EVT_LIST_GET_INFO)
 
 344 #EVT_LIST_SET_INFO = wx._deprecated(EVT_LIST_SET_INFO)
 
 347 //---------------------------------------------------------------------------
 
 351 %{ // Python aware sorting function for wxPyListCtrl
 
 352     static int wxCALLBACK wxPyListCtrl_SortItems(long item1, long item2, long funcPtr) {
 
 354         PyObject* func = (PyObject*)funcPtr;
 
 355         wxPyBlock_t blocked = wxPyBeginBlockThreads();
 
 357         PyObject* args = Py_BuildValue("(ii)", item1, item2);
 
 358         PyObject* result = PyEval_CallObject(func, args);
 
 361             retval = PyInt_AsLong(result);
 
 365         wxPyEndBlockThreads(blocked);
 
 372 %{  // C++ Version of a Python aware class
 
 373 class wxPyListCtrl : public wxListCtrl {
 
 374     DECLARE_ABSTRACT_CLASS(wxPyListCtrl)
 
 376     wxPyListCtrl() : wxListCtrl() {}
 
 377     wxPyListCtrl(wxWindow* parent, wxWindowID id,
 
 381                  const wxValidator& validator,
 
 382                  const wxString& name) :
 
 383         wxListCtrl(parent, id, pos, size, style, validator, name) {}
 
 385     bool Create(wxWindow* parent, wxWindowID id,
 
 389                 const wxValidator& validator,
 
 390                 const wxString& name) {
 
 391         return wxListCtrl::Create(parent, id, pos, size, style, validator, name);
 
 394     DEC_PYCALLBACK_STRING_LONGLONG(OnGetItemText);
 
 395     DEC_PYCALLBACK_LISTATTR_LONG(OnGetItemAttr);
 
 397     // use the virtual version to avoid a confusing assert in the base class
 
 398     DEC_PYCALLBACK_INT_LONG_virtual(OnGetItemImage);
 
 399     DEC_PYCALLBACK_INT_LONGLONG(OnGetItemColumnImage);
 
 404 IMPLEMENT_ABSTRACT_CLASS(wxPyListCtrl, wxListCtrl);
 
 406 IMP_PYCALLBACK_STRING_LONGLONG(wxPyListCtrl, wxListCtrl, OnGetItemText);
 
 407 IMP_PYCALLBACK_LISTATTR_LONG(wxPyListCtrl, wxListCtrl, OnGetItemAttr);
 
 408 IMP_PYCALLBACK_INT_LONG_virtual(wxPyListCtrl, wxListCtrl, OnGetItemImage);
 
 409 IMP_PYCALLBACK_INT_LONGLONG(wxPyListCtrl, wxListCtrl, OnGetItemColumnImage); 
 
 417 MustHaveApp(wxPyListCtrl);
 
 419 %rename(ListCtrl) wxPyListCtrl;
 
 420 class wxPyListCtrl : public wxControl {
 
 423     %pythonAppend wxPyListCtrl         "self._setOORInfo(self);self._setCallbackInfo(self, ListCtrl)"
 
 424     %pythonAppend wxPyListCtrl()       ""
 
 426     wxPyListCtrl(wxWindow* parent, wxWindowID id = -1,
 
 427                  const wxPoint& pos = wxDefaultPosition,
 
 428                  const wxSize& size = wxDefaultSize,
 
 429                  long style = wxLC_ICON,
 
 430                  const wxValidator& validator = wxDefaultValidator,
 
 431                  const wxString& name = wxPyListCtrlNameStr);
 
 432     %RenameCtor(PreListCtrl, wxPyListCtrl());
 
 434     bool Create(wxWindow* parent, wxWindowID id = -1,
 
 435                  const wxPoint& pos = wxDefaultPosition,
 
 436                  const wxSize& size = wxDefaultSize,
 
 437                  long style = wxLC_ICON,
 
 438                  const wxValidator& validator = wxDefaultValidator,
 
 439                  const wxString& name = wxPyListCtrlNameStr);
 
 441     void _setCallbackInfo(PyObject* self, PyObject* _class);
 
 444     // Set the control colours
 
 445     bool SetForegroundColour(const wxColour& col);
 
 446     bool SetBackgroundColour(const wxColour& col);
 
 448     // Gets information about this column
 
 449     %pythonAppend GetColumn "if val is not None: val.thisown = 1";  // %newobject doesn't work with OOR typemap
 
 451         wxListItem* GetColumn(int col) {
 
 453             item.SetMask( wxLIST_MASK_STATE |
 
 461             if (self->GetColumn(col, item))
 
 462                 return new wxListItem(item);
 
 468     // Sets information about this column
 
 469     bool SetColumn(int col, wxListItem& item) ;
 
 471     // Gets the column width
 
 472     int GetColumnWidth(int col) const;
 
 474     // Sets the column width
 
 475     bool SetColumnWidth(int col, int width) ;
 
 477     // Gets the number of items that can fit vertically in the
 
 478     // visible area of the list control (list or report view)
 
 479     // or the total number of items in the list control (icon
 
 480     // or small icon view)
 
 481     int GetCountPerPage() const;
 
 483     // return the total area occupied by all the items (icon/small icon only)
 
 484     wxRect GetViewRect() const;
 
 486     // Gets the edit control for editing labels.
 
 487     wxTextCtrl* GetEditControl() const;
 
 489     // Gets information about the item
 
 490     %pythonAppend GetItem "if val is not None: val.thisown = 1";  // %newobject doesn't work with OOR typemap
 
 492         wxListItem* GetItem(long itemId, int col=0) {
 
 493             wxListItem* info = new wxListItem;
 
 494             info->m_itemId = itemId;
 
 496             info->m_mask = 0xFFFF;
 
 497             self->GetItem(*info);
 
 502     // Sets information about the item
 
 503     bool SetItem(wxListItem& info) ;
 
 505     // Sets a string field at a particular column
 
 506     %Rename(SetStringItem, long, SetItem(long index, int col, const wxString& label, int imageId = -1));
 
 508     // Gets the item state
 
 509     int  GetItemState(long item, long stateMask) const ;
 
 511     // Sets the item state
 
 512     bool SetItemState(long item, long state, long stateMask) ;
 
 514     // Sets the item image
 
 515     bool SetItemImage(long item, int image, int selImage=-1) ;
 
 516     bool SetItemColumnImage( long item, long column, int image );
 
 518     // Gets the item text
 
 519     wxString GetItemText(long item) const ;
 
 521     // Sets the item text
 
 522     void SetItemText(long item, const wxString& str) ;
 
 524     // Gets the item data
 
 525     long GetItemData(long item) const ;
 
 527     // Sets the item data
 
 528     bool SetItemData(long item, long data) ;
 
 531     //bool GetItemRect(long item, wxRect& rect, int code = wxLIST_RECT_BOUNDS) const ;
 
 532     //bool GetItemPosition(long item, wxPoint& pos) const ;
 
 534     // Gets the item position
 
 536         wxPoint GetItemPosition(long item) {
 
 538             self->GetItemPosition(item, pos);
 
 541         // Gets the item rectangle
 
 542         wxRect GetItemRect(long item, int code = wxLIST_RECT_BOUNDS) {
 
 544             self->GetItemRect(item, rect, code);
 
 550     // Sets the item position
 
 551     bool SetItemPosition(long item, const wxPoint& pos) ;
 
 553     // Gets the number of items in the list control
 
 554     int GetItemCount() const;
 
 556     // Gets the number of columns in the list control
 
 557     int GetColumnCount() const;
 
 559     // get the horizontal and vertical components of the item spacing
 
 560     wxSize GetItemSpacing() const;
 
 563     void SetItemSpacing( int spacing, bool isSmall = false );
 
 566     // Gets the number of selected items in the list control
 
 567     int GetSelectedItemCount() const;
 
 569     // Gets the text colour of the listview
 
 570     wxColour GetTextColour() const;
 
 572     // Sets the text colour of the listview
 
 573     void SetTextColour(const wxColour& col);
 
 575     // Gets the index of the topmost visible item when in
 
 576     // list or report view
 
 577     long GetTopItem() const ;
 
 579     // Add or remove a single window style
 
 580     void SetSingleStyle(long style, bool add = true) ;
 
 582     // Set the whole window style
 
 583     void SetWindowStyleFlag(long style) ;
 
 585     // Searches for an item, starting from 'item'.
 
 586     // item can be -1 to find the first item that matches the
 
 588     // Returns the item or -1 if unsuccessful.
 
 589     long GetNextItem(long item, int geometry = wxLIST_NEXT_ALL, int state = wxLIST_STATE_DONTCARE) const ;
 
 591     // Gets one of the three image lists
 
 592     wxImageList *GetImageList(int which) const ;
 
 594     // Sets the image list
 
 595     void SetImageList(wxImageList *imageList, int which);
 
 597     %disownarg( wxImageList *imageList );
 
 598     void AssignImageList(wxImageList *imageList, int which);
 
 599     %cleardisown( wxImageList *imageList );
 
 601     // are we in report mode?
 
 602     bool InReportView() const;
 
 604     // returns True if it is a virtual list control
 
 605     bool IsVirtual() const;
 
 607     // refresh items selectively (only useful for virtual list controls)
 
 608     void RefreshItem(long item);
 
 609     void RefreshItems(long itemFrom, long itemTo);
 
 611     // Arranges the items
 
 612     bool Arrange(int flag = wxLIST_ALIGN_DEFAULT);
 
 615     bool DeleteItem(long item);
 
 618     bool DeleteAllItems() ;
 
 621     bool DeleteColumn(int col);
 
 623     // Deletes all columns
 
 624     bool DeleteAllColumns();
 
 626     // Clears items, and columns if there are any.
 
 631     wxTextCtrl* EditLabel(long item /*, wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)*/);
 
 633     // End label editing, optionally cancelling the edit
 
 634     bool EndEditLabel(bool cancel);
 
 636     void EditLabel(long item);
 
 639     // Ensures this item is visible
 
 640     bool EnsureVisible(long item) ;
 
 642     // Find an item whose label matches this string, starting from the item after 'start'
 
 643     // or the beginning if 'start' is -1.
 
 644     long FindItem(long start, const wxString& str, bool partial = false);
 
 646     // Find an item whose data matches this data, starting from the item after 'start'
 
 647     // or the beginning if 'start' is -1.
 
 648     %Rename(FindItemData,  long, FindItem(long start, long data));
 
 650     // Find an item nearest this position in the specified direction, starting from
 
 651     // the item after 'start' or the beginning if 'start' is -1.
 
 652     %Rename(FindItemAtPos,  long, FindItem(long start, const wxPoint& pt, int direction));
 
 656         long, HitTest(const wxPoint& point, int& OUTPUT),
 
 657         "HitTest(Point point) -> (item, where)",
 
 658         "Determines which item (if any) is at the specified point, giving
 
 659 details in the second return value (see wx.LIST_HITTEST flags.)", "");
 
 661     // Inserts an item, returning the index of the new item if successful,
 
 663     long InsertItem(wxListItem& info);
 
 665     // Insert a string item
 
 666     %Rename(InsertStringItem,
 
 667             long, InsertItem(long index, const wxString& label, int imageIndex=-1));
 
 669     // Insert an image item
 
 670     %Rename(InsertImageItem,
 
 671             long, InsertItem(long index, int imageIndex));
 
 673     // Insert an image/string item
 
 674     %Rename(InsertImageStringItem,
 
 675             long, InsertItem(long index, const wxString& label, int imageIndex));
 
 677     // For list view mode (only), inserts a column.
 
 678     %Rename(InsertColumnItem,  long, InsertColumn(long col, wxListItem& info));
 
 679     %pythoncode { InsertColumnInfo = InsertColumnItem }
 
 681     long InsertColumn(long col,
 
 682                       const wxString& heading,
 
 683                       int format = wxLIST_FORMAT_LEFT,
 
 686     // set the number of items in a virtual list control
 
 687     void SetItemCount(long count);
 
 689     // Scrolls the list control. If in icon, small icon or report view mode,
 
 690     // x specifies the number of pixels to scroll. If in list view mode, x
 
 691     // specifies the number of columns to scroll.
 
 692     // If in icon, small icon or list view mode, y specifies the number of pixels
 
 693     // to scroll. If in report view mode, y specifies the number of lines to scroll.
 
 694     bool ScrollList(int dx, int dy);
 
 696     void SetItemTextColour( long item, const wxColour& col);
 
 697     wxColour GetItemTextColour( long item ) const;
 
 698     void SetItemBackgroundColour( long item, const wxColour &col);
 
 699     wxColour GetItemBackgroundColour( long item ) const;
 
 702     void SetItemFont( long item, const wxFont &f);
 
 703     wxFont GetItemFont( long item ) const;
 
 708     def Select(self, idx, on=1):
 
 709         '''[de]select an item'''
 
 710         if on: state = wx.LIST_STATE_SELECTED
 
 712         self.SetItemState(idx, state, wx.LIST_STATE_SELECTED)
 
 714     def Focus(self, idx):
 
 715         '''Focus and show the given item'''
 
 716         self.SetItemState(idx, wx.LIST_STATE_FOCUSED, wx.LIST_STATE_FOCUSED)
 
 717         self.EnsureVisible(idx)
 
 719     def GetFocusedItem(self):
 
 720         '''get the currently focused item or -1 if none'''
 
 721         return self.GetNextItem(-1, wx.LIST_NEXT_ALL, wx.LIST_STATE_FOCUSED)
 
 723     def GetFirstSelected(self, *args):
 
 724         '''return first selected item, or -1 when none'''
 
 725         return self.GetNextSelected(-1)
 
 727     def GetNextSelected(self, item):
 
 728         '''return subsequent selected items, or -1 when no more'''
 
 729         return self.GetNextItem(item, wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED)
 
 731     def IsSelected(self, idx):
 
 732         '''return True if the item is selected'''
 
 733         return (self.GetItemState(idx, wx.LIST_STATE_SELECTED) & wx.LIST_STATE_SELECTED) != 0
 
 735     def SetColumnImage(self, col, image):
 
 736         item = self.GetColumn(col)
 
 737         %# preserve all other attributes too
 
 738         item.SetMask( wx.LIST_MASK_STATE |
 
 744                       wx.LIST_MASK_FORMAT )
 
 746         self.SetColumn(col, item)
 
 748     def ClearColumnImage(self, col):
 
 749         self.SetColumnImage(col, -1)
 
 751     def Append(self, entry):
 
 752         '''Append an item to the list control.  The entry parameter should be a
 
 753            sequence with an item for each column'''
 
 759             pos = self.GetItemCount()
 
 760             self.InsertStringItem(pos, cvtfunc(entry[0]))
 
 761             for i in range(1, len(entry)):
 
 762                 self.SetStringItem(pos, i, cvtfunc(entry[i]))
 
 767     // bool SortItems(wxListCtrlCompare fn, long data);
 
 770         // func is a function which takes 2 long arguments: item1, item2.
 
 771         // item1 is the long data associated with a first item (NOT the index).
 
 772         // item2 is the long data associated with a second item (NOT the index).
 
 773         // The return value is a negative number if the first item should precede the second
 
 774         // item, a positive number of the second item should precede the first,
 
 775         // or zero if the two items are equivalent.
 
 776         bool SortItems(PyObject* func) {
 
 777             if (!PyCallable_Check(func))
 
 779             return self->SortItems((wxListCtrlCompare)wxPyListCtrl_SortItems, (long)func);
 
 785         wxWindow* GetMainWindow() {
 
 789             return (wxWindow*)self->m_mainWin;
 
 794     static wxVisualAttributes
 
 795     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
 
 800 //---------------------------------------------------------------------------
 
 804 MustHaveApp(wxListView);
 
 806 // wxListView: a class which provides a little better API for list control
 
 807 class wxListView : public wxPyListCtrl
 
 810     %pythonAppend wxListView         "self._setOORInfo(self)"
 
 811     %pythonAppend wxListView()       ""
 
 813     wxListView( wxWindow *parent,
 
 815                 const wxPoint& pos = wxDefaultPosition,
 
 816                 const wxSize& size = wxDefaultSize,
 
 817                 long style = wxLC_REPORT,
 
 818                 const wxValidator& validator = wxDefaultValidator,
 
 819                 const wxString& name = wxPyListCtrlNameStr);
 
 820     %RenameCtor(PreListView, wxListView());
 
 822     bool Create( wxWindow *parent,
 
 824                 const wxPoint& pos = wxDefaultPosition,
 
 825                 const wxSize& size = wxDefaultSize,
 
 826                 long style = wxLC_REPORT,
 
 827                 const wxValidator& validator = wxDefaultValidator,
 
 828                 const wxString& name = wxPyListCtrlNameStr);
 
 830     // [de]select an item
 
 831     void Select(long n, bool on = true);
 
 833     // focus and show the given item
 
 834     void Focus(long index);
 
 836     // get the currently focused item or -1 if none
 
 837     long GetFocusedItem() const;
 
 839     // get first and subsequent selected items, return -1 when no more
 
 840     long GetNextSelected(long item) const;
 
 841     long GetFirstSelected() const;
 
 843     // return True if the item is selected
 
 844     bool IsSelected(long index);
 
 846     void SetColumnImage(int col, int image);
 
 847     void ClearColumnImage(int col);
 
 852 //---------------------------------------------------------------------------
 
 855     // Map renamed classes back to their common name for OOR
 
 856     wxPyPtrTypeMap_Add("wxListCtrl", "wxPyListCtrl");
 
 859 //---------------------------------------------------------------------------