1b3f79822SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3b3f79822SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4b3f79822SAndrew Rist * or more contributor license agreements. See the NOTICE file 5b3f79822SAndrew Rist * distributed with this work for additional information 6b3f79822SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7b3f79822SAndrew Rist * to you under the Apache License, Version 2.0 (the 8b3f79822SAndrew Rist * "License"); you may not use this file except in compliance 9b3f79822SAndrew Rist * with the License. You may obtain a copy of the License at 10b3f79822SAndrew Rist * 11b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12b3f79822SAndrew Rist * 13b3f79822SAndrew Rist * Unless required by applicable law or agreed to in writing, 14b3f79822SAndrew Rist * software distributed under the License is distributed on an 15b3f79822SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16b3f79822SAndrew Rist * KIND, either express or implied. See the License for the 17b3f79822SAndrew Rist * specific language governing permissions and limitations 18b3f79822SAndrew Rist * under the License. 19b3f79822SAndrew Rist * 20b3f79822SAndrew Rist *************************************************************/ 21b3f79822SAndrew Rist 22b3f79822SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sc.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "scitems.hxx" 28cdf0e10cSrcweir #include <editeng/eeitem.hxx> 29cdf0e10cSrcweir 30cdf0e10cSrcweir 31cdf0e10cSrcweir #include <memory> 32cdf0e10cSrcweir #include "AccessibleText.hxx" 33cdf0e10cSrcweir #include "AccessibleCell.hxx" 34cdf0e10cSrcweir #include "tabvwsh.hxx" 35cdf0e10cSrcweir #include "editutil.hxx" 36cdf0e10cSrcweir #include "document.hxx" 37cdf0e10cSrcweir #include "scmod.hxx" 38cdf0e10cSrcweir #include "prevwsh.hxx" 39cdf0e10cSrcweir #include "docsh.hxx" 40cdf0e10cSrcweir #include "prevloc.hxx" 41cdf0e10cSrcweir #include "unoguard.hxx" 42cdf0e10cSrcweir #include "patattr.hxx" 43cdf0e10cSrcweir #include "inputwin.hxx" 44cdf0e10cSrcweir #include <editeng/unofored.hxx> 45cdf0e10cSrcweir #include <editeng/editview.hxx> 46cdf0e10cSrcweir #include <editeng/unoedhlp.hxx> 47cdf0e10cSrcweir #include <vcl/virdev.hxx> 48cdf0e10cSrcweir #include <editeng/editobj.hxx> 49cdf0e10cSrcweir #include <editeng/adjitem.hxx> 50cdf0e10cSrcweir #include <svx/svdmodel.hxx> 51cdf0e10cSrcweir #include <svx/algitem.hxx> 52cdf0e10cSrcweir 53cdf0e10cSrcweir 54cdf0e10cSrcweir // ============================================================================ 55cdf0e10cSrcweir 56cdf0e10cSrcweir class ScViewForwarder : public SvxViewForwarder 57cdf0e10cSrcweir { 58cdf0e10cSrcweir ScTabViewShell* mpViewShell; 59cdf0e10cSrcweir ScAddress maCellPos; 60cdf0e10cSrcweir ScSplitPos meSplitPos; 61cdf0e10cSrcweir public: 62cdf0e10cSrcweir ScViewForwarder(ScTabViewShell* pViewShell, ScSplitPos eSplitPos, const ScAddress& rCell); 63cdf0e10cSrcweir virtual ~ScViewForwarder(); 64cdf0e10cSrcweir 65cdf0e10cSrcweir virtual sal_Bool IsValid() const; 66cdf0e10cSrcweir virtual Rectangle GetVisArea() const; 67cdf0e10cSrcweir virtual Point LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const; 68cdf0e10cSrcweir virtual Point PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const; 69cdf0e10cSrcweir 70cdf0e10cSrcweir void SetInvalid(); 71cdf0e10cSrcweir }; 72cdf0e10cSrcweir 73cdf0e10cSrcweir ScViewForwarder::ScViewForwarder(ScTabViewShell* pViewShell, ScSplitPos eSplitPos, const ScAddress& rCell) 74cdf0e10cSrcweir : 75cdf0e10cSrcweir mpViewShell(pViewShell), 76cdf0e10cSrcweir maCellPos(rCell), 77cdf0e10cSrcweir meSplitPos(eSplitPos) 78cdf0e10cSrcweir { 79cdf0e10cSrcweir } 80cdf0e10cSrcweir 81cdf0e10cSrcweir ScViewForwarder::~ScViewForwarder() 82cdf0e10cSrcweir { 83cdf0e10cSrcweir } 84cdf0e10cSrcweir 85cdf0e10cSrcweir sal_Bool ScViewForwarder::IsValid() const 86cdf0e10cSrcweir { 87cdf0e10cSrcweir return mpViewShell != NULL; 88cdf0e10cSrcweir } 89cdf0e10cSrcweir 90cdf0e10cSrcweir Rectangle ScViewForwarder::GetVisArea() const 91cdf0e10cSrcweir { 92cdf0e10cSrcweir Rectangle aVisArea; 93cdf0e10cSrcweir if (mpViewShell) 94cdf0e10cSrcweir { 95cdf0e10cSrcweir Window* pWindow = mpViewShell->GetWindowByPos(meSplitPos); 96cdf0e10cSrcweir if (pWindow) 97cdf0e10cSrcweir { 98cdf0e10cSrcweir aVisArea.SetSize(pWindow->GetSizePixel()); 99cdf0e10cSrcweir 100cdf0e10cSrcweir ScHSplitPos eWhichH = ((meSplitPos == SC_SPLIT_TOPLEFT) || (meSplitPos == SC_SPLIT_BOTTOMLEFT)) ? 101cdf0e10cSrcweir SC_SPLIT_LEFT : SC_SPLIT_RIGHT; 102cdf0e10cSrcweir ScVSplitPos eWhichV = ((meSplitPos == SC_SPLIT_TOPLEFT) || (meSplitPos == SC_SPLIT_TOPRIGHT)) ? 103cdf0e10cSrcweir SC_SPLIT_TOP : SC_SPLIT_BOTTOM; 104cdf0e10cSrcweir 105cdf0e10cSrcweir Point aBaseCellPos(mpViewShell->GetViewData()->GetScrPos(mpViewShell->GetViewData()->GetPosX(eWhichH), 106cdf0e10cSrcweir mpViewShell->GetViewData()->GetPosY(eWhichV), meSplitPos, sal_True)); 107cdf0e10cSrcweir Point aCellPos(mpViewShell->GetViewData()->GetScrPos(maCellPos.Col(), maCellPos.Row(), meSplitPos, sal_True)); 108cdf0e10cSrcweir aVisArea.SetPos(aCellPos - aBaseCellPos); 109cdf0e10cSrcweir } 110cdf0e10cSrcweir } 111cdf0e10cSrcweir else 112cdf0e10cSrcweir { 113cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 114cdf0e10cSrcweir } 115cdf0e10cSrcweir return aVisArea; 116cdf0e10cSrcweir } 117cdf0e10cSrcweir 118cdf0e10cSrcweir Point ScViewForwarder::LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const 119cdf0e10cSrcweir { 120cdf0e10cSrcweir if (mpViewShell) 121cdf0e10cSrcweir { 122cdf0e10cSrcweir Window* pWindow = mpViewShell->GetWindowByPos(meSplitPos); 123cdf0e10cSrcweir if (pWindow) 124cdf0e10cSrcweir return pWindow->LogicToPixel( rPoint, rMapMode ); 125cdf0e10cSrcweir } 126cdf0e10cSrcweir else 127cdf0e10cSrcweir { 128cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 129cdf0e10cSrcweir } 130cdf0e10cSrcweir return Point(); 131cdf0e10cSrcweir } 132cdf0e10cSrcweir 133cdf0e10cSrcweir Point ScViewForwarder::PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const 134cdf0e10cSrcweir { 135cdf0e10cSrcweir if (mpViewShell) 136cdf0e10cSrcweir { 137cdf0e10cSrcweir Window* pWindow = mpViewShell->GetWindowByPos(meSplitPos); 138cdf0e10cSrcweir if (pWindow) 139cdf0e10cSrcweir return pWindow->PixelToLogic( rPoint, rMapMode ); 140cdf0e10cSrcweir } 141cdf0e10cSrcweir else 142cdf0e10cSrcweir { 143cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 144cdf0e10cSrcweir } 145cdf0e10cSrcweir return Point(); 146cdf0e10cSrcweir } 147cdf0e10cSrcweir 148cdf0e10cSrcweir void ScViewForwarder::SetInvalid() 149cdf0e10cSrcweir { 150cdf0e10cSrcweir mpViewShell = NULL; 151cdf0e10cSrcweir } 152cdf0e10cSrcweir 153cdf0e10cSrcweir // ============================================================================ 154cdf0e10cSrcweir 155cdf0e10cSrcweir class ScEditObjectViewForwarder : public SvxViewForwarder 156cdf0e10cSrcweir { 157cdf0e10cSrcweir Window* mpWindow; 158cdf0e10cSrcweir // --> OD 2005-12-21 #i49561# 159cdf0e10cSrcweir // - EditView needed for access to its visible area. 160cdf0e10cSrcweir const EditView* mpEditView; 161cdf0e10cSrcweir // <-- 162cdf0e10cSrcweir public: 163cdf0e10cSrcweir // --> OD 2005-12-21 #i49561# 164cdf0e10cSrcweir ScEditObjectViewForwarder( Window* pWindow, 165cdf0e10cSrcweir const EditView* _pEditView); 166cdf0e10cSrcweir // <-- 167cdf0e10cSrcweir virtual ~ScEditObjectViewForwarder(); 168cdf0e10cSrcweir 169cdf0e10cSrcweir virtual sal_Bool IsValid() const; 170cdf0e10cSrcweir virtual Rectangle GetVisArea() const; 171cdf0e10cSrcweir virtual Point LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const; 172cdf0e10cSrcweir virtual Point PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const; 173cdf0e10cSrcweir 174cdf0e10cSrcweir void SetInvalid(); 175cdf0e10cSrcweir }; 176cdf0e10cSrcweir 177cdf0e10cSrcweir // --> OD 2005-12-21 #i49561# 178cdf0e10cSrcweir ScEditObjectViewForwarder::ScEditObjectViewForwarder( Window* pWindow, 179cdf0e10cSrcweir const EditView* _pEditView ) 180cdf0e10cSrcweir : 181cdf0e10cSrcweir mpWindow(pWindow), 182cdf0e10cSrcweir mpEditView( _pEditView ) 183cdf0e10cSrcweir { 184cdf0e10cSrcweir } 185cdf0e10cSrcweir // <-- 186cdf0e10cSrcweir 187cdf0e10cSrcweir ScEditObjectViewForwarder::~ScEditObjectViewForwarder() 188cdf0e10cSrcweir { 189cdf0e10cSrcweir } 190cdf0e10cSrcweir 191cdf0e10cSrcweir sal_Bool ScEditObjectViewForwarder::IsValid() const 192cdf0e10cSrcweir { 193cdf0e10cSrcweir return (mpWindow != NULL); 194cdf0e10cSrcweir } 195cdf0e10cSrcweir 196cdf0e10cSrcweir Rectangle ScEditObjectViewForwarder::GetVisArea() const 197cdf0e10cSrcweir { 198cdf0e10cSrcweir Rectangle aVisArea; 199cdf0e10cSrcweir if (mpWindow) 200cdf0e10cSrcweir { 201cdf0e10cSrcweir Rectangle aVisRect(mpWindow->GetWindowExtentsRelative(mpWindow->GetAccessibleParentWindow())); 202cdf0e10cSrcweir 203cdf0e10cSrcweir aVisRect.SetPos(Point(0, 0)); 204cdf0e10cSrcweir 205cdf0e10cSrcweir aVisArea = aVisRect; 206cdf0e10cSrcweir } 207cdf0e10cSrcweir else 208cdf0e10cSrcweir { 209cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 210cdf0e10cSrcweir } 211cdf0e10cSrcweir return aVisArea; 212cdf0e10cSrcweir } 213cdf0e10cSrcweir 214cdf0e10cSrcweir Point ScEditObjectViewForwarder::LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const 215cdf0e10cSrcweir { 216cdf0e10cSrcweir if (mpWindow) 217cdf0e10cSrcweir { 218cdf0e10cSrcweir // --> OD 2005-12-21 #i49561# - consider offset of the visible area 219cdf0e10cSrcweir // of the EditView before converting point to pixel. 220cdf0e10cSrcweir Point aPoint( rPoint ); 221cdf0e10cSrcweir if ( mpEditView ) 222cdf0e10cSrcweir { 223cdf0e10cSrcweir Rectangle aEditViewVisArea( mpEditView->GetVisArea() ); 224cdf0e10cSrcweir aPoint += aEditViewVisArea.TopLeft(); 225cdf0e10cSrcweir } 226cdf0e10cSrcweir return mpWindow->LogicToPixel( aPoint, rMapMode ); 227cdf0e10cSrcweir // <-- 228cdf0e10cSrcweir } 229cdf0e10cSrcweir else 230cdf0e10cSrcweir { 231cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 232cdf0e10cSrcweir } 233cdf0e10cSrcweir return Point(); 234cdf0e10cSrcweir } 235cdf0e10cSrcweir 236cdf0e10cSrcweir Point ScEditObjectViewForwarder::PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const 237cdf0e10cSrcweir { 238cdf0e10cSrcweir if (mpWindow) 239cdf0e10cSrcweir { 240cdf0e10cSrcweir // --> OD 2005-12-21 #i49561# - consider offset of the visible area 241cdf0e10cSrcweir // of the EditView after converting point to logic. 242cdf0e10cSrcweir Point aPoint( mpWindow->PixelToLogic( rPoint, rMapMode ) ); 243cdf0e10cSrcweir if ( mpEditView ) 244cdf0e10cSrcweir { 245cdf0e10cSrcweir Rectangle aEditViewVisArea( mpEditView->GetVisArea() ); 246cdf0e10cSrcweir aPoint -= aEditViewVisArea.TopLeft(); 247cdf0e10cSrcweir } 248cdf0e10cSrcweir return aPoint; 249cdf0e10cSrcweir // <-- 250cdf0e10cSrcweir } 251cdf0e10cSrcweir else 252cdf0e10cSrcweir { 253cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 254cdf0e10cSrcweir } 255cdf0e10cSrcweir return Point(); 256cdf0e10cSrcweir } 257cdf0e10cSrcweir 258cdf0e10cSrcweir void ScEditObjectViewForwarder::SetInvalid() 259cdf0e10cSrcweir { 260cdf0e10cSrcweir mpWindow = NULL; 261cdf0e10cSrcweir } 262cdf0e10cSrcweir 263cdf0e10cSrcweir // ============================================================================ 264cdf0e10cSrcweir 265cdf0e10cSrcweir class ScPreviewViewForwarder : public SvxViewForwarder 266cdf0e10cSrcweir { 267cdf0e10cSrcweir protected: 268cdf0e10cSrcweir ScPreviewShell* mpViewShell; 269cdf0e10cSrcweir mutable ScPreviewTableInfo* mpTableInfo; 270cdf0e10cSrcweir public: 271cdf0e10cSrcweir ScPreviewViewForwarder(ScPreviewShell* pViewShell); 272cdf0e10cSrcweir virtual ~ScPreviewViewForwarder(); 273cdf0e10cSrcweir 274cdf0e10cSrcweir virtual sal_Bool IsValid() const; 275cdf0e10cSrcweir virtual Rectangle GetVisArea() const; 276cdf0e10cSrcweir virtual Point LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const; 277cdf0e10cSrcweir virtual Point PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const; 278cdf0e10cSrcweir 279cdf0e10cSrcweir void SetInvalid(); 280cdf0e10cSrcweir 281cdf0e10cSrcweir Rectangle GetVisRect() const; 282cdf0e10cSrcweir 283cdf0e10cSrcweir // clips the VisArea and calculates with the negativ coordinates 284cdf0e10cSrcweir Rectangle CorrectVisArea(const Rectangle& rVisArea) const; 285cdf0e10cSrcweir }; 286cdf0e10cSrcweir 287cdf0e10cSrcweir ScPreviewViewForwarder::ScPreviewViewForwarder(ScPreviewShell* pViewShell) 288cdf0e10cSrcweir : 289cdf0e10cSrcweir mpViewShell(pViewShell), 290cdf0e10cSrcweir mpTableInfo(NULL) 291cdf0e10cSrcweir { 292cdf0e10cSrcweir } 293cdf0e10cSrcweir 294cdf0e10cSrcweir ScPreviewViewForwarder::~ScPreviewViewForwarder() 295cdf0e10cSrcweir { 296cdf0e10cSrcweir delete mpTableInfo; 297cdf0e10cSrcweir } 298cdf0e10cSrcweir 299cdf0e10cSrcweir sal_Bool ScPreviewViewForwarder::IsValid() const 300cdf0e10cSrcweir { 301cdf0e10cSrcweir return mpViewShell != NULL; 302cdf0e10cSrcweir } 303cdf0e10cSrcweir 304cdf0e10cSrcweir Rectangle ScPreviewViewForwarder::GetVisArea() const 305cdf0e10cSrcweir { 306cdf0e10cSrcweir Rectangle aVisArea; 307cdf0e10cSrcweir DBG_ERROR("should be implemented in an abrevated class"); 308cdf0e10cSrcweir return aVisArea; 309cdf0e10cSrcweir } 310cdf0e10cSrcweir 311cdf0e10cSrcweir Point ScPreviewViewForwarder::LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const 312cdf0e10cSrcweir { 313cdf0e10cSrcweir if (mpViewShell) 314cdf0e10cSrcweir { 315cdf0e10cSrcweir Window* pWindow = mpViewShell->GetWindow(); 316cdf0e10cSrcweir if (pWindow) 317cdf0e10cSrcweir { 318cdf0e10cSrcweir MapMode aMapMode(pWindow->GetMapMode().GetMapUnit()); 319cdf0e10cSrcweir Point aPoint2( OutputDevice::LogicToLogic( rPoint, rMapMode, aMapMode) ); 320cdf0e10cSrcweir return pWindow->LogicToPixel(aPoint2); 321cdf0e10cSrcweir } 322cdf0e10cSrcweir } 323cdf0e10cSrcweir else 324cdf0e10cSrcweir { 325cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 326cdf0e10cSrcweir } 327cdf0e10cSrcweir return Point(); 328cdf0e10cSrcweir } 329cdf0e10cSrcweir 330cdf0e10cSrcweir Point ScPreviewViewForwarder::PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const 331cdf0e10cSrcweir { 332cdf0e10cSrcweir if (mpViewShell) 333cdf0e10cSrcweir { 334cdf0e10cSrcweir Window* pWindow = mpViewShell->GetWindow(); 335cdf0e10cSrcweir if (pWindow) 336cdf0e10cSrcweir { 337cdf0e10cSrcweir MapMode aMapMode(pWindow->GetMapMode()); 338cdf0e10cSrcweir aMapMode.SetOrigin(Point()); 339cdf0e10cSrcweir Point aPoint1( pWindow->PixelToLogic( rPoint ) ); 340cdf0e10cSrcweir Point aPoint2( OutputDevice::LogicToLogic( aPoint1, 341cdf0e10cSrcweir aMapMode.GetMapUnit(), 342cdf0e10cSrcweir rMapMode ) ); 343cdf0e10cSrcweir return aPoint2; 344cdf0e10cSrcweir } 345cdf0e10cSrcweir } 346cdf0e10cSrcweir else 347cdf0e10cSrcweir { 348cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 349cdf0e10cSrcweir } 350cdf0e10cSrcweir return Point(); 351cdf0e10cSrcweir } 352cdf0e10cSrcweir 353cdf0e10cSrcweir void ScPreviewViewForwarder::SetInvalid() 354cdf0e10cSrcweir { 355cdf0e10cSrcweir mpViewShell = NULL; 356cdf0e10cSrcweir } 357cdf0e10cSrcweir 358cdf0e10cSrcweir Rectangle ScPreviewViewForwarder::GetVisRect() const 359cdf0e10cSrcweir { 360cdf0e10cSrcweir if ( mpViewShell ) 361cdf0e10cSrcweir { 362cdf0e10cSrcweir Size aOutputSize; 363cdf0e10cSrcweir Window* pWindow = mpViewShell->GetWindow(); 364cdf0e10cSrcweir if ( pWindow ) 365cdf0e10cSrcweir aOutputSize = pWindow->GetOutputSizePixel(); 366cdf0e10cSrcweir Point aPoint; 367cdf0e10cSrcweir Rectangle aVisRect( aPoint, aOutputSize ); 368cdf0e10cSrcweir return aVisRect; 369cdf0e10cSrcweir } 370cdf0e10cSrcweir return Rectangle(); 371cdf0e10cSrcweir } 372cdf0e10cSrcweir 373cdf0e10cSrcweir Rectangle ScPreviewViewForwarder::CorrectVisArea(const Rectangle& rVisArea) const 374cdf0e10cSrcweir { 375cdf0e10cSrcweir Rectangle aVisArea(rVisArea); 376cdf0e10cSrcweir Point aPos = aVisArea.TopLeft(); // get first the position to remember negative positions after clipping 377cdf0e10cSrcweir 378cdf0e10cSrcweir Window* pWin = mpViewShell->GetWindow(); 379cdf0e10cSrcweir if (pWin) 380cdf0e10cSrcweir aVisArea = pWin->GetWindowExtentsRelative(pWin).GetIntersection(aVisArea); 381cdf0e10cSrcweir 382cdf0e10cSrcweir sal_Int32 nX(aPos.getX()); 383cdf0e10cSrcweir sal_Int32 nY(aPos.getY()); 384cdf0e10cSrcweir 385cdf0e10cSrcweir if (nX > 0) 386cdf0e10cSrcweir nX = 0; 387cdf0e10cSrcweir else if (nX < 0) 388cdf0e10cSrcweir nX = -nX; 389cdf0e10cSrcweir if (nY > 0) 390cdf0e10cSrcweir nY = 0; 391cdf0e10cSrcweir else if (nY < 0) 392cdf0e10cSrcweir nY = -nY; 393cdf0e10cSrcweir aVisArea.SetPos(Point(nX, nY)); 394cdf0e10cSrcweir 395cdf0e10cSrcweir return aVisArea; 396cdf0e10cSrcweir } 397cdf0e10cSrcweir 398cdf0e10cSrcweir // ============================================================================ 399cdf0e10cSrcweir 400cdf0e10cSrcweir class ScPreviewHeaderFooterViewForwarder : public ScPreviewViewForwarder 401cdf0e10cSrcweir { 402cdf0e10cSrcweir sal_Bool mbHeader; 403cdf0e10cSrcweir public: 404cdf0e10cSrcweir ScPreviewHeaderFooterViewForwarder(ScPreviewShell* pViewShell, sal_Bool bHeader); 405cdf0e10cSrcweir virtual ~ScPreviewHeaderFooterViewForwarder(); 406cdf0e10cSrcweir 407cdf0e10cSrcweir virtual Rectangle GetVisArea() const; 408cdf0e10cSrcweir }; 409cdf0e10cSrcweir 410cdf0e10cSrcweir ScPreviewHeaderFooterViewForwarder::ScPreviewHeaderFooterViewForwarder(ScPreviewShell* pViewShell, sal_Bool bHeader) 411cdf0e10cSrcweir : 412cdf0e10cSrcweir ScPreviewViewForwarder(pViewShell), 413cdf0e10cSrcweir mbHeader(bHeader) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir } 416cdf0e10cSrcweir 417cdf0e10cSrcweir ScPreviewHeaderFooterViewForwarder::~ScPreviewHeaderFooterViewForwarder() 418cdf0e10cSrcweir { 419cdf0e10cSrcweir } 420cdf0e10cSrcweir 421cdf0e10cSrcweir Rectangle ScPreviewHeaderFooterViewForwarder::GetVisArea() const 422cdf0e10cSrcweir { 423cdf0e10cSrcweir Rectangle aVisArea; 424cdf0e10cSrcweir if (mpViewShell) 425cdf0e10cSrcweir { 426cdf0e10cSrcweir const ScPreviewLocationData& rData = mpViewShell->GetLocationData(); 427cdf0e10cSrcweir if ( mbHeader ) 428cdf0e10cSrcweir rData.GetHeaderPosition( aVisArea ); 429cdf0e10cSrcweir else 430cdf0e10cSrcweir rData.GetFooterPosition( aVisArea ); 431cdf0e10cSrcweir 432cdf0e10cSrcweir aVisArea = CorrectVisArea(aVisArea); 433cdf0e10cSrcweir } 434cdf0e10cSrcweir else 435cdf0e10cSrcweir { 436cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 437cdf0e10cSrcweir } 438cdf0e10cSrcweir return aVisArea; 439cdf0e10cSrcweir } 440cdf0e10cSrcweir 441cdf0e10cSrcweir // ============================================================================ 442cdf0e10cSrcweir 443cdf0e10cSrcweir class ScPreviewCellViewForwarder : public ScPreviewViewForwarder 444cdf0e10cSrcweir { 445cdf0e10cSrcweir ScAddress maCellPos; 446cdf0e10cSrcweir public: 447cdf0e10cSrcweir ScPreviewCellViewForwarder(ScPreviewShell* pViewShell, 448cdf0e10cSrcweir ScAddress aCellPos); 449cdf0e10cSrcweir virtual ~ScPreviewCellViewForwarder(); 450cdf0e10cSrcweir 451cdf0e10cSrcweir virtual Rectangle GetVisArea() const; 452cdf0e10cSrcweir }; 453cdf0e10cSrcweir 454cdf0e10cSrcweir ScPreviewCellViewForwarder::ScPreviewCellViewForwarder(ScPreviewShell* pViewShell, 455cdf0e10cSrcweir ScAddress aCellPos) 456cdf0e10cSrcweir : 457cdf0e10cSrcweir ScPreviewViewForwarder(pViewShell), 458cdf0e10cSrcweir maCellPos(aCellPos) 459cdf0e10cSrcweir { 460cdf0e10cSrcweir } 461cdf0e10cSrcweir 462cdf0e10cSrcweir ScPreviewCellViewForwarder::~ScPreviewCellViewForwarder() 463cdf0e10cSrcweir { 464cdf0e10cSrcweir } 465cdf0e10cSrcweir 466cdf0e10cSrcweir Rectangle ScPreviewCellViewForwarder::GetVisArea() const 467cdf0e10cSrcweir { 468cdf0e10cSrcweir Rectangle aVisArea; 469cdf0e10cSrcweir if (mpViewShell) 470cdf0e10cSrcweir { 471cdf0e10cSrcweir const ScPreviewLocationData& rData = mpViewShell->GetLocationData(); 472cdf0e10cSrcweir aVisArea = rData.GetCellOutputRect(maCellPos); 473cdf0e10cSrcweir 474cdf0e10cSrcweir aVisArea = CorrectVisArea(aVisArea); 475cdf0e10cSrcweir } 476cdf0e10cSrcweir else 477cdf0e10cSrcweir { 478cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 479cdf0e10cSrcweir } 480cdf0e10cSrcweir return aVisArea; 481cdf0e10cSrcweir } 482cdf0e10cSrcweir 483cdf0e10cSrcweir // ============================================================================ 484cdf0e10cSrcweir 485cdf0e10cSrcweir class ScPreviewHeaderCellViewForwarder : public ScPreviewViewForwarder 486cdf0e10cSrcweir { 487cdf0e10cSrcweir ScAddress maCellPos; 488cdf0e10cSrcweir sal_Bool mbColHeader; 489cdf0e10cSrcweir sal_Bool mbRowHeader; 490cdf0e10cSrcweir public: 491cdf0e10cSrcweir ScPreviewHeaderCellViewForwarder(ScPreviewShell* pViewShell, 492cdf0e10cSrcweir ScAddress aCellPos, 493cdf0e10cSrcweir sal_Bool bColHeader, sal_Bool bRowHeader); 494cdf0e10cSrcweir virtual ~ScPreviewHeaderCellViewForwarder(); 495cdf0e10cSrcweir 496cdf0e10cSrcweir virtual Rectangle GetVisArea() const; 497cdf0e10cSrcweir }; 498cdf0e10cSrcweir 499cdf0e10cSrcweir ScPreviewHeaderCellViewForwarder::ScPreviewHeaderCellViewForwarder(ScPreviewShell* pViewShell, 500cdf0e10cSrcweir ScAddress aCellPos, 501cdf0e10cSrcweir sal_Bool bColHeader, sal_Bool bRowHeader) 502cdf0e10cSrcweir : 503cdf0e10cSrcweir ScPreviewViewForwarder(pViewShell), 504cdf0e10cSrcweir maCellPos(aCellPos), 505cdf0e10cSrcweir mbColHeader(bColHeader), 506cdf0e10cSrcweir mbRowHeader(bRowHeader) 507cdf0e10cSrcweir { 508cdf0e10cSrcweir } 509cdf0e10cSrcweir 510cdf0e10cSrcweir ScPreviewHeaderCellViewForwarder::~ScPreviewHeaderCellViewForwarder() 511cdf0e10cSrcweir { 512cdf0e10cSrcweir } 513cdf0e10cSrcweir 514cdf0e10cSrcweir Rectangle ScPreviewHeaderCellViewForwarder::GetVisArea() const 515cdf0e10cSrcweir { 516cdf0e10cSrcweir Rectangle aVisArea; 517cdf0e10cSrcweir if (mpViewShell) 518cdf0e10cSrcweir { 519cdf0e10cSrcweir const ScPreviewLocationData& rData = mpViewShell->GetLocationData(); 520cdf0e10cSrcweir aVisArea = rData.GetHeaderCellOutputRect(GetVisRect(), maCellPos, mbColHeader); 521cdf0e10cSrcweir 522cdf0e10cSrcweir aVisArea = CorrectVisArea(aVisArea); 523cdf0e10cSrcweir } 524cdf0e10cSrcweir else 525cdf0e10cSrcweir { 526cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 527cdf0e10cSrcweir } 528cdf0e10cSrcweir return aVisArea; 529cdf0e10cSrcweir } 530cdf0e10cSrcweir 531cdf0e10cSrcweir // ============================================================================ 532cdf0e10cSrcweir 533cdf0e10cSrcweir class ScPreviewNoteViewForwarder : public ScPreviewViewForwarder 534cdf0e10cSrcweir { 535cdf0e10cSrcweir ScAddress maCellPos; 536cdf0e10cSrcweir sal_Bool mbNoteMark; 537cdf0e10cSrcweir public: 538cdf0e10cSrcweir ScPreviewNoteViewForwarder(ScPreviewShell* pViewShell, 539cdf0e10cSrcweir ScAddress aCellPos, 540cdf0e10cSrcweir sal_Bool bNoteMark); 541cdf0e10cSrcweir virtual ~ScPreviewNoteViewForwarder(); 542cdf0e10cSrcweir 543cdf0e10cSrcweir virtual Rectangle GetVisArea() const; 544cdf0e10cSrcweir }; 545cdf0e10cSrcweir 546cdf0e10cSrcweir ScPreviewNoteViewForwarder::ScPreviewNoteViewForwarder(ScPreviewShell* pViewShell, 547cdf0e10cSrcweir ScAddress aCellPos, 548cdf0e10cSrcweir sal_Bool bNoteMark) 549cdf0e10cSrcweir : 550cdf0e10cSrcweir ScPreviewViewForwarder(pViewShell), 551cdf0e10cSrcweir maCellPos(aCellPos), 552cdf0e10cSrcweir mbNoteMark(bNoteMark) 553cdf0e10cSrcweir { 554cdf0e10cSrcweir } 555cdf0e10cSrcweir 556cdf0e10cSrcweir ScPreviewNoteViewForwarder::~ScPreviewNoteViewForwarder() 557cdf0e10cSrcweir { 558cdf0e10cSrcweir } 559cdf0e10cSrcweir 560cdf0e10cSrcweir Rectangle ScPreviewNoteViewForwarder::GetVisArea() const 561cdf0e10cSrcweir { 562cdf0e10cSrcweir Rectangle aVisArea; 563cdf0e10cSrcweir if (mpViewShell) 564cdf0e10cSrcweir { 565cdf0e10cSrcweir const ScPreviewLocationData& rData = mpViewShell->GetLocationData(); 566cdf0e10cSrcweir aVisArea = rData.GetNoteInRangeOutputRect(GetVisRect(), mbNoteMark, maCellPos); 567cdf0e10cSrcweir 568cdf0e10cSrcweir aVisArea = CorrectVisArea(aVisArea); 569cdf0e10cSrcweir } 570cdf0e10cSrcweir else 571cdf0e10cSrcweir { 572cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 573cdf0e10cSrcweir } 574cdf0e10cSrcweir return aVisArea; 575cdf0e10cSrcweir } 576cdf0e10cSrcweir 577cdf0e10cSrcweir // ============================================================================ 578cdf0e10cSrcweir 579cdf0e10cSrcweir class ScEditViewForwarder : public SvxEditViewForwarder 580cdf0e10cSrcweir { 581cdf0e10cSrcweir EditView* mpEditView; 582cdf0e10cSrcweir Window* mpWindow; 583cdf0e10cSrcweir public: 584cdf0e10cSrcweir ScEditViewForwarder(EditView* pEditView, Window* pWin); 585cdf0e10cSrcweir virtual ~ScEditViewForwarder(); 586cdf0e10cSrcweir 587cdf0e10cSrcweir virtual sal_Bool IsValid() const; 588cdf0e10cSrcweir virtual Rectangle GetVisArea() const; 589cdf0e10cSrcweir virtual Point LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const; 590cdf0e10cSrcweir virtual Point PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const; 591cdf0e10cSrcweir virtual sal_Bool GetSelection( ESelection& rSelection ) const; 592cdf0e10cSrcweir virtual sal_Bool SetSelection( const ESelection& rSelection ); 593cdf0e10cSrcweir virtual sal_Bool Copy(); 594cdf0e10cSrcweir virtual sal_Bool Cut(); 595cdf0e10cSrcweir virtual sal_Bool Paste(); 596cdf0e10cSrcweir 597cdf0e10cSrcweir void GrabFocus(); 598cdf0e10cSrcweir 599cdf0e10cSrcweir void SetInvalid(); 600cdf0e10cSrcweir }; 601cdf0e10cSrcweir 602cdf0e10cSrcweir ScEditViewForwarder::ScEditViewForwarder(EditView* pEditView, Window* pWin) 603cdf0e10cSrcweir : mpEditView(pEditView), 604cdf0e10cSrcweir mpWindow(pWin) 605cdf0e10cSrcweir { 606cdf0e10cSrcweir GrabFocus(); 607cdf0e10cSrcweir } 608cdf0e10cSrcweir 609cdf0e10cSrcweir ScEditViewForwarder::~ScEditViewForwarder() 610cdf0e10cSrcweir { 611cdf0e10cSrcweir } 612cdf0e10cSrcweir 613cdf0e10cSrcweir sal_Bool ScEditViewForwarder::IsValid() const 614cdf0e10cSrcweir { 615cdf0e10cSrcweir sal_Bool bResult(sal_False); 616cdf0e10cSrcweir if (mpWindow && mpEditView) 617cdf0e10cSrcweir { 618cdf0e10cSrcweir bResult = sal_True; 619cdf0e10cSrcweir } 620cdf0e10cSrcweir return bResult; 621cdf0e10cSrcweir } 622cdf0e10cSrcweir 623cdf0e10cSrcweir Rectangle ScEditViewForwarder::GetVisArea() const 624cdf0e10cSrcweir { 625cdf0e10cSrcweir Rectangle aVisArea; 626cdf0e10cSrcweir if (IsValid() && mpEditView->GetEditEngine()) 627cdf0e10cSrcweir { 628cdf0e10cSrcweir MapMode aMapMode(mpEditView->GetEditEngine()->GetRefMapMode()); 629cdf0e10cSrcweir 630cdf0e10cSrcweir aVisArea = mpWindow->LogicToPixel( mpEditView->GetVisArea(), aMapMode ); 631cdf0e10cSrcweir } 632cdf0e10cSrcweir else 633cdf0e10cSrcweir { 634cdf0e10cSrcweir DBG_ERROR("this EditViewForwarder is no longer valid"); 635cdf0e10cSrcweir } 636cdf0e10cSrcweir return aVisArea; 637cdf0e10cSrcweir } 638cdf0e10cSrcweir 639cdf0e10cSrcweir Point ScEditViewForwarder::LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const 640cdf0e10cSrcweir { 641cdf0e10cSrcweir if (mpWindow) 642cdf0e10cSrcweir return mpWindow->LogicToPixel( rPoint, rMapMode ); 643cdf0e10cSrcweir else 644cdf0e10cSrcweir { 645cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 646cdf0e10cSrcweir } 647cdf0e10cSrcweir return Point(); 648cdf0e10cSrcweir } 649cdf0e10cSrcweir 650cdf0e10cSrcweir Point ScEditViewForwarder::PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const 651cdf0e10cSrcweir { 652cdf0e10cSrcweir if (mpWindow) 653cdf0e10cSrcweir return mpWindow->PixelToLogic( rPoint, rMapMode ); 654cdf0e10cSrcweir else 655cdf0e10cSrcweir { 656cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 657cdf0e10cSrcweir } 658cdf0e10cSrcweir return Point(); 659cdf0e10cSrcweir } 660cdf0e10cSrcweir 661cdf0e10cSrcweir sal_Bool ScEditViewForwarder::GetSelection( ESelection& rSelection ) const 662cdf0e10cSrcweir { 663cdf0e10cSrcweir sal_Bool bResult(sal_False); 664cdf0e10cSrcweir if (IsValid()) 665cdf0e10cSrcweir { 666cdf0e10cSrcweir rSelection = mpEditView->GetSelection(); 667cdf0e10cSrcweir bResult = sal_True; 668cdf0e10cSrcweir } 669cdf0e10cSrcweir else 670cdf0e10cSrcweir { 671cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 672cdf0e10cSrcweir } 673cdf0e10cSrcweir return bResult; 674cdf0e10cSrcweir } 675cdf0e10cSrcweir 676cdf0e10cSrcweir sal_Bool ScEditViewForwarder::SetSelection( const ESelection& rSelection ) 677cdf0e10cSrcweir { 678cdf0e10cSrcweir sal_Bool bResult(sal_False); 679cdf0e10cSrcweir if (IsValid()) 680cdf0e10cSrcweir { 681cdf0e10cSrcweir mpEditView->SetSelection(rSelection); 682cdf0e10cSrcweir bResult = sal_True; 683cdf0e10cSrcweir } 684cdf0e10cSrcweir else 685cdf0e10cSrcweir { 686cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 687cdf0e10cSrcweir } 688cdf0e10cSrcweir return bResult; 689cdf0e10cSrcweir } 690cdf0e10cSrcweir 691cdf0e10cSrcweir sal_Bool ScEditViewForwarder::Copy() 692cdf0e10cSrcweir { 693cdf0e10cSrcweir sal_Bool bResult(sal_False); 694cdf0e10cSrcweir if (IsValid()) 695cdf0e10cSrcweir { 696cdf0e10cSrcweir mpEditView->Copy(); 697cdf0e10cSrcweir bResult = sal_True; 698cdf0e10cSrcweir } 699cdf0e10cSrcweir else 700cdf0e10cSrcweir { 701cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 702cdf0e10cSrcweir } 703cdf0e10cSrcweir return bResult; 704cdf0e10cSrcweir } 705cdf0e10cSrcweir 706cdf0e10cSrcweir sal_Bool ScEditViewForwarder::Cut() 707cdf0e10cSrcweir { 708cdf0e10cSrcweir sal_Bool bResult(sal_False); 709cdf0e10cSrcweir if (IsValid()) 710cdf0e10cSrcweir { 711cdf0e10cSrcweir mpEditView->Cut(); 712cdf0e10cSrcweir bResult = sal_True; 713cdf0e10cSrcweir } 714cdf0e10cSrcweir else 715cdf0e10cSrcweir { 716cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 717cdf0e10cSrcweir } 718cdf0e10cSrcweir return bResult; 719cdf0e10cSrcweir } 720cdf0e10cSrcweir 721cdf0e10cSrcweir sal_Bool ScEditViewForwarder::Paste() 722cdf0e10cSrcweir { 723cdf0e10cSrcweir sal_Bool bResult(sal_False); 724cdf0e10cSrcweir if (IsValid()) 725cdf0e10cSrcweir { 726cdf0e10cSrcweir mpEditView->Paste(); 727cdf0e10cSrcweir bResult = sal_True; 728cdf0e10cSrcweir } 729cdf0e10cSrcweir else 730cdf0e10cSrcweir { 731cdf0e10cSrcweir DBG_ERROR("this ViewForwarder is not valid"); 732cdf0e10cSrcweir } 733cdf0e10cSrcweir return bResult; 734cdf0e10cSrcweir } 735cdf0e10cSrcweir 736cdf0e10cSrcweir void ScEditViewForwarder::GrabFocus() 737cdf0e10cSrcweir { 738cdf0e10cSrcweir } 739cdf0e10cSrcweir 740cdf0e10cSrcweir void ScEditViewForwarder::SetInvalid() 741cdf0e10cSrcweir { 742cdf0e10cSrcweir mpWindow = NULL; 743cdf0e10cSrcweir mpEditView = NULL; 744cdf0e10cSrcweir } 745cdf0e10cSrcweir 746cdf0e10cSrcweir // ============================================================================ 747cdf0e10cSrcweir 748cdf0e10cSrcweir // ScAccessibleCellTextData: shared data between sub objects of a accessible cell text object 749cdf0e10cSrcweir 750cdf0e10cSrcweir ScAccessibleCellTextData::ScAccessibleCellTextData(ScTabViewShell* pViewShell, 751cdf0e10cSrcweir const ScAddress& rP, ScSplitPos eSplitPos, ScAccessibleCell* pAccCell) 752cdf0e10cSrcweir : ScAccessibleCellBaseTextData(GetDocShell(pViewShell), rP), 753cdf0e10cSrcweir mpViewForwarder(NULL), 754cdf0e10cSrcweir mpEditViewForwarder(NULL), 755cdf0e10cSrcweir mpViewShell(pViewShell), 756cdf0e10cSrcweir meSplitPos(eSplitPos), 757cdf0e10cSrcweir mbViewEditEngine(sal_False), 758cdf0e10cSrcweir mpAccessibleCell( pAccCell ) 759cdf0e10cSrcweir { 760cdf0e10cSrcweir } 761cdf0e10cSrcweir 762cdf0e10cSrcweir ScAccessibleCellTextData::~ScAccessibleCellTextData() 763cdf0e10cSrcweir { 764cdf0e10cSrcweir if (pEditEngine) 765cdf0e10cSrcweir pEditEngine->SetNotifyHdl(Link()); 766cdf0e10cSrcweir if (mpViewForwarder) 767cdf0e10cSrcweir delete mpViewForwarder; 768cdf0e10cSrcweir if (mpEditViewForwarder) 769cdf0e10cSrcweir delete mpEditViewForwarder; 770cdf0e10cSrcweir } 771cdf0e10cSrcweir 772cdf0e10cSrcweir void ScAccessibleCellTextData::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) 773cdf0e10cSrcweir { 774cdf0e10cSrcweir if ( rHint.ISA( SfxSimpleHint ) ) 775cdf0e10cSrcweir { 776cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 777cdf0e10cSrcweir if ( nId == SFX_HINT_DYING ) 778cdf0e10cSrcweir { 779cdf0e10cSrcweir mpViewShell = NULL; // invalid now 780cdf0e10cSrcweir if (mpViewForwarder) 781cdf0e10cSrcweir mpViewForwarder->SetInvalid(); 782cdf0e10cSrcweir if (mpEditViewForwarder) 783cdf0e10cSrcweir mpEditViewForwarder->SetInvalid(); 784cdf0e10cSrcweir } 785cdf0e10cSrcweir } 786cdf0e10cSrcweir ScAccessibleCellBaseTextData::Notify(rBC, rHint); 787cdf0e10cSrcweir } 788cdf0e10cSrcweir 789cdf0e10cSrcweir ScAccessibleTextData* ScAccessibleCellTextData::Clone() const 790cdf0e10cSrcweir { 791cdf0e10cSrcweir return new ScAccessibleCellTextData( mpViewShell, aCellPos, meSplitPos, mpAccessibleCell ); 792cdf0e10cSrcweir } 793cdf0e10cSrcweir 794cdf0e10cSrcweir void ScAccessibleCellTextData::GetCellText(const ScAddress& rCellPos, String& rText) 795cdf0e10cSrcweir { 796cdf0e10cSrcweir // #104893#; don't use the input string 797cdf0e10cSrcweir // ScCellTextData::GetCellText(rCellPos, rText); 798cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 799cdf0e10cSrcweir if (pDoc) 800cdf0e10cSrcweir { 801cdf0e10cSrcweir // #104893#; use the displayed string 802cdf0e10cSrcweir pDoc->GetString(rCellPos.Col(), rCellPos.Row(), rCellPos.Tab(), rText); 803cdf0e10cSrcweir if (mpViewShell) 804cdf0e10cSrcweir { 805cdf0e10cSrcweir const ScViewOptions& aOptions = mpViewShell->GetViewData()->GetOptions(); 806cdf0e10cSrcweir CellType aCellType; 807cdf0e10cSrcweir pDoc->GetCellType(rCellPos.Col(), rCellPos.Row(), rCellPos.Tab(), aCellType); 808cdf0e10cSrcweir if (aCellType == CELLTYPE_FORMULA && aOptions.GetOption( VOPT_FORMULAS )) 809cdf0e10cSrcweir { 810cdf0e10cSrcweir pDoc->GetFormula( rCellPos.Col(), rCellPos.Row(), rCellPos.Tab(), rText); 811cdf0e10cSrcweir } 812cdf0e10cSrcweir else if (!aOptions.GetOption( VOPT_NULLVALS )) 813cdf0e10cSrcweir { 814cdf0e10cSrcweir if ((aCellType == CELLTYPE_VALUE || aCellType == CELLTYPE_FORMULA) && pDoc->GetValue(rCellPos) == 0.0) 815cdf0e10cSrcweir rText.Erase(); 816cdf0e10cSrcweir } 817cdf0e10cSrcweir } 818cdf0e10cSrcweir } 819cdf0e10cSrcweir } 820cdf0e10cSrcweir 821cdf0e10cSrcweir SvxTextForwarder* ScAccessibleCellTextData::GetTextForwarder() 822cdf0e10cSrcweir { 823cdf0e10cSrcweir /* sal_Bool bHasForwarder(sal_False); 824cdf0e10cSrcweir if (mpViewShell && mpViewShell->GetViewData() && 825cdf0e10cSrcweir (mpViewShell->GetViewData()->GetCurPos() == aCellPos) && 826cdf0e10cSrcweir (mpViewShell->GetViewData()->HasEditView(meSplitPos)) && 827cdf0e10cSrcweir (mpViewShell->GetViewData()->GetEditViewCol() == aCellPos.Col()) && 828cdf0e10cSrcweir (mpViewShell->GetViewData()->GetEditViewRow() == aCellPos.Row())) 829cdf0e10cSrcweir { 830cdf0e10cSrcweir if (!mbViewEditEngine) 831cdf0e10cSrcweir { 832cdf0e10cSrcweir if (pForwarder) 833cdf0e10cSrcweir DELETEZ( pForwarder ); 834cdf0e10cSrcweir if (pEditEngine) 835cdf0e10cSrcweir DELETEZ( pEditEngine ); 836cdf0e10cSrcweir 837cdf0e10cSrcweir SCCOL nCol; 838cdf0e10cSrcweir SCROW nRow; 839cdf0e10cSrcweir EditView* pEditView; 840cdf0e10cSrcweir mpViewShell->GetViewData()->GetEditView( meSplitPos, pEditView, nCol, nRow ); 841cdf0e10cSrcweir if (pEditView) 842cdf0e10cSrcweir { 843cdf0e10cSrcweir pEditEngine = (ScFieldEditEngine*)pEditView->GetEditEngine(); 844cdf0e10cSrcweir pForwarder = new SvxEditEngineForwarder(*pEditEngine); 845cdf0e10cSrcweir bHasForwarder = sal_True; 846cdf0e10cSrcweir } 847cdf0e10cSrcweir } 848cdf0e10cSrcweir else 849cdf0e10cSrcweir bHasForwarder = sal_True; 850cdf0e10cSrcweir } 851cdf0e10cSrcweir else if (mbViewEditEngine) 852cdf0e10cSrcweir { 853cdf0e10cSrcweir // remove Forwarder created with EditEngine from EditView 854cdf0e10cSrcweir if (pForwarder) 855cdf0e10cSrcweir DELETEZ( pForwarder ); 856cdf0e10cSrcweir pEditEngine->SetNotifyHdl(Link()); 857cdf0e10cSrcweir // don't delete, because it is the EditEngine of the EditView 858cdf0e10cSrcweir pEditEngine = NULL; 859cdf0e10cSrcweir mbViewEditEngine = sal_False; 860cdf0e10cSrcweir } 861cdf0e10cSrcweir 862cdf0e10cSrcweir if (!bHasForwarder)*/ 863cdf0e10cSrcweir ScCellTextData::GetTextForwarder(); // creates Forwarder and EditEngine 864cdf0e10cSrcweir 865cdf0e10cSrcweir ScDocument* pDoc = ( pDocShell ? pDocShell->GetDocument() : NULL ); 866cdf0e10cSrcweir if ( pDoc && pEditEngine && mpViewShell ) 867cdf0e10cSrcweir { 868cdf0e10cSrcweir long nSizeX, nSizeY; 869cdf0e10cSrcweir mpViewShell->GetViewData()->GetMergeSizePixel( 870cdf0e10cSrcweir aCellPos.Col(), aCellPos.Row(), nSizeX, nSizeY); 871cdf0e10cSrcweir 872cdf0e10cSrcweir Size aSize(nSizeX, nSizeY); 873cdf0e10cSrcweir 874cdf0e10cSrcweir // #i92143# text getRangeExtents reports incorrect 'x' values for spreadsheet cells 875cdf0e10cSrcweir long nIndent = 0; 876cdf0e10cSrcweir const SvxHorJustifyItem* pHorJustifyItem = static_cast< const SvxHorJustifyItem* >( 877cdf0e10cSrcweir pDoc->GetAttr( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), ATTR_HOR_JUSTIFY ) ); 878cdf0e10cSrcweir SvxCellHorJustify eHorJust = ( pHorJustifyItem ? static_cast< SvxCellHorJustify >( pHorJustifyItem->GetValue() ) : SVX_HOR_JUSTIFY_STANDARD ); 879cdf0e10cSrcweir if ( eHorJust == SVX_HOR_JUSTIFY_LEFT ) 880cdf0e10cSrcweir { 881cdf0e10cSrcweir const SfxUInt16Item* pIndentItem = static_cast< const SfxUInt16Item* >( 882cdf0e10cSrcweir pDoc->GetAttr( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), ATTR_INDENT ) ); 883cdf0e10cSrcweir if ( pIndentItem ) 884cdf0e10cSrcweir { 885cdf0e10cSrcweir nIndent = static_cast< long >( pIndentItem->GetValue() ); 886cdf0e10cSrcweir } 887cdf0e10cSrcweir } 888cdf0e10cSrcweir 889cdf0e10cSrcweir const SvxMarginItem* pMarginItem = static_cast< const SvxMarginItem* >( 890cdf0e10cSrcweir pDoc->GetAttr( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), ATTR_MARGIN ) ); 891cdf0e10cSrcweir ScViewData* pViewData = mpViewShell->GetViewData(); 892cdf0e10cSrcweir double nPPTX = ( pViewData ? pViewData->GetPPTX() : 0 ); 893cdf0e10cSrcweir double nPPTY = ( pViewData ? pViewData->GetPPTY() : 0 ); 894cdf0e10cSrcweir long nLeftM = ( pMarginItem ? static_cast< long >( ( pMarginItem->GetLeftMargin() + nIndent ) * nPPTX ) : 0 ); 895cdf0e10cSrcweir long nTopM = ( pMarginItem ? static_cast< long >( pMarginItem->GetTopMargin() * nPPTY ) : 0 ); 896cdf0e10cSrcweir long nRightM = ( pMarginItem ? static_cast< long >( pMarginItem->GetRightMargin() * nPPTX ) : 0 ); 897cdf0e10cSrcweir long nBottomM = ( pMarginItem ? static_cast< long >( pMarginItem->GetBottomMargin() * nPPTY ) : 0 ); 898cdf0e10cSrcweir long nWidth = aSize.getWidth() - nLeftM - nRightM; 899cdf0e10cSrcweir aSize.setWidth( nWidth ); 900cdf0e10cSrcweir aSize.setHeight( aSize.getHeight() - nTopM - nBottomM ); 901cdf0e10cSrcweir 902cdf0e10cSrcweir Window* pWin = mpViewShell->GetWindowByPos( meSplitPos ); 903cdf0e10cSrcweir if ( pWin ) 904cdf0e10cSrcweir { 905cdf0e10cSrcweir aSize = pWin->PixelToLogic( aSize, pEditEngine->GetRefMapMode() ); 906cdf0e10cSrcweir } 907cdf0e10cSrcweir 908cdf0e10cSrcweir /* #i19430# Gnopernicus reads text partly if it sticks out of the cell 909cdf0e10cSrcweir boundaries. This leads to wrong results in cases where the cell text 910cdf0e10cSrcweir is rotated, because rotation is not taken into account when calcu- 911cdf0e10cSrcweir lating the visible part of the text. In these cases we will expand 912cdf0e10cSrcweir the cell size passed as paper size to the edit engine. The function 913cdf0e10cSrcweir accessibility::AccessibleStaticTextBase::GetParagraphBoundingBox() 914cdf0e10cSrcweir (see svx/source/accessibility/AccessibleStaticTextBase.cxx) will 915cdf0e10cSrcweir return the size of the complete text then, which is used to expand 916cdf0e10cSrcweir the cell bounding box in ScAccessibleCell::GetBoundingBox() 917cdf0e10cSrcweir (see sc/source/ui/Accessibility/AccessibleCell.cxx). */ 918cdf0e10cSrcweir const SfxInt32Item* pItem = static_cast< const SfxInt32Item* >( 919cdf0e10cSrcweir pDoc->GetAttr( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), ATTR_ROTATE_VALUE ) ); 920cdf0e10cSrcweir if( pItem && (pItem->GetValue() != 0) ) 921cdf0e10cSrcweir { 922cdf0e10cSrcweir pEditEngine->SetPaperSize( Size( LONG_MAX, aSize.getHeight() ) ); 923cdf0e10cSrcweir long nTxtWidth = static_cast< long >( pEditEngine->CalcTextWidth() ); 924cdf0e10cSrcweir aSize.setWidth( std::max( aSize.getWidth(), nTxtWidth + 2 ) ); 925cdf0e10cSrcweir } 926cdf0e10cSrcweir else 927cdf0e10cSrcweir { 928cdf0e10cSrcweir // #i92143# text getRangeExtents reports incorrect 'x' values for spreadsheet cells 929cdf0e10cSrcweir const SfxBoolItem* pLineBreakItem = static_cast< const SfxBoolItem* >( 930cdf0e10cSrcweir pDoc->GetAttr( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), ATTR_LINEBREAK ) ); 931cdf0e10cSrcweir bool bLineBreak = ( pLineBreakItem && pLineBreakItem->GetValue() ); 932cdf0e10cSrcweir if ( !bLineBreak ) 933cdf0e10cSrcweir { 934cdf0e10cSrcweir long nTxtWidth = static_cast< long >( pEditEngine->CalcTextWidth() ); 935cdf0e10cSrcweir aSize.setWidth( ::std::max( aSize.getWidth(), nTxtWidth ) ); 936cdf0e10cSrcweir } 937cdf0e10cSrcweir } 938cdf0e10cSrcweir 939cdf0e10cSrcweir pEditEngine->SetPaperSize( aSize ); 940cdf0e10cSrcweir 941cdf0e10cSrcweir // #i92143# text getRangeExtents reports incorrect 'x' values for spreadsheet cells 942cdf0e10cSrcweir if ( eHorJust == SVX_HOR_JUSTIFY_STANDARD && pDoc->HasValueData( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab() ) ) 943cdf0e10cSrcweir { 944cdf0e10cSrcweir pEditEngine->SetDefaultItem( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) ); 945cdf0e10cSrcweir } 946cdf0e10cSrcweir 947cdf0e10cSrcweir Size aTextSize; 948cdf0e10cSrcweir if ( pWin ) 949cdf0e10cSrcweir { 950cdf0e10cSrcweir aTextSize = pWin->LogicToPixel( Size( pEditEngine->CalcTextWidth(), pEditEngine->GetTextHeight() ), pEditEngine->GetRefMapMode() ); 951cdf0e10cSrcweir } 952cdf0e10cSrcweir long nTextWidth = aTextSize.Width(); 953cdf0e10cSrcweir long nTextHeight = aTextSize.Height(); 954cdf0e10cSrcweir 955cdf0e10cSrcweir long nOffsetX = nLeftM; 956cdf0e10cSrcweir long nDiffX = nTextWidth - nWidth; 957cdf0e10cSrcweir if ( nDiffX > 0 ) 958cdf0e10cSrcweir { 959cdf0e10cSrcweir switch ( eHorJust ) 960cdf0e10cSrcweir { 961cdf0e10cSrcweir case SVX_HOR_JUSTIFY_RIGHT: 962cdf0e10cSrcweir { 963cdf0e10cSrcweir nOffsetX -= nDiffX; 964cdf0e10cSrcweir } 965cdf0e10cSrcweir break; 966cdf0e10cSrcweir case SVX_HOR_JUSTIFY_CENTER: 967cdf0e10cSrcweir { 968cdf0e10cSrcweir nOffsetX -= nDiffX / 2; 969cdf0e10cSrcweir } 970cdf0e10cSrcweir break; 971cdf0e10cSrcweir default: 972cdf0e10cSrcweir { 973cdf0e10cSrcweir } 974cdf0e10cSrcweir break; 975cdf0e10cSrcweir } 976cdf0e10cSrcweir } 977cdf0e10cSrcweir 978cdf0e10cSrcweir long nOffsetY = 0; 979cdf0e10cSrcweir const SvxVerJustifyItem* pVerJustifyItem = static_cast< const SvxVerJustifyItem* >( 980cdf0e10cSrcweir pDoc->GetAttr( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), ATTR_VER_JUSTIFY ) ); 981cdf0e10cSrcweir SvxCellVerJustify eVerJust = ( pVerJustifyItem ? static_cast< SvxCellVerJustify >( pVerJustifyItem->GetValue() ) : SVX_VER_JUSTIFY_STANDARD ); 982cdf0e10cSrcweir switch ( eVerJust ) 983cdf0e10cSrcweir { 984cdf0e10cSrcweir case SVX_VER_JUSTIFY_STANDARD: 985cdf0e10cSrcweir case SVX_VER_JUSTIFY_BOTTOM: 986cdf0e10cSrcweir { 987cdf0e10cSrcweir nOffsetY = nSizeY - nBottomM - nTextHeight; 988cdf0e10cSrcweir } 989cdf0e10cSrcweir break; 990cdf0e10cSrcweir case SVX_VER_JUSTIFY_CENTER: 991cdf0e10cSrcweir { 992cdf0e10cSrcweir nOffsetY = ( nSizeY - nTopM - nBottomM - nTextHeight ) / 2 + nTopM; 993cdf0e10cSrcweir } 994cdf0e10cSrcweir break; 995cdf0e10cSrcweir default: 996cdf0e10cSrcweir { 997cdf0e10cSrcweir nOffsetY = nTopM; 998cdf0e10cSrcweir } 999cdf0e10cSrcweir break; 1000cdf0e10cSrcweir } 1001cdf0e10cSrcweir 1002cdf0e10cSrcweir if ( mpAccessibleCell ) 1003cdf0e10cSrcweir { 1004cdf0e10cSrcweir mpAccessibleCell->SetOffset( Point( nOffsetX, nOffsetY ) ); 1005cdf0e10cSrcweir } 1006cdf0e10cSrcweir 1007cdf0e10cSrcweir pEditEngine->SetNotifyHdl( LINK(this, ScAccessibleCellTextData, NotifyHdl) ); 1008cdf0e10cSrcweir } 1009cdf0e10cSrcweir 1010cdf0e10cSrcweir return pForwarder; 1011cdf0e10cSrcweir } 1012cdf0e10cSrcweir 1013cdf0e10cSrcweir SvxViewForwarder* ScAccessibleCellTextData::GetViewForwarder() 1014cdf0e10cSrcweir { 1015cdf0e10cSrcweir if (!mpViewForwarder) 1016cdf0e10cSrcweir mpViewForwarder = new ScViewForwarder(mpViewShell, meSplitPos, aCellPos); 1017cdf0e10cSrcweir return mpViewForwarder; 1018cdf0e10cSrcweir } 1019cdf0e10cSrcweir 1020cdf0e10cSrcweir SvxEditViewForwarder* ScAccessibleCellTextData::GetEditViewForwarder( sal_Bool /* bCreate */ ) 1021cdf0e10cSrcweir { 1022cdf0e10cSrcweir //#102219#; there should no EditViewForwarder be, because the cell is now readonly in this interface 1023cdf0e10cSrcweir /* if (!mpEditViewForwarder) 1024cdf0e10cSrcweir { 1025cdf0e10cSrcweir SCCOL nCol; 1026cdf0e10cSrcweir SCROW nRow; 1027cdf0e10cSrcweir EditView* pEditView; 1028cdf0e10cSrcweir mpViewShell->GetViewData()->GetEditView( meSplitPos, pEditView, nCol, nRow ); 1029cdf0e10cSrcweir 1030cdf0e10cSrcweir mpEditViewForwarder = new ScEditViewForwarder(pEditView, mpViewShell->GetWindowByPos(meSplitPos)); 1031cdf0e10cSrcweir } 1032cdf0e10cSrcweir else if (bCreate) 1033cdf0e10cSrcweir mpEditViewForwarder->GrabFocus(); 1034cdf0e10cSrcweir return mpEditViewForwarder;*/ 1035cdf0e10cSrcweir return NULL; 1036cdf0e10cSrcweir } 1037cdf0e10cSrcweir 1038cdf0e10cSrcweir IMPL_LINK(ScAccessibleCellTextData, NotifyHdl, EENotify*, aNotify) 1039cdf0e10cSrcweir { 1040cdf0e10cSrcweir if( aNotify ) 1041cdf0e10cSrcweir { 1042cdf0e10cSrcweir ::std::auto_ptr< SfxHint > aHint = SvxEditSourceHelper::EENotification2Hint( aNotify ); 1043cdf0e10cSrcweir 1044cdf0e10cSrcweir if( aHint.get() ) 1045cdf0e10cSrcweir GetBroadcaster().Broadcast( *aHint.get() ); 1046cdf0e10cSrcweir } 1047cdf0e10cSrcweir 1048cdf0e10cSrcweir return 0; 1049cdf0e10cSrcweir } 1050cdf0e10cSrcweir 1051cdf0e10cSrcweir ScDocShell* ScAccessibleCellTextData::GetDocShell(ScTabViewShell* pViewShell) 1052cdf0e10cSrcweir { 1053cdf0e10cSrcweir ScDocShell* pDocSh = NULL; 1054cdf0e10cSrcweir if (pViewShell) 1055cdf0e10cSrcweir pDocSh = pViewShell->GetViewData()->GetDocShell(); 1056cdf0e10cSrcweir return pDocSh; 1057cdf0e10cSrcweir } 1058cdf0e10cSrcweir 1059cdf0e10cSrcweir 1060cdf0e10cSrcweir // ============================================================================ 1061*0deba7fbSSteve Yin //IAccessibility2 Implementation 2009----- 1062*0deba7fbSSteve Yin //ScAccessibleEditObjectTextData::ScAccessibleEditObjectTextData(EditView* pEditView, Window* pWin) 1063*0deba7fbSSteve Yin ScAccessibleEditObjectTextData::ScAccessibleEditObjectTextData(EditView* pEditView, Window* pWin, sal_Bool isClone) 1064*0deba7fbSSteve Yin //-----IAccessibility2 Implementation 2009 1065cdf0e10cSrcweir : 1066cdf0e10cSrcweir mpViewForwarder(NULL), 1067cdf0e10cSrcweir mpEditViewForwarder(NULL), 1068cdf0e10cSrcweir mpEditView(pEditView), 1069cdf0e10cSrcweir mpEditEngine(pEditView ? pEditView->GetEditEngine() : 0), 1070cdf0e10cSrcweir mpForwarder(NULL), 1071cdf0e10cSrcweir mpWindow(pWin) 1072cdf0e10cSrcweir { 1073*0deba7fbSSteve Yin //IAccessibility2 Implementation 2009----- 1074*0deba7fbSSteve Yin // Solution: If the object is cloned, do NOT add notify hdl. 1075*0deba7fbSSteve Yin mbIsCloned = isClone; 1076*0deba7fbSSteve Yin //if (mpEditEngine) 1077*0deba7fbSSteve Yin if (mpEditEngine && !mbIsCloned) 1078*0deba7fbSSteve Yin //-----IAccessibility2 Implementation 2009 1079cdf0e10cSrcweir mpEditEngine->SetNotifyHdl( LINK(this, ScAccessibleEditObjectTextData, NotifyHdl) ); 1080cdf0e10cSrcweir } 1081cdf0e10cSrcweir 1082cdf0e10cSrcweir ScAccessibleEditObjectTextData::~ScAccessibleEditObjectTextData() 1083cdf0e10cSrcweir { 1084*0deba7fbSSteve Yin //IAccessibility2 Implementation 2009----- 1085*0deba7fbSSteve Yin // Solution: If the object is cloned, do NOT set notify hdl. 1086*0deba7fbSSteve Yin //if (mpEditEngine) 1087*0deba7fbSSteve Yin if (mpEditEngine && !mbIsCloned) 1088*0deba7fbSSteve Yin //-----IAccessibility2 Implementation 2009 1089cdf0e10cSrcweir mpEditEngine->SetNotifyHdl(Link()); 1090cdf0e10cSrcweir if (mpViewForwarder) 1091cdf0e10cSrcweir delete mpViewForwarder; 1092cdf0e10cSrcweir if (mpEditViewForwarder) 1093cdf0e10cSrcweir delete mpEditViewForwarder; 1094cdf0e10cSrcweir if (mpForwarder) 1095cdf0e10cSrcweir delete mpForwarder; 1096cdf0e10cSrcweir } 1097cdf0e10cSrcweir 1098cdf0e10cSrcweir void ScAccessibleEditObjectTextData::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) 1099cdf0e10cSrcweir { 1100cdf0e10cSrcweir if ( rHint.ISA( SfxSimpleHint ) ) 1101cdf0e10cSrcweir { 1102cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 1103cdf0e10cSrcweir if ( nId == SFX_HINT_DYING ) 1104cdf0e10cSrcweir { 1105cdf0e10cSrcweir mpWindow = NULL; 1106cdf0e10cSrcweir mpEditView = NULL; 1107cdf0e10cSrcweir mpEditEngine = NULL; 1108cdf0e10cSrcweir DELETEZ(mpForwarder); 1109cdf0e10cSrcweir if (mpViewForwarder) 1110cdf0e10cSrcweir mpViewForwarder->SetInvalid(); 1111cdf0e10cSrcweir if (mpEditViewForwarder) 1112cdf0e10cSrcweir mpEditViewForwarder->SetInvalid(); 1113cdf0e10cSrcweir } 1114cdf0e10cSrcweir } 1115cdf0e10cSrcweir ScAccessibleTextData::Notify(rBC, rHint); 1116cdf0e10cSrcweir } 1117cdf0e10cSrcweir 1118cdf0e10cSrcweir ScAccessibleTextData* ScAccessibleEditObjectTextData::Clone() const 1119cdf0e10cSrcweir { 1120*0deba7fbSSteve Yin //IAccessibility2 Implementation 2009----- 1121*0deba7fbSSteve Yin // Solution: Add para to indicate the object is cloned 1122*0deba7fbSSteve Yin //return new ScAccessibleEditObjectTextData(mpEditView, mpWindow); 1123*0deba7fbSSteve Yin return new ScAccessibleEditObjectTextData(mpEditView, mpWindow,sal_True); 1124*0deba7fbSSteve Yin //-----IAccessibility2 Implementation 2009 1125cdf0e10cSrcweir } 1126cdf0e10cSrcweir 1127cdf0e10cSrcweir SvxTextForwarder* ScAccessibleEditObjectTextData::GetTextForwarder() 1128cdf0e10cSrcweir { 1129cdf0e10cSrcweir if ((!mpForwarder && mpEditView) || (mpEditEngine && !mpEditEngine->GetNotifyHdl().IsSet())) 1130cdf0e10cSrcweir { 1131cdf0e10cSrcweir if (!mpEditEngine) 1132cdf0e10cSrcweir mpEditEngine = mpEditView->GetEditEngine(); 1133*0deba7fbSSteve Yin //IAccessibility2 Implementation 2009----- 1134*0deba7fbSSteve Yin // Solution: If the object is cloned, do NOT add notify hdl. 1135*0deba7fbSSteve Yin //if (mpEditEngine && !mpEditEngine->GetNotifyHdl().IsSet()) 1136*0deba7fbSSteve Yin if (mpEditEngine && !mpEditEngine->GetNotifyHdl().IsSet()&&!mbIsCloned) 1137*0deba7fbSSteve Yin //-----IAccessibility2 Implementation 2009 1138cdf0e10cSrcweir mpEditEngine->SetNotifyHdl( LINK(this, ScAccessibleEditObjectTextData, NotifyHdl) ); 1139cdf0e10cSrcweir if(!mpForwarder) 1140cdf0e10cSrcweir mpForwarder = new SvxEditEngineForwarder(*mpEditEngine); 1141cdf0e10cSrcweir } 1142cdf0e10cSrcweir return mpForwarder; 1143cdf0e10cSrcweir } 1144cdf0e10cSrcweir 1145cdf0e10cSrcweir SvxViewForwarder* ScAccessibleEditObjectTextData::GetViewForwarder() 1146cdf0e10cSrcweir { 1147cdf0e10cSrcweir if (!mpViewForwarder) 1148cdf0e10cSrcweir { 1149cdf0e10cSrcweir // --> OD 2005-12-21 #i49561# 1150cdf0e10cSrcweir mpViewForwarder = new ScEditObjectViewForwarder( mpWindow, mpEditView ); 1151cdf0e10cSrcweir // <-- 1152cdf0e10cSrcweir } 1153cdf0e10cSrcweir return mpViewForwarder; 1154cdf0e10cSrcweir } 1155cdf0e10cSrcweir 1156cdf0e10cSrcweir SvxEditViewForwarder* ScAccessibleEditObjectTextData::GetEditViewForwarder( sal_Bool bCreate ) 1157cdf0e10cSrcweir { 1158cdf0e10cSrcweir if (!mpEditViewForwarder && mpEditView) 1159cdf0e10cSrcweir mpEditViewForwarder = new ScEditViewForwarder(mpEditView, mpWindow); 1160cdf0e10cSrcweir if (bCreate) 1161cdf0e10cSrcweir { 1162cdf0e10cSrcweir if (!mpEditView && mpEditViewForwarder) 1163cdf0e10cSrcweir { 1164cdf0e10cSrcweir DELETEZ(mpEditViewForwarder); 1165cdf0e10cSrcweir } 1166cdf0e10cSrcweir else if (mpEditViewForwarder) 1167cdf0e10cSrcweir mpEditViewForwarder->GrabFocus(); 1168cdf0e10cSrcweir } 1169cdf0e10cSrcweir return mpEditViewForwarder; 1170cdf0e10cSrcweir } 1171cdf0e10cSrcweir 1172cdf0e10cSrcweir IMPL_LINK(ScAccessibleEditObjectTextData, NotifyHdl, EENotify*, aNotify) 1173cdf0e10cSrcweir { 1174cdf0e10cSrcweir if( aNotify ) 1175cdf0e10cSrcweir { 1176cdf0e10cSrcweir ::std::auto_ptr< SfxHint > aHint = SvxEditSourceHelper::EENotification2Hint( aNotify ); 1177cdf0e10cSrcweir 1178cdf0e10cSrcweir if( aHint.get() ) 1179cdf0e10cSrcweir GetBroadcaster().Broadcast( *aHint.get() ); 1180cdf0e10cSrcweir } 1181cdf0e10cSrcweir 1182cdf0e10cSrcweir return 0; 1183cdf0e10cSrcweir } 1184cdf0e10cSrcweir 1185cdf0e10cSrcweir 1186cdf0e10cSrcweir // ============================================================================ 1187cdf0e10cSrcweir 1188cdf0e10cSrcweir ScAccessibleEditLineTextData::ScAccessibleEditLineTextData(EditView* pEditView, Window* pWin) 1189cdf0e10cSrcweir : 1190cdf0e10cSrcweir ScAccessibleEditObjectTextData(pEditView, pWin), 1191cdf0e10cSrcweir mbEditEngineCreated(sal_False) 1192cdf0e10cSrcweir { 1193cdf0e10cSrcweir ScTextWnd* pTxtWnd = (ScTextWnd*)pWin; 1194cdf0e10cSrcweir 1195cdf0e10cSrcweir if (pTxtWnd) 1196cdf0e10cSrcweir pTxtWnd->InsertAccessibleTextData( *this ); 1197cdf0e10cSrcweir } 1198cdf0e10cSrcweir 1199cdf0e10cSrcweir ScAccessibleEditLineTextData::~ScAccessibleEditLineTextData() 1200cdf0e10cSrcweir { 1201cdf0e10cSrcweir ScTextWnd* pTxtWnd = (ScTextWnd*)mpWindow; 1202cdf0e10cSrcweir 1203cdf0e10cSrcweir if (pTxtWnd) 1204cdf0e10cSrcweir pTxtWnd->RemoveAccessibleTextData( *this ); 1205cdf0e10cSrcweir 1206cdf0e10cSrcweir if (mbEditEngineCreated && mpEditEngine) 1207cdf0e10cSrcweir { 1208cdf0e10cSrcweir delete mpEditEngine; 1209cdf0e10cSrcweir mpEditEngine = NULL; // #103346# don't access in ScAccessibleEditObjectTextData dtor! 1210cdf0e10cSrcweir } 1211cdf0e10cSrcweir else if (pTxtWnd && pTxtWnd->GetEditView() && pTxtWnd->GetEditView()->GetEditEngine()) 1212cdf0e10cSrcweir { 1213cdf0e10cSrcweir // #103346# the NotifyHdl also has to be removed from the ScTextWnd's EditEngine 1214cdf0e10cSrcweir // (it's set in ScAccessibleEditLineTextData::GetTextForwarder, and mpEditEngine 1215cdf0e10cSrcweir // is reset there) 1216cdf0e10cSrcweir pTxtWnd->GetEditView()->GetEditEngine()->SetNotifyHdl(Link()); 1217cdf0e10cSrcweir } 1218cdf0e10cSrcweir } 1219cdf0e10cSrcweir 1220cdf0e10cSrcweir void ScAccessibleEditLineTextData::Dispose() 1221cdf0e10cSrcweir { 1222cdf0e10cSrcweir ScTextWnd* pTxtWnd = (ScTextWnd*)mpWindow; 1223cdf0e10cSrcweir 1224cdf0e10cSrcweir if (pTxtWnd) 1225cdf0e10cSrcweir pTxtWnd->RemoveAccessibleTextData( *this ); 1226cdf0e10cSrcweir 1227cdf0e10cSrcweir ResetEditMode(); 1228cdf0e10cSrcweir mpWindow = NULL; 1229cdf0e10cSrcweir } 1230cdf0e10cSrcweir 1231cdf0e10cSrcweir ScAccessibleTextData* ScAccessibleEditLineTextData::Clone() const 1232cdf0e10cSrcweir { 1233cdf0e10cSrcweir return new ScAccessibleEditLineTextData(mpEditView, mpWindow); 1234cdf0e10cSrcweir } 1235cdf0e10cSrcweir 1236cdf0e10cSrcweir SvxTextForwarder* ScAccessibleEditLineTextData::GetTextForwarder() 1237cdf0e10cSrcweir { 1238cdf0e10cSrcweir ScTextWnd* pTxtWnd = (ScTextWnd*)mpWindow; 1239cdf0e10cSrcweir 1240cdf0e10cSrcweir if (pTxtWnd) 1241cdf0e10cSrcweir { 1242cdf0e10cSrcweir mpEditView = pTxtWnd->GetEditView(); 1243cdf0e10cSrcweir if (mpEditView) 1244cdf0e10cSrcweir { 1245cdf0e10cSrcweir if (mbEditEngineCreated && mpEditEngine) 1246cdf0e10cSrcweir ResetEditMode(); 1247cdf0e10cSrcweir mbEditEngineCreated = sal_False; 1248cdf0e10cSrcweir 1249cdf0e10cSrcweir mpEditView = pTxtWnd->GetEditView(); 1250cdf0e10cSrcweir ScAccessibleEditObjectTextData::GetTextForwarder(); // fill the mpForwarder 1251cdf0e10cSrcweir mpEditEngine = NULL; 1252cdf0e10cSrcweir } 1253cdf0e10cSrcweir else 1254cdf0e10cSrcweir { 1255cdf0e10cSrcweir if (mpEditEngine && !mbEditEngineCreated) 1256cdf0e10cSrcweir ResetEditMode(); 1257cdf0e10cSrcweir if (!mpEditEngine) 1258cdf0e10cSrcweir { 1259cdf0e10cSrcweir SfxItemPool* pEnginePool = EditEngine::CreatePool(); 1260cdf0e10cSrcweir pEnginePool->FreezeIdRanges(); 1261cdf0e10cSrcweir mpEditEngine = new ScFieldEditEngine( pEnginePool, NULL, sal_True ); 1262cdf0e10cSrcweir mbEditEngineCreated = sal_True; 1263cdf0e10cSrcweir // currently, GetPortions doesn't work if UpdateMode is sal_False, 1264cdf0e10cSrcweir // this will be fixed (in EditEngine) by src600 1265cdf0e10cSrcweir // pEditEngine->SetUpdateMode( sal_False ); 1266cdf0e10cSrcweir mpEditEngine->EnableUndo( sal_False ); 1267cdf0e10cSrcweir mpEditEngine->SetRefMapMode( MAP_100TH_MM ); 1268cdf0e10cSrcweir mpForwarder = new SvxEditEngineForwarder(*mpEditEngine); 1269cdf0e10cSrcweir 1270cdf0e10cSrcweir mpEditEngine->SetText(pTxtWnd->GetTextString()); 1271cdf0e10cSrcweir 1272cdf0e10cSrcweir Size aSize(pTxtWnd->GetSizePixel()); 1273cdf0e10cSrcweir 1274cdf0e10cSrcweir aSize = pTxtWnd->PixelToLogic(aSize, mpEditEngine->GetRefMapMode()); 1275cdf0e10cSrcweir 1276cdf0e10cSrcweir mpEditEngine->SetPaperSize(aSize); 1277cdf0e10cSrcweir 1278cdf0e10cSrcweir mpEditEngine->SetNotifyHdl( LINK(this, ScAccessibleEditObjectTextData, NotifyHdl) ); 1279cdf0e10cSrcweir } 1280cdf0e10cSrcweir } 1281cdf0e10cSrcweir } 1282cdf0e10cSrcweir return mpForwarder; 1283cdf0e10cSrcweir } 1284cdf0e10cSrcweir 1285cdf0e10cSrcweir SvxEditViewForwarder* ScAccessibleEditLineTextData::GetEditViewForwarder( sal_Bool bCreate ) 1286cdf0e10cSrcweir { 1287cdf0e10cSrcweir ScTextWnd* pTxtWnd = (ScTextWnd*)mpWindow; 1288cdf0e10cSrcweir 1289cdf0e10cSrcweir if (pTxtWnd) 1290cdf0e10cSrcweir { 1291cdf0e10cSrcweir mpEditView = pTxtWnd->GetEditView(); 1292cdf0e10cSrcweir if (!mpEditView && bCreate) 1293cdf0e10cSrcweir { 1294cdf0e10cSrcweir if ( !pTxtWnd->IsInputActive() ) 1295cdf0e10cSrcweir { 1296cdf0e10cSrcweir pTxtWnd->StartEditEngine(); 1297cdf0e10cSrcweir pTxtWnd->GrabFocus(); 1298cdf0e10cSrcweir // pTxtWnd->SetTextString( rText ); 1299cdf0e10cSrcweir // pTxtWnd->GetEditView()->SetSelection( rSel ); 1300cdf0e10cSrcweir 1301cdf0e10cSrcweir mpEditView = pTxtWnd->GetEditView(); 1302cdf0e10cSrcweir } 1303cdf0e10cSrcweir } 1304cdf0e10cSrcweir } 1305cdf0e10cSrcweir 1306cdf0e10cSrcweir return ScAccessibleEditObjectTextData::GetEditViewForwarder(bCreate); 1307cdf0e10cSrcweir } 1308cdf0e10cSrcweir 1309cdf0e10cSrcweir void ScAccessibleEditLineTextData::ResetEditMode() 1310cdf0e10cSrcweir { 1311cdf0e10cSrcweir ScTextWnd* pTxtWnd = (ScTextWnd*)mpWindow; 1312cdf0e10cSrcweir 1313cdf0e10cSrcweir if (mbEditEngineCreated && mpEditEngine) 1314cdf0e10cSrcweir delete mpEditEngine; 1315cdf0e10cSrcweir else if (pTxtWnd && pTxtWnd->GetEditView() && pTxtWnd->GetEditView()->GetEditEngine()) 1316cdf0e10cSrcweir pTxtWnd->GetEditView()->GetEditEngine()->SetNotifyHdl(Link()); 1317cdf0e10cSrcweir mpEditEngine = NULL; 1318cdf0e10cSrcweir 1319cdf0e10cSrcweir DELETEZ(mpForwarder); 1320cdf0e10cSrcweir DELETEZ(mpEditViewForwarder); 1321cdf0e10cSrcweir DELETEZ(mpViewForwarder); 1322cdf0e10cSrcweir mbEditEngineCreated = sal_False; 1323cdf0e10cSrcweir } 1324cdf0e10cSrcweir 1325cdf0e10cSrcweir void ScAccessibleEditLineTextData::TextChanged() 1326cdf0e10cSrcweir { 1327cdf0e10cSrcweir if (mbEditEngineCreated && mpEditEngine) 1328cdf0e10cSrcweir { 1329cdf0e10cSrcweir ScTextWnd* pTxtWnd = (ScTextWnd*)mpWindow; 1330cdf0e10cSrcweir 1331cdf0e10cSrcweir if (pTxtWnd) 1332cdf0e10cSrcweir mpEditEngine->SetText(pTxtWnd->GetTextString()); 1333cdf0e10cSrcweir } 1334cdf0e10cSrcweir } 1335cdf0e10cSrcweir 1336cdf0e10cSrcweir void ScAccessibleEditLineTextData::StartEdit() 1337cdf0e10cSrcweir { 1338cdf0e10cSrcweir ResetEditMode(); 1339cdf0e10cSrcweir mpEditView = NULL; 1340cdf0e10cSrcweir 1341cdf0e10cSrcweir // send HINT_BEGEDIT 1342cdf0e10cSrcweir SdrHint aHint(HINT_BEGEDIT); 1343cdf0e10cSrcweir GetBroadcaster().Broadcast( aHint ); 1344cdf0e10cSrcweir } 1345cdf0e10cSrcweir 1346cdf0e10cSrcweir void ScAccessibleEditLineTextData::EndEdit() 1347cdf0e10cSrcweir { 1348cdf0e10cSrcweir // send HINT_ENDEDIT 1349cdf0e10cSrcweir SdrHint aHint(HINT_ENDEDIT); 1350cdf0e10cSrcweir GetBroadcaster().Broadcast( aHint ); 1351cdf0e10cSrcweir 1352cdf0e10cSrcweir ResetEditMode(); 1353cdf0e10cSrcweir mpEditView = NULL; 1354cdf0e10cSrcweir } 1355cdf0e10cSrcweir 1356cdf0e10cSrcweir 1357cdf0e10cSrcweir // ============================================================================ 1358cdf0e10cSrcweir 1359cdf0e10cSrcweir // ScAccessiblePreviewCellTextData: shared data between sub objects of a accessible cell text object 1360cdf0e10cSrcweir 1361cdf0e10cSrcweir ScAccessiblePreviewCellTextData::ScAccessiblePreviewCellTextData(ScPreviewShell* pViewShell, 1362cdf0e10cSrcweir const ScAddress& rP) 1363cdf0e10cSrcweir : ScAccessibleCellBaseTextData(GetDocShell(pViewShell), rP), 1364cdf0e10cSrcweir mpViewForwarder(NULL), 1365cdf0e10cSrcweir mpViewShell(pViewShell) 1366cdf0e10cSrcweir { 1367cdf0e10cSrcweir } 1368cdf0e10cSrcweir 1369cdf0e10cSrcweir ScAccessiblePreviewCellTextData::~ScAccessiblePreviewCellTextData() 1370cdf0e10cSrcweir { 1371cdf0e10cSrcweir if (pEditEngine) 1372cdf0e10cSrcweir pEditEngine->SetNotifyHdl(Link()); 1373cdf0e10cSrcweir if (mpViewForwarder) 1374cdf0e10cSrcweir delete mpViewForwarder; 1375cdf0e10cSrcweir } 1376cdf0e10cSrcweir 1377cdf0e10cSrcweir void ScAccessiblePreviewCellTextData::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) 1378cdf0e10cSrcweir { 1379cdf0e10cSrcweir if ( rHint.ISA( SfxSimpleHint ) ) 1380cdf0e10cSrcweir { 1381cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 1382cdf0e10cSrcweir if ( nId == SFX_HINT_DYING ) 1383cdf0e10cSrcweir { 1384cdf0e10cSrcweir mpViewShell = NULL; // invalid now 1385cdf0e10cSrcweir if (mpViewForwarder) 1386cdf0e10cSrcweir mpViewForwarder->SetInvalid(); 1387cdf0e10cSrcweir } 1388cdf0e10cSrcweir } 1389cdf0e10cSrcweir ScAccessibleCellBaseTextData::Notify(rBC, rHint); 1390cdf0e10cSrcweir } 1391cdf0e10cSrcweir 1392cdf0e10cSrcweir ScAccessibleTextData* ScAccessiblePreviewCellTextData::Clone() const 1393cdf0e10cSrcweir { 1394cdf0e10cSrcweir return new ScAccessiblePreviewCellTextData(mpViewShell, aCellPos); 1395cdf0e10cSrcweir } 1396cdf0e10cSrcweir 1397cdf0e10cSrcweir SvxTextForwarder* ScAccessiblePreviewCellTextData::GetTextForwarder() 1398cdf0e10cSrcweir { 1399cdf0e10cSrcweir sal_Bool bEditEngineBefore(pEditEngine != NULL); 1400cdf0e10cSrcweir 1401cdf0e10cSrcweir ScCellTextData::GetTextForwarder(); // creates Forwarder and EditEngine 1402cdf0e10cSrcweir 1403cdf0e10cSrcweir if (!bEditEngineBefore && pEditEngine) 1404cdf0e10cSrcweir { 1405cdf0e10cSrcweir Size aSize(mpViewShell->GetLocationData().GetCellOutputRect(aCellPos).GetSize()); 1406cdf0e10cSrcweir Window* pWin = mpViewShell->GetWindow(); 1407cdf0e10cSrcweir if (pWin) 1408cdf0e10cSrcweir aSize = pWin->PixelToLogic(aSize, pEditEngine->GetRefMapMode()); 1409cdf0e10cSrcweir pEditEngine->SetPaperSize(aSize); 1410cdf0e10cSrcweir } 1411cdf0e10cSrcweir 1412cdf0e10cSrcweir if (pEditEngine) 1413cdf0e10cSrcweir pEditEngine->SetNotifyHdl( LINK(this, ScAccessibleCellTextData, NotifyHdl) ); 1414cdf0e10cSrcweir 1415cdf0e10cSrcweir return pForwarder; 1416cdf0e10cSrcweir } 1417cdf0e10cSrcweir 1418cdf0e10cSrcweir SvxViewForwarder* ScAccessiblePreviewCellTextData::GetViewForwarder() 1419cdf0e10cSrcweir { 1420cdf0e10cSrcweir if (!mpViewForwarder) 1421cdf0e10cSrcweir mpViewForwarder = new ScPreviewCellViewForwarder(mpViewShell, aCellPos); 1422cdf0e10cSrcweir return mpViewForwarder; 1423cdf0e10cSrcweir } 1424cdf0e10cSrcweir 1425cdf0e10cSrcweir //UNUSED2008-05 IMPL_LINK(ScAccessiblePreviewCellTextData, NotifyHdl, EENotify*, aNotify) 1426cdf0e10cSrcweir //UNUSED2008-05 { 1427cdf0e10cSrcweir //UNUSED2008-05 if( aNotify ) 1428cdf0e10cSrcweir //UNUSED2008-05 { 1429cdf0e10cSrcweir //UNUSED2008-05 ::std::auto_ptr< SfxHint > aHint = SvxEditSourceHelper::EENotification2Hint( aNotify); 1430cdf0e10cSrcweir //UNUSED2008-05 1431cdf0e10cSrcweir //UNUSED2008-05 if( aHint.get() ) 1432cdf0e10cSrcweir //UNUSED2008-05 GetBroadcaster().Broadcast( *aHint.get() ); 1433cdf0e10cSrcweir //UNUSED2008-05 } 1434cdf0e10cSrcweir //UNUSED2008-05 1435cdf0e10cSrcweir //UNUSED2008-05 return 0; 1436cdf0e10cSrcweir //UNUSED2008-05 } 1437cdf0e10cSrcweir 1438cdf0e10cSrcweir ScDocShell* ScAccessiblePreviewCellTextData::GetDocShell(ScPreviewShell* pViewShell) 1439cdf0e10cSrcweir { 1440cdf0e10cSrcweir ScDocShell* pDocSh = NULL; 1441cdf0e10cSrcweir if (pViewShell && pViewShell->GetDocument()) 1442cdf0e10cSrcweir pDocSh = (ScDocShell*) pViewShell->GetDocument()->GetDocumentShell(); 1443cdf0e10cSrcweir return pDocSh; 1444cdf0e10cSrcweir } 1445cdf0e10cSrcweir 1446cdf0e10cSrcweir 1447cdf0e10cSrcweir // ============================================================================ 1448cdf0e10cSrcweir 1449cdf0e10cSrcweir // ScAccessiblePreviewHeaderCellTextData: shared data between sub objects of a accessible cell text object 1450cdf0e10cSrcweir 1451cdf0e10cSrcweir ScAccessiblePreviewHeaderCellTextData::ScAccessiblePreviewHeaderCellTextData(ScPreviewShell* pViewShell, 1452cdf0e10cSrcweir const String& rText, const ScAddress& rP, sal_Bool bColHeader, sal_Bool bRowHeader) 1453cdf0e10cSrcweir : ScAccessibleCellBaseTextData(GetDocShell(pViewShell), rP), 1454cdf0e10cSrcweir mpViewForwarder(NULL), 1455cdf0e10cSrcweir mpViewShell(pViewShell), 1456cdf0e10cSrcweir maText(rText), 1457cdf0e10cSrcweir mbColHeader(bColHeader), 1458cdf0e10cSrcweir mbRowHeader(bRowHeader) 1459cdf0e10cSrcweir { 1460cdf0e10cSrcweir } 1461cdf0e10cSrcweir 1462cdf0e10cSrcweir ScAccessiblePreviewHeaderCellTextData::~ScAccessiblePreviewHeaderCellTextData() 1463cdf0e10cSrcweir { 1464cdf0e10cSrcweir if (pEditEngine) 1465cdf0e10cSrcweir pEditEngine->SetNotifyHdl(Link()); 1466cdf0e10cSrcweir if (mpViewForwarder) 1467cdf0e10cSrcweir delete mpViewForwarder; 1468cdf0e10cSrcweir } 1469cdf0e10cSrcweir 1470cdf0e10cSrcweir void ScAccessiblePreviewHeaderCellTextData::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) 1471cdf0e10cSrcweir { 1472cdf0e10cSrcweir if ( rHint.ISA( SfxSimpleHint ) ) 1473cdf0e10cSrcweir { 1474cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 1475cdf0e10cSrcweir if ( nId == SFX_HINT_DYING ) 1476cdf0e10cSrcweir { 1477cdf0e10cSrcweir mpViewShell = NULL; // invalid now 1478cdf0e10cSrcweir if (mpViewForwarder) 1479cdf0e10cSrcweir mpViewForwarder->SetInvalid(); 1480cdf0e10cSrcweir } 1481cdf0e10cSrcweir } 1482cdf0e10cSrcweir ScAccessibleCellBaseTextData::Notify(rBC, rHint); 1483cdf0e10cSrcweir } 1484cdf0e10cSrcweir 1485cdf0e10cSrcweir ScAccessibleTextData* ScAccessiblePreviewHeaderCellTextData::Clone() const 1486cdf0e10cSrcweir { 1487cdf0e10cSrcweir return new ScAccessiblePreviewHeaderCellTextData(mpViewShell, maText, aCellPos, mbColHeader, mbRowHeader); 1488cdf0e10cSrcweir } 1489cdf0e10cSrcweir 1490cdf0e10cSrcweir SvxTextForwarder* ScAccessiblePreviewHeaderCellTextData::GetTextForwarder() 1491cdf0e10cSrcweir { 1492cdf0e10cSrcweir if (!pEditEngine) 1493cdf0e10cSrcweir { 1494cdf0e10cSrcweir if ( pDocShell ) 1495cdf0e10cSrcweir { 1496cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1497cdf0e10cSrcweir pEditEngine = pDoc->CreateFieldEditEngine(); 1498cdf0e10cSrcweir } 1499cdf0e10cSrcweir else 1500cdf0e10cSrcweir { 1501cdf0e10cSrcweir SfxItemPool* pEnginePool = EditEngine::CreatePool(); 1502cdf0e10cSrcweir pEnginePool->FreezeIdRanges(); 1503cdf0e10cSrcweir pEditEngine = new ScFieldEditEngine( pEnginePool, NULL, sal_True ); 1504cdf0e10cSrcweir } 1505cdf0e10cSrcweir // currently, GetPortions doesn't work if UpdateMode is sal_False, 1506cdf0e10cSrcweir // this will be fixed (in EditEngine) by src600 1507cdf0e10cSrcweir // pEditEngine->SetUpdateMode( sal_False ); 1508cdf0e10cSrcweir pEditEngine->EnableUndo( sal_False ); 1509cdf0e10cSrcweir if (pDocShell) 1510cdf0e10cSrcweir pEditEngine->SetRefDevice(pDocShell->GetRefDevice()); 1511cdf0e10cSrcweir else 1512cdf0e10cSrcweir pEditEngine->SetRefMapMode( MAP_100TH_MM ); 1513cdf0e10cSrcweir pForwarder = new SvxEditEngineForwarder(*pEditEngine); 1514cdf0e10cSrcweir } 1515cdf0e10cSrcweir 1516cdf0e10cSrcweir if (bDataValid) 1517cdf0e10cSrcweir return pForwarder; 1518cdf0e10cSrcweir 1519cdf0e10cSrcweir if (maText.Len() && pEditEngine) 1520cdf0e10cSrcweir { 1521cdf0e10cSrcweir 1522cdf0e10cSrcweir if ( mpViewShell ) 1523cdf0e10cSrcweir { 1524cdf0e10cSrcweir Size aOutputSize; 1525cdf0e10cSrcweir Window* pWindow = mpViewShell->GetWindow(); 1526cdf0e10cSrcweir if ( pWindow ) 1527cdf0e10cSrcweir aOutputSize = pWindow->GetOutputSizePixel(); 1528cdf0e10cSrcweir Point aPoint; 1529cdf0e10cSrcweir Rectangle aVisRect( aPoint, aOutputSize ); 1530cdf0e10cSrcweir Size aSize(mpViewShell->GetLocationData().GetHeaderCellOutputRect(aVisRect, aCellPos, mbColHeader).GetSize()); 1531cdf0e10cSrcweir if (pWindow) 1532cdf0e10cSrcweir aSize = pWindow->PixelToLogic(aSize, pEditEngine->GetRefMapMode()); 1533cdf0e10cSrcweir pEditEngine->SetPaperSize(aSize); 1534cdf0e10cSrcweir } 1535cdf0e10cSrcweir pEditEngine->SetText( maText ); 1536cdf0e10cSrcweir } 1537cdf0e10cSrcweir 1538cdf0e10cSrcweir bDataValid = sal_True; 1539cdf0e10cSrcweir 1540cdf0e10cSrcweir if (pEditEngine) 1541cdf0e10cSrcweir pEditEngine->SetNotifyHdl( LINK(this, ScAccessibleCellTextData, NotifyHdl) ); 1542cdf0e10cSrcweir 1543cdf0e10cSrcweir return pForwarder; 1544cdf0e10cSrcweir } 1545cdf0e10cSrcweir 1546cdf0e10cSrcweir SvxViewForwarder* ScAccessiblePreviewHeaderCellTextData::GetViewForwarder() 1547cdf0e10cSrcweir { 1548cdf0e10cSrcweir if (!mpViewForwarder) 1549cdf0e10cSrcweir mpViewForwarder = new ScPreviewHeaderCellViewForwarder(mpViewShell, aCellPos, mbColHeader, mbRowHeader); 1550cdf0e10cSrcweir return mpViewForwarder; 1551cdf0e10cSrcweir } 1552cdf0e10cSrcweir 1553cdf0e10cSrcweir //UNUSED2008-05 IMPL_LINK(ScAccessiblePreviewHeaderCellTextData, NotifyHdl, EENotify*, aNotify) 1554cdf0e10cSrcweir //UNUSED2008-05 { 1555cdf0e10cSrcweir //UNUSED2008-05 if( aNotify ) 1556cdf0e10cSrcweir //UNUSED2008-05 { 1557cdf0e10cSrcweir //UNUSED2008-05 ::std::auto_ptr< SfxHint > aHint = SvxEditSourceHelper::EENotification2Hint( aNotify); 1558cdf0e10cSrcweir //UNUSED2008-05 1559cdf0e10cSrcweir //UNUSED2008-05 if( aHint.get() ) 1560cdf0e10cSrcweir //UNUSED2008-05 GetBroadcaster().Broadcast( *aHint.get() ); 1561cdf0e10cSrcweir //UNUSED2008-05 } 1562cdf0e10cSrcweir //UNUSED2008-05 1563cdf0e10cSrcweir //UNUSED2008-05 return 0; 1564cdf0e10cSrcweir //UNUSED2008-05 } 1565cdf0e10cSrcweir 1566cdf0e10cSrcweir ScDocShell* ScAccessiblePreviewHeaderCellTextData::GetDocShell(ScPreviewShell* pViewShell) 1567cdf0e10cSrcweir { 1568cdf0e10cSrcweir ScDocShell* pDocSh = NULL; 1569cdf0e10cSrcweir if (pViewShell && pViewShell->GetDocument()) 1570cdf0e10cSrcweir pDocSh = (ScDocShell*) pViewShell->GetDocument()->GetDocumentShell(); 1571cdf0e10cSrcweir return pDocSh; 1572cdf0e10cSrcweir } 1573cdf0e10cSrcweir 1574cdf0e10cSrcweir 1575cdf0e10cSrcweir // ============================================================================ 1576cdf0e10cSrcweir 1577cdf0e10cSrcweir ScAccessibleHeaderTextData::ScAccessibleHeaderTextData(ScPreviewShell* pViewShell, 1578cdf0e10cSrcweir const EditTextObject* pEditObj, sal_Bool bHeader, SvxAdjust eAdjust) 1579cdf0e10cSrcweir : 1580cdf0e10cSrcweir mpViewForwarder(NULL), 1581cdf0e10cSrcweir mpViewShell(pViewShell), 1582cdf0e10cSrcweir mpEditEngine(NULL), 1583cdf0e10cSrcweir mpForwarder(NULL), 1584cdf0e10cSrcweir mpDocSh(NULL), 1585cdf0e10cSrcweir mpEditObj(pEditObj), 1586cdf0e10cSrcweir mbHeader(bHeader), 1587cdf0e10cSrcweir mbDataValid(sal_False), 1588cdf0e10cSrcweir meAdjust(eAdjust) 1589cdf0e10cSrcweir { 1590cdf0e10cSrcweir if (pViewShell && pViewShell->GetDocument()) 1591cdf0e10cSrcweir mpDocSh = (ScDocShell*) pViewShell->GetDocument()->GetDocumentShell(); 1592cdf0e10cSrcweir if (mpDocSh) 1593cdf0e10cSrcweir mpDocSh->GetDocument()->AddUnoObject(*this); 1594cdf0e10cSrcweir } 1595cdf0e10cSrcweir 1596cdf0e10cSrcweir ScAccessibleHeaderTextData::~ScAccessibleHeaderTextData() 1597cdf0e10cSrcweir { 1598cdf0e10cSrcweir ScUnoGuard aGuard; // needed for EditEngine dtor 1599cdf0e10cSrcweir 1600cdf0e10cSrcweir if (mpDocSh) 1601cdf0e10cSrcweir mpDocSh->GetDocument()->RemoveUnoObject(*this); 1602cdf0e10cSrcweir if (mpEditEngine) 1603cdf0e10cSrcweir mpEditEngine->SetNotifyHdl(Link()); 1604cdf0e10cSrcweir delete mpEditEngine; 1605cdf0e10cSrcweir delete mpForwarder; 1606cdf0e10cSrcweir } 1607cdf0e10cSrcweir 1608cdf0e10cSrcweir ScAccessibleTextData* ScAccessibleHeaderTextData::Clone() const 1609cdf0e10cSrcweir { 1610cdf0e10cSrcweir return new ScAccessibleHeaderTextData(mpViewShell, mpEditObj, mbHeader, meAdjust); 1611cdf0e10cSrcweir } 1612cdf0e10cSrcweir 1613cdf0e10cSrcweir void ScAccessibleHeaderTextData::Notify( SfxBroadcaster&, const SfxHint& rHint ) 1614cdf0e10cSrcweir { 1615cdf0e10cSrcweir if ( rHint.ISA( SfxSimpleHint ) ) 1616cdf0e10cSrcweir { 1617cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 1618cdf0e10cSrcweir if ( nId == SFX_HINT_DYING ) 1619cdf0e10cSrcweir { 1620cdf0e10cSrcweir mpViewShell = NULL;// invalid now 1621cdf0e10cSrcweir mpDocSh = NULL; 1622cdf0e10cSrcweir if (mpViewForwarder) 1623cdf0e10cSrcweir mpViewForwarder->SetInvalid(); 1624cdf0e10cSrcweir } 1625cdf0e10cSrcweir } 1626cdf0e10cSrcweir } 1627cdf0e10cSrcweir 1628cdf0e10cSrcweir SvxTextForwarder* ScAccessibleHeaderTextData::GetTextForwarder() 1629cdf0e10cSrcweir { 1630cdf0e10cSrcweir if (!mpEditEngine) 1631cdf0e10cSrcweir { 1632cdf0e10cSrcweir SfxItemPool* pEnginePool = EditEngine::CreatePool(); 1633cdf0e10cSrcweir pEnginePool->FreezeIdRanges(); 1634cdf0e10cSrcweir ScHeaderEditEngine* pHdrEngine = new ScHeaderEditEngine( pEnginePool, sal_True ); 1635cdf0e10cSrcweir 1636cdf0e10cSrcweir pHdrEngine->EnableUndo( sal_False ); 1637cdf0e10cSrcweir pHdrEngine->SetRefMapMode( MAP_TWIP ); 1638cdf0e10cSrcweir 1639cdf0e10cSrcweir // default font must be set, independently of document 1640cdf0e10cSrcweir // -> use global pool from module 1641cdf0e10cSrcweir 1642cdf0e10cSrcweir SfxItemSet aDefaults( pHdrEngine->GetEmptyItemSet() ); 1643cdf0e10cSrcweir const ScPatternAttr& rPattern = (const ScPatternAttr&)SC_MOD()->GetPool().GetDefaultItem(ATTR_PATTERN); 1644cdf0e10cSrcweir rPattern.FillEditItemSet( &aDefaults ); 1645cdf0e10cSrcweir // FillEditItemSet adjusts font height to 1/100th mm, 1646cdf0e10cSrcweir // but for header/footer twips is needed, as in the PatternAttr: 1647cdf0e10cSrcweir aDefaults.Put( rPattern.GetItem(ATTR_FONT_HEIGHT), EE_CHAR_FONTHEIGHT ); 1648cdf0e10cSrcweir aDefaults.Put( rPattern.GetItem(ATTR_CJK_FONT_HEIGHT), EE_CHAR_FONTHEIGHT_CJK ); 1649cdf0e10cSrcweir aDefaults.Put( rPattern.GetItem(ATTR_CTL_FONT_HEIGHT), EE_CHAR_FONTHEIGHT_CTL ); 1650cdf0e10cSrcweir aDefaults.Put( SvxAdjustItem( meAdjust, EE_PARA_JUST ) ); 1651cdf0e10cSrcweir pHdrEngine->SetDefaults( aDefaults ); 1652cdf0e10cSrcweir 1653cdf0e10cSrcweir ScHeaderFieldData aData; 1654cdf0e10cSrcweir if (mpViewShell) 1655cdf0e10cSrcweir mpViewShell->FillFieldData(aData); 1656cdf0e10cSrcweir else 1657cdf0e10cSrcweir ScHeaderFooterTextObj::FillDummyFieldData( aData ); 1658cdf0e10cSrcweir pHdrEngine->SetData( aData ); 1659cdf0e10cSrcweir 1660cdf0e10cSrcweir mpEditEngine = pHdrEngine; 1661cdf0e10cSrcweir mpForwarder = new SvxEditEngineForwarder(*mpEditEngine); 1662cdf0e10cSrcweir } 1663cdf0e10cSrcweir 1664cdf0e10cSrcweir if (mbDataValid) 1665cdf0e10cSrcweir return mpForwarder; 1666cdf0e10cSrcweir 1667cdf0e10cSrcweir if ( mpViewShell ) 1668cdf0e10cSrcweir { 1669cdf0e10cSrcweir Rectangle aVisRect; 1670cdf0e10cSrcweir mpViewShell->GetLocationData().GetHeaderPosition(aVisRect); 1671cdf0e10cSrcweir Size aSize(aVisRect.GetSize()); 1672cdf0e10cSrcweir Window* pWin = mpViewShell->GetWindow(); 1673cdf0e10cSrcweir if (pWin) 1674cdf0e10cSrcweir aSize = pWin->PixelToLogic(aSize, mpEditEngine->GetRefMapMode()); 1675cdf0e10cSrcweir mpEditEngine->SetPaperSize(aSize); 1676cdf0e10cSrcweir } 1677cdf0e10cSrcweir if (mpEditObj) 1678cdf0e10cSrcweir mpEditEngine->SetText(*mpEditObj); 1679cdf0e10cSrcweir 1680cdf0e10cSrcweir mbDataValid = sal_True; 1681cdf0e10cSrcweir return mpForwarder; 1682cdf0e10cSrcweir } 1683cdf0e10cSrcweir 1684cdf0e10cSrcweir SvxViewForwarder* ScAccessibleHeaderTextData::GetViewForwarder() 1685cdf0e10cSrcweir { 1686cdf0e10cSrcweir if (!mpViewForwarder) 1687cdf0e10cSrcweir mpViewForwarder = new ScPreviewHeaderFooterViewForwarder(mpViewShell, mbHeader); 1688cdf0e10cSrcweir return mpViewForwarder; 1689cdf0e10cSrcweir } 1690cdf0e10cSrcweir 1691cdf0e10cSrcweir 1692cdf0e10cSrcweir // ============================================================================ 1693cdf0e10cSrcweir 1694cdf0e10cSrcweir ScAccessibleNoteTextData::ScAccessibleNoteTextData(ScPreviewShell* pViewShell, 1695cdf0e10cSrcweir const String& sText, const ScAddress& aCellPos, sal_Bool bMarkNote) 1696cdf0e10cSrcweir : 1697cdf0e10cSrcweir mpViewForwarder(NULL), 1698cdf0e10cSrcweir mpViewShell(pViewShell), 1699cdf0e10cSrcweir mpEditEngine(NULL), 1700cdf0e10cSrcweir mpForwarder(NULL), 1701cdf0e10cSrcweir mpDocSh(NULL), 1702cdf0e10cSrcweir msText(sText), 1703cdf0e10cSrcweir maCellPos(aCellPos), 1704cdf0e10cSrcweir mbMarkNote(bMarkNote), 1705cdf0e10cSrcweir mbDataValid(sal_False) 1706cdf0e10cSrcweir { 1707cdf0e10cSrcweir if (pViewShell && pViewShell->GetDocument()) 1708cdf0e10cSrcweir mpDocSh = (ScDocShell*) pViewShell->GetDocument()->GetDocumentShell(); 1709cdf0e10cSrcweir if (mpDocSh) 1710cdf0e10cSrcweir mpDocSh->GetDocument()->AddUnoObject(*this); 1711cdf0e10cSrcweir } 1712cdf0e10cSrcweir 1713cdf0e10cSrcweir ScAccessibleNoteTextData::~ScAccessibleNoteTextData() 1714cdf0e10cSrcweir { 1715cdf0e10cSrcweir ScUnoGuard aGuard; // needed for EditEngine dtor 1716cdf0e10cSrcweir 1717cdf0e10cSrcweir if (mpDocSh) 1718cdf0e10cSrcweir mpDocSh->GetDocument()->RemoveUnoObject(*this); 1719cdf0e10cSrcweir if (mpEditEngine) 1720cdf0e10cSrcweir mpEditEngine->SetNotifyHdl(Link()); 1721cdf0e10cSrcweir delete mpEditEngine; 1722cdf0e10cSrcweir delete mpForwarder; 1723cdf0e10cSrcweir } 1724cdf0e10cSrcweir 1725cdf0e10cSrcweir ScAccessibleTextData* ScAccessibleNoteTextData::Clone() const 1726cdf0e10cSrcweir { 1727cdf0e10cSrcweir return new ScAccessibleNoteTextData(mpViewShell, msText, maCellPos, mbMarkNote); 1728cdf0e10cSrcweir } 1729cdf0e10cSrcweir 1730cdf0e10cSrcweir void ScAccessibleNoteTextData::Notify( SfxBroadcaster&, const SfxHint& rHint ) 1731cdf0e10cSrcweir { 1732cdf0e10cSrcweir if ( rHint.ISA( SfxSimpleHint ) ) 1733cdf0e10cSrcweir { 1734cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 1735cdf0e10cSrcweir if ( nId == SFX_HINT_DYING ) 1736cdf0e10cSrcweir { 1737cdf0e10cSrcweir mpViewShell = NULL;// invalid now 1738cdf0e10cSrcweir mpDocSh = NULL; 1739cdf0e10cSrcweir if (mpViewForwarder) 1740cdf0e10cSrcweir mpViewForwarder->SetInvalid(); 1741cdf0e10cSrcweir } 1742cdf0e10cSrcweir } 1743cdf0e10cSrcweir } 1744cdf0e10cSrcweir 1745cdf0e10cSrcweir SvxTextForwarder* ScAccessibleNoteTextData::GetTextForwarder() 1746cdf0e10cSrcweir { 1747cdf0e10cSrcweir if (!mpEditEngine) 1748cdf0e10cSrcweir { 1749cdf0e10cSrcweir if ( mpDocSh ) 1750cdf0e10cSrcweir { 1751cdf0e10cSrcweir ScDocument* pDoc = mpDocSh->GetDocument(); 1752cdf0e10cSrcweir mpEditEngine = pDoc->CreateFieldEditEngine(); 1753cdf0e10cSrcweir } 1754cdf0e10cSrcweir else 1755cdf0e10cSrcweir { 1756cdf0e10cSrcweir SfxItemPool* pEnginePool = EditEngine::CreatePool(); 1757cdf0e10cSrcweir pEnginePool->FreezeIdRanges(); 1758cdf0e10cSrcweir mpEditEngine = new ScFieldEditEngine( pEnginePool, NULL, sal_True ); 1759cdf0e10cSrcweir } 1760cdf0e10cSrcweir // currently, GetPortions doesn't work if UpdateMode is sal_False, 1761cdf0e10cSrcweir // this will be fixed (in EditEngine) by src600 1762cdf0e10cSrcweir // pEditEngine->SetUpdateMode( sal_False ); 1763cdf0e10cSrcweir mpEditEngine->EnableUndo( sal_False ); 1764cdf0e10cSrcweir if (mpDocSh) 1765cdf0e10cSrcweir mpEditEngine->SetRefDevice(mpDocSh->GetRefDevice()); 1766cdf0e10cSrcweir else 1767cdf0e10cSrcweir mpEditEngine->SetRefMapMode( MAP_100TH_MM ); 1768cdf0e10cSrcweir mpForwarder = new SvxEditEngineForwarder(*mpEditEngine); 1769cdf0e10cSrcweir } 1770cdf0e10cSrcweir 1771cdf0e10cSrcweir if (mbDataValid) 1772cdf0e10cSrcweir return mpForwarder; 1773cdf0e10cSrcweir 1774cdf0e10cSrcweir if (msText.Len() && mpEditEngine) 1775cdf0e10cSrcweir { 1776cdf0e10cSrcweir 1777cdf0e10cSrcweir if ( mpViewShell ) 1778cdf0e10cSrcweir { 1779cdf0e10cSrcweir Size aOutputSize; 1780cdf0e10cSrcweir Window* pWindow = mpViewShell->GetWindow(); 1781cdf0e10cSrcweir if ( pWindow ) 1782cdf0e10cSrcweir aOutputSize = pWindow->GetOutputSizePixel(); 1783cdf0e10cSrcweir Point aPoint; 1784cdf0e10cSrcweir Rectangle aVisRect( aPoint, aOutputSize ); 1785cdf0e10cSrcweir Size aSize(mpViewShell->GetLocationData().GetNoteInRangeOutputRect(aVisRect, mbMarkNote, maCellPos).GetSize()); 1786cdf0e10cSrcweir if (pWindow) 1787cdf0e10cSrcweir aSize = pWindow->PixelToLogic(aSize, mpEditEngine->GetRefMapMode()); 1788cdf0e10cSrcweir mpEditEngine->SetPaperSize(aSize); 1789cdf0e10cSrcweir } 1790cdf0e10cSrcweir mpEditEngine->SetText( msText ); 1791cdf0e10cSrcweir } 1792cdf0e10cSrcweir 1793cdf0e10cSrcweir mbDataValid = sal_True; 1794cdf0e10cSrcweir 1795cdf0e10cSrcweir if (mpEditEngine) 1796cdf0e10cSrcweir mpEditEngine->SetNotifyHdl( LINK(this, ScAccessibleCellTextData, NotifyHdl) ); 1797cdf0e10cSrcweir 1798cdf0e10cSrcweir return mpForwarder; 1799cdf0e10cSrcweir } 1800cdf0e10cSrcweir 1801cdf0e10cSrcweir SvxViewForwarder* ScAccessibleNoteTextData::GetViewForwarder() 1802cdf0e10cSrcweir { 1803cdf0e10cSrcweir if (!mpViewForwarder) 1804cdf0e10cSrcweir mpViewForwarder = new ScPreviewNoteViewForwarder(mpViewShell, maCellPos, mbMarkNote); 1805cdf0e10cSrcweir return mpViewForwarder; 1806cdf0e10cSrcweir } 1807cdf0e10cSrcweir 1808cdf0e10cSrcweir 1809cdf0e10cSrcweir // CSV import ================================================================= 1810cdf0e10cSrcweir 1811cdf0e10cSrcweir class ScCsvViewForwarder : public SvxViewForwarder 1812cdf0e10cSrcweir { 1813cdf0e10cSrcweir Rectangle maBoundBox; 1814cdf0e10cSrcweir Window* mpWindow; 1815cdf0e10cSrcweir 1816cdf0e10cSrcweir public: 1817cdf0e10cSrcweir explicit ScCsvViewForwarder( Window* pWindow, const Rectangle& rBoundBox ); 1818cdf0e10cSrcweir 1819cdf0e10cSrcweir virtual sal_Bool IsValid() const; 1820cdf0e10cSrcweir virtual Rectangle GetVisArea() const; 1821cdf0e10cSrcweir virtual Point LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const; 1822cdf0e10cSrcweir virtual Point PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const; 1823cdf0e10cSrcweir 1824cdf0e10cSrcweir void SetInvalid(); 1825cdf0e10cSrcweir }; 1826cdf0e10cSrcweir 1827cdf0e10cSrcweir ScCsvViewForwarder::ScCsvViewForwarder( Window* pWindow, const Rectangle& rBoundBox ) : 1828cdf0e10cSrcweir maBoundBox( rBoundBox ), 1829cdf0e10cSrcweir mpWindow( pWindow ) 1830cdf0e10cSrcweir { 1831cdf0e10cSrcweir } 1832cdf0e10cSrcweir 1833cdf0e10cSrcweir sal_Bool ScCsvViewForwarder::IsValid() const 1834cdf0e10cSrcweir { 1835cdf0e10cSrcweir return mpWindow != NULL; 1836cdf0e10cSrcweir } 1837cdf0e10cSrcweir 1838cdf0e10cSrcweir Rectangle ScCsvViewForwarder::GetVisArea() const 1839cdf0e10cSrcweir { 1840cdf0e10cSrcweir return maBoundBox; 1841cdf0e10cSrcweir } 1842cdf0e10cSrcweir 1843cdf0e10cSrcweir Point ScCsvViewForwarder::LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const 1844cdf0e10cSrcweir { 1845cdf0e10cSrcweir if( !mpWindow ) return Point(); 1846cdf0e10cSrcweir return mpWindow->LogicToPixel( rPoint, rMapMode ); 1847cdf0e10cSrcweir } 1848cdf0e10cSrcweir 1849cdf0e10cSrcweir Point ScCsvViewForwarder::PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const 1850cdf0e10cSrcweir { 1851cdf0e10cSrcweir if( !mpWindow ) return Point(); 1852cdf0e10cSrcweir return mpWindow->PixelToLogic( rPoint, rMapMode ); 1853cdf0e10cSrcweir } 1854cdf0e10cSrcweir 1855cdf0e10cSrcweir void ScCsvViewForwarder::SetInvalid() 1856cdf0e10cSrcweir { 1857cdf0e10cSrcweir mpWindow = NULL; 1858cdf0e10cSrcweir } 1859cdf0e10cSrcweir 1860cdf0e10cSrcweir // ---------------------------------------------------------------------------- 1861cdf0e10cSrcweir 1862cdf0e10cSrcweir ScAccessibleCsvTextData::ScAccessibleCsvTextData( 1863cdf0e10cSrcweir Window* pWindow, EditEngine* pEditEngine, 1864cdf0e10cSrcweir const String& rCellText, const Rectangle& rBoundBox, const Size& rCellSize ) : 1865cdf0e10cSrcweir mpWindow( pWindow ), 1866cdf0e10cSrcweir mpEditEngine( pEditEngine ), 1867cdf0e10cSrcweir maCellText( rCellText ), 1868cdf0e10cSrcweir maBoundBox( rBoundBox ), 1869cdf0e10cSrcweir maCellSize( rCellSize ) 1870cdf0e10cSrcweir { 1871cdf0e10cSrcweir } 1872cdf0e10cSrcweir 1873cdf0e10cSrcweir ScAccessibleCsvTextData::~ScAccessibleCsvTextData() 1874cdf0e10cSrcweir { 1875cdf0e10cSrcweir } 1876cdf0e10cSrcweir 1877cdf0e10cSrcweir void ScAccessibleCsvTextData::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) 1878cdf0e10cSrcweir { 1879cdf0e10cSrcweir if ( rHint.ISA( SfxSimpleHint ) ) 1880cdf0e10cSrcweir { 1881cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 1882cdf0e10cSrcweir if( nId == SFX_HINT_DYING ) 1883cdf0e10cSrcweir { 1884cdf0e10cSrcweir mpWindow = NULL; 1885cdf0e10cSrcweir mpEditEngine = NULL; 1886cdf0e10cSrcweir if (mpViewForwarder.get()) 1887cdf0e10cSrcweir mpViewForwarder->SetInvalid(); 1888cdf0e10cSrcweir } 1889cdf0e10cSrcweir } 1890cdf0e10cSrcweir ScAccessibleTextData::Notify( rBC, rHint ); 1891cdf0e10cSrcweir } 1892cdf0e10cSrcweir 1893cdf0e10cSrcweir ScAccessibleTextData* ScAccessibleCsvTextData::Clone() const 1894cdf0e10cSrcweir { 1895cdf0e10cSrcweir return new ScAccessibleCsvTextData( mpWindow, mpEditEngine, maCellText, maBoundBox, maCellSize ); 1896cdf0e10cSrcweir } 1897cdf0e10cSrcweir 1898cdf0e10cSrcweir SvxTextForwarder* ScAccessibleCsvTextData::GetTextForwarder() 1899cdf0e10cSrcweir { 1900cdf0e10cSrcweir if( mpEditEngine ) 1901cdf0e10cSrcweir { 1902cdf0e10cSrcweir mpEditEngine->SetPaperSize( maCellSize ); 1903cdf0e10cSrcweir mpEditEngine->SetText( maCellText ); 1904cdf0e10cSrcweir if( !mpTextForwarder.get() ) 1905cdf0e10cSrcweir mpTextForwarder.reset( new SvxEditEngineForwarder( *mpEditEngine ) ); 1906cdf0e10cSrcweir } 1907cdf0e10cSrcweir else 1908cdf0e10cSrcweir mpTextForwarder.reset( NULL ); 1909cdf0e10cSrcweir return mpTextForwarder.get(); 1910cdf0e10cSrcweir } 1911cdf0e10cSrcweir 1912cdf0e10cSrcweir SvxViewForwarder* ScAccessibleCsvTextData::GetViewForwarder() 1913cdf0e10cSrcweir { 1914cdf0e10cSrcweir if( !mpViewForwarder.get() ) 1915cdf0e10cSrcweir mpViewForwarder.reset( new ScCsvViewForwarder( mpWindow, maBoundBox ) ); 1916cdf0e10cSrcweir return mpViewForwarder.get(); 1917cdf0e10cSrcweir } 1918cdf0e10cSrcweir 1919cdf0e10cSrcweir SvxEditViewForwarder* ScAccessibleCsvTextData::GetEditViewForwarder( sal_Bool /* bCreate */ ) 1920cdf0e10cSrcweir { 1921cdf0e10cSrcweir return NULL; 1922cdf0e10cSrcweir } 1923cdf0e10cSrcweir 1924cdf0e10cSrcweir 1925cdf0e10cSrcweir // ============================================================================ 1926cdf0e10cSrcweir 1927