LCOV - code coverage report
Current view: top level - sc/source/ui/view - tabvwsha.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 148 379 39.1 %
Date: 2014-11-03 Functions: 8 13 61.5 %
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 "scitems.hxx"
      21             : #include <svl/stritem.hxx>
      22             : #include <svl/whiter.hxx>
      23             : #include <svl/zformat.hxx>
      24             : #include <editeng/boxitem.hxx>
      25             : #include <svx/numinf.hxx>
      26             : #include <svl/srchitem.hxx>
      27             : #include <svl/ilstitem.hxx>
      28             : #include <svl/int64item.hxx>
      29             : #include <svx/zoomslideritem.hxx>
      30             : #include <sfx2/bindings.hxx>
      31             : #include <sfx2/viewfrm.hxx>
      32             : #include <sfx2/dispatch.hxx>
      33             : #include <sfx2/request.hxx>
      34             : #include <vcl/msgbox.hxx>
      35             : 
      36             : #include "global.hxx"
      37             : #include "attrib.hxx"
      38             : #include "patattr.hxx"
      39             : #include "document.hxx"
      40             : #include "formulacell.hxx"
      41             : #include "globstr.hrc"
      42             : #include "scmod.hxx"
      43             : #include "inputhdl.hxx"
      44             : #include "inputwin.hxx"
      45             : #include "docsh.hxx"
      46             : #include "viewdata.hxx"
      47             : #include "appoptio.hxx"
      48             : #include "sc.hrc"
      49             : #include "stlpool.hxx"
      50             : #include "tabvwsh.hxx"
      51             : #include "dwfunctr.hxx"
      52             : #include "scabstdlg.hxx"
      53             : #include "compiler.hxx"
      54             : #include "markdata.hxx"
      55             : #include "cellvalue.hxx"
      56             : #include "tokenarray.hxx"
      57             : 
      58             : #include <com/sun/star/table/BorderLineStyle.hpp>
      59             : 
      60             : #include <boost/scoped_ptr.hpp>
      61             : 
      62             : using namespace com::sun::star;
      63             : 
      64         374 : bool ScTabViewShell::GetFunction( OUString& rFuncStr, sal_uInt16 nErrCode )
      65             : {
      66         374 :     OUString aStr;
      67             : 
      68         374 :     ScSubTotalFunc eFunc = (ScSubTotalFunc) SC_MOD()->GetAppOptions().GetStatusFunc();
      69         374 :     ScViewData& rViewData   = GetViewData();
      70         374 :     ScMarkData& rMark       = rViewData.GetMarkData();
      71         374 :     bool bIgnoreError = (rMark.IsMarked() || rMark.IsMultiMarked());
      72             : 
      73         374 :     if (bIgnoreError && (eFunc == SUBTOTAL_FUNC_CNT || eFunc == SUBTOTAL_FUNC_CNT2))
      74           0 :         nErrCode = 0;
      75             : 
      76         374 :     if (nErrCode)
      77             :     {
      78           0 :         rFuncStr = ScGlobal::GetLongErrorString(nErrCode);
      79           0 :         return true;
      80             :     }
      81             : 
      82         374 :     sal_uInt16 nGlobStrId = 0;
      83         374 :     switch (eFunc)
      84             :     {
      85           0 :         case SUBTOTAL_FUNC_AVE:  nGlobStrId = STR_FUN_TEXT_AVG; break;
      86           0 :         case SUBTOTAL_FUNC_CNT:  nGlobStrId = STR_FUN_TEXT_COUNT; break;
      87           0 :         case SUBTOTAL_FUNC_CNT2: nGlobStrId = STR_FUN_TEXT_COUNT2; break;
      88           0 :         case SUBTOTAL_FUNC_MAX:  nGlobStrId = STR_FUN_TEXT_MAX; break;
      89           0 :         case SUBTOTAL_FUNC_MIN:  nGlobStrId = STR_FUN_TEXT_MIN; break;
      90         322 :         case SUBTOTAL_FUNC_SUM:  nGlobStrId = STR_FUN_TEXT_SUM; break;
      91          52 :         case SUBTOTAL_FUNC_SELECTION_COUNT: nGlobStrId = STR_FUN_TEXT_SELECTION_COUNT; break;
      92             : 
      93             :         default:
      94             :         {
      95             :             // added to avoid warnings
      96             :         }
      97             :     }
      98         374 :     if (nGlobStrId)
      99             :     {
     100         374 :         ScDocument* pDoc        = rViewData.GetDocument();
     101         374 :         SCCOL       nPosX       = rViewData.GetCurX();
     102         374 :         SCROW       nPosY       = rViewData.GetCurY();
     103         374 :         SCTAB       nTab        = rViewData.GetTabNo();
     104             : 
     105         374 :         aStr = ScGlobal::GetRscString(nGlobStrId);
     106         374 :         aStr += "=";
     107             : 
     108         374 :         ScAddress aCursor( nPosX, nPosY, nTab );
     109             :         double nVal;
     110         374 :         if ( pDoc->GetSelectionFunction( eFunc, aCursor, rMark, nVal ) )
     111             :         {
     112         374 :             if ( nVal == 0.0 )
     113         314 :                 aStr += "0";
     114             :             else
     115             :             {
     116             :                 // Number in the standard format, the other on the cursor position
     117          60 :                 SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
     118          60 :                 sal_uInt32 nNumFmt = 0;
     119          60 :                 if ( eFunc != SUBTOTAL_FUNC_CNT && eFunc != SUBTOTAL_FUNC_CNT2 && eFunc != SUBTOTAL_FUNC_SELECTION_COUNT)
     120             :                 {
     121             :                     //  Zahlformat aus Attributen oder Formel
     122           8 :                     pDoc->GetNumberFormat( nPosX, nPosY, nTab, nNumFmt );
     123             :                 }
     124             : 
     125          60 :                 OUString aValStr;
     126             :                 Color* pDummy;
     127          60 :                 pFormatter->GetOutputString( nVal, nNumFmt, aValStr, &pDummy );
     128          60 :                 aStr += aValStr;
     129             :             }
     130             :         }
     131             : 
     132         374 :         rFuncStr = aStr;
     133         374 :         return true;
     134             :     }
     135             : 
     136           0 :     return false;
     137             : }
     138             : 
     139             : //  Functions that are disabled, depending on the selection
     140             : //  Default:
     141             : //      SID_DELETE,
     142             : //      SID_DELETE_CONTENTS,
     143             : //      FID_DELETE_CELL
     144             : //      FID_VALIDATION
     145             : 
     146        1622 : void ScTabViewShell::GetState( SfxItemSet& rSet )
     147             : {
     148        1622 :     ScViewData& rViewData   = GetViewData();
     149        1622 :     ScDocument* pDoc        = rViewData.GetDocument();
     150        1622 :     ScDocShell* pDocShell   = rViewData.GetDocShell();
     151        1622 :     ScMarkData& rMark       = rViewData.GetMarkData();
     152        1622 :     SCCOL       nPosX       = rViewData.GetCurX();
     153        1622 :     SCROW       nPosY       = rViewData.GetCurY();
     154        1622 :     SCTAB       nTab        = rViewData.GetTabNo();
     155        1622 :     sal_uInt16  nMyId       = 0;
     156             : 
     157        1622 :     SfxViewFrame* pThisFrame = GetViewFrame();
     158        1622 :     bool bOle = GetViewFrame()->GetFrame().IsInPlace();
     159             : 
     160        1622 :     SCTAB nTabSelCount = rMark.GetSelectCount();
     161             : 
     162        1622 :     SfxWhichIter    aIter(rSet);
     163        1622 :     sal_uInt16          nWhich = aIter.FirstWhich();
     164             : 
     165        4926 :     while ( nWhich )
     166             :     {
     167        1682 :         switch ( nWhich )
     168             :         {
     169             :             case FID_CHG_COMMENT:
     170             :                 {
     171           0 :                     ScDocShell* pDocSh = GetViewData().GetDocShell();
     172           0 :                     ScAddress aPos( nPosX, nPosY, nTab );
     173           0 :                     if ( pDocSh->IsReadOnly() || !pDocSh->GetChangeAction(aPos) || pDocSh->IsDocShared() )
     174           0 :                         rSet.DisableItem( nWhich );
     175             :                 }
     176           0 :                 break;
     177             : 
     178             :             case SID_OPENDLG_EDIT_PRINTAREA:
     179             :             case SID_ADD_PRINTAREA:
     180             :             case SID_DEFINE_PRINTAREA:
     181             :                 {
     182           0 :                     if ( pDocShell && pDocShell->IsDocShared() )
     183             :                     {
     184           0 :                         rSet.DisableItem( nWhich );
     185             :                     }
     186             :                 }
     187           0 :                 break;
     188             : 
     189             :             case SID_DELETE_PRINTAREA:
     190           0 :                 if ( pDocShell && pDocShell->IsDocShared() )
     191             :                 {
     192           0 :                     rSet.DisableItem( nWhich );
     193             :                 }
     194           0 :                 else if (pDoc->IsPrintEntireSheet(nTab))
     195           0 :                     rSet.DisableItem(nWhich);
     196           0 :                 break;
     197             : 
     198             :             case SID_STATUS_PAGESTYLE:
     199             :             case SID_HFEDIT:
     200         384 :                 GetViewData().GetDocShell()->GetStatePageStyle( *this, rSet, nTab );
     201         384 :                 break;
     202             : 
     203             :             case SID_SEARCH_ITEM:
     204             :             {
     205           0 :                 SvxSearchItem aItem(ScGlobal::GetSearchItem()); // make a copy.
     206             :                 // Search on current selection if a range is marked.
     207           0 :                 aItem.SetSelection(rMark.IsMarked());
     208           0 :                 rSet.Put(aItem);
     209           0 :                 break;
     210             :             }
     211             : 
     212             :             case SID_SEARCH_OPTIONS:
     213             :                 {
     214             :                     // Anything goes
     215           0 :                     sal_uInt16 nOptions = 0xffff;
     216             : 
     217             :                     // No replacement if ReadOnly
     218           0 :                     if (GetViewData().GetDocShell()->IsReadOnly())
     219           0 :                         nOptions &= ~( SEARCH_OPTIONS_REPLACE | SEARCH_OPTIONS_REPLACE_ALL );
     220           0 :                     rSet.Put( SfxUInt16Item( nWhich, nOptions ) );
     221             :                 }
     222           0 :                 break;
     223             : 
     224             :             case SID_CURRENTCELL:
     225             :                 {
     226           2 :                     ScAddress aScAddress( GetViewData().GetCurX(), GetViewData().GetCurY(), 0 );
     227           2 :                     OUString  aAddr(aScAddress.Format(SCA_ABS, NULL, pDoc->GetAddressConvention()));
     228           4 :                     SfxStringItem   aPosItem( SID_CURRENTCELL, aAddr );
     229             : 
     230           4 :                     rSet.Put( aPosItem );
     231             :                 }
     232           2 :                 break;
     233             : 
     234             :             case SID_CURRENTTAB:
     235             :                 // Table for Basic is 1-based
     236           0 :                 rSet.Put( SfxUInt16Item( nWhich, static_cast<sal_uInt16>(GetViewData().GetTabNo()) + 1 ) );
     237           0 :                 break;
     238             : 
     239             :             case SID_CURRENTDOC:
     240           0 :                 rSet.Put( SfxStringItem( nWhich, GetViewData().GetDocShell()->GetTitle() ) );
     241           0 :                 break;
     242             : 
     243             :             case FID_TOGGLEINPUTLINE:
     244             :                 {
     245           0 :                     sal_uInt16 nId = ScInputWindowWrapper::GetChildWindowId();
     246             : 
     247           0 :                     if ( pThisFrame->KnowsChildWindow( nId ) )
     248             :                     {
     249           0 :                         SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
     250           0 :                         rSet.Put( SfxBoolItem( nWhich, pWnd ? sal_True : false ) );
     251             :                     }
     252             :                     else
     253           0 :                         rSet.DisableItem( nWhich );
     254             :                 }
     255           0 :                 break;
     256             : 
     257             :             case FID_DEL_MANUALBREAKS:
     258           0 :                 if (!pDoc->HasManualBreaks(nTab))
     259           0 :                     rSet.DisableItem( nWhich );
     260           0 :                 break;
     261             : 
     262             :             case FID_RESET_PRINTZOOM:
     263             :                 {
     264             :                     // disable if already set to default
     265             : 
     266           0 :                     OUString aStyleName = pDoc->GetPageStyle( nTab );
     267           0 :                     ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
     268             :                     SfxStyleSheetBase* pStyleSheet = pStylePool->Find( aStyleName,
     269           0 :                                                     SFX_STYLE_FAMILY_PAGE );
     270             :                     OSL_ENSURE( pStyleSheet, "PageStyle not found" );
     271           0 :                     if ( pStyleSheet )
     272             :                     {
     273           0 :                         SfxItemSet& rStyleSet = pStyleSheet->GetItemSet();
     274             :                         sal_uInt16 nScale = static_cast<const SfxUInt16Item&>(
     275           0 :                                             rStyleSet.Get(ATTR_PAGE_SCALE)).GetValue();
     276             :                         sal_uInt16 nPages = static_cast<const SfxUInt16Item&>(
     277           0 :                                             rStyleSet.Get(ATTR_PAGE_SCALETOPAGES)).GetValue();
     278           0 :                         if ( nScale == 100 && nPages == 0 )
     279           0 :                             rSet.DisableItem( nWhich );
     280           0 :                     }
     281             :                 }
     282           0 :                 break;
     283             : 
     284             :             case FID_SCALE:
     285             :             case SID_ATTR_ZOOM:
     286         616 :                 if ( bOle )
     287           0 :                     rSet.DisableItem( nWhich );
     288             :                 else
     289             :                 {
     290         616 :                     const Fraction& rOldY = GetViewData().GetZoomY();
     291         616 :                     sal_uInt16 nZoom = (sal_uInt16)(( rOldY.GetNumerator() * 100 )
     292         616 :                                                 / rOldY.GetDenominator());
     293         616 :                     rSet.Put( SvxZoomItem( SVX_ZOOM_PERCENT, nZoom, nWhich ) );
     294             :                 }
     295         616 :                 break;
     296             : 
     297             :             case SID_ATTR_ZOOMSLIDER:
     298             :                 {
     299         384 :                     if ( bOle )
     300           0 :                         rSet.DisableItem( nWhich );
     301             :                     else
     302             :                     {
     303         384 :                         const Fraction& rOldY = GetViewData().GetZoomY();
     304         384 :                         sal_uInt16 nCurrentZoom = (sal_uInt16)(( rOldY.GetNumerator() * 100 ) / rOldY.GetDenominator());
     305             : 
     306         384 :                         if( nCurrentZoom )
     307             :                         {
     308         384 :                             SvxZoomSliderItem aZoomSliderItem( nCurrentZoom, MINZOOM, MAXZOOM, SID_ATTR_ZOOMSLIDER );
     309         384 :                             aZoomSliderItem.AddSnappingPoint( 100 );
     310         384 :                             rSet.Put( aZoomSliderItem );
     311             :                         }
     312             :                     }
     313             :                 }
     314         384 :                 break;
     315             : 
     316             :             case FID_TOGGLESYNTAX:
     317           0 :                 rSet.Put(SfxBoolItem(nWhich, GetViewData().IsSyntaxMode()));
     318           0 :                 break;
     319             : 
     320             :             case FID_TOGGLEHEADERS:
     321           0 :                 rSet.Put(SfxBoolItem(nWhich, GetViewData().IsHeaderMode()));
     322           0 :                 break;
     323             : 
     324             :             case FID_TOGGLEFORMULA:
     325             :                 {
     326           0 :                     const ScViewOptions& rOpts = rViewData.GetOptions();
     327           0 :                     bool bFormulaMode = rOpts.GetOption( VOPT_FORMULAS );
     328           0 :                     rSet.Put(SfxBoolItem(nWhich, bFormulaMode ));
     329             :                 }
     330           0 :                 break;
     331             : 
     332             :             case FID_NORMALVIEWMODE:
     333             :             case FID_PAGEBREAKMODE:
     334             :                 // always handle both slots - they exclude each other
     335           4 :                 if ( bOle )
     336             :                 {
     337           0 :                     rSet.DisableItem( FID_NORMALVIEWMODE );
     338           0 :                     rSet.DisableItem( FID_PAGEBREAKMODE );
     339             :                 }
     340             :                 else
     341             :                 {
     342           4 :                     rSet.Put(SfxBoolItem(FID_NORMALVIEWMODE, !GetViewData().IsPagebreakMode()));
     343           4 :                     rSet.Put(SfxBoolItem(FID_PAGEBREAKMODE, GetViewData().IsPagebreakMode()));
     344             :                 }
     345           4 :                 break;
     346             : 
     347             :             case FID_FUNCTION_BOX:
     348           0 :                 nMyId = ScFunctionChildWindow::GetChildWindowId();
     349           0 :                 rSet.Put(SfxBoolItem(FID_FUNCTION_BOX, pThisFrame->HasChildWindow(nMyId)));
     350           0 :                 break;
     351             : 
     352             :             case FID_PROTECT_DOC:
     353             :                 {
     354           0 :                     if ( pDocShell && pDocShell->IsDocShared() )
     355             :                     {
     356           0 :                         rSet.DisableItem( nWhich );
     357             :                     }
     358             :                     else
     359             :                     {
     360           0 :                         rSet.Put( SfxBoolItem( nWhich, pDoc->IsDocProtected() ) );
     361             :                     }
     362             :                 }
     363           0 :                 break;
     364             : 
     365             :             case FID_PROTECT_TABLE:
     366             :                 {
     367           0 :                     if ( pDocShell && pDocShell->IsDocShared() )
     368             :                     {
     369           0 :                         rSet.DisableItem( nWhich );
     370             :                     }
     371             :                     else
     372             :                     {
     373           0 :                         rSet.Put( SfxBoolItem( nWhich, pDoc->IsTabProtected( nTab ) ) );
     374             :                     }
     375             :                 }
     376           0 :                 break;
     377             : 
     378             :             case SID_AUTO_OUTLINE:
     379             :                 {
     380           0 :                     if (pDoc->GetChangeTrack()!=NULL || GetViewData().IsMultiMarked())
     381             :                     {
     382           0 :                         rSet.DisableItem( nWhich );
     383             :                     }
     384             :                 }
     385           0 :                 break;
     386             : 
     387             :             case SID_OUTLINE_DELETEALL:
     388             :                 {
     389           0 :                     SCTAB nOlTab = GetViewData().GetTabNo();
     390           0 :                     ScOutlineTable* pOlTable = pDoc->GetOutlineTable( nOlTab );
     391           0 :                     if (pOlTable == NULL)
     392           0 :                         rSet.DisableItem( nWhich );
     393             :                 }
     394           0 :                 break;
     395             : 
     396             :             case SID_WINDOW_SPLIT:
     397             :                 rSet.Put(SfxBoolItem(nWhich,
     398          16 :                             rViewData.GetHSplitMode() == SC_SPLIT_NORMAL ||
     399          16 :                             rViewData.GetVSplitMode() == SC_SPLIT_NORMAL ));
     400           8 :                 break;
     401             : 
     402             :             case SID_WINDOW_FIX:
     403             :                 rSet.Put(SfxBoolItem(nWhich,
     404           0 :                             rViewData.GetHSplitMode() == SC_SPLIT_FIX ||
     405           0 :                             rViewData.GetVSplitMode() == SC_SPLIT_FIX ));
     406           0 :                 break;
     407             : 
     408             :             case FID_CHG_SHOW:
     409             :                 {
     410           0 :                     if ( pDoc->GetChangeTrack() == NULL || ( pDocShell && pDocShell->IsDocShared() ) )
     411           0 :                         rSet.DisableItem( nWhich );
     412             :                 }
     413           0 :                 break;
     414             :             case FID_CHG_ACCEPT:
     415             :                 {
     416             :                     rSet.Put(SfxBoolItem(FID_CHG_ACCEPT,
     417           0 :                             pThisFrame->HasChildWindow(FID_CHG_ACCEPT)));
     418           0 :                     if(pDoc->GetChangeTrack()==NULL)
     419             :                     {
     420           0 :                         if ( !pThisFrame->HasChildWindow(FID_CHG_ACCEPT) )
     421             :                         {
     422           0 :                             rSet.DisableItem( nWhich);
     423             :                         }
     424             :                     }
     425           0 :                     if ( pDocShell && pDocShell->IsDocShared() )
     426             :                     {
     427           0 :                         rSet.DisableItem( nWhich );
     428             :                     }
     429             :                 }
     430           0 :                 break;
     431             : 
     432             :             case SID_FORMATPAGE:
     433             :                 // in protected tables
     434           0 :                 if ( pDocShell && ( pDocShell->IsReadOnly() || pDocShell->IsDocShared() ) )
     435           0 :                     rSet.DisableItem( nWhich );
     436           0 :                 break;
     437             : 
     438             :             case SID_PRINTPREVIEW:
     439             :                 // Toggle slot needs a State
     440         284 :                 rSet.Put( SfxBoolItem( nWhich, false ) );
     441         284 :                 break;
     442             : 
     443             :             case SID_READONLY_MODE:
     444           0 :                 rSet.Put( SfxBoolItem( nWhich, GetViewData().GetDocShell()->IsReadOnly() ) );
     445           0 :                 break;
     446             : 
     447             :             case FID_TAB_DESELECTALL:
     448           0 :                 if ( nTabSelCount == 1 )
     449           0 :                     rSet.DisableItem( nWhich );     // enabled only if several sheets are selected
     450           0 :                 break;
     451             : 
     452             :         } // switch ( nWitch )
     453        1682 :         nWhich = aIter.NextWhich();
     454        1622 :     } // while ( nWitch )
     455        1622 : }
     456             : 
     457           0 : void ScTabViewShell::ExecuteCellFormatDlg(SfxRequest& rReq, const OString &rName)
     458             : {
     459           0 :     ScDocument*             pDoc    = GetViewData().GetDocument();
     460             : 
     461           0 :     SvxBoxItem              aLineOuter( ATTR_BORDER );
     462           0 :     SvxBoxInfoItem          aLineInner( ATTR_BORDER_INNER );
     463             : 
     464           0 :     const ScPatternAttr*    pOldAttrs       = GetSelectionPattern();
     465             : 
     466           0 :     boost::scoped_ptr<SfxAbstractTabDialog> pDlg;
     467           0 :     boost::scoped_ptr<SfxItemSet> pOldSet(new SfxItemSet(pOldAttrs->GetItemSet()));
     468           0 :     boost::scoped_ptr<SvxNumberInfoItem> pNumberInfoItem;
     469             : 
     470           0 :     pOldSet->MergeRange(SID_ATTR_BORDER_STYLES, SID_ATTR_BORDER_DEFAULT_WIDTH);
     471             : 
     472             :     // We only allow these border line types.
     473           0 :     std::vector<sal_Int32> aBorderStyles;
     474           0 :     aBorderStyles.reserve(5);
     475           0 :     aBorderStyles.push_back(table::BorderLineStyle::SOLID);
     476           0 :     aBorderStyles.push_back(table::BorderLineStyle::DOTTED);
     477           0 :     aBorderStyles.push_back(table::BorderLineStyle::DASHED);
     478           0 :     aBorderStyles.push_back(table::BorderLineStyle::FINE_DASHED);
     479           0 :     aBorderStyles.push_back(table::BorderLineStyle::DASH_DOT);
     480           0 :     aBorderStyles.push_back(table::BorderLineStyle::DASH_DOT_DOT);
     481           0 :     aBorderStyles.push_back(table::BorderLineStyle::DOUBLE_THIN);
     482             : 
     483           0 :     SfxIntegerListItem aBorderStylesItem(SID_ATTR_BORDER_STYLES, aBorderStyles);
     484           0 :     pOldSet->Put(aBorderStylesItem);
     485             : 
     486             :     // Set the default border width to 0.75 points.
     487           0 :     SfxInt64Item aBorderWidthItem(SID_ATTR_BORDER_DEFAULT_WIDTH, 75);
     488           0 :     pOldSet->Put(aBorderWidthItem);
     489             : 
     490             :     // Get border items and put them in the set:
     491           0 :     GetSelectionFrame( aLineOuter, aLineInner );
     492             :     //Fix border incorrect for RTL fdo#62399
     493           0 :     if( pDoc->IsLayoutRTL( GetViewData().GetTabNo() ) )
     494             :     {
     495           0 :         SvxBoxItem     aNewFrame( aLineOuter );
     496           0 :         SvxBoxInfoItem aTempInfo( aLineInner );
     497             : 
     498           0 :         if ( aLineInner.IsValid(VALID_LEFT) )
     499           0 :             aNewFrame.SetLine( aLineOuter.GetLeft(), BOX_LINE_RIGHT );
     500           0 :         if ( aLineInner.IsValid(VALID_RIGHT) )
     501           0 :             aNewFrame.SetLine( aLineOuter.GetRight(), BOX_LINE_LEFT );
     502             : 
     503           0 :         aLineInner.SetValid( VALID_LEFT, aTempInfo.IsValid(VALID_RIGHT));
     504           0 :         aLineInner.SetValid( VALID_RIGHT, aTempInfo.IsValid(VALID_LEFT));
     505             : 
     506           0 :         pOldSet->Put( aNewFrame );
     507             :     }
     508             :     else
     509           0 :         pOldSet->Put( aLineOuter );
     510             : 
     511           0 :     pOldSet->Put( aLineInner );
     512             : 
     513             :     // Generate NumberFormat Value from Value and Language and box it.
     514             :     pOldSet->Put( SfxUInt32Item( ATTR_VALUE_FORMAT,
     515           0 :         pOldAttrs->GetNumberFormat( pDoc->GetFormatTable() ) ) );
     516             : 
     517           0 :     pNumberInfoItem.reset(MakeNumberInfoItem(pDoc, &GetViewData()));
     518             : 
     519           0 :     pOldSet->MergeRange( SID_ATTR_NUMBERFORMAT_INFO, SID_ATTR_NUMBERFORMAT_INFO );
     520           0 :     pOldSet->Put(*pNumberInfoItem );
     521             : 
     522           0 :     bInFormatDialog = true;
     523           0 :     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     524             :     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     525             : 
     526           0 :     pDlg.reset(pFact->CreateScAttrDlg(GetViewFrame(), GetDialogParent(), pOldSet.get()));
     527             : 
     528           0 :     if (!rName.isEmpty())
     529           0 :         pDlg->SetCurPageId(rName);
     530           0 :     short nResult = pDlg->Execute();
     531           0 :     bInFormatDialog = false;
     532             : 
     533           0 :     if ( nResult == RET_OK )
     534             :     {
     535           0 :         const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
     536             : 
     537           0 :         const SfxPoolItem* pItem=NULL;
     538           0 :         if(pOutSet->GetItemState(SID_ATTR_NUMBERFORMAT_INFO,true,&pItem)==SfxItemState::SET)
     539             :         {
     540             : 
     541           0 :             UpdateNumberFormatter(static_cast<const SvxNumberInfoItem&>(*pItem));
     542             :         }
     543             : 
     544           0 :         ApplyAttributes(pOutSet, pOldSet.get());
     545             : 
     546           0 :         rReq.Done( *pOutSet );
     547           0 :     }
     548           0 : }
     549             : 
     550         944 : bool ScTabViewShell::IsRefInputMode() const
     551             : {
     552         944 :     ScModule* pScMod = SC_MOD();
     553         944 :     if ( pScMod )
     554             :     {
     555         944 :         if( pScMod->IsRefDialogOpen() )
     556           0 :             return pScMod->IsFormulaMode();
     557         944 :         if( pScMod->IsFormulaMode() )
     558             :         {
     559           0 :             ScInputHandler* pHdl = pScMod->GetInputHdl();
     560           0 :             if ( pHdl )
     561             :             {
     562           0 :                 OUString aString = pHdl->GetEditString();
     563           0 :                 if ( !pHdl->GetSelIsRef() && aString.getLength() > 1 &&
     564           0 :                      ( aString[0] == '+' || aString[0] == '-' ) )
     565             :                 {
     566           0 :                     const ScViewData& rViewData = GetViewData();
     567           0 :                     ScDocument* pDoc = rViewData.GetDocument();
     568           0 :                     if ( pDoc )
     569             :                     {
     570           0 :                         const ScAddress aPos( rViewData.GetCurPos() );
     571           0 :                         ScCompiler aComp( pDoc, aPos );
     572           0 :                         aComp.SetGrammar(pDoc->GetGrammar());
     573           0 :                         aComp.SetCloseBrackets( false );
     574           0 :                         boost::scoped_ptr<ScTokenArray> pArr(aComp.CompileString(aString));
     575           0 :                         if ( pArr && pArr->MayReferenceFollow() )
     576             :                         {
     577           0 :                             return true;
     578           0 :                         }
     579             :                     }
     580             :                 }
     581             :                 else
     582             :                 {
     583           0 :                     return true;
     584           0 :                 }
     585             :             }
     586             :         }
     587             :     }
     588             : 
     589         944 :     return false;
     590             : }
     591             : 
     592          22 : void ScTabViewShell::ExecuteInputDirect()
     593             : {
     594          22 :     if ( !IsRefInputMode() )
     595             :     {
     596          22 :         ScModule* pScMod = SC_MOD();
     597          22 :         if ( pScMod )
     598             :         {
     599          22 :             pScMod->InputEnterHandler();
     600             :         }
     601             :     }
     602          22 : }
     603             : 
     604        3827 : void ScTabViewShell::UpdateInputHandler( bool bForce /* = sal_False */, bool bStopEditing /* = sal_True */ )
     605             : {
     606        3827 :     ScInputHandler* pHdl = pInputHandler ? pInputHandler : SC_MOD()->GetInputHdl();
     607             : 
     608        3827 :     if ( pHdl )
     609             :     {
     610        3827 :         OUString                aString;
     611        3827 :         const EditTextObject*   pObject     = NULL;
     612        3827 :         ScViewData&             rViewData   = GetViewData();
     613        3827 :         ScDocument*             pDoc        = rViewData.GetDocument();
     614             :         CellType                eType;
     615        3827 :         SCCOL                   nPosX       = rViewData.GetCurX();
     616        3827 :         SCROW                   nPosY       = rViewData.GetCurY();
     617        3827 :         SCTAB                   nTab        = rViewData.GetTabNo();
     618        3827 :         SCTAB                   nStartTab   = 0;
     619        3827 :         SCTAB                   nEndTab     = 0;
     620        3827 :         SCCOL                   nStartCol   = 0;
     621        3827 :         SCROW                   nStartRow   = 0;
     622        3827 :         SCCOL                   nEndCol     = 0;
     623        3827 :         SCROW                   nEndRow     = 0;
     624        3827 :         ScAddress aPos = rViewData.GetCurPos();
     625             : 
     626             :         rViewData.GetSimpleArea( nStartCol, nStartRow, nStartTab,
     627        3827 :                                   nEndCol,   nEndRow,   nEndTab );
     628             : 
     629        3827 :         PutInOrder( nStartCol, nEndCol );
     630        3827 :         PutInOrder( nStartRow, nEndRow );
     631        3827 :         PutInOrder( nStartTab, nEndTab );
     632             : 
     633        3827 :         bool bHideFormula = false;
     634        3827 :         bool bHideAll     = false;
     635             : 
     636        3827 :         if (pDoc->IsTabProtected(nTab))
     637             :         {
     638             :             const ScProtectionAttr* pProt = static_cast<const ScProtectionAttr*>(
     639             :                                             pDoc->GetAttr( nPosX,nPosY,nTab,
     640           0 :                                                            ATTR_PROTECTION));
     641           0 :             bHideFormula = pProt->GetHideFormula();
     642           0 :             bHideAll     = pProt->GetHideCell();
     643             :         }
     644             : 
     645        3827 :         if (!bHideAll)
     646             :         {
     647        3827 :             eType = pDoc->GetCellType(aPos);
     648        3827 :             if (eType == CELLTYPE_FORMULA)
     649             :             {
     650          50 :                 if (!bHideFormula)
     651          50 :                     pDoc->GetFormula( nPosX, nPosY, nTab, aString );
     652             :             }
     653        3777 :             else if (eType == CELLTYPE_EDIT)
     654             :             {
     655          26 :                 pObject = pDoc->GetEditText(aPos);
     656             :             }
     657             :             else
     658             :             {
     659        3751 :                 pDoc->GetInputString( nPosX, nPosY, nTab, aString );
     660        3751 :                 if (eType == CELLTYPE_STRING)
     661             :                 {
     662             :                     //  Bei Bedarf ein ' vorneweg, damit der String nicht ungewollt
     663             :                     //  als Zahl interpretiert wird, und um dem Benutzer zu zeigen,
     664             :                     //  dass es ein String ist (#35060#).
     665             :                     //! Auch bei Zahlformat "Text"? -> dann beim Editieren wegnehmen
     666             : 
     667         356 :                     SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
     668             :                     sal_uInt32 nNumFmt;
     669         356 :                     pDoc->GetNumberFormat( nPosX, nPosY, nTab, nNumFmt );
     670             :                     double fDummy;
     671         356 :                     if ( pFormatter->IsNumberFormat(aString, nNumFmt, fDummy) )
     672           0 :                         aString = "'" + aString;
     673             :                 }
     674             :             }
     675             :         }
     676             : 
     677             :         ScInputHdlState aState( ScAddress( nPosX,     nPosY,     nTab ),
     678             :                                 ScAddress( nStartCol, nStartRow, nTab ),
     679             :                                 ScAddress( nEndCol,   nEndRow,   nTab ),
     680             :                                 aString,
     681        7654 :                                 pObject );
     682             : 
     683             :         //  if using the view's local input handler, this view can always be set
     684             :         //  as current view inside NotifyChange.
     685        3827 :         ScTabViewShell* pSourceSh = pInputHandler ? this : NULL;
     686             : 
     687        7654 :         pHdl->NotifyChange( &aState, bForce, pSourceSh, bStopEditing );
     688             :     }
     689             : 
     690        3827 :     SfxBindings& rBindings = GetViewFrame()->GetBindings();
     691        3827 :     rBindings.Invalidate( SID_STATUS_SUM );         // immer zusammen mit Eingabezeile
     692        3827 :     rBindings.Invalidate( SID_ATTR_SIZE );
     693        3827 :     rBindings.Invalidate( SID_TABLE_CELL );
     694        3827 : }
     695             : 
     696           0 : void ScTabViewShell::UpdateInputHandlerCellAdjust( SvxCellHorJustify eJust )
     697             : {
     698           0 :     if( ScInputHandler* pHdl = pInputHandler ? pInputHandler : SC_MOD()->GetInputHdl() )
     699           0 :         pHdl->UpdateCellAdjust( eJust );
     700           0 : }
     701             : 
     702           0 : void ScTabViewShell::ExecuteSave( SfxRequest& rReq )
     703             : {
     704             :     // only SID_SAVEDOC / SID_SAVEASDOC
     705             : 
     706             :     // Finish entering in any case, even if a formula is being processed
     707           0 :     SC_MOD()->InputEnterHandler();
     708             : 
     709           0 :     if ( GetViewData().GetDocShell()->IsDocShared() )
     710             :     {
     711           0 :         GetViewData().GetDocShell()->SetDocumentModified();
     712             :     }
     713             : 
     714             :     // otherwise as normal
     715           0 :     GetViewData().GetDocShell()->ExecuteSlot( rReq );
     716           0 : }
     717             : 
     718         484 : void ScTabViewShell::GetSaveState( SfxItemSet& rSet )
     719             : {
     720         484 :     SfxShell* pDocSh = GetViewData().GetDocShell();
     721             : 
     722         484 :     SfxWhichIter aIter(rSet);
     723         484 :     sal_uInt16 nWhich = aIter.FirstWhich();
     724        1472 :     while( nWhich )
     725             :     {
     726         504 :         if ( nWhich != SID_SAVEDOC || !GetViewData().GetDocShell()->IsDocShared() )
     727             :         {
     728             :             // get state from DocShell
     729         504 :             pDocSh->GetSlotState( nWhich, NULL, &rSet );
     730             :         }
     731         504 :         nWhich = aIter.NextWhich();
     732         484 :     }
     733         484 : }
     734             : 
     735           0 : void ScTabViewShell::ExecDrawOpt( SfxRequest& rReq )
     736             : {
     737           0 :     ScViewOptions aViewOptions = GetViewData().GetOptions();
     738           0 :     ScGridOptions aGridOptions = aViewOptions.GetGridOptions();
     739             : 
     740           0 :     SfxBindings& rBindings = GetViewFrame()->GetBindings();
     741           0 :     const SfxItemSet* pArgs = rReq.GetArgs();
     742             :     const SfxPoolItem* pItem;
     743           0 :     sal_uInt16 nSlotId = rReq.GetSlot();
     744           0 :     switch (nSlotId)
     745             :     {
     746             :         case SID_GRID_VISIBLE:
     747           0 :             if ( pArgs && pArgs->GetItemState(nSlotId,true,&pItem) == SfxItemState::SET )
     748             :             {
     749           0 :                 aGridOptions.SetGridVisible( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
     750           0 :                 aViewOptions.SetGridOptions(aGridOptions);
     751           0 :                 rBindings.Invalidate(SID_GRID_VISIBLE);
     752             :             }
     753           0 :             break;
     754             : 
     755             :         case SID_GRID_USE:
     756           0 :             if ( pArgs && pArgs->GetItemState(nSlotId,true,&pItem) == SfxItemState::SET )
     757             :             {
     758           0 :                 aGridOptions.SetUseGridSnap( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
     759           0 :                 aViewOptions.SetGridOptions(aGridOptions);
     760           0 :                 rBindings.Invalidate(SID_GRID_USE);
     761             :             }
     762           0 :             break;
     763             : 
     764             :         case SID_HELPLINES_MOVE:
     765           0 :             if ( pArgs && pArgs->GetItemState(nSlotId,true,&pItem) == SfxItemState::SET )
     766             :             {
     767           0 :                 aViewOptions.SetOption( VOPT_HELPLINES, static_cast<const SfxBoolItem*>(pItem)->GetValue() );
     768           0 :                 rBindings.Invalidate(SID_HELPLINES_MOVE);
     769             :             }
     770           0 :             break;
     771             :     }
     772             : 
     773           0 :     GetViewData().SetOptions(aViewOptions);
     774           0 : }
     775             : 
     776           0 : void ScTabViewShell::GetDrawOptState( SfxItemSet& rSet )
     777             : {
     778           0 :     SfxBoolItem aBool;
     779             : 
     780           0 :     const ScViewOptions& rViewOptions = GetViewData().GetOptions();
     781           0 :     const ScGridOptions& rGridOptions = rViewOptions.GetGridOptions();
     782             : 
     783           0 :     aBool.SetValue(rGridOptions.GetGridVisible());
     784           0 :     aBool.SetWhich( SID_GRID_VISIBLE );
     785           0 :     rSet.Put( aBool );
     786             : 
     787           0 :     aBool.SetValue(rGridOptions.GetUseGridSnap());
     788           0 :     aBool.SetWhich( SID_GRID_USE );
     789           0 :     rSet.Put( aBool );
     790             : 
     791           0 :     aBool.SetValue(rViewOptions.GetOption( VOPT_HELPLINES ));
     792           0 :     aBool.SetWhich( SID_HELPLINES_MOVE );
     793           0 :     rSet.Put( aBool );
     794         228 : }
     795             : 
     796             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10