LCOV - code coverage report
Current view: top level - libreoffice/sd/source/ui/view - sdwindow.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 410 0.0 %
Date: 2012-12-27 Functions: 0 53 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include "Window.hxx"
      22             : #include <sfx2/dispatch.hxx>
      23             : #include <sfx2/request.hxx>
      24             : 
      25             : #include <sfx2/viewfrm.hxx>
      26             : #include <svx/svxids.hrc>
      27             : 
      28             : #include <editeng/outliner.hxx>
      29             : #include <editeng/editview.hxx>
      30             : 
      31             : #include "app.hrc"
      32             : #include "helpids.h"
      33             : #include "ViewShell.hxx"
      34             : #include "DrawViewShell.hxx"
      35             : #include "View.hxx"
      36             : #include "FrameView.hxx"
      37             : #include "OutlineViewShell.hxx"
      38             : #include "drawdoc.hxx"
      39             : #include "AccessibleDrawDocumentView.hxx"
      40             : #include "WindowUpdater.hxx"
      41             : 
      42             : namespace sd {
      43             : 
      44             : #define SCROLL_LINE_FACT   0.05     // Faktor fuer Zeilenscrolling
      45             : #define SCROLL_PAGE_FACT   0.5      // Faktor fuer Seitenscrolling
      46             : #define SCROLL_SENSITIVE   20       // Sensitiver Bereich (Pixel)
      47             : #define ZOOM_MULTIPLICATOR 10000    // Multiplikator um Rundungsfehler zu vermeiden
      48             : #define MIN_ZOOM           5        // Minimaler Zoomfaktor
      49             : #define MAX_ZOOM           3000     // Maximaler Zoomfaktor
      50             : 
      51             : 
      52             : /*************************************************************************
      53             : |*
      54             : |* Konstruktor
      55             : |*
      56             : \************************************************************************/
      57             : 
      58           0 : Window::Window(::Window* pParent)
      59             :     : ::Window(pParent, WinBits(WB_CLIPCHILDREN | WB_DIALOGCONTROL)),
      60             :       DropTargetHelper( this ),
      61             :       mpShareWin(NULL),
      62             :       maWinPos(0, 0),           // vorsichtshalber; die Werte sollten aber
      63             :       maViewOrigin(0, 0),       // vom Besitzer des Fensters neu gesetzt
      64             :       maViewSize(1000, 1000),   // werden
      65             :       maPrevSize(-1,-1),
      66             :       mnMinZoom(MIN_ZOOM),
      67             :       mnMaxZoom(MAX_ZOOM),
      68             :       mbMinZoomAutoCalc(false),
      69             :       mbCalcMinZoomByMinSide(true),
      70             :       mbCenterAllowed(true),
      71             :       mnTicks (0),
      72             :       mbDraggedFrom(false),
      73             :       mpViewShell(NULL),
      74           0 :       mbUseDropScroll (true)
      75             : {
      76           0 :     SetDialogControlFlags( WINDOW_DLGCTRL_RETURN | WINDOW_DLGCTRL_WANTFOCUS );
      77             : 
      78           0 :     MapMode aMap(GetMapMode());
      79           0 :     aMap.SetMapUnit(MAP_100TH_MM);
      80           0 :     SetMapMode(aMap);
      81             : 
      82             :     // Damit im Diamodus die ::WindowColor genommen wird
      83           0 :     SetBackground( Wallpaper( GetSettings().GetStyleSettings().GetWindowColor() ) );
      84             : 
      85             :     // adjust contrast mode initially
      86           0 :     bool bUseContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
      87             :     SetDrawMode( bUseContrast
      88             :         ? ViewShell::OUTPUT_DRAWMODE_CONTRAST
      89           0 :         : ViewShell::OUTPUT_DRAWMODE_COLOR );
      90             : 
      91             :     // Hilfe-ID setzen
      92             :     // SetHelpId(HID_SD_WIN_DOCUMENT);
      93           0 :     SetUniqueId(HID_SD_WIN_DOCUMENT);
      94             : 
      95             :     // #i78183# Added after discussed with AF
      96           0 :     EnableRTL(sal_False);
      97           0 : }
      98             : 
      99             : /*************************************************************************
     100             : |*
     101             : |* Destruktor
     102             : |*
     103             : \************************************************************************/
     104             : 
     105           0 : Window::~Window (void)
     106             : {
     107           0 :     if (mpViewShell != NULL)
     108             :     {
     109           0 :         WindowUpdater* pWindowUpdater = mpViewShell->GetWindowUpdater();
     110           0 :         if (pWindowUpdater != NULL)
     111           0 :             pWindowUpdater->UnregisterWindow (this);
     112             :     }
     113           0 : }
     114             : 
     115             : 
     116             : 
     117             : 
     118           0 : void Window::SetViewShell (ViewShell* pViewSh)
     119             : {
     120           0 :     WindowUpdater* pWindowUpdater = NULL;
     121             :     // Unregister at device updater of old view shell.
     122           0 :     if (mpViewShell != NULL)
     123             :     {
     124           0 :         pWindowUpdater = mpViewShell->GetWindowUpdater();
     125           0 :         if (pWindowUpdater != NULL)
     126           0 :             pWindowUpdater->UnregisterWindow (this);
     127             :     }
     128             : 
     129           0 :     mpViewShell = pViewSh;
     130             : 
     131             :     // Register at device updater of new view shell
     132           0 :     if (mpViewShell != NULL)
     133             :     {
     134           0 :         pWindowUpdater = mpViewShell->GetWindowUpdater();
     135           0 :         if (pWindowUpdater != NULL)
     136           0 :             pWindowUpdater->RegisterWindow (this);
     137             :     }
     138           0 : }
     139             : 
     140           0 : void Window::CalcMinZoom()
     141             : {
     142             :     // Are we entitled to change the minimal zoom factor?
     143           0 :     if ( mbMinZoomAutoCalc )
     144             :     {
     145             :         // Get current zoom factor.
     146           0 :         long nZoom = GetZoom();
     147             : 
     148           0 :         if ( mpShareWin )
     149             :         {
     150           0 :             mpShareWin->CalcMinZoom();
     151           0 :             mnMinZoom = mpShareWin->mnMinZoom;
     152             :         }
     153             :         else
     154             :         {
     155             :             // Get the rectangle of the output area in logical coordinates
     156             :             // and calculate the scaling factors that would lead to the view
     157             :             // area (also called application area) to completely fill the
     158             :             // window.
     159           0 :             Size aWinSize = PixelToLogic(GetOutputSizePixel());
     160           0 :             sal_uLong nX = (sal_uLong) ((double) aWinSize.Width()
     161           0 :                 * (double) ZOOM_MULTIPLICATOR / (double) maViewSize.Width());
     162           0 :             sal_uLong nY = (sal_uLong) ((double) aWinSize.Height()
     163           0 :                 * (double) ZOOM_MULTIPLICATOR / (double) maViewSize.Height());
     164             : 
     165             :             // Decide whether to take the larger or the smaller factor.
     166             :             sal_uLong nFact;
     167           0 :             if (mbCalcMinZoomByMinSide)
     168           0 :                 nFact = Min(nX, nY);
     169             :             else
     170           0 :                 nFact = Max(nX, nY);
     171             : 
     172             :             // The factor is tansfomed according to the current zoom factor.
     173           0 :             nFact = nFact * nZoom / ZOOM_MULTIPLICATOR;
     174           0 :             mnMinZoom = Max((sal_uInt16) MIN_ZOOM, (sal_uInt16) nFact);
     175             :         }
     176             :         // If the current zoom factor is smaller than the calculated minimal
     177             :         // zoom factor then set the new minimal factor as the current zoom
     178             :         // factor.
     179           0 :         if ( nZoom < (long) mnMinZoom )
     180           0 :             SetZoomFactor(mnMinZoom);
     181             :     }
     182           0 : }
     183             : 
     184             : 
     185             : 
     186             : 
     187           0 : void Window::SetMinZoom (long int nMin)
     188             : {
     189           0 :     mnMinZoom = (sal_uInt16) nMin;
     190           0 : }
     191             : 
     192             : 
     193             : 
     194             : 
     195           0 : long Window::GetMinZoom (void) const
     196             : {
     197           0 :     return mnMinZoom;
     198             : }
     199             : 
     200             : 
     201             : 
     202             : 
     203           0 : void Window::SetMaxZoom (long int nMax)
     204             : {
     205           0 :     mnMaxZoom = (sal_uInt16) nMax;
     206           0 : }
     207             : 
     208             : 
     209             : 
     210             : 
     211           0 : long Window::GetMaxZoom (void) const
     212             : {
     213           0 :     return mnMaxZoom;
     214             : }
     215             : 
     216             : 
     217             : 
     218             : 
     219           0 : long Window::GetZoom (void) const
     220             : {
     221           0 :     if( GetMapMode().GetScaleX().GetDenominator() )
     222             :     {
     223           0 :         return GetMapMode().GetScaleX().GetNumerator() * 100L
     224           0 :             / GetMapMode().GetScaleX().GetDenominator();
     225             :     }
     226             :     else
     227             :     {
     228           0 :         return 0;
     229             :     }
     230             : }
     231             : 
     232             : 
     233             : 
     234             : 
     235             : /*************************************************************************
     236             : |*
     237             : |* Resize event
     238             : |*
     239             : \************************************************************************/
     240             : 
     241           0 : void Window::Resize()
     242             : {
     243           0 :     ::Window::Resize();
     244           0 :     CalcMinZoom();
     245             : 
     246           0 :     if( mpViewShell && mpViewShell->GetViewFrame() )
     247           0 :         mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER );
     248           0 : }
     249             : 
     250             : /*************************************************************************
     251             : |*
     252             : |* PrePaint event
     253             : |*
     254             : \************************************************************************/
     255             : 
     256           0 : void Window::PrePaint()
     257             : {
     258           0 :     if ( mpViewShell )
     259           0 :         mpViewShell->PrePaint();
     260           0 : }
     261             : 
     262             : /*************************************************************************
     263             : |*
     264             : |* Paint event
     265             : |*
     266             : \************************************************************************/
     267             : 
     268           0 : void Window::Paint(const Rectangle& rRect)
     269             : {
     270           0 :     if ( mpViewShell )
     271           0 :         mpViewShell->Paint(rRect, this);
     272           0 : }
     273             : 
     274             : /*************************************************************************
     275             : |*
     276             : |* Keyboard event
     277             : |*
     278             : \************************************************************************/
     279             : 
     280           0 : void Window::KeyInput(const KeyEvent& rKEvt)
     281             : {
     282           0 :     if (!(mpViewShell && mpViewShell->KeyInput(rKEvt, this)))
     283             :     {
     284           0 :         if (mpViewShell && rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE)
     285             :         {
     286           0 :             mpViewShell->GetViewShell()->Escape();
     287             :         }
     288             :         else
     289             :         {
     290           0 :             ::Window::KeyInput(rKEvt);
     291             :         }
     292             :     }
     293           0 : }
     294             : 
     295             : /*************************************************************************
     296             : |*
     297             : |* MouseButtonDown event
     298             : |*
     299             : \************************************************************************/
     300             : 
     301           0 : void Window::MouseButtonDown(const MouseEvent& rMEvt)
     302             : {
     303           0 :     if ( mpViewShell )
     304           0 :         mpViewShell->MouseButtonDown(rMEvt, this);
     305           0 : }
     306             : 
     307             : /*************************************************************************
     308             : |*
     309             : |* MouseMove event
     310             : |*
     311             : \************************************************************************/
     312             : 
     313           0 : void Window::MouseMove(const MouseEvent& rMEvt)
     314             : {
     315           0 :     if ( mpViewShell )
     316           0 :         mpViewShell->MouseMove(rMEvt, this);
     317           0 : }
     318             : 
     319             : /*************************************************************************
     320             : |*
     321             : |* MouseButtonUp event
     322             : |*
     323             : \************************************************************************/
     324             : 
     325           0 : void Window::MouseButtonUp(const MouseEvent& rMEvt)
     326             : {
     327           0 :     mnTicks = 0;
     328             : 
     329           0 :     if ( mpViewShell )
     330           0 :         mpViewShell->MouseButtonUp(rMEvt, this);
     331           0 : }
     332             : 
     333             : /*************************************************************************
     334             : |*
     335             : |* Command event
     336             : |*
     337             : \************************************************************************/
     338             : 
     339           0 : void Window::Command(const CommandEvent& rCEvt)
     340             : {
     341           0 :     if ( mpViewShell )
     342           0 :         mpViewShell->Command(rCEvt, this);
     343           0 : }
     344             : 
     345           0 : long Window::Notify( NotifyEvent& rNEvt )
     346             : {
     347           0 :     long nResult = sal_False;
     348           0 :     if ( mpViewShell )
     349             :     {
     350           0 :         nResult = mpViewShell->Notify(rNEvt, this);
     351             :     }
     352           0 :     if( !nResult )
     353           0 :         nResult = ::Window::Notify( rNEvt );
     354             : 
     355           0 :     return nResult;
     356             : }
     357             : 
     358             : 
     359             : /*************************************************************************
     360             : |*
     361             : |* RequestHelp event
     362             : |*
     363             : \************************************************************************/
     364             : 
     365           0 : void Window::RequestHelp(const HelpEvent& rEvt)
     366             : {
     367           0 :     if ( mpViewShell )
     368             :     {
     369           0 :         if( !mpViewShell->RequestHelp( rEvt, this) )
     370           0 :             ::Window::RequestHelp( rEvt );
     371             :     }
     372             :     else
     373           0 :         ::Window::RequestHelp( rEvt );
     374           0 : }
     375             : 
     376             : 
     377             : 
     378             : 
     379           0 : Point Window::GetWinViewPos (void) const
     380             : {
     381           0 :     return maWinPos;
     382             : }
     383             : 
     384             : 
     385             : 
     386             : 
     387           0 : Point Window::GetViewOrigin (void) const
     388             : {
     389           0 :     return maViewOrigin;
     390             : }
     391             : 
     392             : 
     393             : 
     394             : 
     395           0 : Size Window::GetViewSize (void) const
     396             : {
     397           0 :     return maViewSize;
     398             : }
     399             : 
     400             : 
     401             : 
     402             : 
     403             : /*************************************************************************
     404             : |*
     405             : |* Position der linken oberen Ecke des im Fenster sichtbaren Bereichs
     406             : |* setzen
     407             : |*
     408             : \************************************************************************/
     409             : 
     410           0 : void Window::SetWinViewPos(const Point& rPnt)
     411             : {
     412           0 :     maWinPos = rPnt;
     413           0 : }
     414             : 
     415             : /*************************************************************************
     416             : |*
     417             : |* Ursprung der Darstellung in Bezug zur gesamten Arbeitsflaeche setzen
     418             : |*
     419             : \************************************************************************/
     420             : 
     421           0 : void Window::SetViewOrigin(const Point& rPnt)
     422             : {
     423           0 :     maViewOrigin = rPnt;
     424           0 : }
     425             : 
     426             : /*************************************************************************
     427             : |*
     428             : |* Groesse der gesamten Arbeitsflaeche, die mit dem Fenster betrachtet
     429             : |* werden kann, setzen
     430             : |*
     431             : \************************************************************************/
     432             : 
     433           0 : void Window::SetViewSize(const Size& rSize)
     434             : {
     435           0 :     maViewSize = rSize;
     436           0 :     CalcMinZoom();
     437           0 : }
     438             : 
     439             : 
     440             : 
     441             : 
     442           0 : void Window::SetCenterAllowed (bool bIsAllowed)
     443             : {
     444           0 :     mbCenterAllowed = bIsAllowed;
     445           0 : }
     446             : 
     447             : 
     448             : 
     449             : 
     450           0 : long Window::SetZoomFactor(long nZoom)
     451             : {
     452             :     // Clip the zoom factor to the valid range marked by nMinZoom as
     453             :     // calculated by CalcMinZoom() and the constant MAX_ZOOM.
     454           0 :     if ( nZoom > MAX_ZOOM )
     455           0 :         nZoom = MAX_ZOOM;
     456           0 :     if ( nZoom < (long) mnMinZoom )
     457           0 :         nZoom = mnMinZoom;
     458             : 
     459             :     // Set the zoom factor at the window's map mode.
     460           0 :     MapMode aMap(GetMapMode());
     461           0 :     aMap.SetScaleX(Fraction(nZoom, 100));
     462           0 :     aMap.SetScaleY(Fraction(nZoom, 100));
     463           0 :     SetMapMode(aMap);
     464             : 
     465             :     // invalidate previous size - it was relative to the old scaling
     466           0 :     maPrevSize = Size(-1,-1);
     467             : 
     468             :     // Update the map mode's origin (to what effect?).
     469           0 :     UpdateMapOrigin();
     470             : 
     471             :     // Update the view's snapping to the the new zoom factor.
     472           0 :     if ( mpViewShell && mpViewShell->ISA(DrawViewShell) )
     473           0 :         ((DrawViewShell*) mpViewShell)->GetView()->
     474           0 :                                         RecalcLogicSnapMagnetic(*this);
     475             : 
     476             :     // Return the zoom factor just in case it has been changed above to lie
     477             :     // inside the valid range.
     478           0 :     return nZoom;
     479             : }
     480             : 
     481           0 : void Window::SetZoomIntegral(long nZoom)
     482             : {
     483             :     // Clip the zoom factor to the valid range marked by nMinZoom as
     484             :     // previously calculated by <member>CalcMinZoom()</member> and the
     485             :     // MAX_ZOOM constant.
     486           0 :     if ( nZoom > MAX_ZOOM )
     487           0 :         nZoom = MAX_ZOOM;
     488           0 :     if ( nZoom < (long) mnMinZoom )
     489           0 :         nZoom = mnMinZoom;
     490             : 
     491             :     // Calculate the window's new origin.
     492           0 :     Size aSize = PixelToLogic(GetOutputSizePixel());
     493           0 :     long nW = aSize.Width()  * GetZoom() / nZoom;
     494           0 :     long nH = aSize.Height() * GetZoom() / nZoom;
     495           0 :     maWinPos.X() += (aSize.Width()  - nW) / 2;
     496           0 :     maWinPos.Y() += (aSize.Height() - nH) / 2;
     497           0 :     if ( maWinPos.X() < 0 ) maWinPos.X() = 0;
     498           0 :     if ( maWinPos.Y() < 0 ) maWinPos.Y() = 0;
     499             : 
     500             :     // Finally update this window's map mode to the given zoom factor that
     501             :     // has been clipped to the valid range.
     502           0 :     SetZoomFactor(nZoom);
     503           0 : }
     504             : 
     505           0 : long Window::GetZoomForRect( const Rectangle& rZoomRect )
     506             : {
     507           0 :     long nRetZoom = 100;
     508             : 
     509           0 :     if( (rZoomRect.GetWidth() != 0) && (rZoomRect.GetHeight() != 0))
     510             :     {
     511             :         // Calculate the scale factors which will lead to the given
     512             :         // rectangle being fully visible (when translated accordingly) as
     513             :         // large as possible in the output area independently in both
     514             :         // coordinate directions .
     515           0 :         sal_uLong nX(0L);
     516           0 :         sal_uLong nY(0L);
     517             : 
     518           0 :         const Size aWinSize( PixelToLogic(GetOutputSizePixel()) );
     519           0 :         if(rZoomRect.GetHeight())
     520             :         {
     521           0 :             nX = (sal_uLong) ((double) aWinSize.Height()
     522           0 :                * (double) ZOOM_MULTIPLICATOR / (double) rZoomRect.GetHeight());
     523             :         }
     524             : 
     525           0 :         if(rZoomRect.GetWidth())
     526             :         {
     527           0 :             nY = (sal_uLong) ((double) aWinSize.Width()
     528           0 :                 * (double) ZOOM_MULTIPLICATOR / (double) rZoomRect.GetWidth());
     529             :         }
     530             : 
     531             :         // Use the smaller one of both so that the zoom rectangle will be
     532             :         // fully visible with respect to both coordinate directions.
     533           0 :         sal_uLong nFact = Min(nX, nY);
     534             : 
     535             :         // Transform the current zoom factor so that it leads to the desired
     536             :         // scaling.
     537           0 :         nRetZoom = nFact * GetZoom() / ZOOM_MULTIPLICATOR;
     538             : 
     539             :         // Calculate the new origin.
     540           0 :         if ( nFact == 0 )
     541             :         {
     542             :             // Don't change anything if the scale factor is degenrate.
     543           0 :             nRetZoom = GetZoom();
     544             :         }
     545             :         else
     546             :         {
     547             :             // Clip the zoom factor to the valid range marked by nMinZoom as
     548             :             // previously calculated by <member>CalcMinZoom()</member> and the
     549             :             // MAX_ZOOM constant.
     550           0 :             if ( nRetZoom > MAX_ZOOM )
     551           0 :                 nRetZoom = MAX_ZOOM;
     552           0 :             if ( nRetZoom < (long) mnMinZoom )
     553           0 :                 nRetZoom = mnMinZoom;
     554             :        }
     555             :     }
     556             : 
     557           0 :     return nRetZoom;
     558             : }
     559             : 
     560             : /** Recalculate the zoom factor and translation so that the given rectangle
     561             :     is displayed centered and as large as possible while still being fully
     562             :     visible in the window.
     563             : */
     564           0 : long Window::SetZoomRect (const Rectangle& rZoomRect)
     565             : {
     566           0 :     long nNewZoom = 100;
     567             : 
     568           0 :     if (rZoomRect.GetWidth() == 0 || rZoomRect.GetHeight() == 0)
     569             :     {
     570             :         // The given rectangle is degenerate.  Use the default zoom factor
     571             :         // (above) of 100%.
     572           0 :         SetZoomIntegral(nNewZoom);
     573             :     }
     574             :     else
     575             :     {
     576           0 :         Point aPos = rZoomRect.TopLeft();
     577             :         // Transform the output area from pixel coordinates into logical
     578             :         // coordinates.
     579           0 :         Size aWinSize = PixelToLogic(GetOutputSizePixel());
     580             :         // Paranoia!  The degenerate case of zero width or height has been
     581             :         // taken care of above.
     582             :         DBG_ASSERT(rZoomRect.GetWidth(), "ZoomRect-Breite = 0!");
     583             :         DBG_ASSERT(rZoomRect.GetHeight(), "ZoomRect-Hoehe = 0!");
     584             : 
     585             :         // Calculate the scale factors which will lead to the given
     586             :         // rectangle being fully visible (when translated accordingly) as
     587             :         // large as possible in the output area independently in both
     588             :         // coordinate directions .
     589           0 :         sal_uLong nX(0L);
     590           0 :         sal_uLong nY(0L);
     591             : 
     592           0 :         if(rZoomRect.GetHeight())
     593             :         {
     594           0 :             nX = (sal_uLong) ((double) aWinSize.Height()
     595           0 :                * (double) ZOOM_MULTIPLICATOR / (double) rZoomRect.GetHeight());
     596             :         }
     597             : 
     598           0 :         if(rZoomRect.GetWidth())
     599             :         {
     600           0 :             nY = (sal_uLong) ((double) aWinSize.Width()
     601           0 :                 * (double) ZOOM_MULTIPLICATOR / (double) rZoomRect.GetWidth());
     602             :         }
     603             : 
     604             :         // Use the smaller one of both so that the zoom rectangle will be
     605             :         // fully visible with respect to both coordinate directions.
     606           0 :         sal_uLong nFact = Min(nX, nY);
     607             : 
     608             :         // Transform the current zoom factor so that it leads to the desired
     609             :         // scaling.
     610           0 :         long nZoom = nFact * GetZoom() / ZOOM_MULTIPLICATOR;
     611             : 
     612             :         // Calculate the new origin.
     613           0 :         if ( nFact == 0 )
     614             :         {
     615             :             // Don't change anything if the scale factor is degenrate.
     616           0 :             nNewZoom = GetZoom();
     617             :         }
     618             :         else
     619             :         {
     620             :             // Calculate the new window position that centers the given
     621             :             // rectangle on the screen.
     622           0 :             if ( nZoom > MAX_ZOOM )
     623           0 :                 nFact = nFact * MAX_ZOOM / nZoom;
     624             : 
     625           0 :             maWinPos = maViewOrigin + aPos;
     626             : 
     627           0 :             aWinSize.Width() = (long) ((double) aWinSize.Width() * (double) ZOOM_MULTIPLICATOR / (double) nFact);
     628           0 :             maWinPos.X() += (rZoomRect.GetWidth() - aWinSize.Width()) / 2;
     629           0 :             aWinSize.Height() = (long) ((double) aWinSize.Height() * (double) ZOOM_MULTIPLICATOR / (double) nFact);
     630           0 :             maWinPos.Y() += (rZoomRect.GetHeight() - aWinSize.Height()) / 2;
     631             : 
     632           0 :             if ( maWinPos.X() < 0 ) maWinPos.X() = 0;
     633           0 :             if ( maWinPos.Y() < 0 ) maWinPos.Y() = 0;
     634             : 
     635             :             // Adapt the window's map mode to the new zoom factor.
     636           0 :             nNewZoom = SetZoomFactor(nZoom);
     637             :         }
     638             :     }
     639             : 
     640           0 :     return(nNewZoom);
     641             : }
     642             : 
     643             : 
     644             : 
     645             : 
     646           0 : void Window::SetMinZoomAutoCalc (bool bAuto)
     647             : {
     648           0 :     mbMinZoomAutoCalc = bAuto;
     649           0 : }
     650             : 
     651             : 
     652             : 
     653             : 
     654             : /*************************************************************************
     655             : |*
     656             : |* Neuen MapMode-Origin berechnen und setzen; wenn aWinPos.X()/Y()
     657             : |* gleich -1 ist, wird die entsprechende Position zentriert
     658             : |* (z.B. fuer Initialisierung)
     659             : |*
     660             : \************************************************************************/
     661             : 
     662           0 : void Window::UpdateMapOrigin(sal_Bool bInvalidate)
     663             : {
     664           0 :     sal_Bool       bChanged = sal_False;
     665           0 :     const Size aWinSize = PixelToLogic(GetOutputSizePixel());
     666             : 
     667           0 :     if ( mbCenterAllowed )
     668             :     {
     669           0 :         if( maPrevSize != Size(-1,-1) )
     670             :         {
     671             :             // keep view centered around current pos, when window
     672             :             // resizes
     673           0 :             maWinPos.X() -= (aWinSize.Width() - maPrevSize.Width()) / 2;
     674           0 :             maWinPos.Y() -= (aWinSize.Height() - maPrevSize.Height()) / 2;
     675           0 :             bChanged = sal_True;
     676             :         }
     677             : 
     678           0 :         if ( maWinPos.X() > maViewSize.Width() - aWinSize.Width() )
     679             :         {
     680           0 :             maWinPos.X() = maViewSize.Width() - aWinSize.Width();
     681           0 :             bChanged = sal_True;
     682             :         }
     683           0 :         if ( maWinPos.Y() > maViewSize.Height() - aWinSize.Height() )
     684             :         {
     685           0 :             maWinPos.Y() = maViewSize.Height() - aWinSize.Height();
     686           0 :             bChanged = sal_True;
     687             :         }
     688           0 :         if ( aWinSize.Width() > maViewSize.Width() || maWinPos.X() < 0 )
     689             :         {
     690           0 :             maWinPos.X() = maViewSize.Width()  / 2 - aWinSize.Width()  / 2;
     691           0 :             bChanged = sal_True;
     692             :         }
     693           0 :         if ( aWinSize.Height() > maViewSize.Height() || maWinPos.Y() < 0 )
     694             :         {
     695           0 :             maWinPos.Y() = maViewSize.Height() / 2 - aWinSize.Height() / 2;
     696           0 :             bChanged = sal_True;
     697             :         }
     698             :     }
     699             : 
     700           0 :     UpdateMapMode ();
     701             : 
     702           0 :     maPrevSize = aWinSize;
     703             : 
     704           0 :     if (bChanged && bInvalidate)
     705           0 :         Invalidate();
     706           0 : }
     707             : 
     708             : 
     709             : 
     710             : 
     711           0 : void Window::UpdateMapMode (void)
     712             : {
     713           0 :     maWinPos -= maViewOrigin;
     714           0 :     Size aPix(maWinPos.X(), maWinPos.Y());
     715           0 :     aPix = LogicToPixel(aPix);
     716             :     // Groesse muss vielfaches von BRUSH_SIZE sein, damit Muster
     717             :     // richtig dargestellt werden
     718             :     // #i2237#
     719             :     // removed old stuff here which still forced zoom to be
     720             :     // %BRUSH_SIZE which is outdated now
     721             : 
     722           0 :     if (mpViewShell && mpViewShell->ISA(DrawViewShell))
     723             :     {
     724             :         // Seite soll nicht am Fensterrand "kleben"
     725           0 :         if (aPix.Width() == 0)
     726             :         {
     727             :             // #i2237#
     728             :             // Since BRUSH_SIZE alignment is outdated now, i use the
     729             :             // former constant here directly
     730           0 :             aPix.Width() -= 8;
     731             :         }
     732           0 :         if (aPix.Height() == 0)
     733             :         {
     734             :             // #i2237#
     735             :             // Since BRUSH_SIZE alignment is outdated now, i use the
     736             :             // former constant here directly
     737           0 :             aPix.Height() -= 8;
     738             :         }
     739             :     }
     740             : 
     741           0 :     aPix = PixelToLogic(aPix);
     742           0 :     maWinPos.X() = aPix.Width();
     743           0 :     maWinPos.Y() = aPix.Height();
     744           0 :     Point aNewOrigin (-maWinPos.X(), -maWinPos.Y());
     745           0 :     maWinPos += maViewOrigin;
     746             : 
     747           0 :     MapMode aMap(GetMapMode());
     748           0 :     aMap.SetOrigin(aNewOrigin);
     749           0 :     SetMapMode(aMap);
     750           0 : }
     751             : 
     752             : 
     753             : 
     754             : 
     755             : /*************************************************************************
     756             : |*
     757             : |* X-Position des sichtbaren Bereichs als Bruchteil (< 1)
     758             : |* der gesamten Arbeitsbereichbreite zuruegeben
     759             : |*
     760             : \************************************************************************/
     761             : 
     762           0 : double Window::GetVisibleX()
     763             : {
     764           0 :     return ((double) maWinPos.X() / maViewSize.Width());
     765             : }
     766             : 
     767             : /*************************************************************************
     768             : |*
     769             : |* Y-Position des sichtbaren Bereichs als Bruchteil (< 1)
     770             : |* der gesamten Arbeitsbereichhoehe zuruegeben
     771             : |*
     772             : \************************************************************************/
     773             : 
     774           0 : double Window::GetVisibleY()
     775             : {
     776           0 :     return ((double) maWinPos.Y() / maViewSize.Height());
     777             : }
     778             : 
     779             : /*************************************************************************
     780             : |*
     781             : |* X- und Y-Position des sichtbaren Bereichs als Bruchteile (< 1)
     782             : |* der gesamten Arbeitsbereichgroesse setzen
     783             : |* negative Werte werden ignoriert
     784             : |*
     785             : \************************************************************************/
     786             : 
     787           0 : void Window::SetVisibleXY(double fX, double fY)
     788             : {
     789           0 :     long nOldX = maWinPos.X();
     790           0 :     long nOldY = maWinPos.Y();
     791             : 
     792           0 :     if ( fX >= 0 )
     793           0 :         maWinPos.X() = (long) (fX * maViewSize.Width());
     794           0 :     if ( fY >= 0 )
     795           0 :         maWinPos.Y() = (long) (fY * maViewSize.Height());
     796           0 :     UpdateMapOrigin(sal_False);
     797           0 :     Scroll(nOldX - maWinPos.X(), nOldY - maWinPos.Y(), SCROLL_CHILDREN);
     798           0 :     Update();
     799           0 : }
     800             : 
     801             : /*************************************************************************
     802             : |*
     803             : |* Breite des sichtbaren Bereichs im Verhaeltnis zur
     804             : |* gesamten Arbeitsbereichbreite zuruegeben
     805             : |*
     806             : \************************************************************************/
     807             : 
     808           0 : double Window::GetVisibleWidth()
     809             : {
     810           0 :     Size aWinSize = PixelToLogic(GetOutputSizePixel());
     811           0 :     if ( aWinSize.Width() > maViewSize.Width() )
     812           0 :         aWinSize.Width() = maViewSize.Width();
     813           0 :     return ((double) aWinSize.Width() / maViewSize.Width());
     814             : }
     815             : 
     816             : /*************************************************************************
     817             : |*
     818             : |* Hoehe des sichtbaren Bereichs im Verhaeltnis zur
     819             : |* gesamten Arbeitsbereichhoehe zuruegeben
     820             : |*
     821             : \************************************************************************/
     822             : 
     823           0 : double Window::GetVisibleHeight()
     824             : {
     825           0 :     Size aWinSize = PixelToLogic(GetOutputSizePixel());
     826           0 :     if ( aWinSize.Height() > maViewSize.Height() )
     827           0 :         aWinSize.Height() = maViewSize.Height();
     828           0 :     return ((double) aWinSize.Height() / maViewSize.Height());
     829             : }
     830             : 
     831             : /*************************************************************************
     832             : |*
     833             : |* Breite einer Scrollspalte im Verhaeltnis zur gesamten
     834             : |* Arbeitsbereichbreite zuruegeben
     835             : |*
     836             : \************************************************************************/
     837             : 
     838           0 : double Window::GetScrlLineWidth()
     839             : {
     840           0 :     return (GetVisibleWidth() * SCROLL_LINE_FACT);
     841             : }
     842             : 
     843             : /*************************************************************************
     844             : |*
     845             : |* Breite einer Scrollspalte im Verhaeltnis zur gesamten
     846             : |* Arbeitsbereichhoehe zuruegeben
     847             : |*
     848             : \************************************************************************/
     849             : 
     850           0 : double Window::GetScrlLineHeight()
     851             : {
     852           0 :     return (GetVisibleHeight() * SCROLL_LINE_FACT);
     853             : }
     854             : 
     855             : /*************************************************************************
     856             : |*
     857             : |* Breite einer Scrollpage im Verhaeltnis zur gesamten
     858             : |* Arbeitsbereichbreite zuruegeben
     859             : |*
     860             : \************************************************************************/
     861             : 
     862           0 : double Window::GetScrlPageWidth()
     863             : {
     864           0 :     return (GetVisibleWidth() * SCROLL_PAGE_FACT);
     865             : }
     866             : 
     867             : /*************************************************************************
     868             : |*
     869             : |* Breite einer Scrollpage im Verhaeltnis zur gesamten
     870             : |* Arbeitsbereichhoehe zuruegeben
     871             : |*
     872             : \************************************************************************/
     873             : 
     874           0 : double Window::GetScrlPageHeight()
     875             : {
     876           0 :     return (GetVisibleHeight() * SCROLL_PAGE_FACT);
     877             : }
     878             : 
     879             : /*************************************************************************
     880             : |*
     881             : |* Fenster deaktivieren
     882             : |*
     883             : \************************************************************************/
     884             : 
     885           0 : void Window::LoseFocus()
     886             : {
     887           0 :     mnTicks = 0;
     888           0 :     ::Window::LoseFocus ();
     889           0 : }
     890             : 
     891             : /*************************************************************************
     892             : |*
     893             : |* Fenster aktivieren
     894             : |*
     895             : \************************************************************************/
     896             : 
     897           0 : void Window::GrabFocus()
     898             : {
     899           0 :     mnTicks      = 0;
     900           0 :     ::Window::GrabFocus ();
     901           0 : }
     902             : 
     903             : 
     904             : /*************************************************************************
     905             : |*
     906             : |* DataChanged
     907             : |*
     908             : \************************************************************************/
     909             : 
     910           0 : void Window::DataChanged( const DataChangedEvent& rDCEvt )
     911             : {
     912           0 :     ::Window::DataChanged( rDCEvt );
     913             : 
     914             :     // PRINTER bei allen Dokumenten weglassen, die keinen Printer benutzen.
     915             :     // FONTS und FONTSUBSTITUTION weglassen, wenn keine Textausgaben
     916             :     // vorhanden sind, bzw. wenn das Dokument keinen Text zulaesst.
     917             : 
     918           0 :     if ( (rDCEvt.GetType() == DATACHANGED_PRINTER) ||
     919           0 :          (rDCEvt.GetType() == DATACHANGED_DISPLAY) ||
     920           0 :          (rDCEvt.GetType() == DATACHANGED_FONTS) ||
     921           0 :          (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) ||
     922           0 :          ((rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
     923           0 :           (rDCEvt.GetFlags() & SETTINGS_STYLE)) )
     924             :     {
     925           0 :         if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
     926           0 :              (rDCEvt.GetFlags() & SETTINGS_STYLE) )
     927             :         {
     928             :             // When the screen zoom factor has changed then reset the zoom
     929             :             // factor of the frame to allways display the whole page.
     930           0 :             const AllSettings* pOldSettings = rDCEvt.GetOldSettings ();
     931           0 :             const AllSettings& rNewSettings = GetSettings ();
     932           0 :             if (pOldSettings)
     933           0 :                 if (pOldSettings->GetStyleSettings().GetScreenZoom()
     934           0 :                     != rNewSettings.GetStyleSettings().GetScreenZoom())
     935             :                     mpViewShell->GetViewFrame()->GetDispatcher()->
     936           0 :                         Execute(SID_SIZE_PAGE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
     937             : 
     938             :             // ScrollBars neu anordnen bzw. Resize ausloesen, da sich
     939             :             // ScrollBar-Groesse geaendert haben kann. Dazu muss dann im
     940             :             // Resize-Handler aber auch die Groesse der ScrollBars aus
     941             :             // den Settings abgefragt werden.
     942           0 :             Resize();
     943             : 
     944             :             // Daten neu Setzen, die aus den Systemeinstellungen bzw. aus
     945             :             // den Settings uebernommen werden. Evtl. weitere Daten neu
     946             :             // berechnen, da sich auch die Aufloesung hierdurch geaendert
     947             :             // haben kann.
     948           0 :             if( mpViewShell )
     949             :             {
     950           0 :                 const StyleSettings&    rStyleSettings = GetSettings().GetStyleSettings();
     951           0 :                 SvtAccessibilityOptions aAccOptions;
     952             :                 sal_uLong                   nOutputMode;
     953             :                 sal_uInt16                  nPreviewSlot;
     954             : 
     955           0 :                 if( rStyleSettings.GetHighContrastMode() )
     956           0 :                     nOutputMode = ViewShell::OUTPUT_DRAWMODE_CONTRAST;
     957             :                 else
     958           0 :                     nOutputMode = ViewShell::OUTPUT_DRAWMODE_COLOR;
     959             : 
     960           0 :                 if( rStyleSettings.GetHighContrastMode() && aAccOptions.GetIsForPagePreviews() )
     961           0 :                     nPreviewSlot = SID_PREVIEW_QUALITY_CONTRAST;
     962             :                 else
     963           0 :                     nPreviewSlot = SID_PREVIEW_QUALITY_COLOR;
     964             : 
     965           0 :                 if( mpViewShell->ISA( DrawViewShell ) )
     966             :                 {
     967           0 :                     SetDrawMode( nOutputMode );
     968           0 :                     mpViewShell->GetFrameView()->SetDrawMode( nOutputMode );
     969           0 :                     Invalidate();
     970             :                 }
     971             : 
     972             :                 // Overwrite window color for OutlineView
     973           0 :                 if( mpViewShell->ISA(OutlineViewShell ) )
     974             :                 {
     975           0 :                     svtools::ColorConfig aColorConfig;
     976           0 :                     const Color aDocColor( aColorConfig.GetColorValue( svtools::DOCCOLOR ).nColor );
     977           0 :                     SetBackground( Wallpaper( aDocColor ) );
     978             :                 }
     979             : 
     980           0 :                 SfxRequest aReq( nPreviewSlot, 0, mpViewShell->GetDocSh()->GetDoc()->GetItemPool() );
     981           0 :                 mpViewShell->ExecReq( aReq );
     982           0 :                 mpViewShell->Invalidate();
     983           0 :                 mpViewShell->ArrangeGUIElements();
     984             : 
     985             :                 // re-create handles to show new outfit
     986           0 :                 if(mpViewShell->ISA(DrawViewShell))
     987             :                 {
     988           0 :                     mpViewShell->GetView()->AdjustMarkHdl();
     989           0 :                 }
     990             :             }
     991             :         }
     992             : 
     993           0 :         if ( (rDCEvt.GetType() == DATACHANGED_DISPLAY) ||
     994           0 :              ((rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
     995           0 :               (rDCEvt.GetFlags() & SETTINGS_STYLE)) )
     996             :         {
     997             :             // Virtuelle Device die auch von der Aufloesung oder von
     998             :             // Systemeinstellungen abhaengen, sollten geupdatet werden.
     999             :             // Ansonsten sollte zumindest bei DATACHANGED_DISPLAY
    1000             :             // die virtuellen Devices geupdatet werden, da es einige
    1001             :             // Systeme erlauben die Aufloesung und Farbtiefe waehrend
    1002             :             // der Laufzeit zu aendern oder eben bei Palettenaenderungen
    1003             :             // die virtuellen Device geupdatet werden muessen, da bei
    1004             :             // Ausgaben ein anderes Farbmatching stattfinden kann.
    1005             :         }
    1006             : 
    1007           0 :         if ( rDCEvt.GetType() == DATACHANGED_FONTS )
    1008             :         {
    1009             :             // Wenn das Dokument Font-AuswahlBoxen anbietet, muessen
    1010             :             // diese geupdatet werden. Wie dies genau aussehen muss,
    1011             :             // weiss ich leider auch nicht. Aber evtl. kann man das
    1012             :             // ja global handeln. Dies muessten wir evtl. mal
    1013             :             // mit PB absprechen, aber der ist derzeit leider Krank.
    1014             :             // Also bevor dies hier gehandelt wird, vorher mit
    1015             :             // PB und mir absprechen.
    1016             :         }
    1017             : 
    1018           0 :         if ( (rDCEvt.GetType() == DATACHANGED_FONTS) ||
    1019           0 :              (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) )
    1020             :         {
    1021             :             // Formatierung neu durchfuehren, da Fonts die im Dokument
    1022             :             // vorkommen, nicht mehr vorhanden sein muessen oder
    1023             :             // jetzt vorhanden sind oder durch andere ersetzt wurden
    1024             :             // sind.
    1025           0 :             if( mpViewShell )
    1026             :             {
    1027           0 :                 DrawDocShell* pDocSh = mpViewShell->GetDocSh();
    1028           0 :                 if( pDocSh )
    1029           0 :                     pDocSh->SetPrinter( pDocSh->GetPrinter( sal_True ) );
    1030             :             }
    1031             :         }
    1032             : 
    1033           0 :         if ( rDCEvt.GetType() == DATACHANGED_PRINTER )
    1034             :         {
    1035             :             // Wie hier die Behandlung aussehen soll, weiss ich leider
    1036             :             // selbst noch nicht. Evtl. mal einen Printer loeschen und
    1037             :             // schauen was gemacht werden muss. Evtl. muesste ich in
    1038             :             // VCL dafuer noch etwas einbauen, wenn der benutze Printer
    1039             :             // geloescht wird. Ansonsten wuerde ich hier evtl. die
    1040             :             // Formatierung neu berechnen, wenn der aktuelle Drucker
    1041             :             // zerstoert wurde.
    1042           0 :             if( mpViewShell )
    1043             :             {
    1044           0 :                 DrawDocShell* pDocSh = mpViewShell->GetDocSh();
    1045           0 :                 if( pDocSh )
    1046           0 :                     pDocSh->SetPrinter( pDocSh->GetPrinter( sal_True ) );
    1047             :             }
    1048             :         }
    1049             : 
    1050             :         // Alles neu ausgeben
    1051           0 :         Invalidate();
    1052             :     }
    1053           0 : }
    1054             : 
    1055             : 
    1056             : 
    1057             : 
    1058             : /*************************************************************************
    1059             : |*
    1060             : |* DropTargetHelper::AcceptDrop
    1061             : |*
    1062             : \************************************************************************/
    1063             : 
    1064           0 : sal_Int8 Window::AcceptDrop( const AcceptDropEvent& rEvt )
    1065             : {
    1066           0 :     sal_Int8 nRet = DND_ACTION_NONE;
    1067             : 
    1068           0 :     if( mpViewShell && !mpViewShell->GetDocSh()->IsReadOnly() )
    1069             :     {
    1070           0 :         if( mpViewShell )
    1071           0 :             nRet = mpViewShell->AcceptDrop( rEvt, *this, this, SDRPAGE_NOTFOUND, SDRLAYER_NOTFOUND );
    1072             : 
    1073           0 :         if (mbUseDropScroll && ! mpViewShell->ISA(OutlineViewShell))
    1074           0 :             DropScroll( rEvt.maPosPixel );
    1075             :     }
    1076             : 
    1077           0 :     return nRet;
    1078             : }
    1079             : 
    1080             : /*************************************************************************
    1081             : |*
    1082             : |* DropTargetHelper::ExecuteDrop
    1083             : |*
    1084             : \************************************************************************/
    1085             : 
    1086           0 : sal_Int8 Window::ExecuteDrop( const ExecuteDropEvent& rEvt )
    1087             : {
    1088           0 :     sal_Int8 nRet = DND_ACTION_NONE;
    1089             : 
    1090           0 :     if( mpViewShell )
    1091             :     {
    1092           0 :         nRet = mpViewShell->ExecuteDrop( rEvt, *this, this, SDRPAGE_NOTFOUND, SDRLAYER_NOTFOUND );
    1093             :     }
    1094             : 
    1095           0 :     return nRet;
    1096             : }
    1097             : 
    1098             : 
    1099             : 
    1100             : 
    1101           0 : void Window::SetUseDropScroll (bool bUseDropScroll)
    1102             : {
    1103           0 :     mbUseDropScroll = bUseDropScroll;
    1104           0 : }
    1105             : 
    1106             : 
    1107             : 
    1108             : 
    1109             : /*************************************************************************
    1110             : |*
    1111             : |* Scrolling bei AcceptDrop-Events
    1112             : |*
    1113             : \************************************************************************/
    1114             : 
    1115           0 : void Window::DropScroll(const Point& rMousePos)
    1116             : {
    1117           0 :     short nDx = 0;
    1118           0 :     short nDy = 0;
    1119             : 
    1120           0 :     Size aSize = GetOutputSizePixel();
    1121             : 
    1122           0 :     if (aSize.Width() > SCROLL_SENSITIVE * 3)
    1123             :     {
    1124           0 :         if ( rMousePos.X() < SCROLL_SENSITIVE )
    1125             :         {
    1126           0 :             nDx = -1;
    1127             :         }
    1128             : 
    1129           0 :         if ( rMousePos.X() >= aSize.Width() - SCROLL_SENSITIVE )
    1130             :         {
    1131           0 :             nDx = 1;
    1132             :         }
    1133             :     }
    1134             : 
    1135           0 :     if (aSize.Height() > SCROLL_SENSITIVE * 3)
    1136             :     {
    1137           0 :         if ( rMousePos.Y() < SCROLL_SENSITIVE )
    1138             :         {
    1139           0 :             nDy = -1;
    1140             :         }
    1141             : 
    1142           0 :         if ( rMousePos.Y() >= aSize.Height() - SCROLL_SENSITIVE )
    1143             :         {
    1144           0 :             nDy = 1;
    1145             :         }
    1146             :     }
    1147             : 
    1148           0 :     if ( (nDx || nDy) && (rMousePos.X()!=0 || rMousePos.Y()!=0 ) )
    1149             :     {
    1150           0 :         if (mnTicks > 20)
    1151           0 :             mpViewShell->ScrollLines(nDx, nDy);
    1152             :         else
    1153           0 :             mnTicks ++;
    1154             :     }
    1155           0 : }
    1156             : 
    1157             : 
    1158             : 
    1159             : 
    1160             : ::com::sun::star::uno::Reference<
    1161             :     ::com::sun::star::accessibility::XAccessible>
    1162           0 :     Window::CreateAccessible (void)
    1163             : {
    1164           0 :     if (mpViewShell != NULL)
    1165           0 :         return mpViewShell->CreateAccessibleDocumentView (this);
    1166             :     else
    1167             :     {
    1168             :         OSL_TRACE ("::sd::Window::CreateAccessible: no view shell");
    1169           0 :         return ::Window::CreateAccessible ();
    1170             :     }
    1171             : }
    1172             : 
    1173           0 : rtl::OUString Window::GetSurroundingText() const
    1174             : {
    1175           0 :     if ( mpViewShell->GetShellType() == ViewShell::ST_OUTLINE )
    1176           0 :         return rtl::OUString();
    1177           0 :     else if ( mpViewShell->GetView()->IsTextEdit() )
    1178             :     {
    1179           0 :         OutlinerView *pOLV = mpViewShell->GetView()->GetTextEditOutlinerView();
    1180           0 :         return pOLV->GetEditView().GetSurroundingText();
    1181             :     }
    1182           0 :     return rtl::OUString();
    1183             : }
    1184             : 
    1185           0 : Selection Window::GetSurroundingTextSelection() const
    1186             : {
    1187           0 :     if ( mpViewShell->GetShellType() == ViewShell::ST_OUTLINE )
    1188             :     {
    1189           0 :         return Selection( 0, 0 );
    1190             :     }
    1191           0 :     else if ( mpViewShell->GetView()->IsTextEdit() )
    1192             :     {
    1193           0 :         OutlinerView *pOLV = mpViewShell->GetView()->GetTextEditOutlinerView();
    1194           0 :         return pOLV->GetEditView().GetSurroundingTextSelection();
    1195             :     }
    1196             :     else
    1197             :     {
    1198           0 :         return Selection( 0, 0 );
    1199             :     }
    1200             : }
    1201             : 
    1202             : } // end of namespace sd
    1203             : 
    1204             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10