LCOV - code coverage report
Current view: top level - sc/source/ui/view - formatsh.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 316 1407 22.5 %
Date: 2014-11-03 Functions: 18 32 56.2 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
      21             : #include <com/sun/star/beans/XPropertySet.hpp>
      22             : #include <com/sun/star/container/XNameAccess.hpp>
      23             : 
      24             : #include "scitems.hxx"
      25             : #include <editeng/borderline.hxx>
      26             : #include <editeng/eeitem.hxx>
      27             : 
      28             : #include <sfx2/app.hxx>
      29             : #include <sfx2/viewfrm.hxx>
      30             : #include <sfx2/bindings.hxx>
      31             : #include <sfx2/objface.hxx>
      32             : #include <sfx2/request.hxx>
      33             : #include <svl/whiter.hxx>
      34             : #include <vcl/msgbox.hxx>
      35             : 
      36             : #include <svl/stritem.hxx>
      37             : #include <svl/zformat.hxx>
      38             : #include <svl/languageoptions.hxx>
      39             : #include <editeng/boxitem.hxx>
      40             : #include <editeng/langitem.hxx>
      41             : #include <svx/numinf.hxx>
      42             : #include <sfx2/dispatch.hxx>
      43             : #include <sfx2/templdlg.hxx>
      44             : #include <sfx2/tplpitem.hxx>
      45             : #include <editeng/svxenum.hxx>
      46             : #include <svx/algitem.hxx>
      47             : #include <editeng/wghtitem.hxx>
      48             : #include <editeng/postitem.hxx>
      49             : #include <editeng/udlnitem.hxx>
      50             : #include <editeng/lineitem.hxx>
      51             : #include <editeng/colritem.hxx>
      52             : #include <editeng/brushitem.hxx>
      53             : #include <editeng/frmdiritem.hxx>
      54             : #include <editeng/scripttypeitem.hxx>
      55             : #include <svtools/colorcfg.hxx>
      56             : #include <editeng/shaditem.hxx>
      57             : #include <editeng/justifyitem.hxx>
      58             : 
      59             : #include "formatsh.hxx"
      60             : #include "sc.hrc"
      61             : #include "globstr.hrc"
      62             : #include "docsh.hxx"
      63             : #include "patattr.hxx"
      64             : #include "scmod.hxx"
      65             : #include "stlpool.hxx"
      66             : #include "stlsheet.hxx"
      67             : #include "printfun.hxx"
      68             : #include "docpool.hxx"
      69             : #include "scresid.hxx"
      70             : #include "tabvwsh.hxx"
      71             : #include "undostyl.hxx"
      72             : #include "markdata.hxx"
      73             : #include "markarr.hxx"
      74             : 
      75             : #define ScFormatShell
      76             : #define TableFont
      77             : #define FormatForSelection
      78             : #include "scslots.hxx"
      79             : 
      80             : #include "scabstdlg.hxx"
      81             : #include <editeng/fontitem.hxx>
      82             : 
      83             : #include <boost/scoped_ptr.hpp>
      84             : 
      85             : using namespace ::com::sun::star;
      86             : 
      87             : namespace {
      88             : 
      89           0 : SvxCellHorJustify lclConvertSlotToHAlign( sal_uInt16 nSlot )
      90             : {
      91           0 :     SvxCellHorJustify eHJustify = SVX_HOR_JUSTIFY_STANDARD;
      92           0 :     switch( nSlot )
      93             :     {
      94           0 :         case SID_ALIGN_ANY_HDEFAULT:    eHJustify = SVX_HOR_JUSTIFY_STANDARD;   break;
      95           0 :         case SID_ALIGN_ANY_LEFT:        eHJustify = SVX_HOR_JUSTIFY_LEFT;       break;
      96           0 :         case SID_ALIGN_ANY_HCENTER:     eHJustify = SVX_HOR_JUSTIFY_CENTER;     break;
      97           0 :         case SID_ALIGN_ANY_RIGHT:       eHJustify = SVX_HOR_JUSTIFY_RIGHT;      break;
      98           0 :         case SID_ALIGN_ANY_JUSTIFIED:   eHJustify = SVX_HOR_JUSTIFY_BLOCK;      break;
      99             :         default:    OSL_FAIL( "lclConvertSlotToHAlign - invalid slot" );
     100             :     }
     101           0 :     return eHJustify;
     102             : }
     103             : 
     104           0 : SvxCellVerJustify lclConvertSlotToVAlign( sal_uInt16 nSlot )
     105             : {
     106           0 :     SvxCellVerJustify eVJustify = SVX_VER_JUSTIFY_STANDARD;
     107           0 :     switch( nSlot )
     108             :     {
     109           0 :         case SID_ALIGN_ANY_VDEFAULT:    eVJustify = SVX_VER_JUSTIFY_STANDARD;   break;
     110           0 :         case SID_ALIGN_ANY_TOP:         eVJustify = SVX_VER_JUSTIFY_TOP;        break;
     111           0 :         case SID_ALIGN_ANY_VCENTER:     eVJustify = SVX_VER_JUSTIFY_CENTER;     break;
     112           0 :         case SID_ALIGN_ANY_BOTTOM:      eVJustify = SVX_VER_JUSTIFY_BOTTOM;     break;
     113             :         default:    OSL_FAIL( "lclConvertSlotToVAlign - invalid slot" );
     114             :     }
     115           0 :     return eVJustify;
     116             : }
     117             : 
     118             : } // namespace
     119             : 
     120        6540 : TYPEINIT1( ScFormatShell, SfxShell );
     121             : 
     122         304 : SFX_IMPL_INTERFACE(ScFormatShell, SfxShell, ScResId(SCSTR_FORMATSHELL))
     123             : 
     124          76 : void ScFormatShell::InitInterface_Impl()
     125             : {
     126             :     GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT | SFX_VISIBILITY_STANDARD | SFX_VISIBILITY_SERVER,
     127          76 :                                             ScResId(RID_OBJECTBAR_FORMAT));
     128          76 : }
     129             : 
     130        4400 : ScFormatShell::ScFormatShell(ScViewData* pData) :
     131        4400 :     SfxShell(pData->GetViewShell()),
     132        4400 :     pViewData(pData)
     133             : {
     134        4400 :     ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
     135             : 
     136        4400 :     SetPool( &pTabViewShell->GetPool() );
     137        4400 :     ::svl::IUndoManager* pMgr = pViewData->GetSfxDocShell()->GetUndoManager();
     138        4400 :     SetUndoManager( pMgr );
     139        4400 :     if ( !pViewData->GetDocument()->IsUndoEnabled() )
     140             :     {
     141           0 :         pMgr->SetMaxUndoActionCount( 0 );
     142             :     }
     143        4400 :     SetHelpId(HID_SCSHELL_FORMATSH);
     144        4400 :     SetName(OUString("Format"));
     145        4400 : }
     146             : 
     147        4400 : ScFormatShell::~ScFormatShell()
     148             : {
     149        4400 : }
     150             : 
     151          20 : void ScFormatShell::GetStyleState( SfxItemSet& rSet )
     152             : {
     153          20 :     ScDocument*             pDoc          = GetViewData()->GetDocument();
     154          20 :     ScTabViewShell*         pTabViewShell = GetViewData()->GetViewShell();
     155          20 :     SfxStyleSheetBasePool*  pStylePool    = pDoc->GetStyleSheetPool();
     156             : 
     157          20 :     bool bProtected = false;
     158          20 :     SCTAB nTabCount = pDoc->GetTableCount();
     159          44 :     for (SCTAB i=0; i<nTabCount; i++)
     160          24 :         if (pDoc->IsTabProtected(i))                // look after protected table
     161           0 :             bProtected = true;
     162             : 
     163          20 :     SfxWhichIter    aIter(rSet);
     164          20 :     sal_uInt16          nWhich = aIter.FirstWhich();
     165          20 :     sal_uInt16          nSlotId = 0;
     166             : 
     167          80 :     while ( nWhich )
     168             :     {
     169          40 :         nSlotId = SfxItemPool::IsWhich( nWhich )
     170           0 :                     ? GetPool().GetSlotId( nWhich )
     171          40 :                     : nWhich;
     172             : 
     173          40 :         switch ( nSlotId )
     174             :         {
     175             :             case SID_STYLE_APPLY:
     176           0 :                 if ( !pStylePool )
     177           0 :                     rSet.DisableItem( nSlotId );
     178           0 :                 break;
     179             : 
     180             :             case SID_STYLE_FAMILY2:     // cell style sheets
     181             :             {
     182             :                 SfxStyleSheet* pStyleSheet = (SfxStyleSheet*)
     183          20 :                                              pTabViewShell->GetStyleSheetFromMarked();
     184             : 
     185          20 :                 if ( pStyleSheet )
     186          20 :                     rSet.Put( SfxTemplateItem( nSlotId, pStyleSheet->GetName() ) );
     187             :                 else
     188           0 :                     rSet.Put( SfxTemplateItem( nSlotId, OUString() ) );
     189             :             }
     190          20 :             break;
     191             : 
     192             :             case SID_STYLE_FAMILY4:     // page style sheets
     193             :             {
     194          20 :                 SCTAB           nCurTab     = GetViewData()->GetTabNo();
     195          20 :                 OUString        aPageStyle  = pDoc->GetPageStyle( nCurTab );
     196             :                 SfxStyleSheet*  pStyleSheet = pStylePool ? static_cast<SfxStyleSheet*>(pStylePool->
     197          20 :                                     Find( aPageStyle, SFX_STYLE_FAMILY_PAGE )) : NULL;
     198             : 
     199          20 :                 if ( pStyleSheet )
     200          20 :                     rSet.Put( SfxTemplateItem( nSlotId, aPageStyle ) );
     201             :                 else
     202           0 :                     rSet.Put( SfxTemplateItem( nSlotId, OUString() ) );
     203             :             }
     204          20 :             break;
     205             : 
     206             :             case SID_STYLE_WATERCAN:
     207             :             {
     208           0 :                 rSet.Put( SfxBoolItem( nSlotId, SC_MOD()->GetIsWaterCan() ) );
     209             :             }
     210           0 :             break;
     211             : 
     212             :             case SID_STYLE_UPDATE_BY_EXAMPLE:
     213             :             {
     214           0 :                 SfxPoolItem* pItem = NULL;
     215           0 :                 pTabViewShell->GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pItem);
     216           0 :                 SfxUInt16Item* pFamilyItem = dynamic_cast<SfxUInt16Item*>(pItem);
     217             : 
     218           0 :                 bool bPage = pFamilyItem && SFX_STYLE_FAMILY_PAGE == SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue());
     219           0 :                 delete pItem;
     220             : 
     221           0 :                 if ( bProtected || bPage )
     222           0 :                     rSet.DisableItem( nSlotId );
     223             :             }
     224           0 :             break;
     225             : 
     226             :             case SID_STYLE_EDIT:
     227             :             case SID_STYLE_DELETE:
     228             :             case SID_STYLE_HIDE:
     229             :             case SID_STYLE_SHOW:
     230             :             {
     231           0 :                 SfxPoolItem* pItem = NULL;
     232           0 :                 pTabViewShell->GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pItem);
     233           0 :                 SfxUInt16Item* pFamilyItem = dynamic_cast<SfxUInt16Item*>(pItem);
     234           0 :                 bool bPage = pFamilyItem && SFX_STYLE_FAMILY_PAGE == SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue());
     235           0 :                 delete pItem;
     236             : 
     237           0 :                 if ( bProtected && !bPage )
     238           0 :                     rSet.DisableItem( nSlotId );
     239             :             }
     240           0 :             break;
     241             : 
     242             :             default:
     243           0 :                 break;
     244             :         }
     245             : 
     246          40 :         nWhich = aIter.NextWhich();
     247          20 :     }
     248          20 : }
     249             : 
     250        3854 : void ScFormatShell::ExecuteStyle( SfxRequest& rReq )
     251             : {
     252             :     // in case of vertical toolbar
     253        3854 :     if ( !rReq.GetArgs() )
     254             :     {
     255           0 :         pViewData->GetDispatcher().Execute( SID_STYLE_DESIGNER, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD );
     256        3854 :         return;
     257             :     }
     258             : 
     259        3854 :     SfxBindings&        rBindings   = pViewData->GetBindings();
     260        3854 :     const SfxItemSet*   pArgs       = rReq.GetArgs();
     261        3854 :     const sal_uInt16        nSlotId     = rReq.GetSlot();
     262        3854 :     const SCTAB         nCurTab     = GetViewData()->GetTabNo();
     263        3854 :     ScDocShell*         pDocSh      = GetViewData()->GetDocShell();
     264        3854 :     ScTabViewShell*     pTabViewShell= GetViewData()->GetViewShell();
     265        3854 :     ScDocument&         rDoc        = pDocSh->GetDocument();
     266        3854 :     ScMarkData&         rMark       = GetViewData()->GetMarkData();
     267        3854 :     ScModule*           pScMod      = SC_MOD();
     268        3854 :     OUString            aRefName;
     269        3854 :     bool                bUndo       = rDoc.IsUndoEnabled();
     270        3854 :     SfxStyleSheetBasePool*  pStylePool  = rDoc.GetStyleSheetPool();
     271             : 
     272        3854 :     if ( (nSlotId == SID_STYLE_PREVIEW)
     273        3854 :         || (nSlotId ==  SID_STYLE_END_PREVIEW) )
     274             :     {
     275        3854 :         if (nSlotId == SID_STYLE_PREVIEW)
     276             :         {
     277           0 :             SfxStyleFamily eFamily = SFX_STYLE_FAMILY_PARA;
     278             :             const SfxPoolItem* pFamItem;
     279           0 :             if ( pArgs && SfxItemState::SET == pArgs->GetItemState( SID_STYLE_FAMILY, true, &pFamItem ) )
     280           0 :                 eFamily = (SfxStyleFamily) static_cast<const SfxUInt16Item*>(pFamItem)->GetValue();
     281             :             const SfxPoolItem* pNameItem;
     282           0 :             OUString aStyleName;
     283           0 :             if (pArgs && SfxItemState::SET == pArgs->GetItemState( nSlotId, true, &pNameItem ))
     284           0 :                 aStyleName = static_cast<const SfxStringItem*>(pNameItem)->GetValue();
     285           0 :             if ( eFamily == SFX_STYLE_FAMILY_PARA ) // CellStyles
     286             :             {
     287           0 :                 ScMarkData aFuncMark( pViewData->GetMarkData() );
     288           0 :                 ScViewUtil::UnmarkFiltered( aFuncMark, &rDoc );
     289           0 :                 aFuncMark.MarkToMulti();
     290             : 
     291           0 :                 if ( !aFuncMark.IsMarked() && !aFuncMark.IsMultiMarked() )
     292             :                 {
     293           0 :                     SCCOL nCol = pViewData->GetCurX();
     294           0 :                     SCROW nRow = pViewData->GetCurY();
     295           0 :                     SCTAB nTab = pViewData->GetTabNo();
     296           0 :                     ScRange aRange( nCol, nRow, nTab );
     297           0 :                     aFuncMark.SetMarkArea( aRange );
     298             :                 }
     299           0 :                 rDoc.SetPreviewSelection( aFuncMark );
     300           0 :                 ScStyleSheet* pPreviewStyle = static_cast<ScStyleSheet*>( pStylePool->Find( aStyleName, eFamily ) );
     301           0 :                 rDoc.SetPreviewCellStyle( pPreviewStyle  );
     302           0 :                 ScPatternAttr aAttr( *rDoc.GetSelectionPattern( aFuncMark ) );
     303           0 :                 aAttr.SetStyleSheet( pPreviewStyle );
     304             : 
     305           0 :                 SfxItemSet aItemSet( GetPool() );
     306             : 
     307           0 :                 ScPatternAttr aNewAttrs( GetViewData()->GetDocument()->GetPool() );
     308           0 :                 SfxItemSet& rNewSet = aNewAttrs.GetItemSet();
     309           0 :                 rNewSet.Put( aItemSet, false );
     310             : 
     311           0 :                 rDoc.ApplySelectionPattern( aNewAttrs, rDoc.GetPreviewSelection() );
     312           0 :                 pTabViewShell->UpdateSelectionArea( aFuncMark, &aAttr );
     313           0 :             }
     314             :         }
     315             :         else
     316             :         {
     317             :             // No mark at all happens when creating a new document, in which
     318             :             // case the selection pattern obtained would be empty (created of
     319             :             // GetPool()) anyway and nothing needs to be applied.
     320        3854 :             ScMarkData aPreviewMark( rDoc.GetPreviewSelection());
     321        3854 :             if (aPreviewMark.IsMarked() || aPreviewMark.IsMultiMarked())
     322             :             {
     323         844 :                 ScPatternAttr aAttr( *rDoc.GetSelectionPattern( aPreviewMark ) );
     324         844 :                 if ( ScStyleSheet* pPreviewStyle = rDoc.GetPreviewCellStyle() )
     325           0 :                     aAttr.SetStyleSheet( pPreviewStyle );
     326         844 :                 rDoc.SetPreviewCellStyle(NULL);
     327             : 
     328        1688 :                 SfxItemSet aItemSet( GetPool() );
     329             : 
     330        1688 :                 ScPatternAttr aNewAttrs( GetViewData()->GetDocument()->GetPool() );
     331         844 :                 SfxItemSet& rNewSet = aNewAttrs.GetItemSet();
     332         844 :                 rNewSet.Put( aItemSet, false );
     333         844 :                 rDoc.ApplySelectionPattern( aNewAttrs, aPreviewMark );
     334        1688 :                 pTabViewShell->UpdateSelectionArea( aPreviewMark, &aAttr );
     335        3854 :             }
     336        3854 :         }
     337             :     }
     338           0 :     else if (   (nSlotId == SID_STYLE_NEW)
     339           0 :         || (nSlotId == SID_STYLE_EDIT)
     340           0 :         || (nSlotId == SID_STYLE_DELETE)
     341           0 :         || (nSlotId == SID_STYLE_HIDE)
     342           0 :         || (nSlotId == SID_STYLE_SHOW)
     343           0 :         || (nSlotId == SID_STYLE_APPLY)
     344           0 :         || (nSlotId == SID_STYLE_WATERCAN)
     345           0 :         || (nSlotId == SID_STYLE_FAMILY)
     346           0 :         || (nSlotId == SID_STYLE_NEW_BY_EXAMPLE)
     347           0 :         || (nSlotId == SID_STYLE_UPDATE_BY_EXAMPLE) )
     348             :     {
     349           0 :         SfxStyleSheetBase*      pStyleSheet = NULL;
     350             : 
     351           0 :         bool bStyleToMarked = false;
     352           0 :         bool bListAction = false;
     353           0 :         bool bAddUndo = false;          // add ScUndoModifyStyle (style modified)
     354           0 :         ScStyleSaveData aOldData;       // for undo/redo
     355           0 :         ScStyleSaveData aNewData;
     356             : 
     357           0 :         SfxStyleFamily eFamily = SFX_STYLE_FAMILY_PARA;
     358             :         const SfxPoolItem* pFamItem;
     359           0 :         if ( pArgs && SfxItemState::SET == pArgs->GetItemState( SID_STYLE_FAMILY, true, &pFamItem ) )
     360           0 :             eFamily = (SfxStyleFamily) static_cast<const SfxUInt16Item*>(pFamItem)->GetValue();
     361           0 :         else if ( pArgs && SfxItemState::SET == pArgs->GetItemState( SID_STYLE_FAMILYNAME, true, &pFamItem ) )
     362             :         {
     363           0 :             OUString sFamily = static_cast<const SfxStringItem*>(pFamItem)->GetValue();
     364           0 :             if (sFamily.equalsAscii("CellStyles"))
     365           0 :                 eFamily = SFX_STYLE_FAMILY_PARA;
     366           0 :             else if (sFamily.equalsAscii("PageStyles"))
     367           0 :                 eFamily = SFX_STYLE_FAMILY_PAGE;
     368             :         }
     369             : 
     370           0 :         OUString                aStyleName;
     371           0 :         sal_uInt16              nRetMask = 0xffff;
     372             : 
     373           0 :         pStylePool->SetSearchMask( eFamily, SFXSTYLEBIT_ALL );
     374             : 
     375           0 :         switch ( nSlotId )
     376             :         {
     377             :             case SID_STYLE_NEW:
     378             :                 {
     379             :                     const SfxPoolItem* pNameItem;
     380           0 :                     if (pArgs && SfxItemState::SET == pArgs->GetItemState( nSlotId, true, &pNameItem ))
     381           0 :                         aStyleName  = static_cast<const SfxStringItem*>(pNameItem)->GetValue();
     382             : 
     383           0 :                     const SfxPoolItem* pRefItem=NULL;
     384           0 :                     if (pArgs && SfxItemState::SET == pArgs->GetItemState( SID_STYLE_REFERENCE, true, &pRefItem ))
     385             :                     {
     386           0 :                         if(pRefItem!=NULL)
     387           0 :                             aRefName  = static_cast<const SfxStringItem*>(pRefItem)->GetValue();
     388             :                     }
     389             : 
     390             :                     pStyleSheet = &(pStylePool->Make( aStyleName, eFamily,
     391           0 :                                                       SFXSTYLEBIT_USERDEF ) );
     392             : 
     393           0 :                     if ( pStyleSheet && pStyleSheet->HasParentSupport() )
     394           0 :                         pStyleSheet->SetParent(aRefName);
     395             :                 }
     396           0 :                 break;
     397             : 
     398             :             case SID_STYLE_APPLY:
     399             :             {
     400           0 :                 SFX_REQUEST_ARG( rReq, pNameItem, SfxStringItem, SID_APPLY_STYLE, false );
     401           0 :                 SFX_REQUEST_ARG( rReq, pFamilyItem, SfxStringItem, SID_STYLE_FAMILYNAME, false );
     402           0 :                 if ( pFamilyItem && pNameItem )
     403             :                 {
     404           0 :                     com::sun::star::uno::Reference< com::sun::star::style::XStyleFamiliesSupplier > xModel(pDocSh->GetModel(), com::sun::star::uno::UNO_QUERY);
     405             :                     try
     406             :                     {
     407           0 :                         com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > xStyles;
     408           0 :                         com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > xCont = xModel->getStyleFamilies();
     409           0 :                         xCont->getByName(pFamilyItem->GetValue()) >>= xStyles;
     410           0 :                         com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet > xInfo;
     411           0 :                         xStyles->getByName( pNameItem->GetValue() ) >>= xInfo;
     412           0 :                         OUString aUIName;
     413           0 :                         xInfo->getPropertyValue("DisplayName") >>= aUIName;
     414           0 :                         if ( !aUIName.isEmpty() )
     415           0 :                             rReq.AppendItem( SfxStringItem( SID_STYLE_APPLY, aUIName ) );
     416             :                     }
     417           0 :                     catch( com::sun::star::uno::Exception& )
     418             :                     {
     419           0 :                     }
     420             :                 }
     421             :             }
     422             :             //fall-through
     423             :             case SID_STYLE_EDIT:
     424             :             case SID_STYLE_DELETE:
     425             :             case SID_STYLE_HIDE:
     426             :             case SID_STYLE_SHOW:
     427             :             case SID_STYLE_NEW_BY_EXAMPLE:
     428             :                 {
     429             :                     const SfxPoolItem* pNameItem;
     430           0 :                     if (pArgs && SfxItemState::SET == pArgs->GetItemState( nSlotId, true, &pNameItem ))
     431           0 :                         aStyleName = static_cast<const SfxStringItem*>(pNameItem)->GetValue();
     432           0 :                     pStyleSheet = pStylePool->Find( aStyleName, eFamily );
     433             : 
     434           0 :                     aOldData.InitFromStyle( pStyleSheet );
     435             :                 }
     436           0 :                 break;
     437             : 
     438             :             case SID_STYLE_WATERCAN:
     439             :             {
     440           0 :                 bool bWaterCan = pScMod->GetIsWaterCan();
     441             : 
     442           0 :                 if( !bWaterCan )
     443             :                 {
     444             :                     const SfxPoolItem* pItem;
     445             : 
     446           0 :                     if ( SfxItemState::SET ==
     447           0 :                          pArgs->GetItemState( nSlotId, true, &pItem ) )
     448             :                     {
     449           0 :                         const SfxStringItem* pStrItem = PTR_CAST(SfxStringItem,pItem);
     450           0 :                         if ( pStrItem )
     451             :                         {
     452           0 :                             aStyleName  = pStrItem->GetValue();
     453           0 :                             pStyleSheet = pStylePool->Find( aStyleName, eFamily );
     454             : 
     455           0 :                             if ( pStyleSheet )
     456             :                             {
     457             :                                 static_cast<ScStyleSheetPool*>(pStylePool)->
     458           0 :                                         SetActualStyleSheet( pStyleSheet );
     459           0 :                                 rReq.Done();
     460             :                             }
     461             :                         }
     462             :                     }
     463             :                 }
     464             : 
     465           0 :                 if ( !bWaterCan && pStyleSheet )
     466             :                 {
     467           0 :                     pScMod->SetWaterCan( true );
     468           0 :                     pTabViewShell->SetActivePointer( Pointer(POINTER_FILL) );
     469           0 :                     rReq.Done();
     470             :                 }
     471             :                 else
     472             :                 {
     473           0 :                     pScMod->SetWaterCan( false );
     474           0 :                     pTabViewShell->SetActivePointer( Pointer(POINTER_ARROW) );
     475           0 :                     rReq.Done();
     476             :                 }
     477             :             }
     478           0 :             break;
     479             : 
     480             :             default:
     481           0 :                 break;
     482             :         }
     483             : 
     484             :         // set new style for WaterCan-Mode
     485           0 :         if ( nSlotId == SID_STYLE_APPLY && pScMod->GetIsWaterCan() && pStyleSheet )
     486           0 :             static_cast<ScStyleSheetPool*>(pStylePool)->SetActualStyleSheet( pStyleSheet );
     487             : 
     488           0 :         switch ( eFamily )
     489             :         {
     490             :             case SFX_STYLE_FAMILY_PARA:
     491             :             {
     492           0 :                 switch ( nSlotId )
     493             :                 {
     494             :                     case SID_STYLE_DELETE:
     495             :                     {
     496           0 :                         if ( pStyleSheet )
     497             :                         {
     498           0 :                             pTabViewShell->RemoveStyleSheetInUse( pStyleSheet );
     499           0 :                             pStylePool->Remove( pStyleSheet );
     500           0 :                             pTabViewShell->InvalidateAttribs();
     501           0 :                             nRetMask = sal_uInt16(true);
     502           0 :                             bAddUndo = true;
     503           0 :                             rReq.Done();
     504             :                         }
     505             :                         else
     506           0 :                             nRetMask = sal_uInt16(false);
     507             :                     }
     508           0 :                     break;
     509             : 
     510             :                     case SID_STYLE_HIDE:
     511             :                     case SID_STYLE_SHOW:
     512             :                     {
     513           0 :                         if ( pStyleSheet )
     514             :                         {
     515           0 :                             pStyleSheet->SetHidden( nSlotId == SID_STYLE_HIDE );
     516           0 :                             pTabViewShell->InvalidateAttribs();
     517           0 :                             rReq.Done();
     518             :                         }
     519             :                         else
     520           0 :                             nRetMask = sal_uInt16(false);
     521             :                     }
     522           0 :                     break;
     523             : 
     524             :                     case SID_STYLE_APPLY:
     525             :                     {
     526           0 :                         if ( pStyleSheet && !pScMod->GetIsWaterCan() )
     527             :                         {
     528             :                             // apply style sheet to document
     529           0 :                             pTabViewShell->SetStyleSheetToMarked( static_cast<SfxStyleSheet*>(pStyleSheet) );
     530           0 :                             pTabViewShell->InvalidateAttribs();
     531           0 :                             rReq.Done();
     532             :                         }
     533             :                     }
     534           0 :                     break;
     535             : 
     536             :                     case SID_STYLE_NEW_BY_EXAMPLE:
     537             :                     case SID_STYLE_UPDATE_BY_EXAMPLE:
     538             :                     {
     539             :                         // create/replace style sheet by attributes
     540             :                         // at cursor position:
     541             : 
     542           0 :                         const ScPatternAttr* pAttrItem = NULL;
     543             : 
     544             :                         // Die Abfrage, ob markiert ist, war hier immer falsch,
     545             :                         // darum jetzt gar nicht mehr, und einfach vom Cursor.
     546             :                         // Wenn Attribute aus der Selektion genommen werden sollen,
     547             :                         // muss noch darauf geachtet werden, Items aus Vorlagen nicht
     548             :                         // zu uebernehmen (GetSelectionPattern sammelt auch Items aus
     549             :                         // Vorlagen zusammen) (#44748#)
     550             :                         //      pAttrItem = GetSelectionPattern();
     551             : 
     552             :                         // ScViewData* pViewData = GetViewData();
     553           0 :                         SCCOL       nCol = pViewData->GetCurX();
     554           0 :                         SCROW       nRow = pViewData->GetCurY();
     555           0 :                         pAttrItem = rDoc.GetPattern( nCol, nRow, nCurTab );
     556             : 
     557           0 :                         SfxItemSet aAttrSet = pAttrItem->GetItemSet();
     558           0 :                         aAttrSet.ClearItem( ATTR_MERGE );
     559           0 :                         aAttrSet.ClearItem( ATTR_MERGE_FLAG );
     560             :                         //  bedingte Formatierung und Gueltigkeit nicht uebernehmen,
     561             :                         //  weil sie in der Vorlage nicht editiert werden koennen
     562           0 :                         aAttrSet.ClearItem( ATTR_VALIDDATA );
     563           0 :                         aAttrSet.ClearItem( ATTR_CONDITIONAL );
     564             : 
     565           0 :                         if ( SID_STYLE_NEW_BY_EXAMPLE == nSlotId )
     566             :                         {
     567           0 :                             if ( bUndo )
     568             :                             {
     569           0 :                                 OUString aUndo = ScGlobal::GetRscString( STR_UNDO_EDITCELLSTYLE );
     570           0 :                                 pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
     571           0 :                                 bListAction = true;
     572             :                             }
     573             : 
     574           0 :                             bool bConvertBack = false;
     575             :                             SfxStyleSheet*  pSheetInUse = (SfxStyleSheet*)
     576           0 :                                                           pTabViewShell->GetStyleSheetFromMarked();
     577             : 
     578             :                             // wenn neuer Style vorhanden und in der Selektion
     579             :                             // verwendet wird, so darf der Parent nicht uebernommen
     580             :                             // werden:
     581             : 
     582           0 :                             if ( pStyleSheet && pSheetInUse && pStyleSheet == pSheetInUse )
     583           0 :                                 pSheetInUse = NULL;
     584             : 
     585             :                             // wenn bereits vorhanden, erstmal entfernen...
     586           0 :                             if ( pStyleSheet )
     587             :                             {
     588             :                                 // Style-Pointer zu Namen vor Erase,
     589             :                                 // weil Zellen sonst ungueltige Pointer
     590             :                                 // enthalten.
     591             :                                 //!!! bei Gelenheit mal eine Methode, die
     592             :                                 //    das fuer einen bestimmten Style macht
     593           0 :                                 rDoc.StylesToNames();
     594           0 :                                 bConvertBack = true;
     595           0 :                                 pStylePool->Remove(pStyleSheet);
     596             :                             }
     597             : 
     598             :                             // ...und neu anlegen
     599             :                             pStyleSheet = &pStylePool->Make( aStyleName, eFamily,
     600           0 :                                                              SFXSTYLEBIT_USERDEF );
     601             : 
     602             :                             // wenn ein Style vorhanden ist, so wird dieser
     603             :                             // Parent der neuen Vorlage:
     604           0 :                             if ( pSheetInUse && pStyleSheet->HasParentSupport() )
     605           0 :                                 pStyleSheet->SetParent( pSheetInUse->GetName() );
     606             : 
     607           0 :                             if ( bConvertBack )
     608             :                                 // Namen zu Style-Pointer
     609           0 :                                 rDoc.UpdStlShtPtrsFrmNms();
     610             :                             else
     611           0 :                                 rDoc.GetPool()->CellStyleCreated( aStyleName, &rDoc );
     612             : 
     613             :                             // Attribute uebernehmen und Style anwenden
     614           0 :                             pStyleSheet->GetItemSet().Put( aAttrSet );
     615           0 :                             pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
     616             : 
     617             :                             //  call SetStyleSheetToMarked after adding the ScUndoModifyStyle
     618             :                             //  (pStyleSheet pointer is used!)
     619           0 :                             bStyleToMarked = true;
     620             :                         }
     621             :                         else // ( nSlotId == SID_STYLE_UPDATE_BY_EXAMPLE )
     622             :                         {
     623           0 :                             pStyleSheet = (SfxStyleSheet*)pTabViewShell->GetStyleSheetFromMarked();
     624             : 
     625           0 :                             if ( pStyleSheet )
     626             :                             {
     627           0 :                                 aOldData.InitFromStyle( pStyleSheet );
     628             : 
     629           0 :                                 if ( bUndo )
     630             :                                 {
     631           0 :                                     OUString aUndo = ScGlobal::GetRscString( STR_UNDO_EDITCELLSTYLE );
     632           0 :                                     pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
     633           0 :                                     bListAction = true;
     634             :                                 }
     635             : 
     636           0 :                                 pStyleSheet->GetItemSet().Put( aAttrSet );
     637           0 :                                 pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
     638             : 
     639             :                                 //  call SetStyleSheetToMarked after adding the ScUndoModifyStyle
     640             :                                 //  (pStyleSheet pointer is used!)
     641           0 :                                 bStyleToMarked = true;
     642             :                             }
     643             :                         }
     644             : 
     645           0 :                         aNewData.InitFromStyle( pStyleSheet );
     646           0 :                         bAddUndo = true;
     647           0 :                         rReq.Done();
     648             :                     }
     649           0 :                     break;
     650             : 
     651             :                     default:
     652           0 :                         break;
     653             :                 }
     654             :             } // case SFX_STYLE_FAMILY_PARA:
     655           0 :             break;
     656             : 
     657             :             case SFX_STYLE_FAMILY_PAGE:
     658             :             {
     659           0 :                 switch ( nSlotId )
     660             :                 {
     661             :                     case SID_STYLE_DELETE:
     662             :                     {
     663           0 :                         nRetMask = sal_uInt16( NULL != pStyleSheet );
     664           0 :                         if ( pStyleSheet )
     665             :                         {
     666           0 :                             if ( rDoc.RemovePageStyleInUse( pStyleSheet->GetName() ) )
     667             :                             {
     668           0 :                                 ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(true), nCurTab ).UpdatePages();
     669           0 :                                 rBindings.Invalidate( SID_STATUS_PAGESTYLE );
     670           0 :                                 rBindings.Invalidate( FID_RESET_PRINTZOOM );
     671             :                             }
     672           0 :                             pStylePool->Remove( pStyleSheet );
     673           0 :                             rBindings.Invalidate( SID_STYLE_FAMILY4 );
     674           0 :                             pDocSh->SetDocumentModified();
     675           0 :                             bAddUndo = true;
     676           0 :                             rReq.Done();
     677             :                         }
     678             :                     }
     679           0 :                     break;
     680             : 
     681             :                     case SID_STYLE_HIDE:
     682             :                     case SID_STYLE_SHOW:
     683             :                     {
     684           0 :                         nRetMask = sal_uInt16( NULL != pStyleSheet );
     685           0 :                         if ( pStyleSheet )
     686             :                         {
     687           0 :                             pStyleSheet->SetHidden( nSlotId == SID_STYLE_HIDE );
     688           0 :                             rBindings.Invalidate( SID_STYLE_FAMILY4 );
     689           0 :                             pDocSh->SetDocumentModified();
     690           0 :                             rReq.Done();
     691             :                         }
     692             :                     }
     693           0 :                     break;
     694             : 
     695             :                     case SID_STYLE_APPLY:
     696             :                     {
     697           0 :                         nRetMask = sal_uInt16( NULL != pStyleSheet );
     698           0 :                         if ( pStyleSheet && !pScMod->GetIsWaterCan() )
     699             :                         {
     700           0 :                             ScUndoApplyPageStyle* pUndoAction = 0;
     701           0 :                             SCTAB nTabCount = rDoc.GetTableCount();
     702           0 :                             ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
     703           0 :                             for (; itr != itrEnd && *itr < nTabCount; ++itr)
     704             :                             {
     705           0 :                                 OUString aOldName = rDoc.GetPageStyle( *itr );
     706           0 :                                 if ( aOldName != aStyleName )
     707             :                                 {
     708           0 :                                     rDoc.SetPageStyle( *itr, aStyleName );
     709           0 :                                     ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(true), *itr ).UpdatePages();
     710           0 :                                     if( !pUndoAction )
     711           0 :                                         pUndoAction = new ScUndoApplyPageStyle( pDocSh, aStyleName );
     712           0 :                                     pUndoAction->AddSheetAction( *itr, aOldName );
     713             :                                 }
     714           0 :                             }
     715           0 :                             if( pUndoAction )
     716             :                             {
     717           0 :                                 pDocSh->GetUndoManager()->AddUndoAction( pUndoAction );
     718           0 :                                 pDocSh->SetDocumentModified();
     719           0 :                                 rBindings.Invalidate( SID_STYLE_FAMILY4 );
     720           0 :                                 rBindings.Invalidate( SID_STATUS_PAGESTYLE );
     721           0 :                                 rBindings.Invalidate( FID_RESET_PRINTZOOM );
     722             :                             }
     723           0 :                             rReq.Done();
     724             :                         }
     725             :                     }
     726           0 :                     break;
     727             : 
     728             :                     case SID_STYLE_NEW_BY_EXAMPLE:
     729             :                     {
     730           0 :                         const OUString& rStrCurStyle = rDoc.GetPageStyle( nCurTab );
     731             : 
     732           0 :                         if ( rStrCurStyle != aStyleName )
     733             :                         {
     734           0 :                             SfxStyleSheetBase*  pCurStyle = pStylePool->Find( rStrCurStyle, eFamily );
     735           0 :                             SfxItemSet          aAttrSet  = pCurStyle->GetItemSet();
     736             :                             SCTAB               nInTab;
     737           0 :                             bool                bUsed = rDoc.IsPageStyleInUse( aStyleName, &nInTab );
     738             : 
     739             :                             // wenn bereits vorhanden, erstmal entfernen...
     740           0 :                             if ( pStyleSheet )
     741           0 :                                 pStylePool->Remove( pStyleSheet );
     742             : 
     743             :                             // ...und neu anlegen
     744             :                             pStyleSheet = &pStylePool->Make( aStyleName, eFamily,
     745           0 :                                                              SFXSTYLEBIT_USERDEF );
     746             : 
     747             :                             // Attribute uebernehmen
     748           0 :                             pStyleSheet->GetItemSet().Put( aAttrSet );
     749           0 :                             pDocSh->SetDocumentModified();
     750             : 
     751             :                             // wenn in Verwendung -> Update
     752           0 :                             if ( bUsed )
     753           0 :                                 ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(true), nInTab ).UpdatePages();
     754             : 
     755           0 :                             aNewData.InitFromStyle( pStyleSheet );
     756           0 :                             bAddUndo = true;
     757           0 :                             rReq.Done();
     758           0 :                             nRetMask = sal_uInt16(true);
     759           0 :                         }
     760             :                     }
     761           0 :                     break;
     762             : 
     763             :                     default:
     764           0 :                         break;
     765             :                 } // switch ( nSlotId )
     766             :             } // case SFX_STYLE_FAMILY_PAGE:
     767           0 :             break;
     768             : 
     769             :             default:
     770           0 :                 break;
     771             :         } // switch ( eFamily )
     772             : 
     773             :         // Neu anlegen oder bearbeiten ueber Dialog:
     774           0 :         if ( nSlotId == SID_STYLE_NEW || nSlotId == SID_STYLE_EDIT )
     775             :         {
     776           0 :             if ( pStyleSheet )
     777             :             {
     778           0 :                 SfxStyleFamily  eFam    = pStyleSheet->GetFamily();
     779           0 :                 boost::scoped_ptr<SfxAbstractTabDialog> pDlg;
     780           0 :                 sal_uInt16          nRsc    = 0;
     781             : 
     782             :                 // alte Items aus der Vorlage merken
     783           0 :                 SfxItemSet aOldSet = pStyleSheet->GetItemSet();
     784           0 :                 OUString aOldName = pStyleSheet->GetName();
     785             : 
     786           0 :                 switch ( eFam )
     787             :                 {
     788             :                     case SFX_STYLE_FAMILY_PAGE:
     789           0 :                         nRsc = RID_SCDLG_STYLES_PAGE;
     790           0 :                         break;
     791             : 
     792             :                     case SFX_STYLE_FAMILY_PARA:
     793             :                     default:
     794             :                         {
     795           0 :                             SfxItemSet& rSet = pStyleSheet->GetItemSet();
     796             : 
     797             :                             const SfxPoolItem* pItem;
     798           0 :                             if ( rSet.GetItemState( ATTR_VALUE_FORMAT,
     799           0 :                                     false, &pItem ) == SfxItemState::SET )
     800             :                             {
     801             :                                 // NumberFormat Value aus Value und Language
     802             :                                 // erzeugen und eintueten
     803             :                                 sal_uLong nFormat =
     804           0 :                                     static_cast<const SfxUInt32Item*>(pItem)->GetValue();
     805             :                                 LanguageType eLang =
     806             :                                     static_cast<const SvxLanguageItem*>(&rSet.Get(
     807           0 :                                     ATTR_LANGUAGE_FORMAT ))->GetLanguage();
     808             :                                 sal_uLong nLangFormat = rDoc.GetFormatTable()->
     809           0 :                                     GetFormatForLanguageIfBuiltIn( nFormat, eLang );
     810           0 :                                 if ( nLangFormat != nFormat )
     811             :                                 {
     812           0 :                                     SfxUInt32Item aNewItem( ATTR_VALUE_FORMAT, nLangFormat );
     813           0 :                                     rSet.Put( aNewItem );
     814           0 :                                     aOldSet.Put( aNewItem );
     815             :                                     // auch in aOldSet fuer Vergleich nach dem Dialog,
     816             :                                     // sonst geht evtl. eine Aenderung der Sprache verloren
     817             :                                 }
     818             :                             }
     819             : 
     820             :                             boost::scoped_ptr<SvxNumberInfoItem> pNumberInfoItem(
     821           0 :                                 pTabViewShell->MakeNumberInfoItem(&rDoc, GetViewData()));
     822             : 
     823           0 :                             pDocSh->PutItem( *pNumberInfoItem );
     824           0 :                             nRsc = RID_SCDLG_STYLES_PAR;
     825             : 
     826             :                             //  auf jeden Fall ein SvxBoxInfoItem mit Table = sal_False im Set:
     827             :                             //  (wenn gar kein Item da ist, loescht der Dialog auch das
     828             :                             //   BORDER_OUTER SvxBoxItem aus dem Vorlagen-Set)
     829             : 
     830           0 :                             if ( rSet.GetItemState( ATTR_BORDER_INNER, false ) != SfxItemState::SET )
     831             :                             {
     832           0 :                                 SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
     833           0 :                                 aBoxInfoItem.SetTable(false);       // keine inneren Linien
     834           0 :                                 aBoxInfoItem.SetDist(true);
     835           0 :                                 aBoxInfoItem.SetMinDist(false);
     836           0 :                                 rSet.Put( aBoxInfoItem );
     837           0 :                             }
     838             :                         }
     839           0 :                         break;
     840             :                 }
     841             : 
     842             :                 //  If GetDefDialogParent is a dialog, it must be used
     843             :                 //  (style catalog)
     844             : 
     845           0 :                 vcl::Window* pParent = Application::GetDefDialogParent();
     846           0 :                 if ( !pParent || !pParent->IsDialog() )
     847             :                 {
     848             :                     //  GetDefDialogParent currently doesn't return the window
     849             :                     //  that was set with SetDefDialogParent (but dynamically finds the
     850             :                     //  topmost parent of the focus window), so IsDialog above is FALSE
     851             :                     //  even if called from the style catalog.
     852             :                     //  -> Use NULL if a modal dialog is open, to enable the Dialog's
     853             :                     //  default parent handling.
     854           0 :                     if ( Application::IsInModalMode() )
     855           0 :                         pParent = NULL;
     856             :                     else
     857           0 :                         pParent = pTabViewShell->GetDialogParent();
     858             :                 }
     859             : 
     860           0 :                 pTabViewShell->SetInFormatDialog(true);
     861             : 
     862           0 :                 ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     863             :                 OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     864             : 
     865           0 :                 pDlg.reset(pFact->CreateScStyleDlg( pParent, *pStyleSheet, nRsc, nRsc ));
     866             :                 OSL_ENSURE(pDlg, "Dialog create fail!");
     867           0 :                 short nResult = pDlg->Execute();
     868           0 :                 pTabViewShell->SetInFormatDialog(false);
     869             : 
     870           0 :                 if ( nResult == RET_OK )
     871             :                 {
     872           0 :                     const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
     873             : 
     874           0 :                     if ( pOutSet )
     875             :                     {
     876           0 :                         nRetMask = pStyleSheet->GetMask();
     877             : 
     878             :                         //  Attribut-Vergleiche (frueher in ModifyStyleSheet)
     879             :                         //  jetzt hier mit den alten Werten (Style ist schon veraendert)
     880             : 
     881           0 :                         if ( SFX_STYLE_FAMILY_PARA == eFam )
     882             :                         {
     883           0 :                             SfxItemSet& rNewSet = pStyleSheet->GetItemSet();
     884             :                             bool bNumFormatChanged;
     885           0 :                             if ( ScGlobal::CheckWidthInvalidate(
     886             :                                                 bNumFormatChanged, rNewSet, aOldSet ) )
     887           0 :                                 rDoc.InvalidateTextWidth( NULL, NULL, bNumFormatChanged );
     888             : 
     889           0 :                             SCTAB nTabCount = rDoc.GetTableCount();
     890           0 :                             for (SCTAB nTab=0; nTab<nTabCount; nTab++)
     891           0 :                                 if (rDoc.IsStreamValid(nTab))
     892           0 :                                     rDoc.SetStreamValid(nTab, false);
     893             : 
     894             :                             sal_uLong nOldFormat = static_cast<const SfxUInt32Item&>(aOldSet.
     895           0 :                                                     Get( ATTR_VALUE_FORMAT )).GetValue();
     896             :                             sal_uLong nNewFormat = static_cast<const SfxUInt32Item&>(rNewSet.
     897           0 :                                                     Get( ATTR_VALUE_FORMAT )).GetValue();
     898           0 :                             if ( nNewFormat != nOldFormat )
     899             :                             {
     900           0 :                                 SvNumberFormatter* pFormatter = rDoc.GetFormatTable();
     901           0 :                                 const SvNumberformat* pOld = pFormatter->GetEntry( nOldFormat );
     902           0 :                                 const SvNumberformat* pNew = pFormatter->GetEntry( nNewFormat );
     903           0 :                                 if ( pOld && pNew && pOld->GetLanguage() != pNew->GetLanguage() )
     904             :                                     rNewSet.Put( SvxLanguageItem(
     905           0 :                                                     pNew->GetLanguage(), ATTR_LANGUAGE_FORMAT ) );
     906             :                             }
     907             : 
     908           0 :                             rDoc.GetPool()->CellStyleCreated( pStyleSheet->GetName(), &rDoc );
     909             :                         }
     910             :                         else
     911             :                         {
     912             :                             //! auch fuer Seitenvorlagen die Abfragen hier
     913             : 
     914           0 :                             OUString aNewName = pStyleSheet->GetName();
     915           0 :                             if ( aNewName != aOldName &&
     916           0 :                                     rDoc.RenamePageStyleInUse( aOldName, aNewName ) )
     917             :                             {
     918           0 :                                 rBindings.Invalidate( SID_STATUS_PAGESTYLE );
     919           0 :                                 rBindings.Invalidate( FID_RESET_PRINTZOOM );
     920             :                             }
     921             : 
     922           0 :                             rDoc.ModifyStyleSheet( *pStyleSheet, *pOutSet );
     923           0 :                             rBindings.Invalidate( FID_RESET_PRINTZOOM );
     924             :                         }
     925             : 
     926           0 :                         pDocSh->SetDocumentModified();
     927             : 
     928           0 :                         if ( SFX_STYLE_FAMILY_PARA == eFam )
     929             :                         {
     930             :                             pTabViewShell->UpdateNumberFormatter(
     931             :                                 static_cast<const SvxNumberInfoItem&>(
     932           0 :                                     *(pDocSh->GetItem(SID_ATTR_NUMBERFORMAT_INFO)) ));
     933             : 
     934           0 :                             pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
     935           0 :                             pTabViewShell->InvalidateAttribs();
     936             :                         }
     937             : 
     938           0 :                         aNewData.InitFromStyle( pStyleSheet );
     939           0 :                         bAddUndo = true;
     940             :                     }
     941             :                 }
     942             :                 else
     943             :                 {
     944           0 :                     if ( nSlotId == SID_STYLE_NEW )
     945           0 :                         pStylePool->Remove( pStyleSheet );
     946             :                     else
     947             :                     {
     948             :                         //  falls zwischendurch etwas mit dem temporaer geaenderten
     949             :                         //  ItemSet gepainted wurde:
     950           0 :                         pDocSh->PostPaintGridAll();
     951             :                     }
     952           0 :                 }
     953             :             }
     954             :         }
     955             : 
     956           0 :             rReq.SetReturnValue( SfxUInt16Item( nSlotId, nRetMask ) );
     957             : 
     958           0 :         if ( bAddUndo && bUndo)
     959           0 :             pDocSh->GetUndoManager()->AddUndoAction(
     960           0 :                         new ScUndoModifyStyle( pDocSh, eFamily, aOldData, aNewData ) );
     961             : 
     962           0 :         if ( bStyleToMarked )
     963             :         {
     964             :             //  call SetStyleSheetToMarked after adding the ScUndoModifyStyle,
     965             :             //  so redo will find the modified style
     966           0 :             pTabViewShell->SetStyleSheetToMarked( static_cast<SfxStyleSheet*>(pStyleSheet) );
     967           0 :             pTabViewShell->InvalidateAttribs();
     968             :         }
     969             : 
     970           0 :         if ( bListAction )
     971           0 :             pDocSh->GetUndoManager()->LeaveListAction();
     972             :     }
     973             :     else
     974             :     {
     975             :         OSL_FAIL( "Unknown slot (ScViewShell::ExecuteStyle)" );
     976        3854 :     }
     977             : }
     978             : 
     979           0 : void ScFormatShell::ExecuteNumFormat( SfxRequest& rReq )
     980             : {
     981           0 :     ScModule*           pScMod      = SC_MOD();
     982           0 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
     983           0 :     const SfxItemSet*   pReqArgs    = rReq.GetArgs();
     984           0 :     sal_uInt16              nSlot       = rReq.GetSlot();
     985           0 :     SfxBindings& rBindings          = pTabViewShell->GetViewFrame()->GetBindings();
     986             : 
     987           0 :     pTabViewShell->HideListBox();                   // Autofilter-DropDown-Listbox
     988             : 
     989             :                                     // Eingabe beenden
     990           0 :     if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
     991             :     {
     992           0 :         switch ( nSlot )
     993             :         {
     994             :             case SID_NUMBER_TWODEC:
     995             :             case SID_NUMBER_SCIENTIFIC:
     996             :             case SID_NUMBER_DATE:
     997             :             case SID_NUMBER_CURRENCY:
     998             :             case SID_NUMBER_PERCENT:
     999             :             case SID_NUMBER_STANDARD:
    1000             :             case SID_NUMBER_FORMAT:
    1001             :             case SID_NUMBER_INCDEC:
    1002             :             case SID_NUMBER_DECDEC:
    1003             :             case FID_DEFINE_NAME:
    1004             :             case FID_ADD_NAME:
    1005             :             case FID_USE_NAME:
    1006             :             case FID_INSERT_NAME:
    1007             :             case SID_SPELL_DIALOG:
    1008             :             case SID_HANGUL_HANJA_CONVERSION:
    1009             : 
    1010           0 :             pScMod->InputEnterHandler();
    1011           0 :             pTabViewShell->UpdateInputHandler();
    1012           0 :             break;
    1013             : 
    1014             :             default:
    1015           0 :             break;
    1016             :         }
    1017             :     }
    1018             : 
    1019           0 :     short nType = GetCurrentNumberFormatType();
    1020           0 :     SfxItemSet aSet( GetPool(), nSlot, nSlot );
    1021           0 :     switch ( nSlot )
    1022             :     {
    1023             :         case SID_NUMBER_TWODEC:
    1024           0 :             pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER, 4 );       // Standard+4 = #.##0,00
    1025           0 :             rReq.Done();
    1026           0 :             break;
    1027             :         case SID_NUMBER_SCIENTIFIC:
    1028           0 :             if ((nType & NUMBERFORMAT_SCIENTIFIC))
    1029           0 :                 pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
    1030             :             else
    1031           0 :                 pTabViewShell->SetNumberFormat( NUMBERFORMAT_SCIENTIFIC );
    1032           0 :             aSet.Put( SfxBoolItem(nSlot, !(nType & NUMBERFORMAT_SCIENTIFIC)) );
    1033           0 :             rBindings.Invalidate( nSlot );
    1034           0 :             rReq.Done();
    1035           0 :             break;
    1036             :         case SID_NUMBER_DATE:
    1037           0 :             if ((nType & NUMBERFORMAT_DATE))
    1038           0 :                 pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
    1039             :             else
    1040           0 :                 pTabViewShell->SetNumberFormat( NUMBERFORMAT_DATE );
    1041           0 :             aSet.Put( SfxBoolItem(nSlot, !(nType & NUMBERFORMAT_DATE)) );
    1042           0 :             rBindings.Invalidate( nSlot );
    1043           0 :             rReq.Done();
    1044           0 :             break;
    1045             :         case SID_NUMBER_TIME:
    1046           0 :             if ((nType & NUMBERFORMAT_TIME))
    1047           0 :                 pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
    1048             :             else
    1049           0 :                 pTabViewShell->SetNumberFormat( NUMBERFORMAT_TIME );
    1050           0 :             aSet.Put( SfxBoolItem(nSlot, !(nType & NUMBERFORMAT_TIME)) );
    1051           0 :             rBindings.Invalidate( nSlot );
    1052           0 :             rReq.Done();
    1053           0 :             break;
    1054             :         case SID_NUMBER_CURRENCY:
    1055           0 :             if ((nType & NUMBERFORMAT_CURRENCY))
    1056           0 :                 pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
    1057             :             else
    1058           0 :                 pTabViewShell->SetNumberFormat( NUMBERFORMAT_CURRENCY );
    1059           0 :             aSet.Put( SfxBoolItem(nSlot, !(nType & NUMBERFORMAT_CURRENCY)) );
    1060           0 :             rBindings.Invalidate( nSlot );
    1061           0 :             rReq.Done();
    1062           0 :             break;
    1063             :         case SID_NUMBER_PERCENT:
    1064           0 :             if ((nType & NUMBERFORMAT_PERCENT))
    1065           0 :                 pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
    1066             :             else
    1067           0 :                 pTabViewShell->SetNumberFormat( NUMBERFORMAT_PERCENT );
    1068           0 :             aSet.Put( SfxBoolItem(nSlot, !(nType & NUMBERFORMAT_PERCENT)) );
    1069           0 :             rBindings.Invalidate( nSlot );
    1070           0 :             rReq.Done();
    1071           0 :             break;
    1072             :         case SID_NUMBER_STANDARD:
    1073           0 :             pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
    1074           0 :             rReq.Done();
    1075           0 :             break;
    1076             :         case SID_NUMBER_INCDEC:
    1077           0 :             pTabViewShell->ChangeNumFmtDecimals( true );
    1078           0 :             rReq.Done();
    1079           0 :             break;
    1080             :         case SID_NUMBER_DECDEC:
    1081           0 :             pTabViewShell->ChangeNumFmtDecimals( false );
    1082           0 :             rReq.Done();
    1083           0 :             break;
    1084             : 
    1085             :         case SID_NUMBER_FORMAT:
    1086             :             //if ( pReqArgs )
    1087             :             //{
    1088             :             //  const SfxPoolItem* pItem;
    1089             :             //  if(pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SfxItemState::SET)
    1090             :             //  {
    1091             :             //      String aCode = ((const SfxStringItem*)pItem)->GetValue();
    1092             :             //      pTabViewShell->SetNumFmtByStr( aCode );
    1093             :             //  }
    1094             :             //}
    1095             : 
    1096             :             // symphony version with format interpretation
    1097           0 :             if(pReqArgs)
    1098             :             {
    1099             :                 const SfxPoolItem* pItem;
    1100           0 :                 ScDocument* pDoc = pViewData->GetDocument();
    1101           0 :                 SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
    1102           0 :                 LanguageType eLanguage = ScGlobal::eLnge;
    1103           0 :                 sal_Int16 eType = -1;
    1104             :                 sal_uInt32 nCurrentNumberFormat;
    1105             : 
    1106           0 :                 pDoc->GetNumberFormat(pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo(), nCurrentNumberFormat);
    1107           0 :                 const SvNumberformat* pEntry = pFormatter->GetEntry(nCurrentNumberFormat);
    1108             : 
    1109           0 :                 if(pEntry)
    1110             :                 {
    1111           0 :                     eLanguage = pEntry->GetLanguage();
    1112           0 :                     eType = pEntry->GetType();
    1113             :                 }
    1114             : 
    1115             :                 //Just use eType to judge whether the command is fired for NUMBER/PERCENT/CURRENCY
    1116             :                 //In sidebar, users can fire SID_NUMBER_FORMAT command by operating the related UI controls before they are disable
    1117           0 :                 switch(eType)
    1118             :                 {
    1119             :                 case NUMBERFORMAT_ALL:
    1120             :                 case NUMBERFORMAT_NUMBER:
    1121             :                 case NUMBERFORMAT_NUMBER| NUMBERFORMAT_DEFINED:
    1122             :                 case NUMBERFORMAT_PERCENT:
    1123             :                 case NUMBERFORMAT_PERCENT| NUMBERFORMAT_DEFINED:
    1124             :                 case NUMBERFORMAT_CURRENCY:
    1125             :                 case NUMBERFORMAT_CURRENCY|NUMBERFORMAT_DEFINED:
    1126           0 :                     eType = 0;
    1127           0 :                     break;
    1128             :                 default:
    1129           0 :                     eType =-1;
    1130             :                 }
    1131             : 
    1132           0 :                 if(SfxItemState::SET == pReqArgs->GetItemState(nSlot, true, &pItem) && eType != -1)
    1133             :                 {
    1134           0 :                     OUString aCode = static_cast<const SfxStringItem*>(pItem)->GetValue();
    1135           0 :                     sal_uInt16 aLen = aCode.getLength();
    1136           0 :                     OUString* sFormat = new OUString[4];
    1137           0 :                     OUString sTmpStr = "";
    1138           0 :                     sal_uInt16 nCount(0);
    1139           0 :                     sal_uInt16 nStrCount(0);
    1140             : 
    1141           0 :                     while(nCount < aLen)
    1142             :                     {
    1143           0 :                         sal_Unicode cChar = aCode[nCount];
    1144             : 
    1145           0 :                         if(cChar == ',')
    1146             :                         {
    1147           0 :                             sFormat[nStrCount] = sTmpStr;
    1148           0 :                             sTmpStr = "";
    1149           0 :                             nStrCount++;
    1150             :                         }
    1151             :                         else
    1152             :                         {
    1153           0 :                             sTmpStr += OUString(cChar);
    1154             :                         }
    1155             : 
    1156           0 :                         nCount++;
    1157             : 
    1158           0 :                         if(nStrCount > 3)
    1159           0 :                             break;
    1160             :                     }
    1161             : 
    1162           0 :                     const bool bThousand = (bool)sFormat[0].toInt32();
    1163           0 :                     const bool bNegRed = (bool)sFormat[1].toInt32();
    1164           0 :                     const sal_uInt16 nPrecision = (sal_uInt16)sFormat[2].toInt32();
    1165           0 :                     const sal_uInt16 nLeadZeroes = (sal_uInt16)sFormat[3].toInt32();
    1166             : 
    1167           0 :                     aCode = pFormatter->GenerateFormat(
    1168             :                         nCurrentNumberFormat,//modify
    1169             :                         eLanguage,
    1170             :                         bThousand,
    1171             :                         bNegRed,
    1172             :                         nPrecision,
    1173           0 :                         nLeadZeroes);
    1174           0 :                     pTabViewShell->SetNumFmtByStr(aCode);
    1175           0 :                     delete[] sFormat;
    1176             :                 }
    1177             :             }
    1178           0 :             break;
    1179             : 
    1180             :         case SID_ATTR_NUMBERFORMAT_VALUE:
    1181           0 :             if ( pReqArgs )
    1182             :             {
    1183             :                 const SfxPoolItem* pItem;
    1184           0 :                 if ( pReqArgs->GetItemState( ATTR_VALUE_FORMAT, true, &pItem ) == SfxItemState::SET )
    1185             :                 {
    1186             :                     // We have to accomplish this using ApplyAttributes()
    1187             :                     // because we also need the language information to be
    1188             :                     // considered.
    1189             :                     const SfxItemSet& rOldSet =
    1190           0 :                         pTabViewShell->GetSelectionPattern()->GetItemSet();
    1191           0 :                     SfxItemPool* pDocPool = GetViewData()->GetDocument()->GetPool();
    1192           0 :                     SfxItemSet aNewSet( *pDocPool, ATTR_PATTERN_START, ATTR_PATTERN_END );
    1193           0 :                     aNewSet.Put( *pItem );
    1194           0 :                     pTabViewShell->ApplyAttributes( &aNewSet, &rOldSet, true );
    1195             :                 }
    1196             :             }
    1197           0 :             break;
    1198             : 
    1199             :         case SID_NUMBER_TYPE_FORMAT:
    1200           0 :             if ( pReqArgs )
    1201             :             {
    1202             :                 const SfxPoolItem* pItem;
    1203           0 :                 if ( pReqArgs->GetItemState( nSlot, true, &pItem ) == SfxItemState::SET )
    1204             :                 {
    1205           0 :                     sal_uInt16 nFormat = static_cast<const SfxInt16Item *>(pItem)->GetValue();
    1206           0 :                     switch(nFormat)
    1207             :                     {
    1208             :                     case 0:
    1209           0 :                         pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER); //Modify
    1210           0 :                         break;
    1211             :                     case 1:
    1212           0 :                         pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER, 2 ); //Modify
    1213           0 :                         break;
    1214             :                     case 2:
    1215           0 :                         pTabViewShell->SetNumberFormat( NUMBERFORMAT_PERCENT );
    1216           0 :                         break;
    1217             :                     case 3:
    1218           0 :                         pTabViewShell->SetNumberFormat( NUMBERFORMAT_CURRENCY );
    1219           0 :                         break;
    1220             :                     case 4:
    1221           0 :                         pTabViewShell->SetNumberFormat( NUMBERFORMAT_DATE );
    1222           0 :                         break;
    1223             :                     case 5:
    1224           0 :                         pTabViewShell->SetNumberFormat( NUMBERFORMAT_TIME );
    1225           0 :                         break;
    1226             :                     case 6:
    1227           0 :                         pTabViewShell->SetNumberFormat( NUMBERFORMAT_SCIENTIFIC );
    1228           0 :                         break;
    1229             :                     case 7:
    1230           0 :                         pTabViewShell->SetNumberFormat( NUMBERFORMAT_FRACTION );
    1231           0 :                         break;
    1232             :                     case 8:
    1233           0 :                         pTabViewShell->SetNumberFormat( NUMBERFORMAT_LOGICAL );
    1234           0 :                         break;
    1235             :                     case 9:
    1236           0 :                         pTabViewShell->SetNumberFormat( NUMBERFORMAT_TEXT );
    1237           0 :                         break;
    1238             :                     default:
    1239             :                         ;
    1240             :                     }
    1241           0 :                     rReq.Done();
    1242             :                 }
    1243             :             }
    1244           0 :             break;
    1245             : 
    1246             :         default:
    1247             :             OSL_FAIL("falscher Slot bei ExecuteEdit");
    1248           0 :             break;
    1249           0 :     }
    1250           0 : }
    1251             : 
    1252           0 : void ScFormatShell::ExecuteAlignment( SfxRequest& rReq )
    1253             : {
    1254           0 :     ScTabViewShell* pTabViewShell       = GetViewData()->GetViewShell();
    1255           0 :     SfxBindings&            rBindings   = pViewData->GetBindings();
    1256           0 :     const SfxItemSet*       pSet        = rReq.GetArgs();
    1257           0 :     sal_uInt16                  nSlot       = rReq.GetSlot();
    1258             : 
    1259           0 :     pTabViewShell->HideListBox();   // Autofilter-DropDown-Listbox
    1260             : 
    1261           0 :     switch( nSlot )
    1262             :     {
    1263             :         // pseudo slots for Format menu
    1264             :         case SID_ALIGN_ANY_HDEFAULT:
    1265             :         case SID_ALIGN_ANY_LEFT:
    1266             :         case SID_ALIGN_ANY_HCENTER:
    1267             :         case SID_ALIGN_ANY_RIGHT:
    1268             :         case SID_ALIGN_ANY_JUSTIFIED:
    1269           0 :             pTabViewShell->ApplyAttr( SvxHorJustifyItem( lclConvertSlotToHAlign( nSlot ), ATTR_HOR_JUSTIFY ) );
    1270           0 :         break;
    1271             :         case SID_ALIGN_ANY_VDEFAULT:
    1272             :         case SID_ALIGN_ANY_TOP:
    1273             :         case SID_ALIGN_ANY_VCENTER:
    1274             :         case SID_ALIGN_ANY_BOTTOM:
    1275           0 :             pTabViewShell->ApplyAttr( SvxVerJustifyItem( lclConvertSlotToVAlign( nSlot ), ATTR_VER_JUSTIFY ) );
    1276           0 :         break;
    1277             : 
    1278             :         default:
    1279           0 :             if( pSet )
    1280             :             {
    1281           0 :                 const SfxPoolItem* pItem = NULL;
    1282           0 :                 if( pSet->GetItemState(GetPool().GetWhich(nSlot), true, &pItem  ) == SfxItemState::SET )
    1283             :                 {
    1284             : 
    1285           0 :                     switch ( nSlot )
    1286             :                     {
    1287             :                         case SID_ATTR_ALIGN_HOR_JUSTIFY:
    1288             :                         case SID_ATTR_ALIGN_VER_JUSTIFY:
    1289             :                         case SID_ATTR_ALIGN_INDENT:
    1290             :                         case SID_ATTR_ALIGN_HYPHENATION:
    1291             :                         case SID_ATTR_ALIGN_DEGREES:
    1292             :                         case SID_ATTR_ALIGN_LOCKPOS:
    1293             :                         case SID_ATTR_ALIGN_MARGIN:
    1294             :                         case SID_ATTR_ALIGN_STACKED:
    1295           0 :                             pTabViewShell->ApplyAttr( *pItem );
    1296           0 :                         break;
    1297             : 
    1298             :                         case SID_H_ALIGNCELL:
    1299             :                         {
    1300           0 :                             SvxCellHorJustify eJust = (SvxCellHorJustify)static_cast<const SvxHorJustifyItem*>(pItem)->GetValue();
    1301             :                             // #i78476# update alignment of text in cell edit mode
    1302           0 :                             pTabViewShell->UpdateInputHandlerCellAdjust( eJust );
    1303           0 :                             pTabViewShell->ApplyAttr( SvxHorJustifyItem( eJust, ATTR_HOR_JUSTIFY ) );
    1304             :                         }
    1305           0 :                         break;
    1306             :                         case SID_V_ALIGNCELL:
    1307           0 :                             pTabViewShell->ApplyAttr( SvxVerJustifyItem( (SvxCellVerJustify)static_cast<const SvxVerJustifyItem*>(pItem)->GetValue(), ATTR_VER_JUSTIFY ) );
    1308           0 :                         break;
    1309             :                         default:
    1310             :                             OSL_FAIL( "ExecuteAlignment: invalid slot" );
    1311           0 :                             return;
    1312             :                     }
    1313             :                 }
    1314             :             }
    1315             :     }
    1316           0 :     rBindings.Invalidate( SID_ATTR_PARA_ADJUST_LEFT );
    1317           0 :     rBindings.Invalidate( SID_ATTR_PARA_ADJUST_RIGHT );
    1318           0 :     rBindings.Invalidate( SID_ATTR_PARA_ADJUST_BLOCK );
    1319           0 :     rBindings.Invalidate( SID_ATTR_PARA_ADJUST_CENTER);
    1320           0 :     rBindings.Invalidate( SID_ALIGNLEFT );
    1321           0 :     rBindings.Invalidate( SID_ALIGNRIGHT );
    1322           0 :     rBindings.Invalidate( SID_ALIGNCENTERHOR );
    1323           0 :     rBindings.Invalidate( SID_ALIGNBLOCK );
    1324           0 :     rBindings.Invalidate( SID_ALIGNTOP );
    1325           0 :     rBindings.Invalidate( SID_ALIGNBOTTOM );
    1326           0 :     rBindings.Invalidate( SID_ALIGNCENTERVER );
    1327           0 :     rBindings.Invalidate( SID_V_ALIGNCELL );
    1328           0 :     rBindings.Invalidate( SID_H_ALIGNCELL );
    1329             :     // pseudo slots for Format menu
    1330           0 :     rBindings.Invalidate( SID_ALIGN_ANY_HDEFAULT );
    1331           0 :     rBindings.Invalidate( SID_ALIGN_ANY_LEFT );
    1332           0 :     rBindings.Invalidate( SID_ALIGN_ANY_HCENTER );
    1333           0 :     rBindings.Invalidate( SID_ALIGN_ANY_RIGHT );
    1334           0 :     rBindings.Invalidate( SID_ALIGN_ANY_JUSTIFIED );
    1335           0 :     rBindings.Invalidate( SID_ALIGN_ANY_VDEFAULT );
    1336           0 :     rBindings.Invalidate( SID_ALIGN_ANY_TOP );
    1337           0 :     rBindings.Invalidate( SID_ALIGN_ANY_VCENTER );
    1338           0 :     rBindings.Invalidate( SID_ALIGN_ANY_BOTTOM );
    1339           0 :     rBindings.Update();
    1340             : 
    1341           0 :     if( ! rReq.IsAPI() )
    1342           0 :         rReq.Done();
    1343             : }
    1344             : 
    1345           0 : void ScFormatShell::ExecuteTextAttr( SfxRequest& rReq )
    1346             : {
    1347           0 :     ScTabViewShell* pTabViewShell       = GetViewData()->GetViewShell();
    1348           0 :     SfxBindings&            rBindings   = pViewData->GetBindings();
    1349           0 :     const ScPatternAttr*    pAttrs      = pTabViewShell->GetSelectionPattern();
    1350           0 :     const SfxItemSet*       pSet        = rReq.GetArgs();
    1351           0 :     sal_uInt16                  nSlot       = rReq.GetSlot();
    1352           0 :     SfxAllItemSet*          pNewSet = 0;
    1353             : 
    1354           0 :     pTabViewShell->HideListBox();                   // Autofilter-DropDown-Listbox
    1355             : 
    1356           0 :     if (  (nSlot == SID_ATTR_CHAR_WEIGHT)
    1357           0 :         ||(nSlot == SID_ATTR_CHAR_POSTURE)
    1358           0 :         ||(nSlot == SID_ATTR_CHAR_UNDERLINE)
    1359           0 :         ||(nSlot == SID_ULINE_VAL_NONE)
    1360           0 :         ||(nSlot == SID_ULINE_VAL_SINGLE)
    1361           0 :         ||(nSlot == SID_ULINE_VAL_DOUBLE)
    1362           0 :         ||(nSlot == SID_ULINE_VAL_DOTTED) )
    1363             :     {
    1364           0 :         pNewSet = new SfxAllItemSet( GetPool() );
    1365             : 
    1366           0 :         switch ( nSlot )
    1367             :         {
    1368             :             case SID_ATTR_CHAR_WEIGHT:
    1369             :             {
    1370             :                 // #i78017 establish the same behaviour as in Writer
    1371           0 :                 sal_uInt8 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
    1372             : 
    1373           0 :                 SfxItemPool& rPool = GetPool();
    1374           0 :                 SvxScriptSetItem aSetItem( nSlot, rPool );
    1375           0 :                 if ( pSet )
    1376           0 :                     aSetItem.PutItemForScriptType( nScript, pSet->Get( ATTR_FONT_WEIGHT ) );
    1377             :                 else
    1378             :                 {
    1379             :                     //  toggle manually
    1380             : 
    1381           0 :                     FontWeight eWeight = WEIGHT_BOLD;
    1382           0 :                     SvxScriptSetItem aOldSetItem( nSlot, rPool );
    1383           0 :                     aOldSetItem.GetItemSet().Put( pAttrs->GetItemSet(), false );
    1384           0 :                     const SfxPoolItem* pCore = aOldSetItem.GetItemOfScript( nScript );
    1385           0 :                     if ( pCore && static_cast<const SvxWeightItem*>(pCore)->GetWeight() == WEIGHT_BOLD )
    1386           0 :                         eWeight = WEIGHT_NORMAL;
    1387             : 
    1388           0 :                     aSetItem.PutItemForScriptType( nScript, SvxWeightItem( eWeight, ATTR_FONT_WEIGHT ) );
    1389             :                 }
    1390           0 :                 pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
    1391           0 :                 pNewSet->Put( aSetItem.GetItemSet(), false );
    1392             :             }
    1393           0 :             break;
    1394             : 
    1395             :             case SID_ATTR_CHAR_POSTURE:
    1396             :             {
    1397             :                 // #i78017 establish the same behaviour as in Writer
    1398           0 :                 sal_uInt8 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
    1399             : 
    1400           0 :                 SfxItemPool& rPool = GetPool();
    1401           0 :                 SvxScriptSetItem aSetItem( nSlot, rPool );
    1402           0 :                 if ( pSet )
    1403           0 :                     aSetItem.PutItemForScriptType( nScript, pSet->Get( ATTR_FONT_POSTURE ) );
    1404             :                 else
    1405             :                 {
    1406             :                     //  toggle manually
    1407             : 
    1408           0 :                     FontItalic eItalic = ITALIC_NORMAL;
    1409           0 :                     SvxScriptSetItem aOldSetItem( nSlot, rPool );
    1410           0 :                     aOldSetItem.GetItemSet().Put( pAttrs->GetItemSet(), false );
    1411           0 :                     const SfxPoolItem* pCore = aOldSetItem.GetItemOfScript( nScript );
    1412           0 :                     if ( pCore && static_cast<const SvxPostureItem*>(pCore)->GetPosture() == ITALIC_NORMAL )
    1413           0 :                         eItalic = ITALIC_NONE;
    1414             : 
    1415           0 :                     aSetItem.PutItemForScriptType( nScript, SvxPostureItem( eItalic, ATTR_FONT_POSTURE ) );
    1416             :                 }
    1417           0 :                 pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
    1418           0 :                 pNewSet->Put( aSetItem.GetItemSet(), false );
    1419             :             }
    1420           0 :             break;
    1421             : 
    1422             :             case SID_ATTR_CHAR_UNDERLINE:
    1423             :                 {
    1424             :                     FontUnderline       eUnderline;
    1425             : 
    1426           0 :                     if( pSet )
    1427             :                     {
    1428           0 :                         const SfxPoolItem& rUnderline = pSet->Get( ATTR_FONT_UNDERLINE );
    1429             : 
    1430           0 :                         if( rUnderline.ISA(SvxUnderlineItem) )
    1431             :                         {
    1432           0 :                             pTabViewShell->ApplyAttr( rUnderline );
    1433           0 :                             pNewSet->Put( rUnderline,rUnderline.Which() );
    1434             :                         }
    1435           0 :                         else if ( rUnderline.ISA(SvxTextLineItem) )
    1436             :                         {
    1437             :                             // #i106580# also allow SvxTextLineItem (base class of SvxUnderlineItem)
    1438           0 :                             const SvxTextLineItem& rTextLineItem = static_cast<const SvxTextLineItem&>(rUnderline);
    1439           0 :                             SvxUnderlineItem aNewItem( rTextLineItem.GetLineStyle(), rTextLineItem.Which() );
    1440           0 :                             aNewItem.SetColor( rTextLineItem.GetColor() );
    1441           0 :                             pTabViewShell->ApplyAttr( aNewItem );
    1442           0 :                             pNewSet->Put( aNewItem, aNewItem.Which() );
    1443             :                         }
    1444             :                     }
    1445             :                     else
    1446             :                     {
    1447             :                         SvxUnderlineItem aUnderline( static_cast<const SvxUnderlineItem&>(
    1448             :                                                         pAttrs->GetItem(
    1449           0 :                                                             ATTR_FONT_UNDERLINE ) ) );
    1450           0 :                         eUnderline = (UNDERLINE_NONE != aUnderline.GetLineStyle())
    1451             :                                     ? UNDERLINE_NONE
    1452           0 :                                     : UNDERLINE_SINGLE;
    1453           0 :                         aUnderline.SetLineStyle( eUnderline );
    1454           0 :                         pTabViewShell->ApplyAttr( aUnderline );
    1455           0 :                         pNewSet->Put( aUnderline,aUnderline.Which() );
    1456             :                     }
    1457             :                 }
    1458           0 :                 break;
    1459             : 
    1460             :             case SID_ULINE_VAL_NONE:
    1461           0 :                 pTabViewShell->ApplyAttr( SvxUnderlineItem( UNDERLINE_NONE, ATTR_FONT_UNDERLINE ) );
    1462           0 :                 break;
    1463             :             case SID_ULINE_VAL_SINGLE:      // Toggles
    1464             :             case SID_ULINE_VAL_DOUBLE:
    1465             :             case SID_ULINE_VAL_DOTTED:
    1466             :                 {
    1467             :                     FontUnderline eOld = static_cast<const SvxUnderlineItem&>(
    1468           0 :                                             pAttrs->GetItem(ATTR_FONT_UNDERLINE)).GetLineStyle();
    1469           0 :                     FontUnderline eNew = eOld;
    1470           0 :                     switch (nSlot)
    1471             :                     {
    1472             :                         case SID_ULINE_VAL_SINGLE:
    1473           0 :                             eNew = ( eOld == UNDERLINE_SINGLE ) ? UNDERLINE_NONE : UNDERLINE_SINGLE;
    1474           0 :                             break;
    1475             :                         case SID_ULINE_VAL_DOUBLE:
    1476           0 :                             eNew = ( eOld == UNDERLINE_DOUBLE ) ? UNDERLINE_NONE : UNDERLINE_DOUBLE;
    1477           0 :                             break;
    1478             :                         case SID_ULINE_VAL_DOTTED:
    1479           0 :                             eNew = ( eOld == UNDERLINE_DOTTED ) ? UNDERLINE_NONE : UNDERLINE_DOTTED;
    1480           0 :                             break;
    1481             :                     }
    1482           0 :                     pTabViewShell->ApplyAttr( SvxUnderlineItem( eNew, ATTR_FONT_UNDERLINE ) );
    1483             :                 }
    1484           0 :                 break;
    1485             : 
    1486             :             default:
    1487           0 :                 break;
    1488             :         }
    1489           0 :         rBindings.Invalidate( nSlot );
    1490             :     }
    1491             :     else
    1492             :     {
    1493             :         /*
    1494             :          * "Selbstgemachte" RadioButton-Funktionalitaet
    1495             :          * Beim Toggle gibt es den Standard-State, d.h. kein
    1496             :          * Button ist gedrueckt
    1497             :          */
    1498             : 
    1499           0 :         const SfxItemSet&        rAttrSet   = pTabViewShell->GetSelectionPattern()->GetItemSet();
    1500           0 :         const SfxPoolItem*       pItem       = NULL;
    1501           0 :         const SvxHorJustifyItem* pHorJustify = NULL;
    1502           0 :         const SvxVerJustifyItem* pVerJustify = NULL;
    1503           0 :         SvxCellHorJustify        eHorJustify = SVX_HOR_JUSTIFY_STANDARD;
    1504           0 :         SvxCellVerJustify        eVerJustify = SVX_VER_JUSTIFY_STANDARD;
    1505             : 
    1506           0 :         if (rAttrSet.GetItemState(ATTR_HOR_JUSTIFY, true,&pItem ) == SfxItemState::SET)
    1507             :         {
    1508           0 :             pHorJustify = static_cast<const SvxHorJustifyItem*>(pItem);
    1509           0 :             eHorJustify = SvxCellHorJustify( pHorJustify->GetValue() );
    1510             :         }
    1511           0 :         if (rAttrSet.GetItemState(ATTR_VER_JUSTIFY, true,&pItem ) == SfxItemState::SET)
    1512             :         {
    1513           0 :             pVerJustify = static_cast<const SvxVerJustifyItem*>(pItem);
    1514           0 :             eVerJustify = SvxCellVerJustify( pVerJustify->GetValue() );
    1515             :         }
    1516             : 
    1517           0 :         switch ( nSlot )
    1518             :         {
    1519             :             case SID_ALIGNLEFT:
    1520           0 :                 rReq.SetSlot( SID_H_ALIGNCELL );
    1521             :                 rReq.AppendItem( SvxHorJustifyItem(
    1522           0 :                     !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_LEFT) ?
    1523           0 :                     SVX_HOR_JUSTIFY_LEFT : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
    1524           0 :                 ExecuteSlot( rReq, GetInterface() );
    1525           0 :                 return;
    1526             :                 //break;
    1527             : 
    1528             :             case SID_ALIGNRIGHT:
    1529           0 :                 rReq.SetSlot( SID_H_ALIGNCELL );
    1530             :                 rReq.AppendItem( SvxHorJustifyItem(
    1531           0 :                     !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_RIGHT) ?
    1532           0 :                     SVX_HOR_JUSTIFY_RIGHT : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
    1533           0 :                 ExecuteSlot( rReq, GetInterface() );
    1534           0 :                 return;
    1535             :                 //break;
    1536             : 
    1537             :             case SID_ALIGNCENTERHOR:
    1538           0 :                 rReq.SetSlot( SID_H_ALIGNCELL );
    1539             :                 rReq.AppendItem( SvxHorJustifyItem(
    1540           0 :                     !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_CENTER) ?
    1541           0 :                     SVX_HOR_JUSTIFY_CENTER : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
    1542           0 :                 ExecuteSlot( rReq, GetInterface() );
    1543           0 :                 return;
    1544             :                 //break;
    1545             : 
    1546             :             case SID_ALIGNBLOCK:
    1547           0 :                 rReq.SetSlot( SID_H_ALIGNCELL );
    1548             :                 rReq.AppendItem( SvxHorJustifyItem(
    1549           0 :                     !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_BLOCK) ?
    1550           0 :                     SVX_HOR_JUSTIFY_BLOCK : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
    1551           0 :                 ExecuteSlot( rReq, GetInterface() );
    1552           0 :                 return;
    1553             :                 //break;
    1554             : 
    1555             :             case SID_ALIGNTOP:
    1556           0 :                 rReq.SetSlot( SID_V_ALIGNCELL );
    1557             :                 rReq.AppendItem( SvxVerJustifyItem(
    1558           0 :                     !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_TOP) ?
    1559           0 :                     SVX_VER_JUSTIFY_TOP : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
    1560           0 :                 ExecuteSlot( rReq, GetInterface() );
    1561           0 :                 return;
    1562             :                 //break;
    1563             : 
    1564             :             case SID_ALIGNBOTTOM:
    1565           0 :                 rReq.SetSlot( SID_V_ALIGNCELL );
    1566             :                 rReq.AppendItem( SvxVerJustifyItem(
    1567           0 :                     !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_BOTTOM) ?
    1568           0 :                     SVX_VER_JUSTIFY_BOTTOM : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
    1569           0 :                 ExecuteSlot( rReq, GetInterface() );
    1570           0 :                 return;
    1571             :                 //break;
    1572             : 
    1573             :             case SID_ALIGNCENTERVER:
    1574           0 :                 rReq.SetSlot( SID_V_ALIGNCELL );
    1575             :                 rReq.AppendItem( SvxVerJustifyItem(
    1576           0 :                     !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_CENTER) ?
    1577           0 :                     SVX_VER_JUSTIFY_CENTER : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
    1578           0 :                 ExecuteSlot( rReq, GetInterface() );
    1579           0 :                 return;
    1580             :                 //break;
    1581             : 
    1582             :             default:
    1583           0 :             break;
    1584             :         }
    1585             : 
    1586             :     }
    1587             : 
    1588           0 :     rBindings.Update();
    1589             : 
    1590           0 :     if( pNewSet )
    1591             :     {
    1592           0 :         rReq.Done( *pNewSet );
    1593           0 :         delete pNewSet;
    1594             :     }
    1595             :     else
    1596             :     {
    1597           0 :         rReq.Done();
    1598             :     }
    1599             : 
    1600             : }
    1601             : 
    1602         232 : void ScFormatShell::ExecuteAttr( SfxRequest& rReq )
    1603             : {
    1604         232 :     ScTabViewShell*     pTabViewShell = GetViewData()->GetViewShell();
    1605         232 :     SfxBindings&        rBindings = pViewData->GetBindings();
    1606         232 :     const SfxItemSet*   pNewAttrs = rReq.GetArgs();
    1607         232 :     sal_uInt16          nSlot = rReq.GetSlot();
    1608             : 
    1609         232 :     pTabViewShell->HideListBox();                   // Autofilter-DropDown-Listbox
    1610         232 :     ScDocument* pDoc = GetViewData()->GetDocument();
    1611         232 :     if ( !pNewAttrs )
    1612             :     {
    1613           0 :         switch ( nSlot )
    1614             :         {
    1615             :             case SID_ATTR_CHAR_ENDPREVIEW_FONT:
    1616             :             {
    1617           0 :                 pDoc->SetPreviewFont(NULL);
    1618           0 :                 pTabViewShell->UpdateSelectionArea( pDoc->GetPreviewSelection() );
    1619           0 :                 break;
    1620             :             }
    1621             :             case SID_ATTR_CHAR_COLOR:
    1622             :             case SID_ATTR_CHAR_FONT:
    1623             :             case SID_ATTR_CHAR_FONTHEIGHT:
    1624           0 :                 pTabViewShell->ExecuteCellFormatDlg(rReq, "font");       // wenn ToolBar vertikal
    1625           0 :                 break;
    1626             : 
    1627             :             case SID_BACKGROUND_COLOR:
    1628             :                 {
    1629             :                     SvxBrushItem aBrushItem( static_cast<const SvxBrushItem&>(
    1630           0 :                                      pTabViewShell->GetSelectionPattern()->GetItem( ATTR_BACKGROUND ) ) );
    1631           0 :                     aBrushItem.SetColor( COL_TRANSPARENT );
    1632           0 :                     pTabViewShell->ApplyAttr( aBrushItem );
    1633             :                 }
    1634           0 :                 break;
    1635             : 
    1636             :             case SID_ATTR_ALIGN_LINEBREAK:                  // ohne Parameter als Toggle
    1637             :                 {
    1638           0 :                     const ScPatternAttr* pAttrs = pTabViewShell->GetSelectionPattern();
    1639           0 :                     bool bOld = static_cast<const SfxBoolItem&>(pAttrs->GetItem(ATTR_LINEBREAK)).GetValue();
    1640           0 :                     SfxBoolItem aBreakItem( ATTR_LINEBREAK, !bOld );
    1641           0 :                     pTabViewShell->ApplyAttr( aBreakItem );
    1642             : 
    1643           0 :                     SfxAllItemSet aNewSet( GetPool() );
    1644           0 :                     aNewSet.Put( aBreakItem,aBreakItem.Which() );
    1645           0 :                     rReq.Done( aNewSet );
    1646             : 
    1647           0 :                     rBindings.Invalidate( nSlot );
    1648             :                 }
    1649           0 :                 break;
    1650             :         }
    1651             :     }
    1652             :     else
    1653             :     {
    1654         232 :         switch ( nSlot )
    1655             :         {
    1656             :             case SID_ATTR_CHAR_PREVIEW_FONT:
    1657             :             {
    1658         232 :                 SfxItemPool& rPool = GetPool();
    1659         232 :                 sal_uInt16 nWhich = rPool.GetWhich( nSlot );
    1660         232 :                 const SvxFontItem& rFont = static_cast<const SvxFontItem&>(pNewAttrs->Get( nWhich ));
    1661         232 :                 SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONT, rPool );
    1662         232 :                 sal_uInt8 nScript = pTabViewShell->GetSelectionScriptType();
    1663         232 :                 aSetItem.PutItemForScriptType( nScript, rFont );
    1664             : 
    1665         464 :                 ScMarkData aFuncMark( pViewData->GetMarkData() );
    1666         232 :                 ScViewUtil::UnmarkFiltered( aFuncMark, pDoc );
    1667         232 :                 pDoc->SetPreviewFont( aSetItem.GetItemSet().Clone() );
    1668         232 :                 aFuncMark.MarkToMulti();
    1669             : 
    1670         232 :                 if ( !aFuncMark.IsMarked() && !aFuncMark.IsMultiMarked() )
    1671             :                 {
    1672         230 :                     SCCOL nCol = pViewData->GetCurX();
    1673         230 :                     SCROW nRow = pViewData->GetCurY();
    1674         230 :                     SCTAB nTab = pViewData->GetTabNo();
    1675         230 :                     ScRange aRange( nCol, nRow, nTab );
    1676         230 :                     aFuncMark.SetMarkArea( aRange );
    1677             :                 }
    1678         232 :                 pDoc->SetPreviewSelection( aFuncMark );
    1679         232 :                 pTabViewShell->UpdateSelectionArea( aFuncMark );
    1680         464 :                 break;
    1681             :             }
    1682             :             case SID_ATTR_CHAR_OVERLINE:
    1683             :             case SID_ATTR_CHAR_STRIKEOUT:
    1684             :             case SID_ATTR_ALIGN_LINEBREAK:
    1685             :             case SID_ATTR_CHAR_COLOR:
    1686             :             case SID_ATTR_CHAR_CONTOUR:
    1687             :             case SID_ATTR_CHAR_SHADOWED:
    1688             :             case SID_ATTR_CHAR_RELIEF:
    1689             :             case SID_SCATTR_PROTECTION :
    1690           0 :                 pTabViewShell->ApplyAttr( pNewAttrs->Get( pNewAttrs->GetPool()->GetWhich( nSlot ) ) );
    1691           0 :                 rBindings.Invalidate( nSlot );
    1692           0 :                 rBindings.Update( nSlot );
    1693           0 :                 break;
    1694             : 
    1695             :             case SID_ATTR_CHAR_FONT:
    1696             :             case SID_ATTR_CHAR_FONTHEIGHT:
    1697             :                 {
    1698             :                     // #i78017 establish the same behaviour as in Writer
    1699           0 :                     sal_uInt8 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
    1700           0 :                     if (nSlot == SID_ATTR_CHAR_FONT)
    1701           0 :                         nScript = pTabViewShell->GetSelectionScriptType();
    1702             : 
    1703           0 :                     SfxItemPool& rPool = GetPool();
    1704           0 :                     SvxScriptSetItem aSetItem( nSlot, rPool );
    1705           0 :                     sal_uInt16 nWhich = rPool.GetWhich( nSlot );
    1706           0 :                     aSetItem.PutItemForScriptType( nScript, pNewAttrs->Get( nWhich ) );
    1707             : 
    1708           0 :                     pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
    1709             : 
    1710           0 :                     rBindings.Invalidate( nSlot );
    1711           0 :                     rBindings.Update( nSlot );
    1712             :                 }
    1713           0 :                 break;
    1714             : 
    1715             :             case SID_FRAME_LINESTYLE:
    1716             :                 {
    1717             :                     // Default-Linie aktualisieren
    1718             :                     const ::editeng::SvxBorderLine* pLine =
    1719             :                             static_cast<const SvxLineItem&>(
    1720           0 :                                 pNewAttrs->Get( SID_FRAME_LINESTYLE )).
    1721           0 :                                 GetLine();
    1722             : 
    1723           0 :                     if ( pLine )
    1724             :                     {
    1725           0 :                         ::editeng::SvxBorderLine* pDefLine = pTabViewShell->GetDefaultFrameLine();
    1726             : 
    1727           0 :                         if ( pDefLine )
    1728             :                         {
    1729             :                             pDefLine->SetBorderLineStyle(
    1730           0 :                                     pLine->GetBorderLineStyle());
    1731           0 :                             pDefLine->SetWidth( pLine->GetWidth( ) );
    1732           0 :                             pTabViewShell->SetSelectionFrameLines( pDefLine, false );
    1733             :                         }
    1734             :                         else
    1735             :                         {
    1736           0 :                             pTabViewShell->SetDefaultFrameLine( pLine );
    1737           0 :                             pTabViewShell->GetDefaultFrameLine()->SetColor( COL_BLACK );
    1738           0 :                             pTabViewShell->SetSelectionFrameLines( pLine, false );
    1739             :                         }
    1740             :                     }
    1741             :                     else
    1742             :                     {
    1743           0 :                         Color           aColorBlack( COL_BLACK );
    1744             :                         ::editeng::SvxBorderLine aDefLine( &aColorBlack, 20,
    1745           0 :                                 table::BorderLineStyle::SOLID );
    1746           0 :                         pTabViewShell->SetDefaultFrameLine( &aDefLine );
    1747           0 :                         pTabViewShell->SetSelectionFrameLines( NULL, false );
    1748             :                     }
    1749             :                 }
    1750           0 :                 break;
    1751             : 
    1752             :             case SID_FRAME_LINECOLOR:
    1753             :                 {
    1754           0 :                     ::editeng::SvxBorderLine*  pDefLine = pTabViewShell->GetDefaultFrameLine();
    1755             :                     const Color&    rColor = static_cast<const SvxColorItem&>(
    1756           0 :                                         pNewAttrs->Get( SID_FRAME_LINECOLOR )).
    1757           0 :                                             GetValue();
    1758             : 
    1759             :                     // Default-Linie aktualisieren
    1760           0 :                     if ( pDefLine )
    1761             :                     {
    1762           0 :                         pDefLine->SetColor( rColor );
    1763           0 :                         pTabViewShell->SetSelectionFrameLines( pDefLine, true );
    1764             :                     }
    1765             :                     else
    1766             :                     {
    1767             :                         ::editeng::SvxBorderLine aDefLine( &rColor, 20,
    1768           0 :                                 table::BorderLineStyle::SOLID );
    1769           0 :                         pTabViewShell->SetDefaultFrameLine( &aDefLine );
    1770           0 :                         pTabViewShell->SetSelectionFrameLines( &aDefLine, false );
    1771             :                     }
    1772             :                 }
    1773           0 :                 break;
    1774             : 
    1775             :             case SID_ATTR_BORDER_OUTER:
    1776             :             case SID_ATTR_BORDER:
    1777             :                 {
    1778           0 :                     ::editeng::SvxBorderLine*          pDefLine = pTabViewShell->GetDefaultFrameLine();
    1779           0 :                     const ScPatternAttr*    pOldAttrs = pTabViewShell->GetSelectionPattern();
    1780             :                     boost::scoped_ptr<SfxItemSet> pOldSet(
    1781             :                                                 new SfxItemSet(
    1782           0 :                                                         *(pDoc->GetPool()),
    1783             :                                                         ATTR_PATTERN_START,
    1784           0 :                                                         ATTR_PATTERN_END ));
    1785             :                     boost::scoped_ptr<SfxItemSet> pNewSet(
    1786             :                                                 new SfxItemSet(
    1787           0 :                                                         *(pDoc->GetPool()),
    1788             :                                                         ATTR_PATTERN_START,
    1789           0 :                                                         ATTR_PATTERN_END ));
    1790             :                     const SfxPoolItem&      rBorderAttr =
    1791           0 :                                                 pOldAttrs->GetItemSet().
    1792           0 :                                                     Get( ATTR_BORDER );
    1793             : 
    1794             :                     // Border-Items vom Controller auswerten:
    1795           0 :                     const SfxPoolItem* pItem = 0;
    1796             : 
    1797           0 :                     if ( pNewAttrs->GetItemState( ATTR_BORDER, true, &pItem )
    1798             :                          == SfxItemState::SET )
    1799             :                     {
    1800             :                         //  The SvxFrameToolBoxControl toolbox controller uses a default
    1801             :                         //  SvxBorderLine (all widths 0) to mark the lines that should be set.
    1802             :                         //  Macro recording uses a SvxBoxItem with the real values (OutWidth > 0)
    1803             :                         //  or NULL pointers for no lines.
    1804             :                         //  -> Substitute existing lines with pDefLine only if widths are 0.
    1805           0 :                         SvxBoxItem aBoxItem ( *static_cast<const SvxBoxItem*>(pItem ));
    1806           0 :                         if ( aBoxItem.GetTop() && aBoxItem.GetTop()->GetOutWidth() == 0 )
    1807           0 :                             aBoxItem.SetLine( pDefLine, BOX_LINE_TOP );
    1808           0 :                         if ( aBoxItem.GetBottom() && aBoxItem.GetBottom()->GetOutWidth() == 0 )
    1809           0 :                             aBoxItem.SetLine( pDefLine, BOX_LINE_BOTTOM );
    1810           0 :                         if ( aBoxItem.GetLeft() && aBoxItem.GetLeft()->GetOutWidth() == 0 )
    1811           0 :                             aBoxItem.SetLine( pDefLine, BOX_LINE_LEFT );
    1812           0 :                         if ( aBoxItem.GetRight() && aBoxItem.GetRight()->GetOutWidth() == 0 )
    1813           0 :                             aBoxItem.SetLine( pDefLine, BOX_LINE_RIGHT );
    1814           0 :                         pNewSet->Put( aBoxItem );
    1815           0 :                         rReq.AppendItem( aBoxItem );
    1816             :                     }
    1817             : 
    1818           0 :                     if ( pNewAttrs->GetItemState( ATTR_BORDER_INNER, true, &pItem )
    1819             :                          == SfxItemState::SET )
    1820             :                     {
    1821           0 :                         SvxBoxInfoItem aBoxInfoItem( *static_cast<const SvxBoxInfoItem*>(pItem) );
    1822           0 :                         if ( aBoxInfoItem.GetHori() && aBoxInfoItem.GetHori()->GetOutWidth() == 0 )
    1823           0 :                             aBoxInfoItem.SetLine( pDefLine, BOXINFO_LINE_HORI );
    1824           0 :                         if ( aBoxInfoItem.GetVert() && aBoxInfoItem.GetVert()->GetOutWidth() == 0 )
    1825           0 :                             aBoxInfoItem.SetLine( pDefLine, BOXINFO_LINE_VERT );
    1826           0 :                         pNewSet->Put( aBoxInfoItem );
    1827           0 :                         rReq.AppendItem( aBoxInfoItem );
    1828             :                     }
    1829             :                     else
    1830             :                     {
    1831           0 :                         SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
    1832           0 :                         aBoxInfoItem.SetLine( NULL, BOXINFO_LINE_HORI );
    1833           0 :                         aBoxInfoItem.SetLine( NULL, BOXINFO_LINE_VERT );
    1834           0 :                         pNewSet->Put( aBoxInfoItem );
    1835             :                     }
    1836             : 
    1837           0 :                     pOldSet->Put( rBorderAttr );
    1838           0 :                     pTabViewShell->ApplyAttributes( pNewSet.get(), pOldSet.get() );
    1839             :                 }
    1840           0 :                 break;
    1841             : 
    1842             :             case SID_ATTR_BORDER_DIAG_TLBR:
    1843             :             case SID_ATTR_BORDER_DIAG_BLTR:
    1844             :                 {
    1845           0 :                     const ScPatternAttr* pOldAttrs = pTabViewShell->GetSelectionPattern();
    1846           0 :                     boost::scoped_ptr<SfxItemSet> pOldSet(new SfxItemSet(pOldAttrs->GetItemSet()));
    1847           0 :                     boost::scoped_ptr<SfxItemSet> pNewSet(new SfxItemSet(pOldAttrs->GetItemSet()));
    1848           0 :                     const SfxPoolItem* pItem = 0;
    1849             : 
    1850           0 :                     if(SID_ATTR_BORDER_DIAG_TLBR == nSlot)
    1851             :                     {
    1852           0 :                         if(SfxItemState::SET == pNewAttrs->GetItemState(ATTR_BORDER_TLBR, true, &pItem))
    1853             :                         {
    1854           0 :                             SvxLineItem aItem(ATTR_BORDER_TLBR);
    1855           0 :                             aItem.SetLine(static_cast<const SvxLineItem&>(pNewAttrs->Get(ATTR_BORDER_TLBR)).GetLine());
    1856           0 :                             pNewSet->Put(aItem);
    1857           0 :                             rReq.AppendItem(aItem);
    1858           0 :                             pTabViewShell->ApplyAttributes(pNewSet.get(), pOldSet.get());
    1859             :                         }
    1860             :                     }
    1861             :                     else // if( nSlot == SID_ATTR_BORDER_DIAG_BLTR )
    1862             :                     {
    1863           0 :                         if(SfxItemState::SET == pNewAttrs->GetItemState(ATTR_BORDER_BLTR, true, &pItem ))
    1864             :                         {
    1865           0 :                             SvxLineItem aItem(ATTR_BORDER_BLTR);
    1866           0 :                             aItem.SetLine(static_cast<const SvxLineItem&>(pNewAttrs->Get(ATTR_BORDER_BLTR)).GetLine());
    1867           0 :                             pNewSet->Put(aItem);
    1868           0 :                             rReq.AppendItem(aItem);
    1869           0 :                             pTabViewShell->ApplyAttributes(pNewSet.get(), pOldSet.get());
    1870             :                         }
    1871             :                     }
    1872             : 
    1873           0 :                     rBindings.Invalidate(nSlot);
    1874             :                 }
    1875           0 :                 break;
    1876             : 
    1877             :             // ATTR_BACKGROUND (=SID_ATTR_BRUSH) muss ueber zwei IDs
    1878             :             // gesetzt werden:
    1879             :             case SID_BACKGROUND_COLOR:
    1880             :                 {
    1881             :                     const SvxColorItem  rNewColorItem = static_cast<const SvxColorItem&>(
    1882           0 :                                             pNewAttrs->Get( SID_BACKGROUND_COLOR ) );
    1883             : 
    1884             :                     SvxBrushItem        aBrushItem( static_cast<const SvxBrushItem&>(
    1885             :                                             pTabViewShell->GetSelectionPattern()->
    1886           0 :                                                 GetItem( ATTR_BACKGROUND ) ) );
    1887             : 
    1888           0 :                     aBrushItem.SetColor( rNewColorItem.GetValue() );
    1889             : 
    1890           0 :                     pTabViewShell->ApplyAttr( aBrushItem );
    1891             :                 }
    1892           0 :                 break;
    1893             : 
    1894             :                 case SID_ATTR_BRUSH:
    1895             :                 {
    1896             :                     SvxBrushItem        aBrushItem( static_cast<const SvxBrushItem&>(
    1897             :                                             pTabViewShell->GetSelectionPattern()->
    1898           0 :                                                 GetItem( ATTR_BACKGROUND ) ) );
    1899             :                     const SvxBrushItem& rNewBrushItem = static_cast<const SvxBrushItem&>(
    1900           0 :                                             pNewAttrs->Get( GetPool().GetWhich(nSlot) ) );
    1901           0 :                     aBrushItem.SetColor(rNewBrushItem.GetColor());
    1902           0 :                     pTabViewShell->ApplyAttr( aBrushItem );
    1903             :                 }
    1904           0 :                 break;
    1905             : 
    1906             :             case SID_ATTR_BORDER_SHADOW:
    1907             :                 {
    1908             :                     const SvxShadowItem& rNewShadowItem = static_cast<const SvxShadowItem&>(
    1909           0 :                                             pNewAttrs->Get( ATTR_SHADOW ) );
    1910           0 :                     pTabViewShell->ApplyAttr( rNewShadowItem );
    1911             :                 }
    1912           0 :                 break;
    1913             : 
    1914             :             default:
    1915           0 :             break;
    1916             :         }
    1917             : 
    1918         232 :         if( ! rReq.IsAPI() )
    1919         232 :             if( ! rReq.IsDone() )
    1920         232 :                 rReq.Done();
    1921             :     }
    1922         232 : }
    1923             : 
    1924        2103 : void ScFormatShell::GetAttrState( SfxItemSet& rSet )
    1925             : {
    1926        2103 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    1927        2103 :     const SfxItemSet&    rAttrSet   = pTabViewShell->GetSelectionPattern()->GetItemSet();
    1928             :     //const ::editeng::SvxBorderLine* pLine      = pTabViewShell->GetDefaultFrameLine();
    1929        2103 :     const SvxBrushItem&  rBrushItem = static_cast<const SvxBrushItem&>(rAttrSet.Get( ATTR_BACKGROUND ));
    1930        2103 :     SfxWhichIter aIter( rSet );
    1931        2103 :     sal_uInt16 nWhich = aIter.FirstWhich();
    1932             : 
    1933        2103 :     rSet.Put( rAttrSet, false );
    1934             : 
    1935             :     //  choose font info according to selection script type
    1936        2103 :     sal_uInt8 nScript = 0;      // GetSelectionScriptType never returns 0
    1937        2103 :     if ( rSet.GetItemState( ATTR_FONT ) != SfxItemState::UNKNOWN )
    1938             :     {
    1939         479 :         if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
    1940         479 :         ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT, nScript );
    1941             :     }
    1942        2103 :     if ( rSet.GetItemState( ATTR_FONT_HEIGHT ) != SfxItemState::UNKNOWN )
    1943             :     {
    1944         247 :         if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
    1945         247 :         ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_HEIGHT, nScript );
    1946             :     }
    1947             : 
    1948        6414 :     while ( nWhich )
    1949             :     {
    1950        2208 :         switch(nWhich)
    1951             :         {
    1952             :             case SID_BACKGROUND_COLOR:
    1953             :             {
    1954         247 :                 rSet.Put( SvxColorItem( rBrushItem.GetColor(), SID_BACKGROUND_COLOR ) );
    1955             : 
    1956         247 :                 if(SfxItemState::DONTCARE == rAttrSet.GetItemState(ATTR_BACKGROUND))
    1957             :                 {
    1958           0 :                     rSet.InvalidateItem(SID_BACKGROUND_COLOR);
    1959             :                 }
    1960             :             }
    1961         247 :             break;
    1962             :             case SID_FRAME_LINESTYLE:
    1963             :             case SID_FRAME_LINECOLOR:
    1964             :             {
    1965             :                 // handled together because both need the cell border information for decisions
    1966             :                 // rSet.Put( SvxColorItem( pLine ? pLine->GetColor() : Color(), SID_FRAME_LINECOLOR ) );
    1967         494 :                 Color aCol = 0;
    1968         494 :                 editeng::SvxBorderLine aLine(0,0,0,false);
    1969         494 :                 bool bCol = false;
    1970         494 :                 bool bColDisable = false, bStyleDisable = false;
    1971         494 :                 SvxBoxItem aBoxItem(ATTR_BORDER);
    1972         988 :                 SvxBoxInfoItem aInfoItem(ATTR_BORDER_INNER);
    1973             : 
    1974         494 :                 pTabViewShell->GetSelectionFrame(aBoxItem, aInfoItem);
    1975             : 
    1976         494 :                 if( aBoxItem.GetTop() )
    1977             :                 {
    1978           0 :                     bCol = true;
    1979           0 :                     aCol = aBoxItem.GetTop()->GetColor() ;
    1980           0 :                     aLine.SetColor(aCol);
    1981           0 :                     aLine.SetWidth( aBoxItem.GetTop()->GetWidth());
    1982           0 :                     aLine.SetBorderLineStyle( aBoxItem.GetTop()->GetBorderLineStyle());
    1983             :                 }
    1984             : 
    1985         494 :                 if( aBoxItem.GetBottom() )
    1986             :                 {
    1987           0 :                     if(!bCol)
    1988             :                     {
    1989           0 :                         bCol = true;
    1990           0 :                         aCol = aBoxItem.GetBottom()->GetColor() ;
    1991           0 :                         aLine.SetColor(aCol);
    1992           0 :                         aLine.SetWidth( aBoxItem.GetBottom()->GetWidth());
    1993           0 :                         aLine.SetBorderLineStyle( aBoxItem.GetBottom()->GetBorderLineStyle());
    1994             :                     }
    1995             :                     else
    1996             :                     {
    1997           0 :                         if(aCol != aBoxItem.GetBottom()->GetColor() )
    1998           0 :                             bColDisable = true;
    1999           0 :                         if(!( aLine == *(aBoxItem.GetBottom())) )
    2000           0 :                             bStyleDisable = true;
    2001             :                     }
    2002             :                 }
    2003             : 
    2004         494 :                 if( aBoxItem.GetLeft() )
    2005             :                 {
    2006           0 :                     if(!bCol)
    2007             :                     {
    2008           0 :                         bCol = true;
    2009           0 :                         aCol = aBoxItem.GetLeft()->GetColor() ;
    2010           0 :                         aLine.SetColor(aCol);
    2011           0 :                         aLine.SetWidth( aBoxItem.GetLeft()->GetWidth());
    2012           0 :                         aLine.SetBorderLineStyle( aBoxItem.GetLeft()->GetBorderLineStyle());
    2013             :                     }
    2014             :                     else
    2015             :                     {
    2016           0 :                         if(aCol != aBoxItem.GetLeft()->GetColor() )
    2017           0 :                             bColDisable = true;
    2018           0 :                         if(!( aLine == *(aBoxItem.GetLeft())) )
    2019           0 :                             bStyleDisable = true;
    2020             :                     }
    2021             :                 }
    2022             : 
    2023         494 :                 if( aBoxItem.GetRight() )
    2024             :                 {
    2025           0 :                     if(!bCol)
    2026             :                     {
    2027           0 :                         bCol = true;
    2028           0 :                         aCol = aBoxItem.GetRight()->GetColor() ;
    2029           0 :                         aLine.SetColor(aCol);
    2030           0 :                         aLine.SetWidth( aBoxItem.GetRight()->GetWidth());
    2031           0 :                         aLine.SetBorderLineStyle( aBoxItem.GetRight()->GetBorderLineStyle());
    2032             :                     }
    2033             :                     else
    2034             :                     {
    2035           0 :                         if(aCol != aBoxItem.GetRight()->GetColor() )
    2036           0 :                             bColDisable = true;
    2037           0 :                         if(!( aLine == *(aBoxItem.GetRight())) )
    2038           0 :                             bStyleDisable = true;
    2039             :                     }
    2040             :                 }
    2041             : 
    2042         494 :                 if( aInfoItem.GetVert())
    2043             :                 {
    2044           0 :                     if(!bCol)
    2045             :                     {
    2046           0 :                         bCol = true;
    2047           0 :                         aCol = aInfoItem.GetVert()->GetColor() ;
    2048           0 :                         aLine.SetColor(aCol);
    2049           0 :                         aLine.SetWidth( aInfoItem.GetVert()->GetWidth());
    2050           0 :                         aLine.SetBorderLineStyle( aInfoItem.GetVert()->GetBorderLineStyle());
    2051             :                     }
    2052             :                     else
    2053             :                     {
    2054           0 :                         if(aCol != aInfoItem.GetVert()->GetColor() )
    2055           0 :                             bColDisable = true;
    2056           0 :                         if(!( aLine == *(aInfoItem.GetVert())) )
    2057           0 :                             bStyleDisable = true;
    2058             :                     }
    2059             :                 }
    2060             : 
    2061         494 :                 if( aInfoItem.GetHori())
    2062             :                 {
    2063           0 :                     if(!bCol)
    2064             :                     {
    2065           0 :                         bCol = true;
    2066           0 :                         aCol = aInfoItem.GetHori()->GetColor() ;
    2067           0 :                         aLine.SetColor(aCol);
    2068           0 :                         aLine.SetWidth( aInfoItem.GetHori()->GetWidth());
    2069           0 :                         aLine.SetBorderLineStyle( aInfoItem.GetHori()->GetBorderLineStyle());
    2070             :                     }
    2071             :                     else
    2072             :                     {
    2073           0 :                         if(aCol != aInfoItem.GetHori()->GetColor() )
    2074           0 :                             bColDisable = true;
    2075           0 :                         if(!( aLine == *(aInfoItem.GetHori())) )
    2076           0 :                             bStyleDisable = true;
    2077             :                     }
    2078             :                 }
    2079             : 
    2080         988 :                 if( !aInfoItem.IsValid( VALID_VERT )
    2081         494 :                     || !aInfoItem.IsValid( VALID_HORI )
    2082         494 :                     || !aInfoItem.IsValid( VALID_LEFT )
    2083         494 :                     || !aInfoItem.IsValid( VALID_RIGHT )
    2084         494 :                     || !aInfoItem.IsValid( VALID_TOP )
    2085         988 :                     || !aInfoItem.IsValid( VALID_BOTTOM ) )
    2086             :                 {
    2087           0 :                     bColDisable = true;
    2088           0 :                     bStyleDisable = true;
    2089             :                 }
    2090             : 
    2091         494 :                 if(SID_FRAME_LINECOLOR == nWhich)
    2092             :                 {
    2093         247 :                     if(bColDisable) // if different lines have differernt colors
    2094             :                     {
    2095           0 :                         aCol = COL_TRANSPARENT;
    2096           0 :                         rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) );
    2097           0 :                         rSet.InvalidateItem(SID_FRAME_LINECOLOR);
    2098             :                     }
    2099         247 :                     else if( !bCol && !bColDisable) // if no line available
    2100             :                     {
    2101         247 :                         aCol = COL_AUTO;
    2102         247 :                         rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) );
    2103             :                     }
    2104             :                     else
    2105           0 :                         rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) );
    2106             :                 }
    2107             :                 else // if( nWhich == SID_FRAME_LINESTYLE)
    2108             :                 {
    2109         247 :                     if(bStyleDisable) // if have several lines but don't have same style
    2110             :                     {
    2111           0 :                         aLine.SetWidth( 1 );
    2112           0 :                         SvxLineItem aItem(SID_FRAME_LINESTYLE);
    2113           0 :                         aItem.SetLine(&aLine);
    2114           0 :                         rSet.Put( aItem );
    2115           0 :                         rSet.InvalidateItem(SID_FRAME_LINESTYLE);
    2116             :                     }
    2117             :                     else // all the lines have same style or no line availavle, use initial value (0,0,0,0)
    2118             :                     {
    2119         247 :                         SvxLineItem aItem(SID_FRAME_LINESTYLE);
    2120         247 :                         aItem.SetLine(&aLine);
    2121         247 :                         rSet.Put( aItem );
    2122             :                     }
    2123         494 :                 }
    2124             :             }
    2125         494 :             break;
    2126             :             case SID_ATTR_BRUSH:
    2127             :             {
    2128           0 :                 rSet.Put( rBrushItem, GetPool().GetWhich(nWhich) );
    2129             :             }
    2130           0 :             break;
    2131             :         }
    2132        2208 :         nWhich = aIter.NextWhich();
    2133             :     }
    2134             : 
    2135             :     // stuff for sidebar panels
    2136        2103 :     Invalidate(SID_ATTR_ALIGN_DEGREES);
    2137        2103 :     Invalidate(SID_ATTR_ALIGN_STACKED);
    2138        2103 : }
    2139             : 
    2140        2567 : void ScFormatShell::GetTextAttrState( SfxItemSet& rSet )
    2141             : {
    2142        2567 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    2143        2567 :     const SfxItemSet& rAttrSet  = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2144        2567 :     rSet.Put( rAttrSet, false ); // ItemStates mitkopieren
    2145             : 
    2146             :     //  choose font info according to selection script type
    2147        2567 :     sal_uInt8 nScript = 0;      // GetSelectionScriptType never returns 0
    2148        2567 :     if ( rSet.GetItemState( ATTR_FONT_WEIGHT ) != SfxItemState::UNKNOWN )
    2149             :     {
    2150         247 :         if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
    2151         247 :         ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_WEIGHT, nScript );
    2152             :     }
    2153        2567 :     if ( rSet.GetItemState( ATTR_FONT_POSTURE ) != SfxItemState::UNKNOWN )
    2154             :     {
    2155         247 :         if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
    2156         247 :         ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_POSTURE, nScript );
    2157             :     }
    2158             : 
    2159             :     SfxItemState eState;
    2160             : //  const SfxPoolItem* pItem;
    2161             : 
    2162             :     // eigene Kontrolle ueber RadioButton-Funktionalitaet:
    2163             : 
    2164             :     // Unterstreichung
    2165             : 
    2166        2567 :     eState = rAttrSet.GetItemState( ATTR_FONT_UNDERLINE, true );
    2167        2567 :     if ( eState == SfxItemState::DONTCARE )
    2168             :     {
    2169           0 :         rSet.InvalidateItem( SID_ULINE_VAL_NONE );
    2170           0 :         rSet.InvalidateItem( SID_ULINE_VAL_SINGLE );
    2171           0 :         rSet.InvalidateItem( SID_ULINE_VAL_DOUBLE );
    2172           0 :         rSet.InvalidateItem( SID_ULINE_VAL_DOTTED );
    2173             :     }
    2174             :     else
    2175             :     {
    2176             :         FontUnderline eUnderline = static_cast<const SvxUnderlineItem&>(
    2177        2567 :                     rAttrSet.Get(ATTR_FONT_UNDERLINE)).GetLineStyle();
    2178        2567 :         sal_uInt16 nId = SID_ULINE_VAL_NONE;
    2179        2567 :         switch (eUnderline)
    2180             :         {
    2181           0 :             case UNDERLINE_SINGLE:  nId = SID_ULINE_VAL_SINGLE; break;
    2182           0 :             case UNDERLINE_DOUBLE:  nId = SID_ULINE_VAL_DOUBLE; break;
    2183           0 :             case UNDERLINE_DOTTED:  nId = SID_ULINE_VAL_DOTTED; break;
    2184             :             default:
    2185        2567 :                 break;
    2186             :         }
    2187        2567 :         rSet.Put( SfxBoolItem( nId, true ) );
    2188             :     }
    2189             : 
    2190             :     // horizontale Ausrichtung
    2191             : 
    2192        2567 :     const SvxHorJustifyItem* pHorJustify = NULL;
    2193        2567 :     const SvxVerJustifyItem* pVerJustify = NULL;
    2194        2567 :     SvxCellVerJustify        eVerJustify = SVX_VER_JUSTIFY_STANDARD;
    2195        2567 :     sal_uInt16                   nWhich      = 0;
    2196        2567 :     bool                     bJustifyStd = false;
    2197        2567 :     SfxBoolItem              aBoolItem   ( 0, true );
    2198             : 
    2199             :     eState   = rAttrSet.GetItemState( ATTR_HOR_JUSTIFY, true,
    2200        2567 :                                         (const SfxPoolItem**)&pHorJustify );
    2201        2567 :     switch ( eState )
    2202             :     {
    2203             :         case SfxItemState::SET:
    2204             :             {
    2205          22 :                 switch ( SvxCellHorJustify( pHorJustify->GetValue() ) )
    2206             :                 {
    2207             :                     case SVX_HOR_JUSTIFY_STANDARD:
    2208           0 :                         break;
    2209             : 
    2210             :                     case SVX_HOR_JUSTIFY_LEFT:
    2211          22 :                         nWhich = SID_ALIGNLEFT;
    2212          22 :                         break;
    2213             : 
    2214             :                     case SVX_HOR_JUSTIFY_RIGHT:
    2215           0 :                         nWhich = SID_ALIGNRIGHT;
    2216           0 :                         break;
    2217             : 
    2218             :                     case SVX_HOR_JUSTIFY_CENTER:
    2219           0 :                         nWhich = SID_ALIGNCENTERHOR;
    2220           0 :                         break;
    2221             : 
    2222             :                     case SVX_HOR_JUSTIFY_BLOCK:
    2223           0 :                         nWhich = SID_ALIGNBLOCK;
    2224           0 :                         break;
    2225             : 
    2226             :                     case SVX_HOR_JUSTIFY_REPEAT:
    2227             :                     default:
    2228           0 :                         bJustifyStd = true;
    2229           0 :                         break;
    2230             :                 }
    2231             :             }
    2232          22 :             break;
    2233             : 
    2234             :         case SfxItemState::DONTCARE:
    2235           0 :             rSet.InvalidateItem( SID_ALIGNLEFT );
    2236           0 :             rSet.InvalidateItem( SID_ALIGNRIGHT );
    2237           0 :             rSet.InvalidateItem( SID_ALIGNCENTERHOR );
    2238           0 :             rSet.InvalidateItem( SID_ALIGNBLOCK );
    2239           0 :             break;
    2240             : 
    2241             :         default:
    2242        2545 :             bJustifyStd = true;
    2243        2545 :             break;
    2244             :     }
    2245             : 
    2246        2567 :     if ( nWhich )
    2247             :     {
    2248          22 :         aBoolItem.SetWhich( nWhich );
    2249          22 :         rSet.Put( aBoolItem );
    2250             :     }
    2251        2545 :     else if ( bJustifyStd )
    2252             :     {
    2253        2545 :         aBoolItem.SetValue( false );
    2254        2545 :         aBoolItem.SetWhich( SID_ALIGNLEFT );      rSet.Put( aBoolItem );
    2255        2545 :         aBoolItem.SetWhich( SID_ALIGNRIGHT );     rSet.Put( aBoolItem );
    2256        2545 :         aBoolItem.SetWhich( SID_ALIGNCENTERHOR ); rSet.Put( aBoolItem );
    2257        2545 :         aBoolItem.SetWhich( SID_ALIGNBLOCK );     rSet.Put( aBoolItem );
    2258        2545 :         bJustifyStd = false;
    2259             :     }
    2260             : 
    2261             :     // vertikale Ausrichtung
    2262             : 
    2263        2567 :     nWhich = 0;
    2264        2567 :     aBoolItem.SetValue( true );
    2265             : 
    2266             :     eState = rAttrSet.GetItemState( ATTR_VER_JUSTIFY, true,
    2267        2567 :                                     (const SfxPoolItem**)&pVerJustify );
    2268             : 
    2269        2567 :     switch ( eState )
    2270             :     {
    2271             :         case SfxItemState::SET:
    2272             :             {
    2273           0 :                 eVerJustify = SvxCellVerJustify( pVerJustify->GetValue() );
    2274             : 
    2275           0 :                 switch ( eVerJustify )
    2276             :                 {
    2277             :                     case SVX_VER_JUSTIFY_TOP:
    2278           0 :                         nWhich = SID_ALIGNTOP;
    2279           0 :                         break;
    2280             : 
    2281             :                     case SVX_VER_JUSTIFY_BOTTOM:
    2282           0 :                         nWhich = SID_ALIGNBOTTOM;
    2283           0 :                         break;
    2284             : 
    2285             :                     case SVX_VER_JUSTIFY_CENTER:
    2286           0 :                         nWhich = SID_ALIGNCENTERVER;
    2287           0 :                         break;
    2288             : 
    2289             :                     case SVX_VER_JUSTIFY_STANDARD:
    2290             :                     default:
    2291           0 :                         bJustifyStd = true;
    2292           0 :                         break;
    2293             :                 }
    2294             :             }
    2295           0 :             break;
    2296             : 
    2297             :         case SfxItemState::DONTCARE:
    2298           0 :             rSet.InvalidateItem( SID_ALIGNTOP );
    2299           0 :             rSet.InvalidateItem( SID_ALIGNBOTTOM );
    2300           0 :             rSet.InvalidateItem( SID_ALIGNCENTERVER );
    2301           0 :             break;
    2302             : 
    2303             :         default:
    2304        2567 :             bJustifyStd = true;
    2305        2567 :             break;
    2306             :     }
    2307             : 
    2308        2567 :     if ( nWhich )
    2309             :     {
    2310           0 :         aBoolItem.SetWhich( nWhich );
    2311           0 :         rSet.Put( aBoolItem );
    2312             :     }
    2313        2567 :     else if ( bJustifyStd )
    2314             :     {
    2315        2567 :         aBoolItem.SetValue( false );
    2316        2567 :         aBoolItem.SetWhich( SID_ALIGNTOP );       rSet.Put( aBoolItem );
    2317        2567 :         aBoolItem.SetWhich( SID_ALIGNBOTTOM );    rSet.Put( aBoolItem );
    2318        2567 :         aBoolItem.SetWhich( SID_ALIGNCENTERVER ); rSet.Put( aBoolItem );
    2319        2567 :     }
    2320        2567 : }
    2321             : 
    2322           0 : void ScFormatShell::GetBorderState( SfxItemSet& rSet )
    2323             : {
    2324           0 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    2325           0 :     SvxBoxItem      aBoxItem( ATTR_BORDER );
    2326           0 :     SvxBoxInfoItem  aInfoItem( ATTR_BORDER_INNER );
    2327             : 
    2328           0 :     pTabViewShell->GetSelectionFrame( aBoxItem, aInfoItem );
    2329             : 
    2330           0 :     if ( rSet.GetItemState( ATTR_BORDER ) != SfxItemState::UNKNOWN )
    2331           0 :         rSet.Put( aBoxItem );
    2332           0 :     if ( rSet.GetItemState( ATTR_BORDER_INNER ) != SfxItemState::UNKNOWN )
    2333           0 :         rSet.Put( aInfoItem );
    2334           0 : }
    2335             : 
    2336           0 : void ScFormatShell::GetAlignState( SfxItemSet& rSet )
    2337             : {
    2338           0 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    2339           0 :     const SfxItemSet& rAttrSet    = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2340           0 :     SfxWhichIter    aIter(rSet);
    2341           0 :     sal_uInt16          nWhich = aIter.FirstWhich();
    2342             : 
    2343           0 :     SvxCellHorJustify eHAlign = SVX_HOR_JUSTIFY_STANDARD;
    2344           0 :     bool bHasHAlign = rAttrSet.GetItemState( ATTR_HOR_JUSTIFY ) != SfxItemState::DONTCARE;
    2345           0 :     if( bHasHAlign )
    2346           0 :         eHAlign = (SvxCellHorJustify)static_cast<const SvxHorJustifyItem&>(rAttrSet.Get( ATTR_HOR_JUSTIFY )).GetValue();
    2347             : 
    2348           0 :     SvxCellVerJustify eVAlign = SVX_VER_JUSTIFY_STANDARD;
    2349           0 :     bool bHasVAlign = rAttrSet.GetItemState( ATTR_VER_JUSTIFY ) != SfxItemState::DONTCARE;
    2350           0 :     if( bHasVAlign )
    2351           0 :         eVAlign = (SvxCellVerJustify)static_cast<const SvxVerJustifyItem&>(rAttrSet.Get( ATTR_VER_JUSTIFY )).GetValue();
    2352             : 
    2353           0 :     while ( nWhich )
    2354             :     {
    2355           0 :         switch ( nWhich )
    2356             :         {
    2357             :             case SID_H_ALIGNCELL:
    2358           0 :                 if ( bHasHAlign )
    2359           0 :                     rSet.Put( SvxHorJustifyItem( eHAlign, nWhich ));
    2360           0 :             break;
    2361             :             case SID_V_ALIGNCELL:
    2362           0 :                 if ( bHasVAlign )
    2363           0 :                     rSet.Put( SvxVerJustifyItem( eVAlign, nWhich ));
    2364           0 :             break;
    2365             : 
    2366             :             // pseudo slots for Format menu
    2367             :             case SID_ALIGN_ANY_HDEFAULT:
    2368             :             case SID_ALIGN_ANY_LEFT:
    2369             :             case SID_ALIGN_ANY_HCENTER:
    2370             :             case SID_ALIGN_ANY_RIGHT:
    2371             :             case SID_ALIGN_ANY_JUSTIFIED:
    2372           0 :                 rSet.Put( SfxBoolItem( nWhich, bHasHAlign && (eHAlign == lclConvertSlotToHAlign( nWhich )) ) );
    2373           0 :             break;
    2374             :             case SID_ALIGN_ANY_VDEFAULT:
    2375             :             case SID_ALIGN_ANY_TOP:
    2376             :             case SID_ALIGN_ANY_VCENTER:
    2377             :             case SID_ALIGN_ANY_BOTTOM:
    2378           0 :                 rSet.Put( SfxBoolItem( nWhich, bHasVAlign && (eVAlign == lclConvertSlotToVAlign( nWhich )) ) );
    2379           0 :             break;
    2380             :         }
    2381           0 :         nWhich = aIter.NextWhich();
    2382           0 :     }
    2383           0 : }
    2384             : 
    2385         938 : void ScFormatShell::GetNumFormatState( SfxItemSet& rSet )
    2386             : {
    2387         938 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    2388         938 :     ScDocument* pDoc                = pViewData->GetDocument();
    2389         938 :     short nType                     = GetCurrentNumberFormatType();
    2390             : 
    2391         938 :     SfxWhichIter aIter(rSet);
    2392         938 :     sal_uInt16 nWhich = aIter.FirstWhich();
    2393        2844 :     while ( nWhich )
    2394             :     {
    2395         968 :         switch ( nWhich )
    2396             :         {
    2397             :             case SID_NUMBER_FORMAT:
    2398             :                 //{
    2399             :                 //  String aFormatCode;         // bleibt leer, wenn dont-care
    2400             :                 //
    2401             :                 //  const SfxItemSet& rAttrSet  = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2402             :                 //  if ( rAttrSet.GetItemState( ATTR_VALUE_FORMAT ) != SfxItemState::DONTCARE )
    2403             :                 //  {
    2404             :                 //      sal_uLong nNumberFormat = ((const SfxUInt32Item&)rAttrSet.Get(
    2405             :                 //                                  ATTR_VALUE_FORMAT )).GetValue();
    2406             :                 //
    2407             :                 //      SvNumberFormatter* pFormatter = rDoc.GetFormatTable();
    2408             :                 //      const SvNumberformat* pFormatEntry = pFormatter->GetEntry( nNumberFormat );
    2409             :                 //      if ( pFormatEntry )
    2410             :                 //          aFormatCode = pFormatEntry->GetFormatstring();
    2411             :                 //  }
    2412             :                 //
    2413             :                 //  rSet.Put( SfxStringItem( nWhich, aFormatCode ) );
    2414             :                 //}
    2415             : 
    2416             :                 // symphony version with format interpretation
    2417             :                 {
    2418           0 :                     const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2419             : 
    2420           0 :                     if(SfxItemState::DONTCARE != rAttrSet.GetItemState(ATTR_VALUE_FORMAT))
    2421             :                     {
    2422           0 :                         SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
    2423           0 :                         sal_uInt32 nNumberFormat = static_cast<const SfxUInt32Item&>(rAttrSet.Get(ATTR_VALUE_FORMAT)).GetValue();
    2424           0 :                         bool bThousand(false);
    2425           0 :                         bool bNegRed(false);
    2426           0 :                         sal_uInt16 nPrecision(0);
    2427           0 :                         sal_uInt16 nLeadZeroes(0);
    2428             : 
    2429           0 :                         pFormatter->GetFormatSpecialInfo(nNumberFormat,bThousand, bNegRed, nPrecision, nLeadZeroes);
    2430           0 :                         OUString aFormat;
    2431           0 :                         static OUString sBreak = ",";
    2432           0 :                         const OUString sThousand = OUString::number(static_cast<sal_Int32>(bThousand));
    2433           0 :                         const OUString sNegRed = OUString::number(static_cast<sal_Int32>(bNegRed));
    2434           0 :                         const OUString sPrecision = OUString::number(nPrecision);
    2435           0 :                         const OUString sLeadZeroes = OUString::number(nLeadZeroes);
    2436             : 
    2437           0 :                         aFormat += sThousand;
    2438           0 :                         aFormat += sBreak;
    2439           0 :                         aFormat += sNegRed;
    2440           0 :                         aFormat += sBreak;
    2441           0 :                         aFormat += sPrecision;
    2442           0 :                         aFormat += sBreak;
    2443           0 :                         aFormat += sLeadZeroes;
    2444           0 :                         aFormat += sBreak;
    2445             : 
    2446           0 :                         rSet.Put(SfxStringItem(nWhich, aFormat));
    2447             :                     }
    2448             :                     else
    2449             :                     {
    2450           0 :                         rSet.InvalidateItem( nWhich );
    2451             :                     }
    2452             :                 }
    2453           0 :                 break;
    2454             : 
    2455             :             case SID_NUMBER_TYPE_FORMAT:
    2456             :                 {
    2457           0 :                     sal_Int16 aFormatCode = -1;
    2458           0 :                     const SfxItemSet& rAttrSet  = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2459           0 :                     if ( rAttrSet.GetItemState( ATTR_VALUE_FORMAT ) >= SfxItemState::DEFAULT ) //Modify for more robust
    2460             :                     {
    2461           0 :                         SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
    2462           0 :                         sal_uInt32 nNumberFormat = pTabViewShell->GetSelectionPattern()->GetNumberFormat( pFormatter );
    2463           0 :                         const SvNumberformat* pFormatEntry = pFormatter->GetEntry( nNumberFormat );
    2464           0 :                         bool bStandard = false;
    2465             : 
    2466           0 :                         if ( pFormatEntry )
    2467             :                         {
    2468           0 :                             aFormatCode = pFormatEntry->GetType();
    2469           0 :                             bStandard = pFormatEntry->IsStandard();
    2470             :                         }
    2471             : 
    2472           0 :                         switch(aFormatCode)
    2473             :                         {
    2474             :                         case NUMBERFORMAT_NUMBER:
    2475             :                         case NUMBERFORMAT_NUMBER| NUMBERFORMAT_DEFINED:
    2476             :                             //use format code and standard format code to judge whether it is General,
    2477             :                             //if (nNumberFormat == nStandardNumberFormat)
    2478           0 :                             if (bStandard)
    2479           0 :                                 aFormatCode = 0;
    2480             :                             else
    2481           0 :                                 aFormatCode = 1;
    2482           0 :                             break;
    2483             :                         case NUMBERFORMAT_PERCENT:
    2484             :                         case NUMBERFORMAT_PERCENT| NUMBERFORMAT_DEFINED:
    2485           0 :                             aFormatCode = 2;
    2486           0 :                             break;
    2487             :                         case NUMBERFORMAT_CURRENCY:
    2488             :                         case NUMBERFORMAT_CURRENCY| NUMBERFORMAT_DEFINED:
    2489           0 :                             aFormatCode = 3;
    2490           0 :                             break;
    2491             :                         case NUMBERFORMAT_DATE:
    2492             :                         case NUMBERFORMAT_DATE| NUMBERFORMAT_DEFINED:
    2493             :                             //Add
    2494             :                         case NUMBERFORMAT_DATETIME:
    2495             :                         case NUMBERFORMAT_DATETIME | NUMBERFORMAT_DEFINED:
    2496           0 :                             aFormatCode = 4;
    2497           0 :                             break;
    2498             :                         case NUMBERFORMAT_TIME:
    2499             :                         case NUMBERFORMAT_TIME| NUMBERFORMAT_DEFINED:
    2500           0 :                             aFormatCode = 5;
    2501           0 :                             break;
    2502             :                         case NUMBERFORMAT_SCIENTIFIC:
    2503             :                         case NUMBERFORMAT_SCIENTIFIC| NUMBERFORMAT_DEFINED:
    2504           0 :                             aFormatCode = 6;
    2505           0 :                             break;
    2506             :                         case NUMBERFORMAT_FRACTION:
    2507             :                         case NUMBERFORMAT_FRACTION| NUMBERFORMAT_DEFINED:
    2508           0 :                             aFormatCode = 7;
    2509           0 :                             break;
    2510             :                         case NUMBERFORMAT_LOGICAL:
    2511             :                         case NUMBERFORMAT_LOGICAL| NUMBERFORMAT_DEFINED:
    2512           0 :                             aFormatCode = 8;
    2513           0 :                             break;
    2514             :                         case NUMBERFORMAT_TEXT:
    2515             :                         case NUMBERFORMAT_TEXT| NUMBERFORMAT_DEFINED:
    2516           0 :                             aFormatCode = 9;
    2517           0 :                             break;
    2518             :                         default:
    2519           0 :                             aFormatCode = -1;   //for more roburst
    2520             :                         }
    2521           0 :                         if( aFormatCode == -1 )
    2522           0 :                             rSet.InvalidateItem( nWhich );
    2523             :                         else
    2524           0 :                             rSet.Put( SfxInt16Item( nWhich, aFormatCode ) );
    2525             :                     }
    2526             :                     else
    2527             :                     {
    2528           0 :                         rSet.InvalidateItem( nWhich );
    2529             :                     }
    2530             : 
    2531             :                 }
    2532           0 :                 break;
    2533             :             case SID_NUMBER_SCIENTIFIC:
    2534         242 :                 rSet.Put( SfxBoolItem(nWhich, (nType & NUMBERFORMAT_SCIENTIFIC)) );
    2535         242 :                 break;
    2536             :             case SID_NUMBER_DATE:
    2537         242 :                 rSet.Put( SfxBoolItem(nWhich, (nType & NUMBERFORMAT_DATE)) );
    2538         242 :                 break;
    2539             :             case SID_NUMBER_CURRENCY:
    2540         242 :                 rSet.Put( SfxBoolItem(nWhich, (nType & NUMBERFORMAT_CURRENCY)) );
    2541         242 :                 break;
    2542             :             case SID_NUMBER_PERCENT:
    2543         242 :                 rSet.Put( SfxBoolItem(nWhich, (nType & NUMBERFORMAT_PERCENT)) );
    2544         242 :                 break;
    2545             :             case SID_NUMBER_TIME:
    2546           0 :                 rSet.Put( SfxBoolItem(nWhich, (nType & NUMBERFORMAT_TIME)) );
    2547           0 :                 break;
    2548             :         }
    2549         968 :         nWhich = aIter.NextWhich();
    2550         938 :     }
    2551         938 : }
    2552             : 
    2553           0 : void ScFormatShell::ExecuteTextDirection( SfxRequest& rReq )
    2554             : {
    2555           0 :     ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
    2556           0 :     pTabViewShell->HideListBox();               // Autofilter-DropDown-Listbox
    2557           0 :     bool bEditMode = false;
    2558           0 :     if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
    2559             :     {
    2560           0 :         bEditMode=true;
    2561           0 :         SC_MOD()->InputEnterHandler();
    2562           0 :         pTabViewShell->UpdateInputHandler();
    2563             :     }
    2564           0 :     sal_uInt16 nSlot = rReq.GetSlot();
    2565           0 :     switch( nSlot )
    2566             :     {
    2567             :         case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
    2568             :         case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
    2569             :         {
    2570           0 :             bool bVert = (nSlot == SID_TEXTDIRECTION_TOP_TO_BOTTOM);
    2571           0 :             ScPatternAttr aAttr( GetViewData()->GetDocument()->GetPool() );
    2572           0 :             SfxItemSet& rItemSet = aAttr.GetItemSet();
    2573           0 :             rItemSet.Put( SfxBoolItem( ATTR_STACKED, bVert ) );
    2574           0 :             rItemSet.Put( SfxBoolItem( ATTR_VERTICAL_ASIAN, bVert ) );
    2575           0 :             pTabViewShell->ApplySelectionPattern( aAttr );
    2576           0 :             pTabViewShell->AdjustBlockHeight();
    2577             :         }
    2578           0 :         break;
    2579             : 
    2580             :         case SID_ATTR_PARA_LEFT_TO_RIGHT:
    2581             :         case SID_ATTR_PARA_RIGHT_TO_LEFT:
    2582             :         {
    2583             :             SvxFrameDirection eDirection = ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT ) ?
    2584           0 :                                                 FRMDIR_HORI_LEFT_TOP : FRMDIR_HORI_RIGHT_TOP;
    2585           0 :             pTabViewShell->ApplyAttr( SvxFrameDirectionItem( eDirection, ATTR_WRITINGDIR ) );
    2586             :         }
    2587           0 :         break;
    2588             :     }
    2589           0 :     if (bEditMode)
    2590           0 :         SC_MOD()->SetInputMode( SC_INPUT_TABLE );
    2591           0 : }
    2592             : 
    2593        3322 : void ScFormatShell::GetTextDirectionState( SfxItemSet& rSet )
    2594             : {
    2595        3322 :     ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
    2596        3322 :     const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2597             : 
    2598             :     bool bVertDontCare =
    2599        6644 :         (rAttrSet.GetItemState( ATTR_VERTICAL_ASIAN ) == SfxItemState::DONTCARE) ||
    2600        6644 :         (rAttrSet.GetItemState( ATTR_STACKED ) == SfxItemState::DONTCARE);
    2601        6644 :     bool bLeftRight = !bVertDontCare &&
    2602        6644 :         !static_cast<const SfxBoolItem&>(rAttrSet.Get( ATTR_STACKED )).GetValue();
    2603        3322 :     bool bTopBottom = !bVertDontCare && !bLeftRight &&
    2604        3322 :         static_cast<const SfxBoolItem&>(rAttrSet.Get( ATTR_VERTICAL_ASIAN )).GetValue();
    2605             : 
    2606        3322 :     bool bBidiDontCare = (rAttrSet.GetItemState( ATTR_WRITINGDIR ) == SfxItemState::DONTCARE);
    2607        3322 :     EEHorizontalTextDirection eBidiDir = EE_HTEXTDIR_DEFAULT;
    2608        3322 :     if ( !bBidiDontCare )
    2609             :     {
    2610             :         SvxFrameDirection eCellDir = (SvxFrameDirection)static_cast<const SvxFrameDirectionItem&>(
    2611        3322 :                                         rAttrSet.Get( ATTR_WRITINGDIR )).GetValue();
    2612        3322 :         if ( eCellDir == FRMDIR_ENVIRONMENT )
    2613             :             eBidiDir = (EEHorizontalTextDirection)GetViewData()->GetDocument()->
    2614        3322 :                                 GetEditTextDirection( GetViewData()->GetTabNo() );
    2615           0 :         else if ( eCellDir == FRMDIR_HORI_RIGHT_TOP )
    2616           0 :             eBidiDir = EE_HTEXTDIR_R2L;
    2617             :         else
    2618           0 :             eBidiDir = EE_HTEXTDIR_L2R;
    2619             :     }
    2620             : 
    2621        3322 :     SvtLanguageOptions  aLangOpt;
    2622        3322 :     bool bDisableCTLFont = !aLangOpt.IsCTLFontEnabled();
    2623        3322 :     bool bDisableVerticalText = !aLangOpt.IsVerticalTextEnabled();
    2624             : 
    2625        6644 :     SfxWhichIter aIter( rSet );
    2626        3322 :     sal_uInt16 nWhich = aIter.FirstWhich();
    2627       10016 :     while( nWhich )
    2628             :     {
    2629        3372 :         switch( nWhich )
    2630             :         {
    2631             :             case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
    2632             :             case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
    2633         484 :                 if ( bDisableVerticalText )
    2634           0 :                     rSet.DisableItem( nWhich );
    2635             :                 else
    2636             :                 {
    2637         484 :                     if( bVertDontCare )
    2638           0 :                         rSet.InvalidateItem( nWhich );
    2639         484 :                     else if ( nWhich == SID_TEXTDIRECTION_LEFT_TO_RIGHT )
    2640         242 :                         rSet.Put( SfxBoolItem( nWhich, bLeftRight ) );
    2641             :                     else
    2642         242 :                         rSet.Put( SfxBoolItem( nWhich, bTopBottom ) );
    2643             :                 }
    2644         484 :             break;
    2645             : 
    2646             :             case SID_ATTR_PARA_LEFT_TO_RIGHT:
    2647             :             case SID_ATTR_PARA_RIGHT_TO_LEFT:
    2648        1212 :                 if ( bDisableCTLFont )
    2649           0 :                     rSet.DisableItem( nWhich );
    2650             :                 else
    2651             :                 {
    2652        1212 :                     if ( bTopBottom )
    2653           0 :                         rSet.DisableItem( nWhich );
    2654        1212 :                     else if ( bBidiDontCare )
    2655           0 :                         rSet.InvalidateItem( nWhich );
    2656        1212 :                     else if ( nWhich == SID_ATTR_PARA_LEFT_TO_RIGHT )
    2657         606 :                         rSet.Put( SfxBoolItem( nWhich, eBidiDir == EE_HTEXTDIR_L2R ) );
    2658             :                     else
    2659         606 :                         rSet.Put( SfxBoolItem( nWhich, eBidiDir == EE_HTEXTDIR_R2L ) );
    2660             :                 }
    2661             :         }
    2662        3372 :         nWhich = aIter.NextWhich();
    2663        3322 :     }
    2664        3322 : }
    2665             : 
    2666           0 : void ScFormatShell::ExecFormatPaintbrush( SfxRequest& rReq )
    2667             : {
    2668           0 :     ScViewFunc* pView = pViewData->GetView();
    2669           0 :     if ( pView->HasPaintBrush() )
    2670             :     {
    2671             :         // cancel paintbrush mode
    2672           0 :         pView->ResetBrushDocument();
    2673             :     }
    2674             :     else
    2675             :     {
    2676           0 :         bool bLock = false;
    2677           0 :         const SfxItemSet *pArgs = rReq.GetArgs();
    2678           0 :         if( pArgs && pArgs->Count() >= 1 )
    2679           0 :             bLock = static_cast<const SfxBoolItem&>(pArgs->Get(SID_FORMATPAINTBRUSH)).GetValue();
    2680             : 
    2681             :         // in case of multi selection, deselect all and use the cursor position
    2682           0 :         ScRange aDummy;
    2683           0 :         if ( pViewData->GetSimpleArea(aDummy) != SC_MARK_SIMPLE )
    2684           0 :             pView->Unmark();
    2685             : 
    2686           0 :         ScDocument* pBrushDoc = new ScDocument( SCDOCMODE_CLIP );
    2687           0 :         pView->CopyToClip( pBrushDoc, false, true );
    2688           0 :         pView->SetBrushDocument( pBrushDoc, bLock );
    2689             :     }
    2690           0 : }
    2691             : 
    2692         247 : void ScFormatShell::StateFormatPaintbrush( SfxItemSet& rSet )
    2693             : {
    2694         247 :     if ( pViewData->HasEditView( pViewData->GetActivePart() ) )
    2695           0 :         rSet.DisableItem( SID_FORMATPAINTBRUSH );
    2696             :     else
    2697         247 :         rSet.Put( SfxBoolItem( SID_FORMATPAINTBRUSH, pViewData->GetView()->HasPaintBrush() ) );
    2698         247 : }
    2699             : 
    2700         938 : short ScFormatShell::GetCurrentNumberFormatType()
    2701             : {
    2702         938 :     short nType = NUMBERFORMAT_ALL;
    2703         938 :     ScDocument* pDoc = GetViewData()->GetDocument();
    2704         938 :     ScMarkData aMark(GetViewData()->GetMarkData());
    2705         938 :     const SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
    2706         938 :     if (!pFormatter)
    2707           0 :         return nType;
    2708             : 
    2709             :     // TODO: Find out how to get a selected table range in case multiple tables
    2710             :     // are selected.  Currently we only check for the current active table.
    2711             : 
    2712         938 :     if ( aMark.IsMarked() || aMark.IsMultiMarked() )
    2713             :     {
    2714           8 :         aMark.MarkToMulti();
    2715           8 :         ScRange aRange;
    2716           8 :         aMark.GetMultiMarkArea(aRange);
    2717             : 
    2718           8 :         const ScMarkArray* pArray = aMark.GetArray();
    2719           8 :         if (!pArray)
    2720           0 :             return nType;
    2721             : 
    2722           8 :         short nComboType = NUMBERFORMAT_ALL;
    2723           8 :         bool bFirstItem = true;
    2724          56 :         for (SCCOL nCol = aRange.aStart.Col(); nCol <= aRange.aEnd.Col(); ++nCol)
    2725             :         {
    2726          48 :             const ScMarkArray& rColArray = pArray[nCol];
    2727          48 :             if (!rColArray.HasMarks())
    2728           0 :                 continue;
    2729             : 
    2730             :             SCROW nRow1, nRow2;
    2731          48 :             ScMarkArrayIter aMarkIter(&rColArray);
    2732         144 :             while (aMarkIter.Next(nRow1, nRow2))
    2733             :             {
    2734          48 :                 ScRange aColRange(nCol, nRow1, aRange.aStart.Tab());
    2735          48 :                 aColRange.aEnd.SetRow(nRow2);
    2736          48 :                 sal_uInt32 nNumFmt = pDoc->GetNumberFormat(aColRange);
    2737          48 :                 const SvNumberformat* pEntry = pFormatter->GetEntry(nNumFmt);
    2738          48 :                 if (!pEntry)
    2739           0 :                     return 0;
    2740             : 
    2741          48 :                 short nThisType = pEntry->GetType();
    2742          48 :                 if (bFirstItem)
    2743             :                 {
    2744           8 :                     bFirstItem = false;
    2745           8 :                     nComboType = nThisType;
    2746             :                 }
    2747          40 :                 else if (nComboType != nThisType)
    2748             :                     // mixed number format type.
    2749           0 :                     return NUMBERFORMAT_ALL;
    2750             :             }
    2751          48 :         }
    2752           8 :         nType = nComboType;
    2753             :     }
    2754             :     else
    2755             :     {
    2756             :         sal_uInt32 nNumFmt;
    2757         930 :         pDoc->GetNumberFormat( pViewData->GetCurX(), pViewData->GetCurY(),
    2758        1860 :                                pViewData->GetTabNo(), nNumFmt );
    2759         930 :         const SvNumberformat* pEntry = pFormatter->GetEntry( nNumFmt );
    2760         930 :         nType = pEntry ? pEntry->GetType() : 0;
    2761             :     }
    2762         938 :     return nType;
    2763         228 : }
    2764             : 
    2765             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10