1 /////////////////////////////////////////////////////////////////////////////
2 // Name: ext/docview/cpp/docview.h
3 // Purpose: c++ wrapper for the wx Document/View Framework
7 // RCS-ID: $Id: docview.h 2172 2007-08-17 22:56:36Z mbarbon $
8 // Copyright: (c) 2002-2004, 2005-2007 Simon Flack
9 // Licence: This program is free software; you can redistribute it and/or
10 // modify it under the same terms as Perl itself
11 /////////////////////////////////////////////////////////////////////////////
13 #include <wx/docview.h>
14 #if wxUSE_MDI_ARCHITECTURE && wxUSE_DOC_VIEW_ARCHITECTURE
15 #include "wx/docmdi.h"
18 #include "cpp/v_cback.h"
21 // --- Wx::Document ----------------------------------------------------
23 class wxPliDocument : public wxDocument
25 WXPLI_DECLARE_DYNAMIC_CLASS( wxPliDocument );
26 WXPLI_DECLARE_V_CBACK();
28 WXPLI_DEFAULT_CONSTRUCTOR( wxPliDocument, "Wx::Document", true );
30 DEC_V_CBACK_BOOL__VOID( Close );
31 DEC_V_CBACK_BOOL__VOID( Save );
32 DEC_V_CBACK_BOOL__VOID( SaveAs );
33 DEC_V_CBACK_BOOL__VOID( Revert );
35 // see helpers.h - wxPliInputStream
36 #if wxUSE_STD_IOSTREAM
37 wxSTD ostream& SaveObject( wxSTD ostream& );
38 wxSTD istream& LoadObject( wxSTD istream& );
40 wxOutputStream& SaveObject( wxOutputStream& );
41 wxInputStream& LoadObject( wxInputStream& );
43 DEC_V_CBACK_BOOL__WXSTRING( OnSaveDocument );
44 DEC_V_CBACK_BOOL__WXSTRING( OnOpenDocument );
45 DEC_V_CBACK_BOOL__VOID( OnNewDocument );
46 DEC_V_CBACK_BOOL__VOID( OnCloseDocument );
48 DEC_V_CBACK_BOOL__VOID( OnSaveModified );
50 bool OnCreate( const wxString&, long );
51 // ??? OnCreateCommandProcessor/GetCommandProcessor/SetCommandProcessor ???
53 DEC_V_CBACK_VOID__VOID( OnChangedViewList );
54 DEC_V_CBACK_BOOL__VOID( DeleteContents );
58 bool IsModified() const;
61 bool AddView( wxView* );
62 bool RemoveView( wxView* );
64 void UpdateAllViews( wxView* sender=NULL, wxObject* = NULL);
65 DEC_V_CBACK_VOID__VOID( NotifyClosing );
66 DEC_V_CBACK_BOOL__VOID( DeleteAllViews );
68 wxDocManager *GetDocumentManager() const;
69 wxDocTemplate *GetDocumentTemplate() const;
70 void SetDocumentTemplate( wxDocTemplate* );
72 #if WXPERL_W_VERSION_GE( 2, 9, 0 )
73 DEC_V_CBACK_WXSTRING__VOID_const( GetUserReadableName );
75 DEC_V_CBACK_BOOL__mWXSTRING_const( GetPrintableName );
78 wxWindow *GetDocumentWindow() const;
82 DEF_V_CBACK_BOOL__VOID( wxPliDocument, wxDocument, Close );
83 DEF_V_CBACK_BOOL__VOID( wxPliDocument, wxDocument, Save );
84 DEF_V_CBACK_BOOL__VOID( wxPliDocument, wxDocument, SaveAs );
85 DEF_V_CBACK_BOOL__VOID( wxPliDocument, wxDocument, Revert );
87 #if wxUSE_STD_IOSTREAM
88 wxSTD ostream& wxPliDocument::SaveObject( wxSTD ostream& stream )
91 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "SaveObject" ) )
93 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
94 G_DISCARD|G_SCALAR, "o", &stream );
96 return wxDocument::SaveObject( stream );
99 wxSTD istream& wxPliDocument::LoadObject( wxSTD istream& stream )
102 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "LoadObject" ) )
104 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
105 G_DISCARD|G_SCALAR, "o", &stream );
107 return wxDocument::LoadObject( stream );
110 wxOutputStream& wxPliDocument::SaveObject( wxOutputStream& stream )
113 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "SaveObject" ) )
115 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
116 G_DISCARD|G_SCALAR, "o", &stream );
118 return wxDocument::SaveObject( stream );
121 wxInputStream& wxPliDocument::LoadObject( wxInputStream& stream )
124 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "LoadObject" ) )
126 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
127 G_DISCARD|G_SCALAR, "o", &stream );
129 return wxDocument::LoadObject( stream );
133 DEF_V_CBACK_BOOL__WXSTRING( wxPliDocument, wxDocument, OnSaveDocument );
134 DEF_V_CBACK_BOOL__WXSTRING( wxPliDocument, wxDocument, OnOpenDocument );
135 DEF_V_CBACK_BOOL__VOID( wxPliDocument, wxDocument, OnNewDocument );
136 DEF_V_CBACK_BOOL__VOID( wxPliDocument, wxDocument, OnCloseDocument );
137 DEF_V_CBACK_BOOL__VOID( wxPliDocument, wxDocument, OnSaveModified );
139 bool wxPliDocument::OnCreate( const wxString& path, long flags )
142 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "OnCreate" ) )
144 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
147 bool val = SvTRUE( ret );
151 return wxDocument::OnCreate( path, flags );
155 DEF_V_CBACK_VOID__VOID( wxPliDocument, wxDocument, OnChangedViewList );
156 DEF_V_CBACK_BOOL__VOID( wxPliDocument, wxDocument, DeleteContents );
157 DEF_V_CBACK_BOOL__VOID_const( wxPliDocument, wxDocument, IsModified );
159 void wxPliDocument::Modify( bool mod )
162 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Modify" ) )
164 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
165 G_DISCARD|G_SCALAR, "b", mod );
167 wxDocument::Modify( mod );
170 bool wxPliDocument::AddView( wxView *view)
173 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "AddView" ) )
175 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
176 G_SCALAR, "O", view );
177 bool val = SvTRUE( ret );
181 return wxDocument::AddView( view );
184 bool wxPliDocument::RemoveView( wxView *view )
187 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "RemoveView" ) )
189 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
190 G_SCALAR, "O", view );
191 bool val = SvTRUE( ret );
195 return wxDocument::RemoveView( view );
198 void wxPliDocument::UpdateAllViews( wxView *sender, wxObject *hint)
201 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
204 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
208 wxDocument::UpdateAllViews( sender, hint );
211 DEF_V_CBACK_VOID__VOID( wxPliDocument, wxDocument, NotifyClosing );
212 DEF_V_CBACK_BOOL__VOID( wxPliDocument, wxDocument, DeleteAllViews );
214 wxDocManager *wxPliDocument::GetDocumentManager() const
217 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
218 "GetDocumentManager" ) )
220 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
222 wxDocManager* retval =
223 (wxDocManager*)wxPli_sv_2_object( aTHX_ ret, "Wx::DocManager" );
228 return wxDocument::GetDocumentManager();
231 wxDocTemplate *wxPliDocument::GetDocumentTemplate() const
234 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
235 "GetDocumentTemplate" ) )
237 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
239 wxDocTemplate* retval =
240 (wxDocTemplate*)wxPli_sv_2_object( aTHX_ ret, "Wx::DocTemplate" );
245 return wxDocument::GetDocumentTemplate();
248 void wxPliDocument::SetDocumentTemplate( wxDocTemplate *temp )
251 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
252 "SetDocumentTemplate" ) )
254 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, G_SCALAR, "O",
257 wxDocument::SetDocumentTemplate( temp );
260 #if WXPERL_W_VERSION_GE( 2, 9, 0 )
261 DEF_V_CBACK_WXSTRING__VOID_const( wxPliDocument, wxDocument,
262 GetUserReadableName );
264 DEF_V_CBACK_BOOL__mWXSTRING_const( wxPliDocument, wxDocument,
268 wxWindow *wxPliDocument::GetDocumentWindow() const
271 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
272 "GetDocumentWindow" ) )
274 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
278 (wxWindow*) wxPli_sv_2_object( aTHX_ ret, "Wx::Window" );
282 return wxDocument::GetDocumentWindow();
285 WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliDocument, wxDocument );
288 // --- Wx::View -------------------------------------------------
291 class wxPliView : public wxView
293 WXPLI_DECLARE_DYNAMIC_CLASS( wxPliView );
294 WXPLI_DECLARE_V_CBACK();
296 wxPliView( const char* package )
298 m_callback( "Wx::View" )
300 m_callback.SetSelf( wxPli_make_object( this, package ), true);
304 void OnActivateView( bool, wxView*, wxView* );
305 void OnPrint( wxDC*, wxObject* );
306 void OnUpdate( wxView* sender, wxObject* hint=(wxObject*) NULL );
308 DEC_V_CBACK_VOID__VOID( OnClosingDocument );
309 DEC_V_CBACK_VOID__VOID( OnChangeFilename );
310 bool OnCreate( wxDocument*, long );
311 bool Close( bool deleteWindow = true );
312 bool OnClose( bool );
314 // bool ProcessEvent(wxEvent&);
315 void Activate( bool );
317 virtual void OnDraw(wxDC* dc);
319 #if wxUSE_PRINTING_ARCHITECTURE
320 wxPrintout* OnCreatePrintout();
324 wxPliView::~wxPliView() {}
326 void wxPliView::OnDraw( wxDC* dc )
330 void wxPliView::OnActivateView( bool activate, wxView* activeView,
331 wxView* deactiveView)
334 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
337 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, G_SCALAR|G_DISCARD,
338 "bOO", activate, activeView,
342 wxView::OnActivateView( activate, activeView, deactiveView);
346 void wxPliView::OnPrint( wxDC* dc, wxObject* info)
349 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "OnPrint" ) )
351 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, G_SCALAR|G_DISCARD,
355 wxView::OnPrint( dc, info);
358 void wxPliView::OnUpdate( wxView* sender, wxObject* hint )
361 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "OnUpdate" ) )
363 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, G_SCALAR|G_DISCARD,
364 "OO", sender, hint );
367 wxView::OnUpdate( sender, hint );
370 DEF_V_CBACK_VOID__VOID( wxPliView, wxView, OnClosingDocument );
371 DEF_V_CBACK_VOID__VOID( wxPliView, wxView, OnChangeFilename );
373 bool wxPliView::OnCreate( wxDocument* doc, long flags )
376 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "OnCreate" ) )
378 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
379 G_SCALAR,"Ol", doc, flags );
380 bool val = SvTRUE( ret );
384 return wxView::OnCreate( doc, flags );
387 DEF_V_CBACK_BOOL__BOOL( wxPliView, wxView, Close );
388 DEF_V_CBACK_BOOL__BOOL( wxPliView, wxView, OnClose );
390 void wxPliView::Activate( bool activate )
393 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Activate" ) )
395 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, G_SCALAR|G_DISCARD,
399 wxView::Activate( activate );
403 #if wxUSE_PRINTING_ARCHITECTURE
404 wxPrintout* wxPliView::OnCreatePrintout()
407 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
408 "OnCreatePrintout" ) )
410 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
413 (wxPrintout*)wxPli_sv_2_object( aTHX_ ret, "Wx::Printout" );
417 return wxView::OnCreatePrintout( );
421 WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliView, wxView );
426 // --- Wx::DocTemplate -------------------------------------------------
429 class wxPliDocTemplate : public wxDocTemplate
431 WXPLI_DECLARE_DYNAMIC_CLASS( wxPliDocTemplate );
432 WXPLI_DECLARE_V_CBACK();
434 wxPliDocTemplate( const char* package, wxDocManager* manager,
435 const wxString& descr, const wxString& filter,
436 const wxString& dir, const wxString& ext,
437 const wxString& docTypeName,
438 const wxString& viewTypeName, wxClassInfo* docClassInfo,
439 wxClassInfo* viewClassInfo, long flags,
440 const wxString& docClassName = wxEmptyString,
441 const wxString& viewClassName = wxEmptyString )
442 : wxDocTemplate( manager, descr, filter, dir, ext, docTypeName,
443 viewTypeName, docClassInfo, viewClassInfo, flags ),
444 m_callback( "Wx::DocTemplate" ),
445 m_docClassName( docClassName ),
446 m_viewClassName( viewClassName ),
447 m_plDocClassInfo( NULL ),
448 m_plViewClassInfo( NULL )
450 m_hasDocClassInfo = docClassInfo != 0 || !docClassName.empty();
451 m_hasViewClassInfo = viewClassInfo != 0 || !viewClassName.empty();
452 m_callback.SetSelf( wxPli_make_object( this, package ), true);
453 if( !docClassName.empty() )
455 #if wxUSE_EXTENDED_RTTI
456 m_plDocClassInfo = new wxPliClassInfo( sm_docParents,
458 sizeof(wxPliDocument),
459 &fake_constructor, NULL
462 m_plDocClassInfo = new wxClassInfo( docClassName,
463 &wxDocument::ms_classInfo, NULL,
464 sizeof(wxPliDocument),
468 m_docClassInfo = m_plDocClassInfo;
470 if( !viewClassName.empty() )
472 #if wxUSE_EXTENDED_RTTI
473 m_plViewClassInfo = new wxPliClassInfo( sm_viewParents,
476 &fake_constructor, NULL
479 m_plViewClassInfo = new wxClassInfo( viewClassName,
480 &wxView::ms_classInfo, NULL,
485 m_viewClassInfo = m_plViewClassInfo;
491 delete m_plViewClassInfo;
492 delete m_plDocClassInfo;
495 wxDocument *CreateDocument( const wxString& path, long flags = 0);
496 wxView *CreateView( wxDocument*, long );
498 DEC_V_CBACK_WXSTRING__VOID_const( GetViewName );
499 DEC_V_CBACK_WXSTRING__VOID_const( GetDocumentName );
502 static wxString sm_className;
503 static wxObject* fake_constructor();
504 static SV* CallConstructor( const wxString& className );
505 #if wxUSE_EXTENDED_RTTI
506 static const wxClassInfo* sm_docParents[];
507 static const wxClassInfo* sm_viewParents[];
510 wxString m_docClassName,
512 wxClassInfo *m_plDocClassInfo,
514 bool m_hasDocClassInfo, m_hasViewClassInfo;
516 DEC_V_CBACK_BOOL__WXSTRING( FileMatchesTemplate );
519 wxString wxPliDocTemplate::sm_className;
520 #if wxUSE_EXTENDED_RTTI
521 const wxClassInfo* wxPliDocTemplate::sm_docParents[] =
522 { &wxDocument::ms_classInfo, NULL };
523 const wxClassInfo* wxPliDocTemplate::sm_viewParents[] =
524 { &wxView::ms_classInfo, NULL };
527 wxObject* wxPliDocTemplate::fake_constructor()
531 SV* obj = CallConstructor( sm_className );
532 wxObject* doc = (wxDocument*)wxPli_sv_2_object( aTHX_ obj, "Wx::Object" );
538 SV* wxPliDocTemplate::CallConstructor( const wxString& className )
546 char buffer[WXPL_BUF_SIZE];
548 wxConvUTF8.WC2MB( buffer, className, WXPL_BUF_SIZE - 4 );
550 strcpy( buffer, className.c_str() );
552 SV* sv = newSVpv( CHAR_P buffer, 0 );
555 XPUSHs( sv_2mortal( sv ) );
558 int count = call_method( "new", G_SCALAR );
561 croak( "Constructor must return exactly 1 value" );
574 wxDocument *wxPliDocTemplate::CreateDocument( const wxString& path,
581 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
584 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
585 G_SCALAR, "Pl", &path,
587 doc = (wxDocument*) wxPli_sv_2_object( aTHX_ ret, "Wx::Document" );
592 sm_className = m_docClassName;
593 if( m_hasDocClassInfo )
594 return wxDocTemplate::CreateDocument( path, flags );
602 wxView *wxPliDocTemplate::CreateView( wxDocument* doc, long flags )
607 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "CreateView" ) )
609 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
612 view = (wxView*) wxPli_sv_2_object( aTHX_ ret, "Wx::View" );
617 sm_className = m_viewClassName;
618 if( m_hasViewClassInfo )
619 return wxDocTemplate::CreateView( doc, flags );
625 DEF_V_CBACK_WXSTRING__VOID_const( wxPliDocTemplate, wxDocTemplate,
627 DEF_V_CBACK_WXSTRING__VOID_const( wxPliDocTemplate, wxDocTemplate,
629 DEF_V_CBACK_BOOL__WXSTRING( wxPliDocTemplate, wxDocTemplate,
630 FileMatchesTemplate );
632 WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliDocTemplate, wxDocTemplate );
639 // --- Wx::DocManager -------------------------------------------------
642 class wxPliDocManager : public wxDocManager
644 WXPLI_DECLARE_DYNAMIC_CLASS( wxPliDocManager );
645 WXPLI_DECLARE_V_CBACK();
647 wxPliDocManager( const char* package, long flags = wxDEFAULT_DOCMAN_FLAGS,
648 bool initialize = true)
649 : wxDocManager(flags, initialize),
650 m_callback( "Wx::DocManager" )
652 m_callback.SetSelf( wxPli_make_object( this, package ), true);
656 // bool ProcessEvent( wxEvent& );
657 DEC_V_CBACK_VOID__VOID( OnOpenFileFailure );
659 wxDocument* CreateDocument( const wxString& path, long flags = 0 );
660 wxView* CreateView( wxDocument* doc, long flags = 0 );
661 void DeleteTemplate( wxDocTemplate* temp, long flags = 0 );
662 bool FlushDoc( wxDocument* );
663 wxDocTemplate* MatchTemplate( const wxString& );
664 wxDocTemplate* SelectDocumentPath( wxDocTemplate** templates,
665 int noTemplates, wxString& path,
666 long flags, bool save=false);
667 wxDocTemplate* SelectDocumentType( wxDocTemplate** templates,
668 int noTemplates, bool sort=false);
669 wxDocTemplate* SelectViewType( wxDocTemplate** templates, int noTemplates,
671 wxDocTemplate* FindTemplateForPath( const wxString& );
673 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
674 void ActivateView( wxView*, bool activate = true);
676 void ActivateView( wxView*, bool activate = true, bool deleting = false);
678 // wxView* GetCurrentView() const;
680 #if WXPERL_W_VERSION_GE( 2, 9, 0 )
681 DEC_V_CBACK_WXSTRING__VOID( MakeNewDocumentName );
683 DEC_V_CBACK_BOOL__mWXSTRING( MakeDefaultName );
686 wxString MakeFrameTitle( wxDocument* );
688 wxFileHistory* OnCreateFileHistory();
689 wxFileHistory* GetFileHistory();
691 void AddFileToHistory( const wxString& );
692 void RemoveFileFromHistory( int );
693 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
694 size_t GetHistoryFilesCount() const;
696 int GetNoHistoryFiles() const;
698 wxString GetHistoryFile( int ) const;
699 void FileHistoryUseMenu( wxMenu* );
700 void FileHistoryRemoveMenu( wxMenu* );
702 // FileHistoryLoad()/Save()
705 void FileHistoryAddFilesToMenu();
706 void FileHistoryAddFilesToMenu( wxMenu* );
710 wxPliDocManager::~wxPliDocManager() {}
712 wxDocument* wxPliDocManager::CreateDocument( const wxString& path, long flags )
715 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
718 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
719 G_SCALAR, "Pl", &path, flags );
721 (wxDocument*)wxPli_sv_2_object( aTHX_ ret, "Wx::Document" );
725 return wxDocManager::CreateDocument( path, flags );
729 wxView* wxPliDocManager::CreateView( wxDocument* doc, long flags )
732 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "CreateView" ) )
734 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
738 (wxView*)wxPli_sv_2_object( aTHX_ ret, "Wx::View" );
742 return wxDocManager::CreateView( doc, flags );
747 void wxPliDocManager::DeleteTemplate( wxDocTemplate* temp, long flags )
750 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
753 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
754 G_SCALAR|G_DISCARD, "Ol", &temp,
758 wxDocManager::DeleteTemplate( temp, flags );
761 bool wxPliDocManager::FlushDoc( wxDocument* doc )
764 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "FlushDoc" ) )
766 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
767 G_SCALAR, "O", doc );
768 bool val = SvTRUE( ret );
772 return wxDocManager::FlushDoc( doc );
776 wxDocTemplate* wxPliDocManager::MatchTemplate( const wxString& path )
779 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
782 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
783 G_SCALAR, "P", &path );
784 wxDocTemplate* retval =
785 (wxDocTemplate*)wxPli_sv_2_object( aTHX_ ret, "Wx::DocTemplate" );
789 return wxDocManager::MatchTemplate(path);
792 wxDocTemplate* wxPliDocManager::SelectDocumentPath( wxDocTemplate** templates,
795 long flags, bool save)
798 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
799 "SelectDocumentPath" ) )
806 // Create a perl arrayref from the list of wxDocTemplates
808 AV* arrTemplates = newAV();
809 for (i = 0; i < noTemplates ; i++)
811 SV* svval = wxPli_object_2_sv( aTHX_ sv_newmortal(),
813 av_store( arrTemplates, i, svval );
814 SvREFCNT_inc( svval );
816 SV* template_aref = sv_2mortal( newRV_noinc( (SV*)arrTemplates ) );
819 wxPli_push_arguments( aTHX_ &SP, "sSiPlb",
820 m_callback.GetSelf(), template_aref,
821 noTemplates, &path, flags, save );
824 SV* method = sv_2mortal( newRV_inc( (SV*) m_callback.GetMethod() ) );
825 int items = call_sv( method, G_ARRAY );
833 WXSTRING_INPUT( path, wxString, tmp ); // Set the selected path
835 else if( items == 1 )
837 // valid if user alter the path
841 croak( "wxPliDocManager::SelectDocumentPath() expected 1"
842 " or 2 values, got %i", items );
846 wxDocTemplate* retval =
847 (wxDocTemplate*)wxPli_sv_2_object( aTHX_ tmp, "Wx::DocTemplate" );
854 return retval; //return the doctemplate
857 return wxDocManager::SelectDocumentPath( templates, noTemplates,
862 wxDocTemplate* wxPliDocManager::SelectDocumentType( wxDocTemplate** templates,
867 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
868 "SelectDocumentType" ) )
870 SV *ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
871 G_SCALAR, "Oib", templates,
873 wxDocTemplate* retval =
874 (wxDocTemplate*)wxPli_sv_2_object( aTHX_ ret, "Wx::DocTemplate" );
879 return wxDocManager::SelectDocumentType(templates, noTemplate, sort);
882 wxDocTemplate* wxPliDocManager::SelectViewType( wxDocTemplate** templates,
887 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
890 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
891 G_SCALAR, "Oib", templates,
893 wxDocTemplate* retval =
894 (wxDocTemplate*)wxPli_sv_2_object( aTHX_ ret, "Wx::DocTemplate" );
899 return wxDocManager::SelectViewType(templates, noTemplate, sort);
903 wxDocTemplate* wxPliDocManager::FindTemplateForPath( const wxString& path )
906 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
907 "FindTemplateForPath" ) )
909 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
910 G_SCALAR, "P", &path );
911 wxDocTemplate* retval =
912 (wxDocTemplate*)wxPli_sv_2_object( aTHX_ ret, "Wx::DocTemplate" );
916 return wxDocManager::FindTemplateForPath( path );
919 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
920 void wxPliDocManager::ActivateView( wxView* view, bool activate)
923 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
926 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, G_SCALAR|G_DISCARD,
927 "Ob", view, activate );
930 wxDocManager::ActivateView( view, activate );
933 void wxPliDocManager::ActivateView( wxView* view, bool activate, bool deleting)
936 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
939 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback, G_SCALAR|G_DISCARD,
940 "Obb", view, activate, deleting );
943 wxDocManager::ActivateView( view, activate, deleting );
947 #if WXPERL_W_VERSION_GE( 2, 9, 0 )
948 DEF_V_CBACK_WXSTRING__VOID( wxPliDocManager, wxDocManager,
949 MakeNewDocumentName );
951 DEF_V_CBACK_BOOL__mWXSTRING( wxPliDocManager, wxDocManager, MakeDefaultName );
954 wxString wxPliDocManager::MakeFrameTitle( wxDocument* doc )
957 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
960 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
961 G_SCALAR, "O", doc );
963 WXSTRING_INPUT( retval, wxString, ret );
967 return wxDocManager::MakeFrameTitle( doc );
970 DEF_V_CBACK_VOID__VOID( wxPliDocManager, wxDocManager, OnOpenFileFailure );
972 wxFileHistory* wxPliDocManager::OnCreateFileHistory()
975 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
976 "OnCreateFileHistory" ) )
978 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
979 G_SCALAR|G_NOARGS, NULL );
980 wxFileHistory* retval =
981 (wxFileHistory*)wxPli_sv_2_object( aTHX_ ret, "Wx::FileHistory" );
985 return wxDocManager::OnCreateFileHistory( );
987 wxFileHistory* wxPliDocManager::GetFileHistory()
990 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
993 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
994 G_SCALAR|G_NOARGS, NULL );
995 wxFileHistory* retval =
996 (wxFileHistory*)wxPli_sv_2_object( aTHX_ ret, "Wx::FileHistory" );
1000 return wxDocManager::GetFileHistory( );
1003 void wxPliDocManager::AddFileToHistory( const wxString& file )
1006 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1007 "AddFileToHistory" ) )
1009 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1010 G_SCALAR, "P", &file);
1013 wxDocManager::AddFileToHistory( file );
1016 void wxPliDocManager::RemoveFileFromHistory( int i )
1019 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1020 "RemoveFileFromHistory" ) )
1022 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1023 G_SCALAR|G_DISCARD, "i", i);
1026 wxDocManager::RemoveFileFromHistory( i );
1029 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
1030 size_t wxPliDocManager::GetHistoryFilesCount() const
1032 int wxPliDocManager::GetNoHistoryFiles() const
1036 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1037 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
1038 "GetHistoryFilesCount" ) )
1040 "GetNoHistoryFiles" ) )
1043 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1044 G_SCALAR|G_NOARGS, NULL);
1045 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
1046 int retval = (int)SvIV( ret );
1048 size_t retval = (size_t)SvIV( ret );
1050 SvREFCNT_dec( ret );
1053 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
1054 return wxDocManager::GetHistoryFilesCount();
1056 return wxDocManager::GetNoHistoryFiles();
1060 wxString wxPliDocManager::GetHistoryFile( int i ) const
1063 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1064 "GetHistoryFile" ) )
1066 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1069 WXSTRING_INPUT( retval, wxString, ret );
1070 SvREFCNT_dec( ret );
1073 return wxDocManager::GetHistoryFile( i );
1076 void wxPliDocManager::FileHistoryUseMenu( wxMenu* menu )
1079 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1080 "FileHistoryUseMenu" ) )
1082 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1083 G_SCALAR|G_DISCARD, "O", menu);
1086 wxDocManager::FileHistoryUseMenu( menu );
1089 void wxPliDocManager::FileHistoryRemoveMenu( wxMenu* menu )
1092 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1093 "FileHistoryRemoveMenu" ) )
1095 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1096 G_SCALAR|G_DISCARD, "O", menu);
1099 wxDocManager::FileHistoryRemoveMenu( menu );
1103 // FileHistoryLoad()/Save()
1106 void wxPliDocManager::FileHistoryAddFilesToMenu()
1109 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1110 "FileHistoryAddFilesToMenu" ) )
1112 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1113 G_SCALAR|G_NOARGS|G_DISCARD, NULL);
1116 wxDocManager::FileHistoryAddFilesToMenu( );
1119 void wxPliDocManager::FileHistoryAddFilesToMenu( wxMenu* menu )
1122 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1123 "FileHistoryAddFilesToMenu" ) )
1125 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1126 G_SCALAR|G_DISCARD, "O", menu);
1129 wxDocManager::FileHistoryAddFilesToMenu( menu );
1134 WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliDocManager, wxDocManager );
1140 // --- Wx::DocChildFrame -------------------------------------------------
1143 class wxPliDocChildFrame : public wxDocChildFrame
1145 WXPLI_DECLARE_DYNAMIC_CLASS( wxPliDocChildFrame );
1146 WXPLI_DECLARE_V_CBACK();
1148 wxPliDocChildFrame(const char* package, wxDocument* doc, wxView* view,
1149 wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint&
1150 pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
1151 long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxFrameNameStr)
1152 : wxDocChildFrame(doc, view, parent, id, title, pos, size, style, name),
1153 m_callback( "Wx::DocChildFrame" )
1155 m_callback.SetSelf( wxPli_make_object( this, package ), true);
1157 ~wxPliDocChildFrame();
1161 wxPliDocChildFrame::~wxPliDocChildFrame() {}
1163 WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliDocChildFrame, wxDocChildFrame );
1169 // --- Wx::DocParentFrame -------------------------------------------------
1172 class wxPliDocParentFrame : public wxDocParentFrame
1174 WXPLI_DECLARE_DYNAMIC_CLASS( wxPliDocParentFrame );
1175 WXPLI_DECLARE_V_CBACK();
1177 wxPliDocParentFrame(const char* package, wxDocManager* manager,
1178 wxFrame *parent, wxWindowID id, const wxString& title,
1179 const wxPoint& pos = wxDefaultPosition,
1180 const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE,
1181 const wxString& name = wxFrameNameStr)
1182 : wxDocParentFrame(manager, parent, id, title, pos, size, style, name),
1183 m_callback( "Wx::DocParentFrame" )
1185 m_callback.SetSelf( wxPli_make_object( this, package ), true);
1187 ~wxPliDocParentFrame();
1192 wxPliDocParentFrame::~wxPliDocParentFrame() {}
1194 WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliDocParentFrame, wxDocParentFrame );
1199 // --- Wx::DocMDIChildFrame -------------------------------------------------
1201 #if wxUSE_MDI_ARCHITECTURE && wxUSE_DOC_VIEW_ARCHITECTURE
1203 class wxPliDocMDIChildFrame : public wxDocMDIChildFrame
1205 WXPLI_DECLARE_DYNAMIC_CLASS( wxPliDocMDIChildFrame );
1206 WXPLI_DECLARE_V_CBACK();
1208 wxPliDocMDIChildFrame(const char* package, wxDocument* doc, wxView* view,
1209 wxMDIParentFrame* frame, wxWindowID id,
1210 const wxString& title, const wxPoint&
1211 pos = wxDefaultPosition,
1212 const wxSize& size = wxDefaultSize,
1213 long style = wxDEFAULT_FRAME_STYLE,
1214 const wxString& name = wxFrameNameStr)
1215 : wxDocMDIChildFrame(doc, view, frame, id, title, pos,
1217 m_callback( "Wx::DocMDIChildFrame" )
1219 m_callback.SetSelf( wxPli_make_object( this, package ), true);
1221 ~wxPliDocMDIChildFrame();
1225 wxPliDocMDIChildFrame::~wxPliDocMDIChildFrame() {}
1227 WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliDocMDIChildFrame, wxDocMDIChildFrame );
1233 // --- Wx::DocMDIParentFrame -------------------------------------------------
1236 class wxPliDocMDIParentFrame : public wxDocMDIParentFrame
1238 WXPLI_DECLARE_DYNAMIC_CLASS( wxPliDocMDIParentFrame );
1240 WXPLI_DECLARE_V_CBACK();
1242 wxPliDocMDIParentFrame(const char* package, wxDocManager* manager,
1243 wxFrame *parent, wxWindowID id, const wxString& title,
1244 const wxPoint& pos = wxDefaultPosition,
1245 const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE,
1246 const wxString& name = wxFrameNameStr)
1247 : wxDocMDIParentFrame(manager, parent, id, title, pos, size,
1249 m_callback( "Wx::DocMDIParentFrame" )
1251 m_callback.SetSelf( wxPli_make_object( this, package ), true);
1253 ~wxPliDocMDIParentFrame();
1257 wxPliDocMDIParentFrame::~wxPliDocMDIParentFrame() {}
1260 WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliDocMDIParentFrame, wxDocMDIParentFrame );
1266 // --- Wx::FileHistory -------------------------------------------------
1269 class wxPliFileHistory : public wxFileHistory
1271 WXPLI_DECLARE_DYNAMIC_CLASS( wxPliFileHistory );
1272 WXPLI_DECLARE_V_CBACK();
1274 wxPliFileHistory(const char* package, int maxfiles = 9)
1275 : wxFileHistory( maxfiles ),
1276 m_callback( "Wx::FileHistory" )
1278 m_callback.SetSelf( wxPli_make_object( this, package ), true);
1280 ~wxPliFileHistory();
1282 void AddFileToHistory( const wxString& );
1283 void RemoveFileFromHistory( int );
1284 int GetMaxFiles() const;
1286 void UseMenu( wxMenu* );
1287 void RemoveMenu( wxMenu* );
1290 void Load( wxConfigBase& );
1291 void Save( wxConfigBase& );
1294 void AddFilesToMenu();
1295 void AddFilesToMenu( wxMenu* );
1297 wxString GetHistoryFile( int ) const;
1299 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
1300 size_t GetCount() const;
1302 int GetCount() const;
1305 wxList& GetMenus() const;
1309 wxPliFileHistory::~wxPliFileHistory() {}
1311 void wxPliFileHistory::AddFileToHistory( const wxString& file )
1314 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1315 "AddFileToHistory" ) )
1317 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1318 G_SCALAR|G_DISCARD, "P", &file );
1321 wxFileHistory::AddFileToHistory( file );
1325 void wxPliFileHistory::RemoveFileFromHistory( int i )
1328 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1329 "RemoveFileFromHistory" ) )
1331 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1332 G_SCALAR|G_DISCARD, "i", i );
1335 wxFileHistory::RemoveFileFromHistory( i );
1338 int wxPliFileHistory::GetMaxFiles() const
1341 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "GetMaxFiles" ) )
1343 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1345 int retval = (int)SvIV( ret );
1346 SvREFCNT_dec( ret );
1349 return wxFileHistory::GetMaxFiles();
1352 void wxPliFileHistory::UseMenu( wxMenu* menu )
1355 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "UseMenu" ) )
1357 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1358 G_SCALAR|G_DISCARD, "O", menu );
1361 wxFileHistory:UseMenu( menu );
1364 void wxPliFileHistory::RemoveMenu( wxMenu* menu )
1367 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "RemoveMenu" ) )
1369 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1370 G_SCALAR|G_DISCARD, "O", menu );
1373 wxFileHistory::UseMenu( menu );
1377 void wxPliFileHistory::Load( wxConfigBase& config )
1380 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Load" ) )
1382 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1383 G_SCALAR|G_DISCARD, "o", &config,
1387 wxFileHistory::Load( config );
1389 void wxPliFileHistory::Save( wxConfigBase& config )
1392 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "Save" ) )
1394 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1395 G_SCALAR|G_DISCARD, "o", &config,
1399 wxFileHistory::Save( config );
1403 void wxPliFileHistory::AddFilesToMenu()
1406 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1407 "AddFilesToMenu" ) )
1409 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1410 G_SCALAR|G_DISCARD|G_NOARGS, NULL );
1413 wxFileHistory::AddFilesToMenu();
1416 void wxPliFileHistory::AddFilesToMenu( wxMenu* menu )
1419 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1420 "AddFilesToMenu" ) )
1422 wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1423 G_SCALAR|G_DISCARD, "O", menu );
1426 wxFileHistory::AddFilesToMenu( menu );
1429 wxString wxPliFileHistory::GetHistoryFile( int i ) const
1432 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback,
1433 "GetHistoryFile" ) )
1435 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1438 WXSTRING_INPUT( retval, wxString, ret );
1439 SvREFCNT_dec( ret );
1442 return wxFileHistory::GetHistoryFile( i );
1445 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
1446 size_t wxPliFileHistory::GetCount() const
1448 int wxPliFileHistory::GetCount() const
1452 if( wxPliVirtualCallback_FindCallback( aTHX_ &m_callback, "GetCount" ) )
1454 SV* ret = wxPliVirtualCallback_CallCallback( aTHX_ &m_callback,
1455 G_SCALAR|G_NOARGS, NULL );
1456 #if WXPERL_W_VERSION_GE( 2, 5, 1 )
1457 int retval = (int)SvIV( ret );
1459 size_t retval = (size_t)SvIV( ret );
1461 SvREFCNT_dec( ret );
1464 return wxFileHistory::GetCount();
1468 WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliFileHistory, wxFileHistory );