xref: /aoo41x/main/sd/source/ui/inc/Window.hxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef SD_WINDOW_HXX
29 #define SD_WINDOW_HXX
30 
31 
32 #include <tools/gen.hxx>
33 #include <vcl/window.hxx>
34 #include <svtools/transfer.hxx>
35 
36 namespace sd {
37 
38 class ViewShell;
39 
40 // Since we removed all old SV-stuff, there is no brush any more
41 // and so there is no BRUSH_SIZE defined in VCL.
42 // So I define it here
43 // #i2237#
44 // removed old stuff here which still forced zoom to be
45 // %BRUSH_SIZE which is outdated now
46 //#define BRUSH_SIZE		8
47 
48 /** An SdWindow contains the actual working area of ViewShell.
49 
50     <p>The zoom factor used by this class controls how much the page and the
51     shapes on it are scaled down (<100%) or up (>100%) when displayed on the
52     output device represented by the <type>OutputDevice</type>base class.  A
53     zoom factor of 100% would result (with a correctly set DPI value for an
54     output device) in a one to one mapping of the internal coordinates that
55     are stored in 100th of mm.  The zoom factor is stored in the map mode
56     member of the <type>OutputDevice</type> base class.  It is calculated to
57     be an integer percent value.
58 */
59 class Window
60     : public ::Window,
61       public ::DropTargetHelper
62 {
63 public:
64     Window (::Window* pParent);
65 	virtual ~Window (void);
66 
67 	void	SetViewShell (ViewShell* pViewSh);
68 
69     /** Set the zoom factor to the specified value and center the display
70         area arround the zoom center.
71         @param nZoom
72             The zoom factor is given as integral percent value.
73     */
74 	void	SetZoomIntegral(long nZoom);
75 
76     /** This internally used method performs the actual adaption of the
77         window's map mode to the specified zoom factor.
78         @param nZoom
79             The zoom factor is given as integral percent value.
80         @return
81             When the given zoom factor lies outside the valid range enclosed
82             by the minimal zoom factor previously calculated by
83             <member>CalcMinZoom</member> and a constant upper value it is
84             forced into that interval.  Therefore the returned value is a
85             valid zoom factor.
86     */
87 	long	SetZoomFactor(long nZoom);
88 
89     /** This method is called when the whole page shall be displayed in the
90         window.  Position and zoom factor are set so that the given
91         rectangle is displayed as large as possible in the window while at
92         the same time maintaining the rectangle's aspect ratio and adding a
93         small space at all its four sides (about 3% of width and height).
94         The map mode is adapted accordingly.
95         @param rZoomRect
96             The rectangle is expected to be given relative to the upper left
97             corner of the window in logical coordinates (100th of mm).
98         @return
99             The new zoom factor is returned as integral percent value.
100     */
101 	long SetZoomRect (const Rectangle& rZoomRect);
102 
103     long GetZoomForRect( const Rectangle& rZoomRect );
104 
105 
106 	void SetMinZoomAutoCalc (bool bAuto);
107 	void SetCalcMinZoomByMinSide (bool bMin);
108 
109     /** Calculate the minimal zoom factor as the value at which the
110         application area would completely fill the window.  All values set
111         manually or programatically are set to this value if they are
112         smaller.  If the currently used zoom factor is smaller than the minimal zoom
113         factor than set the minimal zoom factor as the new current zoom
114         factor.
115 
116         <p>This calculation is performed only when the
117         <member>bMinZoomAutoCalc</member> is set (to <TRUE/>).</p>
118     */
119 	void CalcMinZoom (void);
120 	void SetMinZoom (long int nMin);
121 	long GetMinZoom (void) const;
122 	void SetMaxZoom (long int nMax);
123 	long GetMaxZoom (void) const;
124 
125 	long GetZoom (void) const;
126 
127 	Point GetWinViewPos (void) const;
128 	Point GetViewOrigin (void) const;
129 	Size GetViewSize (void) const;
130 	void SetWinViewPos(const Point& rPnt);
131 	void SetViewOrigin(const Point& rPnt);
132 	void SetViewSize(const Size& rSize);
133 	void SetCenterAllowed (bool bIsAllowed);
134 
135     /** Calculate origin of the map mode accoring to the size of the view
136         and window (its size in model coordinates; that takes the zoom
137         factor into account), and the bCenterAllowed flag.  When it is not
138         set then nothing is changed.  When in any direction the window is
139         larger than the view or the value of aWinPos in this direction is -1
140         then the window is centered in this direction.
141         */
142 	void UpdateMapOrigin (sal_Bool bInvalidate = sal_True);
143 
144     void UpdateMapMode (void);
145 
146 	double	GetVisibleX();			// Interface fuer ScrollBars
147 	double	GetVisibleY();
148 	void	SetVisibleXY(double fX, double fY);
149 	double	GetVisibleWidth();
150 	double	GetVisibleHeight();
151 	double	GetScrlLineWidth();
152 	double	GetScrlLineHeight();
153 	double	GetScrlPageWidth();
154 	double	GetScrlPageHeight();
155 	virtual void GrabFocus();
156 	virtual void DataChanged( const DataChangedEvent& rDCEvt );
157 
158 	// DropTargetHelper
159 	virtual sal_Int8	AcceptDrop( const AcceptDropEvent& rEvt );
160 	virtual sal_Int8	ExecuteDrop( const ExecuteDropEvent& rEvt );
161 
162     /** The DropScroll() method is used by AcceptDrop() to scroll the
163         content of the window while dragging and dropping.  With this method
164         you can control whether DropScroll() shall be used.
165     */
166     void SetUseDropScroll (bool bUseDropScroll);
167 	void DropScroll (const Point& rMousePos);
168 protected:
169 	::sd::Window* mpShareWin;
170 	Point maWinPos;
171 	Point maViewOrigin;
172 	Size maViewSize;
173 	sal_uInt16 mnMinZoom;
174 	sal_uInt16 mnMaxZoom;
175     /** This flag tells whether to re-calculate the minimal zoom factor
176         depening on the current zoom factor.  According to task #105436# its
177         default value is now sal_False.
178     */
179 	bool mbMinZoomAutoCalc;
180 	bool mbCalcMinZoomByMinSide;
181 	bool mbCenterAllowed;
182 	long mnTicks;
183 	bool mbDraggedFrom;
184 
185 	ViewShell* mpViewShell;
186     bool mbUseDropScroll;
187 
188 	virtual void Resize();
189     virtual void PrePaint();
190 	virtual void Paint(const Rectangle& rRect);
191 	virtual void KeyInput(const KeyEvent& rKEvt);
192 	virtual void MouseMove(const MouseEvent& rMEvt);
193 	virtual void MouseButtonUp(const MouseEvent& rMEvt);
194 	virtual void MouseButtonDown(const MouseEvent& rMEvt);
195 	virtual void Command(const CommandEvent& rCEvt);
196 	virtual void RequestHelp( const HelpEvent& rEvt );
197 	virtual void LoseFocus();
198     virtual long Notify( NotifyEvent& rNEvt );
199 
200     /** Create an accessibility object that makes this window accessible.
201 
202         @return
203             The returned reference is empty if an accessible object could
204             not be created.
205     */
206     virtual ::com::sun::star::uno::Reference<
207         ::com::sun::star::accessibility::XAccessible>
208         CreateAccessible (void);
209 
210     XubString GetSurroundingText() const;
211     Selection GetSurroundingTextSelection() const;
212 };
213 
214 } // end of namespace sd
215 
216 #endif
217