The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#############################################################################
## Name:        ext/dataview/XS/DataViewCtrl.xsp
## Purpose:     XS++ for Wx::DataViewCtrl
## Author:      Mattia Barbon
## Modified by:
## Created:     05/11/2007
## RCS-ID:      $Id: DataViewCtrl.xsp 2973 2010-08-28 14:23:16Z mbarbon $
## Copyright:   (c) 2007-2008, 2010 Mattia Barbon
## Licence:     This program is free software; you can redistribute it and/or
##              modify it under the same terms as Perl itself
#############################################################################

#if wxUSE_DATAVIEWCTRL

#include <wx/dataview.h>
#include "xspp/dataview.h"

%typemap{wxRect&}{reference};

%module{Wx};
%file{xspp/dataview.h};
%{

double dataview_constant( const char* name, int arg )
{
    // !package: Wx
    // !parser: sub { $_[0] =~ m<^\s*r\w*\(\s*(\w+)\s*\);\s*(?://(.*))?$> }
    // !tag: dataview
#define r( n ) \
    if( strEQ( name, #n ) ) \
        return n;

    WX_PL_CONSTANT_INIT();

    switch( fl )
    {
    case 'D':
        r( wxDV_SINGLE );
        r( wxDV_MULTIPLE );
        r( wxDV_NO_HEADER );
        r( wxDV_HORIZ_RULES );
        r( wxDV_VERT_RULES );
        r( wxDV_ROW_LINES );

        r( wxDVR_DEFAULT_ALIGNMENT );

        r( wxDATAVIEW_CELL_INERT );
        r( wxDATAVIEW_CELL_ACTIVATABLE );
        r( wxDATAVIEW_CELL_EDITABLE );

        r( wxDATAVIEW_CELL_SELECTED );
        r( wxDATAVIEW_CELL_PRELIT );
        r( wxDATAVIEW_CELL_INSENSITIVE );
        r( wxDATAVIEW_CELL_FOCUSED );

        r( wxDATAVIEW_COL_RESIZABLE );
        r( wxDATAVIEW_COL_SORTABLE );
        r( wxDATAVIEW_COL_REORDERABLE );
        r( wxDATAVIEW_COL_HIDDEN );
        break;
    }
#undef r

    WX_PL_CONSTANT_CLEANUP();
}

wxPlConstants dataview_module( &dataview_constant );

%}
%file{-};

%name{Wx::DataViewCtrl} class wxDataViewCtrl
{
%{
void
new( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_VOIDM_REDISP( newDefault )
        MATCH_ANY_REDISP( newFull )
    END_OVERLOAD( "Wx::DataViewCtrl::new" )
%}

    %name{newDefault} wxDataViewCtrl()
        %code{% RETVAL = new wxDataViewCtrl();
                wxPli_create_evthandler( aTHX_ RETVAL, CLASS );
             %};
    %name{newFull} wxDataViewCtrl( wxWindow* parent,
                                   wxWindowID id = wxID_ANY,
                                   const wxPoint& pos = wxDefaultPosition,
                                   const wxSize& size = wxDefaultSize,
                                   long style = 0,
                                   const wxValidator& validator = wxDefaultValidatorPtr )
        %code{% RETVAL = new wxDataViewCtrl( parent, id, pos, size,
                                             style, *validator );
                wxPli_create_evthandler( aTHX_ RETVAL, CLASS );
             %};

    bool Create( wxWindow* parent, wxWindowID id = wxID_ANY,
                 const wxPoint& pos = wxDefaultPosition,
                 const wxSize& size = wxDefaultSize,
                 long style = 0,
                 const wxValidator& validator = wxDefaultValidatorPtr );

    bool AssociateModel( wxDataViewModel* model );
    wxDataViewModel* GetModel()
        %code{% RETVAL = THIS->GetModel();
                if( RETVAL )
                    RETVAL->IncRef();
                %};

    bool PrependColumn( wxDataViewColumnDisown* col );
    bool AppendColumn( wxDataViewColumnDisown* col );

    ## Bitmap
%{
void
AppendBitmapColumn( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_wbmp_n_n_n, AppendBitmapColumnBitmap, 2 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_s_n_n_n, AppendBitmapColumnLabel, 2 )
    END_OVERLOAD( "Wx::DataViewCtrl::AppendBitmapColumn" )
%}

    %name{AppendBitmapColumnLabel}
    wxDataViewColumnDisown* AppendBitmapColumn( const wxString& label,
                                                unsigned int model_column,
                                                wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                                int width = -1 );
    %name{AppendBitmapColumnBitmap}
    wxDataViewColumnDisown* AppendBitmapColumn( const wxBitmap& label,
                                                unsigned int model_column,
                                                wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                                int width = -1 );
    ## Date
%{
void
AppendDateColumn( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_wbmp_n_n_n, AppendDateColumnBitmap, 2 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_s_n_n_n, AppendDateColumnLabel, 2 )
    END_OVERLOAD( "Wx::DataViewCtrl::AppendDateColumn" )
%}

    %name{AppendDateColumnLabel}
    wxDataViewColumnDisown* AppendDateColumn( const wxString& label,
                                              unsigned int model_column,
                                              wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                              int width = -1 );
    %name{AppendDateColumnBitmap}
    wxDataViewColumnDisown* AppendDateColumn( const wxBitmap& label,
                                              unsigned int model_column,
                                              wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                              int width = -1 );

    ## Progress
%{
void
AppendProgressColumn( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_wbmp_n_n_n, AppendProgressColumnBitmap, 2 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_s_n_n_n, AppendProgressColumnLabel, 2 )
    END_OVERLOAD( "Wx::DataViewCtrl::AppendProgressColumn" )
%}

    %name{AppendProgressColumnLabel}
    wxDataViewColumnDisown* AppendProgressColumn( const wxString& label,
                                                  unsigned int model_column,
                                                  wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                                  int width = 80 );
    %name{AppendProgressColumnBitmap}
    wxDataViewColumnDisown* AppendProgressColumn( const wxBitmap& label,
                                                  unsigned int model_column,
                                                  wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                                  int width = 80 );

    ## IconText
%{
void
AppendIconTextColumn( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_wbmp_n_n_n, AppendIconTextColumnBitmap, 2 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_s_n_n_n, AppendIconTextColumnLabel, 2 )
    END_OVERLOAD( "Wx::DataViewCtrl::AppendIconTextColumn" )
%}

    %name{AppendIconTextColumnLabel}
    wxDataViewColumnDisown* AppendIconTextColumn( const wxString& label,
                                                  unsigned int model_column,
                                                  wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                                  int width = -1 );
    %name{AppendIconTextColumnBitmap}
    wxDataViewColumnDisown* AppendIconTextColumn( const wxBitmap& label,
                                                  unsigned int model_column,
                                                  wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                                  int width = -1 );

    ## Text
%{
void
AppendTextColumn( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_wbmp_n_n_n, AppendTextColumnBitmap, 2 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_s_n_n_n, AppendTextColumnLabel, 2 )
    END_OVERLOAD( "Wx::DataViewCtrl::AppendTextColumn" )
%}

    %name{AppendTextColumnLabel}
    wxDataViewColumnDisown* AppendTextColumn( const wxString& label,
                                              unsigned int model_column,
                                              wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                              int width = -1 );
    %name{AppendTextColumnBitmap}
    wxDataViewColumnDisown* AppendTextColumn( const wxBitmap& label,
                                              unsigned int model_column,
                                              wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                              int width = -1 );

    ## Toggle
%{
void
AppendToggleColumn( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_wbmp_n_n_n, AppendToggleColumnBitmap, 2 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_s_n_n_n, AppendToggleColumnLabel, 2 )
    END_OVERLOAD( "Wx::DataViewCtrl::AppendToggleColumn" )
%}

    %name{AppendToggleColumnLabel}
    wxDataViewColumnDisown* AppendToggleColumn( const wxString& label,
                                                unsigned int model_column,
                                                wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                                int width = 30 );
    %name{AppendToggleColumnBitmap}
    wxDataViewColumnDisown* AppendToggleColumn( const wxBitmap& label,
                                                unsigned int model_column,
                                                wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                                int width = 30 );

    unsigned int GetColumnCount() const;
    wxDataViewColumnDisown* GetColumn( unsigned int pos ) const;
    int GetColumnPosition( const wxDataViewColumn* column ) const;
    bool DeleteColumn( wxDataViewColumn* column );
    bool ClearColumns();
    void SetExpanderColumn( wxDataViewColumn* col );
    wxDataViewColumnDisown* GetExpanderColumn() const;
##    wxDataViewColumnDisown* GetSortingColumn() const;

    void SetIndent( int indent );
    int GetIndent() const;

    wxDataViewItem& GetSelection() const;
    void Select( const wxDataViewItem& item );
    void Unselect( const wxDataViewItem& item );
    bool IsSelected( const wxDataViewItem& item ) const;

    void SelectAll();
    void UnselectAll();

    void Expand( const wxDataViewItem& item );
    void Collapse( const wxDataViewItem& item );
    void EnsureVisible( const wxDataViewItem& item,
                        const wxDataViewColumn* column = NULL );
    wxRect& GetItemRect( const wxDataViewItem& item,
                         const wxDataViewColumn* column = NULL ) const;
};

#endif