File: printout.h

package info (click to toggle)
libwx-perl 1%3A0.9909-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 3,912 kB
  • sloc: cpp: 9,728; perl: 8,182; ansic: 626; makefile: 41
file content (87 lines) | stat: -rw-r--r-- 2,945 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/////////////////////////////////////////////////////////////////////////////
// Name:        ext/print/cpp/printout.h
// Purpose:     c++ wrapper for wxPrintout
// Author:      Mattia Barbon
// Modified by:
// Created:     02/06/2001
// RCS-ID:      $Id: printout.h 2057 2007-06-18 23:03:00Z mbarbon $
// Copyright:   (c) 2001-2002, 2004 Mattia Barbon
// Licence:     This program is free software; you can redistribute it and/or
//              modify it under the same terms as Perl itself
/////////////////////////////////////////////////////////////////////////////

#include "cpp/v_cback.h"

class wxPlPrintout:public wxPrintout
{
    WXPLI_DECLARE_DYNAMIC_CLASS( wxPlPrintout );
    WXPLI_DECLARE_V_CBACK();
public:
    wxPlPrintout( const char* package, const wxString& title );

    void GetPageInfo( int* minPage, int* maxPage, int* pageFrom, int* pageTo );

    DEC_V_CBACK_BOOL__INT( HasPage );
    DEC_V_CBACK_BOOL__INT_INT( OnBeginDocument );
    DEC_V_CBACK_VOID__VOID( OnEndDocument );
    DEC_V_CBACK_VOID__VOID( OnBeginPrinting );
    DEC_V_CBACK_VOID__VOID( OnEndPrinting );
    DEC_V_CBACK_VOID__VOID( OnPreparePrinting );
    DEC_V_CBACK_BOOL__INT( OnPrintPage );
};

inline wxPlPrintout::wxPlPrintout( const char* package, const wxString& title )
    :wxPrintout( title ),
     m_callback( "Wx::PlPrintout" )
{
    m_callback.SetSelf( wxPli_make_object( this, package ), true );
}

WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPlPrintout, wxPrintout );

DEF_V_CBACK_BOOL__INT( wxPlPrintout, wxPrintout, HasPage );
DEF_V_CBACK_BOOL__INT_INT( wxPlPrintout, wxPrintout, OnBeginDocument );
DEF_V_CBACK_VOID__VOID( wxPlPrintout, wxPrintout, OnEndDocument );
DEF_V_CBACK_VOID__VOID( wxPlPrintout, wxPrintout, OnBeginPrinting );
DEF_V_CBACK_VOID__VOID( wxPlPrintout, wxPrintout, OnEndPrinting );
DEF_V_CBACK_VOID__VOID( wxPlPrintout, wxPrintout, OnPreparePrinting );
DEF_V_CBACK_BOOL__INT_pure( wxPlPrintout, wxPrintout, OnPrintPage );

void wxPlPrintout::GetPageInfo( int* minPage, int* maxPage,
                                int* pageFrom, int* pageTo )
{
    dTHX;
    if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "GetPageInfo" ) )
    {
        dSP;

        ENTER;
        SAVETMPS;

        PUSHMARK( SP );
        XPUSHs( m_callback.GetSelf() );
        PUTBACK;

        SV* method = sv_2mortal( newRV_inc( (SV*) m_callback.GetMethod() ) );
        int items = call_sv( method, G_ARRAY );

        if( items != 4 )
        {
            croak( "wxPlPrintout::GetPageInfo, expected 4 values, got %i",
                   items );
        }

        SPAGAIN;
        SV* tmp;
        // pop in reverse order...
        tmp = POPs; *pageTo = SvIV( tmp );
        tmp = POPs; *pageFrom = SvIV( tmp );
        tmp = POPs; *maxPage = SvIV( tmp );
        tmp = POPs; *minPage = SvIV( tmp );
        PUTBACK;

        FREETMPS;
        LEAVE;
    } else
        wxPrintout::GetPageInfo( minPage, maxPage, pageFrom, pageTo );
}