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 10cdf0e10cSrcweir * 11b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 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. 19cdf0e10cSrcweir * 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 <svx/svddef.hxx> 28cdf0e10cSrcweir #include <svx/svdoutl.hxx> 29cdf0e10cSrcweir #include <editeng/outlobj.hxx> 30cdf0e10cSrcweir #include <svx/sdtaaitm.hxx> 31cdf0e10cSrcweir #include <svx/sdtacitm.hxx> 32cdf0e10cSrcweir #include <svx/svdotext.hxx> 33cdf0e10cSrcweir #include <editeng/unolingu.hxx> 34cdf0e10cSrcweir #include <svx/svdocapt.hxx> 35cdf0e10cSrcweir #include <sfx2/bindings.hxx> 36cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 37cdf0e10cSrcweir #include <sfx2/viewfrm.hxx> 38cdf0e10cSrcweir #include <svx/svxids.hrc> 39cdf0e10cSrcweir #include <editeng/eeitem.hxx> 40cdf0e10cSrcweir #include <svl/itemset.hxx> 41cdf0e10cSrcweir 42cdf0e10cSrcweir #include "futext.hxx" 43cdf0e10cSrcweir #include "drwlayer.hxx" 44cdf0e10cSrcweir #include "sc.hrc" 45cdf0e10cSrcweir #include "tabvwsh.hxx" 46cdf0e10cSrcweir #include "drawview.hxx" 47cdf0e10cSrcweir 48cdf0e10cSrcweir // #98185# Create default drawing objects via keyboard 49cdf0e10cSrcweir #include "scresid.hxx" 50cdf0e10cSrcweir 51cdf0e10cSrcweir // Maximal erlaubte Mausbewegung um noch Drag&Drop zu starten 52cdf0e10cSrcweir //! fusel,fuconstr,futext - zusammenfassen! 53cdf0e10cSrcweir #define SC_MAXDRAGMOVE 3 54cdf0e10cSrcweir 55cdf0e10cSrcweir //------------------------------------------------------------------ 56cdf0e10cSrcweir 57cdf0e10cSrcweir void lcl_InvalidateAttribs( SfxBindings& rBindings ) 58cdf0e10cSrcweir { 59cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_CHAR_WEIGHT ); 60cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_CHAR_POSTURE ); 61cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_CHAR_UNDERLINE ); 62cdf0e10cSrcweir rBindings.Invalidate( SID_ULINE_VAL_NONE ); 63cdf0e10cSrcweir rBindings.Invalidate( SID_ULINE_VAL_SINGLE ); 64cdf0e10cSrcweir rBindings.Invalidate( SID_ULINE_VAL_DOUBLE ); 65cdf0e10cSrcweir rBindings.Invalidate( SID_ULINE_VAL_DOTTED ); 66cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_CHAR_OVERLINE ); 67cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_CHAR_COLOR ); 68cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_CHAR_FONT ); 69cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_CHAR_FONTHEIGHT ); 70512ec161SZheng Fan rBindings.Invalidate( SID_ATTR_PARA_ADJUST_LEFT ); 71512ec161SZheng Fan rBindings.Invalidate( SID_ATTR_PARA_ADJUST_RIGHT ); 72512ec161SZheng Fan rBindings.Invalidate( SID_ATTR_PARA_ADJUST_BLOCK ); 73512ec161SZheng Fan rBindings.Invalidate( SID_ATTR_PARA_ADJUST_CENTER); 74cdf0e10cSrcweir rBindings.Invalidate( SID_ALIGNLEFT ); 75cdf0e10cSrcweir rBindings.Invalidate( SID_ALIGNCENTERHOR ); 76cdf0e10cSrcweir rBindings.Invalidate( SID_ALIGNRIGHT ); 77cdf0e10cSrcweir rBindings.Invalidate( SID_ALIGNBLOCK ); 78cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_PARA_LINESPACE_10 ); 79cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_PARA_LINESPACE_15 ); 80cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_PARA_LINESPACE_20 ); 81cdf0e10cSrcweir rBindings.Invalidate( SID_SET_SUPER_SCRIPT ); 82cdf0e10cSrcweir rBindings.Invalidate( SID_SET_SUB_SCRIPT ); 83cdf0e10cSrcweir rBindings.Invalidate( SID_HYPERLINK_GETLINK ); 84cdf0e10cSrcweir rBindings.Invalidate( SID_TEXTDIRECTION_LEFT_TO_RIGHT ); 85cdf0e10cSrcweir rBindings.Invalidate( SID_TEXTDIRECTION_TOP_TO_BOTTOM ); 86cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_PARA_LEFT_TO_RIGHT ); 87cdf0e10cSrcweir rBindings.Invalidate( SID_ATTR_PARA_RIGHT_TO_LEFT ); 88cdf0e10cSrcweir // pseudo slots for Format menu 89cdf0e10cSrcweir rBindings.Invalidate( SID_ALIGN_ANY_LEFT ); 90cdf0e10cSrcweir rBindings.Invalidate( SID_ALIGN_ANY_HCENTER ); 91cdf0e10cSrcweir rBindings.Invalidate( SID_ALIGN_ANY_RIGHT ); 92cdf0e10cSrcweir rBindings.Invalidate( SID_ALIGN_ANY_JUSTIFIED ); 93512ec161SZheng Fan rBindings.Invalidate( SID_ATTR_CHAR_KERNING ); 94512ec161SZheng Fan rBindings.Invalidate( SID_SET_SUPER_SCRIPT ); 95512ec161SZheng Fan rBindings.Invalidate( SID_SET_SUB_SCRIPT ); 96512ec161SZheng Fan rBindings.Invalidate( SID_ATTR_CHAR_STRIKEOUT ); 97512ec161SZheng Fan rBindings.Invalidate( SID_ATTR_CHAR_SHADOWED ); 98cdf0e10cSrcweir } 99cdf0e10cSrcweir 100cdf0e10cSrcweir void lcl_UpdateHyphenator( Outliner& rOutliner, SdrObject* pObj ) 101cdf0e10cSrcweir { 102cdf0e10cSrcweir // use hyphenator only if hyphenation attribute is set 103cdf0e10cSrcweir if ( pObj && ((const SfxBoolItem&)pObj->GetMergedItem(EE_PARA_HYPHENATE)).GetValue() ) { 104cdf0e10cSrcweir com::sun::star::uno::Reference<com::sun::star::linguistic2::XHyphenator> xHyphenator( LinguMgr::GetHyphenator() ); 105cdf0e10cSrcweir rOutliner.SetHyphenator( xHyphenator ); 106cdf0e10cSrcweir } 107cdf0e10cSrcweir } 108cdf0e10cSrcweir 109cdf0e10cSrcweir /************************************************************************* 110cdf0e10cSrcweir |* 111cdf0e10cSrcweir |* Basisklasse fuer Textfunktionen 112cdf0e10cSrcweir |* 113cdf0e10cSrcweir \************************************************************************/ 114cdf0e10cSrcweir 115cdf0e10cSrcweir FuText::FuText(ScTabViewShell* pViewSh, Window* pWin, ScDrawView* pViewP, 116cdf0e10cSrcweir SdrModel* pDoc, SfxRequest& rReq) : 117cdf0e10cSrcweir FuConstruct(pViewSh, pWin, pViewP, pDoc, rReq), 118cdf0e10cSrcweir pTextObj(NULL) 119cdf0e10cSrcweir { 120cdf0e10cSrcweir } 121cdf0e10cSrcweir 122cdf0e10cSrcweir /************************************************************************* 123cdf0e10cSrcweir |* 124cdf0e10cSrcweir |* Destruktor 125cdf0e10cSrcweir |* 126cdf0e10cSrcweir \************************************************************************/ 127cdf0e10cSrcweir 128cdf0e10cSrcweir FuText::~FuText() 129cdf0e10cSrcweir { 130cdf0e10cSrcweir // StopEditMode(); // in Deactivate ! 131cdf0e10cSrcweir } 132cdf0e10cSrcweir 133cdf0e10cSrcweir /************************************************************************* 134cdf0e10cSrcweir |* 135cdf0e10cSrcweir |* MouseButtonDown-event 136cdf0e10cSrcweir |* 137cdf0e10cSrcweir \************************************************************************/ 138cdf0e10cSrcweir 139cdf0e10cSrcweir sal_Bool __EXPORT FuText::MouseButtonDown(const MouseEvent& rMEvt) 140cdf0e10cSrcweir { 141cdf0e10cSrcweir // #95491# remember button state for creation of own MouseEvents 142cdf0e10cSrcweir SetMouseButtonCode(rMEvt.GetButtons()); 143cdf0e10cSrcweir 144cdf0e10cSrcweir if ( pView->MouseButtonDown(rMEvt, pWindow) ) 145cdf0e10cSrcweir return (sal_True); // Event von der SdrView ausgewertet 146cdf0e10cSrcweir 147cdf0e10cSrcweir if ( pView->IsTextEdit() ) 148cdf0e10cSrcweir { 149cdf0e10cSrcweir if( !IsSizingOrMovingNote(rMEvt) ) 150cdf0e10cSrcweir StopEditMode(); // Danebengeklickt, Ende mit Edit 151cdf0e10cSrcweir pView->SetCreateMode(); 152cdf0e10cSrcweir } 153cdf0e10cSrcweir 154cdf0e10cSrcweir aMDPos = pWindow->PixelToLogic( rMEvt.GetPosPixel() ); 155cdf0e10cSrcweir 156cdf0e10cSrcweir if ( rMEvt.IsLeft() ) 157cdf0e10cSrcweir { 158cdf0e10cSrcweir SdrHdl* pHdl = pView->PickHandle(aMDPos); 159cdf0e10cSrcweir 160cdf0e10cSrcweir sal_uLong nHdlNum = pView->GetHdlNum(pHdl); 161cdf0e10cSrcweir 162cdf0e10cSrcweir if (pHdl != NULL) 163cdf0e10cSrcweir { 164cdf0e10cSrcweir if (pView->HasMarkablePoints() && pView->IsPointMarkable(*pHdl)) 165cdf0e10cSrcweir { 166*5f22f2efStruckman sal_Bool bPointMarked=pView->IsPointMarked(pHdl); 167cdf0e10cSrcweir 168cdf0e10cSrcweir if ( rMEvt.IsShift() ) 169cdf0e10cSrcweir { 170cdf0e10cSrcweir if (!bPointMarked) 171cdf0e10cSrcweir { 172cdf0e10cSrcweir pView->MarkPoint(*pHdl); 173cdf0e10cSrcweir } 174cdf0e10cSrcweir else 175cdf0e10cSrcweir { 176cdf0e10cSrcweir pView->UnmarkPoint(*pHdl); 177cdf0e10cSrcweir } 178cdf0e10cSrcweir } 179cdf0e10cSrcweir else 180cdf0e10cSrcweir { 181cdf0e10cSrcweir if (!bPointMarked) 182cdf0e10cSrcweir { 183cdf0e10cSrcweir pView->UnmarkAllPoints(); 184cdf0e10cSrcweir pView->MarkPoint(*pHdl); 185cdf0e10cSrcweir } 186cdf0e10cSrcweir } 187cdf0e10cSrcweir pHdl=pView->GetHdl(nHdlNum); 188cdf0e10cSrcweir } 189cdf0e10cSrcweir } 190cdf0e10cSrcweir 191cdf0e10cSrcweir SdrObject* pObj; 192cdf0e10cSrcweir SdrPageView* pPV; 193cdf0e10cSrcweir 194cdf0e10cSrcweir if ( pHdl != NULL || pView->IsMarkedHit(aMDPos) ) 195cdf0e10cSrcweir { 196cdf0e10cSrcweir if (pHdl == NULL && 197cdf0e10cSrcweir // pView->TakeTextEditObject(aMDPos, pObj, pPV) ) 198cdf0e10cSrcweir pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_PICKTEXTEDIT) ) 199cdf0e10cSrcweir { 200cdf0e10cSrcweir SdrOutliner* pO = MakeOutliner(); 201cdf0e10cSrcweir lcl_UpdateHyphenator( *pO, pObj ); 202cdf0e10cSrcweir 203cdf0e10cSrcweir // vertical flag: 204cdf0e10cSrcweir // deduced from slot ids only if text object has no content 205cdf0e10cSrcweir 206cdf0e10cSrcweir sal_uInt16 nSlotID = aSfxRequest.GetSlot(); 207cdf0e10cSrcweir sal_Bool bVertical = ( nSlotID == SID_DRAW_TEXT_VERTICAL ); 208cdf0e10cSrcweir OutlinerParaObject* pOPO = pObj->GetOutlinerParaObject(); 209cdf0e10cSrcweir if ( pOPO ) 210cdf0e10cSrcweir bVertical = pOPO->IsVertical(); // content wins 211cdf0e10cSrcweir pO->SetVertical( bVertical ); 212cdf0e10cSrcweir 213cdf0e10cSrcweir //!?? ohne uebergebenen Outliner stimmen die Defaults nicht ???!? 214cdf0e10cSrcweir if ( pView->SdrBeginTextEdit(pObj, pPV, pWindow, sal_True, pO) ) 215cdf0e10cSrcweir { 216cdf0e10cSrcweir // EditEngine-UndoManager anmelden 217cdf0e10cSrcweir pViewShell->SetDrawTextUndo( &pO->GetUndoManager() ); 218cdf0e10cSrcweir 219cdf0e10cSrcweir OutlinerView* pOLV = pView->GetTextEditOutlinerView(); 220cdf0e10cSrcweir if ( pOLV->MouseButtonDown(rMEvt) ) 221cdf0e10cSrcweir return (sal_True); // Event an den Outliner 222cdf0e10cSrcweir } 223cdf0e10cSrcweir } 224cdf0e10cSrcweir else 225cdf0e10cSrcweir { 226cdf0e10cSrcweir // disable tail & circular move for caption objects. 227cdf0e10cSrcweir bool bDrag = false; 228cdf0e10cSrcweir const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); 229cdf0e10cSrcweir if( rMarkList.GetMarkCount() == 1 ) 230cdf0e10cSrcweir { 231cdf0e10cSrcweir SdrObject* pMarkedObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj(); 232cdf0e10cSrcweir if( ScDrawLayer::IsNoteCaption( pMarkedObj ) ) 233cdf0e10cSrcweir { 234cdf0e10cSrcweir if(pHdl->GetKind() != HDL_POLY && pHdl->GetKind() != HDL_CIRC) 235cdf0e10cSrcweir bDrag = true; 236cdf0e10cSrcweir } 237cdf0e10cSrcweir else 238cdf0e10cSrcweir bDrag = true; // different object 239cdf0e10cSrcweir } 240cdf0e10cSrcweir else 241cdf0e10cSrcweir bDrag = true; // several objects 242cdf0e10cSrcweir 243cdf0e10cSrcweir if ( bDrag ) 244cdf0e10cSrcweir { 245cdf0e10cSrcweir aDragTimer.Start(); 246cdf0e10cSrcweir pView->BegDragObj(aMDPos, (OutputDevice*) NULL, pHdl); 247cdf0e10cSrcweir } 248cdf0e10cSrcweir } 249cdf0e10cSrcweir } 250cdf0e10cSrcweir else 251cdf0e10cSrcweir { 252cdf0e10cSrcweir sal_Bool bMacro = sal_False; 253cdf0e10cSrcweir 254cdf0e10cSrcweir // if (bMacro && pView->TakeMacroObject(aMDPos,pObj,pPV)) 255cdf0e10cSrcweir if (bMacro && pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_PICKMACRO) ) 256cdf0e10cSrcweir 257cdf0e10cSrcweir { 258cdf0e10cSrcweir pView->BegMacroObj(aMDPos,pObj,pPV,pWindow); 259cdf0e10cSrcweir } 260cdf0e10cSrcweir else 261cdf0e10cSrcweir { 262cdf0e10cSrcweir if (pView->IsEditMode()) 263cdf0e10cSrcweir { 264cdf0e10cSrcweir sal_Bool bPointMode=pView->HasMarkablePoints(); 265cdf0e10cSrcweir 266cdf0e10cSrcweir if (!rMEvt.IsShift()) 267cdf0e10cSrcweir { 268cdf0e10cSrcweir if (bPointMode) 269cdf0e10cSrcweir { 270cdf0e10cSrcweir pView->UnmarkAllPoints(); 271cdf0e10cSrcweir } 272cdf0e10cSrcweir else 273cdf0e10cSrcweir { 274cdf0e10cSrcweir pView->UnmarkAll(); 275cdf0e10cSrcweir } 276cdf0e10cSrcweir 277cdf0e10cSrcweir pView->SetDragMode(SDRDRAG_MOVE); 278cdf0e10cSrcweir SfxBindings& rBindings = pViewShell->GetViewFrame()->GetBindings(); 279cdf0e10cSrcweir rBindings.Invalidate( SID_OBJECT_ROTATE ); 280cdf0e10cSrcweir rBindings.Invalidate( SID_OBJECT_MIRROR ); 281cdf0e10cSrcweir pHdl=pView->GetHdl(nHdlNum); 282cdf0e10cSrcweir } 283cdf0e10cSrcweir 284cdf0e10cSrcweir if ( pView->MarkObj(aMDPos, -2, sal_False, rMEvt.IsMod1()) ) 285cdf0e10cSrcweir { 286cdf0e10cSrcweir aDragTimer.Start(); 287cdf0e10cSrcweir 288cdf0e10cSrcweir pHdl=pView->PickHandle(aMDPos); 289cdf0e10cSrcweir 290cdf0e10cSrcweir if (pHdl!=NULL) 291cdf0e10cSrcweir { 292cdf0e10cSrcweir pView->MarkPoint(*pHdl); 293cdf0e10cSrcweir pHdl=pView->GetHdl(nHdlNum); 294cdf0e10cSrcweir } 295cdf0e10cSrcweir 296cdf0e10cSrcweir pView->BegDragObj(aMDPos, (OutputDevice*) NULL, pHdl); 297cdf0e10cSrcweir } 298cdf0e10cSrcweir else 299cdf0e10cSrcweir { 300cdf0e10cSrcweir if (bPointMode) 301cdf0e10cSrcweir { 302cdf0e10cSrcweir pView->BegMarkPoints(aMDPos); 303cdf0e10cSrcweir } 304cdf0e10cSrcweir else 305cdf0e10cSrcweir { 306cdf0e10cSrcweir pView->BegMarkObj(aMDPos); 307cdf0e10cSrcweir } 308cdf0e10cSrcweir } 309cdf0e10cSrcweir } 310cdf0e10cSrcweir else if (aSfxRequest.GetSlot() == SID_DRAW_NOTEEDIT ) 311cdf0e10cSrcweir { 312cdf0e10cSrcweir // Notizen editieren -> keine neuen Textobjekte erzeugen, 313cdf0e10cSrcweir // stattdessen Textmodus verlassen 314cdf0e10cSrcweir 315cdf0e10cSrcweir pViewShell->GetViewData()->GetDispatcher(). 316cdf0e10cSrcweir Execute(aSfxRequest.GetSlot(), SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); 317cdf0e10cSrcweir } 318cdf0e10cSrcweir else 319cdf0e10cSrcweir { 320cdf0e10cSrcweir /********************************************************** 321cdf0e10cSrcweir * Objekt erzeugen 322cdf0e10cSrcweir **********************************************************/ 323cdf0e10cSrcweir pView->BegCreateObj(aMDPos, (OutputDevice*) NULL); 324cdf0e10cSrcweir } 325cdf0e10cSrcweir } 326cdf0e10cSrcweir } 327cdf0e10cSrcweir } 328cdf0e10cSrcweir 329cdf0e10cSrcweir 330cdf0e10cSrcweir if (!bIsInDragMode) 331cdf0e10cSrcweir { 332cdf0e10cSrcweir pWindow->CaptureMouse(); 333cdf0e10cSrcweir // ForcePointer(&rMEvt); 334cdf0e10cSrcweir lcl_InvalidateAttribs( pViewShell->GetViewFrame()->GetBindings() ); 335cdf0e10cSrcweir } 336cdf0e10cSrcweir 337cdf0e10cSrcweir pViewShell->SetActivePointer(pView->GetPreferedPointer( 338cdf0e10cSrcweir pWindow->PixelToLogic(rMEvt.GetPosPixel()), pWindow )); 339cdf0e10cSrcweir 340cdf0e10cSrcweir // return (bReturn); 341cdf0e10cSrcweir return sal_True; 342cdf0e10cSrcweir } 343cdf0e10cSrcweir 344cdf0e10cSrcweir /************************************************************************* 345cdf0e10cSrcweir |* 346cdf0e10cSrcweir |* MouseMove-event 347cdf0e10cSrcweir |* 348cdf0e10cSrcweir \************************************************************************/ 349cdf0e10cSrcweir 350cdf0e10cSrcweir sal_Bool __EXPORT FuText::MouseMove(const MouseEvent& rMEvt) 351cdf0e10cSrcweir { 352cdf0e10cSrcweir sal_Bool bReturn = sal_False; 353cdf0e10cSrcweir 354cdf0e10cSrcweir // pViewShell->SetActivePointer(aNewPointer); 355cdf0e10cSrcweir 356cdf0e10cSrcweir pViewShell->SetActivePointer(pView->GetPreferedPointer( 357cdf0e10cSrcweir pWindow->PixelToLogic(rMEvt.GetPosPixel()), pWindow )); 358cdf0e10cSrcweir 359cdf0e10cSrcweir if (aDragTimer.IsActive() ) 360cdf0e10cSrcweir { 361cdf0e10cSrcweir Point aOldPixel = pWindow->LogicToPixel( aMDPos ); 362cdf0e10cSrcweir Point aNewPixel = rMEvt.GetPosPixel(); 363cdf0e10cSrcweir if ( Abs( aOldPixel.X() - aNewPixel.X() ) > SC_MAXDRAGMOVE || 364cdf0e10cSrcweir Abs( aOldPixel.Y() - aNewPixel.Y() ) > SC_MAXDRAGMOVE ) 365cdf0e10cSrcweir aDragTimer.Stop(); 366cdf0e10cSrcweir } 367cdf0e10cSrcweir 368cdf0e10cSrcweir if ( pView->MouseMove(rMEvt, pWindow) ) 369cdf0e10cSrcweir return (sal_True); // Event von der SdrView ausgewertet 370cdf0e10cSrcweir 371cdf0e10cSrcweir if ( pView->IsAction() ) 372cdf0e10cSrcweir { 373cdf0e10cSrcweir /* aNewPointer = Pointer(POINTER_TEXT); 374cdf0e10cSrcweir pViewShell->SetActivePointer(aNewPointer); 375cdf0e10cSrcweir */ 376cdf0e10cSrcweir Point aPix(rMEvt.GetPosPixel()); 377cdf0e10cSrcweir Point aPnt(pWindow->PixelToLogic(aPix)); 378cdf0e10cSrcweir 379cdf0e10cSrcweir ForceScroll(aPix); 380cdf0e10cSrcweir pView->MovAction(aPnt); 381cdf0e10cSrcweir } 382cdf0e10cSrcweir 383cdf0e10cSrcweir // ForcePointer(&rMEvt); 384cdf0e10cSrcweir 385cdf0e10cSrcweir return (bReturn); 386cdf0e10cSrcweir } 387cdf0e10cSrcweir 388cdf0e10cSrcweir /************************************************************************* 389cdf0e10cSrcweir |* 390cdf0e10cSrcweir |* MouseButtonUp-event 391cdf0e10cSrcweir |* 392cdf0e10cSrcweir \************************************************************************/ 393cdf0e10cSrcweir 394cdf0e10cSrcweir sal_Bool __EXPORT FuText::MouseButtonUp(const MouseEvent& rMEvt) 395cdf0e10cSrcweir { 396cdf0e10cSrcweir // #95491# remember button state for creation of own MouseEvents 397cdf0e10cSrcweir SetMouseButtonCode(rMEvt.GetButtons()); 398cdf0e10cSrcweir 399cdf0e10cSrcweir sal_Bool bReturn = sal_False; 400cdf0e10cSrcweir 401cdf0e10cSrcweir if (aDragTimer.IsActive() ) 402cdf0e10cSrcweir { 403cdf0e10cSrcweir aDragTimer.Stop(); 404cdf0e10cSrcweir } 405cdf0e10cSrcweir 406cdf0e10cSrcweir lcl_InvalidateAttribs( pViewShell->GetViewFrame()->GetBindings() ); 407cdf0e10cSrcweir 408cdf0e10cSrcweir Point aPnt( pWindow->PixelToLogic( rMEvt.GetPosPixel() ) ); 409cdf0e10cSrcweir 410cdf0e10cSrcweir if ( pView->MouseButtonUp(rMEvt, pWindow) ) 411cdf0e10cSrcweir return (sal_True); // Event von der SdrView ausgewertet 412cdf0e10cSrcweir 413cdf0e10cSrcweir if ( pView->IsDragObj() ) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir pView->EndDragObj( rMEvt.IsShift() ); 416cdf0e10cSrcweir const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); 417cdf0e10cSrcweir if (rMarkList.GetMarkCount() == 1) 418cdf0e10cSrcweir { 419cdf0e10cSrcweir SdrMark* pMark = rMarkList.GetMark(0); 420cdf0e10cSrcweir SdrObject* pObj = pMark->GetMarkedSdrObj(); 421cdf0e10cSrcweir FuPoor* pPoor = pViewShell->GetViewData()->GetView()->GetDrawFuncPtr(); 422cdf0e10cSrcweir FuText* pText = static_cast<FuText*>(pPoor); 423cdf0e10cSrcweir pText->StopDragMode(pObj ); 424cdf0e10cSrcweir } 425cdf0e10cSrcweir pView->ForceMarkedToAnotherPage(); 426cdf0e10cSrcweir } 427cdf0e10cSrcweir else if ( pView->IsCreateObj() ) 428cdf0e10cSrcweir { 429cdf0e10cSrcweir if (rMEvt.IsLeft()) 430cdf0e10cSrcweir { 431cdf0e10cSrcweir pView->EndCreateObj(SDRCREATE_FORCEEND); 432cdf0e10cSrcweir if (aSfxRequest.GetSlot() == SID_DRAW_TEXT_MARQUEE) 433cdf0e10cSrcweir { 434cdf0e10cSrcweir // Lauftext-Objekt erzeugen? 435cdf0e10cSrcweir 436cdf0e10cSrcweir const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); 437cdf0e10cSrcweir if (rMarkList.GetMark(0)) 438cdf0e10cSrcweir { 439cdf0e10cSrcweir SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 440cdf0e10cSrcweir 441cdf0e10cSrcweir // die fuer das Scrollen benoetigten Attribute setzen 442cdf0e10cSrcweir SfxItemSet aItemSet( pDrDoc->GetItemPool(), 443cdf0e10cSrcweir SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST); 444cdf0e10cSrcweir 445cdf0e10cSrcweir aItemSet.Put( SdrTextAutoGrowWidthItem( sal_False ) ); 446cdf0e10cSrcweir aItemSet.Put( SdrTextAutoGrowHeightItem( sal_False ) ); 447cdf0e10cSrcweir aItemSet.Put( SdrTextAniKindItem( SDRTEXTANI_SLIDE ) ); 448cdf0e10cSrcweir aItemSet.Put( SdrTextAniDirectionItem( SDRTEXTANI_LEFT ) ); 449cdf0e10cSrcweir aItemSet.Put( SdrTextAniCountItem( 1 ) ); 450cdf0e10cSrcweir aItemSet.Put( SdrTextAniAmountItem( 451cdf0e10cSrcweir (sal_Int16)pWindow->PixelToLogic(Size(2,1)).Width()) ); 452cdf0e10cSrcweir pObj->SetMergedItemSetAndBroadcast(aItemSet); 453cdf0e10cSrcweir } 454cdf0e10cSrcweir } 455cdf0e10cSrcweir 456cdf0e10cSrcweir // #93382# init object different when vertical writing 457cdf0e10cSrcweir sal_uInt16 nSlotID(aSfxRequest.GetSlot()); 458cdf0e10cSrcweir sal_Bool bVertical = (SID_DRAW_TEXT_VERTICAL == nSlotID); 459cdf0e10cSrcweir if(bVertical) 460cdf0e10cSrcweir { 461cdf0e10cSrcweir const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); 462cdf0e10cSrcweir if(rMarkList.GetMark(0)) 463cdf0e10cSrcweir { 464cdf0e10cSrcweir SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 465cdf0e10cSrcweir if(pObj && pObj->ISA(SdrTextObj)) 466cdf0e10cSrcweir { 467cdf0e10cSrcweir SdrTextObj* pText = (SdrTextObj*)pObj; 468cdf0e10cSrcweir SfxItemSet aSet(pDrDoc->GetItemPool()); 469cdf0e10cSrcweir 470cdf0e10cSrcweir pText->SetVerticalWriting(sal_True); 471cdf0e10cSrcweir 472cdf0e10cSrcweir aSet.Put(SdrTextAutoGrowWidthItem(sal_True)); 473cdf0e10cSrcweir aSet.Put(SdrTextAutoGrowHeightItem(sal_False)); 474cdf0e10cSrcweir aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_TOP)); 475cdf0e10cSrcweir aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT)); 476cdf0e10cSrcweir 477cdf0e10cSrcweir pText->SetMergedItemSet(aSet); 478cdf0e10cSrcweir } 479cdf0e10cSrcweir } 480cdf0e10cSrcweir } 481cdf0e10cSrcweir 482cdf0e10cSrcweir SetInEditMode(); 483cdf0e10cSrcweir 484cdf0e10cSrcweir // Modus verlassen bei einzelnem Klick 485cdf0e10cSrcweir // (-> fuconstr) 486cdf0e10cSrcweir 487cdf0e10cSrcweir if ( !pView->AreObjectsMarked() ) 488cdf0e10cSrcweir { 489cdf0e10cSrcweir pView->MarkObj(aPnt, -2, sal_False, rMEvt.IsMod1()); 490cdf0e10cSrcweir 491cdf0e10cSrcweir SfxDispatcher& rDisp = pViewShell->GetViewData()->GetDispatcher(); 492cdf0e10cSrcweir if ( pView->AreObjectsMarked() ) 493cdf0e10cSrcweir rDisp.Execute(SID_OBJECT_SELECT, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); 494cdf0e10cSrcweir else 495cdf0e10cSrcweir rDisp.Execute(aSfxRequest.GetSlot(), SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); 496cdf0e10cSrcweir } 497cdf0e10cSrcweir } 498cdf0e10cSrcweir } 499cdf0e10cSrcweir else if ( pView->IsAction() ) 500cdf0e10cSrcweir { 501cdf0e10cSrcweir pView->EndAction(); 502cdf0e10cSrcweir } 503cdf0e10cSrcweir else if( !pView->IsAction() ) 504cdf0e10cSrcweir { 505cdf0e10cSrcweir pWindow->ReleaseMouse(); 506cdf0e10cSrcweir 507cdf0e10cSrcweir if ( !pView->AreObjectsMarked() && rMEvt.GetClicks() < 2 ) 508cdf0e10cSrcweir { 509cdf0e10cSrcweir pView->MarkObj(aPnt, -2, sal_False, rMEvt.IsMod1()); 510cdf0e10cSrcweir 511cdf0e10cSrcweir SfxDispatcher& rDisp = pViewShell->GetViewData()->GetDispatcher(); 512cdf0e10cSrcweir if ( pView->AreObjectsMarked() ) 513cdf0e10cSrcweir rDisp.Execute(SID_OBJECT_SELECT, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); 514cdf0e10cSrcweir else 515cdf0e10cSrcweir rDisp.Execute(aSfxRequest.GetSlot(), SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); 516cdf0e10cSrcweir } 517cdf0e10cSrcweir } 518cdf0e10cSrcweir 519cdf0e10cSrcweir return (bReturn); 520cdf0e10cSrcweir } 521cdf0e10cSrcweir 522cdf0e10cSrcweir /************************************************************************* 523cdf0e10cSrcweir |* 524cdf0e10cSrcweir |* Maus-Pointer umschalten 525cdf0e10cSrcweir |* 526cdf0e10cSrcweir \************************************************************************/ 527cdf0e10cSrcweir 528cdf0e10cSrcweir void FuText::ForcePointer(const MouseEvent* /* pMEvt */) 529cdf0e10cSrcweir { 530cdf0e10cSrcweir pViewShell->SetActivePointer( aNewPointer ); 531cdf0e10cSrcweir 532cdf0e10cSrcweir /* 533cdf0e10cSrcweir if ( !pView->IsAction() ) 534cdf0e10cSrcweir { 535cdf0e10cSrcweir Point aPnt(pWindow->PixelToLogic( pWindow->ScreenToOutputPixel( 536cdf0e10cSrcweir Pointer::GetPosPixel() ) ) ); 537cdf0e10cSrcweir SdrHdl* pHdl=pView->HitHandle(aPnt, *pWindow); 538cdf0e10cSrcweir 539cdf0e10cSrcweir if (pHdl!=NULL) 540cdf0e10cSrcweir { 541cdf0e10cSrcweir pViewShell->SetActivePointer(pHdl->GetPointer() ); 542cdf0e10cSrcweir } 543cdf0e10cSrcweir else 544cdf0e10cSrcweir { 545cdf0e10cSrcweir SdrObject* pObj; 546cdf0e10cSrcweir SdrPageView* pPV; 547cdf0e10cSrcweir 548cdf0e10cSrcweir if ( pView->IsMarkedHit(aPnt) ) 549cdf0e10cSrcweir { 550cdf0e10cSrcweir if ( pView->TakeTextEditObject(aPnt, pObj, pPV) ) 551cdf0e10cSrcweir { 552cdf0e10cSrcweir pViewShell->SetActivePointer(Pointer(POINTER_TEXT)); 553cdf0e10cSrcweir } 554cdf0e10cSrcweir else 555cdf0e10cSrcweir { 556cdf0e10cSrcweir pViewShell->SetActivePointer(Pointer(POINTER_MOVE)); 557cdf0e10cSrcweir } 558cdf0e10cSrcweir } 559cdf0e10cSrcweir else 560cdf0e10cSrcweir { 561cdf0e10cSrcweir // if ( pView->TakeMacroObject(aPnt, pObj, pPV) ) 562cdf0e10cSrcweir if ( pView->PickObj(aPnt, pObj, pPV, SDRSEARCH_PICKMACRO) ) 563cdf0e10cSrcweir { 564cdf0e10cSrcweir pViewShell->SetActivePointer( pObj->GetMacroPointer() ); 565cdf0e10cSrcweir } 566cdf0e10cSrcweir else 567cdf0e10cSrcweir { 568cdf0e10cSrcweir pViewShell->SetActivePointer( aNewPointer ); 569cdf0e10cSrcweir } 570cdf0e10cSrcweir } 571cdf0e10cSrcweir } 572cdf0e10cSrcweir } 573cdf0e10cSrcweir */ 574cdf0e10cSrcweir } 575cdf0e10cSrcweir 576cdf0e10cSrcweir 577cdf0e10cSrcweir 578cdf0e10cSrcweir /************************************************************************* 579cdf0e10cSrcweir |* 580cdf0e10cSrcweir |* Tastaturereignisse bearbeiten 581cdf0e10cSrcweir |* 582cdf0e10cSrcweir |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls 583cdf0e10cSrcweir |* FALSE. 584cdf0e10cSrcweir |* 585cdf0e10cSrcweir \************************************************************************/ 586cdf0e10cSrcweir 587cdf0e10cSrcweir sal_Bool __EXPORT FuText::KeyInput(const KeyEvent& rKEvt) 588cdf0e10cSrcweir { 589cdf0e10cSrcweir sal_Bool bReturn = sal_False; 590cdf0e10cSrcweir 591cdf0e10cSrcweir if ( pView->KeyInput(rKEvt, pWindow) ) 592cdf0e10cSrcweir { 593cdf0e10cSrcweir bReturn = sal_True; 594cdf0e10cSrcweir lcl_InvalidateAttribs( pViewShell->GetViewFrame()->GetBindings() ); 595cdf0e10cSrcweir } 596cdf0e10cSrcweir else 597cdf0e10cSrcweir { 598cdf0e10cSrcweir bReturn = FuDraw::KeyInput(rKEvt); 599cdf0e10cSrcweir } 600cdf0e10cSrcweir 601cdf0e10cSrcweir return (bReturn); 602cdf0e10cSrcweir } 603cdf0e10cSrcweir 604cdf0e10cSrcweir 605cdf0e10cSrcweir 606cdf0e10cSrcweir /************************************************************************* 607cdf0e10cSrcweir |* 608cdf0e10cSrcweir |* Function aktivieren 609cdf0e10cSrcweir |* 610cdf0e10cSrcweir \************************************************************************/ 611cdf0e10cSrcweir 612cdf0e10cSrcweir void FuText::Activate() 613cdf0e10cSrcweir { 614cdf0e10cSrcweir pView->SetDragMode(SDRDRAG_MOVE); 615cdf0e10cSrcweir SfxBindings& rBindings = pViewShell->GetViewFrame()->GetBindings(); 616cdf0e10cSrcweir rBindings.Invalidate( SID_OBJECT_ROTATE ); 617cdf0e10cSrcweir rBindings.Invalidate( SID_OBJECT_MIRROR ); 618cdf0e10cSrcweir 619cdf0e10cSrcweir // Sofort in den Edit Mode setzen 620cdf0e10cSrcweir // SetInEditMode(); 621cdf0e10cSrcweir 622cdf0e10cSrcweir // if (!pTextObj) 623cdf0e10cSrcweir { 624cdf0e10cSrcweir /********************************************************************** 625cdf0e10cSrcweir * Kein Textobjekt im EditMode, daher CreateMode setzen 626cdf0e10cSrcweir **********************************************************************/ 627cdf0e10cSrcweir sal_uInt16 nObj = OBJ_TEXT; 628cdf0e10cSrcweir 629cdf0e10cSrcweir /* sal_uInt16 nIdent; 630cdf0e10cSrcweir sal_uInt32 nInvent; 631cdf0e10cSrcweir pView->TakeCurrentObj(nIdent, nInvent); 632cdf0e10cSrcweir */ 633cdf0e10cSrcweir pView->SetCurrentObj(nObj); 634cdf0e10cSrcweir 635cdf0e10cSrcweir pView->SetCreateMode(); 636cdf0e10cSrcweir } 637cdf0e10cSrcweir 638cdf0e10cSrcweir aNewPointer = Pointer(POINTER_TEXT); 639cdf0e10cSrcweir // aNewPointer = Pointer(POINTER_CROSS); //! ??? 640cdf0e10cSrcweir 641cdf0e10cSrcweir aOldPointer = pWindow->GetPointer(); 642cdf0e10cSrcweir pViewShell->SetActivePointer( aNewPointer ); 643cdf0e10cSrcweir 644cdf0e10cSrcweir FuConstruct::Activate(); 645cdf0e10cSrcweir } 646cdf0e10cSrcweir 647cdf0e10cSrcweir 648cdf0e10cSrcweir /************************************************************************* 649cdf0e10cSrcweir |* 650cdf0e10cSrcweir |* Function deaktivieren 651cdf0e10cSrcweir |* 652cdf0e10cSrcweir \************************************************************************/ 653cdf0e10cSrcweir 654cdf0e10cSrcweir void FuText::Deactivate() 655cdf0e10cSrcweir { 656cdf0e10cSrcweir FuConstruct::Deactivate(); 657cdf0e10cSrcweir pViewShell->SetActivePointer( aOldPointer ); 658cdf0e10cSrcweir StopEditMode(); 659cdf0e10cSrcweir } 660cdf0e10cSrcweir 661cdf0e10cSrcweir 662cdf0e10cSrcweir /************************************************************************* 663cdf0e10cSrcweir |* 664cdf0e10cSrcweir |* Selektion hat sich geaendert 665cdf0e10cSrcweir |* 666cdf0e10cSrcweir \************************************************************************/ 667cdf0e10cSrcweir 668cdf0e10cSrcweir void FuText::SelectionHasChanged() 669cdf0e10cSrcweir { 670cdf0e10cSrcweir pView->SetDragMode(SDRDRAG_MOVE); 671cdf0e10cSrcweir SfxBindings& rBindings = pViewShell->GetViewFrame()->GetBindings(); 672cdf0e10cSrcweir rBindings.Invalidate( SID_OBJECT_ROTATE ); 673cdf0e10cSrcweir rBindings.Invalidate( SID_OBJECT_MIRROR ); 674cdf0e10cSrcweir 675cdf0e10cSrcweir pTextObj = NULL; 676cdf0e10cSrcweir 677cdf0e10cSrcweir if ( pView->AreObjectsMarked() ) 678cdf0e10cSrcweir { 679cdf0e10cSrcweir const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); 680cdf0e10cSrcweir 681cdf0e10cSrcweir if (rMarkList.GetMarkCount() == 1) 682cdf0e10cSrcweir { 683cdf0e10cSrcweir SdrMark* pMark = rMarkList.GetMark(0); 684cdf0e10cSrcweir SdrObject* pObj = pMark->GetMarkedSdrObj(); 685cdf0e10cSrcweir 686cdf0e10cSrcweir sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier(); 687cdf0e10cSrcweir 688cdf0e10cSrcweir if (nSdrObjKind == OBJ_TEXT || 689cdf0e10cSrcweir nSdrObjKind == OBJ_TITLETEXT || 690cdf0e10cSrcweir nSdrObjKind == OBJ_OUTLINETEXT /* || 691cdf0e10cSrcweir pObj->ISA(SdrTextObj) */ ) 692cdf0e10cSrcweir { 693cdf0e10cSrcweir pTextObj = (SdrTextObj*) pObj; 694cdf0e10cSrcweir } 695cdf0e10cSrcweir } 696cdf0e10cSrcweir } 697cdf0e10cSrcweir 698cdf0e10cSrcweir if (!pTextObj) 699cdf0e10cSrcweir { 700cdf0e10cSrcweir /********************************************************************** 701cdf0e10cSrcweir * Kein Textobjekt im EditMode, daher CreateMode setzen 702cdf0e10cSrcweir **********************************************************************/ 703cdf0e10cSrcweir sal_uInt16 nObj = OBJ_TEXT; 704cdf0e10cSrcweir sal_uInt16 nIdent; 705cdf0e10cSrcweir sal_uInt32 nInvent; 706cdf0e10cSrcweir pView->TakeCurrentObj(nIdent, nInvent); 707cdf0e10cSrcweir 708cdf0e10cSrcweir // if (! pView->IsEditMode() ) 709cdf0e10cSrcweir // { 710cdf0e10cSrcweir // if (nIdent == OBJ_TEXT) 711cdf0e10cSrcweir // { 712cdf0e10cSrcweir // nObj = OBJ_TEXT; 713cdf0e10cSrcweir // } 714cdf0e10cSrcweir // else if (nIdent == OBJ_OUTLINETEXT) 715cdf0e10cSrcweir // { 716cdf0e10cSrcweir // nObj = OBJ_OUTLINETEXT; 717cdf0e10cSrcweir // } 718cdf0e10cSrcweir // else if (nIdent == OBJ_TITLETEXT) 719cdf0e10cSrcweir // { 720cdf0e10cSrcweir // nObj = OBJ_TITLETEXT; 721cdf0e10cSrcweir // } 722cdf0e10cSrcweir // } 723cdf0e10cSrcweir 724cdf0e10cSrcweir pView->SetCurrentObj(nObj); 725cdf0e10cSrcweir 726cdf0e10cSrcweir pView->SetCreateMode(); 727cdf0e10cSrcweir } 728cdf0e10cSrcweir } 729cdf0e10cSrcweir 730cdf0e10cSrcweir /************************************************************************* 731cdf0e10cSrcweir |* 732cdf0e10cSrcweir |* Objekt in Edit-Mode setzen 733cdf0e10cSrcweir |* 734cdf0e10cSrcweir \************************************************************************/ 735cdf0e10cSrcweir 736cdf0e10cSrcweir void FuText::SetInEditMode(SdrObject* pObj, const Point* pMousePixel, 737cdf0e10cSrcweir sal_Bool bCursorToEnd, const KeyEvent* pInitialKey) 738cdf0e10cSrcweir { 739cdf0e10cSrcweir /* It is possible to pass a special (unselected) object in pObj, e.g. the 740cdf0e10cSrcweir caption object of a cell note. If pObj is 0, then the selected object 741cdf0e10cSrcweir is used. The layer will be relocked in FuText::StopEditMode(). */ 742cdf0e10cSrcweir if ( pObj && (pObj->GetLayer() == SC_LAYER_INTERN) ) 743cdf0e10cSrcweir pView->UnlockInternalLayer(); 744cdf0e10cSrcweir 745cdf0e10cSrcweir if ( !pObj && pView->AreObjectsMarked() ) 746cdf0e10cSrcweir { 747cdf0e10cSrcweir const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); 748cdf0e10cSrcweir if (rMarkList.GetMarkCount() == 1) 749cdf0e10cSrcweir { 750cdf0e10cSrcweir SdrMark* pMark = rMarkList.GetMark(0); 751cdf0e10cSrcweir pObj = pMark->GetMarkedSdrObj(); 752cdf0e10cSrcweir } 753cdf0e10cSrcweir } 754cdf0e10cSrcweir 755cdf0e10cSrcweir pTextObj = NULL; 756cdf0e10cSrcweir 757cdf0e10cSrcweir if ( pObj ) 758cdf0e10cSrcweir { 759cdf0e10cSrcweir sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier(); 760cdf0e10cSrcweir 761cdf0e10cSrcweir if (nSdrObjKind == OBJ_TEXT || 762cdf0e10cSrcweir nSdrObjKind == OBJ_TITLETEXT || 763cdf0e10cSrcweir nSdrObjKind == OBJ_OUTLINETEXT || 764cdf0e10cSrcweir pObj->ISA(SdrTextObj)) 765cdf0e10cSrcweir { 766cdf0e10cSrcweir SdrPageView* pPV = pView->GetSdrPageView(); 767cdf0e10cSrcweir Rectangle aRect = pObj->GetLogicRect(); 768cdf0e10cSrcweir Point aPnt = aRect.Center(); 769cdf0e10cSrcweir 770cdf0e10cSrcweir if ( pObj->HasTextEdit() ) 771cdf0e10cSrcweir { 772cdf0e10cSrcweir SdrOutliner* pO = MakeOutliner(); 773cdf0e10cSrcweir lcl_UpdateHyphenator( *pO, pObj ); 774cdf0e10cSrcweir 775cdf0e10cSrcweir // vertical flag: 776cdf0e10cSrcweir // deduced from slot ids only if text object has no content 777cdf0e10cSrcweir 778cdf0e10cSrcweir sal_uInt16 nSlotID = aSfxRequest.GetSlot(); 779cdf0e10cSrcweir sal_Bool bVertical = ( nSlotID == SID_DRAW_TEXT_VERTICAL ); 780cdf0e10cSrcweir OutlinerParaObject* pOPO = pObj->GetOutlinerParaObject(); 781cdf0e10cSrcweir if ( pOPO ) 782cdf0e10cSrcweir bVertical = pOPO->IsVertical(); // content wins 783cdf0e10cSrcweir pO->SetVertical( bVertical ); 784cdf0e10cSrcweir 785cdf0e10cSrcweir //!?? ohne uebergebenen Outliner stimmen die Defaults nicht ???!? 786cdf0e10cSrcweir if ( pView->SdrBeginTextEdit(pObj, pPV, pWindow, sal_True, pO) ) 787cdf0e10cSrcweir { 788cdf0e10cSrcweir // EditEngine-UndoManager anmelden 789cdf0e10cSrcweir pViewShell->SetDrawTextUndo( &pO->GetUndoManager() ); 790cdf0e10cSrcweir 791cdf0e10cSrcweir pTextObj = (SdrTextObj*) pObj; 792cdf0e10cSrcweir pView->SetEditMode(); 793cdf0e10cSrcweir 794cdf0e10cSrcweir // set text cursor to click position or to end, 795cdf0e10cSrcweir // pass initial key event to outliner view 796cdf0e10cSrcweir if ( pMousePixel || bCursorToEnd || pInitialKey ) 797cdf0e10cSrcweir { 798cdf0e10cSrcweir OutlinerView* pOLV = pView->GetTextEditOutlinerView(); 799cdf0e10cSrcweir if (pOLV) 800cdf0e10cSrcweir { 801cdf0e10cSrcweir if ( pMousePixel ) 802cdf0e10cSrcweir { 803cdf0e10cSrcweir MouseEvent aEditEvt( *pMousePixel, 1, MOUSE_SYNTHETIC, MOUSE_LEFT, 0 ); 804cdf0e10cSrcweir pOLV->MouseButtonDown(aEditEvt); 805cdf0e10cSrcweir pOLV->MouseButtonUp(aEditEvt); 806cdf0e10cSrcweir } 807cdf0e10cSrcweir else if ( bCursorToEnd ) 808cdf0e10cSrcweir { 809cdf0e10cSrcweir ESelection aNewSelection(EE_PARA_NOT_FOUND, EE_INDEX_NOT_FOUND, EE_PARA_NOT_FOUND, EE_INDEX_NOT_FOUND); 810cdf0e10cSrcweir pOLV->SetSelection(aNewSelection); 811cdf0e10cSrcweir } 812cdf0e10cSrcweir 813cdf0e10cSrcweir if ( pInitialKey ) 814cdf0e10cSrcweir pOLV->PostKeyEvent( *pInitialKey ); 815cdf0e10cSrcweir } 816cdf0e10cSrcweir } 817cdf0e10cSrcweir } 818cdf0e10cSrcweir } 819cdf0e10cSrcweir } 820cdf0e10cSrcweir } 821cdf0e10cSrcweir } 822cdf0e10cSrcweir 823cdf0e10cSrcweir // #98185# Create default drawing objects via keyboard 824cdf0e10cSrcweir SdrObject* FuText::CreateDefaultObject(const sal_uInt16 nID, const Rectangle& rRectangle) 825cdf0e10cSrcweir { 826cdf0e10cSrcweir // case SID_DRAW_TEXT: 827cdf0e10cSrcweir // case SID_DRAW_TEXT_VERTICAL: 828cdf0e10cSrcweir // case SID_DRAW_TEXT_MARQUEE: 829cdf0e10cSrcweir // case SID_DRAW_NOTEEDIT: 830cdf0e10cSrcweir 831cdf0e10cSrcweir SdrObject* pObj = SdrObjFactory::MakeNewObject( 832cdf0e10cSrcweir pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(), 833cdf0e10cSrcweir 0L, pDrDoc); 834cdf0e10cSrcweir 835cdf0e10cSrcweir if(pObj) 836cdf0e10cSrcweir { 837cdf0e10cSrcweir if(pObj->ISA(SdrTextObj)) 838cdf0e10cSrcweir { 839cdf0e10cSrcweir SdrTextObj* pText = (SdrTextObj*)pObj; 840cdf0e10cSrcweir pText->SetLogicRect(rRectangle); 841cdf0e10cSrcweir 842cdf0e10cSrcweir // #105815# don't set default text, start edit mode instead 843cdf0e10cSrcweir // String aText(ScResId(STR_CAPTION_DEFAULT_TEXT)); 844cdf0e10cSrcweir // pText->SetText(aText); 845cdf0e10cSrcweir 846cdf0e10cSrcweir sal_Bool bVertical = (SID_DRAW_TEXT_VERTICAL == nID); 847cdf0e10cSrcweir sal_Bool bMarquee = (SID_DRAW_TEXT_MARQUEE == nID); 848cdf0e10cSrcweir 849cdf0e10cSrcweir pText->SetVerticalWriting(bVertical); 850cdf0e10cSrcweir 851cdf0e10cSrcweir if(bVertical) 852cdf0e10cSrcweir { 853cdf0e10cSrcweir SfxItemSet aSet(pDrDoc->GetItemPool()); 854cdf0e10cSrcweir 855cdf0e10cSrcweir aSet.Put(SdrTextAutoGrowWidthItem(sal_True)); 856cdf0e10cSrcweir aSet.Put(SdrTextAutoGrowHeightItem(sal_False)); 857cdf0e10cSrcweir aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_TOP)); 858cdf0e10cSrcweir aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT)); 859cdf0e10cSrcweir 860cdf0e10cSrcweir pText->SetMergedItemSet(aSet); 861cdf0e10cSrcweir } 862cdf0e10cSrcweir 863cdf0e10cSrcweir if(bMarquee) 864cdf0e10cSrcweir { 865cdf0e10cSrcweir SfxItemSet aSet(pDrDoc->GetItemPool(), SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST); 866cdf0e10cSrcweir 867cdf0e10cSrcweir aSet.Put( SdrTextAutoGrowWidthItem( sal_False ) ); 868cdf0e10cSrcweir aSet.Put( SdrTextAutoGrowHeightItem( sal_False ) ); 869cdf0e10cSrcweir aSet.Put( SdrTextAniKindItem( SDRTEXTANI_SLIDE ) ); 870cdf0e10cSrcweir aSet.Put( SdrTextAniDirectionItem( SDRTEXTANI_LEFT ) ); 871cdf0e10cSrcweir aSet.Put( SdrTextAniCountItem( 1 ) ); 872cdf0e10cSrcweir aSet.Put( SdrTextAniAmountItem( (sal_Int16)pWindow->PixelToLogic(Size(2,1)).Width()) ); 873cdf0e10cSrcweir 874cdf0e10cSrcweir pObj->SetMergedItemSetAndBroadcast(aSet); 875cdf0e10cSrcweir } 876cdf0e10cSrcweir 877cdf0e10cSrcweir SetInEditMode( pObj ); // #105815# start edit mode 878cdf0e10cSrcweir } 879cdf0e10cSrcweir else 880cdf0e10cSrcweir { 881cdf0e10cSrcweir DBG_ERROR("Object is NO text object"); 882cdf0e10cSrcweir } 883cdf0e10cSrcweir } 884cdf0e10cSrcweir 885cdf0e10cSrcweir return pObj; 886cdf0e10cSrcweir } 887cdf0e10cSrcweir 888