1b3f79822SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3b3f79822SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4b3f79822SAndrew Rist * or more contributor license agreements. See the NOTICE file 5b3f79822SAndrew Rist * distributed with this work for additional information 6b3f79822SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7b3f79822SAndrew Rist * to you under the Apache License, Version 2.0 (the 8b3f79822SAndrew Rist * "License"); you may not use this file except in compliance 9b3f79822SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13b3f79822SAndrew Rist * Unless required by applicable law or agreed to in writing, 14b3f79822SAndrew Rist * software distributed under the License is distributed on an 15b3f79822SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16b3f79822SAndrew Rist * KIND, either express or implied. See the License for the 17b3f79822SAndrew Rist * specific language governing permissions and limitations 18b3f79822SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20b3f79822SAndrew Rist *************************************************************/ 21b3f79822SAndrew Rist 22b3f79822SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sc.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir 28cdf0e10cSrcweir 29cdf0e10cSrcweir //------------------------------------------------------------------------- 30cdf0e10cSrcweir 31cdf0e10cSrcweir #include <com/sun/star/linguistic2/XThesaurus.hpp> 32cdf0e10cSrcweir #include <com/sun/star/lang/Locale.hpp> 33cdf0e10cSrcweir 34cdf0e10cSrcweir #include "scitems.hxx" 35cdf0e10cSrcweir 36cdf0e10cSrcweir #include <editeng/adjitem.hxx> 37cdf0e10cSrcweir #include <svx/clipfmtitem.hxx> 38cdf0e10cSrcweir #include <editeng/cntritem.hxx> 39cdf0e10cSrcweir #include <editeng/crsditem.hxx> 40cdf0e10cSrcweir #include <editeng/editeng.hxx> 41cdf0e10cSrcweir #include <editeng/escpitem.hxx> 42cdf0e10cSrcweir #include <editeng/flditem.hxx> 43cdf0e10cSrcweir #include <editeng/fontitem.hxx> 44cdf0e10cSrcweir #include <editeng/frmdiritem.hxx> 45766ce4d0SZheng Fan #include <editeng/lrspitem.hxx> 46766ce4d0SZheng Fan #include <editeng/lspcitem.hxx> 47766ce4d0SZheng Fan #include <editeng/ulspitem.hxx> 48cdf0e10cSrcweir #include <svx/hlnkitem.hxx> 49cdf0e10cSrcweir #include <editeng/lspcitem.hxx> 50cdf0e10cSrcweir #include <svx/svdoutl.hxx> 51cdf0e10cSrcweir #include <editeng/unolingu.hxx> 52cdf0e10cSrcweir #include <editeng/outlobj.hxx> 53cdf0e10cSrcweir #include <editeng/postitem.hxx> 54cdf0e10cSrcweir #include <editeng/scripttypeitem.hxx> 55cdf0e10cSrcweir #include <editeng/shdditem.hxx> 56cdf0e10cSrcweir #include <svl/srchitem.hxx> 57cdf0e10cSrcweir #include <editeng/udlnitem.hxx> 58cdf0e10cSrcweir #include <editeng/wghtitem.hxx> 59cdf0e10cSrcweir #include <editeng/writingmodeitem.hxx> 60cdf0e10cSrcweir #include <sfx2/app.hxx> 61cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 62cdf0e10cSrcweir #include <sfx2/objface.hxx> 63cdf0e10cSrcweir #include <sfx2/objsh.hxx> 64cdf0e10cSrcweir #include <sfx2/request.hxx> 65cdf0e10cSrcweir #include <sfx2/viewfrm.hxx> 66cdf0e10cSrcweir #include <svtools/cliplistener.hxx> 67cdf0e10cSrcweir #include <svtools/transfer.hxx> 68cdf0e10cSrcweir #include <svl/whiter.hxx> 69cdf0e10cSrcweir #include <svl/languageoptions.hxx> 70cdf0e10cSrcweir #include <vcl/msgbox.hxx> 71cdf0e10cSrcweir 72cdf0e10cSrcweir #include <svx/svxdlg.hxx> 73cdf0e10cSrcweir #include <svx/dialogs.hrc> 74f120fe41SAndre Fischer #include <sfx2/sidebar/EnumContext.hxx> 75cdf0e10cSrcweir 76cdf0e10cSrcweir #include "sc.hrc" 77cdf0e10cSrcweir #include "globstr.hrc" 78cdf0e10cSrcweir #include "scmod.hxx" 79cdf0e10cSrcweir #include "drtxtob.hxx" 80cdf0e10cSrcweir #include "fudraw.hxx" 81cdf0e10cSrcweir #include "viewdata.hxx" 82cdf0e10cSrcweir #include "document.hxx" 83cdf0e10cSrcweir #include "drawview.hxx" 84cdf0e10cSrcweir #include "viewutil.hxx" 85cdf0e10cSrcweir #include "scresid.hxx" 86cdf0e10cSrcweir #include "tabvwsh.hxx" 87cdf0e10cSrcweir 88cdf0e10cSrcweir #define ScDrawTextObjectBar 89cdf0e10cSrcweir #include "scslots.hxx" 90cdf0e10cSrcweir 91cdf0e10cSrcweir 92cdf0e10cSrcweir using namespace ::com::sun::star; 93cdf0e10cSrcweir 94cdf0e10cSrcweir 95cdf0e10cSrcweir SFX_IMPL_INTERFACE( ScDrawTextObjectBar, SfxShell, ScResId(SCSTR_DRAWTEXTSHELL) ) 96cdf0e10cSrcweir { 97cdf0e10cSrcweir SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_OBJECT|SFX_VISIBILITY_STANDARD|SFX_VISIBILITY_SERVER, 98cdf0e10cSrcweir ScResId(RID_TEXT_TOOLBOX) ); 99cdf0e10cSrcweir SFX_POPUPMENU_REGISTRATION( ScResId(RID_POPUP_DRAWTEXT) ); 100cdf0e10cSrcweir SFX_CHILDWINDOW_REGISTRATION( ScGetFontWorkId() ); 101cdf0e10cSrcweir } 102cdf0e10cSrcweir 103cdf0e10cSrcweir TYPEINIT1( ScDrawTextObjectBar, SfxShell ); 104cdf0e10cSrcweir 105cdf0e10cSrcweir 106cdf0e10cSrcweir 107cdf0e10cSrcweir // abschalten der nicht erwuenschten Acceleratoren: 108cdf0e10cSrcweir 109cdf0e10cSrcweir void ScDrawTextObjectBar::StateDisableItems( SfxItemSet &rSet ) 110cdf0e10cSrcweir { 111cdf0e10cSrcweir SfxWhichIter aIter(rSet); 112cdf0e10cSrcweir sal_uInt16 nWhich = aIter.FirstWhich(); 113cdf0e10cSrcweir 114cdf0e10cSrcweir while (nWhich) 115cdf0e10cSrcweir { 116cdf0e10cSrcweir rSet.DisableItem( nWhich ); 117cdf0e10cSrcweir nWhich = aIter.NextWhich(); 118cdf0e10cSrcweir } 119cdf0e10cSrcweir } 120cdf0e10cSrcweir 121cdf0e10cSrcweir ScDrawTextObjectBar::ScDrawTextObjectBar(ScViewData* pData) : 122cdf0e10cSrcweir SfxShell(pData->GetViewShell()), 123cdf0e10cSrcweir pViewData(pData), 124cdf0e10cSrcweir pClipEvtLstnr(NULL), 125cdf0e10cSrcweir bPastePossible(sal_False) 126cdf0e10cSrcweir { 127cdf0e10cSrcweir SetPool( pViewData->GetScDrawView()->GetDefaultAttr().GetPool() ); 128cdf0e10cSrcweir 129cdf0e10cSrcweir // UndoManager wird beim Umschalten in den Edit-Modus umgesetzt... 130cdf0e10cSrcweir ::svl::IUndoManager* pMgr = pViewData->GetSfxDocShell()->GetUndoManager(); 131cdf0e10cSrcweir SetUndoManager( pMgr ); 132cdf0e10cSrcweir if ( !pViewData->GetDocument()->IsUndoEnabled() ) 133cdf0e10cSrcweir { 134cdf0e10cSrcweir pMgr->SetMaxUndoActionCount( 0 ); 135cdf0e10cSrcweir } 136cdf0e10cSrcweir 137cdf0e10cSrcweir SetHelpId( HID_SCSHELL_DRTXTOB ); 138cdf0e10cSrcweir SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("DrawText"))); 139f120fe41SAndre Fischer SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_DrawText)); 140cdf0e10cSrcweir } 141cdf0e10cSrcweir 142cdf0e10cSrcweir __EXPORT ScDrawTextObjectBar::~ScDrawTextObjectBar() 143cdf0e10cSrcweir { 144cdf0e10cSrcweir if ( pClipEvtLstnr ) 145cdf0e10cSrcweir { 146cdf0e10cSrcweir pClipEvtLstnr->AddRemoveListener( pViewData->GetActiveWin(), sal_False ); 147cdf0e10cSrcweir 148cdf0e10cSrcweir // #122057# The listener may just now be waiting for the SolarMutex and call the link 149cdf0e10cSrcweir // afterwards, in spite of RemoveListener. So the link has to be reset, too. 150cdf0e10cSrcweir pClipEvtLstnr->ClearCallbackLink(); 151cdf0e10cSrcweir 152cdf0e10cSrcweir pClipEvtLstnr->release(); 153cdf0e10cSrcweir } 154cdf0e10cSrcweir } 155cdf0e10cSrcweir 156cdf0e10cSrcweir //======================================================================== 157cdf0e10cSrcweir // 158cdf0e10cSrcweir // Funktionen 159cdf0e10cSrcweir // 160cdf0e10cSrcweir //======================================================================== 161cdf0e10cSrcweir 162cdf0e10cSrcweir void __EXPORT ScDrawTextObjectBar::Execute( SfxRequest &rReq ) 163cdf0e10cSrcweir { 164cdf0e10cSrcweir ScDrawView* pView = pViewData->GetScDrawView(); 165cdf0e10cSrcweir OutlinerView* pOutView = pView->GetTextEditOutlinerView(); 166cdf0e10cSrcweir Outliner* pOutliner = pView->GetTextEditOutliner(); 167cdf0e10cSrcweir 168cdf0e10cSrcweir if (!pOutView || !pOutliner) 169cdf0e10cSrcweir { 170cdf0e10cSrcweir ExecuteGlobal( rReq ); // auf ganze Objekte 171cdf0e10cSrcweir return; 172cdf0e10cSrcweir } 173cdf0e10cSrcweir 174cdf0e10cSrcweir const SfxItemSet* pReqArgs = rReq.GetArgs(); 175cdf0e10cSrcweir sal_uInt16 nSlot = rReq.GetSlot(); 176cdf0e10cSrcweir switch ( nSlot ) 177cdf0e10cSrcweir { 178cdf0e10cSrcweir case SID_COPY: 179cdf0e10cSrcweir pOutView->Copy(); 180cdf0e10cSrcweir break; 181cdf0e10cSrcweir 182cdf0e10cSrcweir case SID_CUT: 183cdf0e10cSrcweir pOutView->Cut(); 184cdf0e10cSrcweir break; 185cdf0e10cSrcweir 186cdf0e10cSrcweir case SID_PASTE: 187cdf0e10cSrcweir pOutView->PasteSpecial(); 188cdf0e10cSrcweir break; 189cdf0e10cSrcweir 190cdf0e10cSrcweir case SID_CLIPBOARD_FORMAT_ITEMS: 191cdf0e10cSrcweir { 192cdf0e10cSrcweir sal_uLong nFormat = 0; 193cdf0e10cSrcweir const SfxPoolItem* pItem; 194cdf0e10cSrcweir if ( pReqArgs && 195cdf0e10cSrcweir pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET && 196cdf0e10cSrcweir pItem->ISA(SfxUInt32Item) ) 197cdf0e10cSrcweir { 198cdf0e10cSrcweir nFormat = ((const SfxUInt32Item*)pItem)->GetValue(); 199cdf0e10cSrcweir } 200cdf0e10cSrcweir 201cdf0e10cSrcweir if ( nFormat ) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir if (nFormat == SOT_FORMAT_STRING) 204cdf0e10cSrcweir pOutView->Paste(); 205cdf0e10cSrcweir else 206cdf0e10cSrcweir pOutView->PasteSpecial(); 207cdf0e10cSrcweir } 208cdf0e10cSrcweir } 209cdf0e10cSrcweir break; 210cdf0e10cSrcweir 211cdf0e10cSrcweir case SID_PASTE_SPECIAL: 212cdf0e10cSrcweir ExecutePasteContents( rReq ); 213cdf0e10cSrcweir break; 214cdf0e10cSrcweir 215cdf0e10cSrcweir case SID_SELECTALL: 216cdf0e10cSrcweir { 217cdf0e10cSrcweir sal_uLong nCount = pOutliner->GetParagraphCount(); 218cdf0e10cSrcweir ESelection aSel( 0,0,(sal_uInt16)nCount,0 ); 219cdf0e10cSrcweir pOutView->SetSelection( aSel ); 220cdf0e10cSrcweir } 221cdf0e10cSrcweir break; 222cdf0e10cSrcweir 223cdf0e10cSrcweir case SID_CHARMAP: 224cdf0e10cSrcweir { 225cdf0e10cSrcweir const SvxFontItem& rItem = (const SvxFontItem&) 226cdf0e10cSrcweir pOutView->GetAttribs().Get(EE_CHAR_FONTINFO); 227cdf0e10cSrcweir 228cdf0e10cSrcweir String aString; 229cdf0e10cSrcweir SvxFontItem aNewItem( EE_CHAR_FONTINFO ); 230cdf0e10cSrcweir 231cdf0e10cSrcweir const SfxItemSet *pArgs = rReq.GetArgs(); 232cdf0e10cSrcweir const SfxPoolItem* pItem = 0; 233cdf0e10cSrcweir if( pArgs ) 234cdf0e10cSrcweir pArgs->GetItemState(GetPool().GetWhich(SID_CHARMAP), sal_False, &pItem); 235cdf0e10cSrcweir 236cdf0e10cSrcweir if ( pItem ) 237cdf0e10cSrcweir { 238cdf0e10cSrcweir aString = ((const SfxStringItem*)pItem)->GetValue(); 239cdf0e10cSrcweir const SfxPoolItem* pFtItem = NULL; 240cdf0e10cSrcweir pArgs->GetItemState( GetPool().GetWhich(SID_ATTR_SPECIALCHAR), sal_False, &pFtItem); 241cdf0e10cSrcweir const SfxStringItem* pFontItem = PTR_CAST( SfxStringItem, pFtItem ); 242cdf0e10cSrcweir if ( pFontItem ) 243cdf0e10cSrcweir { 244cdf0e10cSrcweir String aFontName(pFontItem->GetValue()); 245cdf0e10cSrcweir Font aFont(aFontName, Size(1,1)); // Size nur wg. CTOR 246cdf0e10cSrcweir aNewItem = SvxFontItem( aFont.GetFamily(), aFont.GetName(), 247cdf0e10cSrcweir aFont.GetStyleName(), aFont.GetPitch(), 248cdf0e10cSrcweir aFont.GetCharSet(), ATTR_FONT ); 249cdf0e10cSrcweir } 250cdf0e10cSrcweir else 251cdf0e10cSrcweir aNewItem = rItem; 252cdf0e10cSrcweir } 253cdf0e10cSrcweir else 254cdf0e10cSrcweir ScViewUtil::ExecuteCharMap( rItem, *pViewData->GetViewShell()->GetViewFrame(), aNewItem, aString ); 255cdf0e10cSrcweir 256cdf0e10cSrcweir if ( aString.Len() ) 257cdf0e10cSrcweir { 258cdf0e10cSrcweir SfxItemSet aSet( pOutliner->GetEmptyItemSet() ); 259cdf0e10cSrcweir aSet.Put( aNewItem ); 260cdf0e10cSrcweir // SetAttribs an der View selektiert ein Wort, wenn nichts selektiert ist 261cdf0e10cSrcweir pOutView->GetOutliner()->QuickSetAttribs( aSet, pOutView->GetSelection() ); 262cdf0e10cSrcweir pOutView->InsertText(aString); 263cdf0e10cSrcweir } 264cdf0e10cSrcweir 265cdf0e10cSrcweir Invalidate( SID_ATTR_CHAR_FONT ); 266cdf0e10cSrcweir } 267cdf0e10cSrcweir break; 268cdf0e10cSrcweir 269cdf0e10cSrcweir case SID_HYPERLINK_SETLINK: 270cdf0e10cSrcweir if( pReqArgs ) 271cdf0e10cSrcweir { 272cdf0e10cSrcweir const SfxPoolItem* pItem; 273cdf0e10cSrcweir if ( pReqArgs->GetItemState( SID_HYPERLINK_SETLINK, sal_True, &pItem ) == SFX_ITEM_SET ) 274cdf0e10cSrcweir { 275cdf0e10cSrcweir const SvxHyperlinkItem* pHyper = (const SvxHyperlinkItem*) pItem; 276cdf0e10cSrcweir const String& rName = pHyper->GetName(); 277cdf0e10cSrcweir const String& rURL = pHyper->GetURL(); 278cdf0e10cSrcweir const String& rTarget = pHyper->GetTargetFrame(); 279cdf0e10cSrcweir SvxLinkInsertMode eMode = pHyper->GetInsertMode(); 280cdf0e10cSrcweir 281cdf0e10cSrcweir sal_Bool bDone = sal_False; 282cdf0e10cSrcweir if ( pOutView && ( eMode == HLINK_DEFAULT || eMode == HLINK_FIELD ) ) 283cdf0e10cSrcweir { 284cdf0e10cSrcweir const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection(); 285cdf0e10cSrcweir if (pFieldItem) 286cdf0e10cSrcweir { 287cdf0e10cSrcweir const SvxFieldData* pField = pFieldItem->GetField(); 288cdf0e10cSrcweir if ( pField && pField->ISA(SvxURLField) ) 289cdf0e10cSrcweir { 290cdf0e10cSrcweir // altes Feld selektieren 291cdf0e10cSrcweir 292cdf0e10cSrcweir ESelection aSel = pOutView->GetSelection(); 293cdf0e10cSrcweir aSel.Adjust(); 294cdf0e10cSrcweir aSel.nEndPara = aSel.nStartPara; 295cdf0e10cSrcweir aSel.nEndPos = aSel.nStartPos + 1; 296cdf0e10cSrcweir pOutView->SetSelection( aSel ); 297cdf0e10cSrcweir } 298cdf0e10cSrcweir } 299cdf0e10cSrcweir 300cdf0e10cSrcweir // neues Feld einfuegen 301cdf0e10cSrcweir 302cdf0e10cSrcweir SvxURLField aURLField( rURL, rName, SVXURLFORMAT_REPR ); 303cdf0e10cSrcweir aURLField.SetTargetFrame( rTarget ); 304cdf0e10cSrcweir SvxFieldItem aURLItem( aURLField, EE_FEATURE_FIELD ); 305cdf0e10cSrcweir pOutView->InsertField( aURLItem ); 306cdf0e10cSrcweir 307cdf0e10cSrcweir // select new field 308cdf0e10cSrcweir 309cdf0e10cSrcweir ESelection aSel = pOutView->GetSelection(); 310cdf0e10cSrcweir if ( aSel.nStartPos == aSel.nEndPos && aSel.nStartPos > 0 ) 311cdf0e10cSrcweir { 312cdf0e10cSrcweir // Cursor is behind the inserted field -> extend selection to the left 313cdf0e10cSrcweir 314cdf0e10cSrcweir --aSel.nStartPos; 315cdf0e10cSrcweir pOutView->SetSelection( aSel ); 316cdf0e10cSrcweir } 317cdf0e10cSrcweir 318cdf0e10cSrcweir bDone = sal_True; 319cdf0e10cSrcweir } 320cdf0e10cSrcweir 321cdf0e10cSrcweir if (!bDone) 322cdf0e10cSrcweir ExecuteGlobal( rReq ); // normal an der View 323cdf0e10cSrcweir 324cdf0e10cSrcweir // InsertURL an der ViewShell schaltet bei "Text" die DrawShell ab !!! 325cdf0e10cSrcweir } 326cdf0e10cSrcweir } 327cdf0e10cSrcweir break; 328cdf0e10cSrcweir 329cdf0e10cSrcweir case SID_OPEN_HYPERLINK: 330cdf0e10cSrcweir { 331cdf0e10cSrcweir if ( pOutView ) 332cdf0e10cSrcweir { 333cdf0e10cSrcweir const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection(); 334cdf0e10cSrcweir if ( pFieldItem ) 335cdf0e10cSrcweir { 336cdf0e10cSrcweir const SvxFieldData* pField = pFieldItem->GetField(); 337cdf0e10cSrcweir if( pField && pField->ISA( SvxURLField ) ) 338cdf0e10cSrcweir { 339cdf0e10cSrcweir const SvxURLField* pURLField = static_cast< const SvxURLField* >( pField ); 340cdf0e10cSrcweir ScGlobal::OpenURL( pURLField->GetURL(), pURLField->GetTargetFrame() ); 341cdf0e10cSrcweir } 342cdf0e10cSrcweir } 343cdf0e10cSrcweir } 344cdf0e10cSrcweir } 345cdf0e10cSrcweir break; 346cdf0e10cSrcweir 347cdf0e10cSrcweir case SID_ENABLE_HYPHENATION: 348cdf0e10cSrcweir case SID_TEXTDIRECTION_LEFT_TO_RIGHT: 349cdf0e10cSrcweir case SID_TEXTDIRECTION_TOP_TO_BOTTOM: 350cdf0e10cSrcweir #if 0 // DR 351cdf0e10cSrcweir if (IsNoteEdit()) 352cdf0e10cSrcweir { 353cdf0e10cSrcweir pView->CaptionTextDirection( rReq.GetSlot()); // process Notes before we end the text edit. 354cdf0e10cSrcweir ExecuteGlobal( rReq ); 355cdf0e10cSrcweir pViewData->GetDispatcher().Execute(pViewData->GetView()->GetDrawFuncPtr()->GetSlotID(), SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); 356cdf0e10cSrcweir } 357cdf0e10cSrcweir else 358cdf0e10cSrcweir #endif 359cdf0e10cSrcweir { 360cdf0e10cSrcweir pView->ScEndTextEdit(); // end text edit before switching direction 361cdf0e10cSrcweir ExecuteGlobal( rReq ); 362cdf0e10cSrcweir // restore consistent state between shells and functions: 363cdf0e10cSrcweir pViewData->GetDispatcher().Execute(SID_OBJECT_SELECT, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); 364cdf0e10cSrcweir } 365cdf0e10cSrcweir break; 366cdf0e10cSrcweir 367cdf0e10cSrcweir #if 0 368cdf0e10cSrcweir // Hyphenation is handled above - text edit is ended 369cdf0e10cSrcweir case SID_ENABLE_HYPHENATION: 370cdf0e10cSrcweir // force loading of hyphenator (object is skipped in repaint) 371cdf0e10cSrcweir ((ScDrawLayer*)pView->GetModel())->UseHyphenator(); 372cdf0e10cSrcweir pOutliner->SetHyphenator( LinguMgr::GetHyphenator() ); 373cdf0e10cSrcweir ExecuteGlobal( rReq ); 374cdf0e10cSrcweir break; 375cdf0e10cSrcweir #endif 376cdf0e10cSrcweir 377cdf0e10cSrcweir case SID_THES: 378cdf0e10cSrcweir { 379cdf0e10cSrcweir String aReplaceText; 380cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, sal_False ); 381cdf0e10cSrcweir if (pItem2) 382cdf0e10cSrcweir aReplaceText = pItem2->GetValue(); 383cdf0e10cSrcweir if (aReplaceText.Len() > 0) 384cdf0e10cSrcweir ReplaceTextWithSynonym( pOutView->GetEditView(), aReplaceText ); 385cdf0e10cSrcweir } 386cdf0e10cSrcweir break; 387cdf0e10cSrcweir 388cdf0e10cSrcweir case SID_THESAURUS: 389cdf0e10cSrcweir { 390cdf0e10cSrcweir pOutView->StartThesaurus(); 391cdf0e10cSrcweir } 392cdf0e10cSrcweir break; 393cdf0e10cSrcweir 394cdf0e10cSrcweir } 395cdf0e10cSrcweir } 396cdf0e10cSrcweir 397cdf0e10cSrcweir void __EXPORT ScDrawTextObjectBar::GetState( SfxItemSet& rSet ) 398cdf0e10cSrcweir { 399cdf0e10cSrcweir SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame(); 400cdf0e10cSrcweir sal_Bool bHasFontWork = pViewFrm->HasChildWindow(SID_FONTWORK); 401cdf0e10cSrcweir sal_Bool bDisableFontWork = sal_False; 402cdf0e10cSrcweir 403cdf0e10cSrcweir if (IsNoteEdit()) 404cdf0e10cSrcweir { 405cdf0e10cSrcweir // #i21255# notes now support rich text formatting (#i74140# but not fontwork) 406cdf0e10cSrcweir bDisableFontWork = sal_True; 407cdf0e10cSrcweir } 408cdf0e10cSrcweir 409cdf0e10cSrcweir if ( bDisableFontWork ) 410cdf0e10cSrcweir rSet.DisableItem( SID_FONTWORK ); 411cdf0e10cSrcweir else 412cdf0e10cSrcweir rSet.Put(SfxBoolItem(SID_FONTWORK, bHasFontWork)); 413cdf0e10cSrcweir 414cdf0e10cSrcweir if ( rSet.GetItemState( SID_HYPERLINK_GETLINK ) != SFX_ITEM_UNKNOWN ) 415cdf0e10cSrcweir { 416cdf0e10cSrcweir SvxHyperlinkItem aHLinkItem; 417cdf0e10cSrcweir SdrView* pView = pViewData->GetScDrawView(); 418cdf0e10cSrcweir OutlinerView* pOutView = pView->GetTextEditOutlinerView(); 419cdf0e10cSrcweir if ( pOutView ) 420cdf0e10cSrcweir { 421cdf0e10cSrcweir sal_Bool bField = sal_False; 422cdf0e10cSrcweir const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection(); 423cdf0e10cSrcweir if (pFieldItem) 424cdf0e10cSrcweir { 425cdf0e10cSrcweir const SvxFieldData* pField = pFieldItem->GetField(); 426cdf0e10cSrcweir if ( pField && pField->ISA(SvxURLField) ) 427cdf0e10cSrcweir { 428cdf0e10cSrcweir const SvxURLField* pURLField = (const SvxURLField*) pField; 429cdf0e10cSrcweir aHLinkItem.SetName( pURLField->GetRepresentation() ); 430cdf0e10cSrcweir aHLinkItem.SetURL( pURLField->GetURL() ); 431cdf0e10cSrcweir aHLinkItem.SetTargetFrame( pURLField->GetTargetFrame() ); 432cdf0e10cSrcweir bField = sal_True; 433cdf0e10cSrcweir } 434cdf0e10cSrcweir } 435cdf0e10cSrcweir if (!bField) 436cdf0e10cSrcweir { 437cdf0e10cSrcweir // use selected text as name for urls 438cdf0e10cSrcweir String sReturn = pOutView->GetSelected(); 439cdf0e10cSrcweir sReturn.Erase(255); 440cdf0e10cSrcweir sReturn.EraseTrailingChars(); 441cdf0e10cSrcweir aHLinkItem.SetName(sReturn); 442cdf0e10cSrcweir } 443cdf0e10cSrcweir } 444cdf0e10cSrcweir rSet.Put(aHLinkItem); 445cdf0e10cSrcweir } 446cdf0e10cSrcweir 447cdf0e10cSrcweir if ( rSet.GetItemState( SID_OPEN_HYPERLINK ) != SFX_ITEM_UNKNOWN ) 448cdf0e10cSrcweir { 449cdf0e10cSrcweir SdrView* pView = pViewData->GetScDrawView(); 450cdf0e10cSrcweir OutlinerView* pOutView = pView->GetTextEditOutlinerView(); 451cdf0e10cSrcweir bool bEnable = false; 452cdf0e10cSrcweir if ( pOutView ) 453cdf0e10cSrcweir { 454cdf0e10cSrcweir const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection(); 455cdf0e10cSrcweir if ( pFieldItem ) 456cdf0e10cSrcweir { 457cdf0e10cSrcweir const SvxFieldData* pField = pFieldItem->GetField(); 458cdf0e10cSrcweir bEnable = pField && pField->ISA( SvxURLField ); 459cdf0e10cSrcweir } 460cdf0e10cSrcweir } 461cdf0e10cSrcweir if( !bEnable ) 462cdf0e10cSrcweir rSet.DisableItem( SID_OPEN_HYPERLINK ); 463cdf0e10cSrcweir } 464cdf0e10cSrcweir 465cdf0e10cSrcweir if( rSet.GetItemState( SID_TRANSLITERATE_HALFWIDTH ) != SFX_ITEM_UNKNOWN ) 466cdf0e10cSrcweir ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_HALFWIDTH ); 467cdf0e10cSrcweir if( rSet.GetItemState( SID_TRANSLITERATE_FULLWIDTH ) != SFX_ITEM_UNKNOWN ) 468cdf0e10cSrcweir ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_FULLWIDTH ); 469cdf0e10cSrcweir if( rSet.GetItemState( SID_TRANSLITERATE_HIRAGANA ) != SFX_ITEM_UNKNOWN ) 470cdf0e10cSrcweir ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_HIRAGANA ); 471cdf0e10cSrcweir if( rSet.GetItemState( SID_TRANSLITERATE_KATAGANA ) != SFX_ITEM_UNKNOWN ) 472cdf0e10cSrcweir ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_KATAGANA ); 473cdf0e10cSrcweir 474cdf0e10cSrcweir if ( rSet.GetItemState( SID_ENABLE_HYPHENATION ) != SFX_ITEM_UNKNOWN ) 475cdf0e10cSrcweir { 476cdf0e10cSrcweir SdrView* pView = pViewData->GetScDrawView(); 477cdf0e10cSrcweir SfxItemSet aAttrs( pView->GetModel()->GetItemPool() ); 478cdf0e10cSrcweir pView->GetAttributes( aAttrs ); 479cdf0e10cSrcweir if( aAttrs.GetItemState( EE_PARA_HYPHENATE ) >= SFX_ITEM_AVAILABLE ) 480cdf0e10cSrcweir { 481cdf0e10cSrcweir sal_Bool bValue = ( (const SfxBoolItem&) aAttrs.Get( EE_PARA_HYPHENATE ) ).GetValue(); 482cdf0e10cSrcweir rSet.Put( SfxBoolItem( SID_ENABLE_HYPHENATION, bValue ) ); 483cdf0e10cSrcweir } 484cdf0e10cSrcweir } 485cdf0e10cSrcweir 486cdf0e10cSrcweir if ( rSet.GetItemState( SID_THES ) != SFX_ITEM_UNKNOWN || 487cdf0e10cSrcweir rSet.GetItemState( SID_THESAURUS ) != SFX_ITEM_UNKNOWN ) 488cdf0e10cSrcweir { 489cdf0e10cSrcweir SdrView * pView = pViewData->GetScDrawView(); 490cdf0e10cSrcweir OutlinerView* pOutView = pView->GetTextEditOutlinerView(); 491cdf0e10cSrcweir 492cdf0e10cSrcweir String aStatusVal; 493cdf0e10cSrcweir LanguageType nLang = LANGUAGE_NONE; 494cdf0e10cSrcweir bool bIsLookUpWord = false; 495cdf0e10cSrcweir if ( pOutView ) 496cdf0e10cSrcweir { 497cdf0e10cSrcweir EditView& rEditView = pOutView->GetEditView(); 498cdf0e10cSrcweir bIsLookUpWord = GetStatusValueForThesaurusFromContext( aStatusVal, nLang, rEditView ); 499cdf0e10cSrcweir } 500cdf0e10cSrcweir rSet.Put( SfxStringItem( SID_THES, aStatusVal ) ); 501cdf0e10cSrcweir 502cdf0e10cSrcweir // disable thesaurus main menu and context menu entry if there is nothing to look up 503cdf0e10cSrcweir sal_Bool bCanDoThesaurus = ScModule::HasThesaurusLanguage( nLang ); 504cdf0e10cSrcweir if (!bIsLookUpWord || !bCanDoThesaurus) 505cdf0e10cSrcweir rSet.DisableItem( SID_THES ); 506cdf0e10cSrcweir if (!bCanDoThesaurus) 507cdf0e10cSrcweir rSet.DisableItem( SID_THESAURUS ); 508cdf0e10cSrcweir } 509cdf0e10cSrcweir } 510cdf0e10cSrcweir 511cdf0e10cSrcweir IMPL_LINK( ScDrawTextObjectBar, ClipboardChanged, TransferableDataHelper*, pDataHelper ) 512cdf0e10cSrcweir { 513cdf0e10cSrcweir if ( pDataHelper ) 514cdf0e10cSrcweir { 515cdf0e10cSrcweir bPastePossible = ( pDataHelper->HasFormat( SOT_FORMAT_STRING ) || pDataHelper->HasFormat( SOT_FORMAT_RTF ) ); 516cdf0e10cSrcweir 517cdf0e10cSrcweir SfxBindings& rBindings = pViewData->GetBindings(); 518cdf0e10cSrcweir rBindings.Invalidate( SID_PASTE ); 519cdf0e10cSrcweir rBindings.Invalidate( SID_PASTE_SPECIAL ); 520cdf0e10cSrcweir rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS ); 521cdf0e10cSrcweir } 522cdf0e10cSrcweir return 0; 523cdf0e10cSrcweir } 524cdf0e10cSrcweir 525cdf0e10cSrcweir void __EXPORT ScDrawTextObjectBar::GetClipState( SfxItemSet& rSet ) 526cdf0e10cSrcweir { 527cdf0e10cSrcweir SdrView* pView = pViewData->GetScDrawView(); 528cdf0e10cSrcweir if ( !pView->GetTextEditOutlinerView() ) 529cdf0e10cSrcweir { 530cdf0e10cSrcweir GetGlobalClipState( rSet ); 531cdf0e10cSrcweir return; 532cdf0e10cSrcweir } 533cdf0e10cSrcweir 534cdf0e10cSrcweir if ( !pClipEvtLstnr ) 535cdf0e10cSrcweir { 536cdf0e10cSrcweir // create listener 537cdf0e10cSrcweir pClipEvtLstnr = new TransferableClipboardListener( LINK( this, ScDrawTextObjectBar, ClipboardChanged ) ); 538cdf0e10cSrcweir pClipEvtLstnr->acquire(); 539cdf0e10cSrcweir Window* pWin = pViewData->GetActiveWin(); 540cdf0e10cSrcweir pClipEvtLstnr->AddRemoveListener( pWin, sal_True ); 541cdf0e10cSrcweir 542cdf0e10cSrcweir // get initial state 543cdf0e10cSrcweir TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( pViewData->GetActiveWin() ) ); 544cdf0e10cSrcweir bPastePossible = ( aDataHelper.HasFormat( SOT_FORMAT_STRING ) || aDataHelper.HasFormat( SOT_FORMAT_RTF ) ); 545cdf0e10cSrcweir } 546cdf0e10cSrcweir 547cdf0e10cSrcweir SfxWhichIter aIter( rSet ); 548cdf0e10cSrcweir sal_uInt16 nWhich = aIter.FirstWhich(); 549cdf0e10cSrcweir while (nWhich) 550cdf0e10cSrcweir { 551cdf0e10cSrcweir switch (nWhich) 552cdf0e10cSrcweir { 553cdf0e10cSrcweir case SID_PASTE: 554cdf0e10cSrcweir case SID_PASTE_SPECIAL: 555cdf0e10cSrcweir if( !bPastePossible ) 556cdf0e10cSrcweir rSet.DisableItem( nWhich ); 557cdf0e10cSrcweir break; 558cdf0e10cSrcweir case SID_CLIPBOARD_FORMAT_ITEMS: 559cdf0e10cSrcweir if ( bPastePossible ) 560cdf0e10cSrcweir { 561cdf0e10cSrcweir SvxClipboardFmtItem aFormats( SID_CLIPBOARD_FORMAT_ITEMS ); 562cdf0e10cSrcweir TransferableDataHelper aDataHelper( 563cdf0e10cSrcweir TransferableDataHelper::CreateFromSystemClipboard( pViewData->GetActiveWin() ) ); 564cdf0e10cSrcweir 565cdf0e10cSrcweir if ( aDataHelper.HasFormat( SOT_FORMAT_STRING ) ) 566cdf0e10cSrcweir aFormats.AddClipbrdFormat( SOT_FORMAT_STRING ); 567cdf0e10cSrcweir if ( aDataHelper.HasFormat( SOT_FORMAT_RTF ) ) 568cdf0e10cSrcweir aFormats.AddClipbrdFormat( SOT_FORMAT_RTF ); 569cdf0e10cSrcweir 570cdf0e10cSrcweir rSet.Put( aFormats ); 571cdf0e10cSrcweir } 572cdf0e10cSrcweir else 573cdf0e10cSrcweir rSet.DisableItem( nWhich ); 574cdf0e10cSrcweir break; 575cdf0e10cSrcweir } 576cdf0e10cSrcweir nWhich = aIter.NextWhich(); 577cdf0e10cSrcweir } 578cdf0e10cSrcweir } 579cdf0e10cSrcweir 580cdf0e10cSrcweir //======================================================================== 581cdf0e10cSrcweir // 582cdf0e10cSrcweir // Attribute 583cdf0e10cSrcweir // 584cdf0e10cSrcweir //======================================================================== 585cdf0e10cSrcweir 586cdf0e10cSrcweir void __EXPORT ScDrawTextObjectBar::ExecuteToggle( SfxRequest &rReq ) 587cdf0e10cSrcweir { 588cdf0e10cSrcweir // Unterstreichung 589cdf0e10cSrcweir 590cdf0e10cSrcweir SdrView* pView = pViewData->GetScDrawView(); 591cdf0e10cSrcweir 592cdf0e10cSrcweir sal_uInt16 nSlot = rReq.GetSlot(); 593cdf0e10cSrcweir 594cdf0e10cSrcweir SfxItemSet aSet( pView->GetDefaultAttr() ); 595cdf0e10cSrcweir 596cdf0e10cSrcweir SfxItemSet aViewAttr(pView->GetModel()->GetItemPool()); 597cdf0e10cSrcweir pView->GetAttributes(aViewAttr); 598cdf0e10cSrcweir 599cdf0e10cSrcweir // Unterstreichung 600cdf0e10cSrcweir FontUnderline eOld = ((const SvxUnderlineItem&) aViewAttr. 601cdf0e10cSrcweir Get(EE_CHAR_UNDERLINE)).GetLineStyle(); 602cdf0e10cSrcweir FontUnderline eNew = eOld; 603cdf0e10cSrcweir switch (nSlot) 604cdf0e10cSrcweir { 605cdf0e10cSrcweir case SID_ULINE_VAL_NONE: 606cdf0e10cSrcweir eNew = UNDERLINE_NONE; 607cdf0e10cSrcweir break; 608cdf0e10cSrcweir case SID_ULINE_VAL_SINGLE: 609cdf0e10cSrcweir eNew = ( eOld == UNDERLINE_SINGLE ) ? UNDERLINE_NONE : UNDERLINE_SINGLE; 610cdf0e10cSrcweir break; 611cdf0e10cSrcweir case SID_ULINE_VAL_DOUBLE: 612cdf0e10cSrcweir eNew = ( eOld == UNDERLINE_DOUBLE ) ? UNDERLINE_NONE : UNDERLINE_DOUBLE; 613cdf0e10cSrcweir break; 614cdf0e10cSrcweir case SID_ULINE_VAL_DOTTED: 615cdf0e10cSrcweir eNew = ( eOld == UNDERLINE_DOTTED ) ? UNDERLINE_NONE : UNDERLINE_DOTTED; 616cdf0e10cSrcweir break; 617cdf0e10cSrcweir default: 618cdf0e10cSrcweir break; 619cdf0e10cSrcweir } 620cdf0e10cSrcweir aSet.Put( SvxUnderlineItem( eNew, EE_CHAR_UNDERLINE ) ); 621cdf0e10cSrcweir 622cdf0e10cSrcweir pView->SetAttributes( aSet ); 623cdf0e10cSrcweir rReq.Done(); 624cdf0e10cSrcweir pViewData->GetScDrawView()->InvalidateDrawTextAttrs(); 625cdf0e10cSrcweir } 626cdf0e10cSrcweir 627cdf0e10cSrcweir void lcl_RemoveFields( OutlinerView& rOutView ) 628cdf0e10cSrcweir { 629cdf0e10cSrcweir //! Outliner should have RemoveFields with a selection 630cdf0e10cSrcweir 631cdf0e10cSrcweir Outliner* pOutliner = rOutView.GetOutliner(); 632cdf0e10cSrcweir if (!pOutliner) return; 633cdf0e10cSrcweir 634cdf0e10cSrcweir ESelection aOldSel = rOutView.GetSelection(); 635cdf0e10cSrcweir ESelection aSel = aOldSel; 636cdf0e10cSrcweir aSel.Adjust(); 637cdf0e10cSrcweir xub_StrLen nNewEnd = aSel.nEndPos; 638cdf0e10cSrcweir 639cdf0e10cSrcweir sal_Bool bUpdate = pOutliner->GetUpdateMode(); 640cdf0e10cSrcweir sal_Bool bChanged = sal_False; 641cdf0e10cSrcweir 642cdf0e10cSrcweir //! GetPortions and GetAttribs should be const! 643cdf0e10cSrcweir EditEngine& rEditEng = (EditEngine&)pOutliner->GetEditEngine(); 644cdf0e10cSrcweir 645cdf0e10cSrcweir sal_uLong nParCount = pOutliner->GetParagraphCount(); 646cdf0e10cSrcweir for (sal_uLong nPar=0; nPar<nParCount; nPar++) 647cdf0e10cSrcweir if ( nPar >= aSel.nStartPara && nPar <= aSel.nEndPara ) 648cdf0e10cSrcweir { 649cdf0e10cSrcweir SvUShorts aPortions; 650cdf0e10cSrcweir rEditEng.GetPortions( (sal_uInt16)nPar, aPortions ); 651766ce4d0SZheng Fan //! GetPortions should use xub_StrLen instead of sal_uInt16 652cdf0e10cSrcweir 653cdf0e10cSrcweir for ( sal_uInt16 nPos = aPortions.Count(); nPos; ) 654cdf0e10cSrcweir { 655cdf0e10cSrcweir --nPos; 656cdf0e10cSrcweir sal_uInt16 nEnd = aPortions.GetObject( nPos ); 657cdf0e10cSrcweir sal_uInt16 nStart = nPos ? aPortions.GetObject( nPos - 1 ) : 0; 658cdf0e10cSrcweir // fields are single characters 659cdf0e10cSrcweir if ( nEnd == nStart+1 && 660cdf0e10cSrcweir ( nPar > aSel.nStartPara || nStart >= aSel.nStartPos ) && 661cdf0e10cSrcweir ( nPar < aSel.nEndPara || nEnd <= aSel.nEndPos ) ) 662cdf0e10cSrcweir { 663cdf0e10cSrcweir ESelection aFieldSel( (sal_uInt16)nPar, nStart, (sal_uInt16)nPar, nEnd ); 664cdf0e10cSrcweir SfxItemSet aSet = rEditEng.GetAttribs( aFieldSel ); 665cdf0e10cSrcweir if ( aSet.GetItemState( EE_FEATURE_FIELD ) == SFX_ITEM_ON ) 666cdf0e10cSrcweir { 667cdf0e10cSrcweir if (!bChanged) 668cdf0e10cSrcweir { 669cdf0e10cSrcweir if (bUpdate) 670cdf0e10cSrcweir pOutliner->SetUpdateMode( sal_False ); 671cdf0e10cSrcweir String aName = ScGlobal::GetRscString( STR_UNDO_DELETECONTENTS ); 672cdf0e10cSrcweir pOutliner->GetUndoManager().EnterListAction( aName, aName ); 673cdf0e10cSrcweir bChanged = sal_True; 674cdf0e10cSrcweir } 675cdf0e10cSrcweir 676cdf0e10cSrcweir String aFieldText = rEditEng.GetText( aFieldSel ); 677cdf0e10cSrcweir pOutliner->QuickInsertText( aFieldText, aFieldSel ); 678cdf0e10cSrcweir if ( nPar == aSel.nEndPara ) 679cdf0e10cSrcweir { 680cdf0e10cSrcweir nNewEnd = sal::static_int_cast<xub_StrLen>( nNewEnd + aFieldText.Len() ); 681cdf0e10cSrcweir --nNewEnd; 682cdf0e10cSrcweir } 683cdf0e10cSrcweir } 684cdf0e10cSrcweir } 685cdf0e10cSrcweir } 686cdf0e10cSrcweir } 687cdf0e10cSrcweir 688cdf0e10cSrcweir if (bUpdate && bChanged) 689cdf0e10cSrcweir { 690cdf0e10cSrcweir pOutliner->GetUndoManager().LeaveListAction(); 691cdf0e10cSrcweir pOutliner->SetUpdateMode( sal_True ); 692cdf0e10cSrcweir } 693cdf0e10cSrcweir 694cdf0e10cSrcweir if ( aOldSel.IsEqual( aSel ) ) // aSel is adjusted 695cdf0e10cSrcweir aOldSel.nEndPos = nNewEnd; 696cdf0e10cSrcweir else 697cdf0e10cSrcweir aOldSel.nStartPos = nNewEnd; // if aOldSel is backwards 698cdf0e10cSrcweir rOutView.SetSelection( aOldSel ); 699cdf0e10cSrcweir } 700cdf0e10cSrcweir 701cdf0e10cSrcweir void __EXPORT ScDrawTextObjectBar::ExecuteAttr( SfxRequest &rReq ) 702cdf0e10cSrcweir { 703cdf0e10cSrcweir SdrView* pView = pViewData->GetScDrawView(); 704cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs(); 705cdf0e10cSrcweir sal_uInt16 nSlot = rReq.GetSlot(); 706cdf0e10cSrcweir 707cdf0e10cSrcweir sal_Bool bArgsInReq = ( pArgs != NULL ); 708cdf0e10cSrcweir if ( !bArgsInReq ) 709cdf0e10cSrcweir { 710cdf0e10cSrcweir SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); 711cdf0e10cSrcweir pView->GetAttributes(aEditAttr); 712cdf0e10cSrcweir SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); 713cdf0e10cSrcweir sal_Bool bDone = sal_True; 714cdf0e10cSrcweir 715cdf0e10cSrcweir switch ( nSlot ) 716cdf0e10cSrcweir { 717cdf0e10cSrcweir case SID_TEXT_STANDARD: // Harte Textattributierung loeschen 718cdf0e10cSrcweir { 719cdf0e10cSrcweir OutlinerView* pOutView = pView->IsTextEdit() ? 720cdf0e10cSrcweir pView->GetTextEditOutlinerView() : NULL; 721cdf0e10cSrcweir if ( pOutView ) 722cdf0e10cSrcweir pOutView->Paint( Rectangle() ); 723cdf0e10cSrcweir 724cdf0e10cSrcweir SfxItemSet aEmptyAttr( *aEditAttr.GetPool(), EE_ITEMS_START, EE_ITEMS_END ); 725cdf0e10cSrcweir pView->SetAttributes( aEmptyAttr, sal_True ); 726cdf0e10cSrcweir 727cdf0e10cSrcweir if ( pOutView ) 728cdf0e10cSrcweir { 729cdf0e10cSrcweir lcl_RemoveFields( *pOutView ); 730cdf0e10cSrcweir pOutView->ShowCursor(); 731cdf0e10cSrcweir } 732cdf0e10cSrcweir 733cdf0e10cSrcweir rReq.Done( aEmptyAttr ); 734cdf0e10cSrcweir pViewData->GetScDrawView()->InvalidateDrawTextAttrs(); 735cdf0e10cSrcweir bDone = sal_False; // bereits hier passiert 736cdf0e10cSrcweir } 737cdf0e10cSrcweir break; 738cdf0e10cSrcweir 739d9a8b508SZheng Fan case SID_CHAR_DLG_EFFECT: 740cdf0e10cSrcweir case SID_CHAR_DLG: // Dialog-Button 741cdf0e10cSrcweir case SID_ATTR_CHAR_FONT: // Controller nicht angezeigt 742cdf0e10cSrcweir case SID_ATTR_CHAR_FONTHEIGHT: 743d9a8b508SZheng Fan bDone = ExecuteCharDlg( aEditAttr, aNewAttr , nSlot); 744cdf0e10cSrcweir break; 745cdf0e10cSrcweir 746cdf0e10cSrcweir case SID_PARA_DLG: 747cdf0e10cSrcweir bDone = ExecuteParaDlg( aEditAttr, aNewAttr ); 748cdf0e10cSrcweir break; 749cdf0e10cSrcweir 750cdf0e10cSrcweir case SID_ATTR_CHAR_WEIGHT: 751cdf0e10cSrcweir aNewAttr.Put( (const SvxWeightItem&)aEditAttr.Get( EE_CHAR_WEIGHT ) ); 752cdf0e10cSrcweir break; 753cdf0e10cSrcweir 754cdf0e10cSrcweir case SID_ATTR_CHAR_POSTURE: 755cdf0e10cSrcweir aNewAttr.Put( (const SvxPostureItem&)aEditAttr.Get( EE_CHAR_ITALIC ) ); 756cdf0e10cSrcweir break; 757cdf0e10cSrcweir 758cdf0e10cSrcweir case SID_ATTR_CHAR_UNDERLINE: 759cdf0e10cSrcweir aNewAttr.Put( (const SvxUnderlineItem&)aEditAttr.Get( EE_CHAR_UNDERLINE ) ); 760cdf0e10cSrcweir break; 761cdf0e10cSrcweir 762cdf0e10cSrcweir case SID_ATTR_CHAR_OVERLINE: 763cdf0e10cSrcweir aNewAttr.Put( (const SvxOverlineItem&)aEditAttr.Get( EE_CHAR_OVERLINE ) ); 764cdf0e10cSrcweir break; 765cdf0e10cSrcweir 766cdf0e10cSrcweir case SID_ATTR_CHAR_CONTOUR: 767cdf0e10cSrcweir aNewAttr.Put( (const SvxContourItem&)aEditAttr.Get( EE_CHAR_OUTLINE ) ); 768cdf0e10cSrcweir break; 769cdf0e10cSrcweir 770cdf0e10cSrcweir case SID_ATTR_CHAR_SHADOWED: 771cdf0e10cSrcweir aNewAttr.Put( (const SvxShadowedItem&)aEditAttr.Get( EE_CHAR_SHADOW ) ); 772cdf0e10cSrcweir break; 773cdf0e10cSrcweir 774cdf0e10cSrcweir case SID_ATTR_CHAR_STRIKEOUT: 775cdf0e10cSrcweir aNewAttr.Put( (const SvxCrossedOutItem&)aEditAttr.Get( EE_CHAR_STRIKEOUT ) ); 776cdf0e10cSrcweir break; 777cdf0e10cSrcweir 778cdf0e10cSrcweir case SID_ALIGNLEFT: 779cdf0e10cSrcweir case SID_ALIGN_ANY_LEFT: 780cdf0e10cSrcweir aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) ); 781cdf0e10cSrcweir break; 782cdf0e10cSrcweir 783cdf0e10cSrcweir case SID_ALIGNCENTERHOR: 784cdf0e10cSrcweir case SID_ALIGN_ANY_HCENTER: 785cdf0e10cSrcweir aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) ); 786cdf0e10cSrcweir break; 787cdf0e10cSrcweir 788cdf0e10cSrcweir case SID_ALIGNRIGHT: 789cdf0e10cSrcweir case SID_ALIGN_ANY_RIGHT: 790cdf0e10cSrcweir aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) ); 791cdf0e10cSrcweir break; 792cdf0e10cSrcweir 793cdf0e10cSrcweir case SID_ALIGNBLOCK: 794cdf0e10cSrcweir case SID_ALIGN_ANY_JUSTIFIED: 795cdf0e10cSrcweir aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) ); 796cdf0e10cSrcweir break; 797cdf0e10cSrcweir 798cdf0e10cSrcweir case SID_ATTR_PARA_LINESPACE_10: 799cdf0e10cSrcweir { 800cdf0e10cSrcweir SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_LINE, EE_PARA_SBL ); 801cdf0e10cSrcweir aItem.SetPropLineSpace( 100 ); 802cdf0e10cSrcweir aNewAttr.Put( aItem ); 803cdf0e10cSrcweir } 804cdf0e10cSrcweir break; 805cdf0e10cSrcweir 806cdf0e10cSrcweir case SID_ATTR_PARA_LINESPACE_15: 807cdf0e10cSrcweir { 808cdf0e10cSrcweir SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL ); 809cdf0e10cSrcweir aItem.SetPropLineSpace( 150 ); 810cdf0e10cSrcweir aNewAttr.Put( aItem ); 811cdf0e10cSrcweir } 812cdf0e10cSrcweir break; 813cdf0e10cSrcweir 814cdf0e10cSrcweir case SID_ATTR_PARA_LINESPACE_20: 815cdf0e10cSrcweir { 816cdf0e10cSrcweir SvxLineSpacingItem aItem( SVX_LINESPACE_TWO_LINES, EE_PARA_SBL ); 817cdf0e10cSrcweir aItem.SetPropLineSpace( 200 ); 818cdf0e10cSrcweir aNewAttr.Put( aItem ); 819cdf0e10cSrcweir } 820cdf0e10cSrcweir break; 821cdf0e10cSrcweir 822cdf0e10cSrcweir case SID_SET_SUPER_SCRIPT: 823cdf0e10cSrcweir { 824cdf0e10cSrcweir SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT); 825cdf0e10cSrcweir SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) 826cdf0e10cSrcweir aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 827cdf0e10cSrcweir 828cdf0e10cSrcweir if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) 829cdf0e10cSrcweir aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); 830cdf0e10cSrcweir else 831cdf0e10cSrcweir aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT ); 832cdf0e10cSrcweir aNewAttr.Put( aItem ); 833cdf0e10cSrcweir } 834cdf0e10cSrcweir break; 835cdf0e10cSrcweir case SID_SET_SUB_SCRIPT: 836cdf0e10cSrcweir { 837cdf0e10cSrcweir SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT); 838cdf0e10cSrcweir SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) 839cdf0e10cSrcweir aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 840cdf0e10cSrcweir 841cdf0e10cSrcweir if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) 842cdf0e10cSrcweir aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); 843cdf0e10cSrcweir else 844cdf0e10cSrcweir aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT ); 845cdf0e10cSrcweir aNewAttr.Put( aItem ); 846cdf0e10cSrcweir } 847cdf0e10cSrcweir break; 848cdf0e10cSrcweir 849cdf0e10cSrcweir case SID_DRAWTEXT_ATTR_DLG: 850cdf0e10cSrcweir { 851cdf0e10cSrcweir SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 852cdf0e10cSrcweir SfxAbstractTabDialog *pDlg = pFact->CreateTextTabDialog( pViewData->GetDialogParent(), &aEditAttr, pView ); 853cdf0e10cSrcweir 854cdf0e10cSrcweir bDone = ( RET_OK == pDlg->Execute() ); 855cdf0e10cSrcweir 856cdf0e10cSrcweir if ( bDone ) 857cdf0e10cSrcweir aNewAttr.Put( *pDlg->GetOutputItemSet() ); 858cdf0e10cSrcweir 859cdf0e10cSrcweir delete pDlg; 860*512ec161SZheng Fan 861*512ec161SZheng Fan SfxBindings& rBindings = pViewData->GetBindings(); 862*512ec161SZheng Fan rBindings.Invalidate( SID_TABLE_VERT_NONE ); 863*512ec161SZheng Fan rBindings.Invalidate( SID_TABLE_VERT_CENTER ); 864*512ec161SZheng Fan rBindings.Invalidate( SID_TABLE_VERT_BOTTOM ); 865cdf0e10cSrcweir } 866cdf0e10cSrcweir break; 867cdf0e10cSrcweir } 868cdf0e10cSrcweir 869cdf0e10cSrcweir if ( bDone ) // wurden Attribute geaendert? 870cdf0e10cSrcweir { 871cdf0e10cSrcweir rReq.Done( aNewAttr ); 872cdf0e10cSrcweir pArgs = rReq.GetArgs(); 873cdf0e10cSrcweir } 874cdf0e10cSrcweir } 875cdf0e10cSrcweir 876cdf0e10cSrcweir if ( pArgs ) 877cdf0e10cSrcweir { 878cdf0e10cSrcweir if ( bArgsInReq && 879cdf0e10cSrcweir ( nSlot == SID_ATTR_CHAR_FONT || nSlot == SID_ATTR_CHAR_FONTHEIGHT || 880cdf0e10cSrcweir nSlot == SID_ATTR_CHAR_WEIGHT || nSlot == SID_ATTR_CHAR_POSTURE ) ) 881cdf0e10cSrcweir { 882cdf0e10cSrcweir // font items from toolbox controller have to be applied for the right script type 883cdf0e10cSrcweir 884cdf0e10cSrcweir // #i78017 establish the same behaviour as in Writer 885cdf0e10cSrcweir sal_uInt16 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX; 886cdf0e10cSrcweir if (nSlot == SID_ATTR_CHAR_FONT) 887cdf0e10cSrcweir nScript = pView->GetScriptType(); 888cdf0e10cSrcweir 889cdf0e10cSrcweir SfxItemPool& rPool = GetPool(); 890cdf0e10cSrcweir SvxScriptSetItem aSetItem( nSlot, rPool ); 891cdf0e10cSrcweir sal_uInt16 nWhich = rPool.GetWhich( nSlot ); 892cdf0e10cSrcweir aSetItem.PutItemForScriptType( nScript, pArgs->Get( nWhich ) ); 893cdf0e10cSrcweir 894cdf0e10cSrcweir pView->SetAttributes( aSetItem.GetItemSet() ); 895cdf0e10cSrcweir } 896766ce4d0SZheng Fan else if( nSlot == SID_ATTR_PARA_LRSPACE ) 897766ce4d0SZheng Fan { 898766ce4d0SZheng Fan sal_uInt16 nId = SID_ATTR_PARA_LRSPACE; 899766ce4d0SZheng Fan const SvxLRSpaceItem& rItem = (const SvxLRSpaceItem&) 900766ce4d0SZheng Fan pArgs->Get( nId ); 901766ce4d0SZheng Fan SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE ); 902766ce4d0SZheng Fan nId = EE_PARA_LRSPACE; 903766ce4d0SZheng Fan SvxLRSpaceItem aLRSpaceItem( rItem.GetLeft(), 904766ce4d0SZheng Fan rItem.GetRight(), rItem.GetTxtLeft(), 905766ce4d0SZheng Fan rItem.GetTxtFirstLineOfst(), nId ); 906766ce4d0SZheng Fan aEditAttr.Put( aLRSpaceItem ); 907766ce4d0SZheng Fan // rReq.Done( aEditAttr ); 908766ce4d0SZheng Fan // pArgs = rReq.GetArgs(); 909766ce4d0SZheng Fan // pView->SetAttributes( *pArgs ); 910766ce4d0SZheng Fan pView->SetAttributes( aEditAttr ); 911766ce4d0SZheng Fan // Invalidate(SID_ATTR_PARA_LRSPACE); 912766ce4d0SZheng Fan } 913766ce4d0SZheng Fan else if( nSlot == SID_ATTR_PARA_LINESPACE ) 914766ce4d0SZheng Fan { 915766ce4d0SZheng Fan sal_uInt16 nId = SID_ATTR_PARA_LINESPACE; 916766ce4d0SZheng Fan SvxLineSpacingItem aLineSpaceItem = (const SvxLineSpacingItem&)pArgs->Get( 917766ce4d0SZheng Fan GetPool().GetWhich(nSlot)); 918766ce4d0SZheng Fan SfxItemSet aEditAttr( GetPool(), EE_PARA_SBL, EE_PARA_SBL ); 919766ce4d0SZheng Fan aEditAttr.Put( aLineSpaceItem ); 920766ce4d0SZheng Fan // rReq.Done( aEditAttr ); 921766ce4d0SZheng Fan // pArgs = rReq.GetArgs(); 922766ce4d0SZheng Fan // pView->SetAttributes( *pArgs ); 923766ce4d0SZheng Fan pView->SetAttributes( aEditAttr ); 924766ce4d0SZheng Fan // Invalidate(SID_ATTR_PARA_LINESPACE); 925766ce4d0SZheng Fan } 926766ce4d0SZheng Fan else if( nSlot == SID_ATTR_PARA_ULSPACE ) 927766ce4d0SZheng Fan { 928766ce4d0SZheng Fan sal_uInt16 nId = SID_ATTR_PARA_ULSPACE; 929766ce4d0SZheng Fan SvxULSpaceItem aULSpaceItem = (const SvxULSpaceItem&)pArgs->Get( 930766ce4d0SZheng Fan GetPool().GetWhich(nSlot)); 931766ce4d0SZheng Fan SfxItemSet aEditAttr( GetPool(), EE_PARA_ULSPACE, EE_PARA_ULSPACE ); 932766ce4d0SZheng Fan aULSpaceItem.SetWhich(EE_PARA_ULSPACE); 933766ce4d0SZheng Fan aEditAttr.Put( aULSpaceItem ); 934766ce4d0SZheng Fan // rReq.Done( aEditAttr ); 935766ce4d0SZheng Fan // pArgs = rReq.GetArgs(); 936766ce4d0SZheng Fan // pView->SetAttributes( *pArgs ); 937766ce4d0SZheng Fan pView->SetAttributes( aEditAttr ); 938766ce4d0SZheng Fan // Invalidate(SID_ATTR_PARA_ULSPACE); 939766ce4d0SZheng Fan } 940*512ec161SZheng Fan else if(nSlot == SID_SET_SUPER_SCRIPT ) 941*512ec161SZheng Fan { 942*512ec161SZheng Fan SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); 943*512ec161SZheng Fan pView->GetAttributes(aEditAttr); 944*512ec161SZheng Fan SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); 945*512ec161SZheng Fan 946*512ec161SZheng Fan SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT); 947*512ec161SZheng Fan SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) 948*512ec161SZheng Fan aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 949*512ec161SZheng Fan 950*512ec161SZheng Fan if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) 951*512ec161SZheng Fan aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); 952*512ec161SZheng Fan else 953*512ec161SZheng Fan aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT ); 954*512ec161SZheng Fan aNewAttr.Put( aItem ); 955*512ec161SZheng Fan pView->SetAttributes( aNewAttr ); 956*512ec161SZheng Fan } 957*512ec161SZheng Fan else if( nSlot == SID_SET_SUB_SCRIPT ) 958*512ec161SZheng Fan { 959*512ec161SZheng Fan SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); 960*512ec161SZheng Fan pView->GetAttributes(aEditAttr); 961*512ec161SZheng Fan SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); 962*512ec161SZheng Fan 963*512ec161SZheng Fan SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT); 964*512ec161SZheng Fan SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) 965*512ec161SZheng Fan aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 966*512ec161SZheng Fan 967*512ec161SZheng Fan if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) 968*512ec161SZheng Fan aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); 969*512ec161SZheng Fan else 970*512ec161SZheng Fan aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT ); 971*512ec161SZheng Fan aNewAttr.Put( aItem ); 972*512ec161SZheng Fan pView->SetAttributes( aNewAttr ); 973*512ec161SZheng Fan } 974*512ec161SZheng Fan 975*512ec161SZheng Fan else if (bArgsInReq && 976*512ec161SZheng Fan ( nSlot == SID_TABLE_VERT_NONE || nSlot == SID_TABLE_VERT_CENTER || 977*512ec161SZheng Fan nSlot == SID_TABLE_VERT_BOTTOM ) ) 978*512ec161SZheng Fan { 979*512ec161SZheng Fan SdrTextVertAdjust eTVA = SDRTEXTVERTADJUST_TOP; 980*512ec161SZheng Fan if (nSlot == SID_TABLE_VERT_CENTER) 981*512ec161SZheng Fan eTVA = SDRTEXTVERTADJUST_CENTER; 982*512ec161SZheng Fan else if (nSlot == SID_TABLE_VERT_BOTTOM) 983*512ec161SZheng Fan eTVA = SDRTEXTVERTADJUST_BOTTOM; 984*512ec161SZheng Fan 985*512ec161SZheng Fan SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); 986*512ec161SZheng Fan SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); 987*512ec161SZheng Fan aNewAttr.Put(SdrTextVertAdjustItem(eTVA)); 988*512ec161SZheng Fan pView->SetAttributes(aNewAttr); 989*512ec161SZheng Fan } 990766ce4d0SZheng Fan else if (bArgsInReq && 991766ce4d0SZheng Fan (nSlot == SID_ATTR_PARA_ADJUST_LEFT || nSlot == SID_ATTR_PARA_ADJUST_CENTER || nSlot == SID_ATTR_PARA_ADJUST_RIGHT || nSlot == SID_ATTR_PARA_ADJUST_BLOCK )) 992766ce4d0SZheng Fan { 993766ce4d0SZheng Fan SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); 994766ce4d0SZheng Fan SfxItemSet aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); 995766ce4d0SZheng Fan switch ( nSlot ) 996766ce4d0SZheng Fan { 997766ce4d0SZheng Fan case SID_ATTR_PARA_ADJUST_LEFT: 998766ce4d0SZheng Fan aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) ); 999766ce4d0SZheng Fan break; 1000766ce4d0SZheng Fan case SID_ATTR_PARA_ADJUST_CENTER: 1001766ce4d0SZheng Fan aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) ); 1002766ce4d0SZheng Fan break; 1003766ce4d0SZheng Fan case SID_ATTR_PARA_ADJUST_RIGHT: 1004766ce4d0SZheng Fan aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) ); 1005766ce4d0SZheng Fan break; 1006766ce4d0SZheng Fan case SID_ATTR_PARA_ADJUST_BLOCK: 1007766ce4d0SZheng Fan aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) ); 1008766ce4d0SZheng Fan break; 1009766ce4d0SZheng Fan } 1010766ce4d0SZheng Fan pView->SetAttributes(aNewAttr); 1011766ce4d0SZheng Fan } 1012cdf0e10cSrcweir else 1013cdf0e10cSrcweir { 1014cdf0e10cSrcweir // use args directly 1015cdf0e10cSrcweir 1016cdf0e10cSrcweir pView->SetAttributes( *pArgs ); 1017cdf0e10cSrcweir } 1018cdf0e10cSrcweir pViewData->GetScDrawView()->InvalidateDrawTextAttrs(); 1019cdf0e10cSrcweir } 1020cdf0e10cSrcweir } 1021cdf0e10cSrcweir 1022cdf0e10cSrcweir void __EXPORT ScDrawTextObjectBar::GetAttrState( SfxItemSet& rDestSet ) 1023cdf0e10cSrcweir { 1024cdf0e10cSrcweir if ( IsNoteEdit() ) 1025cdf0e10cSrcweir { 1026cdf0e10cSrcweir // issue 21255 - Notes now support rich text formatting. 1027cdf0e10cSrcweir } 1028cdf0e10cSrcweir 1029cdf0e10cSrcweir SvtLanguageOptions aLangOpt; 1030cdf0e10cSrcweir sal_Bool bDisableCTLFont = !aLangOpt.IsCTLFontEnabled(); 1031cdf0e10cSrcweir sal_Bool bDisableVerticalText = !aLangOpt.IsVerticalTextEnabled(); 1032cdf0e10cSrcweir 1033cdf0e10cSrcweir SdrView* pView = pViewData->GetScDrawView(); 1034cdf0e10cSrcweir SfxItemSet aAttrSet(pView->GetModel()->GetItemPool()); 1035cdf0e10cSrcweir pView->GetAttributes(aAttrSet); 1036cdf0e10cSrcweir 1037cdf0e10cSrcweir // direkte Attribute 1038cdf0e10cSrcweir 1039cdf0e10cSrcweir rDestSet.Put( aAttrSet ); 1040cdf0e10cSrcweir 1041cdf0e10cSrcweir // choose font info according to selection script type 1042cdf0e10cSrcweir 1043cdf0e10cSrcweir sal_uInt16 nScript = pView->GetScriptType(); 1044cdf0e10cSrcweir 1045cdf0e10cSrcweir // #i55929# input-language-dependent script type (depends on input language if nothing selected) 1046cdf0e10cSrcweir sal_uInt16 nInputScript = nScript; 1047cdf0e10cSrcweir OutlinerView* pOutView = pView->GetTextEditOutlinerView(); 1048cdf0e10cSrcweir if (pOutView && !pOutView->GetSelection().HasRange()) 1049cdf0e10cSrcweir { 1050cdf0e10cSrcweir LanguageType nInputLang = pViewData->GetActiveWin()->GetInputLanguage(); 1051cdf0e10cSrcweir if (nInputLang != LANGUAGE_DONTKNOW && nInputLang != LANGUAGE_SYSTEM) 1052cdf0e10cSrcweir nInputScript = SvtLanguageOptions::GetScriptTypeOfLanguage( nInputLang ); 1053cdf0e10cSrcweir } 1054cdf0e10cSrcweir 1055cdf0e10cSrcweir // #i55929# according to spec, nInputScript is used for font and font height only 1056cdf0e10cSrcweir if ( rDestSet.GetItemState( EE_CHAR_FONTINFO ) != SFX_ITEM_UNKNOWN ) 1057cdf0e10cSrcweir ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_FONTINFO, nInputScript ); 1058cdf0e10cSrcweir if ( rDestSet.GetItemState( EE_CHAR_FONTHEIGHT ) != SFX_ITEM_UNKNOWN ) 1059cdf0e10cSrcweir ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_FONTHEIGHT, nInputScript ); 1060cdf0e10cSrcweir if ( rDestSet.GetItemState( EE_CHAR_WEIGHT ) != SFX_ITEM_UNKNOWN ) 1061cdf0e10cSrcweir ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_WEIGHT, nScript ); 1062cdf0e10cSrcweir if ( rDestSet.GetItemState( EE_CHAR_ITALIC ) != SFX_ITEM_UNKNOWN ) 1063cdf0e10cSrcweir ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_ITALIC, nScript ); 1064cdf0e10cSrcweir // Ausrichtung 1065cdf0e10cSrcweir 1066cdf0e10cSrcweir SvxAdjust eAdj = ((const SvxAdjustItem&)aAttrSet.Get(EE_PARA_JUST)).GetAdjust(); 1067cdf0e10cSrcweir switch( eAdj ) 1068cdf0e10cSrcweir { 1069cdf0e10cSrcweir case SVX_ADJUST_LEFT: 1070766ce4d0SZheng Fan { 1071cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ALIGNLEFT, sal_True ) ); 1072766ce4d0SZheng Fan rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_LEFT, sal_True ) ); 1073766ce4d0SZheng Fan } 1074cdf0e10cSrcweir break; 1075cdf0e10cSrcweir case SVX_ADJUST_CENTER: 1076766ce4d0SZheng Fan { 1077cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ALIGNCENTERHOR, sal_True ) ); 1078766ce4d0SZheng Fan rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_CENTER, sal_True ) ); 1079766ce4d0SZheng Fan } 1080cdf0e10cSrcweir break; 1081cdf0e10cSrcweir case SVX_ADJUST_RIGHT: 1082766ce4d0SZheng Fan { 1083cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ALIGNRIGHT, sal_True ) ); 1084766ce4d0SZheng Fan rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, sal_True ) ); 1085766ce4d0SZheng Fan } 1086cdf0e10cSrcweir break; 1087cdf0e10cSrcweir case SVX_ADJUST_BLOCK: 1088766ce4d0SZheng Fan { 1089cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ALIGNBLOCK, sal_True ) ); 1090766ce4d0SZheng Fan rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, sal_True ) ); 1091766ce4d0SZheng Fan } 1092cdf0e10cSrcweir break; 1093cdf0e10cSrcweir default: 1094cdf0e10cSrcweir { 1095cdf0e10cSrcweir // added to avoid warnings 1096cdf0e10cSrcweir } 1097cdf0e10cSrcweir } 1098cdf0e10cSrcweir // pseudo slots for Format menu 1099cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_LEFT, eAdj == SVX_ADJUST_LEFT ) ); 1100cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_HCENTER, eAdj == SVX_ADJUST_CENTER ) ); 1101cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_RIGHT, eAdj == SVX_ADJUST_RIGHT ) ); 1102cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_JUSTIFIED, eAdj == SVX_ADJUST_BLOCK ) ); 1103cdf0e10cSrcweir 1104766ce4d0SZheng Fan SvxLRSpaceItem aLR = ((const SvxLRSpaceItem&)aAttrSet.Get( EE_PARA_LRSPACE )); 1105766ce4d0SZheng Fan aLR.SetWhich(SID_ATTR_PARA_LRSPACE); 1106766ce4d0SZheng Fan rDestSet.Put(aLR); 1107766ce4d0SZheng Fan Invalidate( SID_ATTR_PARA_LRSPACE ); 1108766ce4d0SZheng Fan SfxItemState eState = aAttrSet.GetItemState( EE_PARA_LRSPACE ); 1109766ce4d0SZheng Fan if ( eState == SFX_ITEM_DONTCARE ) 1110766ce4d0SZheng Fan rDestSet.InvalidateItem(SID_ATTR_PARA_LRSPACE); 1111766ce4d0SZheng Fan //xuxu for Line Space 1112766ce4d0SZheng Fan SvxLineSpacingItem aLineSP = ((const SvxLineSpacingItem&)aAttrSet. 1113766ce4d0SZheng Fan Get( EE_PARA_SBL )); 1114766ce4d0SZheng Fan aLineSP.SetWhich(SID_ATTR_PARA_LINESPACE); 1115766ce4d0SZheng Fan rDestSet.Put(aLineSP); 1116766ce4d0SZheng Fan Invalidate(SID_ATTR_PARA_LINESPACE); 1117766ce4d0SZheng Fan eState = aAttrSet.GetItemState( EE_PARA_SBL ); 1118766ce4d0SZheng Fan if ( eState == SFX_ITEM_DONTCARE ) 1119766ce4d0SZheng Fan rDestSet.InvalidateItem(SID_ATTR_PARA_LINESPACE); 1120766ce4d0SZheng Fan //xuxu for UL Space 1121766ce4d0SZheng Fan SvxULSpaceItem aULSP = ((const SvxULSpaceItem&)aAttrSet. 1122766ce4d0SZheng Fan Get( EE_PARA_ULSPACE )); 1123766ce4d0SZheng Fan aULSP.SetWhich(SID_ATTR_PARA_ULSPACE); 1124766ce4d0SZheng Fan rDestSet.Put(aULSP); 1125766ce4d0SZheng Fan Invalidate(SID_ATTR_PARA_ULSPACE); 1126766ce4d0SZheng Fan eState = aAttrSet.GetItemState( EE_PARA_ULSPACE ); 1127766ce4d0SZheng Fan if ( eState == SFX_ITEM_DONTCARE ) 1128766ce4d0SZheng Fan rDestSet.InvalidateItem(SID_ATTR_PARA_ULSPACE); 1129766ce4d0SZheng Fan 1130cdf0e10cSrcweir // Zeilenabstand 1131cdf0e10cSrcweir 1132cdf0e10cSrcweir sal_uInt16 nLineSpace = (sal_uInt16) 1133cdf0e10cSrcweir ((const SvxLineSpacingItem&)aAttrSet. 1134cdf0e10cSrcweir Get( EE_PARA_SBL )).GetPropLineSpace(); 1135cdf0e10cSrcweir switch( nLineSpace ) 1136cdf0e10cSrcweir { 1137cdf0e10cSrcweir case 100: 1138cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_10, sal_True ) ); 1139cdf0e10cSrcweir break; 1140cdf0e10cSrcweir case 150: 1141cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_15, sal_True ) ); 1142cdf0e10cSrcweir break; 1143cdf0e10cSrcweir case 200: 1144cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_20, sal_True ) ); 1145cdf0e10cSrcweir break; 1146cdf0e10cSrcweir } 1147cdf0e10cSrcweir 1148cdf0e10cSrcweir // hoch-/tiefgestellt 1149cdf0e10cSrcweir 1150cdf0e10cSrcweir SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) 1151cdf0e10cSrcweir aAttrSet.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 1152cdf0e10cSrcweir if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) 1153cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_SET_SUPER_SCRIPT, sal_True ) ); 1154cdf0e10cSrcweir else if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) 1155cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_SET_SUB_SCRIPT, sal_True ) ); 1156cdf0e10cSrcweir 1157cdf0e10cSrcweir // Unterstreichung 1158cdf0e10cSrcweir 1159766ce4d0SZheng Fan eState = aAttrSet.GetItemState( EE_CHAR_UNDERLINE, sal_True ); 1160cdf0e10cSrcweir if ( eState == SFX_ITEM_DONTCARE ) 1161cdf0e10cSrcweir { 1162cdf0e10cSrcweir rDestSet.InvalidateItem( SID_ULINE_VAL_NONE ); 1163cdf0e10cSrcweir rDestSet.InvalidateItem( SID_ULINE_VAL_SINGLE ); 1164cdf0e10cSrcweir rDestSet.InvalidateItem( SID_ULINE_VAL_DOUBLE ); 1165cdf0e10cSrcweir rDestSet.InvalidateItem( SID_ULINE_VAL_DOTTED ); 1166cdf0e10cSrcweir } 1167cdf0e10cSrcweir else 1168cdf0e10cSrcweir { 1169cdf0e10cSrcweir FontUnderline eUnderline = ((const SvxUnderlineItem&) 1170cdf0e10cSrcweir aAttrSet.Get(EE_CHAR_UNDERLINE)).GetLineStyle(); 1171cdf0e10cSrcweir sal_uInt16 nId = SID_ULINE_VAL_NONE; 1172cdf0e10cSrcweir switch (eUnderline) 1173cdf0e10cSrcweir { 1174cdf0e10cSrcweir case UNDERLINE_SINGLE: nId = SID_ULINE_VAL_SINGLE; break; 1175cdf0e10cSrcweir case UNDERLINE_DOUBLE: nId = SID_ULINE_VAL_DOUBLE; break; 1176cdf0e10cSrcweir case UNDERLINE_DOTTED: nId = SID_ULINE_VAL_DOTTED; break; 1177cdf0e10cSrcweir default: 1178cdf0e10cSrcweir break; 1179cdf0e10cSrcweir } 1180cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( nId, sal_True ) ); 1181cdf0e10cSrcweir } 1182cdf0e10cSrcweir 1183cdf0e10cSrcweir // horizontal / vertical 1184cdf0e10cSrcweir 1185cdf0e10cSrcweir sal_Bool bLeftToRight = sal_True; 1186cdf0e10cSrcweir 1187cdf0e10cSrcweir SdrOutliner* pOutl = pView->GetTextEditOutliner(); 1188cdf0e10cSrcweir if( pOutl ) 1189cdf0e10cSrcweir { 1190cdf0e10cSrcweir if( pOutl->IsVertical() ) 1191cdf0e10cSrcweir bLeftToRight = sal_False; 1192cdf0e10cSrcweir } 1193cdf0e10cSrcweir else 1194cdf0e10cSrcweir bLeftToRight = ( (const SvxWritingModeItem&) aAttrSet.Get( SDRATTR_TEXTDIRECTION ) ).GetValue() == com::sun::star::text::WritingMode_LR_TB; 1195cdf0e10cSrcweir 1196cdf0e10cSrcweir if ( bDisableVerticalText ) 1197cdf0e10cSrcweir { 1198cdf0e10cSrcweir rDestSet.DisableItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT ); 1199cdf0e10cSrcweir rDestSet.DisableItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM ); 1200cdf0e10cSrcweir } 1201cdf0e10cSrcweir else 1202cdf0e10cSrcweir { 1203cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT, bLeftToRight ) ); 1204cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM, !bLeftToRight ) ); 1205cdf0e10cSrcweir } 1206cdf0e10cSrcweir 1207cdf0e10cSrcweir // left-to-right or right-to-left 1208cdf0e10cSrcweir 1209cdf0e10cSrcweir if ( !bLeftToRight || bDisableCTLFont ) 1210cdf0e10cSrcweir { 1211cdf0e10cSrcweir // disabled if vertical 1212cdf0e10cSrcweir rDestSet.DisableItem( SID_ATTR_PARA_LEFT_TO_RIGHT ); 1213cdf0e10cSrcweir rDestSet.DisableItem( SID_ATTR_PARA_RIGHT_TO_LEFT ); 1214cdf0e10cSrcweir } 1215cdf0e10cSrcweir else if ( aAttrSet.GetItemState( EE_PARA_WRITINGDIR ) == SFX_ITEM_DONTCARE ) 1216cdf0e10cSrcweir { 1217cdf0e10cSrcweir rDestSet.InvalidateItem( SID_ATTR_PARA_LEFT_TO_RIGHT ); 1218cdf0e10cSrcweir rDestSet.InvalidateItem( SID_ATTR_PARA_RIGHT_TO_LEFT ); 1219cdf0e10cSrcweir } 1220cdf0e10cSrcweir else 1221cdf0e10cSrcweir { 1222cdf0e10cSrcweir SvxFrameDirection eAttrDir = (SvxFrameDirection)((const SvxFrameDirectionItem&) 1223cdf0e10cSrcweir aAttrSet.Get( EE_PARA_WRITINGDIR )).GetValue(); 1224cdf0e10cSrcweir if ( eAttrDir == FRMDIR_ENVIRONMENT ) 1225cdf0e10cSrcweir { 1226cdf0e10cSrcweir // get "environment" direction from page style 1227cdf0e10cSrcweir if ( pViewData->GetDocument()->GetEditTextDirection( pViewData->GetTabNo() ) == EE_HTEXTDIR_R2L ) 1228cdf0e10cSrcweir eAttrDir = FRMDIR_HORI_RIGHT_TOP; 1229cdf0e10cSrcweir else 1230cdf0e10cSrcweir eAttrDir = FRMDIR_HORI_LEFT_TOP; 1231cdf0e10cSrcweir } 1232cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LEFT_TO_RIGHT, ( eAttrDir == FRMDIR_HORI_LEFT_TOP ) ) ); 1233cdf0e10cSrcweir rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_RIGHT_TO_LEFT, ( eAttrDir == FRMDIR_HORI_RIGHT_TOP ) ) ); 1234cdf0e10cSrcweir } 1235cdf0e10cSrcweir } 1236cdf0e10cSrcweir 1237cdf0e10cSrcweir void ScDrawTextObjectBar::ExecuteTrans( SfxRequest& rReq ) 1238cdf0e10cSrcweir { 1239cdf0e10cSrcweir sal_Int32 nType = ScViewUtil::GetTransliterationType( rReq.GetSlot() ); 1240cdf0e10cSrcweir if ( nType ) 1241cdf0e10cSrcweir { 1242cdf0e10cSrcweir ScDrawView* pView = pViewData->GetScDrawView(); 1243cdf0e10cSrcweir OutlinerView* pOutView = pView->GetTextEditOutlinerView(); 1244cdf0e10cSrcweir if ( pOutView ) 1245cdf0e10cSrcweir { 1246cdf0e10cSrcweir // change selected text in object 1247cdf0e10cSrcweir pOutView->TransliterateText( nType ); 1248cdf0e10cSrcweir } 1249cdf0e10cSrcweir else 1250cdf0e10cSrcweir { 1251cdf0e10cSrcweir //! apply to whole objects? 1252cdf0e10cSrcweir } 1253cdf0e10cSrcweir } 1254cdf0e10cSrcweir } 1255*512ec161SZheng Fan 1256*512ec161SZheng Fan void ScDrawTextObjectBar::GetStatePropPanelAttr(SfxItemSet &rSet) 1257*512ec161SZheng Fan { 1258*512ec161SZheng Fan SfxWhichIter aIter( rSet ); 1259*512ec161SZheng Fan sal_uInt16 nWhich = aIter.FirstWhich(); 1260*512ec161SZheng Fan 1261*512ec161SZheng Fan SdrView* pView = pViewData->GetScDrawView(); 1262*512ec161SZheng Fan 1263*512ec161SZheng Fan SfxItemSet aEditAttr(pView->GetModel()->GetItemPool()); 1264*512ec161SZheng Fan pView->GetAttributes(aEditAttr); 1265*512ec161SZheng Fan //SfxItemSet aAttrs( *aEditAttr.GetPool(), aEditAttr.GetRanges() ); 1266*512ec161SZheng Fan 1267*512ec161SZheng Fan while ( nWhich ) 1268*512ec161SZheng Fan { 1269*512ec161SZheng Fan sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich) 1270*512ec161SZheng Fan ? GetPool().GetSlotId(nWhich) 1271*512ec161SZheng Fan : nWhich; 1272*512ec161SZheng Fan switch ( nSlotId ) 1273*512ec161SZheng Fan { 1274*512ec161SZheng Fan case SID_TABLE_VERT_NONE: 1275*512ec161SZheng Fan case SID_TABLE_VERT_CENTER: 1276*512ec161SZheng Fan case SID_TABLE_VERT_BOTTOM: 1277*512ec161SZheng Fan sal_Bool bContour = sal_False; 1278*512ec161SZheng Fan SfxItemState eConState = aEditAttr.GetItemState( SDRATTR_TEXT_CONTOURFRAME ); 1279*512ec161SZheng Fan if( eConState != SFX_ITEM_DONTCARE ) 1280*512ec161SZheng Fan { 1281*512ec161SZheng Fan bContour = ( ( const SdrTextContourFrameItem& )aEditAttr.Get( SDRATTR_TEXT_CONTOURFRAME ) ).GetValue(); 1282*512ec161SZheng Fan } 1283*512ec161SZheng Fan if (bContour) break; 1284*512ec161SZheng Fan 1285*512ec161SZheng Fan SfxItemState eVState = aEditAttr.GetItemState( SDRATTR_TEXT_VERTADJUST ); 1286*512ec161SZheng Fan //SfxItemState eHState = aAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST ); 1287*512ec161SZheng Fan 1288*512ec161SZheng Fan //if(SFX_ITEM_DONTCARE != eVState && SFX_ITEM_DONTCARE != eHState) 1289*512ec161SZheng Fan if(SFX_ITEM_DONTCARE != eVState) 1290*512ec161SZheng Fan { 1291*512ec161SZheng Fan SdrTextVertAdjust eTVA = (SdrTextVertAdjust)((const SdrTextVertAdjustItem&)aEditAttr.Get(SDRATTR_TEXT_VERTADJUST)).GetValue(); 1292*512ec161SZheng Fan sal_Bool bSet = nSlotId == SID_TABLE_VERT_NONE && eTVA == SDRTEXTVERTADJUST_TOP|| 1293*512ec161SZheng Fan nSlotId == SID_TABLE_VERT_CENTER && eTVA == SDRTEXTVERTADJUST_CENTER || 1294*512ec161SZheng Fan nSlotId == SID_TABLE_VERT_BOTTOM && eTVA == SDRTEXTVERTADJUST_BOTTOM; 1295*512ec161SZheng Fan rSet.Put(SfxBoolItem(nSlotId, bSet)); 1296*512ec161SZheng Fan } 1297*512ec161SZheng Fan else 1298*512ec161SZheng Fan { 1299*512ec161SZheng Fan rSet.Put(SfxBoolItem(nSlotId, sal_False)); 1300*512ec161SZheng Fan } 1301*512ec161SZheng Fan break; 1302*512ec161SZheng Fan } 1303*512ec161SZheng Fan nWhich = aIter.NextWhich(); 1304*512ec161SZheng Fan } 1305*512ec161SZheng Fan } 1306*512ec161SZheng Fan 1307