more backwards compatibility

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1997 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 1999-03-29 16:43:40 +00:00
parent c27eab7e9c
commit 8826f46f0d
5 changed files with 488 additions and 374 deletions

View File

@ -9,66 +9,82 @@
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "cmndata.h"
#pragma implementation "cmndata.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include <stdio.h>
#include "wx/string.h"
#include "wx/utils.h"
#include "wx/app.h"
#include <stdio.h>
#include "wx/string.h"
#include "wx/utils.h"
#include "wx/app.h"
#endif
#include "wx/gdicmn.h"
#include "wx/cmndata.h"
#include "wx/paper.h"
// For compatibility
#if (defined(__WXMOTIF__) || defined(__WXGTK__)) && wxUSE_POSTSCRIPT
#include "wx/generic/dcpsg.h"
#define wxCOMPATIBILITY_WITH_PRINTSETUPDATA 1
#endif
#if wxCOMPATIBILITY_WITH_PRINTSETUPDATA
#include "wx/generic/dcpsg.h"
#endif
#ifdef __WXMSW__
#include <windows.h>
#include <windows.h>
#if !defined(__WIN32__)
#include <print.h>
#include <commdlg.h>
#endif
#if !defined(__WIN32__)
#include <print.h>
#include <commdlg.h>
#endif // Win16
#if defined(__WATCOMC__) || defined(__SC__) || defined(__SALFORDC__)
#include <windowsx.h>
#include <commdlg.h>
#endif
#endif
#if defined(__WATCOMC__) || defined(__SC__) || defined(__SALFORDC__)
#include <windowsx.h>
#include <commdlg.h>
#endif
#endif // MSW
#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxPrintData, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxPrintDialogData, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxPageSetupDialogData, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxFontData, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxColourData, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxPrintData, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxPrintDialogData, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxPageSetupDialogData, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxFontData, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxColourData, wxObject)
#endif
/*
* wxColourData
*/
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// wxColourData
// ----------------------------------------------------------------------------
wxColourData::wxColourData()
{
int i;
for (i = 0; i < 16; i++)
custColours[i].Set(255, 255, 255);
chooseFull = FALSE;
dataColour.Set(0,0,0);
}
@ -86,7 +102,7 @@ void wxColourData::SetCustomColour(int i, wxColour& colour)
{
if (i > 15 || i < 0)
return;
custColours[i] = colour;
}
@ -94,7 +110,7 @@ wxColour wxColourData::GetCustomColour(int i)
{
if (i > 15 || i < 0)
return wxColour(0,0,0);
return custColours[i];
}
@ -103,20 +119,20 @@ void wxColourData::operator=(const wxColourData& data)
int i;
for (i = 0; i < 16; i++)
custColours[i] = data.custColours[i];
dataColour = (wxColour&)data.dataColour;
chooseFull = data.chooseFull;
}
/*
* Font data
*/
// ----------------------------------------------------------------------------
// Font data
// ----------------------------------------------------------------------------
wxFontData::wxFontData()
{
// Intialize colour to black.
fontColour.Set(0, 0, 0);
showHelp = FALSE;
allowSymbols = TRUE;
enableEffects = TRUE;
@ -145,9 +161,9 @@ void wxFontData::operator=(const wxFontData& data)
maxSize = data.maxSize;
}
/*
* Print data
*/
// ----------------------------------------------------------------------------
// Print data
// ----------------------------------------------------------------------------
wxPrintData::wxPrintData()
{
@ -157,7 +173,7 @@ wxPrintData::wxPrintData()
m_printOrientation = wxPORTRAIT;
m_printNoCopies = 1;
m_printCollate = FALSE;
// New, 24/3/99
m_printerName = "";
m_colour = TRUE;
@ -209,7 +225,7 @@ void wxPrintData::ConvertToNative()
{
// Use PRINTDLG as a way of creating a DEVMODE object
PRINTDLG *pd = new PRINTDLG;
// GNU-WIN32 has the wrong size PRINTDLG - can't work out why.
#ifdef __GNUWIN32__
pd->lStructSize = 66 ;
@ -222,10 +238,10 @@ void wxPrintData::ConvertToNative()
pd->hwndOwner = (HWND)NULL;
pd->hDevMode = NULL; // Will be created by PrintDlg
pd->hDevNames = NULL; // Ditto
pd->Flags = PD_RETURNDEFAULT;
pd->nCopies = 1;
// Fill out the DEVMODE structure
// so we can use it as input in the 'real' PrintDlg
if (!PrintDlg(pd))
@ -250,28 +266,28 @@ void wxPrintData::ConvertToNative()
delete pd;
}
if ( hDevMode )
{
DEVMODE *devMode = (DEVMODE*) GlobalLock(hDevMode);
//// Orientation
devMode->dmOrientation = m_printOrientation;
devMode->dmFields = DM_ORIENTATION;
//// Collation
devMode->dmCollate = (m_printCollate ? DMCOLLATE_TRUE : DMCOLLATE_FALSE);
devMode->dmFields |= DM_COLLATE;
//// Number of copies
devMode->dmCopies = m_printNoCopies;
devMode->dmFields |= DM_COPIES;
//// Printer name
if (m_printerName != "")
{
// TODO: make this Unicode compatible
@ -281,18 +297,18 @@ void wxPrintData::ConvertToNative()
devMode->dmDeviceName[i] = m_printerName.GetChar(i);
devMode->dmDeviceName[i] = 0;
}
//// Colour
if (m_colour)
devMode->dmColor = DMCOLOR_COLOR;
else
devMode->dmColor = DMCOLOR_MONOCHROME;
devMode->dmFields |= DM_COLOR;
//// Paper size
if (m_paperId == wxPAPER_NONE)
{
devMode->dmPaperWidth = m_paperSize.x * 10;
@ -312,9 +328,9 @@ void wxPrintData::ConvertToNative()
}
}
}
//// Duplex
int duplex;
switch (m_duplexMode)
{
@ -331,9 +347,9 @@ void wxPrintData::ConvertToNative()
}
devMode->dmDuplex = duplex;
devMode->dmFields |= DM_DUPLEX;
//// Quality
int quality;
switch (m_printQuality)
{
@ -355,7 +371,7 @@ void wxPrintData::ConvertToNative()
}
devMode->dmPrintQuality = quality;
devMode->dmFields |= DM_PRINTQUALITY;
GlobalUnlock(hDevMode);
}
}
@ -370,14 +386,14 @@ void wxPrintData::ConvertFromNative()
if ( hDevMode )
{
DEVMODE *devMode = (DEVMODE*) GlobalLock(hDevMode);
//// Orientation
if (devMode->dmFields & DM_ORIENTATION)
m_printOrientation = devMode->dmOrientation;
//// Collation
if (devMode->dmFields & DM_COLLATE)
{
if (devMode->dmCollate == DMCOLLATE_TRUE)
@ -385,16 +401,16 @@ void wxPrintData::ConvertFromNative()
else
m_printCollate = FALSE;
}
//// Number of copies
if (devMode->dmFields & DM_COPIES)
{
m_printNoCopies = devMode->dmCopies;
}
//// Printer name
if (devMode->dmDeviceName[0] != 0)
{
// TODO: make this Unicode compatible
@ -406,12 +422,12 @@ void wxPrintData::ConvertFromNative()
i ++;
}
buf[i] = 0;
m_printerName = buf;
}
//// Colour
if (devMode->dmFields & DM_COLOR)
{
if (devMode->dmColor == DMCOLOR_COLOR)
@ -421,9 +437,9 @@ void wxPrintData::ConvertFromNative()
}
else
m_colour = TRUE;
//// Paper size
if (devMode->dmFields & DM_PAPERSIZE)
{
if (wxThePrintPaperDatabase)
@ -439,7 +455,7 @@ void wxPrintData::ConvertFromNative()
{
// Shouldn't really get here
wxFAIL_MSG("Couldn't find paper size in paper database.");
m_paperId = wxPAPER_NONE;
m_paperSize.x = 0;
m_paperSize.y = 0;
@ -449,7 +465,7 @@ void wxPrintData::ConvertFromNative()
{
// Shouldn't really get here
wxFAIL_MSG("Paper database wasn't initialized in wxPrintData::ConvertFromNative.");
m_paperId = wxPAPER_NONE;
m_paperSize.x = 0;
m_paperSize.y = 0;
@ -465,15 +481,15 @@ void wxPrintData::ConvertFromNative()
{
// Shouldn't really get here
wxFAIL_MSG("Couldn't find paper size from DEVMODE.");
m_paperSize.x = 0;
m_paperSize.y = 0;
m_paperId = wxPAPER_NONE;
}
//// Duplex
if (devMode->dmFields & DM_DUPLEX)
{
switch (devMode->dmDuplex)
@ -492,9 +508,9 @@ void wxPrintData::ConvertFromNative()
}
else
m_duplexMode = wxDUPLEX_SIMPLEX;
//// Quality
if (devMode->dmFields & DM_PRINTQUALITY)
{
switch (devMode->dmPrintQuality)
@ -517,13 +533,13 @@ void wxPrintData::ConvertFromNative()
// will the application know if it's high, low, draft etc.??
// wxFAIL_MSG("Warning: DM_PRINTQUALITY was not one of the standard values.");
m_printQuality = devMode->dmPrintQuality; break;
}
}
}
else
m_printQuality = wxPRINT_QUALITY_HIGH;
GlobalUnlock(hDevMode);
}
}
@ -556,7 +572,7 @@ void wxPrintData::operator=(const wxPrintData& data)
}
// For compatibility
#if (defined(__WXMOTIF__) || defined(__WXGTK__)) && wxUSE_POSTSCRIPT
#if wxCOMPATIBILITY_WITH_PRINTSETUPDATA
void wxPrintData::operator=(const wxPrintSetupData& setupData)
{
SetPrinterCommand(setupData.GetPrinterCommand());
@ -579,12 +595,12 @@ void wxPrintData::operator=(const wxPrintSetupData& setupData)
SetColour(setupData.GetColour());
SetFilename(setupData.GetPrinterFile());
}
#endif
#endif // wxCOMPATIBILITY_WITH_PRINTSETUPDATA
/*
* Print dialog data
*/
// ----------------------------------------------------------------------------
// Print dialog data
// ----------------------------------------------------------------------------
wxPrintDialogData::wxPrintDialogData()
{
@ -689,7 +705,7 @@ void wxPrintDialogData::ConvertToNative()
pd->nMinPage = (UINT)m_printMinPage;
pd->nMaxPage = (UINT)m_printMaxPage;
pd->nCopies = (UINT)m_printNoCopies;
pd->Flags = PD_RETURNDC ;
#ifdef __GNUWIN32__
@ -708,7 +724,7 @@ void wxPrintDialogData::ConvertToNative()
pd->lpSetupTemplateName = NULL;
pd->hPrintTemplate = (HGLOBAL) NULL;
pd->hSetupTemplate = (HGLOBAL) NULL;
if ( m_printAllPages )
pd->Flags |= PD_ALLPAGES;
if ( m_printCollate )
@ -754,7 +770,7 @@ void wxPrintDialogData::ConvertFromNative()
m_printMinPage = pd->nMinPage ;
m_printMaxPage = pd->nMaxPage ;
m_printNoCopies = pd->nCopies ;
m_printAllPages = ((pd->Flags & PD_ALLPAGES) == PD_ALLPAGES);
m_printCollate = ((pd->Flags & PD_COLLATE) == PD_COLLATE);
m_printToFile = ((pd->Flags & PD_PRINTTOFILE) == PD_PRINTTOFILE);
@ -773,7 +789,7 @@ void wxPrintDialogData::ConvertFromNative()
m_printData.SetPortName((LPSTR)lpDevNames + lpDevNames->wDriverOffset);
wxString devName = (LPSTR)lpDevNames + lpDevNames->wDeviceOffset;
GlobalUnlock(pd->hDevNames);
// wxASSERT_MSG( (m_printerName == "" || (devName == m_printerName)), "Printer name obtained from DEVMODE and DEVNAMES were different!");
}
}
@ -784,14 +800,14 @@ void wxPrintDialogData::SetOwnerWindow(wxWindow* win)
{
if ( m_printDlgData == NULL )
ConvertToNative();
if ( m_printDlgData != NULL && win != NULL)
{
PRINTDLG *pd = (PRINTDLG *) m_printDlgData ;
pd->hwndOwner=(HWND) win->GetHWND();
}
}
#endif
#endif // MSW
void wxPrintDialogData::operator=(const wxPrintDialogData& data)
{
@ -817,9 +833,9 @@ void wxPrintDialogData::operator=(const wxPrintData& data)
m_printData = data;
}
/*
* wxPageSetupDialogData
*/
// ----------------------------------------------------------------------------
// wxPageSetupDialogData
// ----------------------------------------------------------------------------
wxPageSetupDialogData::wxPageSetupDialogData()
{
@ -911,7 +927,7 @@ void wxPageSetupDialogData::operator=(const wxPrintData& data)
m_printData = data;
}
#if defined(__WXMSW__) && defined(__WIN95__)
#if defined(__WIN95__)
void wxPageSetupDialogData::ConvertToNative()
{
m_printData.ConvertToNative();
@ -945,7 +961,7 @@ void wxPageSetupDialogData::ConvertToNative()
// pd->hDevMode = GlobalAlloc(GMEM_MOVEABLE, sizeof(DEVMODE));
pd->Flags = PSD_MARGINS|PSD_MINMARGINS;
if ( m_defaultMinMargins )
pd->Flags |= PSD_DEFAULTMINMARGINS;
if ( !m_enableMargins )
@ -968,27 +984,27 @@ void wxPageSetupDialogData::ConvertToNative()
pd->hwndOwner=(HWND)NULL;
pd->hDevNames=(HWND)NULL;
pd->hInstance=(HINSTANCE)NULL;
pd->ptPaperSize.x = m_paperSize.x * 100;
pd->ptPaperSize.y = m_paperSize.y * 100;
pd->rtMinMargin.left = m_minMarginTopLeft.x * 100;
pd->rtMinMargin.top = m_minMarginTopLeft.y * 100;
pd->rtMinMargin.right = m_minMarginBottomRight.x * 100;
pd->rtMinMargin.bottom = m_minMarginBottomRight.y * 100;
pd->rtMargin.left = m_marginTopLeft.x * 100;
pd->rtMargin.top = m_marginTopLeft.y * 100;
pd->rtMargin.right = m_marginBottomRight.x * 100;
pd->rtMargin.bottom = m_marginBottomRight.y * 100;
pd->lCustData = 0;
pd->lpfnPageSetupHook = NULL;
pd->lpfnPagePaintHook = NULL;
pd->hPageSetupTemplate = NULL;
pd->lpPageSetupTemplateName = NULL;
/*
/*
if ( pd->hDevMode )
{
DEVMODE *devMode = (DEVMODE*) GlobalLock(pd->hDevMode);
@ -1006,7 +1022,7 @@ void wxPageSetupDialogData::ConvertFromNative()
PAGESETUPDLG *pd = (PAGESETUPDLG *) m_pageSetupData ;
if ( !pd )
return;
// Pass the devmode data back to the wxPrintData structure where it really belongs.
if (pd->hDevMode)
{
@ -1022,7 +1038,7 @@ void wxPageSetupDialogData::ConvertFromNative()
m_printData.ConvertFromNative();
pd->Flags = PSD_MARGINS|PSD_MINMARGINS;
m_defaultMinMargins = ((pd->Flags & PSD_DEFAULTMINMARGINS) == PSD_DEFAULTMINMARGINS);
m_enableMargins = ((pd->Flags & PSD_DISABLEMARGINS) != PSD_DISABLEMARGINS);
m_enableOrientation = ((pd->Flags & PSD_DISABLEORIENTATION) != PSD_DISABLEORIENTATION);
@ -1030,15 +1046,15 @@ void wxPageSetupDialogData::ConvertFromNative()
m_enablePrinter = ((pd->Flags & PSD_DISABLEPRINTER) != PSD_DISABLEPRINTER);
m_getDefaultInfo = ((pd->Flags & PSD_RETURNDEFAULT) == PSD_RETURNDEFAULT);
m_enableHelp = ((pd->Flags & PSD_SHOWHELP) == PSD_SHOWHELP);
m_paperSize.x = pd->ptPaperSize.x / 100;
m_paperSize.y = pd->ptPaperSize.y / 100;
m_minMarginTopLeft.x = pd->rtMinMargin.left / 100;
m_minMarginTopLeft.y = pd->rtMinMargin.top / 100;
m_minMarginBottomRight.x = pd->rtMinMargin.right / 100;
m_minMarginBottomRight.y = pd->rtMinMargin.bottom / 100;
m_marginTopLeft.x = pd->rtMargin.left / 100 ;
m_marginTopLeft.y = pd->rtMargin.top / 100 ;
m_marginBottomRight.x = pd->rtMargin.right / 100 ;
@ -1049,14 +1065,14 @@ void wxPageSetupDialogData::SetOwnerWindow(wxWindow* win)
{
if ( m_pageSetupData == NULL )
ConvertToNative();
if ( m_pageSetupData != NULL && win != NULL)
{
PAGESETUPDLG *pd = (PAGESETUPDLG *) m_pageSetupData ;
pd->hwndOwner=(HWND) win->GetHWND();
}
}
#endif
#endif // Win95
// If a corresponding paper type is found in the paper database, will set the m_printData
// paper size id member as well.
@ -1079,7 +1095,9 @@ void wxPageSetupDialogData::SetPaperSize(wxPaperSize id)
// paper id
void wxPageSetupDialogData::CalculateIdFromPaperSize()
{
wxASSERT_MSG( (wxThePrintPaperDatabase != (wxPrintPaperDatabase*) NULL), "wxThePrintPaperDatabase should not be NULL. Do not create global print dialog data objects." );
wxASSERT_MSG( (wxThePrintPaperDatabase != (wxPrintPaperDatabase*) NULL),
"wxThePrintPaperDatabase should not be NULL. "
"Do not create global print dialog data objects." );
wxSize sz = GetPaperSize();
@ -1089,11 +1107,13 @@ void wxPageSetupDialogData::CalculateIdFromPaperSize()
m_printData.SetPaperId(id);
}
}
// Use paper id in wxPrintData to set this object's paper size
void wxPageSetupDialogData::CalculatePaperSizeFromId()
{
wxASSERT_MSG( (wxThePrintPaperDatabase != (wxPrintPaperDatabase*) NULL), "wxThePrintPaperDatabase should not be NULL. Do not create global print dialog data objects." );
wxASSERT_MSG( (wxThePrintPaperDatabase != (wxPrintPaperDatabase*) NULL),
"wxThePrintPaperDatabase should not be NULL. "
"Do not create global print dialog data objects." );
wxSize sz = wxThePrintPaperDatabase->GetSize(m_printData.GetPaperId());
@ -1104,3 +1124,4 @@ void wxPageSetupDialogData::CalculatePaperSizeFromId()
m_paperSize.y = sz.y * 10;
}
}

View File

@ -6,7 +6,7 @@
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
// Licence: wxWindows license
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
@ -110,12 +110,12 @@ wxWindow *wxPrinterBase::CreateAbortWindow(wxWindow *parent, wxPrintout *WXUNUSE
{
wxPrintAbortDialog *dialog = new wxPrintAbortDialog(parent, _("Printing"), wxPoint(0, 0), wxSize(400, 400), wxDEFAULT_DIALOG_STYLE);
(void) new wxStaticText(dialog, -1, _("Please wait..."), wxPoint(5, 5));
wxButton *button = new wxButton(dialog, wxID_CANCEL, _("Cancel"), wxPoint(5, 30));
dialog->Fit();
button->Centre(wxHORIZONTAL);
dialog->Centre();
return dialog;
}
@ -189,7 +189,7 @@ wxScrolledWindow(parent, -1, pos, size, style, name)
{
m_printPreview = preview;
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE));
SetScrollbars(15, 18, 100, 100);
}
@ -201,7 +201,7 @@ void wxPreviewCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
{
wxPaintDC dc(this);
PrepareDC( dc );
if (m_printPreview)
{
m_printPreview->PaintPage(this, dc);
@ -213,7 +213,7 @@ void wxPreviewCanvas::OnSysColourChanged(wxSysColourChangedEvent& event)
{
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE));
Refresh();
// Propagate the event to the non-top-level children
wxWindow::OnSysColourChanged(event);
}
@ -223,12 +223,12 @@ void wxPreviewCanvas::OnSysColourChanged(wxSysColourChangedEvent& event)
*/
BEGIN_EVENT_TABLE(wxPreviewControlBar, wxPanel)
EVT_BUTTON(wxID_PREVIEW_CLOSE, wxPreviewControlBar::OnWindowClose)
EVT_BUTTON(wxID_PREVIEW_PRINT, wxPreviewControlBar::OnPrint)
EVT_BUTTON(wxID_PREVIEW_PREVIOUS, wxPreviewControlBar::OnPrevious)
EVT_BUTTON(wxID_PREVIEW_NEXT, wxPreviewControlBar::OnNext)
EVT_CHOICE(wxID_PREVIEW_ZOOM, wxPreviewControlBar::OnZoom)
EVT_PAINT(wxPreviewControlBar::OnPaint)
EVT_BUTTON(wxID_PREVIEW_CLOSE, wxPreviewControlBar::OnWindowClose)
EVT_BUTTON(wxID_PREVIEW_PRINT, wxPreviewControlBar::OnPrint)
EVT_BUTTON(wxID_PREVIEW_PREVIOUS, wxPreviewControlBar::OnPrevious)
EVT_BUTTON(wxID_PREVIEW_NEXT, wxPreviewControlBar::OnNext)
EVT_CHOICE(wxID_PREVIEW_ZOOM, wxPreviewControlBar::OnZoom)
EVT_PAINT(wxPreviewControlBar::OnPaint)
END_EVENT_TABLE()
wxPreviewControlBar::wxPreviewControlBar(wxPrintPreviewBase *preview, long buttons,
@ -252,7 +252,7 @@ wxPreviewControlBar::~wxPreviewControlBar()
void wxPreviewControlBar::OnPaint(wxPaintEvent& WXUNUSED(event))
{
wxPaintDC dc(this);
int w, h;
GetSize(&w, &h);
dc.SetPen(*wxBLACK_PEN);
@ -312,60 +312,60 @@ void wxPreviewControlBar::OnZoom(wxCommandEvent& WXUNUSED(event))
void wxPreviewControlBar::CreateButtons()
{
SetSize(0, 0, 400, 40);
/*
#ifdef __WXMSW__
int fontSize = 9;
#else
int fontSize = 10;
#endif
wxFont buttonFont(fontSize, wxSWISS, wxNORMAL, wxBOLD);
SetFont(buttonFont);
*/
int buttonWidth = 65;
#ifdef __WXGTK__
int buttonHeight = -1;
#else
int buttonHeight = 24;
#endif
int x = 5;
int y = 5;
#ifdef __WXMOTIF__
int gap = 15;
#else
int gap = 5;
#endif
m_closeButton = new wxButton(this, wxID_PREVIEW_CLOSE, _("Close"),
wxPoint(x, y), wxSize(buttonWidth, buttonHeight));
x += gap + buttonWidth;
if (m_buttonFlags & wxPREVIEW_PRINT)
{
m_printButton = new wxButton(this, wxID_PREVIEW_PRINT, _("Print..."), wxPoint(x, y),
wxSize(buttonWidth, buttonHeight));
x += gap + buttonWidth;
}
if (m_buttonFlags & wxPREVIEW_PREVIOUS)
{
m_previousPageButton = new wxButton(this, wxID_PREVIEW_PREVIOUS, "<<", wxPoint(x, y),
wxSize(buttonWidth, buttonHeight));
x += gap + buttonWidth;
}
if (m_buttonFlags & wxPREVIEW_NEXT)
{
m_nextPageButton = new wxButton(this, wxID_PREVIEW_NEXT, ">>",
wxPoint(x, y), wxSize(buttonWidth, buttonHeight));
x += gap + buttonWidth;
}
// Yes, this look stupid, but this is because gcc gives up otherwise.
wxString *choices = new wxString[23];
choices[0] = "10%";
@ -391,7 +391,7 @@ void wxPreviewControlBar::CreateButtons()
choices[20] = "120%";
choices[21] = "150%";
choices[22] = "200%";
int n = 23;
if (m_buttonFlags & wxPREVIEW_ZOOM)
{
@ -399,9 +399,9 @@ void wxPreviewControlBar::CreateButtons()
wxSize(100, -1), n, (wxString *)choices);
SetZoomControl(m_printPreview->GetZoom());
}
delete[] choices;
// m_closeButton->SetDefault();
}
@ -450,7 +450,7 @@ wxPreviewFrame::~wxPreviewFrame()
void wxPreviewFrame::OnCloseWindow(wxCloseEvent& event)
{
MakeModal(FALSE);
// Need to delete the printout and the print preview
wxPrintout *printout = m_printPreview->GetPrintout();
if (printout)
@ -461,22 +461,22 @@ void wxPreviewFrame::OnCloseWindow(wxCloseEvent& event)
m_printPreview->SetFrame(NULL);
}
delete m_printPreview;
Destroy();
}
void wxPreviewFrame::Initialize()
{
CreateStatusBar();
CreateCanvas();
CreateControlBar();
m_printPreview->SetCanvas(m_previewCanvas);
m_printPreview->SetFrame(this);
// Set layout constraints here
// Control bar constraints
wxLayoutConstraints *c1 = new wxLayoutConstraints;
// int w, h;
@ -487,28 +487,28 @@ void wxPreviewFrame::Initialize()
#else
h = 60;
#endif
c1->left.SameAs (this, wxLeft);
c1->top.SameAs (this, wxTop);
c1->right.SameAs (this, wxRight);
c1->height.Absolute (h);
m_controlBar->SetConstraints(c1);
// Canvas constraints
wxLayoutConstraints *c2 = new wxLayoutConstraints;
c2->left.SameAs (this, wxLeft);
c2->top.Below (m_controlBar);
c2->right.SameAs (this, wxRight);
c2->bottom.SameAs (this, wxBottom);
m_previewCanvas->SetConstraints(c2);
SetAutoLayout(TRUE);
MakeModal(TRUE);
Layout();
}
@ -522,7 +522,7 @@ void wxPreviewFrame::CreateControlBar()
long buttons = wxPREVIEW_DEFAULT;
if (m_printPreview->GetPrintoutForPrinting())
buttons |= wxPREVIEW_PRINT;
m_controlBar = new wxPreviewControlBar(m_printPreview, buttons, this, wxPoint(0, 0), wxSize(400, 40));
m_controlBar->CreateButtons();
}
@ -531,17 +531,36 @@ void wxPreviewFrame::CreateControlBar()
* Print preview
*/
wxPrintPreviewBase::wxPrintPreviewBase(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintDialogData *data)
wxPrintPreviewBase::wxPrintPreviewBase(wxPrintout *printout,
wxPrintout *printoutForPrinting,
wxPrintData *data)
{
if (data)
m_printDialogData = (*data);
Init(printout, printoutForPrinting);
}
wxPrintPreviewBase::wxPrintPreviewBase(wxPrintout *printout,
wxPrintout *printoutForPrinting,
wxPrintDialogData *data)
{
if (data)
m_printDialogData = (*data);
Init(printout, printoutForPrinting);
}
void wxPrintPreviewBase::Init(wxPrintout *printout,
wxPrintout *printoutForPrinting)
{
m_isOk = TRUE;
m_previewPrintout = printout;
if (m_previewPrintout)
m_previewPrintout->SetIsPreview(TRUE);
m_printPrintout = printoutForPrinting;
if (data)
m_printDialogData = (*data);
m_previewCanvas = NULL;
m_previewFrame = NULL;
m_previewBitmap = NULL;
@ -551,9 +570,9 @@ wxPrintPreviewBase::wxPrintPreviewBase(wxPrintout *printout, wxPrintout *printou
m_leftMargin = 40;
m_pageWidth = 0;
m_pageHeight = 0;
printout->OnPreparePrinting();
// Get some parameters from the printout, if defined
int selFrom, selTo;
printout->GetPageInfo(&m_minPage, &m_maxPage, &selFrom, &selTo);
@ -573,14 +592,14 @@ bool wxPrintPreviewBase::SetCurrentPage(int pageNum)
{
if (m_currentPage == pageNum)
return TRUE;
m_currentPage = pageNum;
if (m_previewBitmap)
{
delete m_previewBitmap;
m_previewBitmap = NULL;
}
if (m_previewCanvas)
{
RenderPage(pageNum);
@ -592,42 +611,42 @@ bool wxPrintPreviewBase::SetCurrentPage(int pageNum)
bool wxPrintPreviewBase::PaintPage(wxWindow *canvas, wxDC& dc)
{
DrawBlankPage(canvas, dc);
if (!m_previewBitmap)
RenderPage(m_currentPage);
if (!m_previewBitmap)
return FALSE;
if (!canvas)
return FALSE;
int canvasWidth, canvasHeight;
canvas->GetSize(&canvasWidth, &canvasHeight);
double zoomScale = ((float)m_currentZoom/(float)100);
double actualWidth = (zoomScale*m_pageWidth*m_previewScale);
// float actualHeight = (float)(zoomScale*m_pageHeight*m_previewScale);
int x = (int) ((canvasWidth - actualWidth)/2.0);
if (x < m_leftMargin)
x = m_leftMargin;
int y = m_topMargin;
wxMemoryDC temp_dc;
temp_dc.SelectObject(*m_previewBitmap);
dc.Blit(x, y, m_previewBitmap->GetWidth(), m_previewBitmap->GetHeight(), &temp_dc, 0, 0);
temp_dc.SelectObject(wxNullBitmap);
return TRUE;
}
bool wxPrintPreviewBase::RenderPage(int pageNum)
{
int canvasWidth, canvasHeight;
if (!m_previewCanvas)
{
wxMessageBox(_("wxPrintPreviewBase::RenderPage: must use wxPrintPreviewBase::SetCanvas to let me know about the canvas!"),
@ -635,17 +654,17 @@ bool wxPrintPreviewBase::RenderPage(int pageNum)
return FALSE;
}
m_previewCanvas->GetSize(&canvasWidth, &canvasHeight);
double zoomScale = (m_currentZoom/100.0);
int actualWidth = (int)(zoomScale*m_pageWidth*m_previewScale);
int actualHeight = (int)(zoomScale*m_pageHeight*m_previewScale);
int x = (int)((canvasWidth - actualWidth)/2.0);
if (x < m_leftMargin)
x = m_leftMargin;
// int y = m_topMargin;
if (!m_previewBitmap)
{
m_previewBitmap = new wxBitmap((int)actualWidth, (int)actualHeight);
@ -657,44 +676,44 @@ bool wxPrintPreviewBase::RenderPage(int pageNum)
return FALSE;
}
}
wxMemoryDC memoryDC;
memoryDC.SelectObject(*m_previewBitmap);
memoryDC.Clear();
m_previewPrintout->SetDC(&memoryDC);
m_previewPrintout->SetPageSizePixels(m_pageWidth, m_pageHeight);
m_previewPrintout->OnBeginPrinting();
if (!m_previewPrintout->OnBeginDocument(m_printDialogData.GetFromPage(), m_printDialogData.GetToPage()))
{
wxMessageBox(_("Could not start document preview."), _("Print Preview Failure"), wxOK);
memoryDC.SelectObject(wxNullBitmap);
delete m_previewBitmap;
return FALSE;
}
m_previewPrintout->OnPrintPage(pageNum);
m_previewPrintout->OnEndDocument();
m_previewPrintout->OnEndPrinting();
m_previewPrintout->SetDC(NULL);
memoryDC.SelectObject(wxNullBitmap);
char buf[200];
if (m_maxPage != 0)
sprintf(buf, _("Page %d of %d"), pageNum, m_maxPage);
else
sprintf(buf, _("Page %d"), pageNum);
if (m_previewFrame)
m_previewFrame->SetStatusText(buf);
return TRUE;
}
@ -703,16 +722,16 @@ bool wxPrintPreviewBase::DrawBlankPage(wxWindow *canvas, wxDC& dc)
{
int canvasWidth, canvasHeight;
canvas->GetSize(&canvasWidth, &canvasHeight);
float zoomScale = (float)((float)m_currentZoom/(float)100);
float actualWidth = zoomScale*m_pageWidth*m_previewScale;
float actualHeight = zoomScale*m_pageHeight*m_previewScale;
float x = (float)((canvasWidth - actualWidth)/2.0);
if (x < m_leftMargin)
x = (float)m_leftMargin;
float y = (float)m_topMargin;
// Draw shadow, allowing for 1-pixel border AROUND the actual page
int shadowOffset = 4;
dc.SetPen(*wxBLACK_PEN);
@ -722,20 +741,20 @@ bool wxPrintPreviewBase::DrawBlankPage(wxWindow *canvas, wxDC& dc)
*/
dc.DrawRectangle((int)(x + shadowOffset), (int)(y + actualHeight+1), (int)(actualWidth), shadowOffset);
dc.DrawRectangle((int)(x + actualWidth), (int)(y + shadowOffset), shadowOffset, (int)(actualHeight));
// Draw blank page allowing for 1-pixel border AROUND the actual page
dc.SetPen(*wxBLACK_PEN);
dc.SetBrush(*wxWHITE_BRUSH);
/*
wxRegion update_region = canvas->GetUpdateRegion();
wxRect r = update_region.GetBox();
printf( "x: %d y: %d w: %d h: %d.\n", (int)r.x, (int)r.y, (int)r.width, (int)r.height );
*/
dc.DrawRectangle((int)(x-2), (int)(y-1), (int)(actualWidth+3), (int)(actualHeight+2));
return TRUE;
}
@ -743,7 +762,7 @@ void wxPrintPreviewBase::SetZoom(int percent)
{
if (m_currentZoom == percent)
return;
m_currentZoom = percent;
if (m_previewBitmap)
{
@ -751,7 +770,7 @@ void wxPrintPreviewBase::SetZoom(int percent)
m_previewBitmap = NULL;
}
RenderPage(m_currentPage);
if (m_previewCanvas)
{
m_previewCanvas->Clear();

View File

@ -1935,7 +1935,7 @@ wxPostScriptPrintDialog::wxPostScriptPrintDialog (wxWindow *parent, const wxStri
radio0->SetSelection((int)wxThePrintSetupData->GetPrinterOrientation() - 1);
// @@@ Configuration hook
if (wxThePrintSetupData->GetPrintPreviewCommand() == NULL)
if ( !wxThePrintSetupData->GetPrintPreviewCommand() )
wxThePrintSetupData->SetPrintPreviewCommand(PS_VIEWER_PROG);
// wxGetResource ("wxWindows", "PSView", &wxThePrintSetupData->m_previewCommand);

View File

@ -6,28 +6,36 @@
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
// Licence: wxWindows license
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "printps.h"
#pragma implementation "printps.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"
#ifndef WX_PRECOMP
#include "wx/utils.h"
#include "wx/dc.h"
#include "wx/app.h"
#include "wx/msgdlg.h"
#include <wx/intl.h>
#include "wx/utils.h"
#include "wx/dc.h"
#include "wx/app.h"
#include "wx/msgdlg.h"
#include <wx/intl.h>
#endif
#include "wx/generic/printps.h"
@ -38,21 +46,29 @@
#include <stdlib.h>
// ----------------------------------------------------------------------------
// wxWin macros
// ----------------------------------------------------------------------------
#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxPostScriptPrinter, wxPrinterBase)
IMPLEMENT_CLASS(wxPostScriptPrintPreview, wxPrintPreviewBase)
IMPLEMENT_DYNAMIC_CLASS(wxPostScriptPrinter, wxPrinterBase)
IMPLEMENT_CLASS(wxPostScriptPrintPreview, wxPrintPreviewBase)
#endif
/*
* Printer
*/
// ============================================================================
// implementation
// ============================================================================
wxPostScriptPrinter::wxPostScriptPrinter(wxPrintDialogData *data):
wxPrinterBase(data)
// ----------------------------------------------------------------------------
// Printer
// ----------------------------------------------------------------------------
wxPostScriptPrinter::wxPostScriptPrinter(wxPrintDialogData *data)
: wxPrinterBase(data)
{
}
wxPostScriptPrinter::~wxPostScriptPrinter(void)
wxPostScriptPrinter::~wxPostScriptPrinter()
{
}
@ -60,21 +76,21 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
{
sm_abortIt = FALSE;
sm_abortWindow = (wxWindow *) NULL;
if (!printout)
return FALSE;
printout->SetIsPreview(FALSE);
printout->OnPreparePrinting();
// Get some parameters from the printout, if defined
int fromPage, toPage;
int minPage, maxPage;
printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
if (maxPage == 0)
return FALSE;
m_printDialogData.SetMinPage(minPage);
m_printDialogData.SetMaxPage(maxPage);
if (fromPage != 0)
@ -97,7 +113,7 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
else
m_printDialogData.EnablePageNumbers(FALSE);
// Create a suitable device context
// Create a suitable device context
wxDC *dc = (wxDC *) NULL;
if (prompt)
{
@ -109,50 +125,50 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
{
dc = new wxPostScriptDC(wxThePrintSetupData->GetPrinterFile(), FALSE, (wxWindow *) NULL);
}
// May have pressed cancel.
if (!dc || !dc->Ok())
{
if (dc) delete dc;
return FALSE;
}
int logPPIScreenX = 0;
int logPPIScreenY = 0;
int logPPIPrinterX = 0;
int logPPIPrinterY = 0;
logPPIScreenX = 100;
logPPIScreenY = 100;
/*
// Correct values for X/PostScript?
logPPIPrinterX = 100;
logPPIPrinterY = 100;
*/
logPPIPrinterX = 72;
logPPIPrinterY = 72;
printout->SetPPIScreen(logPPIScreenX, logPPIScreenY);
printout->SetPPIPrinter(logPPIPrinterX, logPPIPrinterY);
// Set printout parameters
// Set printout parameters
printout->SetDC(dc);
int w, h;
dc->GetSize(&w, &h);
printout->SetPageSizePixels((int)w, (int)h);
dc->GetSizeMM(&w, &h);
printout->SetPageSizeMM((int)w, (int)h);
// Create an abort window
wxBeginBusyCursor();
printout->OnBeginPrinting();
bool keepGoing = TRUE;
int copyCount;
for (copyCount = 1; copyCount <= m_printDialogData.GetNoCopies(); copyCount ++)
{
@ -164,7 +180,7 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
}
if (sm_abortIt)
break;
int pn;
for (pn = m_printDialogData.GetFromPage(); keepGoing && (pn <= m_printDialogData.GetToPage()) && printout->HasPage(pn);
pn++)
@ -183,13 +199,13 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
}
printout->OnEndDocument();
}
printout->OnEndPrinting();
wxEndBusyCursor();
delete dc;
return TRUE;
}
@ -225,18 +241,34 @@ bool wxPostScriptPrinter::Setup(wxWindow *parent)
return (ret == wxID_OK);
}
/*
* Print preview
*/
// ----------------------------------------------------------------------------
// Print preview
// ----------------------------------------------------------------------------
wxPostScriptPrintPreview::wxPostScriptPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintDialogData *data):
wxPrintPreviewBase(printout, printoutForPrinting, data)
void wxPostScriptPrintPreview::Init(wxPrintout * WXUNUSED(printout),
wxPrintout * WXUNUSED(printoutForPrinting))
{
// Have to call it here since base constructor can't call it
DetermineScaling();
}
wxPostScriptPrintPreview::~wxPostScriptPrintPreview(void)
wxPostScriptPrintPreview::wxPostScriptPrintPreview(wxPrintout *printout,
wxPrintout *printoutForPrinting,
wxPrintDialogData *data)
: wxPrintPreviewBase(printout, printoutForPrinting, data)
{
Init(printout, printoutForPrinting);
}
wxPostScriptPrintPreview::wxPostScriptPrintPreview(wxPrintout *printout,
wxPrintout *printoutForPrinting,
wxPrintData *data)
: wxPrintPreviewBase(printout, printoutForPrinting, data)
{
Init(printout, printoutForPrinting);
}
wxPostScriptPrintPreview::~wxPostScriptPrintPreview()
{
}
@ -248,12 +280,12 @@ bool wxPostScriptPrintPreview::Print(bool interactive)
return printer.Print(m_previewFrame, m_printPrintout, interactive);
}
void wxPostScriptPrintPreview::DetermineScaling(void)
void wxPostScriptPrintPreview::DetermineScaling()
{
wxPaperSize paperType = m_printDialogData.GetPrintData().GetPaperId();
if (paperType == wxPAPER_NONE)
paperType = wxPAPER_NONE;
wxPrintPaperType *paper = wxThePrintPaperDatabase->FindPaperType(paperType);
if (!paper)
paper = wxThePrintPaperDatabase->FindPaperType(wxPAPER_A4);
@ -263,7 +295,7 @@ void wxPostScriptPrintPreview::DetermineScaling(void)
m_previewPrintout->SetPPIScreen(100, 100);
// m_previewPrintout->SetPPIPrinter(100, 100);
m_previewPrintout->SetPPIPrinter(72, 72);
wxSize sizeDevUnits(paper->GetSizeDeviceUnits());
wxSize sizeTenthsMM(paper->GetSize());
wxSize sizeMM(sizeTenthsMM.x / 10, sizeTenthsMM.y / 10);
@ -283,7 +315,7 @@ void wxPostScriptPrintPreview::DetermineScaling(void)
m_previewPrintout->SetPageSizeMM(sizeMM.x, sizeMM.y);
m_previewPrintout->SetPageSizePixels(m_pageWidth, m_pageHeight);
}
// At 100%, the page should look about page-size on the screen.
m_previewScale = (float)0.8;
}

View File

@ -6,42 +6,50 @@
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
// Licence: wxWindows license
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "prntdlgg.h"
#pragma implementation "prntdlgg.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"
#ifndef WX_PRECOMP
#include "wx/utils.h"
#include "wx/dc.h"
#include "wx/app.h"
#include "wx/frame.h"
#include "wx/stattext.h"
#include "wx/statbox.h"
#include "wx/button.h"
#include "wx/checkbox.h"
#include "wx/textctrl.h"
#include "wx/radiobox.h"
#include "wx/filedlg.h"
#include "wx/choice.h"
#include <wx/intl.h>
#include "wx/utils.h"
#include "wx/dc.h"
#include "wx/app.h"
#include "wx/frame.h"
#include "wx/stattext.h"
#include "wx/statbox.h"
#include "wx/button.h"
#include "wx/checkbox.h"
#include "wx/textctrl.h"
#include "wx/radiobox.h"
#include "wx/filedlg.h"
#include "wx/choice.h"
#include <wx/intl.h>
#endif
#include "wx/generic/prntdlgg.h"
#if wxUSE_POSTSCRIPT
#include "wx/generic/dcpsg.h"
#include "wx/generic/dcpsg.h"
#endif
#include "wx/printdlg.h"
@ -53,79 +61,114 @@
#include <stdlib.h>
#include <string.h>
// ----------------------------------------------------------------------------
// wxWin macros
// ----------------------------------------------------------------------------
#if wxUSE_POSTSCRIPT
#if !USE_SHARED_LIBRARY
IMPLEMENT_CLASS(wxGenericPrintDialog, wxDialog)
IMPLEMENT_CLASS(wxGenericPrintSetupDialog, wxDialog)
IMPLEMENT_CLASS(wxGenericPageSetupDialog, wxDialog)
IMPLEMENT_CLASS(wxGenericPrintDialog, wxDialog)
IMPLEMENT_CLASS(wxGenericPrintSetupDialog, wxDialog)
IMPLEMENT_CLASS(wxGenericPageSetupDialog, wxDialog)
BEGIN_EVENT_TABLE(wxGenericPrintDialog, wxDialog)
EVT_BUTTON(wxID_OK, wxGenericPrintDialog::OnOK)
EVT_BUTTON(wxPRINTID_SETUP, wxGenericPrintDialog::OnSetup)
EVT_RADIOBOX(wxPRINTID_RANGE, wxGenericPrintDialog::OnRange)
END_EVENT_TABLE()
BEGIN_EVENT_TABLE(wxGenericPrintDialog, wxDialog)
EVT_BUTTON(wxID_OK, wxGenericPrintDialog::OnOK)
EVT_BUTTON(wxPRINTID_SETUP, wxGenericPrintDialog::OnSetup)
EVT_RADIOBOX(wxPRINTID_RANGE, wxGenericPrintDialog::OnRange)
END_EVENT_TABLE()
BEGIN_EVENT_TABLE(wxGenericPageSetupDialog, wxDialog)
EVT_BUTTON(wxPRINTID_SETUP, wxGenericPageSetupDialog::OnPrinter)
END_EVENT_TABLE()
#endif
BEGIN_EVENT_TABLE(wxGenericPageSetupDialog, wxDialog)
EVT_BUTTON(wxPRINTID_SETUP, wxGenericPageSetupDialog::OnPrinter)
END_EVENT_TABLE()
#endif // USE_SHARED_LIBRARY
// ----------------------------------------------------------------------------
// global vars
// ----------------------------------------------------------------------------
extern wxPrintPaperDatabase *wxThePrintPaperDatabase;
/*
* Generic print dialog for non-Windows printing use.
*/
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// Generic print dialog for non-Windows printing use.
// ----------------------------------------------------------------------------
wxGenericPrintDialog::wxGenericPrintDialog(wxWindow *parent, wxPrintDialogData* data):
wxDialog(parent, -1, _("Print"), wxPoint(0, 0), wxSize(600, 600), wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL)
wxGenericPrintDialog::wxGenericPrintDialog(wxWindow *parent,
wxPrintDialogData* data)
: wxDialog(parent, -1, _("Print"),
wxPoint(0, 0), wxSize(600, 600),
wxDEFAULT_DIALOG_STYLE |
wxDIALOG_MODAL |
wxTAB_TRAVERSAL)
{
if ( data )
m_printDialogData = *data;
Init(parent);
}
wxGenericPrintDialog::wxGenericPrintDialog(wxWindow *parent,
wxPrintData* data)
{
if ( data )
m_printDialogData = *data;
Init(parent);
}
void wxGenericPrintDialog::Init(wxWindow *parent)
{
wxDialog::Create(parent, -1, _("Print"), wxPoint(0, 0), wxSize(600, 600),
wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL | wxTAB_TRAVERSAL);
(void)new wxStaticBox( this, -1, _( "Printer options" ), wxPoint( 5, 5), wxSize( 300, 60 ) );
m_printToFileCheckBox = new wxCheckBox(this, wxPRINTID_PRINTTOFILE, _("Print to File"), wxPoint(20, 25) );
m_setupButton = new wxButton(this, wxPRINTID_SETUP, _("Setup..."), wxPoint(160, 25), wxSize(100, -1));
wxString *choices = new wxString[2];
choices[0] = _("All");
choices[1] = _("Pages");
m_fromText = (wxTextCtrl*)NULL;
if (m_printDialogData.GetFromPage() != 0)
{
m_rangeRadioBox = new wxRadioBox(this, wxPRINTID_RANGE, _("Print Range"),
wxPoint(5, 80), wxSize(-1, -1), 2, choices, 1, wxRA_VERTICAL);
wxPoint(5, 80), wxSize(-1, -1),
2, choices,
1, wxRA_VERTICAL);
m_rangeRadioBox->SetSelection(1);
}
if(m_printDialogData.GetFromPage() != 0)
{
(void) new wxStaticText(this, wxPRINTID_STATIC, _("From:"), wxPoint(5, 135));
m_fromText = new wxTextCtrl(this, wxPRINTID_FROM, "", wxPoint(45, 130), wxSize(40, -1));
(void) new wxStaticText(this, wxPRINTID_STATIC, _("To:"), wxPoint(100, 135));
m_toText = new wxTextCtrl(this, wxPRINTID_TO, "", wxPoint(133, 130), wxSize(40, -1));
}
(void) new wxStaticText(this, wxPRINTID_STATIC, _("Copies:"), wxPoint(200, 135));
m_noCopiesText = new wxTextCtrl(this, wxPRINTID_COPIES, "", wxPoint(252, 130), wxSize(40, -1));
wxButton *okButton = new wxButton(this, wxID_OK, _("OK"), wxPoint(40, 180), wxSize(100, -1));
(void) new wxButton(this, wxID_CANCEL, _("Cancel"), wxPoint(180, 180), wxSize(100, -1));
okButton->SetDefault();
okButton->SetFocus();
Fit();
Centre(wxBOTH);
// Calls wxWindow::OnInitDialog and then wxGenericPrintDialog::TransferDataToWindow
InitDialog();
delete[] choices;
@ -171,7 +214,7 @@ wxGenericPrintDialog::~wxGenericPrintDialog()
void wxGenericPrintDialog::OnOK(wxCommandEvent& WXUNUSED(event))
{
TransferDataFromWindow();
// There are some interactions between the global setup data
// and the standard print dialog. The global printing 'mode'
// is determined by whether the user checks Print to file
@ -180,27 +223,27 @@ void wxGenericPrintDialog::OnOK(wxCommandEvent& WXUNUSED(event))
{
m_printDialogData.GetPrintData().SetPrintMode(wxPRINT_MODE_FILE);
wxThePrintSetupData->SetPrinterMode(wxPRINT_MODE_FILE);
wxString f = wxFileSelector(_("PostScript file"),
wxPathOnly(wxThePrintSetupData->GetPrinterFile()),
wxFileNameFromPath(wxThePrintSetupData->GetPrinterFile()),
"ps", "*.ps", 0, this);
if ( f.IsEmpty() )
return;
m_printDialogData.GetPrintData().SetFilename(f);
wxThePrintSetupData->SetPrinterFile(f);
}
else
wxThePrintSetupData->SetPrinterMode(wxPRINT_MODE_PRINTER);
EndModal(wxID_OK);
}
void wxGenericPrintDialog::OnRange(wxCommandEvent& event)
{
if (!m_fromText) return;
if (event.GetInt() == 0)
{
m_fromText->Enable(FALSE);
@ -223,26 +266,26 @@ void wxGenericPrintDialog::OnSetup(wxCommandEvent& WXUNUSED(event))
*wxThePrintSetupData = genericPrintSetupDialog->GetPrintData();
m_printDialogData = genericPrintSetupDialog->GetPrintData();
}
genericPrintSetupDialog->Close(TRUE);
}
bool wxGenericPrintDialog::TransferDataToWindow()
{
char buf[10];
if(m_printDialogData.GetFromPage() != 0)
{
if (m_printDialogData.GetEnablePageNumbers())
{
m_fromText->Enable(TRUE);
m_toText->Enable(TRUE);
sprintf(buf, "%d", m_printDialogData.GetFromPage());
m_fromText->SetValue(buf);
sprintf(buf, "%d", m_printDialogData.GetToPage());
m_toText->SetValue(buf);
if (m_printDialogData.GetAllPages())
m_rangeRadioBox->SetSelection(0);
else
@ -258,7 +301,7 @@ bool wxGenericPrintDialog::TransferDataToWindow()
}
sprintf(buf, "%d", m_printDialogData.GetNoCopies());
m_noCopiesText->SetValue(buf);
m_printToFileCheckBox->SetValue(m_printDialogData.GetPrintToFile());
m_printToFileCheckBox->Enable(m_printDialogData.GetEnablePrintToFile());
return TRUE;
@ -299,9 +342,9 @@ wxDC *wxGenericPrintDialog::GetPrintDC()
return new wxPostScriptDC(wxThePrintSetupData->GetPrinterFile(), FALSE, (wxWindow *) NULL);
}
/*
* Generic print setup dialog
*/
// ----------------------------------------------------------------------------
// Generic print setup dialog
// ----------------------------------------------------------------------------
wxGenericPrintSetupDialog::wxGenericPrintSetupDialog(wxWindow *parent, wxPrintData* data):
wxDialog(parent, -1, _("Print Setup"), wxPoint(0, 0), wxSize(600, 600), wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL)
@ -328,50 +371,50 @@ void wxGenericPrintSetupDialog::Init(wxPrintData* data)
m_printData = *data;
int staticBoxWidth = 300;
(void) new wxStaticBox(this, wxPRINTID_STATIC, _("Paper size"), wxPoint(10, 10), wxSize(staticBoxWidth, 60) );
int xPos = 20;
int yPos = 30;
m_paperTypeChoice = CreatePaperTypeChoice(&xPos, &yPos);
wxString *choices = new wxString[2];
choices[0] = _("Portrait");
choices[1] = _("Landscape");
m_orientationRadioBox = new wxRadioBox(this, wxPRINTID_ORIENTATION, _("Orientation"),
wxPoint(10, 80), wxSize(-1, -1), 2, choices, 1, wxRA_VERTICAL );
m_orientationRadioBox->SetSelection(0);
(void) new wxStaticBox(this, wxPRINTID_STATIC, _("Options"), wxPoint(10, 130), wxSize(staticBoxWidth, 50) );
int colourYPos = 145;
#ifdef __WXMOTIF__
colourYPos = 150;
#endif
m_colourCheckBox = new wxCheckBox(this, wxPRINTID_PRINTCOLOUR, _("Print in colour"), wxPoint(15, colourYPos));
(void) new wxStaticBox(this, wxPRINTID_STATIC, _("Print spooling"), wxPoint(330, 10), wxSize(200,170) );
(void) new wxStaticText(this, wxPRINTID_STATIC, _("Printer command:"), wxPoint(340, 30));
m_printerCommandText = new wxTextCtrl(this, wxPRINTID_COMMAND, "", wxPoint(360, 55), wxSize(150, -1));
(void) new wxStaticText(this, wxPRINTID_STATIC, _("Printer options:"), wxPoint(340, 110));
m_printerOptionsText = new wxTextCtrl(this, wxPRINTID_OPTIONS, "", wxPoint(360, 135), wxSize(150, -1));
wxButton *okButton = new wxButton(this, wxID_OK, _("OK"), wxPoint(130, 200), wxSize(100, -1));
(void) new wxButton(this, wxID_CANCEL, _("Cancel"), wxPoint(320, 200), wxSize(100, -1));
okButton->SetDefault();
okButton->SetFocus();
Fit();
Centre(wxBOTH);
InitDialog();
delete[] choices;
}
@ -388,7 +431,7 @@ bool wxGenericPrintSetupDialog::TransferDataToWindow()
m_printerOptionsText->SetValue(m_printData.GetPrinterOptions());
if (m_colourCheckBox)
m_colourCheckBox->SetValue(m_printData.GetColour());
if (m_orientationRadioBox)
{
if (m_printData.GetOrientation() == wxPORTRAIT)
@ -447,7 +490,7 @@ wxChoice *wxGenericPrintSetupDialog::CreatePaperTypeChoice(int *x, int *y)
if (m_printData.GetPaperId() == paper->GetId())
sel = i;
}
int width = 250;
wxChoice *choice = new wxChoice(this, wxPRINTID_PAPERSIZE, wxPoint(*x, *y), wxSize(width, -1), n,
@ -456,16 +499,15 @@ wxChoice *wxGenericPrintSetupDialog::CreatePaperTypeChoice(int *x, int *y)
// SetFont(thisFont);
delete[] choices;
choice->SetSelection(sel);
return choice;
}
#endif
// wxUSE_POSTSCRIPT
#endif // wxUSE_POSTSCRIPT
/*
* Generic page setup dialog
*/
// ----------------------------------------------------------------------------
// Generic page setup dialog
// ----------------------------------------------------------------------------
void wxGenericPageSetupDialog::OnPrinter(wxCommandEvent& WXUNUSED(event))
{
@ -503,89 +545,89 @@ wxDialog(parent, -1, _("Page Setup"), wxPoint(0, 0), wxSize(600, 600), wxDIALOG_
{
if ( data )
m_pageData = *data;
int buttonWidth = 75;
int buttonHeight = 25;
int spacing = 5;
#ifdef __WXMOTIF__
spacing = 15;
#endif
int yPos = 5;
int xPos = 5;
wxButton *okButton = new wxButton(this, wxID_OK, _("OK"), wxPoint(5, yPos), wxSize(buttonWidth, buttonHeight));
(void) new wxButton(this, wxID_CANCEL, _("Cancel"), wxPoint(buttonWidth + 5 + spacing, yPos), wxSize(buttonWidth, buttonHeight));
m_printerButton = new wxButton(this, wxPRINTID_SETUP, _("Printer..."), wxPoint(buttonWidth*2 + 5 + 2*spacing, yPos), wxSize(buttonWidth, buttonHeight));
if ( !m_pageData.GetEnablePrinter() )
m_printerButton->Enable(FALSE);
// if (m_printData.GetEnableHelp())
// wxButton *helpButton = new wxButton(this, (wxFunction)wxGenericPageSetupHelpProc, _("Help"), -1, -1, buttonWidth, buttonHeight);
okButton->SetDefault();
okButton->SetFocus();
xPos = 5;
yPos += 35;
#ifdef __WXMOTIF__
yPos += 10;
#endif
m_paperTypeChoice = CreatePaperTypeChoice(&xPos, &yPos);
xPos = 5;
wxString *choices = new wxString[2];
choices[0] = _("Portrait");
choices[1] = _("Landscape");
m_orientationRadioBox = new wxRadioBox(this, wxPRINTID_ORIENTATION, _("Orientation"),
wxPoint(xPos, yPos), wxSize(-1, -1), 2, choices, 2);
m_orientationRadioBox->SetSelection(0);
xPos = 5;
yPos += 60;
int staticWidth = 110;
#ifdef __WXMOTIF__
staticWidth += 20;
#endif
int textWidth = 60;
spacing = 10;
(void) new wxStaticText(this, wxPRINTID_STATIC, _("Left margin (mm):"), wxPoint(xPos, yPos));
xPos += staticWidth;
m_marginLeftText = new wxTextCtrl(this, wxPRINTID_LEFTMARGIN, "", wxPoint(xPos, yPos), wxSize(textWidth, -1));
xPos += textWidth + spacing;
(void) new wxStaticText(this, wxPRINTID_STATIC, _("Right margin (mm):"), wxPoint(xPos, yPos));
xPos += staticWidth;
m_marginRightText = new wxTextCtrl(this, wxPRINTID_RIGHTMARGIN, "", wxPoint(xPos, yPos), wxSize(textWidth, -1));
xPos += textWidth + spacing;
yPos += 35;
xPos = 5;
(void) new wxStaticText(this, wxPRINTID_STATIC, _("Top margin (mm):"), wxPoint(xPos, yPos));
xPos += staticWidth;
m_marginTopText = new wxTextCtrl(this, wxPRINTID_TOPMARGIN, "", wxPoint(xPos, yPos), wxSize(textWidth, -1));
xPos += textWidth + spacing;
(void) new wxStaticText(this, wxPRINTID_STATIC, _("Bottom margin (mm):"), wxPoint(xPos, yPos));
xPos += staticWidth;
m_marginBottomText = new wxTextCtrl(this, wxPRINTID_BOTTOMMARGIN, "", wxPoint(xPos, yPos), wxSize(textWidth, -1));
Fit();
Centre(wxBOTH);
InitDialog();
delete [] choices;
}
@ -604,7 +646,7 @@ bool wxGenericPageSetupDialog::TransferDataToWindow()
m_marginRightText->SetValue(IntToString((int) m_pageData.GetMarginBottomRight().x));
if (m_marginBottomText)
m_marginBottomText->SetValue(IntToString((int) m_pageData.GetMarginBottomRight().y));
if (m_orientationRadioBox)
{
if (m_pageData.GetPrintData().GetOrientation() == wxPORTRAIT)
@ -636,7 +678,7 @@ bool wxGenericPageSetupDialog::TransferDataFromWindow()
m_pageData.SetMarginTopLeft(wxPoint(atoi((const char *)m_marginLeftText->GetValue()),atoi((const char *)m_marginTopText->GetValue())));
if (m_marginRightText && m_marginBottomText)
m_pageData.SetMarginBottomRight(wxPoint(atoi((const char *)m_marginRightText->GetValue()),atoi((const char *)m_marginBottomText->GetValue())));
if (m_orientationRadioBox)
{
int sel = m_orientationRadioBox->GetSelection();
@ -668,7 +710,7 @@ bool wxGenericPageSetupDialog::TransferDataFromWindow()
}
}
}
return TRUE;
}
@ -690,15 +732,15 @@ wxChoice *wxGenericPageSetupDialog::CreatePaperTypeChoice(int *x, int *y)
wxPrintPaperType *paper = (wxPrintPaperType *)wxThePrintPaperDatabase->Nth(i)->Data();
choices[i] = paper->GetName();
}
(void) new wxStaticText(this, wxPRINTID_STATIC, _("Paper size"), wxPoint(*x, *y));
*y += 25;
wxChoice *choice = new wxChoice(this, wxPRINTID_PAPERSIZE, wxPoint(*x, *y), wxSize(300, -1), n,
choices);
*y += 35;
delete[] choices;
// choice->SetSelection(sel);
return choice;
}