xref: /AOO41X/main/sw/source/ui/inc/pview.hxx (revision 4d7c9de063a797b8b4f3d45e3561e82ad1f8ef1f)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _SWPVIEW_HXX
24 #define _SWPVIEW_HXX
25 
26 #include <tools/link.hxx>
27 #include <vcl/window.hxx>
28 #include <sfx2/viewfrm.hxx>
29 #include <sfx2/viewfac.hxx>
30 #include <sfx2/viewsh.hxx>
31 #include <svx/zoomitem.hxx>
32 #include "swdllapi.h"
33 #include "shellid.hxx"
34 
35 class SwViewOption;
36 class SwDocShell;
37 class SwScrollbar;
38 class ViewShell;
39 class SwPagePreView;
40 class ImageButton;
41 class Button;
42 class SwRect;
43 class DataChangedEvent;
44 class CommandEvent;
45 class SvtAccessibilityOptions;
46 // OD 12.12.2002 #103492#
47 class SwPagePreviewLayout;
48 
49 // OD 24.03.2003 #108282# - delete member <mnVirtPage> and its accessor.
50 class SwPagePreViewWin : public Window
51 {
52     ViewShell*          mpViewShell;
53     sal_uInt16              mnSttPage;
54     sal_uInt8                mnRow, mnCol;
55     Size                maPxWinSize;
56     Fraction            maScale;
57     SwPagePreView&      mrView;
58     // OD 02.12.2002 #103492#
59     bool                mbCalcScaleForPreviewLayout;
60     Rectangle           maPaintedPreviewDocRect;
61     // OD 12.12.2002 #103492#
62     SwPagePreviewLayout* mpPgPrevwLayout;
63 
64     void SetPagePreview( sal_uInt8 nRow, sal_uInt8 nCol );
65 
66     using Window::Scroll;
67 
68 public:
69     SwPagePreViewWin( Window* pParent, SwPagePreView& rView );
70     ~SwPagePreViewWin();
71 
72     //Ruft ViewShell::Paint
73     virtual void Paint( const Rectangle& rRect );
74     virtual void KeyInput( const KeyEvent & );
75     virtual void Command( const CommandEvent& rCEvt );
76     virtual void MouseButtonDown(const MouseEvent& rMEvt);
77     virtual void DataChanged( const DataChangedEvent& );
78 
79     void SetViewShell( ViewShell* pShell );
80 
GetViewShell() const81     ViewShell* GetViewShell() const { return mpViewShell; }
82 
GetRow() const83     sal_uInt8    GetRow() const      { return mnRow; }
SetRow(sal_uInt8 n)84     void    SetRow( sal_uInt8 n )    { if( n ) mnRow = n; }
85 
GetCol() const86     sal_uInt8    GetCol() const      { return mnCol; }
SetCol(sal_uInt8 n)87     void    SetCol( sal_uInt8 n )    { if( n ) mnCol = n; }
88 
GetSttPage() const89     sal_uInt16  GetSttPage() const      { return mnSttPage; }
SetSttPage(sal_uInt16 n)90     void    SetSttPage( sal_uInt16 n )  { mnSttPage = n; }
91 
92     /** get selected page number of document preview
93 
94         OD 13.12.2002 #103492#
95 
96         @author OD
97 
98         @return selected page number
99     */
100     sal_uInt16 SelectedPage() const;
101 
102     /** set selected page number in document preview
103 
104         OD 13.12.2002 #103492#
105 
106         @author OD
107 
108         @param _nSelectedPageNum
109         input parameter - physical page number of page that will be the selected one.
110     */
111     void SetSelectedPage( sal_uInt16 _nSelectedPageNum );
112 
113     //JP 19.08.98: bei Einspaltigkeit gibt es keine 0. Seite!
GetDefSttPage() const114     sal_uInt16  GetDefSttPage() const   { return 1 == mnCol ? 1 : 0; }
115 
116     void CalcWish( sal_uInt8 nNewRow, sal_uInt8 nNewCol );
117 
GetWinSize() const118     const Size& GetWinSize() const  { return maPxWinSize; }
119     void SetWinSize( const Size& rNewSize );
120 
121     // OD 18.12.2002 #103492# - add <MV_SELPAGE>, <MV_SCROLL>
122     enum MoveMode{ MV_CALC, MV_PAGE_UP, MV_PAGE_DOWN, MV_DOC_STT, MV_DOC_END,
123                    MV_SELPAGE, MV_SCROLL, MV_NEWWINSIZE };
124     int MovePage( int eMoveMode );
125 
126     // erzeuge den String fuer die StatusLeiste
127     void GetStatusStr( String& rStr, sal_uInt16 nPageCount ) const;
128 
129     void RepaintCoreRect( const SwRect& rRect );
130 
131     /** method to adjust preview to a new zoom factor
132 
133         OD 02.12.2002 #103492#
134         paint of preview is prepared for a new zoom factor
135         OD 24.09.2003 #i19975# - zoom type has also been considered.
136         Thus, add new parameter <_eZoomType>
137 
138         @author OD
139     */
140     void AdjustPreviewToNewZoom( const sal_uInt16 _nZoomFactor,
141                                  const SvxZoomType _eZoomType );
142 
GetPaintedPreviewDocRect() const143     const Rectangle& GetPaintedPreviewDocRect() const
144     {
145         return maPaintedPreviewDocRect;
146     }
147 
148     void Scroll(long nXMove, long nYMove, sal_uInt16 nFlags = 0);
149 
150     /** method to enable/disable book preview
151 
152         OD 2004-03-05 #i18143#
153 
154         @author OD
155 
156         @param _bBookPreview
157         input parameter - boolean indicating, if book preview mode has to
158         switch on <sal_True> or of <sal_False>
159 
160         @return boolean indicating, if book preview mode has changed.
161     */
162     bool SetBookPreviewMode( const bool _bBookPreview );
163 
164     virtual ::com::sun::star::uno::Reference<
165         ::com::sun::star::accessibility::XAccessible>
166                     CreateAccessible();
167     virtual void SwitchView();
168 };
169 
170 
171 /*--------------------------------------------------------------------
172     Beschreibung:   Sicht auf ein Dokument
173  --------------------------------------------------------------------*/
174 
175 class SW_DLLPUBLIC SwPagePreView: public SfxViewShell
176 {
177     // ViewWindow und Henkel zur Core
178     // aktuelle Dispatcher-Shell
179     SwPagePreViewWin*        pViewWin;  //viewdata of the previous SwView and the new crsrposition
180     String                  sSwViewData,
181     //and the new cursor position if the user double click in the PagePreView
182                             sNewCrsrPos;
183     // to support keyboard the number of the page to go to can be set too
184     sal_uInt16                  nNewPage;
185     // Sichtbarer Bereich
186     String                  sPageStr;
187     Size                    aDocSz;
188     Rectangle               aVisArea;
189 
190     // MDI Bedienelemente
191     SwScrollbar             *pHScrollbar;
192     SwScrollbar             *pVScrollbar;
193     ImageButton             *pPageUpBtn,
194                             *pPageDownBtn;
195     // Dummy-Window zum F�llen der rechten unteren Ecke, wenn beide Scrollbars
196     // aktiv sind
197     Window                  *pScrollFill;
198 
199     sal_uInt16                  mnPageCount;
200     sal_Bool                    bNormalPrint;
201 
202     // OD 09.01.2003 #106334#
203     // new members to reset design mode at draw view for form shell on switching
204     // back from writer page preview to normal view.
205     sal_Bool                mbResetFormDesignMode:1;
206     sal_Bool                mbFormDesignModeToReset:1;
207 
208     SW_DLLPRIVATE void            Init(const SwViewOption* = 0);
209     SW_DLLPRIVATE Point           AlignToPixel(const Point& rPt) const;
210 
211     SW_DLLPRIVATE int             _CreateScrollbar( sal_Bool bHori );
212     SW_DLLPRIVATE DECL_LINK( ScrollHdl, SwScrollbar * );
213     SW_DLLPRIVATE DECL_LINK( EndScrollHdl, SwScrollbar * );
214     SW_DLLPRIVATE DECL_LINK( BtnPage, Button * );
215     SW_DLLPRIVATE int             ChgPage( int eMvMode, int bUpdateScrollbar = sal_True );
216 
217 
218     SW_DLLPRIVATE virtual SfxPrinter*     GetPrinter( sal_Bool bCreate = sal_False );
219     SW_DLLPRIVATE virtual sal_uInt16          SetPrinter( SfxPrinter *pNewPrinter, sal_uInt16 nDiffFlags = SFX_PRINTER_ALL, bool bIsAPI=false );
220     SW_DLLPRIVATE virtual SfxTabPage*     CreatePrintOptionsPage( Window *pParent,
221                                                 const SfxItemSet &rOptions );
222 
223     SW_DLLPRIVATE void CalcAndSetBorderPixel( SvBorder &rToFill, sal_Bool bInner );
224 
225     /** help method to execute SfxRequest FN_PAGE_UP and FN_PAGE_DOWN
226 
227         OD 04.03.2003 #107369#
228 
229         @param _bPgUp
230         input parameter - boolean that indicates, if FN_PAGE_UP or FN_PAGE_DOWN
231         has to be executed.
232 
233         @param _pReq
234         optional input parameter - pointer to the <SfxRequest> instance, if existing.
235 
236         @author OD
237     */
238     SW_DLLPRIVATE void _ExecPgUpAndPgDown( const bool  _bPgUp,
239                              SfxRequest* _pReq = 0 );
240 
241 protected:
242     virtual void    InnerResizePixel( const Point &rOfs, const Size &rSize );
243     virtual void    OuterResizePixel( const Point &rOfs, const Size &rSize );
244     virtual Size    GetOptimalSizePixel() const;
245 
246     void         SetZoom(SvxZoomType eSet, sal_uInt16 nFactor);
247 
248 public:
249     SFX_DECL_VIEWFACTORY(SwPagePreView);
250     SFX_DECL_INTERFACE(SW_PAGEPREVIEW)
251     TYPEINFO();
252 
GetFrameWindow() const253     inline Window*          GetFrameWindow() const { return &(GetViewFrame())->GetWindow(); }
GetViewShell() const254     inline ViewShell*       GetViewShell() const { return pViewWin->GetViewShell(); }
GetVisArea() const255     inline const Rectangle& GetVisArea() const { return aVisArea; }
GrabFocusViewWin()256     inline void             GrabFocusViewWin() { pViewWin->GrabFocus(); }
RepaintCoreRect(const SwRect & rRect)257     inline void             RepaintCoreRect( const SwRect& rRect )
258                                 { pViewWin->RepaintCoreRect( rRect ); }
259 
260     void            DocSzChgd(const Size& rNewSize);
GetDocSz() const261     const Size&     GetDocSz() const { return aDocSz; }
262 
263     virtual void    SetVisArea( const Rectangle&, sal_Bool bUpdateScrollbar = sal_True);
264 
265     inline void     AdjustEditWin();
266 
267     void            ScrollViewSzChg();
268     void            ScrollDocSzChg();
269     void            ShowHScrollbar(sal_Bool bShow);
270 
271     void            ShowVScrollbar(sal_Bool bShow);
272 
GetPageCount() const273     sal_uInt16          GetPageCount() const        { return mnPageCount; }
274 
275     sal_Bool            HandleWheelCommands( const CommandEvent& );
276 
GetPrevSwViewData() const277     const String&   GetPrevSwViewData() const       { return sSwViewData; }
SetNewCrsrPos(const String & rStr)278     void            SetNewCrsrPos( const String& rStr ) { sNewCrsrPos = rStr; }
GetNewCrsrPos() const279     const String&   GetNewCrsrPos() const           { return sNewCrsrPos; }
280 
GetNewPage() const281     sal_uInt16          GetNewPage() const {return nNewPage;}
SetNewPage(sal_uInt16 nSet)282     void            SetNewPage(sal_uInt16 nSet)  {nNewPage = nSet;}
283 
284         // Handler
285     void            Execute(SfxRequest&);
286     void            GetState(SfxItemSet&);
287     void            StateUndo(SfxItemSet&);
288 
289     SwDocShell*     GetDocShell();
290 
291     //apply Accessiblity options
292     void ApplyAccessiblityOptions(SvtAccessibilityOptions& rAccessibilityOptions);
293 
294     // OD 09.01.2003 #106334# - inline method to request values of new members
295     // <mbResetFormDesignMode> and <mbFormDesignModeToReset>
ResetFormDesignMode() const296     inline sal_Bool ResetFormDesignMode() const
297     {
298         return mbResetFormDesignMode;
299     }
300 
FormDesignModeToReset() const301     inline sal_Bool FormDesignModeToReset() const
302     {
303         return mbFormDesignModeToReset;
304     }
305 
306     /** adjust position of vertical scrollbar
307 
308         OD 19.02.2003 #107369
309         Currently used, if the complete preview layout rows fit into to the given
310         window, if a new page is selected and this page is visible.
311 
312         @author OD
313 
314         @param _nNewThumbPos
315         input parameter - new position, which will be assigned to the vertical
316         scrollbar.
317     */
318     void SetVScrollbarThumbPos( const sal_uInt16 _nNewThumbPos );
319 
320     SwPagePreView( SfxViewFrame* pFrame, SfxViewShell* );
321     ~SwPagePreView();
322 };
323 
324 // ----------------- inline Methoden ----------------------
325 
326 
AdjustEditWin()327 inline void SwPagePreView::AdjustEditWin()
328 {
329     OuterResizePixel( Point(), GetFrameWindow()->GetOutputSizePixel() );
330 }
331 
332 #endif
333