LCOV - code coverage report
Current view: top level - sc/source/ui/view - cellsh2.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 37 622 5.9 %
Date: 2015-06-13 12:38:46 Functions: 3 7 42.9 %
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 <config_features.h>
      21             : 
      22             : #include "scitems.hxx"
      23             : #include <sfx2/viewfrm.hxx>
      24             : #include <sfx2/app.hxx>
      25             : #include <sfx2/request.hxx>
      26             : #include <svl/aeitem.hxx>
      27             : #include <basic/sbxcore.hxx>
      28             : #include <svl/whiter.hxx>
      29             : #include <svl/zforlist.hxx>
      30             : #include <vcl/msgbox.hxx>
      31             : #include <svl/stritem.hxx>
      32             : #include <svl/visitem.hxx>
      33             : #include <svtools/miscopt.hxx>
      34             : #include <unotools/moduleoptions.hxx>
      35             : 
      36             : #include <com/sun/star/frame/FrameSearchFlag.hpp>
      37             : #include <com/sun/star/sdbc/XResultSet.hpp>
      38             : 
      39             : #include "cellsh.hxx"
      40             : #include "tabvwsh.hxx"
      41             : #include "sc.hrc"
      42             : #include "globstr.hrc"
      43             : #include "global.hxx"
      44             : #include "globalnames.hxx"
      45             : #include "scmod.hxx"
      46             : #include "docsh.hxx"
      47             : #include "document.hxx"
      48             : #include "uiitems.hxx"
      49             : #include "dbfunc.hxx"
      50             : #include "dbdocfun.hxx"
      51             : #include "filtdlg.hxx"
      52             : #include "dbnamdlg.hxx"
      53             : #include "reffact.hxx"
      54             : #include "validat.hxx"
      55             : #include "scresid.hxx"
      56             : 
      57             : #include "scui_def.hxx"
      58             : #include "scabstdlg.hxx"
      59             : #include "impex.hxx"
      60             : #include "asciiopt.hxx"
      61             : #include "datastream.hxx"
      62             : #include "datastreamdlg.hxx"
      63             : #include "queryentry.hxx"
      64             : #include "markdata.hxx"
      65             : #include <documentlinkmgr.hxx>
      66             : 
      67             : #include <config_orcus.h>
      68             : 
      69             : #include <boost/scoped_ptr.hpp>
      70             : 
      71             : using namespace com::sun::star;
      72             : 
      73           0 : static bool lcl_GetTextToColumnsRange( const ScViewData* pData, ScRange& rRange )
      74             : {
      75             :     OSL_ENSURE( pData, "lcl_GetTextToColumnsRange: pData is null!" );
      76             : 
      77           0 :     bool bRet = false;
      78           0 :     const ScMarkData& rMark = pData->GetMarkData();
      79             : 
      80           0 :     if ( rMark.IsMarked() )
      81             :     {
      82           0 :         if ( !rMark.IsMultiMarked() )
      83             :         {
      84           0 :             rMark.GetMarkArea( rRange );
      85           0 :             if ( rRange.aStart.Col() == rRange.aEnd.Col() )
      86             :             {
      87           0 :                 bRet = true;
      88             :             }
      89             :         }
      90             :     }
      91             :     else
      92             :     {
      93           0 :         const SCCOL nCol = pData->GetCurX();
      94           0 :         const SCROW nRow = pData->GetCurY();
      95           0 :         const SCTAB nTab = pData->GetTabNo();
      96           0 :         rRange = ScRange( nCol, nRow, nTab, nCol, nRow, nTab );
      97           0 :         bRet = true;
      98             :     }
      99             : 
     100           0 :     const ScDocument* pDoc = pData->GetDocument();
     101             :     OSL_ENSURE( pDoc, "lcl_GetTextToColumnsRange: pDoc is null!" );
     102             : 
     103           0 :     if ( bRet && pDoc->IsBlockEmpty( rRange.aStart.Tab(), rRange.aStart.Col(),
     104           0 :                                      rRange.aStart.Row(), rRange.aEnd.Col(),
     105           0 :                                      rRange.aEnd.Row() ) )
     106             :     {
     107           0 :         bRet = false;
     108             :     }
     109             : 
     110           0 :     return bRet;
     111             : }
     112             : 
     113           0 : static bool lcl_GetSortParam( const ScViewData* pData, ScSortParam& rSortParam )
     114             : {
     115           0 :     ScTabViewShell* pTabViewShell   = pData->GetViewShell();
     116           0 :     ScDBData*   pDBData             = pTabViewShell->GetDBData();
     117           0 :     ScDocument* pDoc                = pData->GetDocument();
     118           0 :     SCTAB nTab                      = pData->GetTabNo();
     119           0 :     ScDirection eFillDir            = DIR_TOP;
     120           0 :     bool  bSort                     = true;
     121           0 :     ScRange aExternalRange;
     122             : 
     123           0 :     if( rSortParam.nCol1 != rSortParam.nCol2 )
     124           0 :         eFillDir = DIR_LEFT;
     125           0 :     if( rSortParam.nRow1 != rSortParam.nRow2 )
     126           0 :         eFillDir = DIR_TOP;
     127             : 
     128           0 :     if( rSortParam.nRow2 == MAXROW )
     129             :     {
     130             :         // Assume that user selected entire column(s), but cater for the
     131             :         // possibility that the start row is not the first row.
     132             :         SCSIZE nCount = pDoc->GetEmptyLinesInBlock( rSortParam.nCol1, rSortParam.nRow1, nTab,
     133           0 :                                                     rSortParam.nCol2, rSortParam.nRow2, nTab, eFillDir );
     134           0 :         aExternalRange = ScRange( rSortParam.nCol1,
     135           0 :                 ::std::min( rSortParam.nRow1 + sal::static_int_cast<SCROW>( nCount ), MAXROW), nTab );
     136             :     }
     137             :     else
     138           0 :         aExternalRange = ScRange( pData->GetCurX(), pData->GetCurY(), nTab );
     139             : 
     140           0 :     SCROW nStartRow = aExternalRange.aStart.Row();
     141           0 :     SCCOL nStartCol = aExternalRange.aStart.Col();
     142           0 :     SCROW nEndRow   = aExternalRange.aEnd.Row();
     143           0 :     SCCOL nEndCol   = aExternalRange.aEnd.Col();
     144           0 :     pDoc->GetDataArea( aExternalRange.aStart.Tab(), nStartCol, nStartRow, nEndCol, nEndRow, false, false );
     145           0 :     aExternalRange.aStart.SetRow( nStartRow );
     146           0 :     aExternalRange.aStart.SetCol( nStartCol );
     147           0 :     aExternalRange.aEnd.SetRow( nEndRow );
     148           0 :     aExternalRange.aEnd.SetCol( nEndCol );
     149             : 
     150           0 :     if(( rSortParam.nCol1 == rSortParam.nCol2 && aExternalRange.aStart.Col() != aExternalRange.aEnd.Col() ) ||
     151           0 :         ( rSortParam.nRow1 == rSortParam.nRow2 && aExternalRange.aStart.Row() != aExternalRange.aEnd.Row() ) )
     152             :     {
     153           0 :         sal_uInt16 nFmt = SCA_VALID;
     154             : 
     155           0 :         pTabViewShell->AddHighlightRange( aExternalRange,Color( COL_LIGHTBLUE ) );
     156           0 :         ScRange rExtendRange( aExternalRange.aStart.Col(), aExternalRange.aStart.Row(), nTab, aExternalRange.aEnd.Col(), aExternalRange.aEnd.Row(), nTab );
     157           0 :         OUString aExtendStr(rExtendRange.Format(nFmt, pDoc));
     158             : 
     159           0 :         ScRange rCurrentRange( rSortParam.nCol1, rSortParam.nRow1, nTab, rSortParam.nCol2, rSortParam.nRow2, nTab );
     160           0 :         OUString aCurrentStr(rCurrentRange.Format(nFmt, pDoc));
     161             : 
     162           0 :         ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     163             :         OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     164             : 
     165           0 :         boost::scoped_ptr<AbstractScSortWarningDlg> pWarningDlg(pFact->CreateScSortWarningDlg( pTabViewShell->GetDialogParent(), aExtendStr, aCurrentStr ));
     166             :         OSL_ENSURE(pWarningDlg, "Dialog create fail!");
     167           0 :         short bResult = pWarningDlg->Execute();
     168           0 :         if( bResult == BTN_EXTEND_RANGE || bResult == BTN_CURRENT_SELECTION )
     169             :         {
     170           0 :             if( bResult == BTN_EXTEND_RANGE )
     171             :             {
     172           0 :                 pTabViewShell->MarkRange( aExternalRange, false );
     173           0 :                 pDBData->SetArea( nTab, aExternalRange.aStart.Col(), aExternalRange.aStart.Row(), aExternalRange.aEnd.Col(), aExternalRange.aEnd.Row() );
     174             :             }
     175             :         }
     176             :         else
     177             :         {
     178           0 :             bSort = false;
     179           0 :             pData->GetDocShell()->CancelAutoDBRange();
     180             :         }
     181             : 
     182           0 :         pTabViewShell->ClearHighlightRanges();
     183             :     }
     184           0 :     return bSort;
     185             : }
     186             : 
     187             : //after end execute from !IsModalInputMode, it is safer to delay deleting
     188             : namespace
     189             : {
     190           0 :     sal_IntPtr DelayDeleteAbstractDialog( void *pAbstractDialog, void * /*pArg*/ )
     191             :     {
     192           0 :         delete static_cast<SfxAbstractTabDialog*>( pAbstractDialog );
     193           0 :         return 0;
     194             :     }
     195             : }
     196             : 
     197           0 : void ScCellShell::ExecuteDB( SfxRequest& rReq )
     198             : {
     199           0 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
     200           0 :     sal_uInt16 nSlotId = rReq.GetSlot();
     201           0 :     const SfxItemSet*   pReqArgs    = rReq.GetArgs();
     202           0 :     ScModule*           pScMod      = SC_MOD();
     203             : 
     204           0 :     pTabViewShell->HideListBox();                   // Autofilter-DropDown-Listbox
     205             : 
     206           0 :     if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
     207             :     {
     208           0 :         pScMod->InputEnterHandler();
     209           0 :         pTabViewShell->UpdateInputHandler();
     210             :     }
     211             : 
     212           0 :     switch ( nSlotId )
     213             :     {
     214             :         case SID_VIEW_DATA_SOURCE_BROWSER:
     215             :             {
     216             :                 //  check if database beamer is open
     217             : 
     218           0 :                 SfxViewFrame* pViewFrame = pTabViewShell->GetViewFrame();
     219           0 :                 bool bWasOpen = false;
     220             :                 {
     221           0 :                     uno::Reference<frame::XFrame> xFrame = pViewFrame->GetFrame().GetFrameInterface();
     222           0 :                     uno::Reference<frame::XFrame> xBeamerFrame = xFrame->findFrame(
     223             :                                                         OUString("_beamer"),
     224           0 :                                                         frame::FrameSearchFlag::CHILDREN);
     225           0 :                     if ( xBeamerFrame.is() )
     226           0 :                         bWasOpen = true;
     227             :                 }
     228             : 
     229           0 :                 if ( bWasOpen )
     230             :                 {
     231             :                     //  close database beamer: just forward to SfxViewFrame
     232             : 
     233           0 :                     pViewFrame->ExecuteSlot( rReq );
     234             :                 }
     235             :                 else
     236             :                 {
     237             :                     //  show database beamer: SfxViewFrame call must be synchronous
     238             : 
     239           0 :                     pViewFrame->ExecuteSlot( rReq, false );      // false = synchronous
     240             : 
     241             :                     //  select current database in database beamer
     242             : 
     243           0 :                     ScImportParam aImportParam;
     244           0 :                     ScDBData* pDBData = pTabViewShell->GetDBData(true,SC_DB_OLD);       // don't create if none found
     245           0 :                     if (pDBData)
     246           0 :                         pDBData->GetImportParam( aImportParam );
     247             : 
     248           0 :                     ScDBDocFunc::ShowInBeamer( aImportParam, pTabViewShell->GetViewFrame() );
     249             :                 }
     250           0 :                 rReq.Done();        // needed because it's a toggle slot
     251             :             }
     252           0 :             break;
     253             : 
     254             :         case SID_REIMPORT_DATA:
     255             :             {
     256           0 :                 bool bOk = false;
     257           0 :                 ScDBData* pDBData = pTabViewShell->GetDBData(true,SC_DB_OLD);
     258           0 :                 if (pDBData)
     259             :                 {
     260           0 :                     ScImportParam aImportParam;
     261           0 :                     pDBData->GetImportParam( aImportParam );
     262           0 :                     if (aImportParam.bImport && !pDBData->HasImportSelection())
     263             :                     {
     264           0 :                         pTabViewShell->ImportData( aImportParam );
     265           0 :                         pDBData->SetImportParam( aImportParam );    //! Undo ??
     266           0 :                         bOk = true;
     267           0 :                     }
     268             :                 }
     269             : 
     270           0 :                 if (!bOk && ! rReq.IsAPI() )
     271           0 :                     pTabViewShell->ErrorMessage(STR_REIMPORT_EMPTY);
     272             : 
     273           0 :                 if( bOk )
     274           0 :                     rReq.Done();
     275             :             }
     276           0 :             break;
     277             : 
     278             :         case SID_REFRESH_DBAREA:
     279             :             {
     280           0 :                 ScDBData* pDBData = pTabViewShell->GetDBData(true,SC_DB_OLD);
     281           0 :                 if (pDBData)
     282             :                 {
     283             :                     //  repeat import like SID_REIMPORT_DATA
     284             : 
     285           0 :                     bool bContinue = true;
     286           0 :                     ScImportParam aImportParam;
     287           0 :                     pDBData->GetImportParam( aImportParam );
     288           0 :                     if (aImportParam.bImport && !pDBData->HasImportSelection())
     289             :                     {
     290           0 :                         bContinue = pTabViewShell->ImportData( aImportParam );
     291           0 :                         pDBData->SetImportParam( aImportParam );    //! Undo ??
     292             : 
     293             :                         //  mark (size may have been changed)
     294           0 :                         ScRange aNewRange;
     295           0 :                         pDBData->GetArea(aNewRange);
     296           0 :                         pTabViewShell->MarkRange(aNewRange);
     297             :                     }
     298             : 
     299           0 :                     if ( bContinue )        // fail at import -> break
     300             :                     {
     301             :                         //  internal operations, when any stored
     302             : 
     303           0 :                         if ( pDBData->HasQueryParam() || pDBData->HasSortParam() ||
     304           0 :                                                           pDBData->HasSubTotalParam() )
     305           0 :                             pTabViewShell->RepeatDB();
     306             : 
     307             :                         //  pivot tables that have the range as data source
     308             : 
     309           0 :                         ScRange aRange;
     310           0 :                         pDBData->GetArea(aRange);
     311           0 :                         GetViewData()->GetDocShell()->RefreshPivotTables(aRange);
     312           0 :                     }
     313             :                 }
     314           0 :                 rReq.Done();
     315             :             }
     316           0 :             break;
     317             : 
     318             :         case SID_SBA_BRW_INSERT:
     319             :             {
     320             :                 OSL_FAIL( "Deprecated Slot" );
     321             :             }
     322           0 :             break;
     323             : 
     324             :         case SID_DATA_FORM:
     325             :             {
     326           0 :                 ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     327             :                 OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     328             : 
     329             :                 AbstractScDataFormDlg* pDlg = pFact->CreateScDataFormDlg(
     330           0 :                     pTabViewShell->GetDialogParent(), pTabViewShell);
     331             :                 OSL_ENSURE(pDlg, "Dialog create fail!");
     332             : 
     333           0 :                 pDlg->Execute();
     334             : 
     335           0 :                 rReq.Done();
     336             :             }
     337           0 :             break;
     338             : 
     339             :         case SID_SUBTOTALS:
     340           0 :             ExecuteSubtotals(rReq);
     341           0 :             break;
     342             : 
     343             :         case SID_SORT_DESCENDING:
     344             :         case SID_SORT_ASCENDING:
     345             :             {
     346             :                 //#i60401 ux-ctest: Calc does not support all users' strategies regarding sorting data
     347             :                 //the patch comes from maoyg
     348           0 :                 ScSortParam aSortParam;
     349           0 :                 ScDBData*   pDBData = pTabViewShell->GetDBData();
     350           0 :                 ScViewData* pData   = GetViewData();
     351             : 
     352           0 :                 pDBData->GetSortParam( aSortParam );
     353             : 
     354           0 :                 if( lcl_GetSortParam( pData, aSortParam ) )
     355             :                 {
     356           0 :                     SfxItemSet  aArgSet( GetPool(), SCITEM_SORTDATA, SCITEM_SORTDATA );
     357           0 :                     SCCOL nCol  = GetViewData()->GetCurX();
     358           0 :                     SCCOL nTab  = GetViewData()->GetTabNo();
     359           0 :                     ScDocument* pDoc    = GetViewData()->GetDocument();
     360             : 
     361           0 :                     pDBData->GetSortParam( aSortParam );
     362           0 :                     bool bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, nTab );
     363             : 
     364           0 :                     if( nCol < aSortParam.nCol1 )
     365           0 :                         nCol = aSortParam.nCol1;
     366           0 :                     else if( nCol > aSortParam.nCol2 )
     367           0 :                         nCol = aSortParam.nCol2;
     368             : 
     369           0 :                     aSortParam.bHasHeader       = bHasHeader;
     370           0 :                     aSortParam.bByRow           = true;
     371           0 :                     aSortParam.bCaseSens        = false;
     372           0 :                     aSortParam.bNaturalSort     = false;
     373           0 :                     aSortParam.bIncludePattern  = true;
     374           0 :                     aSortParam.bInplace         = true;
     375           0 :                     aSortParam.maKeyState[0].bDoSort = true;
     376           0 :                     aSortParam.maKeyState[0].nField = nCol;
     377           0 :                     aSortParam.maKeyState[0].bAscending = ( nSlotId == SID_SORT_ASCENDING );
     378             : 
     379           0 :                     for ( sal_uInt16 i=1; i<aSortParam.GetSortKeyCount(); i++ )
     380           0 :                         aSortParam.maKeyState[i].bDoSort = false;
     381             : 
     382           0 :                     aArgSet.Put( ScSortItem( SCITEM_SORTDATA, GetViewData(), &aSortParam ) );
     383             : 
     384           0 :                     pTabViewShell->UISort( aSortParam );        // subtotal when needed new
     385             : 
     386           0 :                     rReq.Done();
     387           0 :                 }
     388             :             }
     389           0 :             break;
     390             : 
     391             :         case SID_SORT:
     392             :             {
     393           0 :                 const SfxItemSet* pArgs = rReq.GetArgs();
     394             : 
     395             :                 //#i60401 ux-ctest: Calc does not support all users' strategies regarding sorting data
     396             :                 //the patch comes from maoyg
     397             : 
     398           0 :                 if ( pArgs )        // Basic
     399             :                 {
     400           0 :                     ScSortParam aSortParam;
     401           0 :                     ScDBData*   pDBData = pTabViewShell->GetDBData();
     402           0 :                     ScViewData* pData   = GetViewData();
     403             : 
     404           0 :                     pDBData->GetSortParam( aSortParam );
     405             : 
     406           0 :                     if( lcl_GetSortParam( pData, aSortParam ) )
     407             :                     {
     408           0 :                         ScDocument* pDoc = GetViewData()->GetDocument();
     409             : 
     410           0 :                         pDBData->GetSortParam( aSortParam );
     411           0 :                         bool bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, pData->GetTabNo() );
     412           0 :                         if( bHasHeader )
     413           0 :                             aSortParam.bHasHeader = bHasHeader;
     414             : 
     415           0 :                         aSortParam.bInplace = true;             // from Basic always
     416             : 
     417             :                         const SfxPoolItem* pItem;
     418           0 :                         if ( pArgs->GetItemState( SID_SORT_BYROW, true, &pItem ) == SfxItemState::SET )
     419           0 :                             aSortParam.bByRow = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     420           0 :                         if ( pArgs->GetItemState( SID_SORT_HASHEADER, true, &pItem ) == SfxItemState::SET )
     421           0 :                             aSortParam.bHasHeader = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     422           0 :                         if ( pArgs->GetItemState( SID_SORT_CASESENS, true, &pItem ) == SfxItemState::SET )
     423           0 :                             aSortParam.bCaseSens = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     424           0 :                         if ( pArgs->GetItemState( SID_SORT_NATURALSORT, true, &pItem ) == SfxItemState::SET )
     425           0 :                             aSortParam.bNaturalSort = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     426           0 :                         if ( pArgs->GetItemState( SID_SORT_ATTRIBS, true, &pItem ) == SfxItemState::SET )
     427           0 :                             aSortParam.bIncludePattern = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     428           0 :                         if ( pArgs->GetItemState( SID_SORT_USERDEF, true, &pItem ) == SfxItemState::SET )
     429             :                         {
     430           0 :                             sal_uInt16 nUserIndex = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     431           0 :                             aSortParam.bUserDef = ( nUserIndex != 0 );
     432           0 :                             if ( nUserIndex )
     433           0 :                                 aSortParam.nUserIndex = nUserIndex - 1;     // Basic: 1-based
     434             :                         }
     435             : 
     436           0 :                         SCCOLROW nField0 = 0;
     437           0 :                         if ( pArgs->GetItemState( FN_PARAM_1, true, &pItem ) == SfxItemState::SET )
     438           0 :                             nField0 = static_cast<const SfxInt32Item*>(pItem)->GetValue();
     439           0 :                         aSortParam.maKeyState[0].bDoSort = ( nField0 != 0 );
     440           0 :                         aSortParam.maKeyState[0].nField = nField0 > 0 ? (nField0-1) : 0;
     441           0 :                         if ( pArgs->GetItemState( FN_PARAM_2, true, &pItem ) == SfxItemState::SET )
     442           0 :                             aSortParam.maKeyState[0].bAscending = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     443           0 :                         SCCOLROW nField1 = 0;
     444           0 :                         if ( pArgs->GetItemState( FN_PARAM_3, true, &pItem ) == SfxItemState::SET )
     445           0 :                             nField1 = static_cast<const SfxInt32Item*>(pItem)->GetValue();
     446           0 :                         aSortParam.maKeyState[1].bDoSort = ( nField1 != 0 );
     447           0 :                         aSortParam.maKeyState[1].nField = nField1 > 0 ? (nField1-1) : 0;
     448           0 :                         if ( pArgs->GetItemState( FN_PARAM_4, true, &pItem ) == SfxItemState::SET )
     449           0 :                             aSortParam.maKeyState[1].bAscending = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     450           0 :                         SCCOLROW nField2 = 0;
     451           0 :                         if ( pArgs->GetItemState( FN_PARAM_5, true, &pItem ) == SfxItemState::SET )
     452           0 :                             nField2 = static_cast<const SfxInt32Item*>(pItem)->GetValue();
     453           0 :                         aSortParam.maKeyState[2].bDoSort = ( nField2 != 0 );
     454           0 :                         aSortParam.maKeyState[2].nField = nField2 > 0 ? (nField2-1) : 0;
     455           0 :                         if ( pArgs->GetItemState( FN_PARAM_6, true, &pItem ) == SfxItemState::SET )
     456           0 :                             aSortParam.maKeyState[2].bAscending = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     457             : 
     458             :                         // subtotal when needed new
     459           0 :                         pTabViewShell->UISort( aSortParam );
     460           0 :                         rReq.Done();
     461           0 :                     }
     462             :                 }
     463             :                 else
     464             :                 {
     465           0 :                     ScSortParam aSortParam;
     466           0 :                     ScDBData*   pDBData = pTabViewShell->GetDBData();
     467           0 :                     ScViewData* pData   = GetViewData();
     468             : 
     469           0 :                     pDBData->GetSortParam( aSortParam );
     470             : 
     471           0 :                     if( lcl_GetSortParam( pData, aSortParam ) )
     472             :                     {
     473           0 :                         ScDocument* pDoc = GetViewData()->GetDocument();
     474           0 :                         SfxItemSet  aArgSet( GetPool(), SCITEM_SORTDATA, SCITEM_SORTDATA );
     475             : 
     476           0 :                         pDBData->GetSortParam( aSortParam );
     477           0 :                         bool bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, pData->GetTabNo() );
     478           0 :                         if( bHasHeader )
     479           0 :                             aSortParam.bHasHeader = bHasHeader;
     480             : 
     481           0 :                         aArgSet.Put( ScSortItem( SCITEM_SORTDATA, GetViewData(), &aSortParam ) );
     482             : 
     483           0 :                         ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     484             :                         assert(pFact); //ScAbstractFactory create fail!
     485             : 
     486           0 :                         boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateScSortDlg(pTabViewShell->GetDialogParent(),  &aArgSet));
     487             :                         assert(pDlg); //Dialog create fail!
     488           0 :                         pDlg->SetCurPageId("criteria");  // 1=sort field tab  2=sort options tab
     489             : 
     490           0 :                         if ( pDlg->Execute() == RET_OK )
     491             :                         {
     492           0 :                             const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
     493             :                             const ScSortParam& rOutParam = static_cast<const ScSortItem&>(
     494           0 :                                 pOutSet->Get( SCITEM_SORTDATA )).GetSortData();
     495             : 
     496             :                             // subtotal when needed new
     497             : 
     498           0 :                             pTabViewShell->UISort( rOutParam );
     499             : 
     500           0 :                             if ( rOutParam.bInplace )
     501             :                             {
     502             :                                 rReq.AppendItem( SfxBoolItem( SID_SORT_BYROW,
     503           0 :                                     rOutParam.bByRow ) );
     504             :                                 rReq.AppendItem( SfxBoolItem( SID_SORT_HASHEADER,
     505           0 :                                     rOutParam.bHasHeader ) );
     506             :                                 rReq.AppendItem( SfxBoolItem( SID_SORT_CASESENS,
     507           0 :                                     rOutParam.bCaseSens ) );
     508             :                             rReq.AppendItem( SfxBoolItem( SID_SORT_NATURALSORT,
     509           0 :                                                 rOutParam.bNaturalSort ) );
     510             :                                 rReq.AppendItem( SfxBoolItem( SID_SORT_ATTRIBS,
     511           0 :                                     rOutParam.bIncludePattern ) );
     512           0 :                                 sal_uInt16 nUser = rOutParam.bUserDef ? ( rOutParam.nUserIndex + 1 ) : 0;
     513           0 :                                 rReq.AppendItem( SfxUInt16Item( SID_SORT_USERDEF, nUser ) );
     514           0 :                                 if ( rOutParam.maKeyState[0].bDoSort )
     515             :                                 {
     516             :                                     rReq.AppendItem( SfxInt32Item( FN_PARAM_1,
     517           0 :                                         rOutParam.maKeyState[0].nField + 1 ) );
     518             :                                     rReq.AppendItem( SfxBoolItem( FN_PARAM_2,
     519           0 :                                         rOutParam.maKeyState[0].bAscending ) );
     520             :                                 }
     521           0 :                                 if ( rOutParam.maKeyState[1].bDoSort )
     522             :                                 {
     523             :                                     rReq.AppendItem( SfxInt32Item( FN_PARAM_3,
     524           0 :                                         rOutParam.maKeyState[1].nField + 1 ) );
     525             :                                     rReq.AppendItem( SfxBoolItem( FN_PARAM_4,
     526           0 :                                         rOutParam.maKeyState[1].bAscending ) );
     527             :                                 }
     528           0 :                                 if ( rOutParam.maKeyState[2].bDoSort )
     529             :                                 {
     530             :                                     rReq.AppendItem( SfxInt32Item( FN_PARAM_5,
     531           0 :                                         rOutParam.maKeyState[2].nField + 1 ) );
     532             :                                     rReq.AppendItem( SfxBoolItem( FN_PARAM_6,
     533           0 :                                         rOutParam.maKeyState[2].bAscending ) );
     534             :                                 }
     535             :                             }
     536             : 
     537           0 :                             rReq.Done();
     538             :                         }
     539             :                         else
     540           0 :                             GetViewData()->GetDocShell()->CancelAutoDBRange();
     541           0 :                     }
     542             :                 }
     543             :             }
     544           0 :             break;
     545             : 
     546             :         case SID_FILTER:
     547             :             {
     548           0 :                 const SfxItemSet* pArgs = rReq.GetArgs();
     549           0 :                 if ( pArgs )
     550             :                 {
     551             :                     OSL_FAIL("SID_FILTER with arguments?");
     552             :                     pTabViewShell->Query( static_cast<const ScQueryItem&>(
     553           0 :                             pArgs->Get( SCITEM_QUERYDATA )).GetQueryData(), NULL, true );
     554           0 :                     rReq.Done();
     555             :                 }
     556             :                 else
     557             :                 {
     558           0 :                     sal_uInt16          nId  = ScFilterDlgWrapper::GetChildWindowId();
     559           0 :                     SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
     560           0 :                     SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
     561             : 
     562           0 :                     pScMod->SetRefDialog( nId, pWnd == nullptr );
     563             :                 }
     564             :             }
     565           0 :             break;
     566             : 
     567             :         case SID_SPECIAL_FILTER:
     568             :             {
     569           0 :                 const SfxItemSet* pArgs = rReq.GetArgs();
     570           0 :                 if ( pArgs )
     571             :                 {
     572             :                     OSL_FAIL("SID_SPECIAL_FILTER with arguments?");
     573             :                     pTabViewShell->Query( static_cast<const ScQueryItem&>(
     574           0 :                             pArgs->Get( SCITEM_QUERYDATA )).GetQueryData(), NULL, true );
     575           0 :                     rReq.Done();
     576             :                 }
     577             :                 else
     578             :                 {
     579           0 :                     sal_uInt16          nId  = ScSpecialFilterDlgWrapper::GetChildWindowId();
     580           0 :                     SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
     581           0 :                     SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
     582             : 
     583           0 :                     pScMod->SetRefDialog( nId, pWnd == nullptr );
     584             :                 }
     585             :             }
     586           0 :             break;
     587             : 
     588             :         case FID_FILTER_OK:
     589             :             {
     590             :                 const SfxPoolItem* pItem;
     591           0 :                 if ( pReqArgs && SfxItemState::SET ==
     592           0 :                         pReqArgs->GetItemState( SCITEM_QUERYDATA, true, &pItem ) )
     593             :                 {
     594           0 :                     const ScQueryItem& rQueryItem = static_cast<const ScQueryItem&>(*pItem);
     595             : 
     596           0 :                     SCTAB nCurTab = GetViewData()->GetTabNo();
     597           0 :                     SCTAB nRefTab = GetViewData()->GetRefTabNo();
     598             : 
     599             :                     // If RefInput switched to a different sheet from the data sheet,
     600             :                     // switch back:
     601             : 
     602           0 :                     if ( nCurTab != nRefTab )
     603             :                     {
     604           0 :                         pTabViewShell->SetTabNo( nRefTab );
     605           0 :                         pTabViewShell->PaintExtras();
     606             :                     }
     607             : 
     608           0 :                     ScRange aAdvSource;
     609           0 :                     if (rQueryItem.GetAdvancedQuerySource(aAdvSource))
     610           0 :                         pTabViewShell->Query( rQueryItem.GetQueryData(), &aAdvSource, true );
     611             :                     else
     612           0 :                         pTabViewShell->Query( rQueryItem.GetQueryData(), NULL, true );
     613           0 :                     rReq.Done( *pReqArgs );
     614             :                 }
     615             :             }
     616           0 :             break;
     617             : 
     618             :         case SID_UNFILTER:
     619             :             {
     620           0 :                 ScQueryParam aParam;
     621           0 :                 ScDBData*    pDBData = pTabViewShell->GetDBData();
     622             : 
     623           0 :                 pDBData->GetQueryParam( aParam );
     624           0 :                 SCSIZE nEC = aParam.GetEntryCount();
     625           0 :                 for (SCSIZE i=0; i<nEC; i++)
     626           0 :                     aParam.GetEntry(i).bDoQuery = false;
     627           0 :                 aParam.bDuplicate = true;
     628           0 :                 pTabViewShell->Query( aParam, NULL, true );
     629           0 :                 rReq.Done();
     630             :             }
     631           0 :             break;
     632             : 
     633             :         case SID_AUTO_FILTER:
     634           0 :             pTabViewShell->ToggleAutoFilter();
     635           0 :             rReq.Done();
     636           0 :             break;
     637             : 
     638             :         case SID_AUTOFILTER_HIDE:
     639           0 :             pTabViewShell->HideAutoFilter();
     640           0 :             rReq.Done();
     641           0 :             break;
     642             : 
     643             :         case SID_PIVOT_TABLE:
     644             :             {
     645             :                 const SfxPoolItem* pItem;
     646           0 :                 if ( pReqArgs && SfxItemState::SET ==
     647           0 :                         pReqArgs->GetItemState( SCITEM_PIVOTDATA, true, &pItem ) )
     648             :                 {
     649           0 :                     SCTAB nCurTab = GetViewData()->GetTabNo();
     650           0 :                     SCTAB nRefTab = GetViewData()->GetRefTabNo();
     651             : 
     652             :                     // If RefInput switched to a different sheet from the data sheet,
     653             :                     // switch back:
     654             : 
     655           0 :                     if ( nCurTab != nRefTab )
     656             :                     {
     657           0 :                         pTabViewShell->SetTabNo( nRefTab );
     658           0 :                         pTabViewShell->PaintExtras();
     659             :                     }
     660             : 
     661           0 :                     const ScDPObject* pDPObject = pTabViewShell->GetDialogDPObject();
     662           0 :                     if ( pDPObject )
     663             :                     {
     664           0 :                         const ScPivotItem* pPItem = static_cast<const ScPivotItem*>(pItem);
     665             :                         bool bSuccess = pTabViewShell->MakePivotTable(
     666           0 :                             pPItem->GetData(), pPItem->GetDestRange(), pPItem->IsNewSheet(), *pDPObject );
     667           0 :                         SfxBoolItem aRet(0, bSuccess);
     668           0 :                         rReq.SetReturnValue(aRet);
     669             :                     }
     670           0 :                     rReq.Done();
     671             :                 }
     672             : #if HAVE_FEATURE_SCRIPTING
     673           0 :                 else if (rReq.IsAPI())
     674           0 :                     SbxBase::SetError(SbxERR_BAD_PARAMETER);
     675             : #endif
     676             :             }
     677           0 :             break;
     678             : 
     679             :         case SID_OPENDLG_PIVOTTABLE:
     680           0 :             ExecuteDataPilotDialog();
     681           0 :             break;
     682             :         case SID_DEFINE_DBNAME:
     683             :             {
     684             : 
     685           0 :                 sal_uInt16          nId  = ScDbNameDlgWrapper::GetChildWindowId();
     686           0 :                 SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
     687           0 :                 SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
     688             : 
     689           0 :                 pScMod->SetRefDialog( nId, pWnd == nullptr );
     690             : 
     691             :             }
     692           0 :             break;
     693             : 
     694             :         case SID_SELECT_DB:
     695             :             {
     696           0 :                 if ( pReqArgs )
     697             :                 {
     698             :                     const SfxStringItem* pItem =
     699           0 :                         static_cast<const SfxStringItem*>(&pReqArgs->Get( SID_SELECT_DB ));
     700             : 
     701           0 :                     if( pItem )
     702             :                     {
     703           0 :                         pTabViewShell->GotoDBArea( pItem->GetValue() );
     704           0 :                         rReq.Done();
     705             :                     }
     706             :                     else
     707             :                     {
     708             :                         OSL_FAIL("NULL");
     709             :                     }
     710             :                 }
     711             :                 else
     712             :                 {
     713           0 :                     ScDocument*     pDoc   = GetViewData()->GetDocument();
     714           0 :                     ScDBCollection* pDBCol = pDoc->GetDBCollection();
     715             : 
     716           0 :                     if ( pDBCol )
     717             :                     {
     718           0 :                         std::vector<OUString> aList;
     719           0 :                         const ScDBCollection::NamedDBs& rDBs = pDBCol->getNamedDBs();
     720           0 :                         ScDBCollection::NamedDBs::const_iterator itr = rDBs.begin(), itrEnd = rDBs.end();
     721           0 :                         for (; itr != itrEnd; ++itr)
     722           0 :                             aList.push_back(itr->GetName());
     723             : 
     724           0 :                         ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     725             :                         OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     726             : 
     727             :                         boost::scoped_ptr<AbstractScSelEntryDlg> pDlg(pFact->CreateScSelEntryDlg( pTabViewShell->GetDialogParent(),
     728           0 :                                                                                                   aList ));
     729             :                         OSL_ENSURE(pDlg, "Dialog create fail!");
     730           0 :                         if ( pDlg->Execute() == RET_OK )
     731             :                         {
     732           0 :                             OUString aName = pDlg->GetSelectEntry();
     733           0 :                             pTabViewShell->GotoDBArea( aName );
     734           0 :                             rReq.AppendItem( SfxStringItem( SID_SELECT_DB, aName ) );
     735           0 :                             rReq.Done();
     736           0 :                         }
     737             :                     }
     738             :                 }
     739             :             }
     740           0 :             break;
     741             :         case SID_DATA_STREAMS:
     742             :         {
     743           0 :             ScopedVclPtrInstance< sc::DataStreamDlg > aDialog( GetViewData()->GetDocShell(), pTabViewShell->GetDialogParent() );
     744           0 :             ScDocument *pDoc = GetViewData()->GetDocument();
     745           0 :             sc::DocumentLinkManager& rMgr = pDoc->GetDocLinkManager();
     746           0 :             sc::DataStream* pStrm = rMgr.getDataStream();
     747           0 :             if (pStrm)
     748           0 :                 aDialog->Init(*pStrm);
     749             : 
     750           0 :             if (aDialog->Execute() == RET_OK)
     751           0 :                 aDialog->StartStream();
     752             :         }
     753           0 :         break;
     754             :         case SID_DATA_STREAMS_PLAY:
     755             :         {
     756           0 :             ScDocument *pDoc = GetViewData()->GetDocument();
     757           0 :             sc::DocumentLinkManager& rMgr = pDoc->GetDocLinkManager();
     758           0 :             sc::DataStream* pStrm = rMgr.getDataStream();
     759           0 :             if (pStrm)
     760           0 :                 pStrm->StartImport();
     761             :         }
     762           0 :         break;
     763             :         case SID_DATA_STREAMS_STOP:
     764             :         {
     765           0 :             ScDocument *pDoc = GetViewData()->GetDocument();
     766           0 :             sc::DocumentLinkManager& rMgr = pDoc->GetDocLinkManager();
     767           0 :             sc::DataStream* pStrm = rMgr.getDataStream();
     768           0 :             if (pStrm)
     769           0 :                 pStrm->StopImport();
     770             :         }
     771           0 :         break;
     772             :         case SID_MANAGE_XML_SOURCE:
     773           0 :             ExecuteXMLSourceDialog();
     774           0 :         break;
     775             :         case FID_VALIDATION:
     776             :             {
     777             :                 const SfxPoolItem* pItem;
     778           0 :                 const SfxItemSet* pArgs = rReq.GetArgs();
     779           0 :                 if ( pArgs )
     780             :                 {
     781             :                     OSL_FAIL("later...");
     782             :                 }
     783             :                 else
     784             :                 {
     785           0 :                     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     786             :                     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     787           0 :                     ::GetTabPageRanges ScTPValidationValueGetRanges = pFact->GetTabPageRangesFunc();
     788             :                     OSL_ENSURE(ScTPValidationValueGetRanges, "TabPage create fail!");
     789           0 :                     SfxItemSet aArgSet( GetPool(), (*ScTPValidationValueGetRanges)() );
     790           0 :                     ScValidationMode eMode = SC_VALID_ANY;
     791           0 :                     ScConditionMode eOper = SC_COND_EQUAL;
     792           0 :                     OUString aExpr1, aExpr2;
     793           0 :                     bool bBlank = true;
     794           0 :                     sal_Int16 nListType = css::sheet::TableValidationVisibility::UNSORTED;
     795           0 :                     bool bShowHelp = false;
     796           0 :                     OUString aHelpTitle, aHelpText;
     797           0 :                     bool bShowError = false;
     798           0 :                     ScValidErrorStyle eErrStyle = SC_VALERR_STOP;
     799           0 :                     OUString aErrTitle, aErrText;
     800             : 
     801           0 :                     ScDocument* pDoc = GetViewData()->GetDocument();
     802           0 :                     SCCOL nCurX = GetViewData()->GetCurX();
     803           0 :                     SCROW nCurY = GetViewData()->GetCurY();
     804           0 :                     SCTAB nTab = GetViewData()->GetTabNo();
     805           0 :                     ScAddress aCursorPos( nCurX, nCurY, nTab );
     806             :                     sal_uLong nIndex = static_cast<const SfxUInt32Item*>(pDoc->GetAttr(
     807           0 :                                 nCurX, nCurY, nTab, ATTR_VALIDDATA ))->GetValue();
     808           0 :                     if ( nIndex )
     809             :                     {
     810           0 :                         const ScValidationData* pOldData = pDoc->GetValidationEntry( nIndex );
     811           0 :                         if ( pOldData )
     812             :                         {
     813           0 :                             eMode = pOldData->GetDataMode();
     814           0 :                             eOper = pOldData->GetOperation();
     815           0 :                             sal_uLong nNumFmt = 0;
     816           0 :                             if ( eMode == SC_VALID_DATE || eMode == SC_VALID_TIME )
     817             :                             {
     818             :                                 short nType = ( eMode == SC_VALID_DATE ) ? css::util::NumberFormat::DATE
     819           0 :                                                                          : css::util::NumberFormat::TIME;
     820             :                                 nNumFmt = pDoc->GetFormatTable()->GetStandardFormat(
     821           0 :                                                                     nType, ScGlobal::eLnge );
     822             :                             }
     823           0 :                             aExpr1 = pOldData->GetExpression( aCursorPos, 0, nNumFmt );
     824           0 :                             aExpr2 = pOldData->GetExpression( aCursorPos, 1, nNumFmt );
     825           0 :                             bBlank = pOldData->IsIgnoreBlank();
     826           0 :                             nListType = pOldData->GetListType();
     827             : 
     828           0 :                             bShowHelp = pOldData->GetInput( aHelpTitle, aHelpText );
     829           0 :                             bShowError = pOldData->GetErrMsg( aErrTitle, aErrText, eErrStyle );
     830             : 
     831           0 :                             aArgSet.Put( SfxAllEnumItem( FID_VALID_MODE,        sal::static_int_cast<sal_uInt16>(eMode) ) );
     832           0 :                             aArgSet.Put( SfxAllEnumItem( FID_VALID_CONDMODE,    sal::static_int_cast<sal_uInt16>(eOper) ) );
     833           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_VALUE1,      aExpr1 ) );
     834           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_VALUE2,      aExpr2 ) );
     835           0 :                             aArgSet.Put( SfxBoolItem(    FID_VALID_BLANK,       bBlank ) );
     836           0 :                             aArgSet.Put( SfxInt16Item(   FID_VALID_LISTTYPE,    nListType ) );
     837           0 :                             aArgSet.Put( SfxBoolItem(    FID_VALID_SHOWHELP,    bShowHelp ) );
     838           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_HELPTITLE,   aHelpTitle ) );
     839           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_HELPTEXT,    aHelpText ) );
     840           0 :                             aArgSet.Put( SfxBoolItem(    FID_VALID_SHOWERR,     bShowError ) );
     841           0 :                             aArgSet.Put( SfxAllEnumItem( FID_VALID_ERRSTYLE,    sal::static_int_cast<sal_uInt16>(eErrStyle) ) );
     842           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_ERRTITLE,    aErrTitle ) );
     843           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_ERRTEXT,     aErrText ) );
     844             :                         }
     845             :                     }
     846             : 
     847             :                     // cell range picker
     848           0 :                     SfxAbstractTabDialog* pDlg = pFact->CreateScValidationDlg(NULL, &aArgSet, pTabViewShell);
     849             :                     assert(pDlg); //Dialog create fail!
     850             : 
     851           0 :                     short nResult = pDlg->Execute();
     852           0 :                     if ( nResult == RET_OK )
     853             :                     {
     854           0 :                         const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
     855             : 
     856           0 :                         if ( pOutSet->GetItemState( FID_VALID_MODE, true, &pItem ) == SfxItemState::SET )
     857           0 :                             eMode = (ScValidationMode) static_cast<const SfxAllEnumItem*>(pItem)->GetValue();
     858           0 :                         if ( pOutSet->GetItemState( FID_VALID_CONDMODE, true, &pItem ) == SfxItemState::SET )
     859           0 :                             eOper = (ScConditionMode) static_cast<const SfxAllEnumItem*>(pItem)->GetValue();
     860           0 :                         if ( pOutSet->GetItemState( FID_VALID_VALUE1, true, &pItem ) == SfxItemState::SET )
     861             :                         {
     862           0 :                             OUString aTemp1 = static_cast<const SfxStringItem*>(pItem)->GetValue();
     863           0 :                             if (eMode == SC_VALID_DATE || eMode == SC_VALID_TIME)
     864             :                             {
     865           0 :                                 sal_uInt32 nNumIndex = 0;
     866             :                                 double nVal;
     867           0 :                                 if (pDoc->GetFormatTable()->IsNumberFormat(aTemp1, nNumIndex, nVal))
     868           0 :                                     aExpr1 = OUString( ::rtl::math::doubleToUString( nVal,
     869             :                                             rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
     870           0 :                                             ScGlobal::pLocaleData->getNumDecimalSep()[0], true));
     871             :                                 else
     872           0 :                                     aExpr1 = aTemp1;
     873             :                             }
     874             :                             else
     875           0 :                                 aExpr1 = aTemp1;
     876             :                         }
     877           0 :                         if ( pOutSet->GetItemState( FID_VALID_VALUE2, true, &pItem ) == SfxItemState::SET )
     878             :                         {
     879           0 :                             OUString aTemp2 = static_cast<const SfxStringItem*>(pItem)->GetValue();
     880           0 :                             if (eMode == SC_VALID_DATE || eMode == SC_VALID_TIME)
     881             :                             {
     882           0 :                                 sal_uInt32 nNumIndex = 0;
     883             :                                 double nVal;
     884           0 :                                 if (pDoc->GetFormatTable()->IsNumberFormat(aTemp2, nNumIndex, nVal))
     885           0 :                                     aExpr2 = OUString( ::rtl::math::doubleToUString( nVal,
     886             :                                             rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
     887           0 :                                             ScGlobal::pLocaleData->getNumDecimalSep()[0], true));
     888             :                                 else
     889           0 :                                     aExpr2 = aTemp2;
     890           0 :                                 if ( eMode == SC_VALID_TIME ) {
     891           0 :                                     sal_Int32 wraparound = aExpr1.compareTo(aExpr2);
     892           0 :                                     if (wraparound > 0) {
     893           0 :                                         if (eOper == SC_COND_BETWEEN) {
     894           0 :                                             eOper = SC_COND_NOTBETWEEN;
     895           0 :                                             OUString tmp = aExpr1;
     896           0 :                                             aExpr1 = aExpr2;
     897           0 :                                             aExpr2 = tmp;
     898             :                                         }
     899           0 :                                         else if (eOper == SC_COND_NOTBETWEEN) {
     900           0 :                                             eOper = SC_COND_BETWEEN;
     901           0 :                                             OUString tmp = aExpr1;
     902           0 :                                             aExpr1 = aExpr2;
     903           0 :                                             aExpr2 = tmp;
     904             :                                         }
     905             :                                     }
     906           0 :                                 }
     907             :                             }
     908             :                             else
     909           0 :                                 aExpr2 = aTemp2;
     910             :                         }
     911           0 :                         if ( pOutSet->GetItemState( FID_VALID_BLANK, true, &pItem ) == SfxItemState::SET )
     912           0 :                             bBlank = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     913           0 :                         if ( pOutSet->GetItemState( FID_VALID_LISTTYPE, true, &pItem ) == SfxItemState::SET )
     914           0 :                             nListType = static_cast<const SfxInt16Item*>(pItem)->GetValue();
     915             : 
     916           0 :                         if ( pOutSet->GetItemState( FID_VALID_SHOWHELP, true, &pItem ) == SfxItemState::SET )
     917           0 :                             bShowHelp = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     918           0 :                         if ( pOutSet->GetItemState( FID_VALID_HELPTITLE, true, &pItem ) == SfxItemState::SET )
     919           0 :                             aHelpTitle = static_cast<const SfxStringItem*>(pItem)->GetValue();
     920           0 :                         if ( pOutSet->GetItemState( FID_VALID_HELPTEXT, true, &pItem ) == SfxItemState::SET )
     921           0 :                             aHelpText = static_cast<const SfxStringItem*>(pItem)->GetValue();
     922             : 
     923           0 :                         if ( pOutSet->GetItemState( FID_VALID_SHOWERR, true, &pItem ) == SfxItemState::SET )
     924           0 :                             bShowError = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     925           0 :                         if ( pOutSet->GetItemState( FID_VALID_ERRSTYLE, true, &pItem ) == SfxItemState::SET )
     926           0 :                             eErrStyle = (ScValidErrorStyle) static_cast<const SfxAllEnumItem*>(pItem)->GetValue();
     927           0 :                         if ( pOutSet->GetItemState( FID_VALID_ERRTITLE, true, &pItem ) == SfxItemState::SET )
     928           0 :                             aErrTitle = static_cast<const SfxStringItem*>(pItem)->GetValue();
     929           0 :                         if ( pOutSet->GetItemState( FID_VALID_ERRTEXT, true, &pItem ) == SfxItemState::SET )
     930           0 :                             aErrText = static_cast<const SfxStringItem*>(pItem)->GetValue();
     931             : 
     932           0 :                         ScValidationData aData( eMode, eOper, aExpr1, aExpr2, pDoc, aCursorPos );
     933           0 :                         aData.SetIgnoreBlank( bBlank );
     934           0 :                         aData.SetListType( nListType );
     935             : 
     936           0 :                         aData.SetInput(aHelpTitle, aHelpText);          // sets bShowInput to TRUE
     937           0 :                         if (!bShowHelp)
     938           0 :                             aData.ResetInput();                         // reset only bShowInput
     939             : 
     940           0 :                         aData.SetError(aErrTitle, aErrText, eErrStyle); // sets bShowError to TRUE
     941           0 :                         if (!bShowError)
     942           0 :                             aData.ResetError();                         // reset only bShowError
     943             : 
     944           0 :                         pTabViewShell->SetValidation( aData );
     945           0 :                         pTabViewShell->TestHintWindow();
     946           0 :                         rReq.Done( *pOutSet );
     947             :                     }
     948             :                     //after end execute from !IsModalInputMode, it is safer to delay deleting
     949             :                     //delete pDlg;
     950           0 :                     Application::PostUserEvent( Link<>( pDlg, &DelayDeleteAbstractDialog ) );
     951             :                 }
     952             :             }
     953           0 :             break;
     954             : 
     955             :         case SID_TEXT_TO_COLUMNS:
     956             :             {
     957           0 :                 ScViewData* pData = GetViewData();
     958             :                 OSL_ENSURE( pData, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pData is null!" );
     959           0 :                 ScRange aRange;
     960             : 
     961           0 :                 if ( lcl_GetTextToColumnsRange( pData, aRange ) )
     962             :                 {
     963           0 :                     ScDocument* pDoc = pData->GetDocument();
     964             :                     OSL_ENSURE( pDoc, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDoc is null!" );
     965             : 
     966           0 :                     ScImportExport aExport( pDoc, aRange );
     967           0 :                     aExport.SetExportTextOptions( ScExportTextOptions( ScExportTextOptions::None, 0, false ) );
     968             : 
     969             :                     // #i87703# text to columns fails with tab separator
     970           0 :                     aExport.SetDelimiter( static_cast< sal_Unicode >( 0 ) );
     971             : 
     972           0 :                     SvMemoryStream aStream;
     973           0 :                     aStream.SetStreamCharSet( RTL_TEXTENCODING_UNICODE );
     974           0 :                     ScImportExport::SetNoEndianSwap( aStream );
     975           0 :                     aExport.ExportStream( aStream, OUString(), SotClipboardFormatId::STRING );
     976             : 
     977           0 :                     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     978             :                     OSL_ENSURE( pFact, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pFact is null!" );
     979             :                     boost::scoped_ptr<AbstractScImportAsciiDlg> pDlg(pFact->CreateScImportAsciiDlg(
     980           0 :                         NULL, OUString(), &aStream, SC_TEXTTOCOLUMNS));
     981             :                     OSL_ENSURE( pDlg, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDlg is null!" );
     982             : 
     983           0 :                     if ( pDlg->Execute() == RET_OK )
     984             :                     {
     985           0 :                         ScDocShell* pDocSh = pData->GetDocShell();
     986             :                         OSL_ENSURE( pDocSh, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDocSh is null!" );
     987             : 
     988           0 :                         OUString aUndo = ScGlobal::GetRscString( STR_UNDO_TEXTTOCOLUMNS );
     989           0 :                         pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
     990             : 
     991           0 :                         ScImportExport aImport( pDoc, aRange.aStart );
     992           0 :                         ScAsciiOptions aOptions;
     993           0 :                         pDlg->GetOptions( aOptions );
     994           0 :                         pDlg->SaveParameters();
     995           0 :                         aImport.SetExtOptions( aOptions );
     996           0 :                         aImport.SetApi( false );
     997           0 :                         aImport.SetImportBroadcast( true );
     998           0 :                         aStream.Seek( 0 );
     999           0 :                         aImport.ImportStream( aStream, OUString(), SotClipboardFormatId::STRING );
    1000             : 
    1001           0 :                         pDocSh->GetUndoManager()->LeaveListAction();
    1002           0 :                     }
    1003             :                 }
    1004             :             }
    1005           0 :             break;
    1006             :         }
    1007           0 : }
    1008             : 
    1009        1173 : void ScCellShell::GetDBState( SfxItemSet& rSet )
    1010             : {
    1011        1173 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    1012        1173 :     ScViewData* pData       = GetViewData();
    1013        1173 :     ScDocShell* pDocSh      = pData->GetDocShell();
    1014        1173 :     ScDocument& rDoc        = pDocSh->GetDocument();
    1015        1173 :     SCCOL       nPosX       = pData->GetCurX();
    1016        1173 :     SCROW       nPosY       = pData->GetCurY();
    1017        1173 :     SCTAB       nTab        = pData->GetTabNo();
    1018             : 
    1019        1173 :     bool bAutoFilter = false;
    1020        1173 :     bool bAutoFilterTested = false;
    1021             : 
    1022        1173 :     SfxWhichIter aIter(rSet);
    1023        1173 :     sal_uInt16 nWhich = aIter.FirstWhich();
    1024        4089 :     while (nWhich)
    1025             :     {
    1026        1743 :         switch (nWhich)
    1027             :         {
    1028             :             case SID_REFRESH_DBAREA:
    1029             :                 {
    1030             :                     //  imported data without selection
    1031             :                     //  or filter,sort,subtotal (also without import)
    1032           0 :                     bool bOk = false;
    1033           0 :                     ScDBData* pDBData = pTabViewShell->GetDBData(false,SC_DB_OLD);
    1034           0 :                     if (pDBData && rDoc.GetChangeTrack() == NULL)
    1035             :                     {
    1036           0 :                         if ( pDBData->HasImportParam() )
    1037           0 :                             bOk = !pDBData->HasImportSelection();
    1038             :                         else
    1039             :                         {
    1040           0 :                             bOk = pDBData->HasQueryParam() ||
    1041           0 :                                   pDBData->HasSortParam() ||
    1042           0 :                                   pDBData->HasSubTotalParam();
    1043             :                         }
    1044             :                     }
    1045           0 :                     if (!bOk)
    1046           0 :                         rSet.DisableItem( nWhich );
    1047             :                 }
    1048           0 :                 break;
    1049             : 
    1050             :             case SID_FILTER:
    1051             :             case SID_SPECIAL_FILTER:
    1052             :                 {
    1053         249 :                     ScRange aDummy;
    1054         249 :                     ScMarkType eMarkType = GetViewData()->GetSimpleArea( aDummy);
    1055         249 :                     if (eMarkType != SC_MARK_SIMPLE && eMarkType != SC_MARK_SIMPLE_FILTERED)
    1056             :                     {
    1057           0 :                         rSet.DisableItem( nWhich );
    1058             :                     }
    1059             :                 }
    1060         249 :                 break;
    1061             : 
    1062             :                 //in case of Redlining and multiselection disable
    1063             :             case SID_SORT_ASCENDING:
    1064             :             case SID_SORT_DESCENDING:
    1065             :             case SCITEM_SORTDATA:
    1066             :             case SCITEM_SUBTDATA:
    1067             :             case SID_OPENDLG_PIVOTTABLE:
    1068             :                 {
    1069             :                     //! move ReadOnly check to idl flags
    1070             : 
    1071        1992 :                     if ( pDocSh->IsReadOnly() || rDoc.GetChangeTrack()!=NULL ||
    1072         996 :                             GetViewData()->IsMultiMarked() )
    1073             :                     {
    1074           0 :                         rSet.DisableItem( nWhich );
    1075             :                     }
    1076             :                 }
    1077         996 :                 break;
    1078             : 
    1079             :             case SID_REIMPORT_DATA:
    1080             :                 {
    1081             :                     //  only imported data without selection
    1082           0 :                     ScDBData* pDBData = pTabViewShell->GetDBData(false,SC_DB_OLD);
    1083           0 :                     if (!pDBData || !pDBData->HasImportParam() || pDBData->HasImportSelection() ||
    1084           0 :                         rDoc.GetChangeTrack()!=NULL)
    1085             :                     {
    1086           0 :                         rSet.DisableItem( nWhich );
    1087             :                     }
    1088             :                 }
    1089           0 :                 break;
    1090             : 
    1091             :             case SID_VIEW_DATA_SOURCE_BROWSER:
    1092             :                 {
    1093         249 :                     if (!SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::EModule::DATABASE))
    1094           0 :                         rSet.Put(SfxVisibilityItem(nWhich, false));
    1095             :                     else
    1096             :                         //  get state (BoolItem) from SfxViewFrame
    1097         249 :                         pTabViewShell->GetViewFrame()->GetSlotState( nWhich, NULL, &rSet );
    1098             :                 }
    1099         249 :                 break;
    1100             :             case SID_SBA_BRW_INSERT:
    1101             :                 {
    1102             :                     //  SBA wants a sal_Bool-item, enabled
    1103             : 
    1104           0 :                     bool bEnable = true;
    1105           0 :                     rSet.Put(SfxBoolItem(nWhich, bEnable));
    1106             :                 }
    1107           0 :                 break;
    1108             : 
    1109             :             case SID_AUTO_FILTER:
    1110             :             case SID_AUTOFILTER_HIDE:
    1111             :                 {
    1112         249 :                     if (!bAutoFilterTested)
    1113             :                     {
    1114         249 :                         bAutoFilter = rDoc.HasAutoFilter( nPosX, nPosY, nTab );
    1115         249 :                         bAutoFilterTested = true;
    1116             :                     }
    1117         249 :                     if ( nWhich == SID_AUTO_FILTER )
    1118             :                     {
    1119         249 :                         ScRange aDummy;
    1120         249 :                         ScMarkType eMarkType = GetViewData()->GetSimpleArea( aDummy);
    1121         249 :                         if (eMarkType != SC_MARK_SIMPLE && eMarkType != SC_MARK_SIMPLE_FILTERED)
    1122             :                         {
    1123           0 :                             rSet.DisableItem( nWhich );
    1124             :                         }
    1125         249 :                         else if (rDoc.GetDPAtBlock(aDummy))
    1126             :                         {
    1127           0 :                             rSet.DisableItem( nWhich );
    1128             :                         }
    1129             :                         else
    1130         249 :                             rSet.Put( SfxBoolItem( nWhich, bAutoFilter ) );
    1131             :                     }
    1132             :                     else
    1133           0 :                         if (!bAutoFilter)
    1134           0 :                             rSet.DisableItem( nWhich );
    1135             :                 }
    1136         249 :                 break;
    1137             : 
    1138             :             case SID_UNFILTER:
    1139             :                 {
    1140             :                     SCCOL nStartCol, nEndCol;
    1141             :                     SCROW  nStartRow, nEndRow;
    1142             :                     SCTAB  nStartTab, nEndTab;
    1143           0 :                     bool bAnyQuery = false;
    1144             : 
    1145             :                     bool bSelected = (GetViewData()->GetSimpleArea(
    1146           0 :                                 nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab )
    1147           0 :                             == SC_MARK_SIMPLE);
    1148             : 
    1149           0 :                     if ( bSelected )
    1150             :                     {
    1151           0 :                         if (nStartCol==nEndCol && nStartRow==nEndRow)
    1152           0 :                             bSelected = false;
    1153             :                     }
    1154             :                     else
    1155             :                     {
    1156           0 :                         nStartCol = GetViewData()->GetCurX();
    1157           0 :                         nStartRow = GetViewData()->GetCurY();
    1158           0 :                         nStartTab = GetViewData()->GetTabNo();
    1159             :                     }
    1160             : 
    1161             :                     ScDBData* pDBData = bSelected
    1162           0 :                                 ? rDoc.GetDBAtArea( nStartTab, nStartCol, nStartRow, nEndCol, nEndRow )
    1163           0 :                                 : rDoc.GetDBAtCursor( nStartCol, nStartRow, nStartTab );
    1164             : 
    1165           0 :                     if ( pDBData )
    1166             :                     {
    1167           0 :                         ScQueryParam aParam;
    1168           0 :                         pDBData->GetQueryParam( aParam );
    1169           0 :                         if ( aParam.GetEntry(0).bDoQuery )
    1170           0 :                             bAnyQuery = true;
    1171             :                     }
    1172             : 
    1173           0 :                     if ( !bAnyQuery )
    1174           0 :                         rSet.DisableItem( nWhich );
    1175             :                 }
    1176           0 :                 break;
    1177             : 
    1178             :             case SID_DEFINE_DBNAME:
    1179             :                 {
    1180           0 :                     if ( pDocSh->IsDocShared() )
    1181             :                     {
    1182           0 :                         rSet.DisableItem( nWhich );
    1183             :                     }
    1184             :                 }
    1185           0 :                 break;
    1186             :             case SID_DATA_STREAMS:
    1187             :             case SID_DATA_STREAMS_PLAY:
    1188             :             case SID_DATA_STREAMS_STOP:
    1189             :                 {
    1190           0 :                     SvtMiscOptions aMiscOptions;
    1191           0 :                     if ( !aMiscOptions.IsExperimentalMode() )
    1192           0 :                         rSet.DisableItem( nWhich );
    1193             :                 }
    1194           0 :                 break;
    1195             :             case SID_TEXT_TO_COLUMNS:
    1196             :                 {
    1197           0 :                     ScRange aRange;
    1198           0 :                     if ( !lcl_GetTextToColumnsRange( pData, aRange ) )
    1199             :                     {
    1200           0 :                         rSet.DisableItem( nWhich );
    1201             :                     }
    1202             :                 }
    1203           0 :                 break;
    1204             : #if !ENABLE_ORCUS
    1205             :             case SID_MANAGE_XML_SOURCE:
    1206             :                 rSet.DisableItem(nWhich);
    1207             :             break;
    1208             : #endif
    1209             :         }
    1210        1743 :         nWhich = aIter.NextWhich();
    1211        1173 :     }
    1212        1329 : }
    1213             : 
    1214             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11