LCOV - code coverage report
Current view: top level - sc/source/ui/view - formatsh.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 320 1413 22.6 %
Date: 2015-06-13 12:38:46 Functions: 19 32 59.4 %
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        4080 : TYPEINIT1( ScFormatShell, SfxShell );
     121             : 
     122         208 : SFX_IMPL_INTERFACE(ScFormatShell, SfxShell)
     123             : 
     124          52 : void ScFormatShell::InitInterface_Impl()
     125             : {
     126             :     GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT | SFX_VISIBILITY_STANDARD | SFX_VISIBILITY_SERVER,
     127          52 :                                             RID_OBJECTBAR_FORMAT);
     128          52 : }
     129             : 
     130        3572 : ScFormatShell::ScFormatShell(ScViewData* pData) :
     131        3572 :     SfxShell(pData->GetViewShell()),
     132        3572 :     pViewData(pData)
     133             : {
     134        3572 :     ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
     135             : 
     136        3572 :     SetPool( &pTabViewShell->GetPool() );
     137        3572 :     ::svl::IUndoManager* pMgr = pViewData->GetSfxDocShell()->GetUndoManager();
     138        3572 :     SetUndoManager( pMgr );
     139        3572 :     if ( !pViewData->GetDocument()->IsUndoEnabled() )
     140             :     {
     141           0 :         pMgr->SetMaxUndoActionCount( 0 );
     142             :     }
     143        3572 :     SetHelpId(HID_SCSHELL_FORMATSH);
     144        3572 :     SetName(OUString("Format"));
     145        3572 : }
     146             : 
     147        3569 : ScFormatShell::~ScFormatShell()
     148             : {
     149        3569 : }
     150             : 
     151         108 : void ScFormatShell::GetStyleState( SfxItemSet& rSet )
     152             : {
     153         108 :     ScDocument*             pDoc          = GetViewData()->GetDocument();
     154         108 :     ScTabViewShell*         pTabViewShell = GetViewData()->GetViewShell();
     155         108 :     SfxStyleSheetBasePool*  pStylePool    = pDoc->GetStyleSheetPool();
     156             : 
     157         108 :     bool bProtected = false;
     158         108 :     SCTAB nTabCount = pDoc->GetTableCount();
     159         253 :     for (SCTAB i=0; i<nTabCount; i++)
     160         145 :         if (pDoc->IsTabProtected(i))                // look after protected table
     161           0 :             bProtected = true;
     162             : 
     163         108 :     SfxWhichIter    aIter(rSet);
     164         108 :     sal_uInt16          nWhich = aIter.FirstWhich();
     165         108 :     sal_uInt16          nSlotId = 0;
     166             : 
     167         432 :     while ( nWhich )
     168             :     {
     169         216 :         nSlotId = SfxItemPool::IsWhich( nWhich )
     170           0 :                     ? GetPool().GetSlotId( nWhich )
     171         216 :                     : nWhich;
     172             : 
     173         216 :         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 = const_cast<SfxStyleSheet*>(
     183         108 :                                              pTabViewShell->GetStyleSheetFromMarked());
     184             : 
     185         108 :                 if ( pStyleSheet )
     186         108 :                     rSet.Put( SfxTemplateItem( nSlotId, pStyleSheet->GetName() ) );
     187             :                 else
     188           0 :                     rSet.Put( SfxTemplateItem( nSlotId, OUString() ) );
     189             :             }
     190         108 :             break;
     191             : 
     192             :             case SID_STYLE_FAMILY4:     // page style sheets
     193             :             {
     194         108 :                 SCTAB           nCurTab     = GetViewData()->GetTabNo();
     195         108 :                 OUString        aPageStyle  = pDoc->GetPageStyle( nCurTab );
     196             :                 SfxStyleSheet*  pStyleSheet = pStylePool ? static_cast<SfxStyleSheet*>(pStylePool->
     197         108 :                                     Find( aPageStyle, SFX_STYLE_FAMILY_PAGE )) : NULL;
     198             : 
     199         108 :                 if ( pStyleSheet )
     200         108 :                     rSet.Put( SfxTemplateItem( nSlotId, aPageStyle ) );
     201             :                 else
     202           0 :                     rSet.Put( SfxTemplateItem( nSlotId, OUString() ) );
     203             :             }
     204         108 :             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         216 :         nWhich = aIter.NextWhich();
     247         108 :     }
     248         108 : }
     249             : 
     250        3224 : void ScFormatShell::ExecuteStyle( SfxRequest& rReq )
     251             : {
     252             :     // in case of vertical toolbar
     253        3224 :     if ( !rReq.GetArgs() )
     254             :     {
     255           0 :         pViewData->GetDispatcher().Execute( SID_STYLE_DESIGNER, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD );
     256        3224 :         return;
     257             :     }
     258             : 
     259        3224 :     SfxBindings&        rBindings   = pViewData->GetBindings();
     260        3224 :     const SfxItemSet*   pArgs       = rReq.GetArgs();
     261        3224 :     const sal_uInt16        nSlotId     = rReq.GetSlot();
     262        3224 :     const SCTAB         nCurTab     = GetViewData()->GetTabNo();
     263        3224 :     ScDocShell*         pDocSh      = GetViewData()->GetDocShell();
     264        3224 :     ScTabViewShell*     pTabViewShell= GetViewData()->GetViewShell();
     265        3224 :     ScDocument&         rDoc        = pDocSh->GetDocument();
     266        3224 :     ScMarkData&         rMark       = GetViewData()->GetMarkData();
     267        3224 :     ScModule*           pScMod      = SC_MOD();
     268        3224 :     OUString            aRefName;
     269        3224 :     bool                bUndo       = rDoc.IsUndoEnabled();
     270        3224 :     SfxStyleSheetBasePool*  pStylePool  = rDoc.GetStyleSheetPool();
     271             : 
     272        3224 :     if ( (nSlotId == SID_STYLE_PREVIEW)
     273        3224 :         || (nSlotId ==  SID_STYLE_END_PREVIEW) )
     274             :     {
     275        3224 :         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        3224 :             ScMarkData aPreviewMark( rDoc.GetPreviewSelection());
     321        3224 :             if (aPreviewMark.IsMarked() || aPreviewMark.IsMultiMarked())
     322             :             {
     323           0 :                 ScPatternAttr aAttr( *rDoc.GetSelectionPattern( aPreviewMark ) );
     324           0 :                 if ( ScStyleSheet* pPreviewStyle = rDoc.GetPreviewCellStyle() )
     325           0 :                     aAttr.SetStyleSheet( pPreviewStyle );
     326           0 :                 rDoc.SetPreviewCellStyle(NULL);
     327             : 
     328           0 :                 SfxItemSet aItemSet( GetPool() );
     329             : 
     330           0 :                 ScPatternAttr aNewAttrs( GetViewData()->GetDocument()->GetPool() );
     331           0 :                 SfxItemSet& rNewSet = aNewAttrs.GetItemSet();
     332           0 :                 rNewSet.Put( aItemSet, false );
     333           0 :                 rDoc.ApplySelectionPattern( aNewAttrs, aPreviewMark );
     334           0 :                 pTabViewShell->UpdateSelectionArea( aPreviewMark, &aAttr );
     335        3224 :             }
     336        3224 :         }
     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 == "CellStyles")
     365           0 :                 eFamily = SFX_STYLE_FAMILY_PARA;
     366           0 :             else if (sFamily == "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(PointerStyle::Fill) );
     469           0 :                     rReq.Done();
     470             :                 }
     471             :                 else
     472             :                 {
     473           0 :                     pScMod->SetWaterCan( false );
     474           0 :                     pTabViewShell->SetActivePointer( Pointer(PointerStyle::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 = const_cast<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 = const_cast<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 :                                 ScTabViewShell::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             :                             ScTabViewShell::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        3224 :     }
     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( css::util::NumberFormat::NUMBER, 4 );       // Standard+4 = #.##0,00
    1025           0 :             rReq.Done();
    1026           0 :             break;
    1027             :         case SID_NUMBER_SCIENTIFIC:
    1028           0 :             if ((nType & css::util::NumberFormat::SCIENTIFIC))
    1029           0 :                 pTabViewShell->SetNumberFormat( css::util::NumberFormat::NUMBER );
    1030             :             else
    1031           0 :                 pTabViewShell->SetNumberFormat( css::util::NumberFormat::SCIENTIFIC );
    1032           0 :             aSet.Put( SfxBoolItem(nSlot, !(nType & css::util::NumberFormat::SCIENTIFIC)) );
    1033           0 :             rBindings.Invalidate( nSlot );
    1034           0 :             rReq.Done();
    1035           0 :             break;
    1036             :         case SID_NUMBER_DATE:
    1037           0 :             if ((nType & css::util::NumberFormat::DATE))
    1038           0 :                 pTabViewShell->SetNumberFormat( css::util::NumberFormat::NUMBER );
    1039             :             else
    1040           0 :                 pTabViewShell->SetNumberFormat( css::util::NumberFormat::DATE );
    1041           0 :             aSet.Put( SfxBoolItem(nSlot, !(nType & css::util::NumberFormat::DATE)) );
    1042           0 :             rBindings.Invalidate( nSlot );
    1043           0 :             rReq.Done();
    1044           0 :             break;
    1045             :         case SID_NUMBER_TIME:
    1046           0 :             if ((nType & css::util::NumberFormat::TIME))
    1047           0 :                 pTabViewShell->SetNumberFormat( css::util::NumberFormat::NUMBER );
    1048             :             else
    1049           0 :                 pTabViewShell->SetNumberFormat( css::util::NumberFormat::TIME );
    1050           0 :             aSet.Put( SfxBoolItem(nSlot, !(nType & css::util::NumberFormat::TIME)) );
    1051           0 :             rBindings.Invalidate( nSlot );
    1052           0 :             rReq.Done();
    1053           0 :             break;
    1054             :         case SID_NUMBER_CURRENCY:
    1055           0 :             if ((nType & css::util::NumberFormat::CURRENCY))
    1056           0 :                 pTabViewShell->SetNumberFormat( css::util::NumberFormat::NUMBER );
    1057             :             else
    1058           0 :                 pTabViewShell->SetNumberFormat( css::util::NumberFormat::CURRENCY );
    1059           0 :             aSet.Put( SfxBoolItem(nSlot, !(nType & css::util::NumberFormat::CURRENCY)) );
    1060           0 :             rBindings.Invalidate( nSlot );
    1061           0 :             rReq.Done();
    1062           0 :             break;
    1063             :         case SID_NUMBER_PERCENT:
    1064           0 :             if ((nType & css::util::NumberFormat::PERCENT))
    1065           0 :                 pTabViewShell->SetNumberFormat( css::util::NumberFormat::NUMBER );
    1066             :             else
    1067           0 :                 pTabViewShell->SetNumberFormat( css::util::NumberFormat::PERCENT );
    1068           0 :             aSet.Put( SfxBoolItem(nSlot, !(nType & css::util::NumberFormat::PERCENT)) );
    1069           0 :             rBindings.Invalidate( nSlot );
    1070           0 :             rReq.Done();
    1071           0 :             break;
    1072             :         case SID_NUMBER_STANDARD:
    1073           0 :             pTabViewShell->SetNumberFormat( css::util::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/SCIENTIFIC
    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 css::util::NumberFormat::ALL:
    1120             :                 case css::util::NumberFormat::NUMBER:
    1121             :                 case css::util::NumberFormat::NUMBER| css::util::NumberFormat::DEFINED:
    1122             :                 case css::util::NumberFormat::PERCENT:
    1123             :                 case css::util::NumberFormat::PERCENT| css::util::NumberFormat::DEFINED:
    1124             :                 case css::util::NumberFormat::CURRENCY:
    1125             :                 case css::util::NumberFormat::CURRENCY|css::util::NumberFormat::DEFINED:
    1126             :                 case css::util::NumberFormat::SCIENTIFIC:
    1127             :                 case css::util::NumberFormat::SCIENTIFIC|css::util::NumberFormat::DEFINED:
    1128           0 :                     eType = 0;
    1129           0 :                     break;
    1130             :                 default:
    1131           0 :                     eType =-1;
    1132             :                 }
    1133             : 
    1134           0 :                 if(SfxItemState::SET == pReqArgs->GetItemState(nSlot, true, &pItem) && eType != -1)
    1135             :                 {
    1136           0 :                     OUString aCode = static_cast<const SfxStringItem*>(pItem)->GetValue();
    1137           0 :                     sal_uInt16 aLen = aCode.getLength();
    1138           0 :                     OUString* sFormat = new OUString[4];
    1139           0 :                     OUString sTmpStr = "";
    1140           0 :                     sal_uInt16 nCount(0);
    1141           0 :                     sal_uInt16 nStrCount(0);
    1142             : 
    1143           0 :                     while(nCount < aLen)
    1144             :                     {
    1145           0 :                         sal_Unicode cChar = aCode[nCount];
    1146             : 
    1147           0 :                         if(cChar == ',')
    1148             :                         {
    1149           0 :                             sFormat[nStrCount] = sTmpStr;
    1150           0 :                             sTmpStr.clear();
    1151           0 :                             nStrCount++;
    1152             :                         }
    1153             :                         else
    1154             :                         {
    1155           0 :                             sTmpStr += OUString(cChar);
    1156             :                         }
    1157             : 
    1158           0 :                         nCount++;
    1159             : 
    1160           0 :                         if(nStrCount > 3)
    1161           0 :                             break;
    1162             :                     }
    1163             : 
    1164           0 :                     const bool bThousand = (bool)sFormat[0].toInt32();
    1165           0 :                     const bool bNegRed = (bool)sFormat[1].toInt32();
    1166           0 :                     const sal_uInt16 nPrecision = (sal_uInt16)sFormat[2].toInt32();
    1167           0 :                     const sal_uInt16 nLeadZeroes = (sal_uInt16)sFormat[3].toInt32();
    1168             : 
    1169           0 :                     aCode = pFormatter->GenerateFormat(
    1170             :                         nCurrentNumberFormat,//modify
    1171             :                         eLanguage,
    1172             :                         bThousand,
    1173             :                         bNegRed,
    1174             :                         nPrecision,
    1175           0 :                         nLeadZeroes);
    1176           0 :                     pTabViewShell->SetNumFmtByStr(aCode);
    1177           0 :                     delete[] sFormat;
    1178             :                 }
    1179             :             }
    1180           0 :             break;
    1181             : 
    1182             :         case SID_ATTR_NUMBERFORMAT_VALUE:
    1183           0 :             if ( pReqArgs )
    1184             :             {
    1185             :                 const SfxPoolItem* pItem;
    1186           0 :                 if ( pReqArgs->GetItemState( ATTR_VALUE_FORMAT, true, &pItem ) == SfxItemState::SET )
    1187             :                 {
    1188             :                     // We have to accomplish this using ApplyAttributes()
    1189             :                     // because we also need the language information to be
    1190             :                     // considered.
    1191             :                     const SfxItemSet& rOldSet =
    1192           0 :                         pTabViewShell->GetSelectionPattern()->GetItemSet();
    1193           0 :                     SfxItemPool* pDocPool = GetViewData()->GetDocument()->GetPool();
    1194           0 :                     SfxItemSet aNewSet( *pDocPool, ATTR_PATTERN_START, ATTR_PATTERN_END );
    1195           0 :                     aNewSet.Put( *pItem );
    1196           0 :                     pTabViewShell->ApplyAttributes( &aNewSet, &rOldSet, true );
    1197             :                 }
    1198             :             }
    1199           0 :             break;
    1200             : 
    1201             :         case SID_NUMBER_TYPE_FORMAT:
    1202           0 :             if ( pReqArgs )
    1203             :             {
    1204             :                 const SfxPoolItem* pItem;
    1205           0 :                 if ( pReqArgs->GetItemState( nSlot, true, &pItem ) == SfxItemState::SET )
    1206             :                 {
    1207           0 :                     sal_uInt16 nFormat = static_cast<const SfxInt16Item *>(pItem)->GetValue();
    1208           0 :                     switch(nFormat)
    1209             :                     {
    1210             :                     case 0:
    1211           0 :                         pTabViewShell->SetNumberFormat( css::util::NumberFormat::NUMBER); //Modify
    1212           0 :                         break;
    1213             :                     case 1:
    1214           0 :                         pTabViewShell->SetNumberFormat( css::util::NumberFormat::NUMBER, 2 ); //Modify
    1215           0 :                         break;
    1216             :                     case 2:
    1217           0 :                         pTabViewShell->SetNumberFormat( css::util::NumberFormat::PERCENT );
    1218           0 :                         break;
    1219             :                     case 3:
    1220           0 :                         pTabViewShell->SetNumberFormat( css::util::NumberFormat::CURRENCY );
    1221           0 :                         break;
    1222             :                     case 4:
    1223           0 :                         pTabViewShell->SetNumberFormat( css::util::NumberFormat::DATE );
    1224           0 :                         break;
    1225             :                     case 5:
    1226           0 :                         pTabViewShell->SetNumberFormat( css::util::NumberFormat::TIME );
    1227           0 :                         break;
    1228             :                     case 6:
    1229           0 :                         pTabViewShell->SetNumberFormat( css::util::NumberFormat::SCIENTIFIC );
    1230           0 :                         break;
    1231             :                     case 7:
    1232           0 :                         pTabViewShell->SetNumberFormat( css::util::NumberFormat::FRACTION );
    1233           0 :                         break;
    1234             :                     case 8:
    1235           0 :                         pTabViewShell->SetNumberFormat( css::util::NumberFormat::LOGICAL );
    1236           0 :                         break;
    1237             :                     case 9:
    1238           0 :                         pTabViewShell->SetNumberFormat( css::util::NumberFormat::TEXT );
    1239           0 :                         break;
    1240             :                     default:
    1241             :                         ;
    1242             :                     }
    1243           0 :                     rReq.Done();
    1244             :                 }
    1245             :             }
    1246           0 :             break;
    1247             : 
    1248             :         default:
    1249             :             OSL_FAIL("falscher Slot bei ExecuteEdit");
    1250           0 :             break;
    1251           0 :     }
    1252           0 : }
    1253             : 
    1254           0 : void ScFormatShell::ExecuteAlignment( SfxRequest& rReq )
    1255             : {
    1256           0 :     ScTabViewShell* pTabViewShell       = GetViewData()->GetViewShell();
    1257           0 :     SfxBindings&            rBindings   = pViewData->GetBindings();
    1258           0 :     const SfxItemSet*       pSet        = rReq.GetArgs();
    1259           0 :     sal_uInt16                  nSlot       = rReq.GetSlot();
    1260             : 
    1261           0 :     pTabViewShell->HideListBox();   // Autofilter-DropDown-Listbox
    1262             : 
    1263           0 :     switch( nSlot )
    1264             :     {
    1265             :         // pseudo slots for Format menu
    1266             :         case SID_ALIGN_ANY_HDEFAULT:
    1267             :         case SID_ALIGN_ANY_LEFT:
    1268             :         case SID_ALIGN_ANY_HCENTER:
    1269             :         case SID_ALIGN_ANY_RIGHT:
    1270             :         case SID_ALIGN_ANY_JUSTIFIED:
    1271           0 :             pTabViewShell->ApplyAttr( SvxHorJustifyItem( lclConvertSlotToHAlign( nSlot ), ATTR_HOR_JUSTIFY ) );
    1272           0 :         break;
    1273             :         case SID_ALIGN_ANY_VDEFAULT:
    1274             :         case SID_ALIGN_ANY_TOP:
    1275             :         case SID_ALIGN_ANY_VCENTER:
    1276             :         case SID_ALIGN_ANY_BOTTOM:
    1277           0 :             pTabViewShell->ApplyAttr( SvxVerJustifyItem( lclConvertSlotToVAlign( nSlot ), ATTR_VER_JUSTIFY ) );
    1278           0 :         break;
    1279             : 
    1280             :         default:
    1281           0 :             if( pSet )
    1282             :             {
    1283           0 :                 const SfxPoolItem* pItem = NULL;
    1284           0 :                 if( pSet->GetItemState(GetPool().GetWhich(nSlot), true, &pItem  ) == SfxItemState::SET )
    1285             :                 {
    1286             : 
    1287           0 :                     switch ( nSlot )
    1288             :                     {
    1289             :                         case SID_ATTR_ALIGN_HOR_JUSTIFY:
    1290             :                         case SID_ATTR_ALIGN_VER_JUSTIFY:
    1291             :                         case SID_ATTR_ALIGN_INDENT:
    1292             :                         case SID_ATTR_ALIGN_HYPHENATION:
    1293             :                         case SID_ATTR_ALIGN_DEGREES:
    1294             :                         case SID_ATTR_ALIGN_LOCKPOS:
    1295             :                         case SID_ATTR_ALIGN_MARGIN:
    1296             :                         case SID_ATTR_ALIGN_STACKED:
    1297           0 :                             pTabViewShell->ApplyAttr( *pItem );
    1298           0 :                         break;
    1299             : 
    1300             :                         case SID_H_ALIGNCELL:
    1301             :                         {
    1302           0 :                             SvxCellHorJustify eJust = (SvxCellHorJustify)static_cast<const SvxHorJustifyItem*>(pItem)->GetValue();
    1303             :                             // #i78476# update alignment of text in cell edit mode
    1304           0 :                             pTabViewShell->UpdateInputHandlerCellAdjust( eJust );
    1305           0 :                             pTabViewShell->ApplyAttr( SvxHorJustifyItem( eJust, ATTR_HOR_JUSTIFY ) );
    1306             :                         }
    1307           0 :                         break;
    1308             :                         case SID_V_ALIGNCELL:
    1309           0 :                             pTabViewShell->ApplyAttr( SvxVerJustifyItem( (SvxCellVerJustify)static_cast<const SvxVerJustifyItem*>(pItem)->GetValue(), ATTR_VER_JUSTIFY ) );
    1310           0 :                         break;
    1311             :                         default:
    1312             :                             OSL_FAIL( "ExecuteAlignment: invalid slot" );
    1313           0 :                             return;
    1314             :                     }
    1315             :                 }
    1316             :             }
    1317             :     }
    1318           0 :     rBindings.Invalidate( SID_ATTR_PARA_ADJUST_LEFT );
    1319           0 :     rBindings.Invalidate( SID_ATTR_PARA_ADJUST_RIGHT );
    1320           0 :     rBindings.Invalidate( SID_ATTR_PARA_ADJUST_BLOCK );
    1321           0 :     rBindings.Invalidate( SID_ATTR_PARA_ADJUST_CENTER);
    1322           0 :     rBindings.Invalidate( SID_ALIGNLEFT );
    1323           0 :     rBindings.Invalidate( SID_ALIGNRIGHT );
    1324           0 :     rBindings.Invalidate( SID_ALIGNCENTERHOR );
    1325           0 :     rBindings.Invalidate( SID_ALIGNBLOCK );
    1326           0 :     rBindings.Invalidate( SID_ALIGNTOP );
    1327           0 :     rBindings.Invalidate( SID_ALIGNBOTTOM );
    1328           0 :     rBindings.Invalidate( SID_ALIGNCENTERVER );
    1329           0 :     rBindings.Invalidate( SID_V_ALIGNCELL );
    1330           0 :     rBindings.Invalidate( SID_H_ALIGNCELL );
    1331             :     // pseudo slots for Format menu
    1332           0 :     rBindings.Invalidate( SID_ALIGN_ANY_HDEFAULT );
    1333           0 :     rBindings.Invalidate( SID_ALIGN_ANY_LEFT );
    1334           0 :     rBindings.Invalidate( SID_ALIGN_ANY_HCENTER );
    1335           0 :     rBindings.Invalidate( SID_ALIGN_ANY_RIGHT );
    1336           0 :     rBindings.Invalidate( SID_ALIGN_ANY_JUSTIFIED );
    1337           0 :     rBindings.Invalidate( SID_ALIGN_ANY_VDEFAULT );
    1338           0 :     rBindings.Invalidate( SID_ALIGN_ANY_TOP );
    1339           0 :     rBindings.Invalidate( SID_ALIGN_ANY_VCENTER );
    1340           0 :     rBindings.Invalidate( SID_ALIGN_ANY_BOTTOM );
    1341           0 :     rBindings.Update();
    1342             : 
    1343           0 :     if( ! rReq.IsAPI() )
    1344           0 :         rReq.Done();
    1345             : }
    1346             : 
    1347           0 : void ScFormatShell::ExecuteTextAttr( SfxRequest& rReq )
    1348             : {
    1349           0 :     ScTabViewShell* pTabViewShell       = GetViewData()->GetViewShell();
    1350           0 :     SfxBindings&            rBindings   = pViewData->GetBindings();
    1351           0 :     const ScPatternAttr*    pAttrs      = pTabViewShell->GetSelectionPattern();
    1352           0 :     const SfxItemSet*       pSet        = rReq.GetArgs();
    1353           0 :     sal_uInt16                  nSlot       = rReq.GetSlot();
    1354           0 :     SfxAllItemSet*          pNewSet = 0;
    1355             : 
    1356           0 :     pTabViewShell->HideListBox();                   // Autofilter-DropDown-Listbox
    1357             : 
    1358           0 :     if (  (nSlot == SID_ATTR_CHAR_WEIGHT)
    1359           0 :         ||(nSlot == SID_ATTR_CHAR_POSTURE)
    1360           0 :         ||(nSlot == SID_ATTR_CHAR_UNDERLINE)
    1361           0 :         ||(nSlot == SID_ULINE_VAL_NONE)
    1362           0 :         ||(nSlot == SID_ULINE_VAL_SINGLE)
    1363           0 :         ||(nSlot == SID_ULINE_VAL_DOUBLE)
    1364           0 :         ||(nSlot == SID_ULINE_VAL_DOTTED) )
    1365             :     {
    1366           0 :         pNewSet = new SfxAllItemSet( GetPool() );
    1367             : 
    1368           0 :         switch ( nSlot )
    1369             :         {
    1370             :             case SID_ATTR_CHAR_WEIGHT:
    1371             :             {
    1372             :                 // #i78017 establish the same behaviour as in Writer
    1373           0 :                 SvtScriptType nScript = SvtScriptType::LATIN | SvtScriptType::ASIAN | SvtScriptType::COMPLEX;
    1374             : 
    1375           0 :                 SfxItemPool& rPool = GetPool();
    1376           0 :                 SvxScriptSetItem aSetItem( nSlot, rPool );
    1377           0 :                 if ( pSet )
    1378           0 :                     aSetItem.PutItemForScriptType( nScript, pSet->Get( ATTR_FONT_WEIGHT ) );
    1379             :                 else
    1380             :                 {
    1381             :                     //  toggle manually
    1382             : 
    1383           0 :                     FontWeight eWeight = WEIGHT_BOLD;
    1384           0 :                     SvxScriptSetItem aOldSetItem( nSlot, rPool );
    1385           0 :                     aOldSetItem.GetItemSet().Put( pAttrs->GetItemSet(), false );
    1386           0 :                     const SfxPoolItem* pCore = aOldSetItem.GetItemOfScript( nScript );
    1387           0 :                     if ( pCore && static_cast<const SvxWeightItem*>(pCore)->GetWeight() == WEIGHT_BOLD )
    1388           0 :                         eWeight = WEIGHT_NORMAL;
    1389             : 
    1390           0 :                     aSetItem.PutItemForScriptType( nScript, SvxWeightItem( eWeight, ATTR_FONT_WEIGHT ) );
    1391             :                 }
    1392           0 :                 pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
    1393           0 :                 pNewSet->Put( aSetItem.GetItemSet(), false );
    1394             :             }
    1395           0 :             break;
    1396             : 
    1397             :             case SID_ATTR_CHAR_POSTURE:
    1398             :             {
    1399             :                 // #i78017 establish the same behaviour as in Writer
    1400           0 :                 SvtScriptType nScript = SvtScriptType::LATIN | SvtScriptType::ASIAN | SvtScriptType::COMPLEX;
    1401             : 
    1402           0 :                 SfxItemPool& rPool = GetPool();
    1403           0 :                 SvxScriptSetItem aSetItem( nSlot, rPool );
    1404           0 :                 if ( pSet )
    1405           0 :                     aSetItem.PutItemForScriptType( nScript, pSet->Get( ATTR_FONT_POSTURE ) );
    1406             :                 else
    1407             :                 {
    1408             :                     //  toggle manually
    1409             : 
    1410           0 :                     FontItalic eItalic = ITALIC_NORMAL;
    1411           0 :                     SvxScriptSetItem aOldSetItem( nSlot, rPool );
    1412           0 :                     aOldSetItem.GetItemSet().Put( pAttrs->GetItemSet(), false );
    1413           0 :                     const SfxPoolItem* pCore = aOldSetItem.GetItemOfScript( nScript );
    1414           0 :                     if ( pCore && static_cast<const SvxPostureItem*>(pCore)->GetPosture() == ITALIC_NORMAL )
    1415           0 :                         eItalic = ITALIC_NONE;
    1416             : 
    1417           0 :                     aSetItem.PutItemForScriptType( nScript, SvxPostureItem( eItalic, ATTR_FONT_POSTURE ) );
    1418             :                 }
    1419           0 :                 pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
    1420           0 :                 pNewSet->Put( aSetItem.GetItemSet(), false );
    1421             :             }
    1422           0 :             break;
    1423             : 
    1424             :             case SID_ATTR_CHAR_UNDERLINE:
    1425             :                 {
    1426             :                     FontUnderline       eUnderline;
    1427             : 
    1428           0 :                     if( pSet )
    1429             :                     {
    1430           0 :                         const SfxPoolItem& rUnderline = pSet->Get( ATTR_FONT_UNDERLINE );
    1431             : 
    1432           0 :                         if( rUnderline.ISA(SvxUnderlineItem) )
    1433             :                         {
    1434           0 :                             pTabViewShell->ApplyAttr( rUnderline );
    1435           0 :                             pNewSet->Put( rUnderline,rUnderline.Which() );
    1436             :                         }
    1437           0 :                         else if ( rUnderline.ISA(SvxTextLineItem) )
    1438             :                         {
    1439             :                             // #i106580# also allow SvxTextLineItem (base class of SvxUnderlineItem)
    1440           0 :                             const SvxTextLineItem& rTextLineItem = static_cast<const SvxTextLineItem&>(rUnderline);
    1441           0 :                             SvxUnderlineItem aNewItem( rTextLineItem.GetLineStyle(), rTextLineItem.Which() );
    1442           0 :                             aNewItem.SetColor( rTextLineItem.GetColor() );
    1443           0 :                             pTabViewShell->ApplyAttr( aNewItem );
    1444           0 :                             pNewSet->Put( aNewItem, aNewItem.Which() );
    1445             :                         }
    1446             :                     }
    1447             :                     else
    1448             :                     {
    1449             :                         SvxUnderlineItem aUnderline( static_cast<const SvxUnderlineItem&>(
    1450             :                                                         pAttrs->GetItem(
    1451           0 :                                                             ATTR_FONT_UNDERLINE ) ) );
    1452           0 :                         eUnderline = (UNDERLINE_NONE != aUnderline.GetLineStyle())
    1453             :                                     ? UNDERLINE_NONE
    1454           0 :                                     : UNDERLINE_SINGLE;
    1455           0 :                         aUnderline.SetLineStyle( eUnderline );
    1456           0 :                         pTabViewShell->ApplyAttr( aUnderline );
    1457           0 :                         pNewSet->Put( aUnderline,aUnderline.Which() );
    1458             :                     }
    1459             :                 }
    1460           0 :                 break;
    1461             : 
    1462             :             case SID_ULINE_VAL_NONE:
    1463           0 :                 pTabViewShell->ApplyAttr( SvxUnderlineItem( UNDERLINE_NONE, ATTR_FONT_UNDERLINE ) );
    1464           0 :                 break;
    1465             :             case SID_ULINE_VAL_SINGLE:      // Toggles
    1466             :             case SID_ULINE_VAL_DOUBLE:
    1467             :             case SID_ULINE_VAL_DOTTED:
    1468             :                 {
    1469             :                     FontUnderline eOld = static_cast<const SvxUnderlineItem&>(
    1470           0 :                                             pAttrs->GetItem(ATTR_FONT_UNDERLINE)).GetLineStyle();
    1471           0 :                     FontUnderline eNew = eOld;
    1472           0 :                     switch (nSlot)
    1473             :                     {
    1474             :                         case SID_ULINE_VAL_SINGLE:
    1475           0 :                             eNew = ( eOld == UNDERLINE_SINGLE ) ? UNDERLINE_NONE : UNDERLINE_SINGLE;
    1476           0 :                             break;
    1477             :                         case SID_ULINE_VAL_DOUBLE:
    1478           0 :                             eNew = ( eOld == UNDERLINE_DOUBLE ) ? UNDERLINE_NONE : UNDERLINE_DOUBLE;
    1479           0 :                             break;
    1480             :                         case SID_ULINE_VAL_DOTTED:
    1481           0 :                             eNew = ( eOld == UNDERLINE_DOTTED ) ? UNDERLINE_NONE : UNDERLINE_DOTTED;
    1482           0 :                             break;
    1483             :                     }
    1484           0 :                     pTabViewShell->ApplyAttr( SvxUnderlineItem( eNew, ATTR_FONT_UNDERLINE ) );
    1485             :                 }
    1486           0 :                 break;
    1487             : 
    1488             :             default:
    1489           0 :                 break;
    1490             :         }
    1491           0 :         rBindings.Invalidate( nSlot );
    1492             :     }
    1493             :     else
    1494             :     {
    1495             :         /*
    1496             :          * "Selbstgemachte" RadioButton-Funktionalitaet
    1497             :          * Beim Toggle gibt es den Standard-State, d.h. kein
    1498             :          * Button ist gedrueckt
    1499             :          */
    1500             : 
    1501           0 :         const SfxItemSet&        rAttrSet   = pTabViewShell->GetSelectionPattern()->GetItemSet();
    1502           0 :         const SfxPoolItem*       pItem       = NULL;
    1503           0 :         const SvxHorJustifyItem* pHorJustify = NULL;
    1504           0 :         const SvxVerJustifyItem* pVerJustify = NULL;
    1505           0 :         SvxCellHorJustify        eHorJustify = SVX_HOR_JUSTIFY_STANDARD;
    1506           0 :         SvxCellVerJustify        eVerJustify = SVX_VER_JUSTIFY_STANDARD;
    1507             : 
    1508           0 :         if (rAttrSet.GetItemState(ATTR_HOR_JUSTIFY, true,&pItem ) == SfxItemState::SET)
    1509             :         {
    1510           0 :             pHorJustify = static_cast<const SvxHorJustifyItem*>(pItem);
    1511           0 :             eHorJustify = SvxCellHorJustify( pHorJustify->GetValue() );
    1512             :         }
    1513           0 :         if (rAttrSet.GetItemState(ATTR_VER_JUSTIFY, true,&pItem ) == SfxItemState::SET)
    1514             :         {
    1515           0 :             pVerJustify = static_cast<const SvxVerJustifyItem*>(pItem);
    1516           0 :             eVerJustify = SvxCellVerJustify( pVerJustify->GetValue() );
    1517             :         }
    1518             : 
    1519           0 :         switch ( nSlot )
    1520             :         {
    1521             :             case SID_ALIGNLEFT:
    1522           0 :                 rReq.SetSlot( SID_H_ALIGNCELL );
    1523             :                 rReq.AppendItem( SvxHorJustifyItem(
    1524           0 :                     !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_LEFT) ?
    1525           0 :                     SVX_HOR_JUSTIFY_LEFT : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
    1526           0 :                 ExecuteSlot( rReq, GetInterface() );
    1527           0 :                 return;
    1528             : 
    1529             :             case SID_ALIGNRIGHT:
    1530           0 :                 rReq.SetSlot( SID_H_ALIGNCELL );
    1531             :                 rReq.AppendItem( SvxHorJustifyItem(
    1532           0 :                     !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_RIGHT) ?
    1533           0 :                     SVX_HOR_JUSTIFY_RIGHT : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
    1534           0 :                 ExecuteSlot( rReq, GetInterface() );
    1535           0 :                 return;
    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             : 
    1545             :             case SID_ALIGNBLOCK:
    1546           0 :                 rReq.SetSlot( SID_H_ALIGNCELL );
    1547             :                 rReq.AppendItem( SvxHorJustifyItem(
    1548           0 :                     !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_BLOCK) ?
    1549           0 :                     SVX_HOR_JUSTIFY_BLOCK : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
    1550           0 :                 ExecuteSlot( rReq, GetInterface() );
    1551           0 :                 return;
    1552             : 
    1553             :             case SID_ALIGNTOP:
    1554           0 :                 rReq.SetSlot( SID_V_ALIGNCELL );
    1555             :                 rReq.AppendItem( SvxVerJustifyItem(
    1556           0 :                     !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_TOP) ?
    1557           0 :                     SVX_VER_JUSTIFY_TOP : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
    1558           0 :                 ExecuteSlot( rReq, GetInterface() );
    1559           0 :                 return;
    1560             : 
    1561             :             case SID_ALIGNBOTTOM:
    1562           0 :                 rReq.SetSlot( SID_V_ALIGNCELL );
    1563             :                 rReq.AppendItem( SvxVerJustifyItem(
    1564           0 :                     !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_BOTTOM) ?
    1565           0 :                     SVX_VER_JUSTIFY_BOTTOM : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
    1566           0 :                 ExecuteSlot( rReq, GetInterface() );
    1567           0 :                 return;
    1568             : 
    1569             :             case SID_ALIGNCENTERVER:
    1570           0 :                 rReq.SetSlot( SID_V_ALIGNCELL );
    1571             :                 rReq.AppendItem( SvxVerJustifyItem(
    1572           0 :                     !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_CENTER) ?
    1573           0 :                     SVX_VER_JUSTIFY_CENTER : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
    1574           0 :                 ExecuteSlot( rReq, GetInterface() );
    1575           0 :                 return;
    1576             : 
    1577             :             default:
    1578           0 :             break;
    1579             :         }
    1580             : 
    1581             :     }
    1582             : 
    1583           0 :     rBindings.Update();
    1584             : 
    1585           0 :     if( pNewSet )
    1586             :     {
    1587           0 :         rReq.Done( *pNewSet );
    1588           0 :         delete pNewSet;
    1589             :     }
    1590             :     else
    1591             :     {
    1592           0 :         rReq.Done();
    1593             :     }
    1594             : 
    1595             : }
    1596             : 
    1597           0 : void ScFormatShell::ExecuteAttr( SfxRequest& rReq )
    1598             : {
    1599           0 :     ScTabViewShell*     pTabViewShell = GetViewData()->GetViewShell();
    1600           0 :     SfxBindings&        rBindings = pViewData->GetBindings();
    1601           0 :     const SfxItemSet*   pNewAttrs = rReq.GetArgs();
    1602           0 :     sal_uInt16          nSlot = rReq.GetSlot();
    1603             : 
    1604           0 :     pTabViewShell->HideListBox();                   // Autofilter-DropDown-Listbox
    1605           0 :     ScDocument* pDoc = GetViewData()->GetDocument();
    1606           0 :     if ( !pNewAttrs )
    1607             :     {
    1608           0 :         switch ( nSlot )
    1609             :         {
    1610             :             case SID_ATTR_CHAR_ENDPREVIEW_FONT:
    1611             :             {
    1612           0 :                 pDoc->SetPreviewFont(NULL);
    1613           0 :                 pTabViewShell->UpdateSelectionArea( pDoc->GetPreviewSelection() );
    1614           0 :                 break;
    1615             :             }
    1616             :             case SID_ATTR_CHAR_COLOR:
    1617             :             case SID_ATTR_CHAR_FONT:
    1618             :             case SID_ATTR_CHAR_FONTHEIGHT:
    1619           0 :                 pTabViewShell->ExecuteCellFormatDlg(rReq, "font");       // wenn ToolBar vertikal
    1620           0 :                 break;
    1621             : 
    1622             :             case SID_BACKGROUND_COLOR:
    1623             :                 {
    1624             :                     SvxBrushItem aBrushItem( static_cast<const SvxBrushItem&>(
    1625           0 :                                      pTabViewShell->GetSelectionPattern()->GetItem( ATTR_BACKGROUND ) ) );
    1626           0 :                     aBrushItem.SetColor( COL_TRANSPARENT );
    1627           0 :                     pTabViewShell->ApplyAttr( aBrushItem );
    1628             :                 }
    1629           0 :                 break;
    1630             : 
    1631             :             case SID_ATTR_ALIGN_LINEBREAK:                  // ohne Parameter als Toggle
    1632             :                 {
    1633           0 :                     const ScPatternAttr* pAttrs = pTabViewShell->GetSelectionPattern();
    1634           0 :                     bool bOld = static_cast<const SfxBoolItem&>(pAttrs->GetItem(ATTR_LINEBREAK)).GetValue();
    1635           0 :                     SfxBoolItem aBreakItem( ATTR_LINEBREAK, !bOld );
    1636           0 :                     pTabViewShell->ApplyAttr( aBreakItem );
    1637             : 
    1638           0 :                     SfxAllItemSet aNewSet( GetPool() );
    1639           0 :                     aNewSet.Put( aBreakItem,aBreakItem.Which() );
    1640           0 :                     rReq.Done( aNewSet );
    1641             : 
    1642           0 :                     rBindings.Invalidate( nSlot );
    1643             :                 }
    1644           0 :                 break;
    1645             :         }
    1646             :     }
    1647             :     else
    1648             :     {
    1649           0 :         switch ( nSlot )
    1650             :         {
    1651             :             case SID_ATTR_CHAR_PREVIEW_FONT:
    1652             :             {
    1653           0 :                 SfxItemPool& rPool = GetPool();
    1654           0 :                 sal_uInt16 nWhich = rPool.GetWhich( nSlot );
    1655           0 :                 const SvxFontItem& rFont = static_cast<const SvxFontItem&>(pNewAttrs->Get( nWhich ));
    1656           0 :                 SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONT, rPool );
    1657           0 :                 SvtScriptType nScript = pTabViewShell->GetSelectionScriptType();
    1658           0 :                 aSetItem.PutItemForScriptType( nScript, rFont );
    1659             : 
    1660           0 :                 ScMarkData aFuncMark( pViewData->GetMarkData() );
    1661           0 :                 ScViewUtil::UnmarkFiltered( aFuncMark, pDoc );
    1662           0 :                 pDoc->SetPreviewFont( aSetItem.GetItemSet().Clone() );
    1663           0 :                 aFuncMark.MarkToMulti();
    1664             : 
    1665           0 :                 if ( !aFuncMark.IsMarked() && !aFuncMark.IsMultiMarked() )
    1666             :                 {
    1667           0 :                     SCCOL nCol = pViewData->GetCurX();
    1668           0 :                     SCROW nRow = pViewData->GetCurY();
    1669           0 :                     SCTAB nTab = pViewData->GetTabNo();
    1670           0 :                     ScRange aRange( nCol, nRow, nTab );
    1671           0 :                     aFuncMark.SetMarkArea( aRange );
    1672             :                 }
    1673           0 :                 pDoc->SetPreviewSelection( aFuncMark );
    1674           0 :                 pTabViewShell->UpdateSelectionArea( aFuncMark );
    1675           0 :                 break;
    1676             :             }
    1677             :             case SID_ATTR_CHAR_OVERLINE:
    1678             :             case SID_ATTR_CHAR_STRIKEOUT:
    1679             :             case SID_ATTR_ALIGN_LINEBREAK:
    1680             :             case SID_ATTR_CHAR_COLOR:
    1681             :             case SID_ATTR_CHAR_CONTOUR:
    1682             :             case SID_ATTR_CHAR_SHADOWED:
    1683             :             case SID_ATTR_CHAR_RELIEF:
    1684             :             case SID_SCATTR_PROTECTION :
    1685           0 :                 pTabViewShell->ApplyAttr( pNewAttrs->Get( pNewAttrs->GetPool()->GetWhich( nSlot ) ) );
    1686           0 :                 rBindings.Invalidate( nSlot );
    1687           0 :                 rBindings.Update( nSlot );
    1688           0 :                 break;
    1689             : 
    1690             :             case SID_ATTR_CHAR_FONT:
    1691             :             case SID_ATTR_CHAR_FONTHEIGHT:
    1692             :                 {
    1693             :                     // #i78017 establish the same behaviour as in Writer
    1694           0 :                     SvtScriptType nScript = SvtScriptType::LATIN | SvtScriptType::ASIAN | SvtScriptType::COMPLEX;
    1695           0 :                     if (nSlot == SID_ATTR_CHAR_FONT)
    1696           0 :                         nScript = pTabViewShell->GetSelectionScriptType();
    1697             : 
    1698           0 :                     SfxItemPool& rPool = GetPool();
    1699           0 :                     SvxScriptSetItem aSetItem( nSlot, rPool );
    1700           0 :                     sal_uInt16 nWhich = rPool.GetWhich( nSlot );
    1701           0 :                     aSetItem.PutItemForScriptType( nScript, pNewAttrs->Get( nWhich ) );
    1702             : 
    1703           0 :                     pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
    1704             : 
    1705           0 :                     rBindings.Invalidate( nSlot );
    1706           0 :                     rBindings.Update( nSlot );
    1707             :                 }
    1708           0 :                 break;
    1709             : 
    1710             :             case SID_FRAME_LINESTYLE:
    1711             :                 {
    1712             :                     // Default-Linie aktualisieren
    1713             :                     const ::editeng::SvxBorderLine* pLine =
    1714             :                             static_cast<const SvxLineItem&>(
    1715           0 :                                 pNewAttrs->Get( SID_FRAME_LINESTYLE )).
    1716           0 :                                 GetLine();
    1717             : 
    1718           0 :                     if ( pLine )
    1719             :                     {
    1720           0 :                         ::editeng::SvxBorderLine* pDefLine = pTabViewShell->GetDefaultFrameLine();
    1721             : 
    1722           0 :                         if ( pDefLine )
    1723             :                         {
    1724             :                             pDefLine->SetBorderLineStyle(
    1725           0 :                                     pLine->GetBorderLineStyle());
    1726           0 :                             pDefLine->SetWidth( pLine->GetWidth( ) );
    1727           0 :                             pTabViewShell->SetSelectionFrameLines( pDefLine, false );
    1728             :                         }
    1729             :                         else
    1730             :                         {
    1731           0 :                             pTabViewShell->SetDefaultFrameLine( pLine );
    1732           0 :                             pTabViewShell->GetDefaultFrameLine()->SetColor( COL_BLACK );
    1733           0 :                             pTabViewShell->SetSelectionFrameLines( pLine, false );
    1734             :                         }
    1735             :                     }
    1736             :                     else
    1737             :                     {
    1738           0 :                         Color           aColorBlack( COL_BLACK );
    1739             :                         ::editeng::SvxBorderLine aDefLine( &aColorBlack, 20,
    1740           0 :                                 table::BorderLineStyle::SOLID );
    1741           0 :                         pTabViewShell->SetDefaultFrameLine( &aDefLine );
    1742           0 :                         pTabViewShell->SetSelectionFrameLines( NULL, false );
    1743             :                     }
    1744             :                 }
    1745           0 :                 break;
    1746             : 
    1747             :             case SID_FRAME_LINECOLOR:
    1748             :                 {
    1749           0 :                     ::editeng::SvxBorderLine*  pDefLine = pTabViewShell->GetDefaultFrameLine();
    1750             :                     const Color&    rColor = static_cast<const SvxColorItem&>(
    1751           0 :                                         pNewAttrs->Get( SID_FRAME_LINECOLOR )).
    1752           0 :                                             GetValue();
    1753             : 
    1754             :                     // Default-Linie aktualisieren
    1755           0 :                     if ( pDefLine )
    1756             :                     {
    1757           0 :                         pDefLine->SetColor( rColor );
    1758           0 :                         pTabViewShell->SetSelectionFrameLines( pDefLine, true );
    1759             :                     }
    1760             :                     else
    1761             :                     {
    1762             :                         ::editeng::SvxBorderLine aDefLine( &rColor, 20,
    1763           0 :                                 table::BorderLineStyle::SOLID );
    1764           0 :                         pTabViewShell->SetDefaultFrameLine( &aDefLine );
    1765           0 :                         pTabViewShell->SetSelectionFrameLines( &aDefLine, false );
    1766             :                     }
    1767             :                 }
    1768           0 :                 break;
    1769             : 
    1770             :             case SID_ATTR_BORDER_OUTER:
    1771             :             case SID_ATTR_BORDER:
    1772             :                 {
    1773           0 :                     ::editeng::SvxBorderLine*          pDefLine = pTabViewShell->GetDefaultFrameLine();
    1774           0 :                     const ScPatternAttr*    pOldAttrs = pTabViewShell->GetSelectionPattern();
    1775             :                     boost::scoped_ptr<SfxItemSet> pOldSet(
    1776             :                                                 new SfxItemSet(
    1777           0 :                                                         *(pDoc->GetPool()),
    1778             :                                                         ATTR_PATTERN_START,
    1779           0 :                                                         ATTR_PATTERN_END ));
    1780             :                     boost::scoped_ptr<SfxItemSet> pNewSet(
    1781             :                                                 new SfxItemSet(
    1782           0 :                                                         *(pDoc->GetPool()),
    1783             :                                                         ATTR_PATTERN_START,
    1784           0 :                                                         ATTR_PATTERN_END ));
    1785             :                     const SfxPoolItem&      rBorderAttr =
    1786           0 :                                                 pOldAttrs->GetItemSet().
    1787           0 :                                                     Get( ATTR_BORDER );
    1788             : 
    1789             :                     // Border-Items vom Controller auswerten:
    1790           0 :                     const SfxPoolItem* pItem = 0;
    1791             : 
    1792           0 :                     if ( pNewAttrs->GetItemState( ATTR_BORDER, true, &pItem )
    1793             :                          == SfxItemState::SET )
    1794             :                     {
    1795             :                         //  The SvxFrameToolBoxControl toolbox controller uses a default
    1796             :                         //  SvxBorderLine (all widths 0) to mark the lines that should be set.
    1797             :                         //  Macro recording uses a SvxBoxItem with the real values (OutWidth > 0)
    1798             :                         //  or NULL pointers for no lines.
    1799             :                         //  -> Substitute existing lines with pDefLine only if widths are 0.
    1800           0 :                         SvxBoxItem aBoxItem ( *static_cast<const SvxBoxItem*>(pItem ));
    1801           0 :                         if ( aBoxItem.GetTop() && aBoxItem.GetTop()->GetOutWidth() == 0 )
    1802           0 :                             aBoxItem.SetLine( pDefLine, SvxBoxItemLine::TOP );
    1803           0 :                         if ( aBoxItem.GetBottom() && aBoxItem.GetBottom()->GetOutWidth() == 0 )
    1804           0 :                             aBoxItem.SetLine( pDefLine, SvxBoxItemLine::BOTTOM );
    1805           0 :                         if ( aBoxItem.GetLeft() && aBoxItem.GetLeft()->GetOutWidth() == 0 )
    1806           0 :                             aBoxItem.SetLine( pDefLine, SvxBoxItemLine::LEFT );
    1807           0 :                         if ( aBoxItem.GetRight() && aBoxItem.GetRight()->GetOutWidth() == 0 )
    1808           0 :                             aBoxItem.SetLine( pDefLine, SvxBoxItemLine::RIGHT );
    1809           0 :                         pNewSet->Put( aBoxItem );
    1810           0 :                         rReq.AppendItem( aBoxItem );
    1811             :                     }
    1812             : 
    1813           0 :                     if ( pNewAttrs->GetItemState( ATTR_BORDER_INNER, true, &pItem )
    1814             :                          == SfxItemState::SET )
    1815             :                     {
    1816           0 :                         SvxBoxInfoItem aBoxInfoItem( *static_cast<const SvxBoxInfoItem*>(pItem) );
    1817           0 :                         if ( aBoxInfoItem.GetHori() && aBoxInfoItem.GetHori()->GetOutWidth() == 0 )
    1818           0 :                             aBoxInfoItem.SetLine( pDefLine, SvxBoxInfoItemLine::HORI );
    1819           0 :                         if ( aBoxInfoItem.GetVert() && aBoxInfoItem.GetVert()->GetOutWidth() == 0 )
    1820           0 :                             aBoxInfoItem.SetLine( pDefLine, SvxBoxInfoItemLine::VERT );
    1821           0 :                         pNewSet->Put( aBoxInfoItem );
    1822           0 :                         rReq.AppendItem( aBoxInfoItem );
    1823             :                     }
    1824             :                     else
    1825             :                     {
    1826           0 :                         SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
    1827           0 :                         aBoxInfoItem.SetLine( NULL, SvxBoxInfoItemLine::HORI );
    1828           0 :                         aBoxInfoItem.SetLine( NULL, SvxBoxInfoItemLine::VERT );
    1829           0 :                         pNewSet->Put( aBoxInfoItem );
    1830             :                     }
    1831             : 
    1832           0 :                     pOldSet->Put( rBorderAttr );
    1833           0 :                     pTabViewShell->ApplyAttributes( pNewSet.get(), pOldSet.get() );
    1834             :                 }
    1835           0 :                 break;
    1836             : 
    1837             :             case SID_ATTR_BORDER_DIAG_TLBR:
    1838             :             case SID_ATTR_BORDER_DIAG_BLTR:
    1839             :                 {
    1840           0 :                     const ScPatternAttr* pOldAttrs = pTabViewShell->GetSelectionPattern();
    1841           0 :                     boost::scoped_ptr<SfxItemSet> pOldSet(new SfxItemSet(pOldAttrs->GetItemSet()));
    1842           0 :                     boost::scoped_ptr<SfxItemSet> pNewSet(new SfxItemSet(pOldAttrs->GetItemSet()));
    1843           0 :                     const SfxPoolItem* pItem = 0;
    1844             : 
    1845           0 :                     if(SID_ATTR_BORDER_DIAG_TLBR == nSlot)
    1846             :                     {
    1847           0 :                         if(SfxItemState::SET == pNewAttrs->GetItemState(ATTR_BORDER_TLBR, true, &pItem))
    1848             :                         {
    1849           0 :                             SvxLineItem aItem(ATTR_BORDER_TLBR);
    1850           0 :                             aItem.SetLine(static_cast<const SvxLineItem&>(pNewAttrs->Get(ATTR_BORDER_TLBR)).GetLine());
    1851           0 :                             pNewSet->Put(aItem);
    1852           0 :                             rReq.AppendItem(aItem);
    1853           0 :                             pTabViewShell->ApplyAttributes(pNewSet.get(), pOldSet.get());
    1854             :                         }
    1855             :                     }
    1856             :                     else // if( nSlot == SID_ATTR_BORDER_DIAG_BLTR )
    1857             :                     {
    1858           0 :                         if(SfxItemState::SET == pNewAttrs->GetItemState(ATTR_BORDER_BLTR, true, &pItem ))
    1859             :                         {
    1860           0 :                             SvxLineItem aItem(ATTR_BORDER_BLTR);
    1861           0 :                             aItem.SetLine(static_cast<const SvxLineItem&>(pNewAttrs->Get(ATTR_BORDER_BLTR)).GetLine());
    1862           0 :                             pNewSet->Put(aItem);
    1863           0 :                             rReq.AppendItem(aItem);
    1864           0 :                             pTabViewShell->ApplyAttributes(pNewSet.get(), pOldSet.get());
    1865             :                         }
    1866             :                     }
    1867             : 
    1868           0 :                     rBindings.Invalidate(nSlot);
    1869             :                 }
    1870           0 :                 break;
    1871             : 
    1872             :             // ATTR_BACKGROUND (=SID_ATTR_BRUSH) muss ueber zwei IDs
    1873             :             // gesetzt werden:
    1874             :             case SID_BACKGROUND_COLOR:
    1875             :                 {
    1876             :                     const SvxColorItem  rNewColorItem = static_cast<const SvxColorItem&>(
    1877           0 :                                             pNewAttrs->Get( SID_BACKGROUND_COLOR ) );
    1878             : 
    1879             :                     SvxBrushItem        aBrushItem( static_cast<const SvxBrushItem&>(
    1880             :                                             pTabViewShell->GetSelectionPattern()->
    1881           0 :                                                 GetItem( ATTR_BACKGROUND ) ) );
    1882             : 
    1883           0 :                     aBrushItem.SetColor( rNewColorItem.GetValue() );
    1884             : 
    1885           0 :                     pTabViewShell->ApplyAttr( aBrushItem );
    1886             :                 }
    1887           0 :                 break;
    1888             : 
    1889             :                 case SID_ATTR_BRUSH:
    1890             :                 {
    1891             :                     SvxBrushItem        aBrushItem( static_cast<const SvxBrushItem&>(
    1892             :                                             pTabViewShell->GetSelectionPattern()->
    1893           0 :                                                 GetItem( ATTR_BACKGROUND ) ) );
    1894             :                     const SvxBrushItem& rNewBrushItem = static_cast<const SvxBrushItem&>(
    1895           0 :                                             pNewAttrs->Get( GetPool().GetWhich(nSlot) ) );
    1896           0 :                     aBrushItem.SetColor(rNewBrushItem.GetColor());
    1897           0 :                     pTabViewShell->ApplyAttr( aBrushItem );
    1898             :                 }
    1899           0 :                 break;
    1900             : 
    1901             :             case SID_ATTR_BORDER_SHADOW:
    1902             :                 {
    1903             :                     const SvxShadowItem& rNewShadowItem = static_cast<const SvxShadowItem&>(
    1904           0 :                                             pNewAttrs->Get( ATTR_SHADOW ) );
    1905           0 :                     pTabViewShell->ApplyAttr( rNewShadowItem );
    1906             :                 }
    1907           0 :                 break;
    1908             : 
    1909             :             default:
    1910           0 :             break;
    1911             :         }
    1912             : 
    1913           0 :         if( ! rReq.IsAPI() )
    1914           0 :             if( ! rReq.IsDone() )
    1915           0 :                 rReq.Done();
    1916             :     }
    1917           0 : }
    1918             : 
    1919        3761 : void ScFormatShell::GetAttrState( SfxItemSet& rSet )
    1920             : {
    1921        3761 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    1922        3761 :     const SfxItemSet&    rAttrSet   = pTabViewShell->GetSelectionPattern()->GetItemSet();
    1923             :     //const ::editeng::SvxBorderLine* pLine      = pTabViewShell->GetDefaultFrameLine();
    1924        3761 :     const SvxBrushItem&  rBrushItem = static_cast<const SvxBrushItem&>(rAttrSet.Get( ATTR_BACKGROUND ));
    1925        3761 :     SfxWhichIter aIter( rSet );
    1926        3761 :     sal_uInt16 nWhich = aIter.FirstWhich();
    1927             : 
    1928        3761 :     rSet.Put( rAttrSet, false );
    1929             : 
    1930             :     //  choose font info according to selection script type
    1931        3761 :     SvtScriptType nScript = SvtScriptType::NONE;      // GetSelectionScriptType never returns 0
    1932        3761 :     if ( rSet.GetItemState( ATTR_FONT ) != SfxItemState::UNKNOWN )
    1933             :     {
    1934         705 :         if (nScript == SvtScriptType::NONE) nScript = pTabViewShell->GetSelectionScriptType();
    1935         705 :         ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT, nScript );
    1936             :     }
    1937        3761 :     if ( rSet.GetItemState( ATTR_FONT_HEIGHT ) != SfxItemState::UNKNOWN )
    1938             :     {
    1939         400 :         if (nScript == SvtScriptType::NONE) nScript = pTabViewShell->GetSelectionScriptType();
    1940         400 :         ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_HEIGHT, nScript );
    1941             :     }
    1942             : 
    1943       12708 :     while ( nWhich )
    1944             :     {
    1945        5186 :         switch(nWhich)
    1946             :         {
    1947             :             case SID_BACKGROUND_COLOR:
    1948             :             {
    1949         400 :                 rSet.Put( SvxColorItem( rBrushItem.GetColor(), SID_BACKGROUND_COLOR ) );
    1950             : 
    1951         400 :                 if(SfxItemState::DONTCARE == rAttrSet.GetItemState(ATTR_BACKGROUND))
    1952             :                 {
    1953           0 :                     rSet.InvalidateItem(SID_BACKGROUND_COLOR);
    1954             :                 }
    1955             :             }
    1956         400 :             break;
    1957             :             case SID_FRAME_LINESTYLE:
    1958             :             case SID_FRAME_LINECOLOR:
    1959             :             {
    1960             :                 // handled together because both need the cell border information for decisions
    1961             :                 // rSet.Put( SvxColorItem( pLine ? pLine->GetColor() : Color(), SID_FRAME_LINECOLOR ) );
    1962         649 :                 Color aCol = 0;
    1963         649 :                 editeng::SvxBorderLine aLine(0,0,0,false);
    1964         649 :                 bool bCol = false;
    1965         649 :                 bool bColDisable = false, bStyleDisable = false;
    1966         649 :                 SvxBoxItem aBoxItem(ATTR_BORDER);
    1967        1298 :                 SvxBoxInfoItem aInfoItem(ATTR_BORDER_INNER);
    1968             : 
    1969         649 :                 pTabViewShell->GetSelectionFrame(aBoxItem, aInfoItem);
    1970             : 
    1971         649 :                 if( aBoxItem.GetTop() )
    1972             :                 {
    1973           0 :                     bCol = true;
    1974           0 :                     aCol = aBoxItem.GetTop()->GetColor() ;
    1975           0 :                     aLine.SetColor(aCol);
    1976           0 :                     aLine.SetWidth( aBoxItem.GetTop()->GetWidth());
    1977           0 :                     aLine.SetBorderLineStyle( aBoxItem.GetTop()->GetBorderLineStyle());
    1978             :                 }
    1979             : 
    1980         649 :                 if( aBoxItem.GetBottom() )
    1981             :                 {
    1982           0 :                     if(!bCol)
    1983             :                     {
    1984           0 :                         bCol = true;
    1985           0 :                         aCol = aBoxItem.GetBottom()->GetColor() ;
    1986           0 :                         aLine.SetColor(aCol);
    1987           0 :                         aLine.SetWidth( aBoxItem.GetBottom()->GetWidth());
    1988           0 :                         aLine.SetBorderLineStyle( aBoxItem.GetBottom()->GetBorderLineStyle());
    1989             :                     }
    1990             :                     else
    1991             :                     {
    1992           0 :                         if(aCol != aBoxItem.GetBottom()->GetColor() )
    1993           0 :                             bColDisable = true;
    1994           0 :                         if(!( aLine == *(aBoxItem.GetBottom())) )
    1995           0 :                             bStyleDisable = true;
    1996             :                     }
    1997             :                 }
    1998             : 
    1999         649 :                 if( aBoxItem.GetLeft() )
    2000             :                 {
    2001           0 :                     if(!bCol)
    2002             :                     {
    2003           0 :                         bCol = true;
    2004           0 :                         aCol = aBoxItem.GetLeft()->GetColor() ;
    2005           0 :                         aLine.SetColor(aCol);
    2006           0 :                         aLine.SetWidth( aBoxItem.GetLeft()->GetWidth());
    2007           0 :                         aLine.SetBorderLineStyle( aBoxItem.GetLeft()->GetBorderLineStyle());
    2008             :                     }
    2009             :                     else
    2010             :                     {
    2011           0 :                         if(aCol != aBoxItem.GetLeft()->GetColor() )
    2012           0 :                             bColDisable = true;
    2013           0 :                         if(!( aLine == *(aBoxItem.GetLeft())) )
    2014           0 :                             bStyleDisable = true;
    2015             :                     }
    2016             :                 }
    2017             : 
    2018         649 :                 if( aBoxItem.GetRight() )
    2019             :                 {
    2020           0 :                     if(!bCol)
    2021             :                     {
    2022           0 :                         bCol = true;
    2023           0 :                         aCol = aBoxItem.GetRight()->GetColor() ;
    2024           0 :                         aLine.SetColor(aCol);
    2025           0 :                         aLine.SetWidth( aBoxItem.GetRight()->GetWidth());
    2026           0 :                         aLine.SetBorderLineStyle( aBoxItem.GetRight()->GetBorderLineStyle());
    2027             :                     }
    2028             :                     else
    2029             :                     {
    2030           0 :                         if(aCol != aBoxItem.GetRight()->GetColor() )
    2031           0 :                             bColDisable = true;
    2032           0 :                         if(!( aLine == *(aBoxItem.GetRight())) )
    2033           0 :                             bStyleDisable = true;
    2034             :                     }
    2035             :                 }
    2036             : 
    2037         649 :                 if( aInfoItem.GetVert())
    2038             :                 {
    2039           0 :                     if(!bCol)
    2040             :                     {
    2041           0 :                         bCol = true;
    2042           0 :                         aCol = aInfoItem.GetVert()->GetColor() ;
    2043           0 :                         aLine.SetColor(aCol);
    2044           0 :                         aLine.SetWidth( aInfoItem.GetVert()->GetWidth());
    2045           0 :                         aLine.SetBorderLineStyle( aInfoItem.GetVert()->GetBorderLineStyle());
    2046             :                     }
    2047             :                     else
    2048             :                     {
    2049           0 :                         if(aCol != aInfoItem.GetVert()->GetColor() )
    2050           0 :                             bColDisable = true;
    2051           0 :                         if(!( aLine == *(aInfoItem.GetVert())) )
    2052           0 :                             bStyleDisable = true;
    2053             :                     }
    2054             :                 }
    2055             : 
    2056         649 :                 if( aInfoItem.GetHori())
    2057             :                 {
    2058           0 :                     if(!bCol)
    2059             :                     {
    2060           0 :                         bCol = true;
    2061           0 :                         aCol = aInfoItem.GetHori()->GetColor() ;
    2062           0 :                         aLine.SetColor(aCol);
    2063           0 :                         aLine.SetWidth( aInfoItem.GetHori()->GetWidth());
    2064           0 :                         aLine.SetBorderLineStyle( aInfoItem.GetHori()->GetBorderLineStyle());
    2065             :                     }
    2066             :                     else
    2067             :                     {
    2068           0 :                         if(aCol != aInfoItem.GetHori()->GetColor() )
    2069           0 :                             bColDisable = true;
    2070           0 :                         if(!( aLine == *(aInfoItem.GetHori())) )
    2071           0 :                             bStyleDisable = true;
    2072             :                     }
    2073             :                 }
    2074             : 
    2075        1298 :                 if( !aInfoItem.IsValid( SvxBoxInfoItemValidFlags::VERT )
    2076         649 :                     || !aInfoItem.IsValid( SvxBoxInfoItemValidFlags::HORI )
    2077         649 :                     || !aInfoItem.IsValid( SvxBoxInfoItemValidFlags::LEFT )
    2078         649 :                     || !aInfoItem.IsValid( SvxBoxInfoItemValidFlags::RIGHT )
    2079         649 :                     || !aInfoItem.IsValid( SvxBoxInfoItemValidFlags::TOP )
    2080        1298 :                     || !aInfoItem.IsValid( SvxBoxInfoItemValidFlags::BOTTOM ) )
    2081             :                 {
    2082           0 :                     bColDisable = true;
    2083           0 :                     bStyleDisable = true;
    2084             :                 }
    2085             : 
    2086         649 :                 if(SID_FRAME_LINECOLOR == nWhich)
    2087             :                 {
    2088         400 :                     if(bColDisable) // if different lines have differernt colors
    2089             :                     {
    2090           0 :                         aCol = COL_TRANSPARENT;
    2091           0 :                         rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) );
    2092           0 :                         rSet.InvalidateItem(SID_FRAME_LINECOLOR);
    2093             :                     }
    2094         400 :                     else if( !bCol && !bColDisable) // if no line available
    2095             :                     {
    2096         400 :                         aCol = COL_AUTO;
    2097         400 :                         rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) );
    2098             :                     }
    2099             :                     else
    2100           0 :                         rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) );
    2101             :                 }
    2102             :                 else // if( nWhich == SID_FRAME_LINESTYLE)
    2103             :                 {
    2104         249 :                     if(bStyleDisable) // if have several lines but don't have same style
    2105             :                     {
    2106           0 :                         aLine.SetWidth( 1 );
    2107           0 :                         SvxLineItem aItem(SID_FRAME_LINESTYLE);
    2108           0 :                         aItem.SetLine(&aLine);
    2109           0 :                         rSet.Put( aItem );
    2110           0 :                         rSet.InvalidateItem(SID_FRAME_LINESTYLE);
    2111             :                     }
    2112             :                     else // all the lines have same style or no line availavle, use initial value (0,0,0,0)
    2113             :                     {
    2114         249 :                         SvxLineItem aItem(SID_FRAME_LINESTYLE);
    2115         249 :                         aItem.SetLine(&aLine);
    2116         249 :                         rSet.Put( aItem );
    2117             :                     }
    2118         649 :                 }
    2119             :             }
    2120         649 :             break;
    2121             :             case SID_ATTR_BRUSH:
    2122             :             {
    2123           0 :                 rSet.Put( rBrushItem, GetPool().GetWhich(nWhich) );
    2124             :             }
    2125           0 :             break;
    2126             :         }
    2127        5186 :         nWhich = aIter.NextWhich();
    2128             :     }
    2129             : 
    2130             :     // stuff for sidebar panels
    2131        3761 :     Invalidate(SID_ATTR_ALIGN_DEGREES);
    2132        3761 :     Invalidate(SID_ATTR_ALIGN_STACKED);
    2133        3761 : }
    2134             : 
    2135        3300 : void ScFormatShell::GetTextAttrState( SfxItemSet& rSet )
    2136             : {
    2137        3300 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    2138        3300 :     const SfxItemSet& rAttrSet  = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2139        3300 :     rSet.Put( rAttrSet, false ); // ItemStates mitkopieren
    2140             : 
    2141             :     //  choose font info according to selection script type
    2142        3300 :     SvtScriptType nScript = SvtScriptType::NONE;      // GetSelectionScriptType never returns 0
    2143        3300 :     if ( rSet.GetItemState( ATTR_FONT_WEIGHT ) != SfxItemState::UNKNOWN )
    2144             :     {
    2145         400 :         if (nScript == SvtScriptType::NONE) nScript = pTabViewShell->GetSelectionScriptType();
    2146         400 :         ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_WEIGHT, nScript );
    2147             :     }
    2148        3300 :     if ( rSet.GetItemState( ATTR_FONT_POSTURE ) != SfxItemState::UNKNOWN )
    2149             :     {
    2150         400 :         if (nScript == SvtScriptType::NONE) nScript = pTabViewShell->GetSelectionScriptType();
    2151         400 :         ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_POSTURE, nScript );
    2152             :     }
    2153             : 
    2154             :     SfxItemState eState;
    2155             : //  const SfxPoolItem* pItem;
    2156             : 
    2157             :     // eigene Kontrolle ueber RadioButton-Funktionalitaet:
    2158             : 
    2159             :     // Unterstreichung
    2160             : 
    2161        3300 :     eState = rAttrSet.GetItemState( ATTR_FONT_UNDERLINE, true );
    2162        3300 :     if ( eState == SfxItemState::DONTCARE )
    2163             :     {
    2164           0 :         rSet.InvalidateItem( SID_ULINE_VAL_NONE );
    2165           0 :         rSet.InvalidateItem( SID_ULINE_VAL_SINGLE );
    2166           0 :         rSet.InvalidateItem( SID_ULINE_VAL_DOUBLE );
    2167           0 :         rSet.InvalidateItem( SID_ULINE_VAL_DOTTED );
    2168             :     }
    2169             :     else
    2170             :     {
    2171             :         FontUnderline eUnderline = static_cast<const SvxUnderlineItem&>(
    2172        3300 :                     rAttrSet.Get(ATTR_FONT_UNDERLINE)).GetLineStyle();
    2173        3300 :         sal_uInt16 nId = SID_ULINE_VAL_NONE;
    2174        3300 :         switch (eUnderline)
    2175             :         {
    2176           0 :             case UNDERLINE_SINGLE:  nId = SID_ULINE_VAL_SINGLE; break;
    2177           0 :             case UNDERLINE_DOUBLE:  nId = SID_ULINE_VAL_DOUBLE; break;
    2178           0 :             case UNDERLINE_DOTTED:  nId = SID_ULINE_VAL_DOTTED; break;
    2179             :             default:
    2180        3300 :                 break;
    2181             :         }
    2182        3300 :         rSet.Put( SfxBoolItem( nId, true ) );
    2183             :     }
    2184             : 
    2185             :     // horizontale Ausrichtung
    2186             : 
    2187        3300 :     const SvxHorJustifyItem* pHorJustify = NULL;
    2188        3300 :     const SvxVerJustifyItem* pVerJustify = NULL;
    2189        3300 :     SvxCellVerJustify        eVerJustify = SVX_VER_JUSTIFY_STANDARD;
    2190        3300 :     sal_uInt16                   nWhich      = 0;
    2191        3300 :     bool                     bJustifyStd = false;
    2192        3300 :     SfxBoolItem              aBoolItem   ( 0, true );
    2193             : 
    2194             :     eState   = rAttrSet.GetItemState( ATTR_HOR_JUSTIFY, true,
    2195        3300 :                                         reinterpret_cast<const SfxPoolItem**>(&pHorJustify) );
    2196        3300 :     switch ( eState )
    2197             :     {
    2198             :         case SfxItemState::SET:
    2199             :             {
    2200           0 :                 switch ( SvxCellHorJustify( pHorJustify->GetValue() ) )
    2201             :                 {
    2202             :                     case SVX_HOR_JUSTIFY_STANDARD:
    2203           0 :                         break;
    2204             : 
    2205             :                     case SVX_HOR_JUSTIFY_LEFT:
    2206           0 :                         nWhich = SID_ALIGNLEFT;
    2207           0 :                         break;
    2208             : 
    2209             :                     case SVX_HOR_JUSTIFY_RIGHT:
    2210           0 :                         nWhich = SID_ALIGNRIGHT;
    2211           0 :                         break;
    2212             : 
    2213             :                     case SVX_HOR_JUSTIFY_CENTER:
    2214           0 :                         nWhich = SID_ALIGNCENTERHOR;
    2215           0 :                         break;
    2216             : 
    2217             :                     case SVX_HOR_JUSTIFY_BLOCK:
    2218           0 :                         nWhich = SID_ALIGNBLOCK;
    2219           0 :                         break;
    2220             : 
    2221             :                     case SVX_HOR_JUSTIFY_REPEAT:
    2222             :                     default:
    2223           0 :                         bJustifyStd = true;
    2224           0 :                         break;
    2225             :                 }
    2226             :             }
    2227           0 :             break;
    2228             : 
    2229             :         case SfxItemState::DONTCARE:
    2230           0 :             rSet.InvalidateItem( SID_ALIGNLEFT );
    2231           0 :             rSet.InvalidateItem( SID_ALIGNRIGHT );
    2232           0 :             rSet.InvalidateItem( SID_ALIGNCENTERHOR );
    2233           0 :             rSet.InvalidateItem( SID_ALIGNBLOCK );
    2234           0 :             break;
    2235             : 
    2236             :         default:
    2237        3300 :             bJustifyStd = true;
    2238        3300 :             break;
    2239             :     }
    2240             : 
    2241        3300 :     if ( nWhich )
    2242             :     {
    2243           0 :         aBoolItem.SetWhich( nWhich );
    2244           0 :         rSet.Put( aBoolItem );
    2245             :     }
    2246        3300 :     else if ( bJustifyStd )
    2247             :     {
    2248        3300 :         aBoolItem.SetValue( false );
    2249        3300 :         aBoolItem.SetWhich( SID_ALIGNLEFT );      rSet.Put( aBoolItem );
    2250        3300 :         aBoolItem.SetWhich( SID_ALIGNRIGHT );     rSet.Put( aBoolItem );
    2251        3300 :         aBoolItem.SetWhich( SID_ALIGNCENTERHOR ); rSet.Put( aBoolItem );
    2252        3300 :         aBoolItem.SetWhich( SID_ALIGNBLOCK );     rSet.Put( aBoolItem );
    2253        3300 :         bJustifyStd = false;
    2254             :     }
    2255             : 
    2256             :     // vertikale Ausrichtung
    2257             : 
    2258        3300 :     nWhich = 0;
    2259        3300 :     aBoolItem.SetValue( true );
    2260             : 
    2261             :     eState = rAttrSet.GetItemState( ATTR_VER_JUSTIFY, true,
    2262        3300 :                                     reinterpret_cast<const SfxPoolItem**>(&pVerJustify) );
    2263             : 
    2264        3300 :     switch ( eState )
    2265             :     {
    2266             :         case SfxItemState::SET:
    2267             :             {
    2268           0 :                 eVerJustify = SvxCellVerJustify( pVerJustify->GetValue() );
    2269             : 
    2270           0 :                 switch ( eVerJustify )
    2271             :                 {
    2272             :                     case SVX_VER_JUSTIFY_TOP:
    2273           0 :                         nWhich = SID_ALIGNTOP;
    2274           0 :                         break;
    2275             : 
    2276             :                     case SVX_VER_JUSTIFY_BOTTOM:
    2277           0 :                         nWhich = SID_ALIGNBOTTOM;
    2278           0 :                         break;
    2279             : 
    2280             :                     case SVX_VER_JUSTIFY_CENTER:
    2281           0 :                         nWhich = SID_ALIGNCENTERVER;
    2282           0 :                         break;
    2283             : 
    2284             :                     case SVX_VER_JUSTIFY_STANDARD:
    2285             :                     default:
    2286           0 :                         bJustifyStd = true;
    2287           0 :                         break;
    2288             :                 }
    2289             :             }
    2290           0 :             break;
    2291             : 
    2292             :         case SfxItemState::DONTCARE:
    2293           0 :             rSet.InvalidateItem( SID_ALIGNTOP );
    2294           0 :             rSet.InvalidateItem( SID_ALIGNBOTTOM );
    2295           0 :             rSet.InvalidateItem( SID_ALIGNCENTERVER );
    2296           0 :             break;
    2297             : 
    2298             :         default:
    2299        3300 :             bJustifyStd = true;
    2300        3300 :             break;
    2301             :     }
    2302             : 
    2303        3300 :     if ( nWhich )
    2304             :     {
    2305           0 :         aBoolItem.SetWhich( nWhich );
    2306           0 :         rSet.Put( aBoolItem );
    2307             :     }
    2308        3300 :     else if ( bJustifyStd )
    2309             :     {
    2310        3300 :         aBoolItem.SetValue( false );
    2311        3300 :         aBoolItem.SetWhich( SID_ALIGNTOP );       rSet.Put( aBoolItem );
    2312        3300 :         aBoolItem.SetWhich( SID_ALIGNBOTTOM );    rSet.Put( aBoolItem );
    2313        3300 :         aBoolItem.SetWhich( SID_ALIGNCENTERVER ); rSet.Put( aBoolItem );
    2314        3300 :     }
    2315        3300 : }
    2316             : 
    2317          31 : void ScFormatShell::GetBorderState( SfxItemSet& rSet )
    2318             : {
    2319          31 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    2320          31 :     SvxBoxItem      aBoxItem( ATTR_BORDER );
    2321          62 :     SvxBoxInfoItem  aInfoItem( ATTR_BORDER_INNER );
    2322             : 
    2323          31 :     pTabViewShell->GetSelectionFrame( aBoxItem, aInfoItem );
    2324             : 
    2325          31 :     if ( rSet.GetItemState( ATTR_BORDER ) != SfxItemState::UNKNOWN )
    2326          31 :         rSet.Put( aBoxItem );
    2327          31 :     if ( rSet.GetItemState( ATTR_BORDER_INNER ) != SfxItemState::UNKNOWN )
    2328          62 :         rSet.Put( aInfoItem );
    2329          31 : }
    2330             : 
    2331          31 : void ScFormatShell::GetAlignState( SfxItemSet& rSet )
    2332             : {
    2333          31 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    2334          31 :     const SfxItemSet& rAttrSet    = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2335          31 :     SfxWhichIter    aIter(rSet);
    2336          31 :     sal_uInt16          nWhich = aIter.FirstWhich();
    2337             : 
    2338          31 :     SvxCellHorJustify eHAlign = SVX_HOR_JUSTIFY_STANDARD;
    2339          31 :     bool bHasHAlign = rAttrSet.GetItemState( ATTR_HOR_JUSTIFY ) != SfxItemState::DONTCARE;
    2340          31 :     if( bHasHAlign )
    2341          31 :         eHAlign = (SvxCellHorJustify)static_cast<const SvxHorJustifyItem&>(rAttrSet.Get( ATTR_HOR_JUSTIFY )).GetValue();
    2342             : 
    2343          31 :     SvxCellVerJustify eVAlign = SVX_VER_JUSTIFY_STANDARD;
    2344          31 :     bool bHasVAlign = rAttrSet.GetItemState( ATTR_VER_JUSTIFY ) != SfxItemState::DONTCARE;
    2345          31 :     if( bHasVAlign )
    2346          31 :         eVAlign = (SvxCellVerJustify)static_cast<const SvxVerJustifyItem&>(rAttrSet.Get( ATTR_VER_JUSTIFY )).GetValue();
    2347             : 
    2348          93 :     while ( nWhich )
    2349             :     {
    2350          31 :         switch ( nWhich )
    2351             :         {
    2352             :             case SID_H_ALIGNCELL:
    2353          31 :                 if ( bHasHAlign )
    2354          31 :                     rSet.Put( SvxHorJustifyItem( eHAlign, nWhich ));
    2355          31 :             break;
    2356             :             case SID_V_ALIGNCELL:
    2357           0 :                 if ( bHasVAlign )
    2358           0 :                     rSet.Put( SvxVerJustifyItem( eVAlign, nWhich ));
    2359           0 :             break;
    2360             : 
    2361             :             // pseudo slots for Format menu
    2362             :             case SID_ALIGN_ANY_HDEFAULT:
    2363             :             case SID_ALIGN_ANY_LEFT:
    2364             :             case SID_ALIGN_ANY_HCENTER:
    2365             :             case SID_ALIGN_ANY_RIGHT:
    2366             :             case SID_ALIGN_ANY_JUSTIFIED:
    2367           0 :                 rSet.Put( SfxBoolItem( nWhich, bHasHAlign && (eHAlign == lclConvertSlotToHAlign( nWhich )) ) );
    2368           0 :             break;
    2369             :             case SID_ALIGN_ANY_VDEFAULT:
    2370             :             case SID_ALIGN_ANY_TOP:
    2371             :             case SID_ALIGN_ANY_VCENTER:
    2372             :             case SID_ALIGN_ANY_BOTTOM:
    2373           0 :                 rSet.Put( SfxBoolItem( nWhich, bHasVAlign && (eVAlign == lclConvertSlotToVAlign( nWhich )) ) );
    2374           0 :             break;
    2375             :         }
    2376          31 :         nWhich = aIter.NextWhich();
    2377          31 :     }
    2378          31 : }
    2379             : 
    2380         647 : void ScFormatShell::GetNumFormatState( SfxItemSet& rSet )
    2381             : {
    2382         647 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    2383         647 :     ScDocument* pDoc                = pViewData->GetDocument();
    2384         647 :     short nType                     = GetCurrentNumberFormatType();
    2385             : 
    2386         647 :     SfxWhichIter aIter(rSet);
    2387         647 :     sal_uInt16 nWhich = aIter.FirstWhich();
    2388        2096 :     while ( nWhich )
    2389             :     {
    2390         802 :         switch ( nWhich )
    2391             :         {
    2392             :             case SID_NUMBER_FORMAT:
    2393             :                 //{
    2394             :                 //  String aFormatCode;         // bleibt leer, wenn dont-care
    2395             :                 //
    2396             :                 //  const SfxItemSet& rAttrSet  = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2397             :                 //  if ( rAttrSet.GetItemState( ATTR_VALUE_FORMAT ) != SfxItemState::DONTCARE )
    2398             :                 //  {
    2399             :                 //      sal_uLong nNumberFormat = ((const SfxUInt32Item&)rAttrSet.Get(
    2400             :                 //                                  ATTR_VALUE_FORMAT )).GetValue();
    2401             :                 //
    2402             :                 //      SvNumberFormatter* pFormatter = rDoc.GetFormatTable();
    2403             :                 //      const SvNumberformat* pFormatEntry = pFormatter->GetEntry( nNumberFormat );
    2404             :                 //      if ( pFormatEntry )
    2405             :                 //          aFormatCode = pFormatEntry->GetFormatstring();
    2406             :                 //  }
    2407             :                 //
    2408             :                 //  rSet.Put( SfxStringItem( nWhich, aFormatCode ) );
    2409             :                 //}
    2410             : 
    2411             :                 // symphony version with format interpretation
    2412             :                 {
    2413          31 :                     const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2414             : 
    2415          31 :                     if(SfxItemState::DONTCARE != rAttrSet.GetItemState(ATTR_VALUE_FORMAT))
    2416             :                     {
    2417          31 :                         SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
    2418          31 :                         sal_uInt32 nNumberFormat = static_cast<const SfxUInt32Item&>(rAttrSet.Get(ATTR_VALUE_FORMAT)).GetValue();
    2419          31 :                         bool bThousand(false);
    2420          31 :                         bool bNegRed(false);
    2421          31 :                         sal_uInt16 nPrecision(0);
    2422          31 :                         sal_uInt16 nLeadZeroes(0);
    2423             : 
    2424          31 :                         pFormatter->GetFormatSpecialInfo(nNumberFormat,bThousand, bNegRed, nPrecision, nLeadZeroes);
    2425             : 
    2426          31 :                         const SvNumberformat* pFormatEntry = pFormatter->GetEntry( nNumberFormat );
    2427          31 :                         if (pFormatEntry && (pFormatEntry->GetType() & css::util::NumberFormat::SCIENTIFIC))
    2428             :                         {
    2429             :                             // if scientific, bThousand is used for engineering notation
    2430           0 :                             const sal_uInt16 nIntegerDigits = pFormatEntry->GetFormatIntegerDigits();
    2431           0 :                             if (nIntegerDigits > 0 && ((nIntegerDigits % 3) == 0))
    2432           0 :                                 bThousand = true;
    2433             :                             else
    2434           0 :                                 bThousand = false;
    2435             :                         }
    2436          31 :                         OUString aFormat;
    2437          31 :                         static OUString sBreak = ",";
    2438          62 :                         const OUString sThousand = OUString::number(static_cast<sal_Int32>(bThousand));
    2439          62 :                         const OUString sNegRed = OUString::number(static_cast<sal_Int32>(bNegRed));
    2440          62 :                         const OUString sPrecision = OUString::number(nPrecision);
    2441          62 :                         const OUString sLeadZeroes = OUString::number(nLeadZeroes);
    2442             : 
    2443          31 :                         aFormat += sThousand;
    2444          31 :                         aFormat += sBreak;
    2445          31 :                         aFormat += sNegRed;
    2446          31 :                         aFormat += sBreak;
    2447          31 :                         aFormat += sPrecision;
    2448          31 :                         aFormat += sBreak;
    2449          31 :                         aFormat += sLeadZeroes;
    2450          31 :                         aFormat += sBreak;
    2451             : 
    2452          62 :                         rSet.Put(SfxStringItem(nWhich, aFormat));
    2453             :                     }
    2454             :                     else
    2455             :                     {
    2456           0 :                         rSet.InvalidateItem( nWhich );
    2457             :                     }
    2458             :                 }
    2459          31 :                 break;
    2460             : 
    2461             :             case SID_NUMBER_TYPE_FORMAT:
    2462             :                 {
    2463          31 :                     sal_Int16 aFormatCode = -1;
    2464          31 :                     const SfxItemSet& rAttrSet  = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2465          31 :                     if ( rAttrSet.GetItemState( ATTR_VALUE_FORMAT ) >= SfxItemState::DEFAULT ) //Modify for more robust
    2466             :                     {
    2467          31 :                         SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
    2468          31 :                         sal_uInt32 nNumberFormat = pTabViewShell->GetSelectionPattern()->GetNumberFormat( pFormatter );
    2469          31 :                         const SvNumberformat* pFormatEntry = pFormatter->GetEntry( nNumberFormat );
    2470          31 :                         bool bStandard = false;
    2471             : 
    2472          31 :                         if ( pFormatEntry )
    2473             :                         {
    2474          31 :                             aFormatCode = pFormatEntry->GetType();
    2475          31 :                             bStandard = pFormatEntry->IsStandard();
    2476             :                         }
    2477             : 
    2478          31 :                         switch(aFormatCode)
    2479             :                         {
    2480             :                         case css::util::NumberFormat::NUMBER:
    2481             :                         case css::util::NumberFormat::NUMBER| css::util::NumberFormat::DEFINED:
    2482             :                             //use format code and standard format code to judge whether it is General,
    2483             :                             //if (nNumberFormat == nStandardNumberFormat)
    2484          31 :                             if (bStandard)
    2485          31 :                                 aFormatCode = 0;
    2486             :                             else
    2487           0 :                                 aFormatCode = 1;
    2488          31 :                             break;
    2489             :                         case css::util::NumberFormat::PERCENT:
    2490             :                         case css::util::NumberFormat::PERCENT| css::util::NumberFormat::DEFINED:
    2491           0 :                             aFormatCode = 2;
    2492           0 :                             break;
    2493             :                         case css::util::NumberFormat::CURRENCY:
    2494             :                         case css::util::NumberFormat::CURRENCY| css::util::NumberFormat::DEFINED:
    2495           0 :                             aFormatCode = 3;
    2496           0 :                             break;
    2497             :                         case css::util::NumberFormat::DATE:
    2498             :                         case css::util::NumberFormat::DATE| css::util::NumberFormat::DEFINED:
    2499             :                             //Add
    2500             :                         case css::util::NumberFormat::DATETIME:
    2501             :                         case css::util::NumberFormat::DATETIME | css::util::NumberFormat::DEFINED:
    2502           0 :                             aFormatCode = 4;
    2503           0 :                             break;
    2504             :                         case css::util::NumberFormat::TIME:
    2505             :                         case css::util::NumberFormat::TIME| css::util::NumberFormat::DEFINED:
    2506           0 :                             aFormatCode = 5;
    2507           0 :                             break;
    2508             :                         case css::util::NumberFormat::SCIENTIFIC:
    2509             :                         case css::util::NumberFormat::SCIENTIFIC| css::util::NumberFormat::DEFINED:
    2510           0 :                             aFormatCode = 6;
    2511           0 :                             break;
    2512             :                         case css::util::NumberFormat::FRACTION:
    2513             :                         case css::util::NumberFormat::FRACTION| css::util::NumberFormat::DEFINED:
    2514           0 :                             aFormatCode = 7;
    2515           0 :                             break;
    2516             :                         case css::util::NumberFormat::LOGICAL:
    2517             :                         case css::util::NumberFormat::LOGICAL| css::util::NumberFormat::DEFINED:
    2518           0 :                             aFormatCode = 8;
    2519           0 :                             break;
    2520             :                         case css::util::NumberFormat::TEXT:
    2521             :                         case css::util::NumberFormat::TEXT| css::util::NumberFormat::DEFINED:
    2522           0 :                             aFormatCode = 9;
    2523           0 :                             break;
    2524             :                         default:
    2525           0 :                             aFormatCode = -1;   //for more roburst
    2526             :                         }
    2527          31 :                         if( aFormatCode == -1 )
    2528           0 :                             rSet.InvalidateItem( nWhich );
    2529             :                         else
    2530          31 :                             rSet.Put( SfxInt16Item( nWhich, aFormatCode ) );
    2531             :                     }
    2532             :                     else
    2533             :                     {
    2534           0 :                         rSet.InvalidateItem( nWhich );
    2535             :                     }
    2536             : 
    2537             :                 }
    2538          31 :                 break;
    2539             :             case SID_NUMBER_SCIENTIFIC:
    2540         185 :                 rSet.Put( SfxBoolItem(nWhich, (nType & css::util::NumberFormat::SCIENTIFIC)) );
    2541         185 :                 break;
    2542             :             case SID_NUMBER_DATE:
    2543         185 :                 rSet.Put( SfxBoolItem(nWhich, (nType & css::util::NumberFormat::DATE)) );
    2544         185 :                 break;
    2545             :             case SID_NUMBER_CURRENCY:
    2546         185 :                 rSet.Put( SfxBoolItem(nWhich, (nType & css::util::NumberFormat::CURRENCY)) );
    2547         185 :                 break;
    2548             :             case SID_NUMBER_PERCENT:
    2549         185 :                 rSet.Put( SfxBoolItem(nWhich, (nType & css::util::NumberFormat::PERCENT)) );
    2550         185 :                 break;
    2551             :             case SID_NUMBER_TIME:
    2552           0 :                 rSet.Put( SfxBoolItem(nWhich, (nType & css::util::NumberFormat::TIME)) );
    2553           0 :                 break;
    2554             :         }
    2555         802 :         nWhich = aIter.NextWhich();
    2556         647 :     }
    2557         647 : }
    2558             : 
    2559           0 : void ScFormatShell::ExecuteTextDirection( SfxRequest& rReq )
    2560             : {
    2561           0 :     ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
    2562           0 :     pTabViewShell->HideListBox();               // Autofilter-DropDown-Listbox
    2563           0 :     bool bEditMode = false;
    2564           0 :     if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
    2565             :     {
    2566           0 :         bEditMode=true;
    2567           0 :         SC_MOD()->InputEnterHandler();
    2568           0 :         pTabViewShell->UpdateInputHandler();
    2569             :     }
    2570           0 :     sal_uInt16 nSlot = rReq.GetSlot();
    2571           0 :     switch( nSlot )
    2572             :     {
    2573             :         case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
    2574             :         case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
    2575             :         {
    2576           0 :             bool bVert = (nSlot == SID_TEXTDIRECTION_TOP_TO_BOTTOM);
    2577           0 :             ScPatternAttr aAttr( GetViewData()->GetDocument()->GetPool() );
    2578           0 :             SfxItemSet& rItemSet = aAttr.GetItemSet();
    2579           0 :             rItemSet.Put( SfxBoolItem( ATTR_STACKED, bVert ) );
    2580           0 :             rItemSet.Put( SfxBoolItem( ATTR_VERTICAL_ASIAN, bVert ) );
    2581           0 :             pTabViewShell->ApplySelectionPattern( aAttr );
    2582           0 :             pTabViewShell->AdjustBlockHeight();
    2583             :         }
    2584           0 :         break;
    2585             : 
    2586             :         case SID_ATTR_PARA_LEFT_TO_RIGHT:
    2587             :         case SID_ATTR_PARA_RIGHT_TO_LEFT:
    2588             :         {
    2589             :             SvxFrameDirection eDirection = ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT ) ?
    2590           0 :                                                 FRMDIR_HORI_LEFT_TOP : FRMDIR_HORI_RIGHT_TOP;
    2591           0 :             pTabViewShell->ApplyAttr( SvxFrameDirectionItem( eDirection, ATTR_WRITINGDIR ) );
    2592             :         }
    2593           0 :         break;
    2594             :     }
    2595           0 :     if (bEditMode)
    2596           0 :         SC_MOD()->SetInputMode( SC_INPUT_TABLE );
    2597           0 : }
    2598             : 
    2599        2483 : void ScFormatShell::GetTextDirectionState( SfxItemSet& rSet )
    2600             : {
    2601        2483 :     ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
    2602        2483 :     const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
    2603             : 
    2604             :     bool bVertDontCare =
    2605        4966 :         (rAttrSet.GetItemState( ATTR_VERTICAL_ASIAN ) == SfxItemState::DONTCARE) ||
    2606        4966 :         (rAttrSet.GetItemState( ATTR_STACKED ) == SfxItemState::DONTCARE);
    2607        4966 :     bool bLeftRight = !bVertDontCare &&
    2608        4966 :         !static_cast<const SfxBoolItem&>(rAttrSet.Get( ATTR_STACKED )).GetValue();
    2609        2483 :     bool bTopBottom = !bVertDontCare && !bLeftRight &&
    2610        2483 :         static_cast<const SfxBoolItem&>(rAttrSet.Get( ATTR_VERTICAL_ASIAN )).GetValue();
    2611             : 
    2612        2483 :     bool bBidiDontCare = (rAttrSet.GetItemState( ATTR_WRITINGDIR ) == SfxItemState::DONTCARE);
    2613        2483 :     EEHorizontalTextDirection eBidiDir = EE_HTEXTDIR_DEFAULT;
    2614        2483 :     if ( !bBidiDontCare )
    2615             :     {
    2616             :         SvxFrameDirection eCellDir = (SvxFrameDirection)static_cast<const SvxFrameDirectionItem&>(
    2617        2483 :                                         rAttrSet.Get( ATTR_WRITINGDIR )).GetValue();
    2618        2483 :         if ( eCellDir == FRMDIR_ENVIRONMENT )
    2619             :             eBidiDir = (EEHorizontalTextDirection)GetViewData()->GetDocument()->
    2620        2483 :                                 GetEditTextDirection( GetViewData()->GetTabNo() );
    2621           0 :         else if ( eCellDir == FRMDIR_HORI_RIGHT_TOP )
    2622           0 :             eBidiDir = EE_HTEXTDIR_R2L;
    2623             :         else
    2624           0 :             eBidiDir = EE_HTEXTDIR_L2R;
    2625             :     }
    2626             : 
    2627        2483 :     SvtLanguageOptions  aLangOpt;
    2628        2483 :     bool bDisableCTLFont = !aLangOpt.IsCTLFontEnabled();
    2629        2483 :     bool bDisableVerticalText = !aLangOpt.IsVerticalTextEnabled();
    2630             : 
    2631        4966 :     SfxWhichIter aIter( rSet );
    2632        2483 :     sal_uInt16 nWhich = aIter.FirstWhich();
    2633        7604 :     while( nWhich )
    2634             :     {
    2635        2638 :         switch( nWhich )
    2636             :         {
    2637             :             case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
    2638             :             case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
    2639         370 :                 if ( bDisableVerticalText )
    2640           0 :                     rSet.DisableItem( nWhich );
    2641             :                 else
    2642             :                 {
    2643         370 :                     if( bVertDontCare )
    2644           0 :                         rSet.InvalidateItem( nWhich );
    2645         370 :                     else if ( nWhich == SID_TEXTDIRECTION_LEFT_TO_RIGHT )
    2646         185 :                         rSet.Put( SfxBoolItem( nWhich, bLeftRight ) );
    2647             :                     else
    2648         185 :                         rSet.Put( SfxBoolItem( nWhich, bTopBottom ) );
    2649             :                 }
    2650         370 :             break;
    2651             : 
    2652             :             case SID_ATTR_PARA_LEFT_TO_RIGHT:
    2653             :             case SID_ATTR_PARA_RIGHT_TO_LEFT:
    2654         980 :                 if ( bDisableCTLFont )
    2655           0 :                     rSet.DisableItem( nWhich );
    2656             :                 else
    2657             :                 {
    2658         980 :                     if ( bTopBottom )
    2659           0 :                         rSet.DisableItem( nWhich );
    2660         980 :                     else if ( bBidiDontCare )
    2661           0 :                         rSet.InvalidateItem( nWhich );
    2662         980 :                     else if ( nWhich == SID_ATTR_PARA_LEFT_TO_RIGHT )
    2663         490 :                         rSet.Put( SfxBoolItem( nWhich, eBidiDir == EE_HTEXTDIR_L2R ) );
    2664             :                     else
    2665         490 :                         rSet.Put( SfxBoolItem( nWhich, eBidiDir == EE_HTEXTDIR_R2L ) );
    2666             :                 }
    2667             :         }
    2668        2638 :         nWhich = aIter.NextWhich();
    2669        2483 :     }
    2670        2483 : }
    2671             : 
    2672           0 : void ScFormatShell::ExecFormatPaintbrush( SfxRequest& rReq )
    2673             : {
    2674           0 :     ScViewFunc* pView = pViewData->GetView();
    2675           0 :     if ( pView->HasPaintBrush() )
    2676             :     {
    2677             :         // cancel paintbrush mode
    2678           0 :         pView->ResetBrushDocument();
    2679             :     }
    2680             :     else
    2681             :     {
    2682           0 :         bool bLock = false;
    2683           0 :         const SfxItemSet *pArgs = rReq.GetArgs();
    2684           0 :         if( pArgs && pArgs->Count() >= 1 )
    2685           0 :             bLock = static_cast<const SfxBoolItem&>(pArgs->Get(SID_FORMATPAINTBRUSH)).GetValue();
    2686             : 
    2687             :         // in case of multi selection, deselect all and use the cursor position
    2688           0 :         ScRange aDummy;
    2689           0 :         if ( pViewData->GetSimpleArea(aDummy) != SC_MARK_SIMPLE )
    2690           0 :             pView->Unmark();
    2691             : 
    2692           0 :         ScDocument* pBrushDoc = new ScDocument( SCDOCMODE_CLIP );
    2693           0 :         pView->CopyToClip( pBrushDoc, false, true );
    2694           0 :         pView->SetBrushDocument( pBrushDoc, bLock );
    2695             :     }
    2696           0 : }
    2697             : 
    2698         249 : void ScFormatShell::StateFormatPaintbrush( SfxItemSet& rSet )
    2699             : {
    2700         249 :     if ( pViewData->HasEditView( pViewData->GetActivePart() ) )
    2701           0 :         rSet.DisableItem( SID_FORMATPAINTBRUSH );
    2702             :     else
    2703         249 :         rSet.Put( SfxBoolItem( SID_FORMATPAINTBRUSH, pViewData->GetView()->HasPaintBrush() ) );
    2704         249 : }
    2705             : 
    2706         647 : short ScFormatShell::GetCurrentNumberFormatType()
    2707             : {
    2708         647 :     short nType = css::util::NumberFormat::ALL;
    2709         647 :     ScDocument* pDoc = GetViewData()->GetDocument();
    2710         647 :     ScMarkData aMark(GetViewData()->GetMarkData());
    2711         647 :     const SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
    2712         647 :     if (!pFormatter)
    2713           0 :         return nType;
    2714             : 
    2715             :     // TODO: Find out how to get a selected table range in case multiple tables
    2716             :     // are selected.  Currently we only check for the current active table.
    2717             : 
    2718         647 :     if ( aMark.IsMarked() || aMark.IsMultiMarked() )
    2719             :     {
    2720           0 :         aMark.MarkToMulti();
    2721           0 :         ScRange aRange;
    2722           0 :         aMark.GetMultiMarkArea(aRange);
    2723             : 
    2724           0 :         const ScMarkArray* pArray = aMark.GetArray();
    2725           0 :         if (!pArray)
    2726           0 :             return nType;
    2727             : 
    2728           0 :         short nComboType = css::util::NumberFormat::ALL;
    2729           0 :         bool bFirstItem = true;
    2730           0 :         for (SCCOL nCol = aRange.aStart.Col(); nCol <= aRange.aEnd.Col(); ++nCol)
    2731             :         {
    2732           0 :             const ScMarkArray& rColArray = pArray[nCol];
    2733           0 :             if (!rColArray.HasMarks())
    2734           0 :                 continue;
    2735             : 
    2736             :             SCROW nRow1, nRow2;
    2737           0 :             ScMarkArrayIter aMarkIter(&rColArray);
    2738           0 :             while (aMarkIter.Next(nRow1, nRow2))
    2739             :             {
    2740           0 :                 ScRange aColRange(nCol, nRow1, aRange.aStart.Tab());
    2741           0 :                 aColRange.aEnd.SetRow(nRow2);
    2742           0 :                 sal_uInt32 nNumFmt = pDoc->GetNumberFormat(aColRange);
    2743           0 :                 const SvNumberformat* pEntry = pFormatter->GetEntry(nNumFmt);
    2744           0 :                 if (!pEntry)
    2745           0 :                     return 0;
    2746             : 
    2747           0 :                 short nThisType = pEntry->GetType();
    2748           0 :                 if (bFirstItem)
    2749             :                 {
    2750           0 :                     bFirstItem = false;
    2751           0 :                     nComboType = nThisType;
    2752             :                 }
    2753           0 :                 else if (nComboType != nThisType)
    2754             :                     // mixed number format type.
    2755           0 :                     return css::util::NumberFormat::ALL;
    2756             :             }
    2757           0 :         }
    2758           0 :         nType = nComboType;
    2759             :     }
    2760             :     else
    2761             :     {
    2762             :         sal_uInt32 nNumFmt;
    2763         647 :         pDoc->GetNumberFormat( pViewData->GetCurX(), pViewData->GetCurY(),
    2764        1294 :                                pViewData->GetTabNo(), nNumFmt );
    2765         647 :         const SvNumberformat* pEntry = pFormatter->GetEntry( nNumFmt );
    2766         647 :         nType = pEntry ? pEntry->GetType() : 0;
    2767             :     }
    2768         647 :     return nType;
    2769         156 : }
    2770             : 
    2771             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11