prntbase.cpp
来自「A*算法 A*算法 A*算法 A*算法A*算法A*算法」· C++ 代码 · 共 1,523 行 · 第 1/3 页
CPP
1,523 行
/////////////////////////////////////////////////////////////////////////////
// Name: prntbase.cpp
// Purpose: Printing framework base class implementation
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id: prntbase.cpp,v 1.89 2005/07/28 22:20:03 VZ Exp $
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "prntbase.h"
#pragma implementation "printdlg.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "wx/defs.h"
#if wxUSE_PRINTING_ARCHITECTURE
#ifndef WX_PRECOMP
#include "wx/utils.h"
#include "wx/dc.h"
#include "wx/app.h"
#include "wx/msgdlg.h"
#include "wx/layout.h"
#include "wx/choice.h"
#include "wx/button.h"
#include "wx/settings.h"
#include "wx/dcmemory.h"
#include "wx/stattext.h"
#include "wx/intl.h"
#include "wx/textdlg.h"
#include "wx/sizer.h"
#endif // !WX_PRECOMP
#include "wx/prntbase.h"
#include "wx/dcprint.h"
#include "wx/printdlg.h"
#include "wx/print.h"
#include "wx/module.h"
#include <stdlib.h>
#include <string.h>
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
#include "wx/msw/printdlg.h"
#elif defined(__WXMAC__)
#include "wx/mac/printdlg.h"
#include "wx/mac/private/print.h"
#else
#include "wx/generic/prntdlgg.h"
#endif
#ifdef __WXMSW__
#include "wx/msw/wrapcdlg.h"
#ifndef __WIN32__
#include <print.h>
#endif
#endif // __WXMSW__
//----------------------------------------------------------------------------
// wxPrintFactory
//----------------------------------------------------------------------------
wxPrintFactory *wxPrintFactory::m_factory = NULL;
void wxPrintFactory::SetPrintFactory( wxPrintFactory *factory )
{
if (wxPrintFactory::m_factory)
delete wxPrintFactory::m_factory;
wxPrintFactory::m_factory = factory;
}
wxPrintFactory *wxPrintFactory::GetFactory()
{
if (!wxPrintFactory::m_factory)
wxPrintFactory::m_factory = new wxNativePrintFactory;
return wxPrintFactory::m_factory;
}
//----------------------------------------------------------------------------
// wxNativePrintFactory
//----------------------------------------------------------------------------
wxPrinterBase *wxNativePrintFactory::CreatePrinter( wxPrintDialogData *data )
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
return new wxWindowsPrinter( data );
#elif defined(__WXMAC__)
return new wxMacPrinter( data );
#elif defined(__WXPM__)
return new wxOS2Printer( data );
#else
return new wxPostScriptPrinter( data );
#endif
};
wxPrintPreviewBase *wxNativePrintFactory::CreatePrintPreview( wxPrintout *preview,
wxPrintout *printout, wxPrintDialogData *data )
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
return new wxWindowsPrintPreview( preview, printout, data );
#elif defined(__WXMAC__)
return new wxMacPrintPreview( preview, printout, data );
#elif defined(__WXPM__)
return new wxOS2PrintPreview( preview, printout, data );
#else
return new wxPostScriptPrintPreview( preview, printout, data );
#endif
}
wxPrintPreviewBase *wxNativePrintFactory::CreatePrintPreview( wxPrintout *preview,
wxPrintout *printout, wxPrintData *data )
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
return new wxWindowsPrintPreview( preview, printout, data );
#elif defined(__WXMAC__)
return new wxMacPrintPreview( preview, printout, data );
#elif defined(__WXPM__)
return new wxOS2PrintPreview( preview, printout, data );
#else
return new wxPostScriptPrintPreview( preview, printout, data );
#endif
}
wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
wxPrintDialogData *data )
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
return new wxWindowsPrintDialog( parent, data );
#elif defined(__WXMAC__)
return new wxMacPrintDialog( parent, data );
#else
return new wxGenericPrintDialog( parent, data );
#endif
}
wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
wxPrintData *data )
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
return new wxWindowsPrintDialog( parent, data );
#elif defined(__WXMAC__)
return new wxMacPrintDialog( parent, data );
#else
return new wxGenericPrintDialog( parent, data );
#endif
}
wxPageSetupDialogBase *wxNativePrintFactory::CreatePageSetupDialog( wxWindow *parent,
wxPageSetupDialogData *data )
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
return new wxWindowsPageSetupDialog( parent, data );
#elif defined(__WXMAC__)
return new wxMacPageSetupDialog( parent, data );
#else
return new wxGenericPageSetupDialog( parent, data );
#endif
}
bool wxNativePrintFactory::HasPrintSetupDialog()
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
return false;
#elif defined(__WXMAC__)
return false;
#else
// Only here do we need to provide the print setup
// dialog ourselves, the other platforms either have
// none, don't make it accessible or let you configure
// the printer from the wxPrintDialog anyway.
return true;
#endif
}
wxDialog *wxNativePrintFactory::CreatePrintSetupDialog( wxWindow *parent,
wxPrintData *data )
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
wxUnusedVar(parent);
wxUnusedVar(data);
return NULL;
#elif defined(__WXMAC__)
wxUnusedVar(parent);
wxUnusedVar(data);
return NULL;
#else
// Only here do we need to provide the print setup
// dialog ourselves, the other platforms either have
// none, don't make it accessible or let you configure
// the printer from the wxPrintDialog anyway.
return new wxGenericPrintSetupDialog( parent, data );
#endif
}
bool wxNativePrintFactory::HasOwnPrintToFile()
{
// Only relevant for PostScript and here the
// setup dialog provides no "print to file"
// option. In the GNOME setup dialog, the
// setup dialog has its own print to file.
return false;
}
bool wxNativePrintFactory::HasPrinterLine()
{
// Only relevant for PostScript for now
return true;
}
wxString wxNativePrintFactory::CreatePrinterLine()
{
// Only relevant for PostScript for now
// We should query "lpstat -d" here
return _("Generic PostScript");
}
bool wxNativePrintFactory::HasStatusLine()
{
// Only relevant for PostScript for now
return true;
}
wxString wxNativePrintFactory::CreateStatusLine()
{
// Only relevant for PostScript for now
// We should query "lpstat -r" or "lpstat -p" here
return _("Ready");
}
wxPrintNativeDataBase *wxNativePrintFactory::CreatePrintNativeData()
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
return new wxWindowsPrintNativeData;
#elif defined(__WXMAC__)
return new wxMacCarbonPrintData;
#else
return new wxPostScriptPrintNativeData;
#endif
}
//----------------------------------------------------------------------------
// wxPrintNativeDataBase
//----------------------------------------------------------------------------
IMPLEMENT_ABSTRACT_CLASS(wxPrintNativeDataBase, wxObject)
wxPrintNativeDataBase::wxPrintNativeDataBase()
{
m_ref = 1;
}
//----------------------------------------------------------------------------
// wxPrintFactoryModule
//----------------------------------------------------------------------------
class wxPrintFactoryModule: public wxModule
{
public:
wxPrintFactoryModule() {}
bool OnInit() { return true; }
void OnExit() { wxPrintFactory::SetPrintFactory( NULL ); }
private:
DECLARE_DYNAMIC_CLASS(wxPrintFactoryModule)
};
IMPLEMENT_DYNAMIC_CLASS(wxPrintFactoryModule, wxModule)
//----------------------------------------------------------------------------
// wxPrinterBase
//----------------------------------------------------------------------------
IMPLEMENT_CLASS(wxPrinterBase, wxObject)
wxPrinterBase::wxPrinterBase(wxPrintDialogData *data)
{
m_currentPrintout = (wxPrintout *) NULL;
sm_abortWindow = (wxWindow *) NULL;
sm_abortIt = false;
if (data)
m_printDialogData = (*data);
sm_lastError = wxPRINTER_NO_ERROR;
}
wxWindow *wxPrinterBase::sm_abortWindow = (wxWindow *) NULL;
bool wxPrinterBase::sm_abortIt = false;
wxPrinterError wxPrinterBase::sm_lastError = wxPRINTER_NO_ERROR;
wxPrinterBase::~wxPrinterBase()
{
}
wxWindow *wxPrinterBase::CreateAbortWindow(wxWindow *parent, wxPrintout * printout)
{
wxPrintAbortDialog *dialog = new wxPrintAbortDialog(parent, _("Printing ") , wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE);
wxBoxSizer *button_sizer = new wxBoxSizer( wxVERTICAL );
button_sizer->Add( new wxStaticText(dialog, wxID_ANY, _("Please wait while printing\n") + printout->GetTitle() ), 0, wxALL, 10 );
button_sizer->Add( new wxButton( dialog, wxID_CANCEL, wxT("Cancel") ), 0, wxALL | wxALIGN_CENTER, 10 );
dialog->SetAutoLayout( true );
dialog->SetSizer( button_sizer );
button_sizer->Fit(dialog);
button_sizer->SetSizeHints (dialog) ;
return dialog;
}
void wxPrinterBase::ReportError(wxWindow *parent, wxPrintout *WXUNUSED(printout), const wxString& message)
{
wxMessageBox(message, _("Printing Error"), wxOK, parent);
}
wxPrintDialogData& wxPrinterBase::GetPrintDialogData() const
{
return (wxPrintDialogData&) m_printDialogData;
}
//----------------------------------------------------------------------------
// wxPrinter
//----------------------------------------------------------------------------
IMPLEMENT_CLASS(wxPrinter, wxPrinterBase)
wxPrinter::wxPrinter(wxPrintDialogData *data)
{
m_pimpl = wxPrintFactory::GetFactory()->CreatePrinter( data );
}
wxPrinter::~wxPrinter()
{
delete m_pimpl;
}
wxWindow *wxPrinter::CreateAbortWindow(wxWindow *parent, wxPrintout *printout)
{
return m_pimpl->CreateAbortWindow( parent, printout );
}
void wxPrinter::ReportError(wxWindow *parent, wxPrintout *printout, const wxString& message)
{
m_pimpl->ReportError( parent, printout, message );
}
bool wxPrinter::Setup(wxWindow *parent)
{
return m_pimpl->Setup( parent );
}
bool wxPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
{
return m_pimpl->Print( parent, printout, prompt );
}
wxDC* wxPrinter::PrintDialog(wxWindow *parent)
{
return m_pimpl->PrintDialog( parent );
}
wxPrintDialogData& wxPrinter::GetPrintDialogData() const
{
return m_pimpl->GetPrintDialogData();
}
// ---------------------------------------------------------------------------
// wxPrintDialogBase: the dialog for printing.
// ---------------------------------------------------------------------------
IMPLEMENT_ABSTRACT_CLASS(wxPrintDialogBase, wxDialog)
wxPrintDialogBase::wxPrintDialogBase(wxWindow *parent,
wxWindowID id,
const wxString &title,
const wxPoint &pos,
const wxSize &size,
long style)
: wxDialog( parent, id, title.empty() ? wxString(_("Print")) : title,
pos, size, style )
{
}
// ---------------------------------------------------------------------------
// wxPrintDialog: the dialog for printing
// ---------------------------------------------------------------------------
IMPLEMENT_CLASS(wxPrintDialog, wxObject)
wxPrintDialog::wxPrintDialog(wxWindow *parent, wxPrintDialogData* data)
{
m_pimpl = wxPrintFactory::GetFactory()->CreatePrintDialog( parent, data );
}
wxPrintDialog::wxPrintDialog(wxWindow *parent, wxPrintData* data)
{
m_pimpl = wxPrintFactory::GetFactory()->CreatePrintDialog( parent, data );
}
wxPrintDialog::~wxPrintDialog()
{
delete m_pimpl;
}
int wxPrintDialog::ShowModal()
{
return m_pimpl->ShowModal();
}
wxPrintDialogData& wxPrintDialog::GetPrintDialogData()
{
return m_pimpl->GetPrintDialogData();
}
wxPrintData& wxPrintDialog::GetPrintData()
{
return m_pimpl->GetPrintData();
}
wxDC *wxPrintDialog::GetPrintDC()
{
return m_pimpl->GetPrintDC();
}
// ---------------------------------------------------------------------------
// wxPageSetupDialogBase: the page setup dialog
// ---------------------------------------------------------------------------
IMPLEMENT_ABSTRACT_CLASS(wxPageSetupDialogBase, wxDialog)
wxPageSetupDialogBase::wxPageSetupDialogBase(wxWindow *parent,
wxWindowID id,
const wxString &title,
const wxPoint &pos,
const wxSize &size,
long style)
: wxDialog( parent, id, title.empty() ? wxString(_("Page setup")) : title,
pos, size, style )
{
}
// ---------------------------------------------------------------------------
// wxPageSetupDialog: the page setup dialog
// ---------------------------------------------------------------------------
IMPLEMENT_CLASS(wxPageSetupDialog, wxObject)
wxPageSetupDialog::wxPageSetupDialog(wxWindow *parent, wxPageSetupDialogData *data )
{
m_pimpl = wxPrintFactory::GetFactory()->CreatePageSetupDialog( parent, data );
}
wxPageSetupDialog::~wxPageSetupDialog()
{
delete m_pimpl;
}
int wxPageSetupDialog::ShowModal()
{
return m_pimpl->ShowModal();
}
wxPageSetupDialogData& wxPageSetupDialog::GetPageSetupDialogData()
{
return m_pimpl->GetPageSetupDialogData();
}
// old name
wxPageSetupDialogData& wxPageSetupDialog::GetPageSetupData()
{
return m_pimpl->GetPageSetupDialogData();
}
//----------------------------------------------------------------------------
// wxPrintAbortDialog
//----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(wxPrintAbortDialog, wxDialog)
EVT_BUTTON(wxID_CANCEL, wxPrintAbortDialog::OnCancel)
END_EVENT_TABLE()
void wxPrintAbortDialog::OnCancel(wxCommandEvent& WXUNUSED(event))
{
wxPrinterBase::sm_abortIt = true;
wxPrinterBase::sm_abortWindow->Show(false);
wxPrinterBase::sm_abortWindow->Close(true);
wxPrinterBase::sm_abortWindow = (wxWindow *) NULL;
}
//----------------------------------------------------------------------------
// wxPrintout
//----------------------------------------------------------------------------
IMPLEMENT_ABSTRACT_CLASS(wxPrintout, wxObject)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?