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

Generated by: LCOV version 1.10