The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#############################################################################
## Name:        XS/FileCtrl.xsp
## Purpose:     XS+++ for Wx::FileCtrl
## Author:      Mattia Barbon
## Modified by:
## Created:     07/10/2007
## RCS-ID:      $Id: FileCtrl.xsp 2240 2007-10-07 19:18:51Z mbarbon $
## Copyright:   (c) 2007 Mattia Barbon
## Licence:     This program is free software; you can redistribute it and/or
##              modify it under the same terms as Perl itself
#############################################################################

%module{Wx};

#if WXPERL_W_VERSION_GE( 2, 9, 0 )

%typemap{wxFileCtrl*}{simple};
%typemap{wxFileCtrlEvent*}{simple};

#include <wx/filectrl.h>

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

    %name{newDefault} wxFileCtrl()
        %code{% RETVAL = new wxFileCtrl();
                wxPli_create_evthandler( aTHX_ RETVAL, CLASS );
                %};

    %name{newFull} wxFileCtrl( wxWindow *parent,
                               wxWindowID id = wxID_ANY,
                               const wxString& defaultDirectory = wxEmptyString,
                               const wxString& defaultFilename = wxEmptyString,
                               const wxString& wildCard = wxFileSelectorDefaultWildcardStr,
                               long style = wxFC_DEFAULT_STYLE,
                               const wxPoint& pos = wxDefaultPosition,
                               const wxSize& size = wxDefaultSize,
                               const wxString& name = wxFileCtrlNameStr )
        %code{% RETVAL = new wxFileCtrl( parent, id, defaultDirectory,
                                         defaultFilename, wildCard, style,
                                         pos, size, name );
                wxPli_create_evthandler( aTHX_ RETVAL, CLASS );
                %};

    bool Create( wxWindow *parent,
                 wxWindowID id = wxID_ANY,
                 const wxString& defaultDirectory = wxEmptyString,
                 const wxString& defaultFilename = wxEmptyString,
                 const wxString& wildCard = wxFileSelectorDefaultWildcardStr,
                 long style = wxFC_DEFAULT_STYLE,
                 const wxPoint& pos = wxDefaultPosition,
                 const wxSize& size = wxDefaultSize,
                 const wxString& name = wxFileCtrlNameStr );

    void SetWildcard( const wxString& wildCard );
    void SetFilterIndex( int filterindex );
    bool SetDirectory( const wxString& dir );

    bool SetFilename( const wxString& name );

    bool SetPath( const wxString& path );

    wxString GetFilename() const;
    wxString GetDirectory() const;
    wxString GetWildcard() const;
    wxString GetPath() const;

%{
void
wxFileCtrl::GetPaths()
  PPCODE:
    PUTBACK;
    wxArrayString ret;
    THIS->GetPaths( ret );
    wxPli_stringarray_push( aTHX_ ret );
    SPAGAIN;

void
wxFileCtrl::GetFilenames()
  PPCODE:
    PUTBACK;
    wxArrayString ret;
    THIS->GetFilenames( ret );
    wxPli_stringarray_push( aTHX_ ret );
    SPAGAIN;

%}
    int GetFilterIndex() const;

    bool HasMultipleFileSelection() const;
    void ShowHidden(bool show);
};

%name{Wx::FileCtrlEvent} class wxFileCtrlEvent
{
    void SetFiles( const wxArrayString &files );
    void SetDirectory( const wxString &directory );

%{
void
wxFileCtrlEvent::GetFiles()
  PPCODE:
    PUTBACK;
    wxPli_stringarray_push( aTHX_ THIS->GetFiles() );
    SPAGAIN;
%}

    wxString GetDirectory() const;
    wxString GetFile() const;
};

#endif