File: fshandler.h

package info (click to toggle)
libwx-perl 1%3A0.9932-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,300 kB
  • sloc: cpp: 11,064; perl: 8,603; ansic: 711; makefile: 53
file content (97 lines) | stat: -rw-r--r-- 3,299 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
88
89
90
91
92
93
94
95
96
97
/////////////////////////////////////////////////////////////////////////////
// Name:        ext/filesys/cpp/fshandler.h
// Purpose:     C++ classes for Wx::PlFSFile and Wx::PlFileSystemHandler
// Author:      Mattia Barbon
// Modified by:
// Created:     17/04/2002
// RCS-ID:      $Id: fshandler.h 2057 2007-06-18 23:03:00Z mbarbon $
// Copyright:   (c) 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
/////////////////////////////////////////////////////////////////////////////

#ifndef _WXPERL_FS_FSHANDLER_H
#define _WXPERL_FS_FSHANDLER_H

#include <wx/filesys.h>
#include "cpp/streams.h"
#include "cpp/v_cback.h"

class wxPlFSFile:public wxFSFile
{
public:
    wxPlFSFile( SV* fh, const wxString& loc, const wxString& mimetype,
                const wxString& anchor )
        : wxFSFile( wxPliInputStream_ctor( fh ),
                    loc, mimetype, anchor, wxDateTime() ) { }
};

class wxPlFileSystemHandler:public wxFileSystemHandler
{
    WXPLI_DECLARE_DYNAMIC_CLASS( wxPlFileSystemHandler );
    WXPLI_DECLARE_V_CBACK();
public:
    wxPlFileSystemHandler( const char* package )
        : m_callback( "Wx::PlFileSystemHandler" )
    {
        m_callback.SetSelf( wxPli_make_object( this, package ), true );
    }

    DEC_V_CBACK_BOOL__WXSTRING( CanOpen );
    DEC_V_CBACK_WXSTRING__WXSTRING_INT( FindFirst );
    DEC_V_CBACK_WXSTRING__VOID( FindNext );
    DEC_V_CBACK_WXFSFILEP__WXFILESYSTEM_WXSTRING( OpenFile );
};

WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPlFileSystemHandler, wxFileSystemHandler );

DEF_V_CBACK_WXSTRING__VOID_pure( wxPlFileSystemHandler, wxFileSystemHandler,
                                 FindNext );
DEF_V_CBACK_BOOL__WXSTRING_pure( wxPlFileSystemHandler, wxFileSystemHandler,
                                 CanOpen );

wxString wxPlFileSystemHandler::FindFirst( const wxString& file, int flags )
{
    dTHX;
    if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "FindFirst" ) )
    {
        SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
                                                     G_SCALAR,
                                                     "Pi", &file, flags );
        wxString val;
        WXSTRING_INPUT( val, wxString, ret );
        SvREFCNT_dec( ret );
        return val;
    }
    return wxEmptyString;
}

#include     <wx/wfstream.h>

wxFSFile* wxPlFileSystemHandler::OpenFile( wxFileSystem& parent,
                                           const wxString& name )
{
    dTHX;
    if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "OpenFile" ) )
    {
        SV* fs = wxPli_object_2_sv( aTHX_ sv_newmortal(), &parent );
        SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
                                                     G_SCALAR,
                                                     "sP", fs, &name );
        wxFSFile* val = (wxFSFile*)wxPli_sv_2_object( aTHX_ ret,
                                                      "Wx::FSFile" );
        sv_setiv( SvRV( fs ), 0 );
        if( SvROK( ret ) )
            sv_setiv( SvRV( ret ), 0 );
        SvREFCNT_dec( ret );

        return val;
    }
    return 0;
}

#endif

// local variables:
// mode: c++
// end: