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

Generated by: LCOV version 1.10