%module{Wx}; /////////////////////////////////////////////////////////////////////////////// // Name: interface/wx/treelist.h // Purpose: wxTreeListCtrl class documentation // Author: Vadim Zeitlin // Created: 2011-08-17 // SVN-ID: $Id$ // Copyright: (c) 2011 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #if WXPERL_W_VERSION_GE( 2, 9, 3 ) #include %typemap{wxTreeListItem}{reference}; %typemap{wxTreeListCtrl*}{simple}; %typemap{wxCheckBoxState}{simple}; %typemap{wxAlignment}{simple}; %typemap{wxClientData*}{parsed}{%wxPliUserDataCD*%}; %loadplugin{build::Wx::XSP::Overload}; %loadplugin{build::Wx::XSP::Virtual}; %loadplugin{build::Wx::XSP::Enum}; %loadplugin{build::Wx::XSP::Event}; %VirtualTypeMap{ %Name{%wxTreeListCtrl*%}; %ConvertReturn{%(wxTreeListCtrl*)wxPli_sv_2_object( aTHX_ ret, "Wx::TreeListCtrl" )%}; %TypeChar{%O%}; %Arguments{%%s%}; }; %VirtualTypeMap{ %Name{%wxTreeListItem%}; %ConvertReturn{%*(wxTreeListItem*)wxPli_sv_2_object( aTHX_ ret, "Wx::TreeListItem" )%}; %TypeChar{%o%}; %Arguments{%&%s, "Wx::TreeListItem"%}; }; %name{Wx::TreeListItem} class wxTreeListItem { public: %{ static void wxTreeListItem::CLONE() CODE: wxPli_thread_sv_clone( aTHX_ CLASS, (wxPliCloneSV)wxPli_detach_object ); %} /* wxTreeListItem(); no constructor = no objects are deleteable */ ~wxTreeListItem() %code%{ wxPli_thread_sv_unregister( aTHX_ "Wx::TreeListItem", THIS, ST(0) ); %}; bool IsOk() const; }; %name{Wx::TreeListItemComparator} class wxTreeListItemComparator { public: wxTreeListItemComparator(); virtual int Compare(wxTreeListCtrl* treelist, unsigned column, wxTreeListItem first, wxTreeListItem second) = 0 %Virtual{pure}; }; enum { wxTL_SINGLE = 0x0000, // This is the default anyhow. wxTL_MULTIPLE = 0x0001, // Allow multiple selection. wxTL_CHECKBOX = 0x0002, // Show checkboxes in the first column. wxTL_3STATE = 0x0004, // Allow 3rd state in checkboxes. wxTL_USER_3STATE = 0x0008, // Allow user to set 3rd state. wxTL_STYLE_MASK = 0x000F, wxTL_DEFAULT_STYLE = wxTL_SINGLE }; %Event{%EVT_TREELIST_SELECTION_CHANGED(id, func)%} {wxEVT_COMMAND_TREELIST_SELECTION_CHANGED}; %Event{%EVT_TREELIST_ITEM_EXPANDING(id, func)%} {wxEVT_COMMAND_TREELIST_ITEM_EXPANDING}; %Event{%EVT_TREELIST_ITEM_EXPANDED(id, func)%} {wxEVT_COMMAND_TREELIST_ITEM_EXPANDED}; %Event{%EVT_TREELIST_ITEM_CHECKED(id, func)%} {wxEVT_COMMAND_TREELIST_ITEM_CHECKED}; %Event{%EVT_TREELIST_ITEM_ACTIVATED(id, func)%} {wxEVT_COMMAND_TREELIST_ITEM_ACTIVATED}; %Event{%EVT_TREELIST_ITEM_CONTEXT_MENU(id, func)%} {wxEVT_COMMAND_TREELIST_ITEM_CONTEXT_MENU}; %Event{%EVT_TREELIST_COLUMN_SORTED(id, func)%} {wxEVT_COMMAND_TREELIST_COLUMN_SORTED}; %name{Wx::TreeListCtrl} class wxTreeListCtrl : public %name{Wx::Window} wxWindow { public: %name{newDefault} wxTreeListCtrl() %Overload %postcall{% wxPli_create_evthandler( aTHX_ RETVAL, CLASS ); %}; %name{newFull} wxTreeListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTL_DEFAULT_STYLE, const wxString& name = wxTreeListCtrlNameStr) %Overload %postcall{% wxPli_create_evthandler( aTHX_ RETVAL, CLASS ); %}; bool Create(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTL_DEFAULT_STYLE, const wxString& name = wxTreeListCtrlNameStr); %{ void wxTreeListCtrl::AssignImageList( imagelist ) wxImageList* imagelist CODE: wxPli_object_set_deleteable( aTHX_ ST(1), false ); THIS->AssignImageList( imagelist ); wxImageList* wxTreeListCtrl::GetImageList() OUTPUT: RETVAL CLEANUP: wxPli_object_set_deleteable( aTHX_ ST(0), false ); %} void SetImageList(wxImageList* imageList); int AppendColumn(const wxString& title, int width = wxCOL_WIDTH_AUTOSIZE, wxAlignment align = wxALIGN_LEFT, int flags = wxCOL_RESIZABLE); unsigned GetColumnCount() const; bool DeleteColumn(unsigned col); void ClearColumns(); void SetColumnWidth(unsigned col, int width); int GetColumnWidth(unsigned col) const; int WidthFor(const wxString& text) const; wxTreeListItem AppendItem(wxTreeListItem parent, const wxString& text, int imageClosed = -1, int imageOpened = -1, wxPliUserDataCD *data = NULL); wxTreeListItem InsertItem(wxTreeListItem parent, wxTreeListItem previous, const wxString& text, int imageClosed = -1, int imageOpened = -1, wxPliUserDataCD *data = NULL); wxTreeListItem PrependItem(wxTreeListItem parent, const wxString& text, int imageClosed = -1, int imageOpened = -1, wxPliUserDataCD *data = NULL); void DeleteItem(wxTreeListItem item); void DeleteAllItems(); wxTreeListItem GetRootItem() const; wxTreeListItem GetItemParent(wxTreeListItem item) const; wxTreeListItem GetFirstChild(wxTreeListItem item) const; wxTreeListItem GetNextSibling(wxTreeListItem item) const; wxTreeListItem GetFirstItem() const; wxTreeListItem GetNextItem(wxTreeListItem item) const; const wxString& GetItemText(wxTreeListItem item, unsigned col = 0) const; void SetItemText(wxTreeListItem item, unsigned col, const wxString& text); void SetItemText(wxTreeListItem item, const wxString& text); void SetItemImage(wxTreeListItem item, int closed, int opened = -1); wxPliUserDataCD *GetItemData( wxTreeListItem item ) const %code{% RETVAL = (wxPliUserDataCD*) THIS->GetItemData( *item ); %}; void SetItemData(wxTreeListItem item, wxPliUserDataCD *data); void Expand(wxTreeListItem item); void Collapse(wxTreeListItem item); bool IsExpanded(wxTreeListItem item) const; wxTreeListItem GetSelection() const; %{ void wxTreeListCtrl::GetSelections() PREINIT: wxTreeListItems selections; PPCODE: size_t num = THIS->GetSelections( selections ); EXTEND( SP, (IV)num ); for( size_t i = 0; i < num; ++i ) { PUSHs( wxPli_non_object_2_sv( aTHX_ sv_newmortal(), new wxTreeListItem( selections[i] ), "Wx::TreeListItem" ) ); } %} void Select(wxTreeListItem item); void Unselect(wxTreeListItem item); bool IsSelected(wxTreeListItem item) const; void SelectAll(); void UnselectAll(); void CheckItem(wxTreeListItem item, wxCheckBoxState state = wxCHK_CHECKED); void CheckItemRecursively(wxTreeListItem item, wxCheckBoxState state = wxCHK_CHECKED); void UncheckItem(wxTreeListItem item); void UpdateItemParentStateRecursively(wxTreeListItem item); wxCheckBoxState GetCheckedState(wxTreeListItem item) const; bool AreAllChildrenInState(wxTreeListItem item, wxCheckBoxState state) const; void SetSortColumn(unsigned col, bool ascendingOrder = true); %{ void wxTreeListCtrl::GetSortColumn() PREINIT: unsigned col; bool ascendingOrder; bool issorted; PPCODE: issorted = THIS->GetSortColumn( &col, &ascendingOrder ); EXTEND( SP, 2 ); if( issorted ) { PUSHs( sv_2mortal( newSVuv( col ) ) ); PUSHs( sv_2mortal( newSViv( ascendingOrder ) ) ); } else { PUSHs( sv_newmortal() ); PUSHs( sv_newmortal() ); } %} void SetItemComparator(wxTreeListItemComparator* comparator); wxWindow* GetView() const; }; %name{Wx::TreeListEvent} class wxTreeListEvent : public %name{Wx::NotifyEvent} wxNotifyEvent { public: wxTreeListItem GetItem() const; wxCheckBoxState GetOldCheckedState() const; unsigned GetColumn() const; }; #endif