X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d57bf68500aade4d8b791a14d5d37d26068a2bed..4c15b7aff2f65bbb2b63e7f4004bfe97e7cbd0e5:/samples/printing/printing.cpp diff --git a/samples/printing/printing.cpp b/samples/printing/printing.cpp index 2c9a75dde1..24e6a6c5bf 100644 --- a/samples/printing/printing.cpp +++ b/samples/printing/printing.cpp @@ -1,13 +1,13 @@ -/* -* File: printing.cc -* Purpose: Printing demo for wxWindows class library -* Author: Julian Smart -* Created: 1995 -* Updated: -* Copyright: (c) 1995, AIAI, University of Edinburgh -*/ - -/* static const char sccsid[] = "%W% %G%"; */ +///////////////////////////////////////////////////////////////////////////// +// Name: printing.cpp +// Purpose: Printing demo for wxWindows +// Author: Julian Smart +// Modified by: +// Created: 1995 +// RCS-ID: $Id$ +// Copyright: (c) Julian Smart +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ #pragma implementation @@ -64,7 +64,7 @@ wxPageSetupData* g_pageSetupData = (wxPageSetupData*) NULL; IMPLEMENT_APP(MyApp) // Writes a header on a page. Margin units are in millimetres. -bool WritePageHeader(wxPrintout *printout, wxDC *dc, char *text, float mmToLogical); +bool WritePageHeader(wxPrintout *printout, wxDC *dc, wxChar *text, float mmToLogical); MyApp::MyApp() { @@ -78,17 +78,9 @@ bool MyApp::OnInit(void) g_printData = new wxPrintData; g_pageSetupData = new wxPageSetupDialogData; - - // Compatibility with old system. In fact, we might keep wxThePrintSetupData - // just for useful default values which we can optionally assign to our - // own print data object. - -#if defined(__WXGTK__) || defined(__WXMOTIF__) - (*g_printData) = * wxThePrintSetupData; -#endif // Create the main frame window - frame = new MyFrame((wxFrame *) NULL, (char *) "wxWindows Printing Demo", wxPoint(0, 0), wxSize(400, 400)); + frame = new MyFrame((wxFrame *) NULL, _T("wxWindows Printing Demo"), wxPoint(0, 0), wxSize(400, 400)); // Give it a status line frame->CreateStatusBar(2); @@ -99,34 +91,36 @@ bool MyApp::OnInit(void) // Make a menubar wxMenu *file_menu = new wxMenu; - file_menu->Append(WXPRINT_PRINT, "&Print...", "Print"); - file_menu->Append(WXPRINT_PRINT_SETUP, "Print &Setup...", "Setup printer properties"); - file_menu->Append(WXPRINT_PAGE_SETUP, "Page Set&up...", "Page setup"); - file_menu->Append(WXPRINT_PREVIEW, "Print Pre&view", "Preview"); + file_menu->Append(WXPRINT_PRINT, _T("&Print..."), _T("Print")); + file_menu->Append(WXPRINT_PRINT_SETUP, _T("Print &Setup..."), _T("Setup printer properties")); + file_menu->Append(WXPRINT_PAGE_SETUP, _T("Page Set&up..."), _T("Page setup")); + file_menu->Append(WXPRINT_PREVIEW, _T("Print Pre&view"), _T("Preview")); +#if wxUSE_ACCEL // Accelerators wxAcceleratorEntry entries[1]; entries[0].Set(wxACCEL_CTRL, (int) 'V', WXPRINT_PREVIEW); wxAcceleratorTable accel(1, entries); frame->SetAcceleratorTable(accel); - +#endif + #if defined(__WXMSW__) && wxTEST_POSTSCRIPT_IN_MSW file_menu->AppendSeparator(); - file_menu->Append(WXPRINT_PRINT_PS, "Print PostScript...", "Print (PostScript)"); - file_menu->Append(WXPRINT_PRINT_SETUP_PS, "Print Setup PostScript...", "Setup printer properties (PostScript)"); - file_menu->Append(WXPRINT_PAGE_SETUP_PS, "Page Setup PostScript...", "Page setup (PostScript)"); - file_menu->Append(WXPRINT_PREVIEW_PS, "Print Preview PostScript", "Preview (PostScript)"); + file_menu->Append(WXPRINT_PRINT_PS, _T("Print PostScript..."), _T("Print (PostScript)")); + file_menu->Append(WXPRINT_PRINT_SETUP_PS, _T("Print Setup PostScript..."), _T("Setup printer properties (PostScript)")); + file_menu->Append(WXPRINT_PAGE_SETUP_PS, _T("Page Setup PostScript..."), _T("Page setup (PostScript)")); + file_menu->Append(WXPRINT_PREVIEW_PS, _T("Print Preview PostScript"), _T("Preview (PostScript)")); #endif file_menu->AppendSeparator(); - file_menu->Append(WXPRINT_QUIT, "E&xit", "Exit program"); + file_menu->Append(WXPRINT_QUIT, _T("E&xit"), _T("Exit program")); wxMenu *help_menu = new wxMenu; - help_menu->Append(WXPRINT_ABOUT, "&About", "About this demo"); + help_menu->Append(WXPRINT_ABOUT, _T("&About"), _T("About this demo")); wxMenuBar *menu_bar = new wxMenuBar; - menu_bar->Append(file_menu, "&File"); - menu_bar->Append(help_menu, "&Help"); + menu_bar->Append(file_menu, _T("&File")); + menu_bar->Append(help_menu, _T("&Help")); // Associate the menu bar with the frame frame->SetMenuBar(menu_bar); @@ -141,7 +135,7 @@ bool MyApp::OnInit(void) frame->Centre(wxBOTH); frame->Show(TRUE); - frame->SetStatusText("Printing demo"); + frame->SetStatusText(_T("Printing demo")); SetTopWindow(frame); @@ -188,9 +182,14 @@ void MyFrame::OnPrint(wxCommandEvent& WXUNUSED(event)) wxPrintDialogData printDialogData(* g_printData); wxPrinter printer(& printDialogData); - MyPrintout printout("My printout"); + MyPrintout printout(_T("My printout")); if (!printer.Print(this, &printout, TRUE)) - wxMessageBox("There was a problem printing.\nPerhaps your current printer is not set correctly?", "Printing", wxOK); + { + if (wxPrinter::GetLastError() == wxPRINTER_ERROR) + wxMessageBox(_T("There was a problem printing.\nPerhaps your current printer is not set correctly?"), _T("Printing"), wxOK); + else + wxMessageBox(_T("You canceled printing"), _T("Printing"), wxOK); + } else { (*g_printData) = printer.GetPrintDialogData().GetPrintData(); @@ -205,11 +204,11 @@ void MyFrame::OnPrintPreview(wxCommandEvent& WXUNUSED(event)) if (!preview->Ok()) { delete preview; - wxMessageBox("There was a problem previewing.\nPerhaps your current printer is not set correctly?", "Previewing", wxOK); + wxMessageBox(_T("There was a problem previewing.\nPerhaps your current printer is not set correctly?"), _T("Previewing"), wxOK); return; } - wxPreviewFrame *frame = new wxPreviewFrame(preview, this, "Demo Print Preview", wxPoint(100, 100), wxSize(600, 650)); + wxPreviewFrame *frame = new wxPreviewFrame(preview, this, _T("Demo Print Preview"), wxPoint(100, 100), wxSize(600, 650)); frame->Centre(wxBOTH); frame->Initialize(); frame->Show(TRUE); @@ -241,7 +240,7 @@ void MyFrame::OnPageSetup(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnPrintPS(wxCommandEvent& WXUNUSED(event)) { wxPostScriptPrinter printer(g_printData); - MyPrintout printout("My printout"); + MyPrintout printout(_T("My printout")); printer.Print(this, &printout, TRUE); (*g_printData) = printer.GetPrintData(); @@ -252,7 +251,7 @@ void MyFrame::OnPrintPreviewPS(wxCommandEvent& WXUNUSED(event)) // Pass two printout objects: for preview, and possible printing. wxPrintDialogData printDialogData(* g_printData); wxPrintPreview *preview = new wxPrintPreview(new MyPrintout, new MyPrintout, & printDialogData); - wxPreviewFrame *frame = new wxPreviewFrame(preview, this, "Demo Print Preview", wxPoint(100, 100), wxSize(600, 650)); + wxPreviewFrame *frame = new wxPreviewFrame(preview, this, _T("Demo Print Preview"), wxPoint(100, 100), wxSize(600, 650)); frame->Centre(wxBOTH); frame->Initialize(); frame->Show(TRUE); @@ -284,12 +283,14 @@ void MyFrame::OnPageSetupPS(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnPrintAbout(wxCommandEvent& WXUNUSED(event)) { - (void)wxMessageBox("wxWindows printing demo\nAuthor: Julian Smart julian.smart@ukonline.co.uk", - "About wxWindows printing demo", wxOK|wxCENTRE); + (void)wxMessageBox(_T("wxWindows printing demo\nAuthor: Julian Smart"), + _T("About wxWindows printing demo"), wxOK|wxCENTRE); } void MyFrame::Draw(wxDC& dc) { + dc.SetBackground(*wxWHITE_BRUSH); + dc.Clear(); dc.SetFont(* wxGetApp().m_testFont); dc.SetBackgroundMode(wxTRANSPARENT); @@ -298,11 +299,18 @@ void MyFrame::Draw(wxDC& dc) dc.SetPen(* wxRED_PEN); dc.DrawRectangle(0, 30, 200, 100); - dc.DrawText("Rectangle 200 by 100", 40, 40); + + dc.DrawText( wxT("Rectangle 200 by 100"), 40, 40); dc.DrawEllipse(50, 140, 100, 50); - dc.DrawText("Test message: this is in 10 point text", 10, 180); + dc.DrawText( wxT("Test message: this is in 10 point text"), 10, 180); + +#if wxUSE_UNICODE + char *test = "Hebrew שלום -- Japanese (日本語)"; + wxString tmp = wxConvUTF8.cMB2WC( test ); + dc.DrawText( tmp, 10, 200 ); +#endif dc.SetPen(* wxBLACK_PEN); dc.DrawLine(0, 0, 200, 200); @@ -356,8 +364,8 @@ bool MyPrintout::OnPrintPage(int page) dc->SetDeviceOrigin(0, 0); dc->SetUserScale(1.0, 1.0); - char buf[200]; - sprintf(buf, "PAGE %d", page); + wxChar buf[200]; + wxSprintf(buf, wxT("PAGE %d"), page); dc->DrawText(buf, 10, 10); return TRUE; @@ -389,10 +397,8 @@ bool MyPrintout::HasPage(int pageNum) void MyPrintout::DrawPageOne(wxDC *dc) { -/* You might use THIS code if you were scaling -* graphics of known size to fit on the page. - */ - int w, h; + // You might use THIS code if you were scaling + // graphics of known size to fit on the page. // We know the graphic is 200x200. If we didn't know this, // we'd need to calculate it. @@ -408,6 +414,7 @@ void MyPrintout::DrawPageOne(wxDC *dc) maxY += (2*marginY); // Get the size of the DC in pixels + int w, h; dc->GetSize(&w, &h); // Calculate a suitable scaling factor @@ -430,10 +437,10 @@ void MyPrintout::DrawPageOne(wxDC *dc) void MyPrintout::DrawPageTwo(wxDC *dc) { -/* You might use THIS code to set the printer DC to ROUGHLY reflect -* the screen text size. This page also draws lines of actual length 5cm -* on the page. - */ + // You might use THIS code to set the printer DC to ROUGHLY reflect + // the screen text size. This page also draws lines of actual length + // 5cm on the page. + // Get the logical pixels per inch of screen and printer int ppiScreenX, ppiScreenY; GetPPIScreen(&ppiScreenX, &ppiScreenY); @@ -477,24 +484,29 @@ void MyPrintout::DrawPageTwo(wxDC *dc) dc->SetFont(* wxGetApp().m_testFont); dc->SetBackgroundMode(wxTRANSPARENT); - dc->DrawText("Some test text", 200, 200 ); { // GetTextExtent demo: - wxString words[7] = {"This ", "is ", "GetTextExtent ", "testing ", "string. ", "Enjoy ", "it!"}; + wxString words[7] = {_T("This "), _T("is "), _T("GetTextExtent "), _T("testing "), _T("string. "), _T("Enjoy "), _T("it!")}; long w, h; long x = 200, y= 250; wxFont fnt(15, wxSWISS, wxNORMAL, wxNORMAL); dc->SetFont(fnt); - for (int i = 0; i < 7; i++) { - dc->GetTextExtent(words[i], &w, &h); + for (int i = 0; i < 7; i++) + { + wxString word = words[i]; + word.Remove( word.Len()-1, 1 ); + dc->GetTextExtent(word, &w, &h); dc->DrawRectangle(x, y, w, h); + dc->GetTextExtent(words[i], &w, &h); dc->DrawText(words[i], x, y); x += w; } dc->SetFont(* wxGetApp().m_testFont); } + dc->DrawText(_T("Some test text"), 200, 300 ); + // TESTING int leftMargin = 20; @@ -516,11 +528,11 @@ void MyPrintout::DrawPageTwo(wxDC *dc) dc->DrawLine( (long)leftMarginLogical, (long)bottomMarginLogical, (long)rightMarginLogical, (long)bottomMarginLogical); - WritePageHeader(this, dc, "A header", logUnitsFactor); + WritePageHeader(this, dc, _T("A header"), logUnitsFactor); } // Writes a header on a page. Margin units are in millimetres. -bool WritePageHeader(wxPrintout *printout, wxDC *dc, char *text, float mmToLogical) +bool WritePageHeader(wxPrintout *printout, wxDC *dc, wxChar *text, float mmToLogical) { /* static wxFont *headerFont = (wxFont *) NULL;