1 /* 2 * Copyright 2002-2008, Haiku. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Michael Pfeiffer 7 * Hartmut Reh 8 * julun <host.haiku@gmx.de> 9 */ 10 #include "BlockingWindow.h" 11 #include "JobData.h" 12 #include "PrintJobReader.h" 13 14 15 #include <View.h> 16 17 18 class BButton; 19 class BFile; 20 class BMessage; 21 class BPicture; 22 class BScrollView; 23 class BStringView; 24 class BTextControl; 25 26 27 // #pragma mark - PreviewPage 28 29 30 class PreviewPage { 31 public: 32 PreviewPage(int32 page, PrintJobPage* pjp); 33 ~PreviewPage(); 34 35 void Draw(BView* view, const BRect& printRect); 36 status_t InitCheck() const; 37 int32 Page() const { return fPage; } 38 39 private: 40 int32 fPage; 41 status_t fStatus; 42 int32 fNumberOfPictures; 43 44 BRect* fRects; 45 BPoint* fPoints; 46 BPicture* fPictures; 47 }; 48 49 50 // #pragma mark - PreviewView 51 52 53 class PreviewView : public BView { 54 public: 55 PreviewView(BFile* jobFile, BRect rect); 56 virtual ~PreviewView(); 57 58 virtual void Show(); 59 virtual void Hide(); 60 virtual void Draw(BRect r); 61 virtual void FrameResized(float width, float height); 62 virtual void MouseDown(BPoint point); 63 virtual void MouseMoved(BPoint point, uint32 transit, 64 const BMessage* message); 65 virtual void MouseUp(BPoint point); 66 virtual void KeyDown(const char* bytes, int32 numBytes); 67 68 void ShowFirstPage(); 69 void ShowPrevPage(); 70 void ShowNextPage(); 71 void ShowLastPage(); 72 bool ShowsFirstPage() const; 73 bool ShowsLastPage() const; 74 void ShowFindPage(int32 page); 75 76 void ZoomIn(); 77 bool CanZoomIn() const; 78 void ZoomOut(); 79 bool CanZoomOut() const; 80 81 void FixScrollbars(); 82 BRect ViewRect() const; 83 status_t InitCheck() const; 84 int32 NumberOfPages() const; 85 int32 CurrentPage() const { return fPage + 1; } 86 87 private: 88 BRect _PaperRect() const; 89 float _ZoomFactor() const; 90 BRect _PrintableRect() const; 91 92 void _LoadPage(int32 page); 93 bool _IsPageValid() const; 94 bool _IsPageLoaded(int32 page) const; 95 96 BRect _ContentRect() const; 97 void _DrawPageFrame(BRect rect); 98 void _DrawPage(BRect updateRect); 99 void _DrawMarginFrame(BRect rect); 100 101 int32 _GetPageNumber(int32 index) const; 102 103 private: 104 int32 fPage; 105 int32 fZoom; 106 PrintJobReader fReader; 107 bool fReverse; 108 BRect fPaperRect; 109 BRect fPrintableRect; 110 bool fTracking; 111 bool fInsideView; 112 BPoint fScrollStart; 113 int32 fNumberOfPages; 114 int32 fNumberOfPagesPerPage; 115 PreviewPage* fCachedPage; 116 117 JobData::Orientation fOrientation; 118 JobData::PageSelection fPageSelection; 119 }; 120 121 122 // #pragma mark - PreviewWindow 123 124 125 class PreviewWindow : public BlockingWindow { 126 public: 127 PreviewWindow(BFile* jobFile, 128 bool showOkAndCancelButtons = false); 129 130 virtual void MessageReceived(BMessage* m); 131 132 status_t Go(); 133 status_t InitCheck() const { return fPreview->InitCheck(); } 134 135 136 private: 137 void _ResizeToPage(); 138 void _UpdateControls(); 139 140 private: 141 BButton* fFirst; 142 BButton* fNext; 143 BButton* fPrev; 144 BButton* fLast; 145 BButton* fZoomIn; 146 BButton* fZoomOut; 147 BTextControl* fPageNumber; 148 BStringView* fPageText; 149 PreviewView* fPreview; 150 BScrollView* fPreviewScroller; 151 float fButtonBarHeight; 152 153 enum { 154 MSG_FIRST_PAGE = 'pwfp', 155 MSG_NEXT_PAGE = 'pwnp', 156 MSG_PREV_PAGE = 'pwpp', 157 MSG_LAST_PAGE = 'pwlp', 158 MSG_FIND_PAGE = 'pwsp', 159 MSG_ZOOM_IN = 'pwzi', 160 MSG_ZOOM_OUT = 'pwzo', 161 MSG_PRINT_JOB = 'pwpj', 162 MSG_CANCEL_JOB = 'pwcj', 163 }; 164 }; 165