X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e90c1d2a19361551eb07778280f22be3e759cf64..1d7609197ed33bc76c8212705f305fe7cc33d62f:/src/common/prntbase.cpp diff --git a/src/common/prntbase.cpp b/src/common/prntbase.cpp index 4de06a39de..d1a4e3f691 100644 --- a/src/common/prntbase.cpp +++ b/src/common/prntbase.cpp @@ -36,6 +36,7 @@ #include "wx/dcmemory.h" #include "wx/stattext.h" #include "wx/intl.h" +#include "wx/textdlg.h" #endif #include "wx/prntbase.h" @@ -46,6 +47,8 @@ #include #include +#include + #ifdef __WXMSW__ #include "wx/msw/private.h" #include @@ -55,7 +58,6 @@ #endif #endif // __WXMSW__ -#if !USE_SHARED_LIBRARY IMPLEMENT_CLASS(wxPrinterBase, wxObject) IMPLEMENT_ABSTRACT_CLASS(wxPrintout, wxObject) IMPLEMENT_CLASS(wxPreviewCanvas, wxWindow) @@ -71,7 +73,6 @@ BEGIN_EVENT_TABLE(wxPreviewCanvas, wxScrolledWindow) EVT_PAINT(wxPreviewCanvas::OnPaint) EVT_SYS_COLOUR_CHANGED(wxPreviewCanvas::OnSysColourChanged) END_EVENT_TABLE() -#endif /* * Printer @@ -84,10 +85,12 @@ wxPrinterBase::wxPrinterBase(wxPrintDialogData *data) 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() { @@ -101,21 +104,24 @@ void wxPrintAbortDialog::OnCancel(wxCommandEvent& WXUNUSED(event)) wxPrinterBase::sm_abortWindow = (wxWindow *) NULL; } -wxWindow *wxPrinterBase::CreateAbortWindow(wxWindow *parent, wxPrintout *WXUNUSED(printout)) +wxWindow *wxPrinterBase::CreateAbortWindow(wxWindow *parent, wxPrintout * printout) { - 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)); + wxPrintAbortDialog *dialog = new wxPrintAbortDialog(parent, _("Printing ") , wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE); + + wxBoxSizer *button_sizer = new wxBoxSizer( wxVERTICAL ); + button_sizer->Add( new wxStaticText(dialog, -1, _("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 ); - wxButton *button = new wxButton(dialog, wxID_CANCEL, _("Cancel"), wxPoint(5, 30)); + dialog->SetAutoLayout( TRUE ); + dialog->SetSizer( button_sizer ); - dialog->Fit(); - button->Centre(wxHORIZONTAL); + button_sizer->Fit(dialog); + button_sizer->SetSizeHints (dialog) ; - dialog->Centre(); return dialog; } -void wxPrinterBase::ReportError(wxWindow *parent, wxPrintout *WXUNUSED(printout), char *message) +void wxPrinterBase::ReportError(wxWindow *parent, wxPrintout *WXUNUSED(printout), const wxString& message) { wxMessageBox(message, _("Printing Error"), wxOK, parent); } @@ -145,7 +151,7 @@ wxPrintout::~wxPrintout() bool wxPrintout::OnBeginDocument(int WXUNUSED(startPage), int WXUNUSED(endPage)) { - return GetDC()->StartDoc(_("Printing")); + return GetDC()->StartDoc(_("Printing ") + m_printoutTitle); } void wxPrintout::OnEndDocument() @@ -183,7 +189,7 @@ wxPreviewCanvas::wxPreviewCanvas(wxPrintPreviewBase *preview, wxWindow *parent, wxScrolledWindow(parent, -1, pos, size, style, name) { m_printPreview = preview; - SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE)); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE)); SetScrollbars(15, 18, 100, 100); } @@ -197,6 +203,13 @@ void wxPreviewCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) wxPaintDC dc(this); PrepareDC( dc ); +/* +#ifdef __WXGTK__ + if (!GetUpdateRegion().IsEmpty()) + dc.SetClippingRegion( GetUpdateRegion() ); +#endif +*/ + if (m_printPreview) { m_printPreview->PaintPage(this, dc); @@ -206,7 +219,7 @@ void wxPreviewCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) // Responds to colour changes, and passes event on to children. void wxPreviewCanvas::OnSysColourChanged(wxSysColourChangedEvent& event) { - SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE)); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE)); Refresh(); // Propagate the event to the non-top-level children @@ -222,6 +235,9 @@ BEGIN_EVENT_TABLE(wxPreviewControlBar, wxPanel) EVT_BUTTON(wxID_PREVIEW_PRINT, wxPreviewControlBar::OnPrint) EVT_BUTTON(wxID_PREVIEW_PREVIOUS, wxPreviewControlBar::OnPreviousButton) EVT_BUTTON(wxID_PREVIEW_NEXT, wxPreviewControlBar::OnNextButton) + EVT_BUTTON(wxID_PREVIEW_FIRST, wxPreviewControlBar::OnFirstButton) + EVT_BUTTON(wxID_PREVIEW_LAST, wxPreviewControlBar::OnLastButton) + EVT_BUTTON(wxID_PREVIEW_GOTO, wxPreviewControlBar::OnGotoButton) EVT_CHAR(wxPreviewControlBar::OnChar) EVT_CHOICE(wxID_PREVIEW_ZOOM, wxPreviewControlBar::OnZoom) EVT_PAINT(wxPreviewControlBar::OnPaint) @@ -276,6 +292,12 @@ void wxPreviewControlBar::OnChar(wxKeyEvent &event) OnNext(); break; case WXK_PRIOR: OnPrevious(); break; + case WXK_HOME: + OnFirst(); break; + case WXK_END: + OnLast(); break; + case WXK_TAB: + OnGoto(); break; default: event.Skip(); } @@ -311,6 +333,60 @@ void wxPreviewControlBar::OnPrevious(void) } } +void wxPreviewControlBar::OnFirst(void) +{ + wxPrintPreviewBase *preview = GetPrintPreview(); + if (preview) + { + int currentPage = preview->GetMinPage(); + if (preview->GetPrintout()->HasPage(currentPage)) + { + preview->SetCurrentPage(currentPage); + } + } +} + +void wxPreviewControlBar::OnLast(void) +{ + wxPrintPreviewBase *preview = GetPrintPreview(); + if (preview) + { + int currentPage = preview->GetMaxPage(); + if (preview->GetPrintout()->HasPage(currentPage)) + { + preview->SetCurrentPage(currentPage); + } + } +} + +void wxPreviewControlBar::OnGoto(void) +{ + wxPrintPreviewBase *preview = GetPrintPreview(); + if (preview) + { + long currentPage; + + if (preview->GetMinPage() > 0) + { + wxString strPrompt; + wxString strPage; + + strPrompt.Printf( _("%d...%d"), + preview->GetMinPage(), preview->GetMaxPage()); + strPage.Printf( _("%d"), preview->GetCurrentPage() ); + + strPage = + wxGetTextFromUser( strPrompt, _("Goto Page"), strPage); + + if ( strPage.ToLong( ¤tPage ) ) + if (preview->GetPrintout()->HasPage(currentPage)) + { + preview->SetCurrentPage(currentPage); + } + } + } +} + void wxPreviewControlBar::OnZoom(wxCommandEvent& WXUNUSED(event)) { int zoom = GetZoomControl(); @@ -333,7 +409,8 @@ void wxPreviewControlBar::CreateButtons() SetFont(buttonFont); */ - int buttonWidth = 65; + int buttonWidth = 60; + int buttonNavigation = 30; #ifdef __WXGTK__ int buttonHeight = -1; #else @@ -361,17 +438,38 @@ void wxPreviewControlBar::CreateButtons() x += gap + buttonWidth; } + if (m_buttonFlags & wxPREVIEW_FIRST) + { + m_firstPageButton = new wxButton(this, wxID_PREVIEW_FIRST, wxT("|<<"), wxPoint(x, y), + wxSize(buttonNavigation, buttonHeight)); + x += gap + buttonNavigation; + } + if (m_buttonFlags & wxPREVIEW_PREVIOUS) { - m_previousPageButton = new wxButton(this, wxID_PREVIEW_PREVIOUS, "<<", wxPoint(x, y), - wxSize(buttonWidth, buttonHeight)); - x += gap + buttonWidth; + m_previousPageButton = new wxButton(this, wxID_PREVIEW_PREVIOUS, wxT("<<"), wxPoint(x, y), + wxSize(buttonNavigation, buttonHeight)); + x += gap + buttonNavigation; } if (m_buttonFlags & wxPREVIEW_NEXT) { - m_nextPageButton = new wxButton(this, wxID_PREVIEW_NEXT, ">>", - wxPoint(x, y), wxSize(buttonWidth, buttonHeight)); + m_nextPageButton = new wxButton(this, wxID_PREVIEW_NEXT, wxT(">>"), + wxPoint(x, y), wxSize(buttonNavigation, buttonHeight)); + x += gap + buttonNavigation; + } + + if (m_buttonFlags & wxPREVIEW_LAST) + { + m_lastPageButton = new wxButton(this, wxID_PREVIEW_LAST, wxT(">>|"), wxPoint(x, y), + wxSize(buttonNavigation, buttonHeight)); + x += gap + buttonNavigation; + } + + if (m_buttonFlags & wxPREVIEW_GOTO) + { + m_gotoPageButton = new wxButton(this, wxID_PREVIEW_GOTO, wxT("Goto..."), wxPoint(x, y), + wxSize(buttonWidth, buttonHeight)); x += gap + buttonWidth; } @@ -384,14 +482,21 @@ void wxPreviewControlBar::CreateButtons() "120%", "150%", "200%" }; - m_zoomControl = new wxChoice(this, wxID_PREVIEW_ZOOM, - wxPoint(x, y), wxSize(100, -1)); - - // Yes, this look stupid, but this is because gcc gives up otherwise. int n = WXSIZEOF(choices); - for ( int i = 0; i < n; i++ ) - m_zoomControl->Append(choices[i]); - + + wxString* strings = new wxString[n]; + int i; + for (i = 0; i < n; i++ ) + strings[i] = choices[i]; + + m_zoomControl = new wxChoice(this, wxID_PREVIEW_ZOOM, + wxPoint(x, y), + wxSize(100, -1), + n, + strings + ); + delete[] strings; + SetZoomControl(m_printPreview->GetZoom()); } @@ -402,6 +507,7 @@ void wxPreviewControlBar::SetZoomControl(int zoom) { char buf[20]; sprintf(buf, "%d%%", zoom); +// Someone is calling methods that do no exist in wxChoice!! So I'll just comment out for VA for now if (m_zoomControl) m_zoomControl->SetStringSelection(buf); } @@ -409,7 +515,7 @@ void wxPreviewControlBar::SetZoomControl(int zoom) int wxPreviewControlBar::GetZoomControl() { wxChar buf[20]; - if (m_zoomControl && (m_zoomControl->GetStringSelection() != T(""))) + if (m_zoomControl && (m_zoomControl->GetStringSelection() != wxT(""))) { wxStrcpy(buf, m_zoomControl->GetStringSelection()); buf[wxStrlen(buf) - 1] = 0; @@ -597,7 +703,8 @@ bool wxPrintPreviewBase::SetCurrentPage(int pageNum) if (m_previewCanvas) { - RenderPage(pageNum); + if (!RenderPage(pageNum)) + return FALSE; m_previewCanvas->Refresh(); } return TRUE; @@ -608,7 +715,8 @@ bool wxPrintPreviewBase::PaintPage(wxWindow *canvas, wxDC& dc) DrawBlankPage(canvas, dc); if (!m_previewBitmap) - RenderPage(m_currentPage); + if (!RenderPage(m_currentPage)) + return FALSE; if (!m_previewBitmap) return FALSE; @@ -640,12 +748,14 @@ bool wxPrintPreviewBase::PaintPage(wxWindow *canvas, wxDC& dc) bool wxPrintPreviewBase::RenderPage(int pageNum) { + wxBusyCursor busy; + int canvasWidth, canvasHeight; if (!m_previewCanvas) { - wxMessageBox(_("wxPrintPreviewBase::RenderPage: must use wxPrintPreviewBase::SetCanvas to let me know about the canvas!"), - _("Print Preview Failure"), wxOK); + wxFAIL_MSG(_T("wxPrintPreviewBase::RenderPage: must use wxPrintPreviewBase::SetCanvas to let me know about the canvas!")); + return FALSE; } m_previewCanvas->GetSize(&canvasWidth, &canvasHeight); @@ -665,8 +775,10 @@ bool wxPrintPreviewBase::RenderPage(int pageNum) m_previewBitmap = new wxBitmap((int)actualWidth, (int)actualHeight); if (!m_previewBitmap || !m_previewBitmap->Ok()) { - if (m_previewBitmap) + if (m_previewBitmap) { delete m_previewBitmap; + m_previewBitmap = NULL; + } wxMessageBox(_("Sorry, not enough memory to create a preview."), _("Print Preview Failure"), wxOK); return FALSE; } @@ -696,6 +808,7 @@ bool wxPrintPreviewBase::RenderPage(int pageNum) memoryDC.SelectObject(wxNullBitmap); delete m_previewBitmap; + m_previewBitmap = NULL; return FALSE; } @@ -772,10 +885,10 @@ void wxPrintPreviewBase::SetZoom(int percent) m_previewBitmap = NULL; } - if (m_previewCanvas) { RenderPage(m_currentPage); + ((wxScrolledWindow *) m_previewCanvas)->Scroll(0, 0); m_previewCanvas->Clear(); m_previewCanvas->Refresh(); }