1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sc.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include "scitems.hxx" 32*cdf0e10cSrcweir #include <editeng/eeitem.hxx> 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include <svx/svdoutl.hxx> 35*cdf0e10cSrcweir #include <svx/svdotext.hxx> 36*cdf0e10cSrcweir #include <svx/svdpagv.hxx> 37*cdf0e10cSrcweir #include <editeng/sizeitem.hxx> 38*cdf0e10cSrcweir #include <sfx2/bindings.hxx> 39*cdf0e10cSrcweir #include <svl/ptitem.hxx> 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir #include "tabvwsh.hxx" 42*cdf0e10cSrcweir #include "gridwin.hxx" 43*cdf0e10cSrcweir #include "dbfunc.hxx" 44*cdf0e10cSrcweir #include "viewdata.hxx" 45*cdf0e10cSrcweir #include "output.hxx" 46*cdf0e10cSrcweir #include "drawview.hxx" 47*cdf0e10cSrcweir #include "fupoor.hxx" 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir #include "drawutil.hxx" 50*cdf0e10cSrcweir #include "document.hxx" 51*cdf0e10cSrcweir #include "drwlayer.hxx" 52*cdf0e10cSrcweir #include <vcl/svapp.hxx> 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir // ----------------------------------------------------------------------- 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir sal_Bool ScGridWindow::DrawMouseButtonDown(const MouseEvent& rMEvt) 57*cdf0e10cSrcweir { 58*cdf0e10cSrcweir sal_Bool bRet = sal_False; 59*cdf0e10cSrcweir FuPoor* pDraw = pViewData->GetView()->GetDrawFuncPtr(); 60*cdf0e10cSrcweir if (pDraw && !pViewData->IsRefMode()) 61*cdf0e10cSrcweir { 62*cdf0e10cSrcweir pDraw->SetWindow( this ); 63*cdf0e10cSrcweir Point aLogicPos = PixelToLogic(rMEvt.GetPosPixel()); 64*cdf0e10cSrcweir if ( pDraw->IsDetectiveHit( aLogicPos ) ) 65*cdf0e10cSrcweir { 66*cdf0e10cSrcweir // auf Detektiv-Pfeilen gar nichts (Doppelklick wird bei ButtonUp ausgewertet) 67*cdf0e10cSrcweir bRet = sal_True; 68*cdf0e10cSrcweir } 69*cdf0e10cSrcweir else 70*cdf0e10cSrcweir { 71*cdf0e10cSrcweir bRet = pDraw->MouseButtonDown( rMEvt ); 72*cdf0e10cSrcweir if ( bRet ) 73*cdf0e10cSrcweir UpdateStatusPosSize(); 74*cdf0e10cSrcweir } 75*cdf0e10cSrcweir } 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir // bei rechter Taste Draw-Aktion abbrechen 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetScDrawView(); 80*cdf0e10cSrcweir if ( pDrView && !rMEvt.IsLeft() && !bRet ) 81*cdf0e10cSrcweir { 82*cdf0e10cSrcweir pDrView->BrkAction(); 83*cdf0e10cSrcweir bRet = sal_True; 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir return bRet; 86*cdf0e10cSrcweir } 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir sal_Bool ScGridWindow::DrawMouseButtonUp(const MouseEvent& rMEvt) 89*cdf0e10cSrcweir { 90*cdf0e10cSrcweir ScViewFunc* pView = pViewData->GetView(); 91*cdf0e10cSrcweir sal_Bool bRet = sal_False; 92*cdf0e10cSrcweir FuPoor* pDraw = pView->GetDrawFuncPtr(); 93*cdf0e10cSrcweir if (pDraw && !pViewData->IsRefMode()) 94*cdf0e10cSrcweir { 95*cdf0e10cSrcweir pDraw->SetWindow( this ); 96*cdf0e10cSrcweir bRet = pDraw->MouseButtonUp( rMEvt ); 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir // execute "format paint brush" for drawing objects 99*cdf0e10cSrcweir SfxItemSet* pDrawBrush = pView->GetDrawBrushSet(); 100*cdf0e10cSrcweir if ( pDrawBrush ) 101*cdf0e10cSrcweir { 102*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetScDrawView(); 103*cdf0e10cSrcweir if ( pDrView ) 104*cdf0e10cSrcweir { 105*cdf0e10cSrcweir sal_Bool bReplaceAll = sal_True; 106*cdf0e10cSrcweir pDrView->SetAttrToMarked(*pDrawBrush, bReplaceAll); 107*cdf0e10cSrcweir } 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir if ( !pView->IsPaintBrushLocked() ) 110*cdf0e10cSrcweir pView->ResetBrushDocument(); // end paint brush mode if not locked 111*cdf0e10cSrcweir } 112*cdf0e10cSrcweir } 113*cdf0e10cSrcweir 114*cdf0e10cSrcweir return bRet; 115*cdf0e10cSrcweir } 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir sal_Bool ScGridWindow::DrawMouseMove(const MouseEvent& rMEvt) 118*cdf0e10cSrcweir { 119*cdf0e10cSrcweir FuPoor* pDraw = pViewData->GetView()->GetDrawFuncPtr(); 120*cdf0e10cSrcweir if (pDraw && !pViewData->IsRefMode()) 121*cdf0e10cSrcweir { 122*cdf0e10cSrcweir pDraw->SetWindow( this ); 123*cdf0e10cSrcweir sal_Bool bRet = pDraw->MouseMove( rMEvt ); 124*cdf0e10cSrcweir if ( bRet ) 125*cdf0e10cSrcweir UpdateStatusPosSize(); 126*cdf0e10cSrcweir return bRet; 127*cdf0e10cSrcweir } 128*cdf0e10cSrcweir else 129*cdf0e10cSrcweir { 130*cdf0e10cSrcweir SetPointer( Pointer( POINTER_ARROW ) ); 131*cdf0e10cSrcweir return sal_False; 132*cdf0e10cSrcweir } 133*cdf0e10cSrcweir } 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir void ScGridWindow::DrawEndAction() 136*cdf0e10cSrcweir { 137*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetScDrawView(); 138*cdf0e10cSrcweir if ( pDrView && pDrView->IsAction() ) 139*cdf0e10cSrcweir pDrView->BrkAction(); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir FuPoor* pDraw = pViewData->GetView()->GetDrawFuncPtr(); 142*cdf0e10cSrcweir if (pDraw) 143*cdf0e10cSrcweir pDraw->StopDragTimer(); 144*cdf0e10cSrcweir 145*cdf0e10cSrcweir // ReleaseMouse beim Aufruf 146*cdf0e10cSrcweir } 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir sal_Bool ScGridWindow::DrawCommand(const CommandEvent& rCEvt) 149*cdf0e10cSrcweir { 150*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetScDrawView(); 151*cdf0e10cSrcweir FuPoor* pDraw = pViewData->GetView()->GetDrawFuncPtr(); 152*cdf0e10cSrcweir if (pDrView && pDraw && !pViewData->IsRefMode()) 153*cdf0e10cSrcweir { 154*cdf0e10cSrcweir pDraw->SetWindow( this ); 155*cdf0e10cSrcweir sal_uInt8 nUsed = pDraw->Command( rCEvt ); 156*cdf0e10cSrcweir if( nUsed == SC_CMD_USED ) 157*cdf0e10cSrcweir nButtonDown = 0; // MouseButtonUp wird verschluckt... 158*cdf0e10cSrcweir if( nUsed || pDrView->IsAction() ) 159*cdf0e10cSrcweir return sal_True; 160*cdf0e10cSrcweir } 161*cdf0e10cSrcweir 162*cdf0e10cSrcweir return sal_False; 163*cdf0e10cSrcweir } 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir sal_Bool ScGridWindow::DrawKeyInput(const KeyEvent& rKEvt) 166*cdf0e10cSrcweir { 167*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetScDrawView(); 168*cdf0e10cSrcweir FuPoor* pDraw = pViewData->GetView()->GetDrawFuncPtr(); 169*cdf0e10cSrcweir if (pDrView && pDraw && !pViewData->IsRefMode()) 170*cdf0e10cSrcweir { 171*cdf0e10cSrcweir pDraw->SetWindow( this ); 172*cdf0e10cSrcweir sal_Bool bOldMarked = pDrView->AreObjectsMarked(); 173*cdf0e10cSrcweir if (pDraw->KeyInput( rKEvt )) 174*cdf0e10cSrcweir { 175*cdf0e10cSrcweir sal_Bool bLeaveDraw = sal_False; 176*cdf0e10cSrcweir sal_Bool bUsed = sal_True; 177*cdf0e10cSrcweir sal_Bool bNewMarked = pDrView->AreObjectsMarked(); 178*cdf0e10cSrcweir if ( !pViewData->GetView()->IsDrawSelMode() ) 179*cdf0e10cSrcweir if ( !bNewMarked ) 180*cdf0e10cSrcweir { 181*cdf0e10cSrcweir pViewData->GetViewShell()->SetDrawShell( sal_False ); 182*cdf0e10cSrcweir bLeaveDraw = sal_True; 183*cdf0e10cSrcweir if ( !bOldMarked && 184*cdf0e10cSrcweir rKEvt.GetKeyCode().GetCode() == KEY_DELETE ) 185*cdf0e10cSrcweir bUsed = sal_False; // nichts geloescht 186*cdf0e10cSrcweir } 187*cdf0e10cSrcweir if (!bLeaveDraw) 188*cdf0e10cSrcweir UpdateStatusPosSize(); // #108137# for moving/resizing etc. by keyboard 189*cdf0e10cSrcweir return bUsed; 190*cdf0e10cSrcweir } 191*cdf0e10cSrcweir } 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir return sal_False; 194*cdf0e10cSrcweir } 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir void ScGridWindow::DrawRedraw( ScOutputData& rOutputData, ScUpdateMode eMode, sal_uLong nLayer ) 197*cdf0e10cSrcweir { 198*cdf0e10cSrcweir // #109985# 199*cdf0e10cSrcweir const ScViewOptions& rOpts = pViewData->GetOptions(); 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir // use new flags at SdrPaintView for hiding objects 202*cdf0e10cSrcweir const bool bDrawOle(VOBJ_MODE_SHOW == rOpts.GetObjMode(VOBJ_TYPE_OLE)); 203*cdf0e10cSrcweir const bool bDrawChart(VOBJ_MODE_SHOW == rOpts.GetObjMode(VOBJ_TYPE_CHART)); 204*cdf0e10cSrcweir const bool bDrawDraw(VOBJ_MODE_SHOW == rOpts.GetObjMode(VOBJ_TYPE_DRAW)); 205*cdf0e10cSrcweir 206*cdf0e10cSrcweir if(bDrawOle || bDrawChart || bDrawDraw) 207*cdf0e10cSrcweir { 208*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir if(pDrView) 211*cdf0e10cSrcweir { 212*cdf0e10cSrcweir pDrView->setHideOle(!bDrawOle); 213*cdf0e10cSrcweir pDrView->setHideChart(!bDrawChart); 214*cdf0e10cSrcweir pDrView->setHideDraw(!bDrawDraw); 215*cdf0e10cSrcweir pDrView->setHideFormControl(!bDrawDraw); 216*cdf0e10cSrcweir } 217*cdf0e10cSrcweir 218*cdf0e10cSrcweir if(SC_UPDATE_CHANGED == eMode) 219*cdf0e10cSrcweir { 220*cdf0e10cSrcweir rOutputData.DrawingSingle((sal_uInt16)nLayer); 221*cdf0e10cSrcweir } 222*cdf0e10cSrcweir else 223*cdf0e10cSrcweir { 224*cdf0e10cSrcweir rOutputData.DrawSelectiveObjects((sal_uInt16)nLayer); 225*cdf0e10cSrcweir } 226*cdf0e10cSrcweir } 227*cdf0e10cSrcweir } 228*cdf0e10cSrcweir 229*cdf0e10cSrcweir void ScGridWindow::DrawSdrGrid( const Rectangle& rDrawingRect, OutputDevice* pContentDev ) 230*cdf0e10cSrcweir { 231*cdf0e10cSrcweir // Draw-Gitterlinien 232*cdf0e10cSrcweir 233*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 234*cdf0e10cSrcweir if ( pDrView && pDrView->IsGridVisible() ) 235*cdf0e10cSrcweir { 236*cdf0e10cSrcweir SdrPageView* pPV = pDrView->GetSdrPageView(); 237*cdf0e10cSrcweir DBG_ASSERT(pPV, "keine PageView"); 238*cdf0e10cSrcweir if (pPV) 239*cdf0e10cSrcweir { 240*cdf0e10cSrcweir pContentDev->SetLineColor(COL_GRAY); 241*cdf0e10cSrcweir 242*cdf0e10cSrcweir pPV->DrawPageViewGrid( *pContentDev, rDrawingRect ); 243*cdf0e10cSrcweir } 244*cdf0e10cSrcweir } 245*cdf0e10cSrcweir } 246*cdf0e10cSrcweir 247*cdf0e10cSrcweir MapMode ScGridWindow::GetDrawMapMode( sal_Bool bForce ) 248*cdf0e10cSrcweir { 249*cdf0e10cSrcweir ScDocument* pDoc = pViewData->GetDocument(); 250*cdf0e10cSrcweir SCTAB nTab = pViewData->GetTabNo(); 251*cdf0e10cSrcweir sal_Bool bNegativePage = pDoc->IsNegativePage( nTab ); 252*cdf0e10cSrcweir 253*cdf0e10cSrcweir MapMode aDrawMode = pViewData->GetLogicMode(); 254*cdf0e10cSrcweir 255*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 256*cdf0e10cSrcweir if ( pDrView || bForce ) 257*cdf0e10cSrcweir { 258*cdf0e10cSrcweir Fraction aScaleX; 259*cdf0e10cSrcweir Fraction aScaleY; 260*cdf0e10cSrcweir if (pDrView) 261*cdf0e10cSrcweir pDrView->GetScale( aScaleX, aScaleY ); 262*cdf0e10cSrcweir else 263*cdf0e10cSrcweir { 264*cdf0e10cSrcweir SCCOL nEndCol = 0; 265*cdf0e10cSrcweir SCROW nEndRow = 0; 266*cdf0e10cSrcweir pDoc->GetTableArea( nTab, nEndCol, nEndRow ); 267*cdf0e10cSrcweir if (nEndCol<20) nEndCol = 20; 268*cdf0e10cSrcweir if (nEndRow<20) nEndRow = 20; 269*cdf0e10cSrcweir ScDrawUtil::CalcScale( pDoc, nTab, 0,0, nEndCol,nEndRow, this, 270*cdf0e10cSrcweir pViewData->GetZoomX(),pViewData->GetZoomY(), 271*cdf0e10cSrcweir pViewData->GetPPTX(),pViewData->GetPPTY(), 272*cdf0e10cSrcweir aScaleX,aScaleY ); 273*cdf0e10cSrcweir } 274*cdf0e10cSrcweir aDrawMode.SetScaleX(aScaleX); 275*cdf0e10cSrcweir aDrawMode.SetScaleY(aScaleY); 276*cdf0e10cSrcweir } 277*cdf0e10cSrcweir aDrawMode.SetOrigin(Point()); 278*cdf0e10cSrcweir Point aStartPos = pViewData->GetPixPos(eWhich); 279*cdf0e10cSrcweir if ( bNegativePage ) 280*cdf0e10cSrcweir { 281*cdf0e10cSrcweir // RTL uses negative positions for drawing objects 282*cdf0e10cSrcweir aStartPos.X() = -aStartPos.X() + GetOutputSizePixel().Width() - 1; 283*cdf0e10cSrcweir } 284*cdf0e10cSrcweir aDrawMode.SetOrigin( PixelToLogic( aStartPos, aDrawMode ) ); 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir return aDrawMode; 287*cdf0e10cSrcweir } 288*cdf0e10cSrcweir 289*cdf0e10cSrcweir //sal_Bool ScGridWindow::DrawBeforeScroll() 290*cdf0e10cSrcweir //{ 291*cdf0e10cSrcweir // ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 292*cdf0e10cSrcweir // 293*cdf0e10cSrcweir // sal_Bool bXor = sal_False; 294*cdf0e10cSrcweir // if (pDrView) 295*cdf0e10cSrcweir // { 296*cdf0e10cSrcweir // bXor=pDrView->IsShownXorVisible(this); 297*cdf0e10cSrcweir // if (bXor) pDrView->HideShownXor(this); 298*cdf0e10cSrcweir // } 299*cdf0e10cSrcweir // return bXor; 300*cdf0e10cSrcweir //} 301*cdf0e10cSrcweir 302*cdf0e10cSrcweir void ScGridWindow::DrawAfterScroll(/*sal_Bool bVal*/) 303*cdf0e10cSrcweir { 304*cdf0e10cSrcweir Update(); // immer, damit das Verhalten mit/ohne DrawingLayer gleich ist 305*cdf0e10cSrcweir 306*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 307*cdf0e10cSrcweir if (pDrView) 308*cdf0e10cSrcweir { 309*cdf0e10cSrcweir //if (bVal) 310*cdf0e10cSrcweir // pDrView->ShowShownXor(this); 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir OutlinerView* pOlView = pDrView->GetTextEditOutlinerView(); 313*cdf0e10cSrcweir if (pOlView && pOlView->GetWindow() == this) 314*cdf0e10cSrcweir pOlView->ShowCursor(sal_False); // ist beim Scrollen weggekommen 315*cdf0e10cSrcweir } 316*cdf0e10cSrcweir } 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir //void ScGridWindow::DrawMarks() 319*cdf0e10cSrcweir //{ 320*cdf0e10cSrcweir // ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 321*cdf0e10cSrcweir // if (pDrView) 322*cdf0e10cSrcweir // pDrView->DrawMarks(this); 323*cdf0e10cSrcweir //} 324*cdf0e10cSrcweir 325*cdf0e10cSrcweir //sal_Bool ScGridWindow::NeedDrawMarks() 326*cdf0e10cSrcweir //{ 327*cdf0e10cSrcweir // ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 328*cdf0e10cSrcweir // return pDrView && pDrView->IsMarkHdlShown() && pDrView->AreObjectsMarked(); 329*cdf0e10cSrcweir //} 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir void ScGridWindow::CreateAnchorHandle(SdrHdlList& rHdl, const ScAddress& rAddress) 332*cdf0e10cSrcweir { 333*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 334*cdf0e10cSrcweir if (pDrView) 335*cdf0e10cSrcweir { 336*cdf0e10cSrcweir const ScViewOptions& rOpts = pViewData->GetOptions(); 337*cdf0e10cSrcweir if(rOpts.GetOption( VOPT_ANCHOR )) 338*cdf0e10cSrcweir { 339*cdf0e10cSrcweir sal_Bool bNegativePage = pViewData->GetDocument()->IsNegativePage( pViewData->GetTabNo() ); 340*cdf0e10cSrcweir Point aPos = pViewData->GetScrPos( rAddress.Col(), rAddress.Row(), eWhich, sal_True ); 341*cdf0e10cSrcweir aPos = PixelToLogic(aPos); 342*cdf0e10cSrcweir rHdl.AddHdl(new SdrHdl(aPos, bNegativePage ? HDL_ANCHOR_TR : HDL_ANCHOR)); 343*cdf0e10cSrcweir } 344*cdf0e10cSrcweir } 345*cdf0e10cSrcweir } 346*cdf0e10cSrcweir 347*cdf0e10cSrcweir SdrObject* ScGridWindow::GetEditObject() 348*cdf0e10cSrcweir { 349*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 350*cdf0e10cSrcweir if (pDrView) 351*cdf0e10cSrcweir { 352*cdf0e10cSrcweir OutlinerView* pOlView = pDrView->GetTextEditOutlinerView(); 353*cdf0e10cSrcweir if (pOlView && pOlView->GetWindow() == this) 354*cdf0e10cSrcweir return pDrView->GetTextEditObject(); 355*cdf0e10cSrcweir } 356*cdf0e10cSrcweir 357*cdf0e10cSrcweir return NULL; 358*cdf0e10cSrcweir } 359*cdf0e10cSrcweir 360*cdf0e10cSrcweir void ScGridWindow::UpdateStatusPosSize() 361*cdf0e10cSrcweir { 362*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 363*cdf0e10cSrcweir if (!pDrView) 364*cdf0e10cSrcweir return; // shouldn't be called in that case 365*cdf0e10cSrcweir 366*cdf0e10cSrcweir SdrPageView* pPV = pDrView->GetSdrPageView(); 367*cdf0e10cSrcweir if (!pPV) 368*cdf0e10cSrcweir return; // shouldn't be called in that case either 369*cdf0e10cSrcweir 370*cdf0e10cSrcweir SfxItemSet aSet(pViewData->GetViewShell()->GetPool(), SID_ATTR_POSITION, SID_ATTR_SIZE); 371*cdf0e10cSrcweir 372*cdf0e10cSrcweir // Fill items for position and size: 373*cdf0e10cSrcweir // #108137# show action rectangle during action, 374*cdf0e10cSrcweir // position and size of selected object(s) if something is selected, 375*cdf0e10cSrcweir // mouse position otherwise 376*cdf0e10cSrcweir 377*cdf0e10cSrcweir sal_Bool bActionItem = sal_False; 378*cdf0e10cSrcweir if ( pDrView->IsAction() ) // action rectangle 379*cdf0e10cSrcweir { 380*cdf0e10cSrcweir Rectangle aRect; 381*cdf0e10cSrcweir pDrView->TakeActionRect( aRect ); 382*cdf0e10cSrcweir if ( !aRect.IsEmpty() ) 383*cdf0e10cSrcweir { 384*cdf0e10cSrcweir pPV->LogicToPagePos(aRect); 385*cdf0e10cSrcweir aSet.Put( SfxPointItem( SID_ATTR_POSITION, aRect.TopLeft() ) ); 386*cdf0e10cSrcweir aSet.Put( SvxSizeItem( SID_ATTR_SIZE, 387*cdf0e10cSrcweir Size( aRect.Right() - aRect.Left(), aRect.Bottom() - aRect.Top() ) ) ); 388*cdf0e10cSrcweir bActionItem = sal_True; 389*cdf0e10cSrcweir } 390*cdf0e10cSrcweir } 391*cdf0e10cSrcweir if ( !bActionItem ) 392*cdf0e10cSrcweir { 393*cdf0e10cSrcweir if ( pDrView->AreObjectsMarked() ) // selected objects 394*cdf0e10cSrcweir { 395*cdf0e10cSrcweir Rectangle aRect = pDrView->GetAllMarkedRect(); 396*cdf0e10cSrcweir pPV->LogicToPagePos(aRect); 397*cdf0e10cSrcweir aSet.Put( SfxPointItem( SID_ATTR_POSITION, aRect.TopLeft() ) ); 398*cdf0e10cSrcweir aSet.Put( SvxSizeItem( SID_ATTR_SIZE, 399*cdf0e10cSrcweir Size( aRect.Right() - aRect.Left(), aRect.Bottom() - aRect.Top() ) ) ); 400*cdf0e10cSrcweir } 401*cdf0e10cSrcweir else // mouse position 402*cdf0e10cSrcweir { 403*cdf0e10cSrcweir Point aPos = PixelToLogic(aCurMousePos); 404*cdf0e10cSrcweir pPV->LogicToPagePos(aPos); 405*cdf0e10cSrcweir aSet.Put( SfxPointItem( SID_ATTR_POSITION, aPos ) ); 406*cdf0e10cSrcweir aSet.Put( SvxSizeItem( SID_ATTR_SIZE, Size( 0, 0 ) ) ); 407*cdf0e10cSrcweir } 408*cdf0e10cSrcweir } 409*cdf0e10cSrcweir 410*cdf0e10cSrcweir pViewData->GetBindings().SetState(aSet); 411*cdf0e10cSrcweir } 412*cdf0e10cSrcweir 413*cdf0e10cSrcweir sal_Bool ScGridWindow::DrawHasMarkedObj() 414*cdf0e10cSrcweir { 415*cdf0e10cSrcweir ScDrawView* p = pViewData->GetScDrawView(); 416*cdf0e10cSrcweir return p ? p->AreObjectsMarked() : sal_False; 417*cdf0e10cSrcweir } 418*cdf0e10cSrcweir 419*cdf0e10cSrcweir //void ScGridWindow::DrawStartTimer() 420*cdf0e10cSrcweir //{ 421*cdf0e10cSrcweir //ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 422*cdf0e10cSrcweir //if (pDrView) 423*cdf0e10cSrcweir //{ 424*cdf0e10cSrcweir /* jetzt in DrawMarks 425*cdf0e10cSrcweir sal_uInt16 nWinNum = pDrView->FindWin(this); 426*cdf0e10cSrcweir if (nWinNum!=SDRVIEWWIN_NOTFOUND) 427*cdf0e10cSrcweir pDrView->AfterInitRedraw(nWinNum); 428*cdf0e10cSrcweir */ 429*cdf0e10cSrcweir 430*cdf0e10cSrcweir // pDrView->PostPaint(); 431*cdf0e10cSrcweir // pDrView->RestartAfterPaintTimer(); 432*cdf0e10cSrcweir //} 433*cdf0e10cSrcweir //} 434*cdf0e10cSrcweir 435*cdf0e10cSrcweir void ScGridWindow::DrawMarkDropObj( SdrObject* pObj ) 436*cdf0e10cSrcweir { 437*cdf0e10cSrcweir ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); 438*cdf0e10cSrcweir if (pDrView) 439*cdf0e10cSrcweir pDrView->MarkDropObj(pObj); 440*cdf0e10cSrcweir } 441*cdf0e10cSrcweir 442*cdf0e10cSrcweir 443*cdf0e10cSrcweir 444