diff options
Diffstat (limited to 'sd/source/ui/view/sdwindow.cxx')
-rw-r--r-- | sd/source/ui/view/sdwindow.cxx | 1220 |
1 files changed, 0 insertions, 1220 deletions
diff --git a/sd/source/ui/view/sdwindow.cxx b/sd/source/ui/view/sdwindow.cxx deleted file mode 100644 index 25ea467c7..000000000 --- a/sd/source/ui/view/sdwindow.cxx +++ /dev/null @@ -1,1220 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "Window.hxx" -#include <sfx2/dispatch.hxx> -#include <sfx2/request.hxx> - -#include <sfx2/viewfrm.hxx> -#include <svx/svxids.hrc> - -#include <editeng/outliner.hxx> -#include <editeng/editview.hxx> - -#include "app.hrc" -#include "helpids.h" -#include "ViewShell.hxx" -#include "DrawViewShell.hxx" -#include "View.hxx" -#include "FrameView.hxx" -#include "OutlineViewShell.hxx" -#include "drawdoc.hxx" -#include "AccessibleDrawDocumentView.hxx" -#include "WindowUpdater.hxx" - -namespace sd { - -#define SCROLL_LINE_FACT 0.05 // Faktor fuer Zeilenscrolling -#define SCROLL_PAGE_FACT 0.5 // Faktor fuer Seitenscrolling -#define SCROLL_SENSITIVE 20 // Sensitiver Bereich (Pixel) -#define ZOOM_MULTIPLICATOR 10000 // Multiplikator um Rundungsfehler zu vermeiden -#define MIN_ZOOM 5 // Minimaler Zoomfaktor -#define MAX_ZOOM 3000 // Maximaler Zoomfaktor - - -/************************************************************************* -|* -|* Konstruktor -|* -\************************************************************************/ - -Window::Window(::Window* pParent) - : ::Window(pParent, WinBits(WB_CLIPCHILDREN | WB_DIALOGCONTROL)), - DropTargetHelper( this ), - mpShareWin(NULL), - maWinPos(0, 0), // vorsichtshalber; die Werte sollten aber - maViewOrigin(0, 0), // vom Besitzer des Fensters neu gesetzt - maViewSize(1000, 1000), // werden - maPrevSize(-1,-1), - mnMinZoom(MIN_ZOOM), - mnMaxZoom(MAX_ZOOM), - mbMinZoomAutoCalc(false), - mbCalcMinZoomByMinSide(true), - mbCenterAllowed(true), - mnTicks (0), - mbDraggedFrom(false), - mpViewShell(NULL), - mbUseDropScroll (true) -{ - SetDialogControlFlags( WINDOW_DLGCTRL_RETURN | WINDOW_DLGCTRL_WANTFOCUS ); - - MapMode aMap(GetMapMode()); - aMap.SetMapUnit(MAP_100TH_MM); - SetMapMode(aMap); - - // Damit im Diamodus die ::WindowColor genommen wird - SetBackground( Wallpaper( GetSettings().GetStyleSettings().GetWindowColor() ) ); - - // adjust contrast mode initially - bool bUseContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); - SetDrawMode( bUseContrast - ? ViewShell::OUTPUT_DRAWMODE_CONTRAST - : ViewShell::OUTPUT_DRAWMODE_COLOR ); - - // Hilfe-ID setzen - // SetHelpId(HID_SD_WIN_DOCUMENT); - SetUniqueId(HID_SD_WIN_DOCUMENT); - - // #i78183# Added after discussed with AF - EnableRTL(sal_False); -} - -/************************************************************************* -|* -|* Destruktor -|* -\************************************************************************/ - -Window::~Window (void) -{ - if (mpViewShell != NULL) - { - WindowUpdater* pWindowUpdater = mpViewShell->GetWindowUpdater(); - if (pWindowUpdater != NULL) - pWindowUpdater->UnregisterWindow (this); - } -} - - - - -void Window::SetViewShell (ViewShell* pViewSh) -{ - WindowUpdater* pWindowUpdater = NULL; - // Unregister at device updater of old view shell. - if (mpViewShell != NULL) - { - pWindowUpdater = mpViewShell->GetWindowUpdater(); - if (pWindowUpdater != NULL) - pWindowUpdater->UnregisterWindow (this); - } - - mpViewShell = pViewSh; - - // Register at device updater of new view shell - if (mpViewShell != NULL) - { - pWindowUpdater = mpViewShell->GetWindowUpdater(); - if (pWindowUpdater != NULL) - pWindowUpdater->RegisterWindow (this); - } -} - -void Window::CalcMinZoom() -{ - // Are we entitled to change the minimal zoom factor? - if ( mbMinZoomAutoCalc ) - { - // Get current zoom factor. - long nZoom = GetZoom(); - - if ( mpShareWin ) - { - mpShareWin->CalcMinZoom(); - mnMinZoom = mpShareWin->mnMinZoom; - } - else - { - // Get the rectangle of the output area in logical coordinates - // and calculate the scaling factors that would lead to the view - // area (also called application area) to completely fill the - // window. - Size aWinSize = PixelToLogic(GetOutputSizePixel()); - sal_uLong nX = (sal_uLong) ((double) aWinSize.Width() - * (double) ZOOM_MULTIPLICATOR / (double) maViewSize.Width()); - sal_uLong nY = (sal_uLong) ((double) aWinSize.Height() - * (double) ZOOM_MULTIPLICATOR / (double) maViewSize.Height()); - - // Decide whether to take the larger or the smaller factor. - sal_uLong nFact; - if (mbCalcMinZoomByMinSide) - nFact = Min(nX, nY); - else - nFact = Max(nX, nY); - - // The factor is tansfomed according to the current zoom factor. - nFact = nFact * nZoom / ZOOM_MULTIPLICATOR; - mnMinZoom = Max((sal_uInt16) MIN_ZOOM, (sal_uInt16) nFact); - } - // If the current zoom factor is smaller than the calculated minimal - // zoom factor then set the new minimal factor as the current zoom - // factor. - if ( nZoom < (long) mnMinZoom ) - SetZoomFactor(mnMinZoom); - } -} - - - - -void Window::SetMinZoom (long int nMin) -{ - mnMinZoom = (sal_uInt16) nMin; -} - - - - -long Window::GetMinZoom (void) const -{ - return mnMinZoom; -} - - - - -void Window::SetMaxZoom (long int nMax) -{ - mnMaxZoom = (sal_uInt16) nMax; -} - - - - -long Window::GetMaxZoom (void) const -{ - return mnMaxZoom; -} - - - - -long Window::GetZoom (void) const -{ - if( GetMapMode().GetScaleX().GetDenominator() ) - { - return GetMapMode().GetScaleX().GetNumerator() * 100L - / GetMapMode().GetScaleX().GetDenominator(); - } - else - { - return 0; - } -} - - - - -/************************************************************************* -|* -|* Resize event -|* -\************************************************************************/ - -void Window::Resize() -{ - ::Window::Resize(); - CalcMinZoom(); - - if( mpViewShell && mpViewShell->GetViewFrame() ) - mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER ); -} - -/************************************************************************* -|* -|* PrePaint event -|* -\************************************************************************/ - -void Window::PrePaint() -{ - if ( mpViewShell ) - mpViewShell->PrePaint(); -} - -/************************************************************************* -|* -|* Paint event -|* -\************************************************************************/ - -void Window::Paint(const Rectangle& rRect) -{ - if ( mpViewShell ) - mpViewShell->Paint(rRect, this); -} - -/************************************************************************* -|* -|* Keyboard event -|* -\************************************************************************/ - -void Window::KeyInput(const KeyEvent& rKEvt) -{ - if (!(mpViewShell && mpViewShell->KeyInput(rKEvt, this))) - { - if (mpViewShell && rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE) - { - mpViewShell->GetViewShell()->Escape(); - } - else - { - ::Window::KeyInput(rKEvt); - } - } -} - -/************************************************************************* -|* -|* MouseButtonDown event -|* -\************************************************************************/ - -void Window::MouseButtonDown(const MouseEvent& rMEvt) -{ - if ( mpViewShell ) - mpViewShell->MouseButtonDown(rMEvt, this); -} - -/************************************************************************* -|* -|* MouseMove event -|* -\************************************************************************/ - -void Window::MouseMove(const MouseEvent& rMEvt) -{ - if ( mpViewShell ) - mpViewShell->MouseMove(rMEvt, this); -} - -/************************************************************************* -|* -|* MouseButtonUp event -|* -\************************************************************************/ - -void Window::MouseButtonUp(const MouseEvent& rMEvt) -{ - mnTicks = 0; - - if ( mpViewShell ) - mpViewShell->MouseButtonUp(rMEvt, this); -} - -/************************************************************************* -|* -|* Command event -|* -\************************************************************************/ - -void Window::Command(const CommandEvent& rCEvt) -{ - if ( mpViewShell ) - mpViewShell->Command(rCEvt, this); -} - -long Window::Notify( NotifyEvent& rNEvt ) -{ - long nResult = sal_False; - if ( mpViewShell ) - { - nResult = mpViewShell->Notify(rNEvt, this); - } - if( !nResult ) - ::Window::Notify( rNEvt ); - - return nResult; -} - - -/************************************************************************* -|* -|* RequestHelp event -|* -\************************************************************************/ - -void Window::RequestHelp(const HelpEvent& rEvt) -{ - if ( mpViewShell ) - { - if( !mpViewShell->RequestHelp( rEvt, this) ) - ::Window::RequestHelp( rEvt ); - } - else - ::Window::RequestHelp( rEvt ); -} - - - - -Point Window::GetWinViewPos (void) const -{ - return maWinPos; -} - - - - -Point Window::GetViewOrigin (void) const -{ - return maViewOrigin; -} - - - - -Size Window::GetViewSize (void) const -{ - return maViewSize; -} - - - - -/************************************************************************* -|* -|* Position der linken oberen Ecke des im Fenster sichtbaren Bereichs -|* setzen -|* -\************************************************************************/ - -void Window::SetWinViewPos(const Point& rPnt) -{ - maWinPos = rPnt; -} - -/************************************************************************* -|* -|* Ursprung der Darstellung in Bezug zur gesamten Arbeitsflaeche setzen -|* -\************************************************************************/ - -void Window::SetViewOrigin(const Point& rPnt) -{ - maViewOrigin = rPnt; -} - -/************************************************************************* -|* -|* Groesse der gesamten Arbeitsflaeche, die mit dem Fenster betrachtet -|* werden kann, setzen -|* -\************************************************************************/ - -void Window::SetViewSize(const Size& rSize) -{ - maViewSize = rSize; - CalcMinZoom(); -} - - - - -void Window::SetCenterAllowed (bool bIsAllowed) -{ - mbCenterAllowed = bIsAllowed; -} - - - - -long Window::SetZoomFactor(long nZoom) -{ - // Clip the zoom factor to the valid range marked by nMinZoom as - // calculated by CalcMinZoom() and the constant MAX_ZOOM. - if ( nZoom > MAX_ZOOM ) - nZoom = MAX_ZOOM; - if ( nZoom < (long) mnMinZoom ) - nZoom = mnMinZoom; - - // Set the zoom factor at the window's map mode. - MapMode aMap(GetMapMode()); - aMap.SetScaleX(Fraction(nZoom, 100)); - aMap.SetScaleY(Fraction(nZoom, 100)); - SetMapMode(aMap); - - // invalidate previous size - it was relative to the old scaling - maPrevSize = Size(-1,-1); - - // Update the map mode's origin (to what effect?). - UpdateMapOrigin(); - - // Update the view's snapping to the the new zoom factor. - if ( mpViewShell && mpViewShell->ISA(DrawViewShell) ) - ((DrawViewShell*) mpViewShell)->GetView()-> - RecalcLogicSnapMagnetic(*this); - - // Return the zoom factor just in case it has been changed above to lie - // inside the valid range. - return nZoom; -} - -void Window::SetZoomIntegral(long nZoom) -{ - // Clip the zoom factor to the valid range marked by nMinZoom as - // previously calculated by <member>CalcMinZoom()</member> and the - // MAX_ZOOM constant. - if ( nZoom > MAX_ZOOM ) - nZoom = MAX_ZOOM; - if ( nZoom < (long) mnMinZoom ) - nZoom = mnMinZoom; - - // Calculate the window's new origin. - Size aSize = PixelToLogic(GetOutputSizePixel()); - long nW = aSize.Width() * GetZoom() / nZoom; - long nH = aSize.Height() * GetZoom() / nZoom; - maWinPos.X() += (aSize.Width() - nW) / 2; - maWinPos.Y() += (aSize.Height() - nH) / 2; - if ( maWinPos.X() < 0 ) maWinPos.X() = 0; - if ( maWinPos.Y() < 0 ) maWinPos.Y() = 0; - - // Finally update this window's map mode to the given zoom factor that - // has been clipped to the valid range. - SetZoomFactor(nZoom); -} - -long Window::GetZoomForRect( const Rectangle& rZoomRect ) -{ - long nRetZoom = 100; - - if( (rZoomRect.GetWidth() != 0) && (rZoomRect.GetHeight() != 0)) - { - // Calculate the scale factors which will lead to the given - // rectangle being fully visible (when translated accordingly) as - // large as possible in the output area independently in both - // coordinate directions . - sal_uLong nX(0L); - sal_uLong nY(0L); - - const Size aWinSize( PixelToLogic(GetOutputSizePixel()) ); - if(rZoomRect.GetHeight()) - { - nX = (sal_uLong) ((double) aWinSize.Height() - * (double) ZOOM_MULTIPLICATOR / (double) rZoomRect.GetHeight()); - } - - if(rZoomRect.GetWidth()) - { - nY = (sal_uLong) ((double) aWinSize.Width() - * (double) ZOOM_MULTIPLICATOR / (double) rZoomRect.GetWidth()); - } - - // Use the smaller one of both so that the zoom rectangle will be - // fully visible with respect to both coordinate directions. - sal_uLong nFact = Min(nX, nY); - - // Transform the current zoom factor so that it leads to the desired - // scaling. - nRetZoom = nFact * GetZoom() / ZOOM_MULTIPLICATOR; - - // Calculate the new origin. - if ( nFact == 0 ) - { - // Don't change anything if the scale factor is degenrate. - nRetZoom = GetZoom(); - } - else - { - // Clip the zoom factor to the valid range marked by nMinZoom as - // previously calculated by <member>CalcMinZoom()</member> and the - // MAX_ZOOM constant. - if ( nRetZoom > MAX_ZOOM ) - nRetZoom = MAX_ZOOM; - if ( nRetZoom < (long) mnMinZoom ) - nRetZoom = mnMinZoom; - } - } - - return nRetZoom; -} - -/** Recalculate the zoom factor and translation so that the given rectangle - is displayed centered and as large as possible while still being fully - visible in the window. -*/ -long Window::SetZoomRect (const Rectangle& rZoomRect) -{ - long nNewZoom = 100; - - if (rZoomRect.GetWidth() == 0 || rZoomRect.GetHeight() == 0) - { - // The given rectangle is degenerate. Use the default zoom factor - // (above) of 100%. - SetZoomIntegral(nNewZoom); - } - else - { - Point aPos = rZoomRect.TopLeft(); - // Transform the output area from pixel coordinates into logical - // coordinates. - Size aWinSize = PixelToLogic(GetOutputSizePixel()); - // Paranoia! The degenerate case of zero width or height has been - // taken care of above. - DBG_ASSERT(rZoomRect.GetWidth(), "ZoomRect-Breite = 0!"); - DBG_ASSERT(rZoomRect.GetHeight(), "ZoomRect-Hoehe = 0!"); - - // Calculate the scale factors which will lead to the given - // rectangle being fully visible (when translated accordingly) as - // large as possible in the output area independently in both - // coordinate directions . - sal_uLong nX(0L); - sal_uLong nY(0L); - - if(rZoomRect.GetHeight()) - { - nX = (sal_uLong) ((double) aWinSize.Height() - * (double) ZOOM_MULTIPLICATOR / (double) rZoomRect.GetHeight()); - } - - if(rZoomRect.GetWidth()) - { - nY = (sal_uLong) ((double) aWinSize.Width() - * (double) ZOOM_MULTIPLICATOR / (double) rZoomRect.GetWidth()); - } - - // Use the smaller one of both so that the zoom rectangle will be - // fully visible with respect to both coordinate directions. - sal_uLong nFact = Min(nX, nY); - - // Transform the current zoom factor so that it leads to the desired - // scaling. - long nZoom = nFact * GetZoom() / ZOOM_MULTIPLICATOR; - - // Calculate the new origin. - if ( nFact == 0 ) - { - // Don't change anything if the scale factor is degenrate. - nNewZoom = GetZoom(); - } - else - { - // Calculate the new window position that centers the given - // rectangle on the screen. - if ( nZoom > MAX_ZOOM ) - nFact = nFact * MAX_ZOOM / nZoom; - - maWinPos = maViewOrigin + aPos; - - aWinSize.Width() = (long) ((double) aWinSize.Width() * (double) ZOOM_MULTIPLICATOR / (double) nFact); - maWinPos.X() += (rZoomRect.GetWidth() - aWinSize.Width()) / 2; - aWinSize.Height() = (long) ((double) aWinSize.Height() * (double) ZOOM_MULTIPLICATOR / (double) nFact); - maWinPos.Y() += (rZoomRect.GetHeight() - aWinSize.Height()) / 2; - - if ( maWinPos.X() < 0 ) maWinPos.X() = 0; - if ( maWinPos.Y() < 0 ) maWinPos.Y() = 0; - - // Adapt the window's map mode to the new zoom factor. - nNewZoom = SetZoomFactor(nZoom); - } - } - - return(nNewZoom); -} - - - - -void Window::SetMinZoomAutoCalc (bool bAuto) -{ - mbMinZoomAutoCalc = bAuto; -} - - - - -/************************************************************************* -|* -|* Neuen MapMode-Origin berechnen und setzen; wenn aWinPos.X()/Y() -|* gleich -1 ist, wird die entsprechende Position zentriert -|* (z.B. fuer Initialisierung) -|* -\************************************************************************/ - -void Window::UpdateMapOrigin(sal_Bool bInvalidate) -{ - sal_Bool bChanged = sal_False; - const Size aWinSize = PixelToLogic(GetOutputSizePixel()); - - if ( mbCenterAllowed ) - { - if( maPrevSize != Size(-1,-1) ) - { - // keep view centered around current pos, when window - // resizes - maWinPos.X() -= (aWinSize.Width() - maPrevSize.Width()) / 2; - maWinPos.Y() -= (aWinSize.Height() - maPrevSize.Height()) / 2; - bChanged = sal_True; - } - - if ( maWinPos.X() > maViewSize.Width() - aWinSize.Width() ) - { - maWinPos.X() = maViewSize.Width() - aWinSize.Width(); - bChanged = sal_True; - } - if ( maWinPos.Y() > maViewSize.Height() - aWinSize.Height() ) - { - maWinPos.Y() = maViewSize.Height() - aWinSize.Height(); - bChanged = sal_True; - } - if ( aWinSize.Width() > maViewSize.Width() || maWinPos.X() < 0 ) - { - maWinPos.X() = maViewSize.Width() / 2 - aWinSize.Width() / 2; - bChanged = sal_True; - } - if ( aWinSize.Height() > maViewSize.Height() || maWinPos.Y() < 0 ) - { - maWinPos.Y() = maViewSize.Height() / 2 - aWinSize.Height() / 2; - bChanged = sal_True; - } - } - - UpdateMapMode (); - - maPrevSize = aWinSize; - - if (bChanged && bInvalidate) - Invalidate(); -} - - - - -void Window::UpdateMapMode (void) -{ - maWinPos -= maViewOrigin; - Size aPix(maWinPos.X(), maWinPos.Y()); - aPix = LogicToPixel(aPix); - // Groesse muss vielfaches von BRUSH_SIZE sein, damit Muster - // richtig dargestellt werden - // #i2237# - // removed old stuff here which still forced zoom to be - // %BRUSH_SIZE which is outdated now - - if (mpViewShell && mpViewShell->ISA(DrawViewShell)) - { - // Seite soll nicht am Fensterrand "kleben" - if (aPix.Width() == 0) - { - // #i2237# - // Since BRUSH_SIZE alignment is outdated now, i use the - // former constant here directly - aPix.Width() -= 8; - } - if (aPix.Height() == 0) - { - // #i2237# - // Since BRUSH_SIZE alignment is outdated now, i use the - // former constant here directly - aPix.Height() -= 8; - } - } - - aPix = PixelToLogic(aPix); - maWinPos.X() = aPix.Width(); - maWinPos.Y() = aPix.Height(); - Point aNewOrigin (-maWinPos.X(), -maWinPos.Y()); - maWinPos += maViewOrigin; - - MapMode aMap(GetMapMode()); - aMap.SetOrigin(aNewOrigin); - SetMapMode(aMap); -} - - - - -/************************************************************************* -|* -|* X-Position des sichtbaren Bereichs als Bruchteil (< 1) -|* der gesamten Arbeitsbereichbreite zuruegeben -|* -\************************************************************************/ - -double Window::GetVisibleX() -{ - return ((double) maWinPos.X() / maViewSize.Width()); -} - -/************************************************************************* -|* -|* Y-Position des sichtbaren Bereichs als Bruchteil (< 1) -|* der gesamten Arbeitsbereichhoehe zuruegeben -|* -\************************************************************************/ - -double Window::GetVisibleY() -{ - return ((double) maWinPos.Y() / maViewSize.Height()); -} - -/************************************************************************* -|* -|* X- und Y-Position des sichtbaren Bereichs als Bruchteile (< 1) -|* der gesamten Arbeitsbereichgroesse setzen -|* negative Werte werden ignoriert -|* -\************************************************************************/ - -void Window::SetVisibleXY(double fX, double fY) -{ - long nOldX = maWinPos.X(); - long nOldY = maWinPos.Y(); - - if ( fX >= 0 ) - maWinPos.X() = (long) (fX * maViewSize.Width()); - if ( fY >= 0 ) - maWinPos.Y() = (long) (fY * maViewSize.Height()); - UpdateMapOrigin(sal_False); - Scroll(nOldX - maWinPos.X(), nOldY - maWinPos.Y(), SCROLL_CHILDREN); - Update(); -} - -/************************************************************************* -|* -|* Breite des sichtbaren Bereichs im Verhaeltnis zur -|* gesamten Arbeitsbereichbreite zuruegeben -|* -\************************************************************************/ - -double Window::GetVisibleWidth() -{ - Size aWinSize = PixelToLogic(GetOutputSizePixel()); - if ( aWinSize.Width() > maViewSize.Width() ) - aWinSize.Width() = maViewSize.Width(); - return ((double) aWinSize.Width() / maViewSize.Width()); -} - -/************************************************************************* -|* -|* Hoehe des sichtbaren Bereichs im Verhaeltnis zur -|* gesamten Arbeitsbereichhoehe zuruegeben -|* -\************************************************************************/ - -double Window::GetVisibleHeight() -{ - Size aWinSize = PixelToLogic(GetOutputSizePixel()); - if ( aWinSize.Height() > maViewSize.Height() ) - aWinSize.Height() = maViewSize.Height(); - return ((double) aWinSize.Height() / maViewSize.Height()); -} - -/************************************************************************* -|* -|* Breite einer Scrollspalte im Verhaeltnis zur gesamten -|* Arbeitsbereichbreite zuruegeben -|* -\************************************************************************/ - -double Window::GetScrlLineWidth() -{ - return (GetVisibleWidth() * SCROLL_LINE_FACT); -} - -/************************************************************************* -|* -|* Breite einer Scrollspalte im Verhaeltnis zur gesamten -|* Arbeitsbereichhoehe zuruegeben -|* -\************************************************************************/ - -double Window::GetScrlLineHeight() -{ - return (GetVisibleHeight() * SCROLL_LINE_FACT); -} - -/************************************************************************* -|* -|* Breite einer Scrollpage im Verhaeltnis zur gesamten -|* Arbeitsbereichbreite zuruegeben -|* -\************************************************************************/ - -double Window::GetScrlPageWidth() -{ - return (GetVisibleWidth() * SCROLL_PAGE_FACT); -} - -/************************************************************************* -|* -|* Breite einer Scrollpage im Verhaeltnis zur gesamten -|* Arbeitsbereichhoehe zuruegeben -|* -\************************************************************************/ - -double Window::GetScrlPageHeight() -{ - return (GetVisibleHeight() * SCROLL_PAGE_FACT); -} - -/************************************************************************* -|* -|* Fenster deaktivieren -|* -\************************************************************************/ - -void Window::LoseFocus() -{ - mnTicks = 0; - ::Window::LoseFocus (); -} - -/************************************************************************* -|* -|* Fenster aktivieren -|* -\************************************************************************/ - -void Window::GrabFocus() -{ - mnTicks = 0; - ::Window::GrabFocus (); -} - - -/************************************************************************* -|* -|* DataChanged -|* -\************************************************************************/ - -void Window::DataChanged( const DataChangedEvent& rDCEvt ) -{ - ::Window::DataChanged( rDCEvt ); - - // PRINTER bei allen Dokumenten weglassen, die keinen Printer benutzen. - // FONTS und FONTSUBSTITUTION weglassen, wenn keine Textausgaben - // vorhanden sind, bzw. wenn das Dokument keinen Text zulaesst. - - if ( (rDCEvt.GetType() == DATACHANGED_PRINTER) || - (rDCEvt.GetType() == DATACHANGED_DISPLAY) || - (rDCEvt.GetType() == DATACHANGED_FONTS) || - (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) || - ((rDCEvt.GetType() == DATACHANGED_SETTINGS) && - (rDCEvt.GetFlags() & SETTINGS_STYLE)) ) - { - if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && - (rDCEvt.GetFlags() & SETTINGS_STYLE) ) - { - // When the screen zoom factor has changed then reset the zoom - // factor of the frame to allways display the whole page. - const AllSettings* pOldSettings = rDCEvt.GetOldSettings (); - const AllSettings& rNewSettings = GetSettings (); - if (pOldSettings) - if (pOldSettings->GetStyleSettings().GetScreenZoom() - != rNewSettings.GetStyleSettings().GetScreenZoom()) - mpViewShell->GetViewFrame()->GetDispatcher()-> - Execute(SID_SIZE_PAGE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD); - - // ScrollBars neu anordnen bzw. Resize ausloesen, da sich - // ScrollBar-Groesse geaendert haben kann. Dazu muss dann im - // Resize-Handler aber auch die Groesse der ScrollBars aus - // den Settings abgefragt werden. - Resize(); - - // Daten neu Setzen, die aus den Systemeinstellungen bzw. aus - // den Settings uebernommen werden. Evtl. weitere Daten neu - // berechnen, da sich auch die Aufloesung hierdurch geaendert - // haben kann. - if( mpViewShell ) - { - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - SvtAccessibilityOptions aAccOptions; - sal_uLong nOutputMode; - sal_uInt16 nPreviewSlot; - - if( rStyleSettings.GetHighContrastMode() ) - nOutputMode = ViewShell::OUTPUT_DRAWMODE_CONTRAST; - else - nOutputMode = ViewShell::OUTPUT_DRAWMODE_COLOR; - - if( rStyleSettings.GetHighContrastMode() && aAccOptions.GetIsForPagePreviews() ) - nPreviewSlot = SID_PREVIEW_QUALITY_CONTRAST; - else - nPreviewSlot = SID_PREVIEW_QUALITY_COLOR; - - if( mpViewShell->ISA( DrawViewShell ) ) - { - SetDrawMode( nOutputMode ); - mpViewShell->GetFrameView()->SetDrawMode( nOutputMode ); - Invalidate(); - } - - // Overwrite window color for OutlineView - if( mpViewShell->ISA(OutlineViewShell ) ) - { - svtools::ColorConfig aColorConfig; - const Color aDocColor( aColorConfig.GetColorValue( svtools::DOCCOLOR ).nColor ); - SetBackground( Wallpaper( aDocColor ) ); - } - - SfxRequest aReq( nPreviewSlot, 0, mpViewShell->GetDocSh()->GetDoc()->GetItemPool() ); - mpViewShell->ExecReq( aReq ); - mpViewShell->Invalidate(); - mpViewShell->ArrangeGUIElements(); - - // re-create handles to show new outfit - if(mpViewShell->ISA(DrawViewShell)) - { - mpViewShell->GetView()->AdjustMarkHdl(); - } - } - } - - if ( (rDCEvt.GetType() == DATACHANGED_DISPLAY) || - ((rDCEvt.GetType() == DATACHANGED_SETTINGS) && - (rDCEvt.GetFlags() & SETTINGS_STYLE)) ) - { - // Virtuelle Device die auch von der Aufloesung oder von - // Systemeinstellungen abhaengen, sollten geupdatet werden. - // Ansonsten sollte zumindest bei DATACHANGED_DISPLAY - // die virtuellen Devices geupdatet werden, da es einige - // Systeme erlauben die Aufloesung und Farbtiefe waehrend - // der Laufzeit zu aendern oder eben bei Palettenaenderungen - // die virtuellen Device geupdatet werden muessen, da bei - // Ausgaben ein anderes Farbmatching stattfinden kann. - } - - if ( rDCEvt.GetType() == DATACHANGED_FONTS ) - { - // Wenn das Dokument Font-AuswahlBoxen anbietet, muessen - // diese geupdatet werden. Wie dies genau aussehen muss, - // weiss ich leider auch nicht. Aber evtl. kann man das - // ja global handeln. Dies muessten wir evtl. mal - // mit PB absprechen, aber der ist derzeit leider Krank. - // Also bevor dies hier gehandelt wird, vorher mit - // PB und mir absprechen. - } - - if ( (rDCEvt.GetType() == DATACHANGED_FONTS) || - (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) ) - { - // Formatierung neu durchfuehren, da Fonts die im Dokument - // vorkommen, nicht mehr vorhanden sein muessen oder - // jetzt vorhanden sind oder durch andere ersetzt wurden - // sind. - if( mpViewShell ) - { - DrawDocShell* pDocSh = mpViewShell->GetDocSh(); - if( pDocSh ) - pDocSh->SetPrinter( pDocSh->GetPrinter( sal_True ) ); - } - } - - if ( rDCEvt.GetType() == DATACHANGED_PRINTER ) - { - // Wie hier die Behandlung aussehen soll, weiss ich leider - // selbst noch nicht. Evtl. mal einen Printer loeschen und - // schauen was gemacht werden muss. Evtl. muesste ich in - // VCL dafuer noch etwas einbauen, wenn der benutze Printer - // geloescht wird. Ansonsten wuerde ich hier evtl. die - // Formatierung neu berechnen, wenn der aktuelle Drucker - // zerstoert wurde. - if( mpViewShell ) - { - DrawDocShell* pDocSh = mpViewShell->GetDocSh(); - if( pDocSh ) - pDocSh->SetPrinter( pDocSh->GetPrinter( sal_True ) ); - } - } - - // Alles neu ausgeben - Invalidate(); - } -} - - - - -/************************************************************************* -|* -|* DropTargetHelper::AcceptDrop -|* -\************************************************************************/ - -sal_Int8 Window::AcceptDrop( const AcceptDropEvent& rEvt ) -{ - sal_Int8 nRet = DND_ACTION_NONE; - - if( mpViewShell && !mpViewShell->GetDocSh()->IsReadOnly() ) - { - if( mpViewShell ) - nRet = mpViewShell->AcceptDrop( rEvt, *this, this, SDRPAGE_NOTFOUND, SDRLAYER_NOTFOUND ); - - if (mbUseDropScroll && ! mpViewShell->ISA(OutlineViewShell)) - DropScroll( rEvt.maPosPixel ); - } - - return nRet; -} - -/************************************************************************* -|* -|* DropTargetHelper::ExecuteDrop -|* -\************************************************************************/ - -sal_Int8 Window::ExecuteDrop( const ExecuteDropEvent& rEvt ) -{ - sal_Int8 nRet = DND_ACTION_NONE; - - if( mpViewShell ) - { - nRet = mpViewShell->ExecuteDrop( rEvt, *this, this, SDRPAGE_NOTFOUND, SDRLAYER_NOTFOUND ); - } - - return nRet; -} - - - - -void Window::SetUseDropScroll (bool bUseDropScroll) -{ - mbUseDropScroll = bUseDropScroll; -} - - - - -/************************************************************************* -|* -|* Scrolling bei AcceptDrop-Events -|* -\************************************************************************/ - -void Window::DropScroll(const Point& rMousePos) -{ - short nDx = 0; - short nDy = 0; - - Size aSize = GetOutputSizePixel(); - - if (aSize.Width() > SCROLL_SENSITIVE * 3) - { - if ( rMousePos.X() < SCROLL_SENSITIVE ) - { - nDx = -1; - } - - if ( rMousePos.X() >= aSize.Width() - SCROLL_SENSITIVE ) - { - nDx = 1; - } - } - - if (aSize.Height() > SCROLL_SENSITIVE * 3) - { - if ( rMousePos.Y() < SCROLL_SENSITIVE ) - { - nDy = -1; - } - - if ( rMousePos.Y() >= aSize.Height() - SCROLL_SENSITIVE ) - { - nDy = 1; - } - } - - if ( (nDx || nDy) && (rMousePos.X()!=0 || rMousePos.Y()!=0 ) ) - { - if (mnTicks > 20) - mpViewShell->ScrollLines(nDx, nDy); - else - mnTicks ++; - } -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> - Window::CreateAccessible (void) -{ - if (mpViewShell != NULL) - return mpViewShell->CreateAccessibleDocumentView (this); - else - { - OSL_TRACE ("::sd::Window::CreateAccessible: no view shell"); - return ::Window::CreateAccessible (); - } -} - -XubString Window::GetSurroundingText() const -{ - if ( mpViewShell->GetShellType() == ViewShell::ST_OUTLINE ) - { - return XubString(); - } - else if ( mpViewShell->GetView()->IsTextEdit() ) - { - OutlinerView *pOLV = mpViewShell->GetView()->GetTextEditOutlinerView(); - return pOLV->GetEditView().GetSurroundingText(); - } - else - { - return XubString(); - } -} - -Selection Window::GetSurroundingTextSelection() const -{ - if ( mpViewShell->GetShellType() == ViewShell::ST_OUTLINE ) - { - return Selection( 0, 0 ); - } - else if ( mpViewShell->GetView()->IsTextEdit() ) - { - OutlinerView *pOLV = mpViewShell->GetView()->GetTextEditOutlinerView(); - return pOLV->GetEditView().GetSurroundingTextSelection(); - } - else - { - return Selection( 0, 0 ); - } -} - -} // end of namespace sd - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |