#############################################################################
## Name:        XS/FontEnumerator.xsp
## Purpose:     XS for Wx::FontEnumerator
## Author:      Mark Dootson
## Modified by:
## Created:     29/03/2013
## RCS-ID:      $Id: FontEnumerator.xs 2274 2007-11-10 22:37:30Z mbarbon $
## Copyright:   (c) 2002, 2006-2007, 2013 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};

#include <wx/fontenum.h>

%typemap{wxFontEncoding}{simple};

%loadplugin{build::Wx::XSP::Virtual};

%name{Wx::FontEnumerator} class wxFontEnumerator

{
    %NoVirtualBase;
    %VirtualNonObject;

%{
static void
wxFontEnumerator::CLONE()
  CODE:
    wxPli_thread_sv_clone( aTHX_ CLASS, (wxPliCloneSV)wxPli_detach_object );
%}

public:
    wxFontEnumerator();
    
    virtual ~wxFontEnumerator()
    %code%{  wxPli_thread_sv_unregister( aTHX_ wxPli_get_class( aTHX_ ST(0) ), THIS, ST(0) );
             delete THIS;
           %};

    bool EnumerateFacenames(
                    wxFontEncoding encoding = wxFONTENCODING_SYSTEM,
                    bool fixedWidthOnly = false
                 );
    
    bool EnumerateEncodings(const wxString& facename = wxEmptyString);

    virtual bool OnFacename(const wxString& facename) %Virtual;

    virtual bool OnFontEncoding(const wxString& facename,
                                const wxString& encoding) %Virtual; 

    static bool IsValidFacename(const wxString &str);

};

%{

MODULE=Wx PACKAGE=Wx::FontEnumerator

## Support call to Wx::FontEnumerator->new as the
## wxPlFontEnumerator class contains no pure virtual
## methods and existing code will expect this to work.

wxPlFontEnumerator*
new( CLASS )
    PlClassName CLASS
  CODE:
    RETVAL = new wxPlFontEnumerator( CLASS );
  OUTPUT: RETVAL

## // Static calls to GetEncodings - support previous
## // implementation as method calls so existing code does not break.
## // Put correct static functions first - they will not match 
## // method calls which appear to have wxFontEnumerator as first param

void
GetEncodings( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP_COUNT_ALLOWMORE_FUNCTION( wxPliOvl_s, Wx::FontEnumerator::GetEncodingsStatic, 0 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_s, GetEncodingsMethod, 0 )
    END_OVERLOAD( Wx::FontEnumerator::GetEncodings )

void
wxFontEnumerator::GetEncodingsMethod( facename = wxEmptyString )
    wxString facename
  PREINIT:
    wxArrayString enc;
  PPCODE:
    enc = THIS->GetEncodings( facename );
    PUTBACK;
    wxPli_stringarray_push( aTHX_ enc );
    SPAGAIN;

void
GetEncodingsStatic( facename = wxEmptyString )
    wxString facename 
  PREINIT:
    wxArrayString enc;
  PPCODE:
    enc = wxFontEnumerator::GetEncodings( facename );
    PUTBACK;
    wxPli_stringarray_push( aTHX_ enc );
    SPAGAIN;

## // Static calls to GetFacenames - support previous
## // implementation as method calls so existing code does not break.
## // Put correct static functions first - they will not match 
## // method calls which appear to have wxFontEnumerator as first param

void
GetFacenames( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP_COUNT_ALLOWMORE_FUNCTION( wxPliOvl_n_b, Wx::FontEnumerator::GetFacenamesStatic, 0 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_n_b, GetFacenamesMethod, 0 )
    END_OVERLOAD( Wx::FontEnumerator::GetFaceNames )

void
wxFontEnumerator::GetFacenamesMethod( encoding = wxFONTENCODING_SYSTEM, fixedWidthOnly = 0 )
    wxFontEncoding encoding
    bool fixedWidthOnly 
  PREINIT:
    wxArrayString fnames;
  PPCODE:
    fnames = THIS->GetFacenames( encoding, fixedWidthOnly );
    PUTBACK;
    wxPli_stringarray_push( aTHX_ fnames );
    SPAGAIN;

void
GetFacenamesStatic( encoding = wxFONTENCODING_SYSTEM, fixedWidthOnly = 0  )
    wxFontEncoding encoding
    bool fixedWidthOnly 
  PREINIT:
    wxArrayString fnames;
  PPCODE:
    fnames = wxFontEnumerator::GetFacenames( encoding, fixedWidthOnly );
    PUTBACK;
    wxPli_stringarray_push( aTHX_ fnames );
    SPAGAIN;

%}
