LibreOffice Module sc (master)  1
drtxtob.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <comphelper/string.hxx>
21 #include <scitems.hxx>
22 
23 #include <editeng/adjustitem.hxx>
24 #include <svx/clipfmtitem.hxx>
25 #include <editeng/contouritem.hxx>
27 #include <editeng/eeitem.hxx>
28 #include <editeng/editeng.hxx>
29 #include <editeng/editview.hxx>
31 #include <editeng/flditem.hxx>
32 #include <editeng/flstitem.hxx>
33 #include <editeng/fontitem.hxx>
34 #include <editeng/frmdiritem.hxx>
35 #include <editeng/lrspitem.hxx>
36 #include <editeng/lspcitem.hxx>
37 #include <editeng/ulspitem.hxx>
39 #include <svx/hlnkitem.hxx>
40 #include <svx/svdoutl.hxx>
41 #include <svx/sdooitm.hxx>
42 #include <editeng/postitem.hxx>
44 #include <editeng/shdditem.hxx>
45 #include <editeng/udlnitem.hxx>
46 #include <editeng/wghtitem.hxx>
48 #include <sfx2/dispatch.hxx>
49 #include <sfx2/objface.hxx>
50 #include <sfx2/objsh.hxx>
51 #include <sfx2/request.hxx>
52 #include <sfx2/viewfrm.hxx>
53 #include <svtools/cliplistener.hxx>
54 #include <vcl/transfer.hxx>
55 #include <svl/stritem.hxx>
56 #include <svl/whiter.hxx>
57 #include <svl/languageoptions.hxx>
58 
59 #include <svx/svxdlg.hxx>
60 #include <vcl/EnumContext.hxx>
61 #include <vcl/unohelp2.hxx>
62 
63 #include <sc.hrc>
64 #include <globstr.hrc>
65 #include <scresid.hxx>
66 #include <scmod.hxx>
67 #include <drtxtob.hxx>
68 #include <viewdata.hxx>
69 #include <document.hxx>
70 #include <drawview.hxx>
71 #include <viewutil.hxx>
72 #include <tabvwsh.hxx>
73 #include <gridwin.hxx>
74 
75 #define ShellClass_ScDrawTextObjectBar
76 #include <scslots.hxx>
77 
78 using namespace ::com::sun::star;
79 
81 
82 void ScDrawTextObjectBar::InitInterface_Impl()
83 {
84  GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT,
85  SfxVisibilityFlags::Standard | SfxVisibilityFlags::Server,
86  ToolbarId::Text_Toolbox_Sc);
87 
88  GetStaticInterface()->RegisterPopupMenu("drawtext");
89 
90  GetStaticInterface()->RegisterChildWindow(ScGetFontWorkId());
91 }
92 
93 
94 // disable not wanted accelerators
95 
97 {
98  SfxWhichIter aIter(rSet);
99  sal_uInt16 nWhich = aIter.FirstWhich();
100 
101  while (nWhich)
102  {
103  rSet.DisableItem( nWhich );
104  nWhich = aIter.NextWhich();
105  }
106 }
107 
109  SfxShell(rData.GetViewShell()),
110  mrViewData(rData),
111  bPastePossible(false)
112 {
114 
115  // At the switching-over the UndoManager is changed to edit mode
117  SetUndoManager( pMgr );
119  {
120  pMgr->SetMaxUndoActionCount( 0 );
121  }
122 
123  SetName("DrawText");
125 }
126 
128 {
129  if ( mxClipEvtLstnr.is() )
130  {
131  mxClipEvtLstnr->RemoveListener( mrViewData.GetActiveWin() );
132 
133  // The listener may just now be waiting for the SolarMutex and call the link
134  // afterwards, in spite of RemoveListener. So the link has to be reset, too.
135  mxClipEvtLstnr->ClearCallbackLink();
136  }
137 }
138 
139 // Functions
140 
142 {
144  OutlinerView* pOutView = pView->GetTextEditOutlinerView();
145  Outliner* pOutliner = pView->GetTextEditOutliner();
146 
147  if (!pOutView || !pOutliner)
148  {
149  ExecuteGlobal( rReq ); // on whole objects
150  return;
151  }
152 
153  const SfxItemSet* pReqArgs = rReq.GetArgs();
154  sal_uInt16 nSlot = rReq.GetSlot();
155  switch ( nSlot )
156  {
157  case SID_COPY:
158  pOutView->Copy();
159  break;
160 
161  case SID_CUT:
162  pOutView->Cut();
163  break;
164 
165  case SID_PASTE:
166  pOutView->PasteSpecial();
167  break;
168 
169  case SID_CLIPBOARD_FORMAT_ITEMS:
170  {
171  SotClipboardFormatId nFormat = SotClipboardFormatId::NONE;
172  const SfxPoolItem* pItem;
173  if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SfxItemState::SET )
174  if (auto pIntItem = dynamic_cast<const SfxUInt32Item*>( pItem))
175  nFormat = static_cast<SotClipboardFormatId>(pIntItem->GetValue());
176 
177  if ( nFormat != SotClipboardFormatId::NONE )
178  {
179  if (nFormat == SotClipboardFormatId::STRING)
180  pOutView->Paste();
181  else
182  pOutView->PasteSpecial();
183  }
184  }
185  break;
186 
187  case SID_PASTE_SPECIAL:
188  ExecutePasteContents( rReq );
189  break;
190 
191  case SID_PASTE_UNFORMATTED:
192  pOutView->Paste();
193  break;
194 
195  case SID_SELECTALL:
196  {
197  sal_Int32 nCount = pOutliner->GetParagraphCount();
198  ESelection aSel( 0,0,nCount,0 );
199  pOutView->SetSelection( aSel );
200  }
201  break;
202 
203  case SID_CHARMAP:
204  {
205  const SvxFontItem& rItem = pOutView->GetAttribs().Get(EE_CHAR_FONTINFO);
206 
207  OUString aString;
208  std::shared_ptr<SvxFontItem> aNewItem(std::make_shared<SvxFontItem>(EE_CHAR_FONTINFO));
209 
210  const SfxItemSet *pArgs = rReq.GetArgs();
211  const SfxPoolItem* pItem = nullptr;
212  if( pArgs )
213  pArgs->GetItemState(GetPool().GetWhich(SID_CHARMAP), false, &pItem);
214 
215  if ( pItem )
216  {
217  aString = static_cast<const SfxStringItem*>(pItem)->GetValue();
218  const SfxPoolItem* pFtItem = nullptr;
219  pArgs->GetItemState( GetPool().GetWhich(SID_ATTR_SPECIALCHAR), false, &pFtItem);
220  const SfxStringItem* pFontItem = dynamic_cast<const SfxStringItem*>( pFtItem );
221  if ( pFontItem )
222  {
223  const OUString& aFontName(pFontItem->GetValue());
224  vcl::Font aFont(aFontName, Size(1,1)); // Size only because of CTOR
225  aNewItem = std::make_shared<SvxFontItem>(
226  aFont.GetFamilyType(), aFont.GetFamilyName(),
227  aFont.GetStyleName(), aFont.GetPitch(),
228  aFont.GetCharSet(), ATTR_FONT);
229  }
230  else
231  {
232  aNewItem.reset(rItem.Clone());
233  }
234  }
235  else
237 
238  if ( !aString.isEmpty() )
239  {
240  SfxItemSet aSet( pOutliner->GetEmptyItemSet() );
241  // tdf#125054
242  // checked against original, indeed aNewItem looks as if it can have
243  // either WhichID EE_CHAR_FONTINFO or ATTR_FONT when it was reset
244  // above, original uses '= SvxFontItem(..., ATTR_FONT).
245  // BUT beware: the operator=() did not copy the WhichID when resetting,
246  // so it indeed has WhichID of EE_CHAR_FONTINFO despite copying an Item
247  // that was constructed using ATTR_FONT as WhichID (!)
248  aSet.Put( *aNewItem, EE_CHAR_FONTINFO );
249 
250  // If nothing is selected, then SetAttribs of the View selects a word
251  pOutView->GetOutliner()->QuickSetAttribs( aSet, pOutView->GetSelection() );
252  pOutView->InsertText(aString);
253  }
254 
255  Invalidate( SID_ATTR_CHAR_FONT );
256  }
257  break;
258 
259  case SID_HYPERLINK_SETLINK:
260  if( pReqArgs )
261  {
262  const SfxPoolItem* pItem;
263  if ( pReqArgs->GetItemState( SID_HYPERLINK_SETLINK, true, &pItem ) == SfxItemState::SET )
264  {
265  const SvxHyperlinkItem* pHyper = static_cast<const SvxHyperlinkItem*>(pItem);
266  const OUString& rName = pHyper->GetName();
267  const OUString& rURL = pHyper->GetURL();
268  const OUString& rTarget = pHyper->GetTargetFrame();
270 
271  bool bDone = false;
272  if (eMode == HLINK_DEFAULT || eMode == HLINK_FIELD)
273  {
274  pOutView->SelectFieldAtCursor();
275 
276  // insert new field
277  SvxURLField aURLField( rURL, rName, SvxURLFormat::Repr );
278  aURLField.SetTargetFrame( rTarget );
279  SvxFieldItem aURLItem( aURLField, EE_FEATURE_FIELD );
280  pOutView->InsertField( aURLItem );
281 
282  bDone = true;
283  }
284 
285  if (!bDone)
286  ExecuteGlobal( rReq ); // normal at View
287 
288  // If "text" is received by InsertURL of ViewShell, then the DrawShell is turned off !!!
289  }
290  }
291  break;
292 
293  case SID_OPEN_HYPERLINK:
294  if (const SvxFieldData* pField = pOutView->GetFieldAtCursor())
295  {
296  if (const SvxURLField* pURLField = dynamic_cast<const SvxURLField*>(pField))
297  {
298  ScGlobal::OpenURL(pURLField->GetURL(), pURLField->GetTargetFrame(), true);
299  }
300  }
301  break;
302 
303  case SID_EDIT_HYPERLINK:
304  {
305  // Ensure the field is selected first
306  pOutView->SelectFieldAtCursor();
307  mrViewData.GetViewShell()->GetViewFrame()->GetDispatcher()->Execute(SID_HYPERLINK_DIALOG);
308  }
309  break;
310 
311  case SID_COPY_HYPERLINK_LOCATION:
312  {
313  const SvxFieldData* pField = pOutView->GetFieldAtCursor();
314  if (const SvxURLField* pURLField = dynamic_cast<const SvxURLField*>(pField))
315  {
316  uno::Reference<datatransfer::clipboard::XClipboard> xClipboard
317  = pOutView->GetWindow()->GetClipboard();
318  vcl::unohelper::TextDataObject::CopyStringTo(pURLField->GetURL(), xClipboard);
319  }
320  }
321  break;
322 
323  case SID_REMOVE_HYPERLINK:
324  {
325  // Ensure the field is selected first
327  }
328  break;
329 
330  case SID_ENABLE_HYPHENATION:
331  case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
332  case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
333  pView->ScEndTextEdit(); // end text edit before switching direction
334  ExecuteGlobal( rReq );
335  // restore consistent state between shells and functions:
336  mrViewData.GetDispatcher().Execute(SID_OBJECT_SELECT, SfxCallMode::SLOT | SfxCallMode::RECORD);
337  break;
338 
339  case SID_THES:
340  {
341  OUString aReplaceText;
342  const SfxStringItem* pItem2 = rReq.GetArg<SfxStringItem>(SID_THES);
343  if (pItem2)
344  aReplaceText = pItem2->GetValue();
345  if (!aReplaceText.isEmpty())
346  ReplaceTextWithSynonym( pOutView->GetEditView(), aReplaceText );
347  }
348  break;
349 
350  case SID_THESAURUS:
351  {
352  pOutView->StartThesaurus(rReq.GetFrameWeld());
353  }
354  break;
355  }
356 }
357 
359 {
361  bool bHasFontWork = pViewFrm->HasChildWindow(SID_FONTWORK);
362  bool bDisableFontWork = false;
363 
364  if (IsNoteEdit())
365  {
366  // #i21255# notes now support rich text formatting (#i74140# but not fontwork)
367  bDisableFontWork = true;
368  }
369 
370  if ( bDisableFontWork )
371  rSet.DisableItem( SID_FONTWORK );
372  else
373  rSet.Put(SfxBoolItem(SID_FONTWORK, bHasFontWork));
374 
375  if ( rSet.GetItemState( SID_HYPERLINK_GETLINK ) != SfxItemState::UNKNOWN )
376  {
377  SvxHyperlinkItem aHLinkItem;
378  SdrView* pView = mrViewData.GetScDrawView();
379  OutlinerView* pOutView = pView->GetTextEditOutlinerView();
380  if ( pOutView )
381  {
382  bool bField = false;
383  const SvxFieldData* pField = pOutView->GetFieldAtCursor();
384  if (const SvxURLField* pURLField = dynamic_cast<const SvxURLField*>(pField))
385  {
386  aHLinkItem.SetName( pURLField->GetRepresentation() );
387  aHLinkItem.SetURL( pURLField->GetURL() );
388  aHLinkItem.SetTargetFrame( pURLField->GetTargetFrame() );
389  bField = true;
390  }
391 
392  if (!bField)
393  {
394  // use selected text as name for urls
395  OUString sReturn = pOutView->GetSelected();
396  sal_Int32 nLen = std::min<sal_Int32>(sReturn.getLength(), 255);
397  sReturn = sReturn.copy(0, nLen);
398  aHLinkItem.SetName(comphelper::string::stripEnd(sReturn, ' '));
399  }
400  }
401  rSet.Put(aHLinkItem);
402  }
403 
404  if (rSet.GetItemState(SID_OPEN_HYPERLINK) != SfxItemState::UNKNOWN
405  || rSet.GetItemState(SID_EDIT_HYPERLINK) != SfxItemState::UNKNOWN
406  || rSet.GetItemState(SID_COPY_HYPERLINK_LOCATION) != SfxItemState::UNKNOWN
407  || rSet.GetItemState(SID_REMOVE_HYPERLINK) != SfxItemState::UNKNOWN)
408  {
409  SdrView* pView = mrViewData.GetScDrawView();
411  {
412  rSet.DisableItem( SID_OPEN_HYPERLINK );
413  rSet.DisableItem( SID_EDIT_HYPERLINK );
414  rSet.DisableItem( SID_COPY_HYPERLINK_LOCATION );
415  rSet.DisableItem( SID_REMOVE_HYPERLINK );
416  }
417  }
418 
419  if( rSet.GetItemState( SID_TRANSLITERATE_HALFWIDTH ) != SfxItemState::UNKNOWN )
420  ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_HALFWIDTH );
421  if( rSet.GetItemState( SID_TRANSLITERATE_FULLWIDTH ) != SfxItemState::UNKNOWN )
422  ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_FULLWIDTH );
423  if( rSet.GetItemState( SID_TRANSLITERATE_HIRAGANA ) != SfxItemState::UNKNOWN )
424  ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_HIRAGANA );
425  if( rSet.GetItemState( SID_TRANSLITERATE_KATAKANA ) != SfxItemState::UNKNOWN )
426  ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_KATAKANA );
427 
428  if ( rSet.GetItemState( SID_ENABLE_HYPHENATION ) != SfxItemState::UNKNOWN )
429  {
430  SdrView* pView = mrViewData.GetScDrawView();
431  SfxItemSet aAttrs( pView->GetModel()->GetItemPool() );
432  pView->GetAttributes( aAttrs );
433  if( aAttrs.GetItemState( EE_PARA_HYPHENATE ) >= SfxItemState::DEFAULT )
434  {
435  bool bValue = aAttrs.Get( EE_PARA_HYPHENATE ).GetValue();
436  rSet.Put( SfxBoolItem( SID_ENABLE_HYPHENATION, bValue ) );
437  }
438  }
439 
440  if ( rSet.GetItemState( SID_THES ) != SfxItemState::UNKNOWN ||
441  rSet.GetItemState( SID_THESAURUS ) != SfxItemState::UNKNOWN )
442  {
443  SdrView * pView = mrViewData.GetScDrawView();
444  OutlinerView* pOutView = pView->GetTextEditOutlinerView();
445 
446  OUString aStatusVal;
447  LanguageType nLang = LANGUAGE_NONE;
448  bool bIsLookUpWord = false;
449  if ( pOutView )
450  {
451  EditView& rEditView = pOutView->GetEditView();
452  bIsLookUpWord = GetStatusValueForThesaurusFromContext( aStatusVal, nLang, rEditView );
453  }
454  rSet.Put( SfxStringItem( SID_THES, aStatusVal ) );
455 
456  // disable thesaurus main menu and context menu entry if there is nothing to look up
457  bool bCanDoThesaurus = ScModule::HasThesaurusLanguage( nLang );
458  if (!bIsLookUpWord || !bCanDoThesaurus)
459  rSet.DisableItem( SID_THES );
460  if (!bCanDoThesaurus)
461  rSet.DisableItem( SID_THESAURUS );
462  }
463 
464  if (GetObjectShell()->isContentExtractionLocked())
465  {
466  rSet.DisableItem(SID_COPY);
467  rSet.DisableItem(SID_CUT);
468  }
469 }
470 
471 IMPL_LINK( ScDrawTextObjectBar, ClipboardChanged, TransferableDataHelper*, pDataHelper, void )
472 {
473  bPastePossible = ( pDataHelper->HasFormat( SotClipboardFormatId::STRING ) || pDataHelper->HasFormat( SotClipboardFormatId::RTF )
474  || pDataHelper->HasFormat( SotClipboardFormatId::RICHTEXT ) );
475 
476  SfxBindings& rBindings = mrViewData.GetBindings();
477  rBindings.Invalidate( SID_PASTE );
478  rBindings.Invalidate( SID_PASTE_SPECIAL );
479  rBindings.Invalidate( SID_PASTE_UNFORMATTED );
480  rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS );
481 }
482 
484 {
485  SdrView* pView = mrViewData.GetScDrawView();
486  if ( !pView->GetTextEditOutlinerView() )
487  {
488  GetGlobalClipState( rSet );
489  return;
490  }
491 
492  if ( !mxClipEvtLstnr.is() )
493  {
494  // create listener
495  mxClipEvtLstnr = new TransferableClipboardListener( LINK( this, ScDrawTextObjectBar, ClipboardChanged ) );
497  mxClipEvtLstnr->AddListener( pWin );
498 
499  // get initial state
501  bPastePossible = ( aDataHelper.HasFormat( SotClipboardFormatId::STRING ) || aDataHelper.HasFormat( SotClipboardFormatId::RTF )
502  || aDataHelper.HasFormat( SotClipboardFormatId::RICHTEXT ) );
503  }
504 
505  SfxWhichIter aIter( rSet );
506  sal_uInt16 nWhich = aIter.FirstWhich();
507  while (nWhich)
508  {
509  switch (nWhich)
510  {
511  case SID_PASTE:
512  case SID_PASTE_SPECIAL:
513  case SID_PASTE_UNFORMATTED:
514  if( !bPastePossible )
515  rSet.DisableItem( nWhich );
516  break;
517  case SID_CLIPBOARD_FORMAT_ITEMS:
518  if ( bPastePossible )
519  {
520  SvxClipboardFormatItem aFormats( SID_CLIPBOARD_FORMAT_ITEMS );
521  TransferableDataHelper aDataHelper(
523 
524  if ( aDataHelper.HasFormat( SotClipboardFormatId::STRING ) )
525  aFormats.AddClipbrdFormat( SotClipboardFormatId::STRING );
526  if ( aDataHelper.HasFormat( SotClipboardFormatId::RTF ) )
527  aFormats.AddClipbrdFormat( SotClipboardFormatId::RTF );
528  if ( aDataHelper.HasFormat( SotClipboardFormatId::RICHTEXT ) )
529  aFormats.AddClipbrdFormat( SotClipboardFormatId::RICHTEXT );
530 
531  rSet.Put( aFormats );
532  }
533  else
534  rSet.DisableItem( nWhich );
535  break;
536  }
537  nWhich = aIter.NextWhich();
538  }
539 }
540 
541 // Attributes
542 
544 {
545  // Underline
546 
547  SdrView* pView = mrViewData.GetScDrawView();
548 
549  sal_uInt16 nSlot = rReq.GetSlot();
550 
551  SfxItemSet aSet( pView->GetDefaultAttr() );
552 
553  SfxItemSet aViewAttr(pView->GetModel()->GetItemPool());
554  pView->GetAttributes(aViewAttr);
555 
556  // Underline
557  FontLineStyle eOld = aViewAttr.Get(EE_CHAR_UNDERLINE).GetLineStyle();
558  FontLineStyle eNew = eOld;
559  switch (nSlot)
560  {
561  case SID_ULINE_VAL_NONE:
562  eNew = LINESTYLE_NONE;
563  break;
564  case SID_ULINE_VAL_SINGLE:
565  eNew = ( eOld == LINESTYLE_SINGLE ) ? LINESTYLE_NONE : LINESTYLE_SINGLE;
566  break;
567  case SID_ULINE_VAL_DOUBLE:
568  eNew = ( eOld == LINESTYLE_DOUBLE ) ? LINESTYLE_NONE : LINESTYLE_DOUBLE;
569  break;
570  case SID_ULINE_VAL_DOTTED:
571  eNew = ( eOld == LINESTYLE_DOTTED ) ? LINESTYLE_NONE : LINESTYLE_DOTTED;
572  break;
573  default:
574  break;
575  }
576  aSet.Put( SvxUnderlineItem( eNew, EE_CHAR_UNDERLINE ) );
577 
578  pView->SetAttributes( aSet );
579  rReq.Done();
581 }
582 
583 static void lcl_RemoveFields( OutlinerView& rOutView )
584 {
586 
587  Outliner* pOutliner = rOutView.GetOutliner();
588  if (!pOutliner) return;
589 
590  ESelection aOldSel = rOutView.GetSelection();
591  ESelection aSel = aOldSel;
592  aSel.Adjust();
593  sal_Int32 nNewEnd = aSel.nEndPos;
594 
595  bool bUpdate = pOutliner->GetUpdateMode();
596  bool bChanged = false;
597 
599  EditEngine& rEditEng = const_cast<EditEngine&>(pOutliner->GetEditEngine());
600 
601  sal_Int32 nParCount = pOutliner->GetParagraphCount();
602  for (sal_Int32 nPar=0; nPar<nParCount; nPar++)
603  if ( nPar >= aSel.nStartPara && nPar <= aSel.nEndPara )
604  {
605  std::vector<sal_Int32> aPortions;
606  rEditEng.GetPortions( nPar, aPortions );
607 
608  for ( size_t nPos = aPortions.size(); nPos; )
609  {
610  --nPos;
611  sal_Int32 nEnd = aPortions[ nPos ];
612  sal_Int32 nStart = nPos ? aPortions[ nPos - 1 ] : 0;
613  // fields are single characters
614  if ( nEnd == nStart+1 &&
615  ( nPar > aSel.nStartPara || nStart >= aSel.nStartPos ) &&
616  ( nPar < aSel.nEndPara || nEnd <= aSel.nEndPos ) )
617  {
618  ESelection aFieldSel( nPar, nStart, nPar, nEnd );
619  SfxItemSet aSet = rEditEng.GetAttribs( aFieldSel );
620  if ( aSet.GetItemState( EE_FEATURE_FIELD ) == SfxItemState::SET )
621  {
622  if (!bChanged)
623  {
624  if (bUpdate)
625  pOutliner->SetUpdateMode( false );
626  OUString aName = ScResId( STR_UNDO_DELETECONTENTS );
627  ViewShellId nViewShellId(-1);
629  nViewShellId = pViewSh->GetViewShellId();
630  pOutliner->GetUndoManager().EnterListAction( aName, aName, 0, nViewShellId );
631  bChanged = true;
632  }
633 
634  OUString aFieldText = rEditEng.GetText( aFieldSel );
635  pOutliner->QuickInsertText( aFieldText, aFieldSel );
636  if ( nPar == aSel.nEndPara )
637  {
638  nNewEnd = nNewEnd + aFieldText.getLength();
639  --nNewEnd;
640  }
641  }
642  }
643  }
644  }
645 
646  if (bUpdate && bChanged)
647  {
648  pOutliner->GetUndoManager().LeaveListAction();
649  pOutliner->SetUpdateMode( true );
650  }
651 
652  if ( aOldSel == aSel ) // aSel is adjusted
653  aOldSel.nEndPos = nNewEnd;
654  else
655  aOldSel.nStartPos = nNewEnd; // if aOldSel is backwards
656  rOutView.SetSelection( aOldSel );
657 }
658 
660 {
661  SdrView* pView = mrViewData.GetScDrawView();
662  const SfxItemSet* pArgs = rReq.GetArgs();
663  sal_uInt16 nSlot = rReq.GetSlot();
664 
665  SfxItemSet aEditAttr( pView->GetModel()->GetItemPool() );
666  pView->GetAttributes( aEditAttr );
667  SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() );
668 
669  bool bSet = true;
670  switch ( nSlot )
671  {
672  case SID_ALIGNLEFT:
673  case SID_ALIGN_ANY_LEFT:
674  case SID_ATTR_PARA_ADJUST_LEFT:
675  aNewAttr.Put( SvxAdjustItem( SvxAdjust::Left, EE_PARA_JUST ) );
676  break;
677 
678  case SID_ALIGNCENTERHOR:
679  case SID_ALIGN_ANY_HCENTER:
680  case SID_ATTR_PARA_ADJUST_CENTER:
681  aNewAttr.Put( SvxAdjustItem( SvxAdjust::Center, EE_PARA_JUST ) );
682  break;
683 
684  case SID_ALIGNRIGHT:
685  case SID_ALIGN_ANY_RIGHT:
686  case SID_ATTR_PARA_ADJUST_RIGHT:
687  aNewAttr.Put( SvxAdjustItem( SvxAdjust::Right, EE_PARA_JUST ) );
688  break;
689 
690  case SID_ALIGNBLOCK:
691  case SID_ALIGN_ANY_JUSTIFIED:
692  case SID_ATTR_PARA_ADJUST_BLOCK:
693  aNewAttr.Put( SvxAdjustItem( SvxAdjust::Block, EE_PARA_JUST ) );
694  break;
695 
696  case SID_ATTR_PARA_LINESPACE_10:
697  {
699  aItem.SetPropLineSpace( 100 );
700  aNewAttr.Put( aItem );
701  }
702  break;
703 
704  case SID_ATTR_PARA_LINESPACE_15:
705  {
707  aItem.SetPropLineSpace( 150 );
708  aNewAttr.Put( aItem );
709  }
710  break;
711 
712  case SID_ATTR_PARA_LINESPACE_20:
713  {
715  aItem.SetPropLineSpace( 200 );
716  aNewAttr.Put( aItem );
717  }
718  break;
719 
720  case SID_SET_SUPER_SCRIPT:
721  {
723  SvxEscapement eEsc = static_cast<SvxEscapement>(aEditAttr.Get( EE_CHAR_ESCAPEMENT ).GetEnumValue());
724 
725  if( eEsc == SvxEscapement::Superscript )
726  aItem.SetEscapement( SvxEscapement::Off );
727  else
728  aItem.SetEscapement( SvxEscapement::Superscript );
729  aNewAttr.Put( aItem );
730  }
731  break;
732 
733  case SID_SET_SUB_SCRIPT:
734  {
736  SvxEscapement eEsc = static_cast<SvxEscapement>(aEditAttr.Get( EE_CHAR_ESCAPEMENT ).GetEnumValue());
737 
738  if( eEsc == SvxEscapement::Subscript )
739  aItem.SetEscapement( SvxEscapement::Off );
740  else
741  aItem.SetEscapement( SvxEscapement::Subscript );
742  aNewAttr.Put( aItem );
743  }
744  break;
745 
746  case SID_TABLE_VERT_NONE:
747  case SID_TABLE_VERT_CENTER:
748  case SID_TABLE_VERT_BOTTOM:
749  {
751  if (nSlot == SID_TABLE_VERT_CENTER)
753  else if (nSlot == SID_TABLE_VERT_BOTTOM)
755  aNewAttr.Put(SdrTextVertAdjustItem(eTVA));
756  }
757  break;
758 
759  case SID_PARASPACE_INCREASE:
760  case SID_PARASPACE_DECREASE:
761  {
762  SvxULSpaceItem aULSpace( aEditAttr.Get( EE_PARA_ULSPACE ) );
763  sal_uInt16 nUpper = aULSpace.GetUpper();
764  sal_uInt16 nLower = aULSpace.GetLower();
765 
766  if ( nSlot == SID_PARASPACE_INCREASE )
767  {
768  nUpper += 100;
769  nLower += 100;
770  }
771  else
772  {
773  nUpper = std::max< sal_Int16 >( nUpper - 100, 0 );
774  nLower = std::max< sal_Int16 >( nLower - 100, 0 );
775  }
776 
777  aULSpace.SetUpper( nUpper );
778  aULSpace.SetLower( nLower );
779  aNewAttr.Put( aULSpace );
780  }
781  break;
782 
783  default:
784  bSet = false;
785  }
786 
787  bool bDone = true;
788  bool bArgsInReq = ( pArgs != nullptr );
789 
790  if ( !bArgsInReq )
791  {
792  switch ( nSlot )
793  {
794  case SID_TEXT_STANDARD: // delete hard text attributes
795  {
796  OutlinerView* pOutView = pView->IsTextEdit() ?
797  pView->GetTextEditOutlinerView() : nullptr;
798  if ( pOutView )
799  pOutView->Paint( tools::Rectangle() );
800 
801  SfxItemSet aEmptyAttr( *aEditAttr.GetPool(), svl::Items<EE_ITEMS_START, EE_ITEMS_END>{} );
802  pView->SetAttributes( aEmptyAttr, true );
803 
804  if ( pOutView )
805  {
806  lcl_RemoveFields( *pOutView );
807  pOutView->ShowCursor();
808  }
809 
810  rReq.Done( aEmptyAttr );
812  bDone = false; // already happened here
813  }
814  break;
815 
816  case SID_GROW_FONT_SIZE:
817  case SID_SHRINK_FONT_SIZE:
818  {
819  OutlinerView* pOutView = pView->IsTextEdit() ?
820  pView->GetTextEditOutlinerView() : nullptr;
821  if ( pOutView )
822  {
823  const SvxFontListItem* pFontListItem = static_cast< const SvxFontListItem* >
824  ( SfxObjectShell::Current()->GetItem( SID_ATTR_CHAR_FONTLIST ) );
825  const FontList* pFontList = pFontListItem ? pFontListItem->GetFontList() : nullptr;
826  pOutView->GetEditView().ChangeFontSize( nSlot == SID_GROW_FONT_SIZE, pFontList );
827  mrViewData.GetBindings().Invalidate( SID_ATTR_CHAR_FONTHEIGHT );
828  bDone = false;
829  }
830  }
831  break;
832 
833  case SID_CHAR_DLG_EFFECT:
834  case SID_CHAR_DLG: // dialog button
835  case SID_ATTR_CHAR_FONT: // Controller not shown
836  case SID_ATTR_CHAR_FONTHEIGHT:
837  bDone = ExecuteCharDlg( aEditAttr, aNewAttr , nSlot);
838  break;
839 
840  case SID_PARA_DLG:
841  bDone = ExecuteParaDlg( aEditAttr, aNewAttr );
842  break;
843 
844  case SID_ATTR_CHAR_WEIGHT:
845  aNewAttr.Put( aEditAttr.Get( EE_CHAR_WEIGHT ) );
846  break;
847 
848  case SID_ATTR_CHAR_POSTURE:
849  aNewAttr.Put( aEditAttr.Get( EE_CHAR_ITALIC ) );
850  break;
851 
852  case SID_ATTR_CHAR_UNDERLINE:
853  aNewAttr.Put( aEditAttr.Get( EE_CHAR_UNDERLINE ) );
854  break;
855 
856  case SID_ATTR_CHAR_OVERLINE:
857  aNewAttr.Put( aEditAttr.Get( EE_CHAR_OVERLINE ) );
858  break;
859 
860  case SID_ATTR_CHAR_CONTOUR:
861  aNewAttr.Put( aEditAttr.Get( EE_CHAR_OUTLINE ) );
862  break;
863 
864  case SID_ATTR_CHAR_SHADOWED:
865  aNewAttr.Put( aEditAttr.Get( EE_CHAR_SHADOW ) );
866  break;
867 
868  case SID_ATTR_CHAR_STRIKEOUT:
869  aNewAttr.Put( aEditAttr.Get( EE_CHAR_STRIKEOUT ) );
870  break;
871 
872  case SID_DRAWTEXT_ATTR_DLG:
873  {
876 
877  bDone = ( RET_OK == pDlg->Execute() );
878 
879  if ( bDone )
880  aNewAttr.Put( *pDlg->GetOutputItemSet() );
881 
882  pDlg.disposeAndClear();
883 
884  SfxBindings& rBindings = mrViewData.GetBindings();
885  rBindings.Invalidate( SID_TABLE_VERT_NONE );
886  rBindings.Invalidate( SID_TABLE_VERT_CENTER );
887  rBindings.Invalidate( SID_TABLE_VERT_BOTTOM );
888  }
889  break;
890  }
891  }
892 
893  if ( bSet || bDone )
894  {
895  rReq.Done( aNewAttr );
896  pArgs = rReq.GetArgs();
897  }
898 
899  if ( !pArgs )
900  return;
901 
902  if ( bArgsInReq &&
903  ( nSlot == SID_ATTR_CHAR_FONT || nSlot == SID_ATTR_CHAR_FONTHEIGHT ||
904  nSlot == SID_ATTR_CHAR_WEIGHT || nSlot == SID_ATTR_CHAR_POSTURE ) )
905  {
906  // font items from toolbox controller have to be applied for the right script type
907 
908  // #i78017 establish the same behaviour as in Writer
909  SvtScriptType nScript = SvtScriptType::LATIN | SvtScriptType::ASIAN | SvtScriptType::COMPLEX;
910  if (nSlot == SID_ATTR_CHAR_FONT)
911  nScript = pView->GetScriptType();
912 
913  SfxItemPool& rPool = GetPool();
914  SvxScriptSetItem aSetItem( nSlot, rPool );
915  sal_uInt16 nWhich = rPool.GetWhich( nSlot );
916  aSetItem.PutItemForScriptType( nScript, pArgs->Get( nWhich ) );
917 
918  pView->SetAttributes( aSetItem.GetItemSet() );
919  }
920  else if( nSlot == SID_ATTR_PARA_LRSPACE )
921  {
922  sal_uInt16 nId = SID_ATTR_PARA_LRSPACE;
923  const SvxLRSpaceItem& rItem = static_cast<const SvxLRSpaceItem&>(
924  pArgs->Get( nId ));
926  nId = EE_PARA_LRSPACE;
927  SvxLRSpaceItem aLRSpaceItem( rItem.GetLeft(),
928  rItem.GetRight(), rItem.GetTextLeft(),
929  rItem.GetTextFirstLineOffset(), nId );
930  aAttr.Put( aLRSpaceItem );
931  pView->SetAttributes( aAttr );
932  }
933  else if( nSlot == SID_ATTR_PARA_LINESPACE )
934  {
935  SvxLineSpacingItem aLineSpaceItem = static_cast<const SvxLineSpacingItem&>(pArgs->Get(
936  GetPool().GetWhich(nSlot)));
938  aAttr.Put( aLineSpaceItem );
939  pView->SetAttributes( aAttr );
940  }
941  else if( nSlot == SID_ATTR_PARA_ULSPACE )
942  {
943  SvxULSpaceItem aULSpaceItem = static_cast<const SvxULSpaceItem&>(pArgs->Get(
944  GetPool().GetWhich(nSlot)));
946  aULSpaceItem.SetWhich(EE_PARA_ULSPACE);
947  aAttr.Put( aULSpaceItem );
948  pView->SetAttributes( aAttr );
949  }
950  else
951  {
952  // use args directly
953  pView->SetAttributes( *pArgs );
954  }
956 }
957 
959 {
960  if ( IsNoteEdit() )
961  {
962  // issue 21255 - Notes now support rich text formatting.
963  }
964 
965  SvtLanguageOptions aLangOpt;
966  bool bDisableCTLFont = !aLangOpt.IsCTLFontEnabled();
967  bool bDisableVerticalText = !aLangOpt.IsVerticalTextEnabled();
968 
969  SdrView* pView = mrViewData.GetScDrawView();
970  SfxItemSet aAttrSet(pView->GetModel()->GetItemPool());
971  pView->GetAttributes(aAttrSet);
972 
973  // direct attributes
974 
975  rDestSet.Put( aAttrSet );
976 
977  // choose font info according to selection script type
978 
979  SvtScriptType nScript = pView->GetScriptType();
980 
981  // #i55929# input-language-dependent script type (depends on input language if nothing selected)
982  SvtScriptType nInputScript = nScript;
983  OutlinerView* pOutView = pView->GetTextEditOutlinerView();
984  if (pOutView && !pOutView->GetSelection().HasRange())
985  {
987  if (nInputLang != LANGUAGE_DONTKNOW && nInputLang != LANGUAGE_SYSTEM)
988  nInputScript = SvtLanguageOptions::GetScriptTypeOfLanguage( nInputLang );
989  }
990 
991  // #i55929# according to spec, nInputScript is used for font and font height only
992  if ( rDestSet.GetItemState( EE_CHAR_FONTINFO ) != SfxItemState::UNKNOWN )
993  ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_FONTINFO, nInputScript );
994  if ( rDestSet.GetItemState( EE_CHAR_FONTHEIGHT ) != SfxItemState::UNKNOWN )
995  ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_FONTHEIGHT, nInputScript );
996  if ( rDestSet.GetItemState( EE_CHAR_WEIGHT ) != SfxItemState::UNKNOWN )
997  ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_WEIGHT, nScript );
998  if ( rDestSet.GetItemState( EE_CHAR_ITALIC ) != SfxItemState::UNKNOWN )
999  ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_ITALIC, nScript );
1000  // Alignment
1001 
1002  SvxAdjust eAdj = aAttrSet.Get(EE_PARA_JUST).GetAdjust();
1003  switch( eAdj )
1004  {
1005  case SvxAdjust::Left:
1006  {
1007  rDestSet.Put( SfxBoolItem( SID_ALIGNLEFT, true ) );
1008  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_LEFT, true ) );
1009  }
1010  break;
1011  case SvxAdjust::Center:
1012  {
1013  rDestSet.Put( SfxBoolItem( SID_ALIGNCENTERHOR, true ) );
1014  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_CENTER, true ) );
1015  }
1016  break;
1017  case SvxAdjust::Right:
1018  {
1019  rDestSet.Put( SfxBoolItem( SID_ALIGNRIGHT, true ) );
1020  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, true ) );
1021  }
1022  break;
1023  case SvxAdjust::Block:
1024  {
1025  rDestSet.Put( SfxBoolItem( SID_ALIGNBLOCK, true ) );
1026  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, true ) );
1027  }
1028  break;
1029  default:
1030  {
1031  // added to avoid warnings
1032  }
1033  }
1034  // pseudo slots for Format menu
1035  rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_LEFT, eAdj == SvxAdjust::Left ) );
1036  rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_HCENTER, eAdj == SvxAdjust::Center ) );
1037  rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_RIGHT, eAdj == SvxAdjust::Right ) );
1038  rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_JUSTIFIED, eAdj == SvxAdjust::Block ) );
1039 
1040  SvxLRSpaceItem aLR = aAttrSet.Get( EE_PARA_LRSPACE );
1041  aLR.SetWhich(SID_ATTR_PARA_LRSPACE);
1042  rDestSet.Put(aLR);
1043  Invalidate( SID_ATTR_PARA_LRSPACE );
1044  SfxItemState eState = aAttrSet.GetItemState( EE_PARA_LRSPACE );
1045  if ( eState == SfxItemState::DONTCARE )
1046  rDestSet.InvalidateItem(SID_ATTR_PARA_LRSPACE);
1047  //xuxu for Line Space
1048  SvxLineSpacingItem aLineSP = aAttrSet.Get( EE_PARA_SBL );
1049  aLineSP.SetWhich(SID_ATTR_PARA_LINESPACE);
1050  rDestSet.Put(aLineSP);
1051  Invalidate(SID_ATTR_PARA_LINESPACE);
1052  eState = aAttrSet.GetItemState( EE_PARA_SBL );
1053  if ( eState == SfxItemState::DONTCARE )
1054  rDestSet.InvalidateItem(SID_ATTR_PARA_LINESPACE);
1055  //xuxu for UL Space
1056  SvxULSpaceItem aULSP = aAttrSet.Get( EE_PARA_ULSPACE );
1057  aULSP.SetWhich(SID_ATTR_PARA_ULSPACE);
1058  rDestSet.Put(aULSP);
1059  Invalidate(SID_ATTR_PARA_ULSPACE);
1060  Invalidate(SID_PARASPACE_INCREASE);
1061  Invalidate(SID_PARASPACE_DECREASE);
1062  eState = aAttrSet.GetItemState( EE_PARA_ULSPACE );
1063  if( eState >= SfxItemState::DEFAULT )
1064  {
1065  if ( !aULSP.GetUpper() && !aULSP.GetLower() )
1066  rDestSet.DisableItem( SID_PARASPACE_DECREASE );
1067  }
1068  else
1069  {
1070  rDestSet.DisableItem( SID_PARASPACE_INCREASE );
1071  rDestSet.DisableItem( SID_PARASPACE_DECREASE );
1072  rDestSet.InvalidateItem(SID_ATTR_PARA_ULSPACE);
1073  }
1074 
1075  // Line spacing
1076 
1077  sal_uInt16 nLineSpace = aAttrSet.Get( EE_PARA_SBL ).GetPropLineSpace();
1078  switch( nLineSpace )
1079  {
1080  case 100:
1081  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_10, true ) );
1082  break;
1083  case 150:
1084  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_15, true ) );
1085  break;
1086  case 200:
1087  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_20, true ) );
1088  break;
1089  }
1090 
1091  // super-/subscript
1092  SvxEscapement eEsc = static_cast<SvxEscapement>(aAttrSet.Get( EE_CHAR_ESCAPEMENT ).GetEnumValue());
1093  rDestSet.Put(SfxBoolItem(SID_SET_SUPER_SCRIPT, eEsc == SvxEscapement::Superscript));
1094  rDestSet.Put(SfxBoolItem(SID_SET_SUB_SCRIPT, eEsc == SvxEscapement::Subscript));
1095 
1096  // Underline
1097  eState = aAttrSet.GetItemState( EE_CHAR_UNDERLINE );
1098  if ( eState == SfxItemState::DONTCARE )
1099  {
1100  rDestSet.InvalidateItem( SID_ULINE_VAL_NONE );
1101  rDestSet.InvalidateItem( SID_ULINE_VAL_SINGLE );
1102  rDestSet.InvalidateItem( SID_ULINE_VAL_DOUBLE );
1103  rDestSet.InvalidateItem( SID_ULINE_VAL_DOTTED );
1104  }
1105  else
1106  {
1107  FontLineStyle eUnderline = aAttrSet.Get(EE_CHAR_UNDERLINE).GetLineStyle();
1108  rDestSet.Put(SfxBoolItem(SID_ULINE_VAL_SINGLE, eUnderline == LINESTYLE_SINGLE));
1109  rDestSet.Put(SfxBoolItem(SID_ULINE_VAL_DOUBLE, eUnderline == LINESTYLE_DOUBLE));
1110  rDestSet.Put(SfxBoolItem(SID_ULINE_VAL_DOTTED, eUnderline == LINESTYLE_DOTTED));
1111  rDestSet.Put(SfxBoolItem(SID_ULINE_VAL_NONE, eUnderline == LINESTYLE_NONE));
1112  }
1113 
1114  // horizontal / vertical
1115 
1116  bool bLeftToRight = true;
1117 
1118  SdrOutliner* pOutl = pView->GetTextEditOutliner();
1119  if( pOutl )
1120  {
1121  if( pOutl->IsVertical() )
1122  bLeftToRight = false;
1123  }
1124  else
1125  bLeftToRight = aAttrSet.Get( SDRATTR_TEXTDIRECTION ).GetValue() == css::text::WritingMode_LR_TB;
1126 
1127  if ( bDisableVerticalText )
1128  {
1129  rDestSet.DisableItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT );
1130  rDestSet.DisableItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM );
1131  }
1132  else
1133  {
1134  rDestSet.Put( SfxBoolItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT, bLeftToRight ) );
1135  rDestSet.Put( SfxBoolItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM, !bLeftToRight ) );
1136  }
1137 
1138  // left-to-right or right-to-left
1139 
1140  if ( !bLeftToRight || bDisableCTLFont )
1141  {
1142  // disabled if vertical
1143  rDestSet.DisableItem( SID_ATTR_PARA_LEFT_TO_RIGHT );
1144  rDestSet.DisableItem( SID_ATTR_PARA_RIGHT_TO_LEFT );
1145  }
1146  else if ( aAttrSet.GetItemState( EE_PARA_WRITINGDIR ) == SfxItemState::DONTCARE )
1147  {
1148  rDestSet.InvalidateItem( SID_ATTR_PARA_LEFT_TO_RIGHT );
1149  rDestSet.InvalidateItem( SID_ATTR_PARA_RIGHT_TO_LEFT );
1150  }
1151  else
1152  {
1153  SvxFrameDirection eAttrDir = aAttrSet.Get( EE_PARA_WRITINGDIR ).GetValue();
1154  if ( eAttrDir == SvxFrameDirection::Environment )
1155  {
1156  // get "environment" direction from page style
1157  if ( mrViewData.GetDocument().GetEditTextDirection( mrViewData.GetTabNo() ) == EEHorizontalTextDirection::R2L )
1158  eAttrDir = SvxFrameDirection::Horizontal_RL_TB;
1159  else
1160  eAttrDir = SvxFrameDirection::Horizontal_LR_TB;
1161  }
1162  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LEFT_TO_RIGHT, ( eAttrDir == SvxFrameDirection::Horizontal_LR_TB ) ) );
1163  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_RIGHT_TO_LEFT, ( eAttrDir == SvxFrameDirection::Horizontal_RL_TB ) ) );
1164  }
1165 }
1166 
1168 {
1170  if ( nType == TransliterationFlags::NONE )
1171  return;
1172 
1173  ScDrawView* pView = mrViewData.GetScDrawView();
1174  OutlinerView* pOutView = pView->GetTextEditOutlinerView();
1175  if ( pOutView )
1176  {
1177  // change selected text in object
1178  pOutView->TransliterateText( nType );
1179  }
1180  else
1181  {
1183  }
1184 }
1185 
1187 {
1188  SfxWhichIter aIter( rSet );
1189  sal_uInt16 nWhich = aIter.FirstWhich();
1190 
1191  SdrView* pView = mrViewData.GetScDrawView();
1192 
1193  SfxItemSet aEditAttr(pView->GetModel()->GetItemPool());
1194  pView->GetAttributes(aEditAttr);
1195  //SfxItemSet aAttrs( *aEditAttr.GetPool(), aEditAttr.GetRanges() );
1196 
1197  while ( nWhich )
1198  {
1199  sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich)
1200  ? GetPool().GetSlotId(nWhich)
1201  : nWhich;
1202  switch ( nSlotId )
1203  {
1204  case SID_TABLE_VERT_NONE:
1205  case SID_TABLE_VERT_CENTER:
1206  case SID_TABLE_VERT_BOTTOM:
1207  bool bContour = false;
1208  SfxItemState eConState = aEditAttr.GetItemState( SDRATTR_TEXT_CONTOURFRAME );
1209  if( eConState != SfxItemState::DONTCARE )
1210  {
1211  bContour = aEditAttr.Get( SDRATTR_TEXT_CONTOURFRAME ).GetValue();
1212  }
1213  if (bContour) break;
1214 
1215  SfxItemState eVState = aEditAttr.GetItemState( SDRATTR_TEXT_VERTADJUST );
1216  //SfxItemState eHState = aAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST );
1217 
1218  //if(SfxItemState::DONTCARE != eVState && SfxItemState::DONTCARE != eHState)
1219  if(SfxItemState::DONTCARE != eVState)
1220  {
1221  SdrTextVertAdjust eTVA = aEditAttr.Get(SDRATTR_TEXT_VERTADJUST).GetValue();
1222  bool bSet = (nSlotId == SID_TABLE_VERT_NONE && eTVA == SDRTEXTVERTADJUST_TOP) ||
1223  (nSlotId == SID_TABLE_VERT_CENTER && eTVA == SDRTEXTVERTADJUST_CENTER) ||
1224  (nSlotId == SID_TABLE_VERT_BOTTOM && eTVA == SDRTEXTVERTADJUST_BOTTOM);
1225  rSet.Put(SfxBoolItem(nSlotId, bSet));
1226  }
1227  else
1228  {
1229  rSet.Put(SfxBoolItem(nSlotId, false));
1230  }
1231  break;
1232  }
1233  nWhich = aIter.NextWhich();
1234  }
1235 }
1236 
1237 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
OString stripEnd(const OString &rIn, char c)
void SetURL(const OUString &rURL)
SfxViewFrame * GetViewFrame() const
void Adjust()
#define LANGUAGE_NONE
OUString GetText(LineEnd eEnd=LINEEND_LF) const
static void CopyStringTo(const OUString &rContent, const css::uno::Reference< css::datatransfer::clipboard::XClipboard > &rxClipboard, const vcl::ILibreOfficeKitNotifier *pNotifier=nullptr)
void SetTargetFrame(const OUString &rFrm)
void ExecuteToggle(SfxRequest &rReq)
Definition: drtxtob.cxx:543
sal_Int32 nStartPara
static void HideDisabledSlot(SfxItemSet &rSet, SfxBindings &rBindings, sal_uInt16 nSlotId)
Definition: viewutil.cxx:285
SDRTEXTVERTADJUST_TOP
bool IsNoteEdit() const
Definition: drtxtob2.cxx:42
void PasteSpecial()
void PutItemForScriptType(SvtScriptType nScriptType, const SfxPoolItem &rItem)
#define SFX_IMPL_INTERFACE(Class, SuperClass)
void InsertText(const OUString &rNew, bool bSelect=false)
sal_uInt16 GetLower() const
#define LINE_SPACE_DEFAULT_HEIGHT
void SetEscapement(const SvxEscapement eNew)
static void PutItemScript(SfxItemSet &rShellSet, const SfxItemSet &rCoreSet, sal_uInt16 nWhichId, SvtScriptType nScript)
Definition: viewutil.cxx:49
void SelectFieldAtCursor()
virtual const SfxItemSet * GetOutputItemSet() const =0
std::string GetValue
css::uno::Reference< css::datatransfer::clipboard::XClipboard > GetClipboard()
static void StateDisableItems(SfxItemSet &rSet)
Definition: drtxtob.cxx:96
const OUString & GetTargetFrame() const
void ExecuteAttr(SfxRequest &rReq)
Definition: drtxtob.cxx:659
SfxDispatcher * GetDispatcher()
void ShowCursor(bool bGotoCursor=true, bool bActivate=false)
static SvxAbstractDialogFactory * Create()
tools::Long GetRight() const
constexpr TypedWhichId< SdrOnOffItem > SDRATTR_TEXT_CONTOURFRAME(SDRATTR_MISC_FIRST+21)
void disposeAndClear()
FilterGroup & rTarget
constexpr TypedWhichId< SvxPostureItem > EE_CHAR_ITALIC(EE_CHAR_START+7)
static void OpenURL(const OUString &rURL, const OUString &rTarget, bool bIgnoreSettings=false)
Open the specified URL.
Definition: global.cxx:759
void InvalidateItem(sal_uInt16 nWhich)
sal_Int16 nId
sal_uInt16 FirstWhich()
void TransliterateText(TransliterationFlags nTransliterationMode)
SCTAB GetTabNo() const
Definition: viewdata.hxx:394
SvxFrameDirection
void Done(bool bRemove=false)
sal_Int32 GetParagraphCount() const
ScDocument & GetDocument() const
Definition: viewdata.hxx:379
void ChangeFontSize(bool bGrow, const FontList *pList)
constexpr TypedWhichId< SvxAdjustItem > EE_PARA_JUST(EE_PARA_START+15)
static bool HasThesaurusLanguage(LanguageType nLang)
Definition: scmod.cxx:2201
static SfxObjectShell * Current()
constexpr TypedWhichId< SvxFontItem > ATTR_FONT(100)
virtual SfxUndoManager * GetUndoManager()
const SfxItemSet * GetArgs() const
void Invalidate(sal_uInt16 nId)
void ExecutePasteContents(SfxRequest &rReq)
Definition: drtxtob1.cxx:100
bool HasFormat(SotClipboardFormatId nFormat) const
virtual SvxFontItem * Clone(SfxItemPool *pPool=nullptr) const override
bool IsVerticalTextEnabled() const
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT(EE_CHAR_START+2)
constexpr TypedWhichId< SvxLineSpacingItem > EE_PARA_SBL(EE_PARA_START+14)
SfxItemSet GetAttribs(sal_Int32 nPara, sal_Int32 nStart, sal_Int32 nEnd, GetAttribsFlags nFlags=GetAttribsFlags::ALL) const
constexpr TypedWhichId< SvxFrameDirectionItem > EE_PARA_WRITINGDIR(EE_PARA_START+0)
sal_uInt16 NextWhich()
void GetClipState(SfxItemSet &rSet)
Definition: drtxtob.cxx:483
void SetTargetFrame(const OUString &rTarget)
SfxUndoManager & GetUndoManager()
void SetPropLineSpace(const sal_uInt16 nProp)
LINESTYLE_NONE
constexpr TypedWhichId< SvxLRSpaceItem > EE_PARA_LRSPACE(EE_PARA_START+12)
constexpr TypedWhichId< SvxULSpaceItem > EE_PARA_ULSPACE(EE_PARA_START+13)
int nCount
static TransferableDataHelper CreateFromSystemClipboard(vcl::Window *pWindow)
ScViewData & mrViewData
Definition: drtxtob.hxx:37
Mode eMode
const SfxItemSet & GetDefaultAttr() const
void SetUndoManager(SfxUndoManager *pNewUndoMgr)
SotClipboardFormatId
static void ExecuteCharMap(const SvxFontItem &rOldFont, ScTabViewShell &rShell)
Definition: viewutil.cxx:320
static SvtScriptType GetScriptTypeOfLanguage(LanguageType nLang)
sal_Int32 nEndPos
virtual SvtScriptType GetScriptType() const
ScDrawView * GetScDrawView()
Definition: viewdata.cxx:3075
constexpr TypedWhichId< SvxContourItem > EE_CHAR_OUTLINE(EE_CHAR_START+8)
TransliterationFlags
constexpr TypedWhichId< SvxWeightItem > EE_CHAR_WEIGHT(EE_CHAR_START+4)
EditView & GetEditView() const
SfxItemPool & GetPool() const
ScTabViewShell * GetViewShell() const
Definition: viewdata.hxx:356
constexpr TypedWhichId< SvxShadowedItem > EE_CHAR_SHADOW(EE_CHAR_START+9)
const SfxPoolItem * GetItem(sal_uInt16 nSlotId) const
SDRTEXTVERTADJUST_BOTTOM
constexpr TypedWhichId< SvxWritingModeItem > SDRATTR_TEXTDIRECTION(SDRATTR_NOTPERSIST_FIRST+34)
void Execute(SfxRequest &rReq)
Definition: drtxtob.cxx:141
void QuickSetAttribs(const SfxItemSet &rSet, const ESelection &rSel)
tools::Long GetTextLeft() const
sal_Int32 nEndPara
const SdrOutliner * GetTextEditOutliner() const
SvtScriptType
const OUString & GetURL() const
void ExecuteTrans(const SfxRequest &rReq)
Definition: drtxtob.cxx:1167
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
static void GetGlobalClipState(SfxItemSet &rSet)
Definition: drtxtob2.cxx:112
SvxAdjust
IMPL_LINK(ScDrawTextObjectBar, ClipboardChanged, TransferableDataHelper *, pDataHelper, void)
Definition: drtxtob.cxx:471
SfxBindings & GetBindings()
Definition: viewdata.cxx:3035
#define LANGUAGE_SYSTEM
void InvalidateDrawTextAttrs()
Definition: drawview.cxx:162
SfxBindings & GetBindings()
constexpr TypedWhichId< SdrTextVertAdjustItem > SDRATTR_TEXT_VERTADJUST(SDRATTR_MISC_FIRST+8)
const OUString & GetValue() const
ScDrawTextObjectBar(ScViewData &rData)
Definition: drtxtob.cxx:108
const T * GetArg(sal_uInt16 nSlotId) const
tools::Long GetLeft() const
bool SetAttributes(const SfxItemSet &rSet, bool bReplaceAll=false)
void SetPool(SfxItemPool *pNewPool)
OUString GetSelected() const
SvxLinkInsertMode
LINESTYLE_SINGLE
OUString ScResId(const char *pId)
Definition: scdll.cxx:89
ScGridWindow * GetActiveWin()
Definition: viewdata.cxx:3063
#define LANGUAGE_DONTKNOW
short GetTextFirstLineOffset() const
void Paste(bool bUseSpecial=false)
const OutlinerView * GetTextEditOutlinerView() const
HLINK_FIELD
Outliner * GetOutliner() const
sal_uInt16 GetSlotId(sal_uInt16 nWhich) const
EESpellState StartThesaurus(weld::Widget *pDialogParent)
void SetName(const OUString &rName)
void SetName(const OUString &rName)
weld::Window * GetDialogParent()
Definition: viewdata.cxx:3057
rtl::Reference< TransferableClipboardListener > mxClipEvtLstnr
Definition: drtxtob.hxx:38
void InsertField(const SvxFieldItem &rFld)
SfxItemPool * GetPool() const
void ExecuteGlobal(SfxRequest &rReq)
Definition: drtxtob2.cxx:49
static void RemoveURLField(EditView &pEditView)
const EditEngine & GetEditEngine() const
void QuickInsertText(const OUString &rText, const ESelection &rSel)
#define SFX_OBJECTBAR_OBJECT
size_t LeaveListAction()
ESelection GetSelection() const
virtual VclPtr< SfxAbstractTabDialog > CreateTextTabDialog(weld::Window *pParent, const SfxItemSet *pAttrSet, SdrView *pView)=0
weld::Window * GetFrameWeld() const
virtual ~ScDrawTextObjectBar() override
Definition: drtxtob.cxx:127
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
sal_uInt16 GetSlot() const
static const OUString & GetContextName(const Context eContext)
EEHorizontalTextDirection GetEditTextDirection(SCTAB nTab) const
Definition: documen8.cxx:355
constexpr TypedWhichId< SvxCrossedOutItem > EE_CHAR_STRIKEOUT(EE_CHAR_START+6)
void SetSelection(const ESelection &)
bool HasChildWindow(sal_uInt16)
HLINK_DEFAULT
bool HasRange() const
bool EDITENG_DLLPUBLIC GetStatusValueForThesaurusFromContext(OUString &rStatusVal, LanguageType &rLang, const EditView &rEditView)
static ScTabViewShell * GetActiveViewShell()
Definition: tabvwsh4.cxx:1038
SfxItemState
virtual bool IsTextEdit() const final override
void DisableItem(sal_uInt16 nWhich)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
sal_uInt16 GetWhich(sal_uInt16 nSlot, bool bDeep=true) const
static TransliterationFlags GetTransliterationType(sal_uInt16 nSlotID)
Definition: viewutil.cxx:98
#define GetWhich(nSlot)
constexpr TypedWhichId< SvxEscapementItem > EE_CHAR_ESCAPEMENT(EE_CHAR_START+10)
LINESTYLE_DOTTED
virtual void Invalidate(sal_uInt16 nId=0)
bool ExecuteParaDlg(const SfxItemSet &rArgs, SfxItemSet &rOutSet)
Definition: drtxtob1.cxx:63
OUString aName
void GetAttributes(SfxItemSet &rTargetSet, bool bOnlyHardAttr=false) const
void GetPortions(sal_Int32 nPara, std::vector< sal_Int32 > &rList)
SfxDispatcher & GetDispatcher()
Definition: viewdata.cxx:3041
RET_OK
bool IsCTLFontEnabled() const
constexpr TypedWhichId< SfxBoolItem > EE_PARA_HYPHENATE(EE_PARA_START+6)
constexpr TypedWhichId< SvxOverlineItem > EE_CHAR_OVERLINE(EE_CHAR_START+29)
virtual void EnterListAction(const OUString &rComment, const OUString &rRepeatComment, sal_uInt16 nId, ViewShellId nViewShellId)
vcl::Window * GetWindow() const
QPRO_FUNC_TYPE nType
Definition: qproform.cxx:400
void GetStatePropPanelAttr(SfxItemSet &)
Definition: drtxtob.cxx:1186
const SvxFieldData * GetFieldAtCursor() const
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO(EE_CHAR_START+1)
const SfxItemSet & GetEmptyItemSet() const
void SetUpdateMode(bool bUpdate)
SdrEndTextEditKind ScEndTextEdit()
Definition: drawview.cxx:894
void GetState(SfxItemSet &rSet)
Definition: drtxtob.cxx:358
void AddClipbrdFormat(SotClipboardFormatId nId)
SvxEscapement
constexpr TypedWhichId< SvxUnderlineItem > EE_CHAR_UNDERLINE(EE_CHAR_START+5)
const OUString & GetName() const
SvxLinkInsertMode GetInsertMode() const
SfxObjectShell * GetSfxDocShell() const
Definition: viewdata.hxx:357
bool IsUndoEnabled() const
Definition: document.hxx:1533
SfxItemSet GetAttribs()
void GetAttrState(SfxItemSet &rSet)
Definition: drtxtob.cxx:958
const SfxItemPool & GetItemPool() const
constexpr sal_uInt16 EE_FEATURE_FIELD(EE_FEATURE_NOTCONV+1)
const SfxPoolItem * Execute(sal_uInt16 nSlot, SfxCallMode nCall=SfxCallMode::SLOT, const SfxPoolItem **pArgs=nullptr, sal_uInt16 nModi=0, const SfxPoolItem **pInternalArgs=nullptr)
LINESTYLE_DOUBLE
const FontList * GetFontList() const
static void lcl_RemoveFields(OutlinerView &rOutView)
Definition: drtxtob.cxx:583
LanguageType GetInputLanguage() const
FontLineStyle
sal_uInt16 ScGetFontWorkId()
Definition: drtxtob2.cxx:37
bool ExecuteCharDlg(const SfxItemSet &rArgs, SfxItemSet &rOutSet, sal_uInt16 nSlot)
Definition: drtxtob1.cxx:40
SdrModel * GetModel() const
static bool IsCursorAtURLField(const EditView &pEditView)
void SetContextName(const OUString &rsContextName)
SdrTextVertAdjust
virtual SfxObjectShell * GetObjectShell()
void EDITENG_DLLPUBLIC ReplaceTextWithSynonym(EditView &rEditView, const OUString &rSynonmText)
static bool IsWhich(sal_uInt16 nId)
bool GetUpdateMode() const
sal_uInt16 nPos
sal_uInt16 GetUpper() const
SDRTEXTVERTADJUST_CENTER
sal_Int32 nStartPos
typedef void(CALLTYPE *GetFuncDataPtr)(sal_uInt16 &nNo
void Paint(const tools::Rectangle &rRect, OutputDevice *pTargetDevice=nullptr)