The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#############################################################################
## Name:        ext/richtext/XS/RichTextCtrl.xsp
## Purpose:     XS++ for Wx::RichTextCtrl
## Author:      Mattia Barbon
## Modified by:
## Created:     05/11/2006
## RCS-ID:      $Id: RichTextCtrl.xsp 3325 2012-08-16 03:41:14Z mdootson $
## Copyright:   (c) 2006-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
#############################################################################

#undef _
#define _(x) wxGetTranslation(wxT(x))

#include <wx/event.h>
#include <wx/button.h>
#include <wx/checkbox.h>
#include <wx/richtext/richtextctrl.h>
#include <wx/richtext/richtextstyles.h>
#include <wx/richtext/richtextformatdlg.h>
#include <wx/richtext/richtextstyledlg.h>
#include <wx/richtext/richtextprint.h>
#include "xspp/richtextctrl.h"

%module{Wx};

## DECLARE_OVERLOAD( wrtr, Wx::RichTextRange )
## DECLARE_OVERLOAD( wrta, Wx::RichTextAttr )
## DECLARE_OVERLOAD( wtae, Wx::TextAttrEx )
## DECLARE_OVERLOAD( wtat, Wx::TextAttr )

%file{xspp/richtextctrl.h};
%{

#define wxTEXT_ATTR_DEFAULT_NUMBERED_BULLET wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD

#define wxRICHTEXT_STYLE_ALL wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL
#define wxRICHTEXT_STYLE_CHARACTER wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER
#define wxRICHTEXT_STYLE_LIST wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST
#define wxRICHTEXT_STYLE_PARAGRAPH wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH

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

    WX_PL_CONSTANT_INIT();

    switch( fl )
    {
    case 'R':
        r( wxRE_READONLY );
        r( wxRE_MULTILINE );
#if WXPERL_W_VERSION_GE( 2, 7, 1 )
        r( wxRICHTEXT_SETSTYLE_NONE );
        r( wxRICHTEXT_SETSTYLE_WITH_UNDO );
        r( wxRICHTEXT_SETSTYLE_OPTIMIZE );
        r( wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY );
        r( wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY );
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
        r( wxRICHTEXT_SETSTYLE_RENUMBER );
        r( wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL );
#endif
#if WXPERL_W_VERSION_GE( 2, 8, 7 )
        r( wxRICHTEXT_SETSTYLE_REMOVE );
#endif
        r( wxRICHTEXT_INSERT_NONE );
        r( wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE );
#endif
#if WXPERL_W_VERSION_GE( 2, 8, 0 )
        r( wxRICHTEXT_SETSTYLE_RESET );
#endif
        r( wxRICHTEXT_FIXED_WIDTH );
        r( wxRICHTEXT_FIXED_HEIGHT );
        r( wxRICHTEXT_VARIABLE_WIDTH );
        r( wxRICHTEXT_VARIABLE_HEIGHT );
        r( wxRICHTEXT_LAYOUT_SPECIFIED_RECT );
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
        r( wxRICHTEXT_DRAW_IGNORE_CACHE );
#endif
        r( wxRICHTEXT_HITTEST_NONE );
        r( wxRICHTEXT_HITTEST_BEFORE );
        r( wxRICHTEXT_HITTEST_AFTER );
        r( wxRICHTEXT_HITTEST_ON );
#if WXPERL_W_VERSION_GE( 2, 8, 7 )
        r( wxRICHTEXT_HITTEST_OUTSIDE );
#endif
        r( wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET );
        r( wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY );
        r( wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES );
        r( wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 );
#if WXPERL_W_VERSION_GE( 2, 8, 0 )
        r( wxRICHTEXT_HANDLER_NO_HEADER_FOOTER );
#endif
#if WXPERL_W_VERSION_GE( 2, 8, 8 )
        r( wxRICHTEXT_HANDLER_CONVERT_FACENAMES );
#endif

        r( wxRICHTEXT_FORMATTED );
        r( wxRICHTEXT_UNFORMATTED );
        r( wxRICHTEXT_TYPE_ANY );
        r( wxRICHTEXT_TYPE_TEXT );
        r( wxRICHTEXT_TYPE_XML );
        r( wxRICHTEXT_TYPE_HTML );
        r( wxRICHTEXT_TYPE_RTF );
        r( wxRICHTEXT_TYPE_PDF );
        r( wxRICHTEXT_FORMAT_STYLE_EDITOR );
        r( wxRICHTEXT_FORMAT_FONT );
        r( wxRICHTEXT_FORMAT_TABS );
        r( wxRICHTEXT_FORMAT_BULLETS );
        r( wxRICHTEXT_FORMAT_INDENTS_SPACING );
        r( wxRICHTEXT_FORMAT_CHARACTER );
        r( wxRICHTEXT_FORMAT_HELP_BUTTON );
        r( wxRICHTEXT_FORMAT_LIST_STYLE );
        r( wxRICHTEXT_FORMAT_PARAGRAPH );
        r( wxRICHTEXT_FORMAT_STYLE );

        r( wxRICHTEXT_ORGANISER_DELETE_STYLES );
        r( wxRICHTEXT_ORGANISER_CREATE_STYLES );
        r( wxRICHTEXT_ORGANISER_APPLY_STYLES );
        r( wxRICHTEXT_ORGANISER_EDIT_STYLES );
        r( wxRICHTEXT_ORGANISER_RENAME_STYLES );
        r( wxRICHTEXT_ORGANISER_OK_CANCEL );
        r( wxRICHTEXT_ORGANISER_RENUMBER );
        r( wxRICHTEXT_ORGANISER_SHOW_CHARACTER );
        r( wxRICHTEXT_ORGANISER_SHOW_PARAGRAPH );
        r( wxRICHTEXT_ORGANISER_SHOW_LIST );
        r( wxRICHTEXT_ORGANISER_SHOW_ALL );
        r( wxRICHTEXT_ORGANISER_ORGANISE );
        r( wxRICHTEXT_ORGANISER_BROWSE );
        r( wxRICHTEXT_ORGANISER_BROWSE_NUMBERING );

        r( wxRICHTEXT_PAGE_ALL );
        r( wxRICHTEXT_PAGE_CENTRE );
        r( wxRICHTEXT_PAGE_EVEN );
        r( wxRICHTEXT_PAGE_LEFT );
        r( wxRICHTEXT_PAGE_ODD );
        r( wxRICHTEXT_PAGE_RIGHT );

        r( wxRICHTEXT_STYLE_ALL );
        r( wxRICHTEXT_STYLE_CHARACTER );
        r( wxRICHTEXT_STYLE_LIST );
        r( wxRICHTEXT_STYLE_PARAGRAPH );
        break;
    case 'T':
        r( wxTEXT_ATTR_PARA_SPACING_AFTER );
        r( wxTEXT_ATTR_PARA_SPACING_BEFORE );
        r( wxTEXT_ATTR_LINE_SPACING );
        r( wxTEXT_ATTR_CHARACTER_STYLE_NAME );
        r( wxTEXT_ATTR_PARAGRAPH_STYLE_NAME );
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
        r( wxTEXT_ATTR_LIST_STYLE_NAME );
#endif
        r( wxTEXT_ATTR_BULLET_STYLE );
        r( wxTEXT_ATTR_BULLET_NUMBER );
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
        r( wxTEXT_ATTR_BULLET_TEXT );
        r( wxTEXT_ATTR_BULLET_NAME );
        r( wxTEXT_ATTR_URL );
        r( wxTEXT_ATTR_PAGE_BREAK );
#endif
        r( wxTEXT_ATTR_BULLET_STYLE_NONE );
        r( wxTEXT_ATTR_BULLET_STYLE_ARABIC );
        r( wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER );
        r( wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER );
        r( wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER );
        r( wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER );
        r( wxTEXT_ATTR_BULLET_STYLE_SYMBOL );
        r( wxTEXT_ATTR_BULLET_STYLE_BITMAP );
        r( wxTEXT_ATTR_BULLET_STYLE_PARENTHESES );
        r( wxTEXT_ATTR_BULLET_STYLE_PERIOD );
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
        r( wxTEXT_ATTR_BULLET_STYLE_STANDARD );
        r( wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS );
        r( wxTEXT_ATTR_BULLET_STYLE_OUTLINE );
        r( wxTEXT_ATTR_BULLET_STYLE_ALIGN_LEFT );
        r( wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT );
        r( wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE );
#endif
        r( wxTEXT_ATTR_LINE_SPACING_NORMAL );
        r( wxTEXT_ATTR_LINE_SPACING_HALF );
        r( wxTEXT_ATTR_LINE_SPACING_TWICE );
        r( wxTEXT_ATTR_CHARACTER );
        r( wxTEXT_ATTR_PARAGRAPH );
        r( wxTEXT_ATTR_ALL );

#if WXPERL_W_VERSION_GE( 2, 8, 0 )
        r( wxTEXT_ATTR_EFFECT_NONE );
        r( wxTEXT_ATTR_EFFECT_CAPITALS );
        r( wxTEXT_ATTR_EFFECT_SMALL_CAPITALS );
        r( wxTEXT_ATTR_EFFECT_STRIKETHROUGH );
        r( wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH );
        r( wxTEXT_ATTR_EFFECT_SHADOW );
        r( wxTEXT_ATTR_EFFECT_EMBOSS );
        r( wxTEXT_ATTR_EFFECT_OUTLINE );
        r( wxTEXT_ATTR_EFFECT_ENGRAVE );
        r( wxTEXT_ATTR_EFFECT_SUPERSCRIPT );
        r( wxTEXT_ATTR_EFFECT_SUBSCRIPT );
#endif

#if WXPERL_W_VERSION_GE( 2, 8, 0 )
        r( wxTEXT_ATTR_EFFECTS );
#endif
#if WXPERL_W_VERSION_GE( 2, 9, 0 )
        r( wxTEXT_ATTR_FONT_ENCODING );
#endif
#if WXPERL_W_VERSION_GE( 2, 8, 8 )
        r( wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE );
#endif
#if WXPERL_W_VERSION_GE( 2, 8, 0 )
        r( wxTEXT_ATTR_OUTLINE_LEVEL );
#endif
        break;
    }
#undef r

    WX_PL_CONSTANT_CLEANUP();
}

wxPlConstants richtextctrl_module( &richtextctrl_constant );

%}
%file{-};

%name{Wx::RichTextEvent} class wxRichTextEvent
{
#if WXPERL_W_VERSION_LE( 2, 7, 2 )
    int GetIndex() const;
    void SetIndex( int n );
#endif
    int GetFlags() const;
    void SetFlags( int flags );
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
    wxRichTextStyleSheetDisown* GetOldStyleSheet() const;
    void SetOldStyleSheet( wxRichTextStyleSheetDisown* sheet );
    wxRichTextStyleSheetDisown* GetNewStyleSheet() const;
    void SetNewStyleSheet( wxRichTextStyleSheetDisown* sheet );
#endif
};

%name{Wx::RichTextCtrl} class wxRichTextCtrl
{
    %name{newDefault} wxRichTextCtrl()
        %code{% RETVAL = new wxRichTextCtrl();
                wxPli_create_evthandler( aTHX_ RETVAL, CLASS );
             %};
    %name{newFull} wxRichTextCtrl( wxWindow* parent,
                                   wxWindowID id = wxID_ANY,
                                   const wxString& string = wxEmptyString,
                                   const wxPoint& pos = wxDefaultPosition,
                                   const wxSize& size = wxDefaultSize,
                                   long style = wxRE_MULTILINE )
        %code{% RETVAL = new wxRichTextCtrl( parent, id, string,
                                             pos, size, style );
                wxPli_create_evthandler( aTHX_ RETVAL, CLASS );
             %};

    bool Create( wxWindow* parent, wxWindowID id = wxID_ANY,
                 const wxString& string = wxEmptyString,
                 const wxPoint& pos = wxDefaultPosition,
                 const wxSize& size = wxDefaultSize,
                 long style = wxRE_MULTILINE );

    wxString GetFilename() const;
    void SetFilename( const wxString& filename );
    void SetDelayedLayoutThreshold( long threshold );
    long GetDelayedLayoutThreshold() const;

    %name{SetStyleFromTo} bool SetStyle( long start, long end,
                                         const wxTextAttr& style );
    %name{SetStyleExFromTo} bool SetStyle( long start, long end,
                                           const wxTextAttrEx& style );
    %name{SetStyleRange} bool SetStyle( const wxRichTextRange& range,
                                        const wxRichTextAttr& style );

#if WXPERL_W_VERSION_GE( 2, 7, 1 )
#if WXPERL_W_VERSION_LT( 2, 9, 0 )
    %name{SetStyleExExFromTo} bool SetStyleEx
        ( long start, long end, const wxTextAttrEx& style,
          int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO );
#endif
    %name{SetStyleExRange} bool SetStyleEx
        ( const wxRichTextRange& range, const wxTextAttrEx& style,
          int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO );
    %name{SetStyleExExRange} bool SetStyleEx
        ( const wxRichTextRange& range, const wxRichTextAttr& style,
          int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO );
#endif

    const wxTextAttrEx& GetBasicStyle() const;
    const wxTextAttrEx& GetDefaultStyleEx() const;

    bool Newline();
    
#if WXPERL_W_VERSION_GE( 2, 8, 0 )
    bool LineBreak();
#endif

    bool BeginStyle( const wxTextAttrEx& style );
    bool EndStyle();
    bool EndAllStyles();
    bool BeginBold();
    bool EndBold();
    bool BeginItalic();
    bool EndItalic();
    bool BeginUnderline();
    bool EndUnderline();
    bool BeginFontSize( int pointSize );
    bool EndFontSize();
    bool BeginFont( const wxFont& font );
    bool EndFont();
    bool BeginTextColour( const wxColour& colour );
    bool EndTextColour();
    bool BeginAlignment( wxTextAttrAlignment alignment );
    bool EndAlignment();
    bool BeginLeftIndent( int leftIndent, int leftSubIndent = 0 );
    bool EndLeftIndent();
    bool BeginRightIndent( int rightIndent );
    bool EndRightIndent();
    bool BeginParagraphSpacing( int before, int after );
    bool EndParagraphSpacing();
    bool BeginLineSpacing( int lineSpacing );
    bool EndLineSpacing();
    bool BeginNumberedBullet( int bulletNumber, int leftIndent, 
                              int leftSubIndent,
                              int bulletStyle = wxTEXT_ATTR_DEFAULT_NUMBERED_BULLET );
    bool EndNumberedBullet();
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
    bool BeginSymbolBullet( const wxString& symbol, int leftIndent,
                            int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL );
#else
    bool BeginSymbolBullet( wxChar symbol, int leftIndent,
                            int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL );
#endif
    bool EndSymbolBullet();
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
    bool BeginStandardBullet( const wxString& bulletName, int leftIndent,
                              int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD );
    bool EndStandardBullet();
#endif
    bool BeginCharacterStyle( const wxString& characterStyle );
    bool EndCharacterStyle();
    bool BeginParagraphStyle( const wxString& paragraphStyle );
    bool EndParagraphStyle();
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
    bool BeginListStyle( const wxString& listStyle, int level = 1,
                         int number = 1 );
    bool EndListStyle();
    bool BeginURL( const wxString& url,
                   const wxString& characterStyle = wxEmptyString );
    bool EndURL();
#endif
    bool SetDefaultStyleToCursorStyle();
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
    bool ClearListStyle( const wxRichTextRange& range,
                         int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO );
#endif
    void SelectNone();
#if WXPERL_W_VERSION_GE( 2, 7, 1 )
    bool SelectWord( long position );
#endif
    wxRichTextRange GetSelectionRange() const;
    void SetSelectionRange( const wxRichTextRange& range );
#if WXPERL_W_VERSION_GE( 2, 7, 1 )
    const wxRichTextRange& GetInternalSelectionRange() const;
    void SetInternalSelectionRange( const wxRichTextRange& range );
#endif
#if WXPERL_W_VERSION_LE( 2, 9, 1 )
    bool HasSelection() const;
#endif
    wxRichTextRange AddParagraph( const wxString& text );
    wxRichTextRange AddImage( const wxImage& image );

    bool LayoutContent( bool onlyVisibleRect = false );
    bool MoveCaret( long pos, bool showAtLineStart = false );
    bool MoveRight( int noPositions = 1, int flags = 0 );
    bool MoveLeft( int noPositions = 1, int flags = 0 );
    bool MoveUp( int noLines = 1, int flags = 0 );
    bool MoveDown( int noLines = 1, int flags = 0 );
    bool MoveToLineEnd( int flags = 0 );
    bool MoveToLineStart( int flags = 0 );
    bool MoveToParagraphEnd( int flags = 0 );
    bool MoveToParagraphStart( int flags = 0 );
    bool MoveHome( int flags = 0 );
    bool MoveEnd( int flags = 0 );
    bool PageUp( int noPages = 1, int flags = 0 );
    bool PageDown( int noPages = 1, int flags = 0 );
    bool WordLeft( int noPages = 1, int flags = 0 );
    bool WordRight( int noPages = 1, int flags = 0 );

    bool BeginBatchUndo( const wxString& cmdName );
    bool EndBatchUndo();
    bool BatchingUndo() const;
    bool BeginSuppressUndo();
    bool EndSuppressUndo();
    bool SuppressingUndo() const;

    bool CanDeleteSelection() const;
    void DeleteSelection();

    %name{HasCAEx}   bool HasCharacterAttributes
        ( const wxRichTextRange& range, const wxTextAttrEx& style ) const;
    %name{HasCARich} bool HasCharacterAttributes
        ( const wxRichTextRange& range, const wxRichTextAttr& style) const;
    %name{HasPAEx}   bool HasParagraphAttributes
        ( const wxRichTextRange& range, const wxTextAttrEx& style) const;
    %name{HasPARich} bool HasParagraphAttributes
        ( const wxRichTextRange& range, const wxRichTextAttr& style) const;

    bool IsSelectionBold();
    bool IsSelectionItalics();
    bool IsSelectionUnderlined();
    bool IsSelectionAligned( wxTextAttrAlignment alignment );
    bool ApplyBoldToSelection();
    bool ApplyItalicToSelection();
    bool ApplyUnderlineToSelection();
    bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment);
#if WXPERL_W_VERSION_GE( 2, 7, 1 )
    bool ApplyStyle( wxRichTextStyleDefinition* def );
    void SetStyleSheet( wxRichTextStyleSheet* styleSheet );
    wxRichTextStyleSheetDisown* GetStyleSheet() const;
    bool ApplyStyleSheet( wxRichTextStyleSheet* styleSheet = NULL );
#endif
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
    bool PushStyleSheet( wxRichTextStyleSheetDisown* styleSheet );
    wxRichTextStyleSheetDisown* PopStyleSheet();
#endif

    void PositionCaret();
    bool ExtendSelection( long oldPosition, long newPosition, int flags );
    bool ScrollIntoView( long position, int keyCode );
    void SetCaretPosition( long position, bool showAtLineStart = false );
    long GetCaretPosition() const;

#if WXPERL_W_VERSION_GE( 2, 7, 1 )
    long GetAdjustedCaretPosition( long caretPos ) const;
#endif
    void MoveCaretForward( long oldPosition );
    void MoveCaretBack( long oldPosition );

##    bool GetCaretPositionForIndex( long position, wxRect& rect );
##    bool DeleteSelectedContent( long* newPos= NULL );

    wxPoint GetPhysicalPoint( const wxPoint& ptLogical ) const;
    wxPoint GetLogicalPoint( const wxPoint& ptPhysical ) const;

    long FindNextWordPosition( int direction = 1 ) const;
    bool IsPositionVisible( long pos ) const;
    long GetFirstVisiblePosition() const;
#if WXPERL_W_VERSION_GE( 2, 7, 1 )
    long GetCaretPositionForDefaultStyle() const;
    void SetCaretPositionForDefaultStyle( long pos );
    bool IsDefaultStyleShowing() const;
    void SetAndShowDefaultStyle( const wxRichTextAttr& attr );
#endif
#if WXPERL_W_VERSION_GE( 2, 7, 2 )
    wxPoint GetFirstVisiblePoint() const;
#endif

    %name{WriteImageFile} bool WriteImage( const wxString& filename,
                                           wxBitmapType bitmapType );
    %name{WriteImageBitmap} bool WriteImage( const wxBitmap& bitmap,
                                  wxBitmapType bitmapType = wxBITMAP_TYPE_PNG );
    %name{WriteImageImage} bool WriteImage( const wxImage& image,
                                  wxBitmapType bitmapType = wxBITMAP_TYPE_PNG );

    %name{SetBasicStyleRich} void SetBasicStyle( const wxRichTextAttr& style );
    %name{SetBasicStyleEx} void SetBasicStyle( const wxTextAttrEx& style );
    
    %name{SetDefaultStyleEx} bool SetDefaultStyle(const wxTextAttrEx& style);
    %name{SetDefaultStyleDefault} bool SetDefaultStyle(const wxTextAttr& style);
    
%{
void
wxRichTextCtrl::SetBasicStyle( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP( wxPliOvl_wrta, SetBasicStyleRich )
        MATCH_REDISP( wxPliOvl_wtae, SetBasicStyleEx )
    END_OVERLOAD( "Wx::RichTextCtrl::SetBasicStyle" )


void
wxRichTextCtrl::SetDefaultStyle( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP( wxPliOvl_wtae, SetDefaultStyleEx )
        MATCH_REDISP( wxPliOvl_wtat, SetDefaultStyleDefault )
    END_OVERLOAD( "Wx::RichTextCtrl::SetDefaultStyle" )

%}

    wxRichTextBuffer* GetBuffer()
        %code{% RETVAL = &THIS->GetBuffer(); %}
        %cleanup%{ wxPli_object_set_deleteable( aTHX_ ST(0), false ); %};

};

%{

void
wxRichTextCtrl::new( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_VOIDM_REDISP( newDefault )
        MATCH_ANY_REDISP( newFull )
    END_OVERLOAD( "Wx::RichTextCtrl::new" )

void
wxRichTextCtrl::SetStyle( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP( wxPliOvl_wrtr_wrta, SetStyleRange )
        MATCH_REDISP( wxPliOvl_n_n_wtae, SetStyleExFromTo )
        MATCH_REDISP( wxPliOvl_n_n_wtat, SetStyleFromTo )
    END_OVERLOAD( "Wx::RichTextCtrl::SetStyle" )

#if WXPERL_W_VERSION_GE( 2, 7, 1 )

void
wxRichTextCtrl::SetStyleEx( ... )
  PPCODE:
    BEGIN_OVERLOAD()
#if WXPERL_W_VERSION_LT( 2, 9, 0 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_n_n_wtae, SetStyleExExFromTo, 2 )
#else
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_wrtr_wrta_n, SetStyleExExRange, 2 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_wrtr_wtae_n, SetStyleExRange, 2 )
#endif
    END_OVERLOAD( "Wx::RichTextCtrl::SetStyleEx" )

#endif

void
wxRichTextCtrl::HasCharacterAttributes( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP( wxPliOvl_wrtr_wrta, HasCARich )
        MATCH_REDISP( wxPliOvl_wrtr_wtae, HasCAEx )
    END_OVERLOAD( "Wx::RichTextCtrl::HasCharacterAttributes" )

void
wxRichTextCtrl::HasParagraphAttributes( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP( wxPliOvl_wrtr_wrta, HasPARich )
        MATCH_REDISP( wxPliOvl_wrtr_wtae, HasPAEx )
    END_OVERLOAD( "Wx::RichTextCtrl::HasParagraphAttributes" )

void
wxRichTextCtrl::DeleteSelectedContent()
  PPCODE:
    long newPos;
    bool retval = THIS->DeleteSelectedContent( &newPos );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( newSViv( retval ? newPos : -1 ) );

void
wxRichTextCtrl::GetCaretPositionForIndex( position )
    long position
  PPCODE:
    wxRect rect;
    bool retval = THIS->GetCaretPositionForIndex( position, rect );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxRect( rect ), "Wx::Rect" ) :
                    &PL_sv_undef );

void
wxRichTextCtrl::GetRichTextAttrStyle( position )
    long position
  PPCODE:
    wxRichTextAttr attr;
    bool retval = THIS->GetStyle( position, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxRichTextAttr( attr ),
                                           "Wx::RichTextAttr" ) :
                    &PL_sv_undef );

void
wxRichTextCtrl::GetTextAttrExStyle( position )
    long position
  PPCODE:
    wxTextAttrEx attr;
    bool retval = THIS->GetStyle( position, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxTextAttrEx( attr ),
                                           "Wx::TextAttrEx" ) :
                    &PL_sv_undef );

void
wxRichTextCtrl::GetTextAttrStyle( position )
    long position
  PPCODE:
    wxTextAttr attr;
    bool retval = THIS->GetStyle( position, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxTextAttr( attr ),
                                           "Wx::TextAttr" ) :
                    &PL_sv_undef );

#if WXPERL_W_VERSION_GE( 2, 9, 0 )

void
wxRichTextCtrl::GetStyle( position )
    long position
  PPCODE:
    wxTextAttr attr;
    bool retval = THIS->GetStyle( position, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxTextAttr( attr ),
                                           "Wx::TextAttr" ) :
                    &PL_sv_undef );

#endif

#if WXPERL_W_VERSION_GE( 2, 7, 1 )

void
wxRichTextCtrl::GetRichTextAttrUncombinedStyle( position )
    long position
  PPCODE:
    wxRichTextAttr attr;
    bool retval = THIS->GetUncombinedStyle( position, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxRichTextAttr( attr ),
                                           "Wx::RichTextAttr" ) :
                    &PL_sv_undef );

#endif

#if WXPERL_W_VERSION_GE( 2, 7, 1 ) && WXPERL_W_VERSION_LT( 2, 9, 2 )

void
wxRichTextCtrl::GetTextAttrExUncombinedStyle( position )
    long position
  PPCODE:
    wxTextAttrEx attr;
    bool retval = THIS->GetUncombinedStyle( position, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxTextAttrEx( attr ),
                                           "Wx::TextAttrEx" ) :
                    &PL_sv_undef );

void
wxRichTextCtrl::GetTextAttrUncombinedStyle( position )
    long position
  PPCODE:
    wxTextAttr attr;
    bool retval = THIS->GetUncombinedStyle( position, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxTextAttr( attr ),
                                           "Wx::TextAttr" ) :
                    &PL_sv_undef );

#endif

#if WXPERL_W_VERSION_GE( 2, 9, 0 ) && WXPERL_W_VERSION_LT( 2, 9, 2 )

void
wxRichTextCtrl::GetUncombinedStyle( position )
    long position
  PPCODE:
    wxTextAttr attr;
    bool retval = THIS->GetUncombinedStyle( position, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxTextAttr( attr ),
                                           "Wx::TextAttr" ) :
                    &PL_sv_undef );

#endif

#if WXPERL_W_VERSION_GE( 2, 8, 0 )

void
wxRichTextCtrl::GetRichTextAttrStyleForRange( range )
    wxRichTextRange* range
  PPCODE:
    wxRichTextAttr attr;
    bool retval = THIS->GetStyleForRange( *range, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxRichTextAttr( attr ),
                                           "Wx::RichTextAttr" ) :
                    &PL_sv_undef );

void
wxRichTextCtrl::GetTextAttrExStyleForRange( range )
    wxRichTextRange* range
  PPCODE:
    wxTextAttrEx attr;
    bool retval = THIS->GetStyleForRange( *range, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxTextAttrEx( attr ),
                                           "Wx::TextAttrEx" ) :
                    &PL_sv_undef );

#endif

#if WXPERL_W_VERSION_GE( 2, 9, 0 )

void
wxRichTextCtrl::GetStyleForRange( range )
    wxRichTextRange* range
  PPCODE:
    wxTextAttr attr;
    bool retval = THIS->GetStyleForRange( *range, attr );
    EXTEND( SP, 2 );
    PUSHs( newSViv( retval ) );
    PUSHs( retval ? wxPli_non_object_2_sv( aTHX_ sv_newmortal(),
                                           new wxTextAttrEx( attr ),
                                           "Wx::TextAttrEx" ) :
                    &PL_sv_undef );

#endif

void
WriteImage( ... )
  PPCODE:
    BEGIN_OVERLOAD()
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_wimg_n, WriteImageImage, 1 )
        MATCH_REDISP_COUNT_ALLOWMORE( wxPliOvl_wbmp_n, WriteImageBitmap, 1 )
        MATCH_REDISP( wxPliOvl_s_n, WriteImageFile )
    END_OVERLOAD( "Wx::RichTextCtrl::WriteImage" )

%}

#if WXPERL_W_VERSION_GE( 2, 9, 2 )

#define WXPERL_IN_RICHTEXTCTRL

INCLUDE_COMMAND: $^X -MExtUtils::XSpp::Cmd -e xspp -- -t typemap.xsp -t ../../typemap.xsp ../../XS/TextCtrlIface.xsp
INCLUDE_COMMAND: $^X -pe "s/TextCtrlIface/RichTextCtrl/g" xspp/TextCtrlIface.h

#undef WXPERL_IN_RICHTEXTCTRL

#endif