X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fc7995487f3032d8415f87619efac7c391c72730..9c136858af7a37b1ed7d5f036f8d6953f7c8d507:/src/common/prntbase.cpp diff --git a/src/common/prntbase.cpp b/src/common/prntbase.cpp index 2c878ff2dd..921ae318ad 100644 --- a/src/common/prntbase.cpp +++ b/src/common/prntbase.cpp @@ -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__ @@ -36,7 +36,9 @@ #include "wx/dcmemory.h" #include "wx/stattext.h" #include "wx/intl.h" -#endif +#include "wx/textdlg.h" +#include "wx/sizer.h" +#endif // !WX_PRECOMP #include "wx/prntbase.h" #include "wx/dcprint.h" @@ -46,8 +48,6 @@ #include #include -#include - #ifdef __WXMSW__ #include "wx/msw/private.h" #include @@ -234,6 +234,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) @@ -288,6 +291,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(); } @@ -323,6 +332,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(); @@ -345,7 +408,8 @@ void wxPreviewControlBar::CreateButtons() SetFont(buttonFont); */ - int buttonWidth = 65; + int buttonWidth = 60; + int buttonNavigation = 30; #ifdef __WXGTK__ int buttonHeight = -1; #else @@ -373,27 +437,48 @@ 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, wxT("<<"), wxPoint(x, y), - wxSize(buttonWidth, buttonHeight)); - x += gap + buttonWidth; + wxSize(buttonNavigation, buttonHeight)); + x += gap + buttonNavigation; } if (m_buttonFlags & wxPREVIEW_NEXT) { m_nextPageButton = new wxButton(this, wxID_PREVIEW_NEXT, wxT(">>"), - wxPoint(x, y), wxSize(buttonWidth, buttonHeight)); + 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; } if (m_buttonFlags & wxPREVIEW_ZOOM) { - static const char *choices[] = + static const wxChar *choices[] = { - "10%", "15%", "20%", "25%", "30%", "35%", "40%", "45%", "50%", "55%", - "60%", "65%", "70%", "75%", "80%", "85%", "90%", "95%", "100%", "110%", - "120%", "150%", "200%" + wxT("10%"), wxT("15%"), wxT("20%"), wxT("25%"), wxT("30%"), wxT("35%"), wxT("40%"), wxT("45%"), wxT("50%"), wxT("55%"), + wxT("60%"), wxT("65%"), wxT("70%"), wxT("75%"), wxT("80%"), wxT("85%"), wxT("90%"), wxT("95%"), wxT("100%"), wxT("110%"), + wxT("120%"), wxT("150%"), wxT("200%") }; int n = WXSIZEOF(choices); @@ -419,9 +504,9 @@ void wxPreviewControlBar::CreateButtons() 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 + wxChar buf[20]; + wxSprintf( buf, wxT("%d%%"), zoom ); + if (m_zoomControl) m_zoomControl->SetStringSelection(buf); } @@ -618,7 +703,7 @@ bool wxPrintPreviewBase::SetCurrentPage(int pageNum) if (m_previewCanvas) { if (!RenderPage(pageNum)) - return FALSE; + return FALSE; m_previewCanvas->Refresh(); } return TRUE; @@ -630,7 +715,7 @@ bool wxPrintPreviewBase::PaintPage(wxWindow *canvas, wxDC& dc) if (!m_previewBitmap) if (!RenderPage(m_currentPage)) - return FALSE; + return FALSE; if (!m_previewBitmap) return FALSE;