1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #include <comphelper/string.hxx>
21 #include <scitems.hxx>
23 #include <editeng/adjustitem.hxx>
24 #include <svx/clipfmtitem.hxx>
25 #include <editeng/contouritem.hxx>
26 #include <editeng/crossedoutitem.hxx>
27 #include <editeng/eeitem.hxx>
28 #include <editeng/editeng.hxx>
29 #include <editeng/editview.hxx>
30 #include <editeng/escapementitem.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>
38 #include <editeng/urlfieldhelper.hxx>
39 #include <svx/hlnkitem.hxx>
40 #include <svx/svdoutl.hxx>
41 #include <svx/sdooitm.hxx>
42 #include <editeng/postitem.hxx>
43 #include <editeng/scripttypeitem.hxx>
44 #include <editeng/shdditem.hxx>
45 #include <editeng/udlnitem.hxx>
46 #include <editeng/wghtitem.hxx>
47 #include <editeng/writingmodeitem.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>
59 #include <svx/svxdlg.hxx>
60 #include <vcl/EnumContext.hxx>
61 #include <vcl/unohelp2.hxx>
64 #include <globstr.hrc>
65 #include <scresid.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>
75 #define ShellClass_ScDrawTextObjectBar
76 #include <scslots.hxx>
78 using namespace ::com::sun::star
;
80 SFX_IMPL_INTERFACE(ScDrawTextObjectBar
, SfxShell
)
82 void ScDrawTextObjectBar::InitInterface_Impl()
84 GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT
,
85 SfxVisibilityFlags::Standard
| SfxVisibilityFlags::Server
,
86 ToolbarId::Text_Toolbox_Sc
);
88 GetStaticInterface()->RegisterPopupMenu("drawtext");
90 GetStaticInterface()->RegisterChildWindow(ScGetFontWorkId());
94 // disable not wanted accelerators
96 void ScDrawTextObjectBar::StateDisableItems( SfxItemSet
&rSet
)
98 SfxWhichIter
aIter(rSet
);
99 sal_uInt16 nWhich
= aIter
.FirstWhich();
103 rSet
.DisableItem( nWhich
);
104 nWhich
= aIter
.NextWhich();
108 ScDrawTextObjectBar::ScDrawTextObjectBar(ScViewData
& rData
) :
109 SfxShell(rData
.GetViewShell()),
111 bPastePossible(false)
113 SetPool( mrViewData
.GetScDrawView()->GetDefaultAttr().GetPool() );
115 // At the switching-over the UndoManager is changed to edit mode
116 SfxUndoManager
* pMgr
= mrViewData
.GetSfxDocShell()->GetUndoManager();
117 SetUndoManager( pMgr
);
118 if ( !mrViewData
.GetDocument().IsUndoEnabled() )
120 pMgr
->SetMaxUndoActionCount( 0 );
124 SfxShell::SetContextName(vcl::EnumContext::GetContextName(vcl::EnumContext::Context::DrawText
));
127 ScDrawTextObjectBar::~ScDrawTextObjectBar()
129 if ( mxClipEvtLstnr
.is() )
131 mxClipEvtLstnr
->RemoveListener( mrViewData
.GetActiveWin() );
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();
141 void ScDrawTextObjectBar::Execute( SfxRequest
&rReq
)
143 ScDrawView
* pView
= mrViewData
.GetScDrawView();
144 OutlinerView
* pOutView
= pView
->GetTextEditOutlinerView();
145 Outliner
* pOutliner
= pView
->GetTextEditOutliner();
147 if (!pOutView
|| !pOutliner
)
149 ExecuteGlobal( rReq
); // on whole objects
153 const SfxItemSet
* pReqArgs
= rReq
.GetArgs();
154 sal_uInt16 nSlot
= rReq
.GetSlot();
166 pOutView
->PasteSpecial();
169 case SID_CLIPBOARD_FORMAT_ITEMS
:
171 SotClipboardFormatId nFormat
= SotClipboardFormatId::NONE
;
172 const SfxPoolItem
* pItem
;
174 pReqArgs
->GetItemState(nSlot
, true, &pItem
) == SfxItemState::SET
&&
175 dynamic_cast<const SfxUInt32Item
*>( pItem
) != nullptr )
177 nFormat
= static_cast<SotClipboardFormatId
>(static_cast<const SfxUInt32Item
*>(pItem
)->GetValue());
180 if ( nFormat
!= SotClipboardFormatId::NONE
)
182 if (nFormat
== SotClipboardFormatId::STRING
)
185 pOutView
->PasteSpecial();
190 case SID_PASTE_SPECIAL
:
191 ExecutePasteContents( rReq
);
194 case SID_PASTE_UNFORMATTED
:
200 sal_Int32 nCount
= pOutliner
->GetParagraphCount();
201 ESelection
aSel( 0,0,nCount
,0 );
202 pOutView
->SetSelection( aSel
);
208 const SvxFontItem
& rItem
= pOutView
->GetAttribs().Get(EE_CHAR_FONTINFO
);
211 std::shared_ptr
<SvxFontItem
> aNewItem(std::make_shared
<SvxFontItem
>(EE_CHAR_FONTINFO
));
213 const SfxItemSet
*pArgs
= rReq
.GetArgs();
214 const SfxPoolItem
* pItem
= nullptr;
216 pArgs
->GetItemState(GetPool().GetWhich(SID_CHARMAP
), false, &pItem
);
220 aString
= static_cast<const SfxStringItem
*>(pItem
)->GetValue();
221 const SfxPoolItem
* pFtItem
= nullptr;
222 pArgs
->GetItemState( GetPool().GetWhich(SID_ATTR_SPECIALCHAR
), false, &pFtItem
);
223 const SfxStringItem
* pFontItem
= dynamic_cast<const SfxStringItem
*>( pFtItem
);
226 const OUString
& aFontName(pFontItem
->GetValue());
227 vcl::Font
aFont(aFontName
, Size(1,1)); // Size only because of CTOR
228 aNewItem
= std::make_shared
<SvxFontItem
>(
229 aFont
.GetFamilyType(), aFont
.GetFamilyName(),
230 aFont
.GetStyleName(), aFont
.GetPitch(),
231 aFont
.GetCharSet(), ATTR_FONT
);
235 aNewItem
.reset(rItem
.Clone());
239 ScViewUtil::ExecuteCharMap( rItem
, *mrViewData
.GetViewShell()->GetViewFrame() );
241 if ( !aString
.isEmpty() )
243 SfxItemSet
aSet( pOutliner
->GetEmptyItemSet() );
245 // checked against original, indeed aNewItem looks as if it can have
246 // either WhichID EE_CHAR_FONTINFO or ATTR_FONT when it was reset
247 // above, original uses '= SvxFontItem(..., ATTR_FONT).
248 // BUT beware: the operator=() did not copy the WhichID when resetting,
249 // so it indeed has WhichID of EE_CHAR_FONTINFO despite copying an Item
250 // that was constructed using ATTR_FONT as WhichID (!)
251 aSet
.Put( *aNewItem
, EE_CHAR_FONTINFO
);
253 // If nothing is selected, then SetAttribs of the View selects a word
254 pOutView
->GetOutliner()->QuickSetAttribs( aSet
, pOutView
->GetSelection() );
255 pOutView
->InsertText(aString
);
258 Invalidate( SID_ATTR_CHAR_FONT
);
262 case SID_HYPERLINK_SETLINK
:
265 const SfxPoolItem
* pItem
;
266 if ( pReqArgs
->GetItemState( SID_HYPERLINK_SETLINK
, true, &pItem
) == SfxItemState::SET
)
268 const SvxHyperlinkItem
* pHyper
= static_cast<const SvxHyperlinkItem
*>(pItem
);
269 const OUString
& rName
= pHyper
->GetName();
270 const OUString
& rURL
= pHyper
->GetURL();
271 const OUString
& rTarget
= pHyper
->GetTargetFrame();
272 SvxLinkInsertMode eMode
= pHyper
->GetInsertMode();
275 if (eMode
== HLINK_DEFAULT
|| eMode
== HLINK_FIELD
)
277 pOutView
->SelectFieldAtCursor();
280 SvxURLField
aURLField( rURL
, rName
, SvxURLFormat::Repr
);
281 aURLField
.SetTargetFrame( rTarget
);
282 SvxFieldItem
aURLItem( aURLField
, EE_FEATURE_FIELD
);
283 pOutView
->InsertField( aURLItem
);
289 ExecuteGlobal( rReq
); // normal at View
291 // If "text" is received by InsertURL of ViewShell, then the DrawShell is turned off !!!
296 case SID_OPEN_HYPERLINK
:
297 if (const SvxFieldData
* pField
= pOutView
->GetFieldAtCursor())
299 if (const SvxURLField
* pURLField
= dynamic_cast<const SvxURLField
*>(pField
))
301 ScGlobal::OpenURL(pURLField
->GetURL(), pURLField
->GetTargetFrame(), true);
306 case SID_EDIT_HYPERLINK
:
308 // Ensure the field is selected first
309 pOutView
->SelectFieldAtCursor();
310 mrViewData
.GetViewShell()->GetViewFrame()->GetDispatcher()->Execute(SID_HYPERLINK_DIALOG
);
314 case SID_COPY_HYPERLINK_LOCATION
:
316 const SvxFieldData
* pField
= pOutView
->GetFieldAtCursor();
317 if (const SvxURLField
* pURLField
= dynamic_cast<const SvxURLField
*>(pField
))
319 uno::Reference
<datatransfer::clipboard::XClipboard
> xClipboard
320 = pOutView
->GetWindow()->GetClipboard();
321 vcl::unohelper::TextDataObject::CopyStringTo(pURLField
->GetURL(), xClipboard
);
326 case SID_REMOVE_HYPERLINK
:
328 // Ensure the field is selected first
329 URLFieldHelper::RemoveURLField(pOutView
->GetEditView());
333 case SID_ENABLE_HYPHENATION
:
334 case SID_TEXTDIRECTION_LEFT_TO_RIGHT
:
335 case SID_TEXTDIRECTION_TOP_TO_BOTTOM
:
336 pView
->ScEndTextEdit(); // end text edit before switching direction
337 ExecuteGlobal( rReq
);
338 // restore consistent state between shells and functions:
339 mrViewData
.GetDispatcher().Execute(SID_OBJECT_SELECT
, SfxCallMode::SLOT
| SfxCallMode::RECORD
);
344 OUString aReplaceText
;
345 const SfxStringItem
* pItem2
= rReq
.GetArg
<SfxStringItem
>(SID_THES
);
347 aReplaceText
= pItem2
->GetValue();
348 if (!aReplaceText
.isEmpty())
349 ReplaceTextWithSynonym( pOutView
->GetEditView(), aReplaceText
);
355 pOutView
->StartThesaurus();
362 void ScDrawTextObjectBar::GetState( SfxItemSet
& rSet
)
364 SfxViewFrame
* pViewFrm
= mrViewData
.GetViewShell()->GetViewFrame();
365 bool bHasFontWork
= pViewFrm
->HasChildWindow(SID_FONTWORK
);
366 bool bDisableFontWork
= false;
370 // #i21255# notes now support rich text formatting (#i74140# but not fontwork)
371 bDisableFontWork
= true;
374 if ( bDisableFontWork
)
375 rSet
.DisableItem( SID_FONTWORK
);
377 rSet
.Put(SfxBoolItem(SID_FONTWORK
, bHasFontWork
));
379 if ( rSet
.GetItemState( SID_HYPERLINK_GETLINK
) != SfxItemState::UNKNOWN
)
381 SvxHyperlinkItem aHLinkItem
;
382 SdrView
* pView
= mrViewData
.GetScDrawView();
383 OutlinerView
* pOutView
= pView
->GetTextEditOutlinerView();
387 const SvxFieldData
* pField
= pOutView
->GetFieldAtCursor();
388 if (const SvxURLField
* pURLField
= dynamic_cast<const SvxURLField
*>(pField
))
390 aHLinkItem
.SetName( pURLField
->GetRepresentation() );
391 aHLinkItem
.SetURL( pURLField
->GetURL() );
392 aHLinkItem
.SetTargetFrame( pURLField
->GetTargetFrame() );
398 // use selected text as name for urls
399 OUString sReturn
= pOutView
->GetSelected();
400 sal_Int32 nLen
= std::min
<sal_Int32
>(sReturn
.getLength(), 255);
401 sReturn
= sReturn
.copy(0, nLen
);
402 aHLinkItem
.SetName(comphelper::string::stripEnd(sReturn
, ' '));
405 rSet
.Put(aHLinkItem
);
408 if (rSet
.GetItemState(SID_OPEN_HYPERLINK
) != SfxItemState::UNKNOWN
409 || rSet
.GetItemState(SID_EDIT_HYPERLINK
) != SfxItemState::UNKNOWN
410 || rSet
.GetItemState(SID_COPY_HYPERLINK_LOCATION
) != SfxItemState::UNKNOWN
411 || rSet
.GetItemState(SID_REMOVE_HYPERLINK
) != SfxItemState::UNKNOWN
)
413 SdrView
* pView
= mrViewData
.GetScDrawView();
414 if( !URLFieldHelper::IsCursorAtURLField(pView
->GetTextEditOutlinerView()) )
416 rSet
.DisableItem( SID_OPEN_HYPERLINK
);
417 rSet
.DisableItem( SID_EDIT_HYPERLINK
);
418 rSet
.DisableItem( SID_COPY_HYPERLINK_LOCATION
);
419 rSet
.DisableItem( SID_REMOVE_HYPERLINK
);
423 if( rSet
.GetItemState( SID_TRANSLITERATE_HALFWIDTH
) != SfxItemState::UNKNOWN
)
424 ScViewUtil::HideDisabledSlot( rSet
, pViewFrm
->GetBindings(), SID_TRANSLITERATE_HALFWIDTH
);
425 if( rSet
.GetItemState( SID_TRANSLITERATE_FULLWIDTH
) != SfxItemState::UNKNOWN
)
426 ScViewUtil::HideDisabledSlot( rSet
, pViewFrm
->GetBindings(), SID_TRANSLITERATE_FULLWIDTH
);
427 if( rSet
.GetItemState( SID_TRANSLITERATE_HIRAGANA
) != SfxItemState::UNKNOWN
)
428 ScViewUtil::HideDisabledSlot( rSet
, pViewFrm
->GetBindings(), SID_TRANSLITERATE_HIRAGANA
);
429 if( rSet
.GetItemState( SID_TRANSLITERATE_KATAKANA
) != SfxItemState::UNKNOWN
)
430 ScViewUtil::HideDisabledSlot( rSet
, pViewFrm
->GetBindings(), SID_TRANSLITERATE_KATAKANA
);
432 if ( rSet
.GetItemState( SID_ENABLE_HYPHENATION
) != SfxItemState::UNKNOWN
)
434 SdrView
* pView
= mrViewData
.GetScDrawView();
435 SfxItemSet
aAttrs( pView
->GetModel()->GetItemPool() );
436 pView
->GetAttributes( aAttrs
);
437 if( aAttrs
.GetItemState( EE_PARA_HYPHENATE
) >= SfxItemState::DEFAULT
)
439 bool bValue
= aAttrs
.Get( EE_PARA_HYPHENATE
).GetValue();
440 rSet
.Put( SfxBoolItem( SID_ENABLE_HYPHENATION
, bValue
) );
444 if ( rSet
.GetItemState( SID_THES
) != SfxItemState::UNKNOWN
||
445 rSet
.GetItemState( SID_THESAURUS
) != SfxItemState::UNKNOWN
)
447 SdrView
* pView
= mrViewData
.GetScDrawView();
448 OutlinerView
* pOutView
= pView
->GetTextEditOutlinerView();
451 LanguageType nLang
= LANGUAGE_NONE
;
452 bool bIsLookUpWord
= false;
455 EditView
& rEditView
= pOutView
->GetEditView();
456 bIsLookUpWord
= GetStatusValueForThesaurusFromContext( aStatusVal
, nLang
, rEditView
);
458 rSet
.Put( SfxStringItem( SID_THES
, aStatusVal
) );
460 // disable thesaurus main menu and context menu entry if there is nothing to look up
461 bool bCanDoThesaurus
= ScModule::HasThesaurusLanguage( nLang
);
462 if (!bIsLookUpWord
|| !bCanDoThesaurus
)
463 rSet
.DisableItem( SID_THES
);
464 if (!bCanDoThesaurus
)
465 rSet
.DisableItem( SID_THESAURUS
);
468 if (GetObjectShell()->isContentExtractionLocked())
470 rSet
.DisableItem(SID_COPY
);
471 rSet
.DisableItem(SID_CUT
);
475 IMPL_LINK( ScDrawTextObjectBar
, ClipboardChanged
, TransferableDataHelper
*, pDataHelper
, void )
477 bPastePossible
= ( pDataHelper
->HasFormat( SotClipboardFormatId::STRING
) || pDataHelper
->HasFormat( SotClipboardFormatId::RTF
)
478 || pDataHelper
->HasFormat( SotClipboardFormatId::RICHTEXT
) );
480 SfxBindings
& rBindings
= mrViewData
.GetBindings();
481 rBindings
.Invalidate( SID_PASTE
);
482 rBindings
.Invalidate( SID_PASTE_SPECIAL
);
483 rBindings
.Invalidate( SID_PASTE_UNFORMATTED
);
484 rBindings
.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS
);
487 void ScDrawTextObjectBar::GetClipState( SfxItemSet
& rSet
)
489 SdrView
* pView
= mrViewData
.GetScDrawView();
490 if ( !pView
->GetTextEditOutlinerView() )
492 GetGlobalClipState( rSet
);
496 if ( !mxClipEvtLstnr
.is() )
499 mxClipEvtLstnr
= new TransferableClipboardListener( LINK( this, ScDrawTextObjectBar
, ClipboardChanged
) );
500 vcl::Window
* pWin
= mrViewData
.GetActiveWin();
501 mxClipEvtLstnr
->AddListener( pWin
);
504 TransferableDataHelper
aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( mrViewData
.GetActiveWin() ) );
505 bPastePossible
= ( aDataHelper
.HasFormat( SotClipboardFormatId::STRING
) || aDataHelper
.HasFormat( SotClipboardFormatId::RTF
)
506 || aDataHelper
.HasFormat( SotClipboardFormatId::RICHTEXT
) );
509 SfxWhichIter
aIter( rSet
);
510 sal_uInt16 nWhich
= aIter
.FirstWhich();
516 case SID_PASTE_SPECIAL
:
517 case SID_PASTE_UNFORMATTED
:
518 if( !bPastePossible
)
519 rSet
.DisableItem( nWhich
);
521 case SID_CLIPBOARD_FORMAT_ITEMS
:
522 if ( bPastePossible
)
524 SvxClipboardFormatItem
aFormats( SID_CLIPBOARD_FORMAT_ITEMS
);
525 TransferableDataHelper
aDataHelper(
526 TransferableDataHelper::CreateFromSystemClipboard( mrViewData
.GetActiveWin() ) );
528 if ( aDataHelper
.HasFormat( SotClipboardFormatId::STRING
) )
529 aFormats
.AddClipbrdFormat( SotClipboardFormatId::STRING
);
530 if ( aDataHelper
.HasFormat( SotClipboardFormatId::RTF
) )
531 aFormats
.AddClipbrdFormat( SotClipboardFormatId::RTF
);
532 if ( aDataHelper
.HasFormat( SotClipboardFormatId::RICHTEXT
) )
533 aFormats
.AddClipbrdFormat( SotClipboardFormatId::RICHTEXT
);
535 rSet
.Put( aFormats
);
538 rSet
.DisableItem( nWhich
);
541 nWhich
= aIter
.NextWhich();
547 void ScDrawTextObjectBar::ExecuteToggle( SfxRequest
&rReq
)
551 SdrView
* pView
= mrViewData
.GetScDrawView();
553 sal_uInt16 nSlot
= rReq
.GetSlot();
555 SfxItemSet
aSet( pView
->GetDefaultAttr() );
557 SfxItemSet
aViewAttr(pView
->GetModel()->GetItemPool());
558 pView
->GetAttributes(aViewAttr
);
561 FontLineStyle eOld
= aViewAttr
.Get(EE_CHAR_UNDERLINE
).GetLineStyle();
562 FontLineStyle eNew
= eOld
;
565 case SID_ULINE_VAL_NONE
:
566 eNew
= LINESTYLE_NONE
;
568 case SID_ULINE_VAL_SINGLE
:
569 eNew
= ( eOld
== LINESTYLE_SINGLE
) ? LINESTYLE_NONE
: LINESTYLE_SINGLE
;
571 case SID_ULINE_VAL_DOUBLE
:
572 eNew
= ( eOld
== LINESTYLE_DOUBLE
) ? LINESTYLE_NONE
: LINESTYLE_DOUBLE
;
574 case SID_ULINE_VAL_DOTTED
:
575 eNew
= ( eOld
== LINESTYLE_DOTTED
) ? LINESTYLE_NONE
: LINESTYLE_DOTTED
;
580 aSet
.Put( SvxUnderlineItem( eNew
, EE_CHAR_UNDERLINE
) );
582 pView
->SetAttributes( aSet
);
584 mrViewData
.GetScDrawView()->InvalidateDrawTextAttrs();
587 static void lcl_RemoveFields( OutlinerView
& rOutView
)
589 //! Outliner should have RemoveFields with a selection
591 Outliner
* pOutliner
= rOutView
.GetOutliner();
592 if (!pOutliner
) return;
594 ESelection aOldSel
= rOutView
.GetSelection();
595 ESelection aSel
= aOldSel
;
597 sal_Int32 nNewEnd
= aSel
.nEndPos
;
599 bool bUpdate
= pOutliner
->GetUpdateMode();
600 bool bChanged
= false;
602 //! GetPortions and GetAttribs should be const!
603 EditEngine
& rEditEng
= const_cast<EditEngine
&>(pOutliner
->GetEditEngine());
605 sal_Int32 nParCount
= pOutliner
->GetParagraphCount();
606 for (sal_Int32 nPar
=0; nPar
<nParCount
; nPar
++)
607 if ( nPar
>= aSel
.nStartPara
&& nPar
<= aSel
.nEndPara
)
609 std::vector
<sal_Int32
> aPortions
;
610 rEditEng
.GetPortions( nPar
, aPortions
);
612 for ( size_t nPos
= aPortions
.size(); nPos
; )
615 sal_Int32 nEnd
= aPortions
[ nPos
];
616 sal_Int32 nStart
= nPos
? aPortions
[ nPos
- 1 ] : 0;
617 // fields are single characters
618 if ( nEnd
== nStart
+1 &&
619 ( nPar
> aSel
.nStartPara
|| nStart
>= aSel
.nStartPos
) &&
620 ( nPar
< aSel
.nEndPara
|| nEnd
<= aSel
.nEndPos
) )
622 ESelection
aFieldSel( nPar
, nStart
, nPar
, nEnd
);
623 SfxItemSet aSet
= rEditEng
.GetAttribs( aFieldSel
);
624 if ( aSet
.GetItemState( EE_FEATURE_FIELD
) == SfxItemState::SET
)
629 pOutliner
->SetUpdateMode( false );
630 OUString aName
= ScResId( STR_UNDO_DELETECONTENTS
);
631 ViewShellId
nViewShellId(-1);
632 if (ScTabViewShell
* pViewSh
= ScTabViewShell::GetActiveViewShell())
633 nViewShellId
= pViewSh
->GetViewShellId();
634 pOutliner
->GetUndoManager().EnterListAction( aName
, aName
, 0, nViewShellId
);
638 OUString aFieldText
= rEditEng
.GetText( aFieldSel
);
639 pOutliner
->QuickInsertText( aFieldText
, aFieldSel
);
640 if ( nPar
== aSel
.nEndPara
)
642 nNewEnd
= nNewEnd
+ aFieldText
.getLength();
650 if (bUpdate
&& bChanged
)
652 pOutliner
->GetUndoManager().LeaveListAction();
653 pOutliner
->SetUpdateMode( true );
656 if ( aOldSel
== aSel
) // aSel is adjusted
657 aOldSel
.nEndPos
= nNewEnd
;
659 aOldSel
.nStartPos
= nNewEnd
; // if aOldSel is backwards
660 rOutView
.SetSelection( aOldSel
);
663 void ScDrawTextObjectBar::ExecuteAttr( SfxRequest
&rReq
)
665 SdrView
* pView
= mrViewData
.GetScDrawView();
666 const SfxItemSet
* pArgs
= rReq
.GetArgs();
667 sal_uInt16 nSlot
= rReq
.GetSlot();
669 SfxItemSet
aEditAttr( pView
->GetModel()->GetItemPool() );
670 pView
->GetAttributes( aEditAttr
);
671 SfxItemSet
aNewAttr( *aEditAttr
.GetPool(), aEditAttr
.GetRanges() );
677 case SID_ALIGN_ANY_LEFT
:
678 case SID_ATTR_PARA_ADJUST_LEFT
:
679 aNewAttr
.Put( SvxAdjustItem( SvxAdjust::Left
, EE_PARA_JUST
) );
682 case SID_ALIGNCENTERHOR
:
683 case SID_ALIGN_ANY_HCENTER
:
684 case SID_ATTR_PARA_ADJUST_CENTER
:
685 aNewAttr
.Put( SvxAdjustItem( SvxAdjust::Center
, EE_PARA_JUST
) );
689 case SID_ALIGN_ANY_RIGHT
:
690 case SID_ATTR_PARA_ADJUST_RIGHT
:
691 aNewAttr
.Put( SvxAdjustItem( SvxAdjust::Right
, EE_PARA_JUST
) );
695 case SID_ALIGN_ANY_JUSTIFIED
:
696 case SID_ATTR_PARA_ADJUST_BLOCK
:
697 aNewAttr
.Put( SvxAdjustItem( SvxAdjust::Block
, EE_PARA_JUST
) );
700 case SID_ATTR_PARA_LINESPACE_10
:
702 SvxLineSpacingItem
aItem( LINE_SPACE_DEFAULT_HEIGHT
, EE_PARA_SBL
);
703 aItem
.SetPropLineSpace( 100 );
704 aNewAttr
.Put( aItem
);
708 case SID_ATTR_PARA_LINESPACE_15
:
710 SvxLineSpacingItem
aItem( LINE_SPACE_DEFAULT_HEIGHT
, EE_PARA_SBL
);
711 aItem
.SetPropLineSpace( 150 );
712 aNewAttr
.Put( aItem
);
716 case SID_ATTR_PARA_LINESPACE_20
:
718 SvxLineSpacingItem
aItem( LINE_SPACE_DEFAULT_HEIGHT
, EE_PARA_SBL
);
719 aItem
.SetPropLineSpace( 200 );
720 aNewAttr
.Put( aItem
);
724 case SID_SET_SUPER_SCRIPT
:
726 SvxEscapementItem
aItem(EE_CHAR_ESCAPEMENT
);
727 SvxEscapement eEsc
= static_cast<SvxEscapement
>(aEditAttr
.Get( EE_CHAR_ESCAPEMENT
).GetEnumValue());
729 if( eEsc
== SvxEscapement::Superscript
)
730 aItem
.SetEscapement( SvxEscapement::Off
);
732 aItem
.SetEscapement( SvxEscapement::Superscript
);
733 aNewAttr
.Put( aItem
);
737 case SID_SET_SUB_SCRIPT
:
739 SvxEscapementItem
aItem(EE_CHAR_ESCAPEMENT
);
740 SvxEscapement eEsc
= static_cast<SvxEscapement
>(aEditAttr
.Get( EE_CHAR_ESCAPEMENT
).GetEnumValue());
742 if( eEsc
== SvxEscapement::Subscript
)
743 aItem
.SetEscapement( SvxEscapement::Off
);
745 aItem
.SetEscapement( SvxEscapement::Subscript
);
746 aNewAttr
.Put( aItem
);
750 case SID_TABLE_VERT_NONE
:
751 case SID_TABLE_VERT_CENTER
:
752 case SID_TABLE_VERT_BOTTOM
:
754 SdrTextVertAdjust eTVA
= SDRTEXTVERTADJUST_TOP
;
755 if (nSlot
== SID_TABLE_VERT_CENTER
)
756 eTVA
= SDRTEXTVERTADJUST_CENTER
;
757 else if (nSlot
== SID_TABLE_VERT_BOTTOM
)
758 eTVA
= SDRTEXTVERTADJUST_BOTTOM
;
759 aNewAttr
.Put(SdrTextVertAdjustItem(eTVA
));
763 case SID_PARASPACE_INCREASE
:
764 case SID_PARASPACE_DECREASE
:
766 SvxULSpaceItem
aULSpace( aEditAttr
.Get( EE_PARA_ULSPACE
) );
767 sal_uInt16 nUpper
= aULSpace
.GetUpper();
768 sal_uInt16 nLower
= aULSpace
.GetLower();
770 if ( nSlot
== SID_PARASPACE_INCREASE
)
777 nUpper
= std::max
< sal_Int16
>( nUpper
- 100, 0 );
778 nLower
= std::max
< sal_Int16
>( nLower
- 100, 0 );
781 aULSpace
.SetUpper( nUpper
);
782 aULSpace
.SetLower( nLower
);
783 aNewAttr
.Put( aULSpace
);
792 bool bArgsInReq
= ( pArgs
!= nullptr );
798 case SID_TEXT_STANDARD
: // delete hard text attributes
800 OutlinerView
* pOutView
= pView
->IsTextEdit() ?
801 pView
->GetTextEditOutlinerView() : nullptr;
803 pOutView
->Paint( tools::Rectangle() );
805 SfxItemSet
aEmptyAttr( *aEditAttr
.GetPool(), svl::Items
<EE_ITEMS_START
, EE_ITEMS_END
>{} );
806 pView
->SetAttributes( aEmptyAttr
, true );
810 lcl_RemoveFields( *pOutView
);
811 pOutView
->ShowCursor();
814 rReq
.Done( aEmptyAttr
);
815 mrViewData
.GetScDrawView()->InvalidateDrawTextAttrs();
816 bDone
= false; // already happened here
820 case SID_GROW_FONT_SIZE
:
821 case SID_SHRINK_FONT_SIZE
:
823 OutlinerView
* pOutView
= pView
->IsTextEdit() ?
824 pView
->GetTextEditOutlinerView() : nullptr;
827 const SvxFontListItem
* pFontListItem
= static_cast< const SvxFontListItem
* >
828 ( SfxObjectShell::Current()->GetItem( SID_ATTR_CHAR_FONTLIST
) );
829 const FontList
* pFontList
= pFontListItem
? pFontListItem
->GetFontList() : nullptr;
830 pOutView
->GetEditView().ChangeFontSize( nSlot
== SID_GROW_FONT_SIZE
, pFontList
);
831 mrViewData
.GetBindings().Invalidate( SID_ATTR_CHAR_FONTHEIGHT
);
837 case SID_CHAR_DLG_EFFECT
:
838 case SID_CHAR_DLG
: // dialog button
839 case SID_ATTR_CHAR_FONT
: // Controller not shown
840 case SID_ATTR_CHAR_FONTHEIGHT
:
841 bDone
= ExecuteCharDlg( aEditAttr
, aNewAttr
, nSlot
);
845 bDone
= ExecuteParaDlg( aEditAttr
, aNewAttr
);
848 case SID_ATTR_CHAR_WEIGHT
:
849 aNewAttr
.Put( aEditAttr
.Get( EE_CHAR_WEIGHT
) );
852 case SID_ATTR_CHAR_POSTURE
:
853 aNewAttr
.Put( aEditAttr
.Get( EE_CHAR_ITALIC
) );
856 case SID_ATTR_CHAR_UNDERLINE
:
857 aNewAttr
.Put( aEditAttr
.Get( EE_CHAR_UNDERLINE
) );
860 case SID_ATTR_CHAR_OVERLINE
:
861 aNewAttr
.Put( aEditAttr
.Get( EE_CHAR_OVERLINE
) );
864 case SID_ATTR_CHAR_CONTOUR
:
865 aNewAttr
.Put( aEditAttr
.Get( EE_CHAR_OUTLINE
) );
868 case SID_ATTR_CHAR_SHADOWED
:
869 aNewAttr
.Put( aEditAttr
.Get( EE_CHAR_SHADOW
) );
872 case SID_ATTR_CHAR_STRIKEOUT
:
873 aNewAttr
.Put( aEditAttr
.Get( EE_CHAR_STRIKEOUT
) );
876 case SID_DRAWTEXT_ATTR_DLG
:
878 SvxAbstractDialogFactory
* pFact
= SvxAbstractDialogFactory::Create();
879 ScopedVclPtr
<SfxAbstractTabDialog
> pDlg(pFact
->CreateTextTabDialog(mrViewData
.GetDialogParent(), &aEditAttr
, pView
));
881 bDone
= ( RET_OK
== pDlg
->Execute() );
884 aNewAttr
.Put( *pDlg
->GetOutputItemSet() );
886 pDlg
.disposeAndClear();
888 SfxBindings
& rBindings
= mrViewData
.GetBindings();
889 rBindings
.Invalidate( SID_TABLE_VERT_NONE
);
890 rBindings
.Invalidate( SID_TABLE_VERT_CENTER
);
891 rBindings
.Invalidate( SID_TABLE_VERT_BOTTOM
);
899 rReq
.Done( aNewAttr
);
900 pArgs
= rReq
.GetArgs();
907 ( nSlot
== SID_ATTR_CHAR_FONT
|| nSlot
== SID_ATTR_CHAR_FONTHEIGHT
||
908 nSlot
== SID_ATTR_CHAR_WEIGHT
|| nSlot
== SID_ATTR_CHAR_POSTURE
) )
910 // font items from toolbox controller have to be applied for the right script type
912 // #i78017 establish the same behaviour as in Writer
913 SvtScriptType nScript
= SvtScriptType::LATIN
| SvtScriptType::ASIAN
| SvtScriptType::COMPLEX
;
914 if (nSlot
== SID_ATTR_CHAR_FONT
)
915 nScript
= pView
->GetScriptType();
917 SfxItemPool
& rPool
= GetPool();
918 SvxScriptSetItem
aSetItem( nSlot
, rPool
);
919 sal_uInt16 nWhich
= rPool
.GetWhich( nSlot
);
920 aSetItem
.PutItemForScriptType( nScript
, pArgs
->Get( nWhich
) );
922 pView
->SetAttributes( aSetItem
.GetItemSet() );
924 else if( nSlot
== SID_ATTR_PARA_LRSPACE
)
926 sal_uInt16 nId
= SID_ATTR_PARA_LRSPACE
;
927 const SvxLRSpaceItem
& rItem
= static_cast<const SvxLRSpaceItem
&>(
929 SfxItemSet
aAttr( GetPool(), svl::Items
<EE_PARA_LRSPACE
, EE_PARA_LRSPACE
>{} );
930 nId
= EE_PARA_LRSPACE
;
931 SvxLRSpaceItem
aLRSpaceItem( rItem
.GetLeft(),
932 rItem
.GetRight(), rItem
.GetTextLeft(),
933 rItem
.GetTextFirstLineOffset(), nId
);
934 aAttr
.Put( aLRSpaceItem
);
935 pView
->SetAttributes( aAttr
);
937 else if( nSlot
== SID_ATTR_PARA_LINESPACE
)
939 SvxLineSpacingItem aLineSpaceItem
= static_cast<const SvxLineSpacingItem
&>(pArgs
->Get(
940 GetPool().GetWhich(nSlot
)));
941 SfxItemSet
aAttr( GetPool(), svl::Items
<EE_PARA_SBL
, EE_PARA_SBL
>{} );
942 aAttr
.Put( aLineSpaceItem
);
943 pView
->SetAttributes( aAttr
);
945 else if( nSlot
== SID_ATTR_PARA_ULSPACE
)
947 SvxULSpaceItem aULSpaceItem
= static_cast<const SvxULSpaceItem
&>(pArgs
->Get(
948 GetPool().GetWhich(nSlot
)));
949 SfxItemSet
aAttr( GetPool(), svl::Items
<EE_PARA_ULSPACE
, EE_PARA_ULSPACE
>{} );
950 aULSpaceItem
.SetWhich(EE_PARA_ULSPACE
);
951 aAttr
.Put( aULSpaceItem
);
952 pView
->SetAttributes( aAttr
);
957 pView
->SetAttributes( *pArgs
);
959 mrViewData
.GetScDrawView()->InvalidateDrawTextAttrs();
962 void ScDrawTextObjectBar::GetAttrState( SfxItemSet
& rDestSet
)
966 // issue 21255 - Notes now support rich text formatting.
969 SvtLanguageOptions aLangOpt
;
970 bool bDisableCTLFont
= !aLangOpt
.IsCTLFontEnabled();
971 bool bDisableVerticalText
= !aLangOpt
.IsVerticalTextEnabled();
973 SdrView
* pView
= mrViewData
.GetScDrawView();
974 SfxItemSet
aAttrSet(pView
->GetModel()->GetItemPool());
975 pView
->GetAttributes(aAttrSet
);
979 rDestSet
.Put( aAttrSet
);
981 // choose font info according to selection script type
983 SvtScriptType nScript
= pView
->GetScriptType();
985 // #i55929# input-language-dependent script type (depends on input language if nothing selected)
986 SvtScriptType nInputScript
= nScript
;
987 OutlinerView
* pOutView
= pView
->GetTextEditOutlinerView();
988 if (pOutView
&& !pOutView
->GetSelection().HasRange())
990 LanguageType nInputLang
= mrViewData
.GetActiveWin()->GetInputLanguage();
991 if (nInputLang
!= LANGUAGE_DONTKNOW
&& nInputLang
!= LANGUAGE_SYSTEM
)
992 nInputScript
= SvtLanguageOptions::GetScriptTypeOfLanguage( nInputLang
);
995 // #i55929# according to spec, nInputScript is used for font and font height only
996 if ( rDestSet
.GetItemState( EE_CHAR_FONTINFO
) != SfxItemState::UNKNOWN
)
997 ScViewUtil::PutItemScript( rDestSet
, aAttrSet
, EE_CHAR_FONTINFO
, nInputScript
);
998 if ( rDestSet
.GetItemState( EE_CHAR_FONTHEIGHT
) != SfxItemState::UNKNOWN
)
999 ScViewUtil::PutItemScript( rDestSet
, aAttrSet
, EE_CHAR_FONTHEIGHT
, nInputScript
);
1000 if ( rDestSet
.GetItemState( EE_CHAR_WEIGHT
) != SfxItemState::UNKNOWN
)
1001 ScViewUtil::PutItemScript( rDestSet
, aAttrSet
, EE_CHAR_WEIGHT
, nScript
);
1002 if ( rDestSet
.GetItemState( EE_CHAR_ITALIC
) != SfxItemState::UNKNOWN
)
1003 ScViewUtil::PutItemScript( rDestSet
, aAttrSet
, EE_CHAR_ITALIC
, nScript
);
1006 SvxAdjust eAdj
= aAttrSet
.Get(EE_PARA_JUST
).GetAdjust();
1009 case SvxAdjust::Left
:
1011 rDestSet
.Put( SfxBoolItem( SID_ALIGNLEFT
, true ) );
1012 rDestSet
.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_LEFT
, true ) );
1015 case SvxAdjust::Center
:
1017 rDestSet
.Put( SfxBoolItem( SID_ALIGNCENTERHOR
, true ) );
1018 rDestSet
.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_CENTER
, true ) );
1021 case SvxAdjust::Right
:
1023 rDestSet
.Put( SfxBoolItem( SID_ALIGNRIGHT
, true ) );
1024 rDestSet
.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_RIGHT
, true ) );
1027 case SvxAdjust::Block
:
1029 rDestSet
.Put( SfxBoolItem( SID_ALIGNBLOCK
, true ) );
1030 rDestSet
.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_BLOCK
, true ) );
1035 // added to avoid warnings
1038 // pseudo slots for Format menu
1039 rDestSet
.Put( SfxBoolItem( SID_ALIGN_ANY_LEFT
, eAdj
== SvxAdjust::Left
) );
1040 rDestSet
.Put( SfxBoolItem( SID_ALIGN_ANY_HCENTER
, eAdj
== SvxAdjust::Center
) );
1041 rDestSet
.Put( SfxBoolItem( SID_ALIGN_ANY_RIGHT
, eAdj
== SvxAdjust::Right
) );
1042 rDestSet
.Put( SfxBoolItem( SID_ALIGN_ANY_JUSTIFIED
, eAdj
== SvxAdjust::Block
) );
1044 SvxLRSpaceItem aLR
= aAttrSet
.Get( EE_PARA_LRSPACE
);
1045 aLR
.SetWhich(SID_ATTR_PARA_LRSPACE
);
1047 Invalidate( SID_ATTR_PARA_LRSPACE
);
1048 SfxItemState eState
= aAttrSet
.GetItemState( EE_PARA_LRSPACE
);
1049 if ( eState
== SfxItemState::DONTCARE
)
1050 rDestSet
.InvalidateItem(SID_ATTR_PARA_LRSPACE
);
1051 //xuxu for Line Space
1052 SvxLineSpacingItem aLineSP
= aAttrSet
.Get( EE_PARA_SBL
);
1053 aLineSP
.SetWhich(SID_ATTR_PARA_LINESPACE
);
1054 rDestSet
.Put(aLineSP
);
1055 Invalidate(SID_ATTR_PARA_LINESPACE
);
1056 eState
= aAttrSet
.GetItemState( EE_PARA_SBL
);
1057 if ( eState
== SfxItemState::DONTCARE
)
1058 rDestSet
.InvalidateItem(SID_ATTR_PARA_LINESPACE
);
1060 SvxULSpaceItem aULSP
= aAttrSet
.Get( EE_PARA_ULSPACE
);
1061 aULSP
.SetWhich(SID_ATTR_PARA_ULSPACE
);
1062 rDestSet
.Put(aULSP
);
1063 Invalidate(SID_ATTR_PARA_ULSPACE
);
1064 Invalidate(SID_PARASPACE_INCREASE
);
1065 Invalidate(SID_PARASPACE_DECREASE
);
1066 eState
= aAttrSet
.GetItemState( EE_PARA_ULSPACE
);
1067 if( eState
>= SfxItemState::DEFAULT
)
1069 if ( !aULSP
.GetUpper() && !aULSP
.GetLower() )
1070 rDestSet
.DisableItem( SID_PARASPACE_DECREASE
);
1074 rDestSet
.DisableItem( SID_PARASPACE_INCREASE
);
1075 rDestSet
.DisableItem( SID_PARASPACE_DECREASE
);
1076 rDestSet
.InvalidateItem(SID_ATTR_PARA_ULSPACE
);
1081 sal_uInt16 nLineSpace
= aAttrSet
.Get( EE_PARA_SBL
).GetPropLineSpace();
1082 switch( nLineSpace
)
1085 rDestSet
.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_10
, true ) );
1088 rDestSet
.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_15
, true ) );
1091 rDestSet
.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_20
, true ) );
1096 SvxEscapement eEsc
= static_cast<SvxEscapement
>(aAttrSet
.Get( EE_CHAR_ESCAPEMENT
).GetEnumValue());
1097 rDestSet
.Put(SfxBoolItem(SID_SET_SUPER_SCRIPT
, eEsc
== SvxEscapement::Superscript
));
1098 rDestSet
.Put(SfxBoolItem(SID_SET_SUB_SCRIPT
, eEsc
== SvxEscapement::Subscript
));
1101 eState
= aAttrSet
.GetItemState( EE_CHAR_UNDERLINE
);
1102 if ( eState
== SfxItemState::DONTCARE
)
1104 rDestSet
.InvalidateItem( SID_ULINE_VAL_NONE
);
1105 rDestSet
.InvalidateItem( SID_ULINE_VAL_SINGLE
);
1106 rDestSet
.InvalidateItem( SID_ULINE_VAL_DOUBLE
);
1107 rDestSet
.InvalidateItem( SID_ULINE_VAL_DOTTED
);
1111 FontLineStyle eUnderline
= aAttrSet
.Get(EE_CHAR_UNDERLINE
).GetLineStyle();
1112 rDestSet
.Put(SfxBoolItem(SID_ULINE_VAL_SINGLE
, eUnderline
== LINESTYLE_SINGLE
));
1113 rDestSet
.Put(SfxBoolItem(SID_ULINE_VAL_DOUBLE
, eUnderline
== LINESTYLE_DOUBLE
));
1114 rDestSet
.Put(SfxBoolItem(SID_ULINE_VAL_DOTTED
, eUnderline
== LINESTYLE_DOTTED
));
1115 rDestSet
.Put(SfxBoolItem(SID_ULINE_VAL_NONE
, eUnderline
== LINESTYLE_NONE
));
1118 // horizontal / vertical
1120 bool bLeftToRight
= true;
1122 SdrOutliner
* pOutl
= pView
->GetTextEditOutliner();
1125 if( pOutl
->IsVertical() )
1126 bLeftToRight
= false;
1129 bLeftToRight
= aAttrSet
.Get( SDRATTR_TEXTDIRECTION
).GetValue() == css::text::WritingMode_LR_TB
;
1131 if ( bDisableVerticalText
)
1133 rDestSet
.DisableItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT
);
1134 rDestSet
.DisableItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM
);
1138 rDestSet
.Put( SfxBoolItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT
, bLeftToRight
) );
1139 rDestSet
.Put( SfxBoolItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM
, !bLeftToRight
) );
1142 // left-to-right or right-to-left
1144 if ( !bLeftToRight
|| bDisableCTLFont
)
1146 // disabled if vertical
1147 rDestSet
.DisableItem( SID_ATTR_PARA_LEFT_TO_RIGHT
);
1148 rDestSet
.DisableItem( SID_ATTR_PARA_RIGHT_TO_LEFT
);
1150 else if ( aAttrSet
.GetItemState( EE_PARA_WRITINGDIR
) == SfxItemState::DONTCARE
)
1152 rDestSet
.InvalidateItem( SID_ATTR_PARA_LEFT_TO_RIGHT
);
1153 rDestSet
.InvalidateItem( SID_ATTR_PARA_RIGHT_TO_LEFT
);
1157 SvxFrameDirection eAttrDir
= aAttrSet
.Get( EE_PARA_WRITINGDIR
).GetValue();
1158 if ( eAttrDir
== SvxFrameDirection::Environment
)
1160 // get "environment" direction from page style
1161 if ( mrViewData
.GetDocument().GetEditTextDirection( mrViewData
.GetTabNo() ) == EEHorizontalTextDirection::R2L
)
1162 eAttrDir
= SvxFrameDirection::Horizontal_RL_TB
;
1164 eAttrDir
= SvxFrameDirection::Horizontal_LR_TB
;
1166 rDestSet
.Put( SfxBoolItem( SID_ATTR_PARA_LEFT_TO_RIGHT
, ( eAttrDir
== SvxFrameDirection::Horizontal_LR_TB
) ) );
1167 rDestSet
.Put( SfxBoolItem( SID_ATTR_PARA_RIGHT_TO_LEFT
, ( eAttrDir
== SvxFrameDirection::Horizontal_RL_TB
) ) );
1171 void ScDrawTextObjectBar::ExecuteTrans( const SfxRequest
& rReq
)
1173 TransliterationFlags nType
= ScViewUtil::GetTransliterationType( rReq
.GetSlot() );
1174 if ( nType
== TransliterationFlags::NONE
)
1177 ScDrawView
* pView
= mrViewData
.GetScDrawView();
1178 OutlinerView
* pOutView
= pView
->GetTextEditOutlinerView();
1181 // change selected text in object
1182 pOutView
->TransliterateText( nType
);
1186 //! apply to whole objects?
1190 void ScDrawTextObjectBar::GetStatePropPanelAttr(SfxItemSet
&rSet
)
1192 SfxWhichIter
aIter( rSet
);
1193 sal_uInt16 nWhich
= aIter
.FirstWhich();
1195 SdrView
* pView
= mrViewData
.GetScDrawView();
1197 SfxItemSet
aEditAttr(pView
->GetModel()->GetItemPool());
1198 pView
->GetAttributes(aEditAttr
);
1199 //SfxItemSet aAttrs( *aEditAttr.GetPool(), aEditAttr.GetRanges() );
1203 sal_uInt16 nSlotId
= SfxItemPool::IsWhich(nWhich
)
1204 ? GetPool().GetSlotId(nWhich
)
1208 case SID_TABLE_VERT_NONE
:
1209 case SID_TABLE_VERT_CENTER
:
1210 case SID_TABLE_VERT_BOTTOM
:
1211 bool bContour
= false;
1212 SfxItemState eConState
= aEditAttr
.GetItemState( SDRATTR_TEXT_CONTOURFRAME
);
1213 if( eConState
!= SfxItemState::DONTCARE
)
1215 bContour
= aEditAttr
.Get( SDRATTR_TEXT_CONTOURFRAME
).GetValue();
1217 if (bContour
) break;
1219 SfxItemState eVState
= aEditAttr
.GetItemState( SDRATTR_TEXT_VERTADJUST
);
1220 //SfxItemState eHState = aAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST );
1222 //if(SfxItemState::DONTCARE != eVState && SfxItemState::DONTCARE != eHState)
1223 if(SfxItemState::DONTCARE
!= eVState
)
1225 SdrTextVertAdjust eTVA
= aEditAttr
.Get(SDRATTR_TEXT_VERTADJUST
).GetValue();
1226 bool bSet
= (nSlotId
== SID_TABLE_VERT_NONE
&& eTVA
== SDRTEXTVERTADJUST_TOP
) ||
1227 (nSlotId
== SID_TABLE_VERT_CENTER
&& eTVA
== SDRTEXTVERTADJUST_CENTER
) ||
1228 (nSlotId
== SID_TABLE_VERT_BOTTOM
&& eTVA
== SDRTEXTVERTADJUST_BOTTOM
);
1229 rSet
.Put(SfxBoolItem(nSlotId
, bSet
));
1233 rSet
.Put(SfxBoolItem(nSlotId
, false));
1237 nWhich
= aIter
.NextWhich();
1241 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */