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();
353  }
354  break;
355 
356  }
357 }
358 
360 {
362  bool bHasFontWork = pViewFrm->HasChildWindow(SID_FONTWORK);
363  bool bDisableFontWork = false;
364 
365  if (IsNoteEdit())
366  {
367  // #i21255# notes now support rich text formatting (#i74140# but not fontwork)
368  bDisableFontWork = true;
369  }
370 
371  if ( bDisableFontWork )
372  rSet.DisableItem( SID_FONTWORK );
373  else
374  rSet.Put(SfxBoolItem(SID_FONTWORK, bHasFontWork));
375 
376  if ( rSet.GetItemState( SID_HYPERLINK_GETLINK ) != SfxItemState::UNKNOWN )
377  {
378  SvxHyperlinkItem aHLinkItem;
379  SdrView* pView = mrViewData.GetScDrawView();
380  OutlinerView* pOutView = pView->GetTextEditOutlinerView();
381  if ( pOutView )
382  {
383  bool bField = false;
384  const SvxFieldData* pField = pOutView->GetFieldAtCursor();
385  if (const SvxURLField* pURLField = dynamic_cast<const SvxURLField*>(pField))
386  {
387  aHLinkItem.SetName( pURLField->GetRepresentation() );
388  aHLinkItem.SetURL( pURLField->GetURL() );
389  aHLinkItem.SetTargetFrame( pURLField->GetTargetFrame() );
390  bField = true;
391  }
392 
393  if (!bField)
394  {
395  // use selected text as name for urls
396  OUString sReturn = pOutView->GetSelected();
397  sal_Int32 nLen = std::min<sal_Int32>(sReturn.getLength(), 255);
398  sReturn = sReturn.copy(0, nLen);
399  aHLinkItem.SetName(comphelper::string::stripEnd(sReturn, ' '));
400  }
401  }
402  rSet.Put(aHLinkItem);
403  }
404 
405  if (rSet.GetItemState(SID_OPEN_HYPERLINK) != SfxItemState::UNKNOWN
406  || rSet.GetItemState(SID_EDIT_HYPERLINK) != SfxItemState::UNKNOWN
407  || rSet.GetItemState(SID_COPY_HYPERLINK_LOCATION) != SfxItemState::UNKNOWN
408  || rSet.GetItemState(SID_REMOVE_HYPERLINK) != SfxItemState::UNKNOWN)
409  {
410  SdrView* pView = mrViewData.GetScDrawView();
412  {
413  rSet.DisableItem( SID_OPEN_HYPERLINK );
414  rSet.DisableItem( SID_EDIT_HYPERLINK );
415  rSet.DisableItem( SID_COPY_HYPERLINK_LOCATION );
416  rSet.DisableItem( SID_REMOVE_HYPERLINK );
417  }
418  }
419 
420  if( rSet.GetItemState( SID_TRANSLITERATE_HALFWIDTH ) != SfxItemState::UNKNOWN )
421  ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_HALFWIDTH );
422  if( rSet.GetItemState( SID_TRANSLITERATE_FULLWIDTH ) != SfxItemState::UNKNOWN )
423  ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_FULLWIDTH );
424  if( rSet.GetItemState( SID_TRANSLITERATE_HIRAGANA ) != SfxItemState::UNKNOWN )
425  ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_HIRAGANA );
426  if( rSet.GetItemState( SID_TRANSLITERATE_KATAKANA ) != SfxItemState::UNKNOWN )
427  ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_KATAKANA );
428 
429  if ( rSet.GetItemState( SID_ENABLE_HYPHENATION ) != SfxItemState::UNKNOWN )
430  {
431  SdrView* pView = mrViewData.GetScDrawView();
432  SfxItemSet aAttrs( pView->GetModel()->GetItemPool() );
433  pView->GetAttributes( aAttrs );
434  if( aAttrs.GetItemState( EE_PARA_HYPHENATE ) >= SfxItemState::DEFAULT )
435  {
436  bool bValue = aAttrs.Get( EE_PARA_HYPHENATE ).GetValue();
437  rSet.Put( SfxBoolItem( SID_ENABLE_HYPHENATION, bValue ) );
438  }
439  }
440 
441  if ( rSet.GetItemState( SID_THES ) != SfxItemState::UNKNOWN ||
442  rSet.GetItemState( SID_THESAURUS ) != SfxItemState::UNKNOWN )
443  {
444  SdrView * pView = mrViewData.GetScDrawView();
445  OutlinerView* pOutView = pView->GetTextEditOutlinerView();
446 
447  OUString aStatusVal;
448  LanguageType nLang = LANGUAGE_NONE;
449  bool bIsLookUpWord = false;
450  if ( pOutView )
451  {
452  EditView& rEditView = pOutView->GetEditView();
453  bIsLookUpWord = GetStatusValueForThesaurusFromContext( aStatusVal, nLang, rEditView );
454  }
455  rSet.Put( SfxStringItem( SID_THES, aStatusVal ) );
456 
457  // disable thesaurus main menu and context menu entry if there is nothing to look up
458  bool bCanDoThesaurus = ScModule::HasThesaurusLanguage( nLang );
459  if (!bIsLookUpWord || !bCanDoThesaurus)
460  rSet.DisableItem( SID_THES );
461  if (!bCanDoThesaurus)
462  rSet.DisableItem( SID_THESAURUS );
463  }
464 
465  if (GetObjectShell()->isContentExtractionLocked())
466  {
467  rSet.DisableItem(SID_COPY);
468  rSet.DisableItem(SID_CUT);
469  }
470 }
471 
472 IMPL_LINK( ScDrawTextObjectBar, ClipboardChanged, TransferableDataHelper*, pDataHelper, void )
473 {
474  bPastePossible = ( pDataHelper->HasFormat( SotClipboardFormatId::STRING ) || pDataHelper->HasFormat( SotClipboardFormatId::RTF )
475  || pDataHelper->HasFormat( SotClipboardFormatId::RICHTEXT ) );
476 
477  SfxBindings& rBindings = mrViewData.GetBindings();
478  rBindings.Invalidate( SID_PASTE );
479  rBindings.Invalidate( SID_PASTE_SPECIAL );
480  rBindings.Invalidate( SID_PASTE_UNFORMATTED );
481  rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS );
482 }
483 
485 {
486  SdrView* pView = mrViewData.GetScDrawView();
487  if ( !pView->GetTextEditOutlinerView() )
488  {
489  GetGlobalClipState( rSet );
490  return;
491  }
492 
493  if ( !mxClipEvtLstnr.is() )
494  {
495  // create listener
496  mxClipEvtLstnr = new TransferableClipboardListener( LINK( this, ScDrawTextObjectBar, ClipboardChanged ) );
498  mxClipEvtLstnr->AddListener( pWin );
499 
500  // get initial state
502  bPastePossible = ( aDataHelper.HasFormat( SotClipboardFormatId::STRING ) || aDataHelper.HasFormat( SotClipboardFormatId::RTF )
503  || aDataHelper.HasFormat( SotClipboardFormatId::RICHTEXT ) );
504  }
505 
506  SfxWhichIter aIter( rSet );
507  sal_uInt16 nWhich = aIter.FirstWhich();
508  while (nWhich)
509  {
510  switch (nWhich)
511  {
512  case SID_PASTE:
513  case SID_PASTE_SPECIAL:
514  case SID_PASTE_UNFORMATTED:
515  if( !bPastePossible )
516  rSet.DisableItem( nWhich );
517  break;
518  case SID_CLIPBOARD_FORMAT_ITEMS:
519  if ( bPastePossible )
520  {
521  SvxClipboardFormatItem aFormats( SID_CLIPBOARD_FORMAT_ITEMS );
522  TransferableDataHelper aDataHelper(
524 
525  if ( aDataHelper.HasFormat( SotClipboardFormatId::STRING ) )
526  aFormats.AddClipbrdFormat( SotClipboardFormatId::STRING );
527  if ( aDataHelper.HasFormat( SotClipboardFormatId::RTF ) )
528  aFormats.AddClipbrdFormat( SotClipboardFormatId::RTF );
529  if ( aDataHelper.HasFormat( SotClipboardFormatId::RICHTEXT ) )
530  aFormats.AddClipbrdFormat( SotClipboardFormatId::RICHTEXT );
531 
532  rSet.Put( aFormats );
533  }
534  else
535  rSet.DisableItem( nWhich );
536  break;
537  }
538  nWhich = aIter.NextWhich();
539  }
540 }
541 
542 // Attributes
543 
545 {
546  // Underline
547 
548  SdrView* pView = mrViewData.GetScDrawView();
549 
550  sal_uInt16 nSlot = rReq.GetSlot();
551 
552  SfxItemSet aSet( pView->GetDefaultAttr() );
553 
554  SfxItemSet aViewAttr(pView->GetModel()->GetItemPool());
555  pView->GetAttributes(aViewAttr);
556 
557  // Underline
558  FontLineStyle eOld = aViewAttr.Get(EE_CHAR_UNDERLINE).GetLineStyle();
559  FontLineStyle eNew = eOld;
560  switch (nSlot)
561  {
562  case SID_ULINE_VAL_NONE:
563  eNew = LINESTYLE_NONE;
564  break;
565  case SID_ULINE_VAL_SINGLE:
566  eNew = ( eOld == LINESTYLE_SINGLE ) ? LINESTYLE_NONE : LINESTYLE_SINGLE;
567  break;
568  case SID_ULINE_VAL_DOUBLE:
569  eNew = ( eOld == LINESTYLE_DOUBLE ) ? LINESTYLE_NONE : LINESTYLE_DOUBLE;
570  break;
571  case SID_ULINE_VAL_DOTTED:
572  eNew = ( eOld == LINESTYLE_DOTTED ) ? LINESTYLE_NONE : LINESTYLE_DOTTED;
573  break;
574  default:
575  break;
576  }
577  aSet.Put( SvxUnderlineItem( eNew, EE_CHAR_UNDERLINE ) );
578 
579  pView->SetAttributes( aSet );
580  rReq.Done();
582 }
583 
584 static void lcl_RemoveFields( OutlinerView& rOutView )
585 {
587 
588  Outliner* pOutliner = rOutView.GetOutliner();
589  if (!pOutliner) return;
590 
591  ESelection aOldSel = rOutView.GetSelection();
592  ESelection aSel = aOldSel;
593  aSel.Adjust();
594  sal_Int32 nNewEnd = aSel.nEndPos;
595 
596  bool bUpdate = pOutliner->GetUpdateMode();
597  bool bChanged = false;
598 
600  EditEngine& rEditEng = const_cast<EditEngine&>(pOutliner->GetEditEngine());
601 
602  sal_Int32 nParCount = pOutliner->GetParagraphCount();
603  for (sal_Int32 nPar=0; nPar<nParCount; nPar++)
604  if ( nPar >= aSel.nStartPara && nPar <= aSel.nEndPara )
605  {
606  std::vector<sal_Int32> aPortions;
607  rEditEng.GetPortions( nPar, aPortions );
608 
609  for ( size_t nPos = aPortions.size(); nPos; )
610  {
611  --nPos;
612  sal_Int32 nEnd = aPortions[ nPos ];
613  sal_Int32 nStart = nPos ? aPortions[ nPos - 1 ] : 0;
614  // fields are single characters
615  if ( nEnd == nStart+1 &&
616  ( nPar > aSel.nStartPara || nStart >= aSel.nStartPos ) &&
617  ( nPar < aSel.nEndPara || nEnd <= aSel.nEndPos ) )
618  {
619  ESelection aFieldSel( nPar, nStart, nPar, nEnd );
620  SfxItemSet aSet = rEditEng.GetAttribs( aFieldSel );
621  if ( aSet.GetItemState( EE_FEATURE_FIELD ) == SfxItemState::SET )
622  {
623  if (!bChanged)
624  {
625  if (bUpdate)
626  pOutliner->SetUpdateMode( false );
627  OUString aName = ScResId( STR_UNDO_DELETECONTENTS );
628  ViewShellId nViewShellId(-1);
630  nViewShellId = pViewSh->GetViewShellId();
631  pOutliner->GetUndoManager().EnterListAction( aName, aName, 0, nViewShellId );
632  bChanged = true;
633  }
634 
635  OUString aFieldText = rEditEng.GetText( aFieldSel );
636  pOutliner->QuickInsertText( aFieldText, aFieldSel );
637  if ( nPar == aSel.nEndPara )
638  {
639  nNewEnd = nNewEnd + aFieldText.getLength();
640  --nNewEnd;
641  }
642  }
643  }
644  }
645  }
646 
647  if (bUpdate && bChanged)
648  {
649  pOutliner->GetUndoManager().LeaveListAction();
650  pOutliner->SetUpdateMode( true );
651  }
652 
653  if ( aOldSel == aSel ) // aSel is adjusted
654  aOldSel.nEndPos = nNewEnd;
655  else
656  aOldSel.nStartPos = nNewEnd; // if aOldSel is backwards
657  rOutView.SetSelection( aOldSel );
658 }
659 
661 {
662  SdrView* pView = mrViewData.GetScDrawView();
663  const SfxItemSet* pArgs = rReq.GetArgs();
664  sal_uInt16 nSlot = rReq.GetSlot();
665 
666  SfxItemSet aEditAttr( pView->GetModel()->GetItemPool() );
667  pView->GetAttributes( aEditAttr );
668  SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() );
669 
670  bool bSet = true;
671  switch ( nSlot )
672  {
673  case SID_ALIGNLEFT:
674  case SID_ALIGN_ANY_LEFT:
675  case SID_ATTR_PARA_ADJUST_LEFT:
676  aNewAttr.Put( SvxAdjustItem( SvxAdjust::Left, EE_PARA_JUST ) );
677  break;
678 
679  case SID_ALIGNCENTERHOR:
680  case SID_ALIGN_ANY_HCENTER:
681  case SID_ATTR_PARA_ADJUST_CENTER:
682  aNewAttr.Put( SvxAdjustItem( SvxAdjust::Center, EE_PARA_JUST ) );
683  break;
684 
685  case SID_ALIGNRIGHT:
686  case SID_ALIGN_ANY_RIGHT:
687  case SID_ATTR_PARA_ADJUST_RIGHT:
688  aNewAttr.Put( SvxAdjustItem( SvxAdjust::Right, EE_PARA_JUST ) );
689  break;
690 
691  case SID_ALIGNBLOCK:
692  case SID_ALIGN_ANY_JUSTIFIED:
693  case SID_ATTR_PARA_ADJUST_BLOCK:
694  aNewAttr.Put( SvxAdjustItem( SvxAdjust::Block, EE_PARA_JUST ) );
695  break;
696 
697  case SID_ATTR_PARA_LINESPACE_10:
698  {
700  aItem.SetPropLineSpace( 100 );
701  aNewAttr.Put( aItem );
702  }
703  break;
704 
705  case SID_ATTR_PARA_LINESPACE_15:
706  {
708  aItem.SetPropLineSpace( 150 );
709  aNewAttr.Put( aItem );
710  }
711  break;
712 
713  case SID_ATTR_PARA_LINESPACE_20:
714  {
716  aItem.SetPropLineSpace( 200 );
717  aNewAttr.Put( aItem );
718  }
719  break;
720 
721  case SID_SET_SUPER_SCRIPT:
722  {
724  SvxEscapement eEsc = static_cast<SvxEscapement>(aEditAttr.Get( EE_CHAR_ESCAPEMENT ).GetEnumValue());
725 
726  if( eEsc == SvxEscapement::Superscript )
727  aItem.SetEscapement( SvxEscapement::Off );
728  else
729  aItem.SetEscapement( SvxEscapement::Superscript );
730  aNewAttr.Put( aItem );
731  }
732  break;
733 
734  case SID_SET_SUB_SCRIPT:
735  {
737  SvxEscapement eEsc = static_cast<SvxEscapement>(aEditAttr.Get( EE_CHAR_ESCAPEMENT ).GetEnumValue());
738 
739  if( eEsc == SvxEscapement::Subscript )
740  aItem.SetEscapement( SvxEscapement::Off );
741  else
742  aItem.SetEscapement( SvxEscapement::Subscript );
743  aNewAttr.Put( aItem );
744  }
745  break;
746 
747  case SID_TABLE_VERT_NONE:
748  case SID_TABLE_VERT_CENTER:
749  case SID_TABLE_VERT_BOTTOM:
750  {
752  if (nSlot == SID_TABLE_VERT_CENTER)
754  else if (nSlot == SID_TABLE_VERT_BOTTOM)
756  aNewAttr.Put(SdrTextVertAdjustItem(eTVA));
757  }
758  break;
759 
760  case SID_PARASPACE_INCREASE:
761  case SID_PARASPACE_DECREASE:
762  {
763  SvxULSpaceItem aULSpace( aEditAttr.Get( EE_PARA_ULSPACE ) );
764  sal_uInt16 nUpper = aULSpace.GetUpper();
765  sal_uInt16 nLower = aULSpace.GetLower();
766 
767  if ( nSlot == SID_PARASPACE_INCREASE )
768  {
769  nUpper += 100;
770  nLower += 100;
771  }
772  else
773  {
774  nUpper = std::max< sal_Int16 >( nUpper - 100, 0 );
775  nLower = std::max< sal_Int16 >( nLower - 100, 0 );
776  }
777 
778  aULSpace.SetUpper( nUpper );
779  aULSpace.SetLower( nLower );
780  aNewAttr.Put( aULSpace );
781  }
782  break;
783 
784  default:
785  bSet = false;
786  }
787 
788  bool bDone = true;
789  bool bArgsInReq = ( pArgs != nullptr );
790 
791  if ( !bArgsInReq )
792  {
793  switch ( nSlot )
794  {
795  case SID_TEXT_STANDARD: // delete hard text attributes
796  {
797  OutlinerView* pOutView = pView->IsTextEdit() ?
798  pView->GetTextEditOutlinerView() : nullptr;
799  if ( pOutView )
800  pOutView->Paint( tools::Rectangle() );
801 
802  SfxItemSet aEmptyAttr( *aEditAttr.GetPool(), svl::Items<EE_ITEMS_START, EE_ITEMS_END>{} );
803  pView->SetAttributes( aEmptyAttr, true );
804 
805  if ( pOutView )
806  {
807  lcl_RemoveFields( *pOutView );
808  pOutView->ShowCursor();
809  }
810 
811  rReq.Done( aEmptyAttr );
813  bDone = false; // already happened here
814  }
815  break;
816 
817  case SID_GROW_FONT_SIZE:
818  case SID_SHRINK_FONT_SIZE:
819  {
820  OutlinerView* pOutView = pView->IsTextEdit() ?
821  pView->GetTextEditOutlinerView() : nullptr;
822  if ( pOutView )
823  {
824  const SvxFontListItem* pFontListItem = static_cast< const SvxFontListItem* >
825  ( SfxObjectShell::Current()->GetItem( SID_ATTR_CHAR_FONTLIST ) );
826  const FontList* pFontList = pFontListItem ? pFontListItem->GetFontList() : nullptr;
827  pOutView->GetEditView().ChangeFontSize( nSlot == SID_GROW_FONT_SIZE, pFontList );
828  mrViewData.GetBindings().Invalidate( SID_ATTR_CHAR_FONTHEIGHT );
829  bDone = false;
830  }
831  }
832  break;
833 
834  case SID_CHAR_DLG_EFFECT:
835  case SID_CHAR_DLG: // dialog button
836  case SID_ATTR_CHAR_FONT: // Controller not shown
837  case SID_ATTR_CHAR_FONTHEIGHT:
838  bDone = ExecuteCharDlg( aEditAttr, aNewAttr , nSlot);
839  break;
840 
841  case SID_PARA_DLG:
842  bDone = ExecuteParaDlg( aEditAttr, aNewAttr );
843  break;
844 
845  case SID_ATTR_CHAR_WEIGHT:
846  aNewAttr.Put( aEditAttr.Get( EE_CHAR_WEIGHT ) );
847  break;
848 
849  case SID_ATTR_CHAR_POSTURE:
850  aNewAttr.Put( aEditAttr.Get( EE_CHAR_ITALIC ) );
851  break;
852 
853  case SID_ATTR_CHAR_UNDERLINE:
854  aNewAttr.Put( aEditAttr.Get( EE_CHAR_UNDERLINE ) );
855  break;
856 
857  case SID_ATTR_CHAR_OVERLINE:
858  aNewAttr.Put( aEditAttr.Get( EE_CHAR_OVERLINE ) );
859  break;
860 
861  case SID_ATTR_CHAR_CONTOUR:
862  aNewAttr.Put( aEditAttr.Get( EE_CHAR_OUTLINE ) );
863  break;
864 
865  case SID_ATTR_CHAR_SHADOWED:
866  aNewAttr.Put( aEditAttr.Get( EE_CHAR_SHADOW ) );
867  break;
868 
869  case SID_ATTR_CHAR_STRIKEOUT:
870  aNewAttr.Put( aEditAttr.Get( EE_CHAR_STRIKEOUT ) );
871  break;
872 
873  case SID_DRAWTEXT_ATTR_DLG:
874  {
877 
878  bDone = ( RET_OK == pDlg->Execute() );
879 
880  if ( bDone )
881  aNewAttr.Put( *pDlg->GetOutputItemSet() );
882 
883  pDlg.disposeAndClear();
884 
885  SfxBindings& rBindings = mrViewData.GetBindings();
886  rBindings.Invalidate( SID_TABLE_VERT_NONE );
887  rBindings.Invalidate( SID_TABLE_VERT_CENTER );
888  rBindings.Invalidate( SID_TABLE_VERT_BOTTOM );
889  }
890  break;
891  }
892  }
893 
894  if ( bSet || bDone )
895  {
896  rReq.Done( aNewAttr );
897  pArgs = rReq.GetArgs();
898  }
899 
900  if ( !pArgs )
901  return;
902 
903  if ( bArgsInReq &&
904  ( nSlot == SID_ATTR_CHAR_FONT || nSlot == SID_ATTR_CHAR_FONTHEIGHT ||
905  nSlot == SID_ATTR_CHAR_WEIGHT || nSlot == SID_ATTR_CHAR_POSTURE ) )
906  {
907  // font items from toolbox controller have to be applied for the right script type
908 
909  // #i78017 establish the same behaviour as in Writer
910  SvtScriptType nScript = SvtScriptType::LATIN | SvtScriptType::ASIAN | SvtScriptType::COMPLEX;
911  if (nSlot == SID_ATTR_CHAR_FONT)
912  nScript = pView->GetScriptType();
913 
914  SfxItemPool& rPool = GetPool();
915  SvxScriptSetItem aSetItem( nSlot, rPool );
916  sal_uInt16 nWhich = rPool.GetWhich( nSlot );
917  aSetItem.PutItemForScriptType( nScript, pArgs->Get( nWhich ) );
918 
919  pView->SetAttributes( aSetItem.GetItemSet() );
920  }
921  else if( nSlot == SID_ATTR_PARA_LRSPACE )
922  {
923  sal_uInt16 nId = SID_ATTR_PARA_LRSPACE;
924  const SvxLRSpaceItem& rItem = static_cast<const SvxLRSpaceItem&>(
925  pArgs->Get( nId ));
927  nId = EE_PARA_LRSPACE;
928  SvxLRSpaceItem aLRSpaceItem( rItem.GetLeft(),
929  rItem.GetRight(), rItem.GetTextLeft(),
930  rItem.GetTextFirstLineOffset(), nId );
931  aAttr.Put( aLRSpaceItem );
932  pView->SetAttributes( aAttr );
933  }
934  else if( nSlot == SID_ATTR_PARA_LINESPACE )
935  {
936  SvxLineSpacingItem aLineSpaceItem = static_cast<const SvxLineSpacingItem&>(pArgs->Get(
937  GetPool().GetWhich(nSlot)));
939  aAttr.Put( aLineSpaceItem );
940  pView->SetAttributes( aAttr );
941  }
942  else if( nSlot == SID_ATTR_PARA_ULSPACE )
943  {
944  SvxULSpaceItem aULSpaceItem = static_cast<const SvxULSpaceItem&>(pArgs->Get(
945  GetPool().GetWhich(nSlot)));
947  aULSpaceItem.SetWhich(EE_PARA_ULSPACE);
948  aAttr.Put( aULSpaceItem );
949  pView->SetAttributes( aAttr );
950  }
951  else
952  {
953  // use args directly
954  pView->SetAttributes( *pArgs );
955  }
957 }
958 
960 {
961  if ( IsNoteEdit() )
962  {
963  // issue 21255 - Notes now support rich text formatting.
964  }
965 
966  SvtLanguageOptions aLangOpt;
967  bool bDisableCTLFont = !aLangOpt.IsCTLFontEnabled();
968  bool bDisableVerticalText = !aLangOpt.IsVerticalTextEnabled();
969 
970  SdrView* pView = mrViewData.GetScDrawView();
971  SfxItemSet aAttrSet(pView->GetModel()->GetItemPool());
972  pView->GetAttributes(aAttrSet);
973 
974  // direct attributes
975 
976  rDestSet.Put( aAttrSet );
977 
978  // choose font info according to selection script type
979 
980  SvtScriptType nScript = pView->GetScriptType();
981 
982  // #i55929# input-language-dependent script type (depends on input language if nothing selected)
983  SvtScriptType nInputScript = nScript;
984  OutlinerView* pOutView = pView->GetTextEditOutlinerView();
985  if (pOutView && !pOutView->GetSelection().HasRange())
986  {
988  if (nInputLang != LANGUAGE_DONTKNOW && nInputLang != LANGUAGE_SYSTEM)
989  nInputScript = SvtLanguageOptions::GetScriptTypeOfLanguage( nInputLang );
990  }
991 
992  // #i55929# according to spec, nInputScript is used for font and font height only
993  if ( rDestSet.GetItemState( EE_CHAR_FONTINFO ) != SfxItemState::UNKNOWN )
994  ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_FONTINFO, nInputScript );
995  if ( rDestSet.GetItemState( EE_CHAR_FONTHEIGHT ) != SfxItemState::UNKNOWN )
996  ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_FONTHEIGHT, nInputScript );
997  if ( rDestSet.GetItemState( EE_CHAR_WEIGHT ) != SfxItemState::UNKNOWN )
998  ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_WEIGHT, nScript );
999  if ( rDestSet.GetItemState( EE_CHAR_ITALIC ) != SfxItemState::UNKNOWN )
1000  ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_ITALIC, nScript );
1001  // Alignment
1002 
1003  SvxAdjust eAdj = aAttrSet.Get(EE_PARA_JUST).GetAdjust();
1004  switch( eAdj )
1005  {
1006  case SvxAdjust::Left:
1007  {
1008  rDestSet.Put( SfxBoolItem( SID_ALIGNLEFT, true ) );
1009  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_LEFT, true ) );
1010  }
1011  break;
1012  case SvxAdjust::Center:
1013  {
1014  rDestSet.Put( SfxBoolItem( SID_ALIGNCENTERHOR, true ) );
1015  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_CENTER, true ) );
1016  }
1017  break;
1018  case SvxAdjust::Right:
1019  {
1020  rDestSet.Put( SfxBoolItem( SID_ALIGNRIGHT, true ) );
1021  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, true ) );
1022  }
1023  break;
1024  case SvxAdjust::Block:
1025  {
1026  rDestSet.Put( SfxBoolItem( SID_ALIGNBLOCK, true ) );
1027  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, true ) );
1028  }
1029  break;
1030  default:
1031  {
1032  // added to avoid warnings
1033  }
1034  }
1035  // pseudo slots for Format menu
1036  rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_LEFT, eAdj == SvxAdjust::Left ) );
1037  rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_HCENTER, eAdj == SvxAdjust::Center ) );
1038  rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_RIGHT, eAdj == SvxAdjust::Right ) );
1039  rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_JUSTIFIED, eAdj == SvxAdjust::Block ) );
1040 
1041  SvxLRSpaceItem aLR = aAttrSet.Get( EE_PARA_LRSPACE );
1042  aLR.SetWhich(SID_ATTR_PARA_LRSPACE);
1043  rDestSet.Put(aLR);
1044  Invalidate( SID_ATTR_PARA_LRSPACE );
1045  SfxItemState eState = aAttrSet.GetItemState( EE_PARA_LRSPACE );
1046  if ( eState == SfxItemState::DONTCARE )
1047  rDestSet.InvalidateItem(SID_ATTR_PARA_LRSPACE);
1048  //xuxu for Line Space
1049  SvxLineSpacingItem aLineSP = aAttrSet.Get( EE_PARA_SBL );
1050  aLineSP.SetWhich(SID_ATTR_PARA_LINESPACE);
1051  rDestSet.Put(aLineSP);
1052  Invalidate(SID_ATTR_PARA_LINESPACE);
1053  eState = aAttrSet.GetItemState( EE_PARA_SBL );
1054  if ( eState == SfxItemState::DONTCARE )
1055  rDestSet.InvalidateItem(SID_ATTR_PARA_LINESPACE);
1056  //xuxu for UL Space
1057  SvxULSpaceItem aULSP = aAttrSet.Get( EE_PARA_ULSPACE );
1058  aULSP.SetWhich(SID_ATTR_PARA_ULSPACE);
1059  rDestSet.Put(aULSP);
1060  Invalidate(SID_ATTR_PARA_ULSPACE);
1061  Invalidate(SID_PARASPACE_INCREASE);
1062  Invalidate(SID_PARASPACE_DECREASE);
1063  eState = aAttrSet.GetItemState( EE_PARA_ULSPACE );
1064  if( eState >= SfxItemState::DEFAULT )
1065  {
1066  if ( !aULSP.GetUpper() && !aULSP.GetLower() )
1067  rDestSet.DisableItem( SID_PARASPACE_DECREASE );
1068  }
1069  else
1070  {
1071  rDestSet.DisableItem( SID_PARASPACE_INCREASE );
1072  rDestSet.DisableItem( SID_PARASPACE_DECREASE );
1073  rDestSet.InvalidateItem(SID_ATTR_PARA_ULSPACE);
1074  }
1075 
1076  // Line spacing
1077 
1078  sal_uInt16 nLineSpace = aAttrSet.Get( EE_PARA_SBL ).GetPropLineSpace();
1079  switch( nLineSpace )
1080  {
1081  case 100:
1082  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_10, true ) );
1083  break;
1084  case 150:
1085  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_15, true ) );
1086  break;
1087  case 200:
1088  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_20, true ) );
1089  break;
1090  }
1091 
1092  // super-/subscript
1093  SvxEscapement eEsc = static_cast<SvxEscapement>(aAttrSet.Get( EE_CHAR_ESCAPEMENT ).GetEnumValue());
1094  rDestSet.Put(SfxBoolItem(SID_SET_SUPER_SCRIPT, eEsc == SvxEscapement::Superscript));
1095  rDestSet.Put(SfxBoolItem(SID_SET_SUB_SCRIPT, eEsc == SvxEscapement::Subscript));
1096 
1097  // Underline
1098  eState = aAttrSet.GetItemState( EE_CHAR_UNDERLINE );
1099  if ( eState == SfxItemState::DONTCARE )
1100  {
1101  rDestSet.InvalidateItem( SID_ULINE_VAL_NONE );
1102  rDestSet.InvalidateItem( SID_ULINE_VAL_SINGLE );
1103  rDestSet.InvalidateItem( SID_ULINE_VAL_DOUBLE );
1104  rDestSet.InvalidateItem( SID_ULINE_VAL_DOTTED );
1105  }
1106  else
1107  {
1108  FontLineStyle eUnderline = aAttrSet.Get(EE_CHAR_UNDERLINE).GetLineStyle();
1109  rDestSet.Put(SfxBoolItem(SID_ULINE_VAL_SINGLE, eUnderline == LINESTYLE_SINGLE));
1110  rDestSet.Put(SfxBoolItem(SID_ULINE_VAL_DOUBLE, eUnderline == LINESTYLE_DOUBLE));
1111  rDestSet.Put(SfxBoolItem(SID_ULINE_VAL_DOTTED, eUnderline == LINESTYLE_DOTTED));
1112  rDestSet.Put(SfxBoolItem(SID_ULINE_VAL_NONE, eUnderline == LINESTYLE_NONE));
1113  }
1114 
1115  // horizontal / vertical
1116 
1117  bool bLeftToRight = true;
1118 
1119  SdrOutliner* pOutl = pView->GetTextEditOutliner();
1120  if( pOutl )
1121  {
1122  if( pOutl->IsVertical() )
1123  bLeftToRight = false;
1124  }
1125  else
1126  bLeftToRight = aAttrSet.Get( SDRATTR_TEXTDIRECTION ).GetValue() == css::text::WritingMode_LR_TB;
1127 
1128  if ( bDisableVerticalText )
1129  {
1130  rDestSet.DisableItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT );
1131  rDestSet.DisableItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM );
1132  }
1133  else
1134  {
1135  rDestSet.Put( SfxBoolItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT, bLeftToRight ) );
1136  rDestSet.Put( SfxBoolItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM, !bLeftToRight ) );
1137  }
1138 
1139  // left-to-right or right-to-left
1140 
1141  if ( !bLeftToRight || bDisableCTLFont )
1142  {
1143  // disabled if vertical
1144  rDestSet.DisableItem( SID_ATTR_PARA_LEFT_TO_RIGHT );
1145  rDestSet.DisableItem( SID_ATTR_PARA_RIGHT_TO_LEFT );
1146  }
1147  else if ( aAttrSet.GetItemState( EE_PARA_WRITINGDIR ) == SfxItemState::DONTCARE )
1148  {
1149  rDestSet.InvalidateItem( SID_ATTR_PARA_LEFT_TO_RIGHT );
1150  rDestSet.InvalidateItem( SID_ATTR_PARA_RIGHT_TO_LEFT );
1151  }
1152  else
1153  {
1154  SvxFrameDirection eAttrDir = aAttrSet.Get( EE_PARA_WRITINGDIR ).GetValue();
1155  if ( eAttrDir == SvxFrameDirection::Environment )
1156  {
1157  // get "environment" direction from page style
1158  if ( mrViewData.GetDocument().GetEditTextDirection( mrViewData.GetTabNo() ) == EEHorizontalTextDirection::R2L )
1159  eAttrDir = SvxFrameDirection::Horizontal_RL_TB;
1160  else
1161  eAttrDir = SvxFrameDirection::Horizontal_LR_TB;
1162  }
1163  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LEFT_TO_RIGHT, ( eAttrDir == SvxFrameDirection::Horizontal_LR_TB ) ) );
1164  rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_RIGHT_TO_LEFT, ( eAttrDir == SvxFrameDirection::Horizontal_RL_TB ) ) );
1165  }
1166 }
1167 
1169 {
1171  if ( nType == TransliterationFlags::NONE )
1172  return;
1173 
1174  ScDrawView* pView = mrViewData.GetScDrawView();
1175  OutlinerView* pOutView = pView->GetTextEditOutlinerView();
1176  if ( pOutView )
1177  {
1178  // change selected text in object
1179  pOutView->TransliterateText( nType );
1180  }
1181  else
1182  {
1184  }
1185 }
1186 
1188 {
1189  SfxWhichIter aIter( rSet );
1190  sal_uInt16 nWhich = aIter.FirstWhich();
1191 
1192  SdrView* pView = mrViewData.GetScDrawView();
1193 
1194  SfxItemSet aEditAttr(pView->GetModel()->GetItemPool());
1195  pView->GetAttributes(aEditAttr);
1196  //SfxItemSet aAttrs( *aEditAttr.GetPool(), aEditAttr.GetRanges() );
1197 
1198  while ( nWhich )
1199  {
1200  sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich)
1201  ? GetPool().GetSlotId(nWhich)
1202  : nWhich;
1203  switch ( nSlotId )
1204  {
1205  case SID_TABLE_VERT_NONE:
1206  case SID_TABLE_VERT_CENTER:
1207  case SID_TABLE_VERT_BOTTOM:
1208  bool bContour = false;
1209  SfxItemState eConState = aEditAttr.GetItemState( SDRATTR_TEXT_CONTOURFRAME );
1210  if( eConState != SfxItemState::DONTCARE )
1211  {
1212  bContour = aEditAttr.Get( SDRATTR_TEXT_CONTOURFRAME ).GetValue();
1213  }
1214  if (bContour) break;
1215 
1216  SfxItemState eVState = aEditAttr.GetItemState( SDRATTR_TEXT_VERTADJUST );
1217  //SfxItemState eHState = aAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST );
1218 
1219  //if(SfxItemState::DONTCARE != eVState && SfxItemState::DONTCARE != eHState)
1220  if(SfxItemState::DONTCARE != eVState)
1221  {
1222  SdrTextVertAdjust eTVA = aEditAttr.Get(SDRATTR_TEXT_VERTADJUST).GetValue();
1223  bool bSet = (nSlotId == SID_TABLE_VERT_NONE && eTVA == SDRTEXTVERTADJUST_TOP) ||
1224  (nSlotId == SID_TABLE_VERT_CENTER && eTVA == SDRTEXTVERTADJUST_CENTER) ||
1225  (nSlotId == SID_TABLE_VERT_BOTTOM && eTVA == SDRTEXTVERTADJUST_BOTTOM);
1226  rSet.Put(SfxBoolItem(nSlotId, bSet));
1227  }
1228  else
1229  {
1230  rSet.Put(SfxBoolItem(nSlotId, false));
1231  }
1232  break;
1233  }
1234  nWhich = aIter.NextWhich();
1235  }
1236 }
1237 
1238 /* 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:544
sal_Int32 nStartPara
static void HideDisabledSlot(SfxItemSet &rSet, SfxBindings &rBindings, sal_uInt16 nSlotId)
Definition: viewutil.cxx:285
SDRTEXTVERTADJUST_TOP
EESpellState StartThesaurus()
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:660
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:395
SvxFrameDirection
void Done(bool bRemove=false)
sal_Int32 GetParagraphCount() const
ScDocument & GetDocument() const
Definition: viewdata.hxx:380
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:484
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:38
Mode eMode
const SfxItemSet & GetDefaultAttr() const
void SetUndoManager(SfxUndoManager *pNewUndoMgr)
SotClipboardFormatId
static SvtScriptType GetScriptTypeOfLanguage(LanguageType nLang)
sal_Int32 nEndPos
virtual SvtScriptType GetScriptType() const
ScDrawView * GetScDrawView()
Definition: viewdata.cxx:3074
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:357
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:1168
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:472
SfxBindings & GetBindings()
Definition: viewdata.cxx:3034
#define LANGUAGE_SYSTEM
void InvalidateDrawTextAttrs()
Definition: drawview.cxx:160
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:3062
#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
void SetName(const OUString &rName)
void SetName(const OUString &rName)
weld::Window * GetDialogParent()
Definition: viewdata.cxx:3056
rtl::Reference< TransferableClipboardListener > mxClipEvtLstnr
Definition: drtxtob.hxx:39
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
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:354
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:1020
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:3040
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:1187
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:892
static void ExecuteCharMap(const SvxFontItem &rOldFont, SfxViewFrame &rFrame)
Definition: viewutil.cxx:320
void GetState(SfxItemSet &rSet)
Definition: drtxtob.cxx:359
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:358
bool IsUndoEnabled() const
Definition: document.hxx:1528
SfxItemSet GetAttribs()
void GetAttrState(SfxItemSet &rSet)
Definition: drtxtob.cxx:959
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:584
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)