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