LCOV - code coverage report
Current view: top level - sc/source/ui/view - cellsh2.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 23 607 3.8 %
Date: 2014-11-03 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 :     long DelayDeleteAbstractDialog( void *pAbstractDialog, void * /*pArg*/ )
     191             :     {
     192           0 :         delete reinterpret_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 ? false : sal_True );
     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 ? false : sal_True );
     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 ? false : sal_True );
     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 :             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 ) ? NUMBERFORMAT_DATE
     819           0 :                                                                          : 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             :                             }
     891             :                             else
     892           0 :                                 aExpr2 = aTemp2;
     893             :                         }
     894             : 
     895           0 :                         if ( pOutSet->GetItemState( FID_VALID_BLANK, true, &pItem ) == SfxItemState::SET )
     896           0 :                             bBlank = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     897           0 :                         if ( pOutSet->GetItemState( FID_VALID_LISTTYPE, true, &pItem ) == SfxItemState::SET )
     898           0 :                             nListType = static_cast<const SfxInt16Item*>(pItem)->GetValue();
     899             : 
     900           0 :                         if ( pOutSet->GetItemState( FID_VALID_SHOWHELP, true, &pItem ) == SfxItemState::SET )
     901           0 :                             bShowHelp = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     902           0 :                         if ( pOutSet->GetItemState( FID_VALID_HELPTITLE, true, &pItem ) == SfxItemState::SET )
     903           0 :                             aHelpTitle = static_cast<const SfxStringItem*>(pItem)->GetValue();
     904           0 :                         if ( pOutSet->GetItemState( FID_VALID_HELPTEXT, true, &pItem ) == SfxItemState::SET )
     905           0 :                             aHelpText = static_cast<const SfxStringItem*>(pItem)->GetValue();
     906             : 
     907           0 :                         if ( pOutSet->GetItemState( FID_VALID_SHOWERR, true, &pItem ) == SfxItemState::SET )
     908           0 :                             bShowError = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     909           0 :                         if ( pOutSet->GetItemState( FID_VALID_ERRSTYLE, true, &pItem ) == SfxItemState::SET )
     910           0 :                             eErrStyle = (ScValidErrorStyle) static_cast<const SfxAllEnumItem*>(pItem)->GetValue();
     911           0 :                         if ( pOutSet->GetItemState( FID_VALID_ERRTITLE, true, &pItem ) == SfxItemState::SET )
     912           0 :                             aErrTitle = static_cast<const SfxStringItem*>(pItem)->GetValue();
     913           0 :                         if ( pOutSet->GetItemState( FID_VALID_ERRTEXT, true, &pItem ) == SfxItemState::SET )
     914           0 :                             aErrText = static_cast<const SfxStringItem*>(pItem)->GetValue();
     915             : 
     916           0 :                         ScValidationData aData( eMode, eOper, aExpr1, aExpr2, pDoc, aCursorPos );
     917           0 :                         aData.SetIgnoreBlank( bBlank );
     918           0 :                         aData.SetListType( nListType );
     919             : 
     920           0 :                         aData.SetInput(aHelpTitle, aHelpText);          // sets bShowInput to TRUE
     921           0 :                         if (!bShowHelp)
     922           0 :                             aData.ResetInput();                         // reset only bShowInput
     923             : 
     924           0 :                         aData.SetError(aErrTitle, aErrText, eErrStyle); // sets bShowError to TRUE
     925           0 :                         if (!bShowError)
     926           0 :                             aData.ResetError();                         // reset only bShowError
     927             : 
     928           0 :                         pTabViewShell->SetValidation( aData );
     929           0 :                         pTabViewShell->TestHintWindow();
     930           0 :                         rReq.Done( *pOutSet );
     931             :                     }
     932             :                     //after end execute from !IsModalInputMode, it is safer to delay deleting
     933             :                     //delete pDlg;
     934           0 :                     Application::PostUserEvent( Link( pDlg, &DelayDeleteAbstractDialog ) );
     935             :                 }
     936             :             }
     937           0 :             break;
     938             : 
     939             :         case SID_TEXT_TO_COLUMNS:
     940             :             {
     941           0 :                 ScViewData* pData = GetViewData();
     942             :                 OSL_ENSURE( pData, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pData is null!" );
     943           0 :                 ScRange aRange;
     944             : 
     945           0 :                 if ( lcl_GetTextToColumnsRange( pData, aRange ) )
     946             :                 {
     947           0 :                     ScDocument* pDoc = pData->GetDocument();
     948             :                     OSL_ENSURE( pDoc, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDoc is null!" );
     949             : 
     950           0 :                     ScImportExport aExport( pDoc, aRange );
     951           0 :                     aExport.SetExportTextOptions( ScExportTextOptions( ScExportTextOptions::None, 0, false ) );
     952             : 
     953             :                     // #i87703# text to columns fails with tab separator
     954           0 :                     aExport.SetDelimiter( static_cast< sal_Unicode >( 0 ) );
     955             : 
     956           0 :                     SvMemoryStream aStream;
     957           0 :                     aStream.SetStreamCharSet( RTL_TEXTENCODING_UNICODE );
     958           0 :                     ScImportExport::SetNoEndianSwap( aStream );
     959           0 :                     aExport.ExportStream( aStream, OUString(), FORMAT_STRING );
     960             : 
     961           0 :                     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     962             :                     OSL_ENSURE( pFact, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pFact is null!" );
     963             :                     boost::scoped_ptr<AbstractScImportAsciiDlg> pDlg(pFact->CreateScImportAsciiDlg(
     964           0 :                         NULL, OUString(), &aStream, SC_TEXTTOCOLUMNS));
     965             :                     OSL_ENSURE( pDlg, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDlg is null!" );
     966             : 
     967           0 :                     if ( pDlg->Execute() == RET_OK )
     968             :                     {
     969           0 :                         ScDocShell* pDocSh = pData->GetDocShell();
     970             :                         OSL_ENSURE( pDocSh, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDocSh is null!" );
     971             : 
     972           0 :                         OUString aUndo = ScGlobal::GetRscString( STR_UNDO_TEXTTOCOLUMNS );
     973           0 :                         pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
     974             : 
     975           0 :                         ScImportExport aImport( pDoc, aRange.aStart );
     976           0 :                         ScAsciiOptions aOptions;
     977           0 :                         pDlg->GetOptions( aOptions );
     978           0 :                         pDlg->SaveParameters();
     979           0 :                         aImport.SetExtOptions( aOptions );
     980           0 :                         aImport.SetApi( false );
     981           0 :                         aStream.Seek( 0 );
     982           0 :                         aImport.ImportStream( aStream, OUString(), FORMAT_STRING );
     983             : 
     984           0 :                         pDocSh->GetUndoManager()->LeaveListAction();
     985           0 :                     }
     986             :                 }
     987             :             }
     988           0 :             break;
     989             :         }
     990           0 : }
     991             : 
     992         711 : void ScCellShell::GetDBState( SfxItemSet& rSet )
     993             : {
     994         711 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
     995         711 :     ScViewData* pData       = GetViewData();
     996         711 :     ScDocShell* pDocSh      = pData->GetDocShell();
     997         711 :     ScDocument& rDoc        = pDocSh->GetDocument();
     998         711 :     SCCOL       nPosX       = pData->GetCurX();
     999         711 :     SCROW       nPosY       = pData->GetCurY();
    1000         711 :     SCTAB       nTab        = pData->GetTabNo();
    1001             : 
    1002         711 :     bool bAutoFilter = false;
    1003         711 :     bool bAutoFilterTested = false;
    1004             : 
    1005         711 :     SfxWhichIter aIter(rSet);
    1006         711 :     sal_uInt16 nWhich = aIter.FirstWhich();
    1007        2163 :     while (nWhich)
    1008             :     {
    1009         741 :         switch (nWhich)
    1010             :         {
    1011             :             case SID_REFRESH_DBAREA:
    1012             :                 {
    1013             :                     //  imported data without selection
    1014             :                     //  or filter,sort,subtotal (also without import)
    1015           0 :                     bool bOk = false;
    1016           0 :                     ScDBData* pDBData = pTabViewShell->GetDBData(false,SC_DB_OLD);
    1017           0 :                     if (pDBData && rDoc.GetChangeTrack() == NULL)
    1018             :                     {
    1019           0 :                         if ( pDBData->HasImportParam() )
    1020           0 :                             bOk = !pDBData->HasImportSelection();
    1021             :                         else
    1022             :                         {
    1023           0 :                             bOk = pDBData->HasQueryParam() ||
    1024           0 :                                   pDBData->HasSortParam() ||
    1025           0 :                                   pDBData->HasSubTotalParam();
    1026             :                         }
    1027             :                     }
    1028           0 :                     if (!bOk)
    1029           0 :                         rSet.DisableItem( nWhich );
    1030             :                 }
    1031           0 :                 break;
    1032             : 
    1033             :             case SID_FILTER:
    1034             :             case SID_SPECIAL_FILTER:
    1035             :                 {
    1036           0 :                     ScRange aDummy;
    1037           0 :                     ScMarkType eMarkType = GetViewData()->GetSimpleArea( aDummy);
    1038           0 :                     if (eMarkType != SC_MARK_SIMPLE && eMarkType != SC_MARK_SIMPLE_FILTERED)
    1039             :                     {
    1040           0 :                         rSet.DisableItem( nWhich );
    1041             :                     }
    1042             :                 }
    1043           0 :                 break;
    1044             : 
    1045             :                 //in case of Redlining and multiselection disable
    1046             :             case SID_SORT_ASCENDING:
    1047             :             case SID_SORT_DESCENDING:
    1048             :             case SCITEM_SORTDATA:
    1049             :             case SCITEM_SUBTDATA:
    1050             :             case SID_OPENDLG_PIVOTTABLE:
    1051             :                 {
    1052             :                     //! move ReadOnly check to idl flags
    1053             : 
    1054         988 :                     if ( pDocSh->IsReadOnly() || rDoc.GetChangeTrack()!=NULL ||
    1055         494 :                             GetViewData()->IsMultiMarked() )
    1056             :                     {
    1057           0 :                         rSet.DisableItem( nWhich );
    1058             :                     }
    1059             :                 }
    1060         494 :                 break;
    1061             : 
    1062             :             case SID_REIMPORT_DATA:
    1063             :                 {
    1064             :                     //  only imported data without selection
    1065           0 :                     ScDBData* pDBData = pTabViewShell->GetDBData(false,SC_DB_OLD);
    1066           0 :                     if (!pDBData || !pDBData->HasImportParam() || pDBData->HasImportSelection() ||
    1067           0 :                         rDoc.GetChangeTrack()!=NULL)
    1068             :                     {
    1069           0 :                         rSet.DisableItem( nWhich );
    1070             :                     }
    1071             :                 }
    1072           0 :                 break;
    1073             : 
    1074             :             case SID_VIEW_DATA_SOURCE_BROWSER:
    1075             :                 {
    1076         247 :                     if (!SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SDATABASE))
    1077           0 :                         rSet.Put(SfxVisibilityItem(nWhich, false));
    1078             :                     else
    1079             :                         //  get state (BoolItem) from SfxViewFrame
    1080         247 :                         pTabViewShell->GetViewFrame()->GetSlotState( nWhich, NULL, &rSet );
    1081             :                 }
    1082         247 :                 break;
    1083             :             case SID_SBA_BRW_INSERT:
    1084             :                 {
    1085             :                     //  SBA wants a sal_Bool-item, enabled
    1086             : 
    1087           0 :                     bool bEnable = true;
    1088           0 :                     rSet.Put(SfxBoolItem(nWhich, bEnable));
    1089             :                 }
    1090           0 :                 break;
    1091             : 
    1092             :             case SID_AUTO_FILTER:
    1093             :             case SID_AUTOFILTER_HIDE:
    1094             :                 {
    1095           0 :                     if (!bAutoFilterTested)
    1096             :                     {
    1097           0 :                         bAutoFilter = rDoc.HasAutoFilter( nPosX, nPosY, nTab );
    1098           0 :                         bAutoFilterTested = true;
    1099             :                     }
    1100           0 :                     if ( nWhich == SID_AUTO_FILTER )
    1101             :                     {
    1102           0 :                         ScRange aDummy;
    1103           0 :                         ScMarkType eMarkType = GetViewData()->GetSimpleArea( aDummy);
    1104           0 :                         if (eMarkType != SC_MARK_SIMPLE && eMarkType != SC_MARK_SIMPLE_FILTERED)
    1105             :                         {
    1106           0 :                             rSet.DisableItem( nWhich );
    1107             :                         }
    1108           0 :                         else if (rDoc.GetDPAtBlock(aDummy))
    1109             :                         {
    1110           0 :                             rSet.DisableItem( nWhich );
    1111             :                         }
    1112             :                         else
    1113           0 :                             rSet.Put( SfxBoolItem( nWhich, bAutoFilter ) );
    1114             :                     }
    1115             :                     else
    1116           0 :                         if (!bAutoFilter)
    1117           0 :                             rSet.DisableItem( nWhich );
    1118             :                 }
    1119           0 :                 break;
    1120             : 
    1121             :             case SID_UNFILTER:
    1122             :                 {
    1123             :                     SCCOL nStartCol, nEndCol;
    1124             :                     SCROW  nStartRow, nEndRow;
    1125             :                     SCTAB  nStartTab, nEndTab;
    1126           0 :                     bool bAnyQuery = false;
    1127             : 
    1128             :                     bool bSelected = (GetViewData()->GetSimpleArea(
    1129           0 :                                 nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab )
    1130           0 :                             == SC_MARK_SIMPLE);
    1131             : 
    1132           0 :                     if ( bSelected )
    1133             :                     {
    1134           0 :                         if (nStartCol==nEndCol && nStartRow==nEndRow)
    1135           0 :                             bSelected = false;
    1136             :                     }
    1137             :                     else
    1138             :                     {
    1139           0 :                         nStartCol = GetViewData()->GetCurX();
    1140           0 :                         nStartRow = GetViewData()->GetCurY();
    1141           0 :                         nStartTab = GetViewData()->GetTabNo();
    1142             :                     }
    1143             : 
    1144             :                     ScDBData* pDBData = bSelected
    1145           0 :                                 ? rDoc.GetDBAtArea( nStartTab, nStartCol, nStartRow, nEndCol, nEndRow )
    1146           0 :                                 : rDoc.GetDBAtCursor( nStartCol, nStartRow, nStartTab );
    1147             : 
    1148           0 :                     if ( pDBData )
    1149             :                     {
    1150           0 :                         ScQueryParam aParam;
    1151           0 :                         pDBData->GetQueryParam( aParam );
    1152           0 :                         if ( aParam.GetEntry(0).bDoQuery )
    1153           0 :                             bAnyQuery = true;
    1154             :                     }
    1155             : 
    1156           0 :                     if ( !bAnyQuery )
    1157           0 :                         rSet.DisableItem( nWhich );
    1158             :                 }
    1159           0 :                 break;
    1160             : 
    1161             :             case SID_DEFINE_DBNAME:
    1162             :                 {
    1163           0 :                     if ( pDocSh->IsDocShared() )
    1164             :                     {
    1165           0 :                         rSet.DisableItem( nWhich );
    1166             :                     }
    1167             :                 }
    1168           0 :                 break;
    1169             :             case SID_DATA_STREAMS:
    1170             :             case SID_DATA_STREAMS_PLAY:
    1171             :             case SID_DATA_STREAMS_STOP:
    1172             :                 {
    1173           0 :                     SvtMiscOptions aMiscOptions;
    1174           0 :                     if ( !aMiscOptions.IsExperimentalMode() )
    1175           0 :                         rSet.DisableItem( nWhich );
    1176             :                 }
    1177           0 :                 break;
    1178             :             case SID_TEXT_TO_COLUMNS:
    1179             :                 {
    1180           0 :                     ScRange aRange;
    1181           0 :                     if ( !lcl_GetTextToColumnsRange( pData, aRange ) )
    1182             :                     {
    1183           0 :                         rSet.DisableItem( nWhich );
    1184             :                     }
    1185             :                 }
    1186           0 :                 break;
    1187             : #if !ENABLE_ORCUS
    1188             :             case SID_MANAGE_XML_SOURCE:
    1189             :                 rSet.DisableItem(nWhich);
    1190             :             break;
    1191             : #endif
    1192             :         }
    1193         741 :         nWhich = aIter.NextWhich();
    1194         711 :     }
    1195         939 : }
    1196             : 
    1197             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10