/////////////////////////////////////////////////////////////////////////////
-// Name: prntbase.cpp
+// Name: src/common/prntbase.cpp
// Purpose: Printing framework base class implementation
// Author: Julian Smart
// Modified by:
// 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
+ #pragma hdrstop
#endif
-#include "wx/defs.h"
-
#if wxUSE_PRINTING_ARCHITECTURE
+#include "wx/dcprint.h"
+
#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"
+ #if defined(__WXMSW__)
+ #include "wx/msw/wrapcdlg.h"
+ #endif // MSW
+ #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"
+ #include "wx/module.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>
-#ifdef __WXMSW__
- #include "wx/msw/private.h"
- #include <commdlg.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__
#ifndef __WIN32__
#include <print.h>
#endif
#endif // __WXMSW__
-IMPLEMENT_CLASS(wxPrintPreviewBase, wxObject)
-
//----------------------------------------------------------------------------
// wxPrintFactory
//----------------------------------------------------------------------------
#else
return new wxPostScriptPrinter( data );
#endif
-};
+}
wxPrintPreviewBase *wxNativePrintFactory::CreatePrintPreview( wxPrintout *preview,
wxPrintout *printout, wxPrintDialogData *data )
#endif
}
-wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
+wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
wxPrintDialogData *data )
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
#endif
}
-wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
+wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
wxPrintData *data )
{
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
#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 wxMacPrintNativeData;
+ return new wxMacCarbonPrintData;
#else
return new wxPostScriptPrintNativeData;
#endif
IMPLEMENT_ABSTRACT_CLASS(wxPrintNativeDataBase, wxObject)
wxPrintNativeDataBase::wxPrintNativeDataBase()
-{
- m_ref = 1;
+{
+ 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
//----------------------------------------------------------------------------
}
// ---------------------------------------------------------------------------
-// wxPrintDialogBase: the common dialog for printing.
+// wxPrintDialogBase: the dialog for printing.
// ---------------------------------------------------------------------------
-IMPLEMENT_ABSTRACT_CLASS(wxPrintDialogBase, wxObject)
+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, pos, size, style )
+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 common dialog for printing.
+// wxPrintDialog: the dialog for printing
// ---------------------------------------------------------------------------
IMPLEMENT_CLASS(wxPrintDialog, wxObject)
{
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
//----------------------------------------------------------------------------
EVT_PAINT(wxPreviewCanvas::OnPaint)
EVT_CHAR(wxPreviewCanvas::OnChar)
EVT_SYS_COLOUR_CHANGED(wxPreviewCanvas::OnSysColourChanged)
+#if wxUSE_MOUSEWHEEL
+ EVT_MOUSEWHEEL(wxPreviewCanvas::OnMouseWheel)
+#endif
END_EVENT_TABLE()
// VZ: the current code doesn't refresh properly without
switch(event.GetKeyCode())
{
- case WXK_NEXT:
+ case WXK_PAGEDOWN:
controlBar->OnNext(); break;
- case WXK_PRIOR:
+ case WXK_PAGEUP:
controlBar->OnPrevious(); break;
case WXK_HOME:
controlBar->OnFirst(); break;
}
}
+#if wxUSE_MOUSEWHEEL
+
+void wxPreviewCanvas::OnMouseWheel(wxMouseEvent& event)
+{
+ wxPreviewControlBar *
+ controlBar = wxStaticCast(GetParent(), wxPreviewFrame)->GetControlBar();
+
+ if ( controlBar )
+ {
+ if ( event.ControlDown() && event.GetWheelRotation() != 0 )
+ {
+ int currentZoom = controlBar->GetZoomControl();
+
+ int delta;
+ if ( currentZoom < 100 )
+ delta = 5;
+ else if ( currentZoom <= 120 )
+ delta = 10;
+ else
+ delta = 50;
+
+ if ( event.GetWheelRotation() > 0 )
+ delta = -delta;
+
+ int newZoom = currentZoom + delta;
+ if ( newZoom < 10 )
+ newZoom = 10;
+ if ( newZoom > 200 )
+ newZoom = 200;
+ if ( newZoom != currentZoom )
+ {
+ controlBar->SetZoomControl(newZoom);
+ m_printPreview->SetZoom(newZoom);
+ Refresh();
+ }
+ return;
+ }
+ }
+
+ event.Skip();
+}
+
+#endif // wxUSE_MOUSEWHEEL
+
//----------------------------------------------------------------------------
// wxPreviewControlBar
//----------------------------------------------------------------------------
if (m_printPreview->GetPrintoutForPrinting())
buttons |= wxPREVIEW_PRINT;
- m_controlBar = new wxPreviewControlBar(m_printPreview, buttons, this, wxPoint(0, 0), wxSize(400, 40));
+ m_controlBar = new wxPreviewControlBar(m_printPreview, buttons, this, wxPoint(0,0), wxSize(400, 40));
m_controlBar->CreateButtons();
}
* Print preview
*/
+IMPLEMENT_CLASS(wxPrintPreviewBase, wxObject)
+
wxPrintPreviewBase::wxPrintPreviewBase(wxPrintout *printout,
wxPrintout *printoutForPrinting,
wxPrintData *data)
}
int wxPrintPreviewBase::GetCurrentPage() const
- { return m_currentPage; };
+ { return m_currentPage; }
void wxPrintPreviewBase::SetPrintout(wxPrintout *printout)
- { m_previewPrintout = printout; };
+ { m_previewPrintout = printout; }
wxPrintout *wxPrintPreviewBase::GetPrintout() const
- { return m_previewPrintout; };
+ { return m_previewPrintout; }
wxPrintout *wxPrintPreviewBase::GetPrintoutForPrinting() const
- { return m_printPrintout; };
+ { return m_printPrintout; }
void wxPrintPreviewBase::SetFrame(wxFrame *frame)
- { m_previewFrame = frame; };
+ { m_previewFrame = frame; }
void wxPrintPreviewBase::SetCanvas(wxPreviewCanvas *canvas)
- { m_previewCanvas = canvas; };
+ { m_previewCanvas = canvas; }
wxFrame *wxPrintPreviewBase::GetFrame() const
{ return m_previewFrame; }
wxPreviewCanvas *wxPrintPreviewBase::GetCanvas() const
m_pimpl->SetZoom( percent );
}
+int wxPrintPreview::GetZoom() const
+{
+ return m_pimpl->GetZoom();
+}
+
wxPrintDialogData& wxPrintPreview::GetPrintDialogData()
{
return m_pimpl->GetPrintDialogData();
m_pimpl->DetermineScaling();
}
-
#endif // wxUSE_PRINTING_ARCHITECTURE