/************************************************************************* * * $RCSfile: dlgedview.cxx,v $ * * $Revision: 1.7 $ * * last change: $Author: vg $ $Date: 2002-05-10 09:29:27 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses * * - GNU Lesser General Public License Version 2.1 * - Sun Industry Standards Source License Version 1.1 * * Sun Microsystems Inc., October, 2000 * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2000 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library 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 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * * * Sun Industry Standards Source License Version 1.1 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.1 (the "License"); You may not use this file * except in compliance with the License. You may obtain a copy of the * License at http://www.openoffice.org/license.html. * * Software provided under this License is provided on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: Sun Microsystems, Inc. * * Copyright: 2000 by Sun Microsystems, Inc. * * All Rights Reserved. * * Contributor(s): _______________________________________ * * ************************************************************************/ #ifndef _BASCTL_DLGEDVIEW_HXX #include "dlgedview.hxx" #endif #ifndef _BASCTL_DLGED_HXX #include "dlged.hxx" #endif #ifndef _SVXIDS_HRC #include #endif #ifndef _SFXVIEWFRM_HXX #include #endif #ifndef _BASCTL_PROPBRW_HXX #include "propbrw.hxx" #endif #include #include TYPEINIT1( DlgEdView, SdrView ); //---------------------------------------------------------------------------- void DlgEdView::MarkListHasChanged() { SdrView::MarkListHasChanged(); BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; SfxChildWindow* pChildWin = pViewFrame ? pViewFrame->GetChildWindow(SID_SHOW_PROPERTYBROWSER) : NULL; if( pChildWin ) ((PropBrw*)(pChildWin->GetWindow()))->Update( this ); } //---------------------------------------------------------------------------- DlgEdView::DlgEdView( SdrModel* pModel, OutputDevice* pOut, DlgEditor* pEditor ) :SdrView( pModel, pOut ) ,pDlgEditor( pEditor ) { } //---------------------------------------------------------------------------- DlgEdView::~DlgEdView() { } //---------------------------------------------------------------------------- void DlgEdView::MakeVisible( const Rectangle& rRect, Window& rWin ) { // visible area MapMode aMap( rWin.GetMapMode() ); Point aOrg( aMap.GetOrigin() ); Size aVisSize( rWin.GetOutputSize() ); Rectangle RectTmp( Point(-aOrg.X(),-aOrg.Y()), aVisSize ); Rectangle aVisRect( RectTmp ); // check, if rectangle is inside visible area if ( !aVisRect.IsInside( rRect ) ) { // calculate scroll distance; the rectangle must be inside the visible area sal_Int32 nScrollX = 0, nScrollY = 0; sal_Int32 nVisLeft = aVisRect.Left(); sal_Int32 nVisRight = aVisRect.Right(); sal_Int32 nVisTop = aVisRect.Top(); sal_Int32 nVisBottom = aVisRect.Bottom(); sal_Int32 nDeltaX = pDlgEditor->GetHScroll()->GetLineSize(); sal_Int32 nDeltaY = pDlgEditor->GetVScroll()->GetLineSize(); while ( rRect.Right() > nVisRight + nScrollX ) nScrollX += nDeltaX; while ( rRect.Left() < nVisLeft + nScrollX ) nScrollX -= nDeltaX; while ( rRect.Bottom() > nVisBottom + nScrollY ) nScrollY += nDeltaY; while ( rRect.Top() < nVisTop + nScrollY ) nScrollY -= nDeltaY; // don't scroll beyond the page size Size aPageSize = pDlgEditor->GetPage()->GetSize(); sal_Int32 nPageWidth = aPageSize.Width(); sal_Int32 nPageHeight = aPageSize.Height(); if ( nVisRight + nScrollX > nPageWidth ) nScrollX = nPageWidth - nVisRight; if ( nVisLeft + nScrollX < 0 ) nScrollX = -nVisLeft; if ( nVisBottom + nScrollY > nPageHeight ) nScrollY = nPageHeight - nVisBottom; if ( nVisTop + nScrollY < 0 ) nScrollY = -nVisTop; // scroll window rWin.Update(); rWin.Scroll( -nScrollX, -nScrollY ); aMap.SetOrigin( Point( aOrg.X() - nScrollX, aOrg.Y() - nScrollY ) ); rWin.SetMapMode( aMap ); rWin.Update(); rWin.Invalidate(); // update scroll bars pDlgEditor->UpdateScrollBars(); } } //----------------------------------------------------------------------------