LCOV - code coverage report
Current view: top level - sc/source/ui/view - cellsh2.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 611 0.0 %
Date: 2014-04-14 Functions: 0 7 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "scitems.hxx"
      21             : #include <sfx2/viewfrm.hxx>
      22             : #include <sfx2/app.hxx>
      23             : #include <sfx2/request.hxx>
      24             : #include <svl/aeitem.hxx>
      25             : #include <basic/sbxcore.hxx>
      26             : #include <svl/whiter.hxx>
      27             : #include <svl/zforlist.hxx>
      28             : #include <vcl/msgbox.hxx>
      29             : #include <svl/stritem.hxx>
      30             : #include <svl/visitem.hxx>
      31             : #include <svtools/miscopt.hxx>
      32             : #include <unotools/moduleoptions.hxx>
      33             : 
      34             : #include <com/sun/star/frame/FrameSearchFlag.hpp>
      35             : #include <com/sun/star/sdbc/XResultSet.hpp>
      36             : 
      37             : #include "cellsh.hxx"
      38             : #include "tabvwsh.hxx"
      39             : #include "sc.hrc"
      40             : #include "globstr.hrc"
      41             : #include "global.hxx"
      42             : #include "globalnames.hxx"
      43             : #include "scmod.hxx"
      44             : #include "docsh.hxx"
      45             : #include "document.hxx"
      46             : #include "uiitems.hxx"
      47             : #include "dbfunc.hxx"
      48             : #include "dbdocfun.hxx"
      49             : #include "filtdlg.hxx"
      50             : #include "dbnamdlg.hxx"
      51             : #include "reffact.hxx"
      52             : #include "validat.hxx"
      53             : #include "scresid.hxx"
      54             : 
      55             : #include "scui_def.hxx"
      56             : #include "scabstdlg.hxx"
      57             : #include "impex.hxx"
      58             : #include "asciiopt.hxx"
      59             : #include "datastream.hxx"
      60             : #include "datastreamdlg.hxx"
      61             : #include "queryentry.hxx"
      62             : #include "markdata.hxx"
      63             : #include <documentlinkmgr.hxx>
      64             : 
      65             : #include <config_orcus.h>
      66             : 
      67             : using namespace com::sun::star;
      68             : 
      69           0 : static bool lcl_GetTextToColumnsRange( const ScViewData* pData, ScRange& rRange )
      70             : {
      71             :     OSL_ENSURE( pData, "lcl_GetTextToColumnsRange: pData is null!" );
      72             : 
      73           0 :     bool bRet = false;
      74           0 :     const ScMarkData& rMark = pData->GetMarkData();
      75             : 
      76           0 :     if ( rMark.IsMarked() )
      77             :     {
      78           0 :         if ( !rMark.IsMultiMarked() )
      79             :         {
      80           0 :             rMark.GetMarkArea( rRange );
      81           0 :             if ( rRange.aStart.Col() == rRange.aEnd.Col() )
      82             :             {
      83           0 :                 bRet = true;
      84             :             }
      85             :         }
      86             :     }
      87             :     else
      88             :     {
      89           0 :         const SCCOL nCol = pData->GetCurX();
      90           0 :         const SCROW nRow = pData->GetCurY();
      91           0 :         const SCTAB nTab = pData->GetTabNo();
      92           0 :         rRange = ScRange( nCol, nRow, nTab, nCol, nRow, nTab );
      93           0 :         bRet = true;
      94             :     }
      95             : 
      96           0 :     const ScDocument* pDoc = pData->GetDocument();
      97             :     OSL_ENSURE( pDoc, "lcl_GetTextToColumnsRange: pDoc is null!" );
      98             : 
      99           0 :     if ( bRet && pDoc->IsBlockEmpty( rRange.aStart.Tab(), rRange.aStart.Col(),
     100           0 :                                      rRange.aStart.Row(), rRange.aEnd.Col(),
     101           0 :                                      rRange.aEnd.Row() ) )
     102             :     {
     103           0 :         bRet = false;
     104             :     }
     105             : 
     106           0 :     return bRet;
     107             : }
     108             : 
     109           0 : static sal_Bool lcl_GetSortParam( const ScViewData* pData, ScSortParam& rSortParam )
     110             : {
     111           0 :     ScTabViewShell* pTabViewShell   = pData->GetViewShell();
     112           0 :     ScDBData*   pDBData             = pTabViewShell->GetDBData();
     113           0 :     ScDocument* pDoc                = pData->GetDocument();
     114           0 :     SCTAB nTab                      = pData->GetTabNo();
     115           0 :     ScDirection eFillDir            = DIR_TOP;
     116           0 :     sal_Bool  bSort                     = sal_True;
     117           0 :     ScRange aExternalRange;
     118             : 
     119           0 :     if( rSortParam.nCol1 != rSortParam.nCol2 )
     120           0 :         eFillDir = DIR_LEFT;
     121           0 :     if( rSortParam.nRow1 != rSortParam.nRow2 )
     122           0 :         eFillDir = DIR_TOP;
     123             : 
     124           0 :     if( rSortParam.nRow2 == MAXROW )
     125             :     {
     126             :         // Assume that user selected entire column(s), but cater for the
     127             :         // possibility that the start row is not the first row.
     128             :         SCSIZE nCount = pDoc->GetEmptyLinesInBlock( rSortParam.nCol1, rSortParam.nRow1, nTab,
     129           0 :                                                     rSortParam.nCol2, rSortParam.nRow2, nTab, eFillDir );
     130           0 :         aExternalRange = ScRange( rSortParam.nCol1,
     131           0 :                 ::std::min( rSortParam.nRow1 + sal::static_int_cast<SCROW>( nCount ), MAXROW), nTab );
     132             :     }
     133             :     else
     134           0 :         aExternalRange = ScRange( pData->GetCurX(), pData->GetCurY(), nTab );
     135             : 
     136           0 :     SCROW nStartRow = aExternalRange.aStart.Row();
     137           0 :     SCCOL nStartCol = aExternalRange.aStart.Col();
     138           0 :     SCROW nEndRow   = aExternalRange.aEnd.Row();
     139           0 :     SCCOL nEndCol   = aExternalRange.aEnd.Col();
     140           0 :     pDoc->GetDataArea( aExternalRange.aStart.Tab(), nStartCol, nStartRow, nEndCol, nEndRow, false, false );
     141           0 :     aExternalRange.aStart.SetRow( nStartRow );
     142           0 :     aExternalRange.aStart.SetCol( nStartCol );
     143           0 :     aExternalRange.aEnd.SetRow( nEndRow );
     144           0 :     aExternalRange.aEnd.SetCol( nEndCol );
     145             : 
     146           0 :     if(( rSortParam.nCol1 == rSortParam.nCol2 && aExternalRange.aStart.Col() != aExternalRange.aEnd.Col() ) ||
     147           0 :         ( rSortParam.nRow1 == rSortParam.nRow2 && aExternalRange.aStart.Row() != aExternalRange.aEnd.Row() ) )
     148             :     {
     149           0 :         sal_uInt16 nFmt = SCA_VALID;
     150             : 
     151           0 :         pTabViewShell->AddHighlightRange( aExternalRange,Color( COL_LIGHTBLUE ) );
     152           0 :         ScRange rExtendRange( aExternalRange.aStart.Col(), aExternalRange.aStart.Row(), nTab, aExternalRange.aEnd.Col(), aExternalRange.aEnd.Row(), nTab );
     153           0 :         OUString aExtendStr(rExtendRange.Format(nFmt, pDoc));
     154             : 
     155           0 :         ScRange rCurrentRange( rSortParam.nCol1, rSortParam.nRow1, nTab, rSortParam.nCol2, rSortParam.nRow2, nTab );
     156           0 :         OUString aCurrentStr(rCurrentRange.Format(nFmt, pDoc));
     157             : 
     158           0 :         ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     159             :         OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     160             : 
     161           0 :         AbstractScSortWarningDlg* pWarningDlg = pFact->CreateScSortWarningDlg( pTabViewShell->GetDialogParent(), aExtendStr, aCurrentStr );
     162             :         OSL_ENSURE(pWarningDlg, "Dialog create fail!");
     163           0 :         short bResult = pWarningDlg->Execute();
     164           0 :         if( bResult == BTN_EXTEND_RANGE || bResult == BTN_CURRENT_SELECTION )
     165             :         {
     166           0 :             if( bResult == BTN_EXTEND_RANGE )
     167             :             {
     168           0 :                 pTabViewShell->MarkRange( aExternalRange, false );
     169           0 :                 pDBData->SetArea( nTab, aExternalRange.aStart.Col(), aExternalRange.aStart.Row(), aExternalRange.aEnd.Col(), aExternalRange.aEnd.Row() );
     170             :             }
     171             :         }
     172             :         else
     173             :         {
     174           0 :             bSort = false;
     175           0 :             pData->GetDocShell()->CancelAutoDBRange();
     176             :         }
     177             : 
     178           0 :         delete pWarningDlg;
     179           0 :         pTabViewShell->ClearHighlightRanges();
     180             :     }
     181           0 :     return bSort;
     182             : }
     183             : 
     184             : //after end execute from !IsModalInputMode, it is safer to delay deleting
     185             : namespace
     186             : {
     187           0 :     long DelayDeleteAbstractDialog( void *pAbstractDialog, void * /*pArg*/ )
     188             :     {
     189           0 :         delete reinterpret_cast<SfxAbstractTabDialog*>( pAbstractDialog );
     190           0 :         return 0;
     191             :     }
     192             : }
     193             : 
     194           0 : void ScCellShell::ExecuteDB( SfxRequest& rReq )
     195             : {
     196           0 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
     197           0 :     sal_uInt16 nSlotId = rReq.GetSlot();
     198           0 :     const SfxItemSet*   pReqArgs    = rReq.GetArgs();
     199           0 :     ScModule*           pScMod      = SC_MOD();
     200             : 
     201           0 :     pTabViewShell->HideListBox();                   // Autofilter-DropDown-Listbox
     202             : 
     203           0 :     if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
     204             :     {
     205           0 :         pScMod->InputEnterHandler();
     206           0 :         pTabViewShell->UpdateInputHandler();
     207             :     }
     208             : 
     209           0 :     switch ( nSlotId )
     210             :     {
     211             :         case SID_VIEW_DATA_SOURCE_BROWSER:
     212             :             {
     213             :                 //  check if database beamer is open
     214             : 
     215           0 :                 SfxViewFrame* pViewFrame = pTabViewShell->GetViewFrame();
     216           0 :                 sal_Bool bWasOpen = false;
     217             :                 {
     218           0 :                     uno::Reference<frame::XFrame> xFrame = pViewFrame->GetFrame().GetFrameInterface();
     219           0 :                     uno::Reference<frame::XFrame> xBeamerFrame = xFrame->findFrame(
     220             :                                                         OUString("_beamer"),
     221           0 :                                                         frame::FrameSearchFlag::CHILDREN);
     222           0 :                     if ( xBeamerFrame.is() )
     223           0 :                         bWasOpen = sal_True;
     224             :                 }
     225             : 
     226           0 :                 if ( bWasOpen )
     227             :                 {
     228             :                     //  close database beamer: just forward to SfxViewFrame
     229             : 
     230           0 :                     pViewFrame->ExecuteSlot( rReq );
     231             :                 }
     232             :                 else
     233             :                 {
     234             :                     //  show database beamer: SfxViewFrame call must be synchronous
     235             : 
     236           0 :                     pViewFrame->ExecuteSlot( rReq, false );      // false = synchronous
     237             : 
     238             :                     //  select current database in database beamer
     239             : 
     240           0 :                     ScImportParam aImportParam;
     241           0 :                     ScDBData* pDBData = pTabViewShell->GetDBData(true,SC_DB_OLD);       // don't create if none found
     242           0 :                     if (pDBData)
     243           0 :                         pDBData->GetImportParam( aImportParam );
     244             : 
     245           0 :                     ScDBDocFunc::ShowInBeamer( aImportParam, pTabViewShell->GetViewFrame() );
     246             :                 }
     247           0 :                 rReq.Done();        // needed because it's a toggle slot
     248             :             }
     249           0 :             break;
     250             : 
     251             :         case SID_REIMPORT_DATA:
     252             :             {
     253           0 :                 sal_Bool bOk = false;
     254           0 :                 ScDBData* pDBData = pTabViewShell->GetDBData(true,SC_DB_OLD);
     255           0 :                 if (pDBData)
     256             :                 {
     257           0 :                     ScImportParam aImportParam;
     258           0 :                     pDBData->GetImportParam( aImportParam );
     259           0 :                     if (aImportParam.bImport && !pDBData->HasImportSelection())
     260             :                     {
     261           0 :                         pTabViewShell->ImportData( aImportParam );
     262           0 :                         pDBData->SetImportParam( aImportParam );    //! Undo ??
     263           0 :                         bOk = sal_True;
     264           0 :                     }
     265             :                 }
     266             : 
     267           0 :                 if (!bOk && ! rReq.IsAPI() )
     268           0 :                     pTabViewShell->ErrorMessage(STR_REIMPORT_EMPTY);
     269             : 
     270           0 :                 if( bOk )
     271           0 :                     rReq.Done();
     272             :             }
     273           0 :             break;
     274             : 
     275             :         case SID_REFRESH_DBAREA:
     276             :             {
     277           0 :                 ScDBData* pDBData = pTabViewShell->GetDBData(true,SC_DB_OLD);
     278           0 :                 if (pDBData)
     279             :                 {
     280             :                     //  repeat import like SID_REIMPORT_DATA
     281             : 
     282           0 :                     sal_Bool bContinue = sal_True;
     283           0 :                     ScImportParam aImportParam;
     284           0 :                     pDBData->GetImportParam( aImportParam );
     285           0 :                     if (aImportParam.bImport && !pDBData->HasImportSelection())
     286             :                     {
     287           0 :                         bContinue = pTabViewShell->ImportData( aImportParam );
     288           0 :                         pDBData->SetImportParam( aImportParam );    //! Undo ??
     289             : 
     290             :                         //  mark (size may have been changed)
     291           0 :                         ScRange aNewRange;
     292           0 :                         pDBData->GetArea(aNewRange);
     293           0 :                         pTabViewShell->MarkRange(aNewRange);
     294             :                     }
     295             : 
     296           0 :                     if ( bContinue )        // fail at import -> break
     297             :                     {
     298             :                         //  internal operations, when any stored
     299             : 
     300           0 :                         if ( pDBData->HasQueryParam() || pDBData->HasSortParam() ||
     301           0 :                                                           pDBData->HasSubTotalParam() )
     302           0 :                             pTabViewShell->RepeatDB();
     303             : 
     304             :                         //  pivot tables that have the range as data source
     305             : 
     306           0 :                         ScRange aRange;
     307           0 :                         pDBData->GetArea(aRange);
     308           0 :                         GetViewData()->GetDocShell()->RefreshPivotTables(aRange);
     309           0 :                     }
     310             :                 }
     311           0 :                 rReq.Done();
     312             :             }
     313           0 :             break;
     314             : 
     315             :         case SID_SBA_BRW_INSERT:
     316             :             {
     317             :                 OSL_FAIL( "Deprecated Slot" );
     318             :             }
     319           0 :             break;
     320             : 
     321             :         case SID_DATA_FORM:
     322             :             {
     323           0 :                 ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     324             :                 OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     325             : 
     326             :                 AbstractScDataFormDlg* pDlg = pFact->CreateScDataFormDlg(
     327           0 :                     pTabViewShell->GetDialogParent(), pTabViewShell);
     328             :                 OSL_ENSURE(pDlg, "Dialog create fail!");
     329             : 
     330           0 :                 pDlg->Execute();
     331             : 
     332           0 :                 rReq.Done();
     333             :             }
     334           0 :             break;
     335             : 
     336             :         case SID_SUBTOTALS:
     337           0 :             ExecuteSubtotals(rReq);
     338           0 :             break;
     339             : 
     340             :         case SID_SORT_DESCENDING:
     341             :         case SID_SORT_ASCENDING:
     342             :             {
     343             :                 //#i60401 ux-ctest: Calc does not support all users' strategies regarding sorting data
     344             :                 //the patch comes from maoyg
     345           0 :                 ScSortParam aSortParam;
     346           0 :                 ScDBData*   pDBData = pTabViewShell->GetDBData();
     347           0 :                 ScViewData* pData   = GetViewData();
     348             : 
     349           0 :                 pDBData->GetSortParam( aSortParam );
     350             : 
     351           0 :                 if( lcl_GetSortParam( pData, aSortParam ) )
     352             :                 {
     353           0 :                     SfxItemSet  aArgSet( GetPool(), SCITEM_SORTDATA, SCITEM_SORTDATA );
     354           0 :                     SCCOL nCol  = GetViewData()->GetCurX();
     355           0 :                     SCCOL nTab  = GetViewData()->GetTabNo();
     356           0 :                     ScDocument* pDoc    = GetViewData()->GetDocument();
     357             : 
     358           0 :                     pDBData->GetSortParam( aSortParam );
     359           0 :                     sal_Bool bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, nTab );
     360             : 
     361           0 :                     if( nCol < aSortParam.nCol1 )
     362           0 :                         nCol = aSortParam.nCol1;
     363           0 :                     else if( nCol > aSortParam.nCol2 )
     364           0 :                         nCol = aSortParam.nCol2;
     365             : 
     366           0 :                     aSortParam.bHasHeader       = bHasHeader;
     367           0 :                     aSortParam.bByRow           = true;
     368           0 :                     aSortParam.bCaseSens        = false;
     369           0 :                     aSortParam.bNaturalSort     = false;
     370           0 :                     aSortParam.bIncludePattern  = true;
     371           0 :                     aSortParam.bInplace         = true;
     372           0 :                     aSortParam.maKeyState[0].bDoSort = true;
     373           0 :                     aSortParam.maKeyState[0].nField = nCol;
     374           0 :                     aSortParam.maKeyState[0].bAscending = ( nSlotId == SID_SORT_ASCENDING );
     375             : 
     376           0 :                     for ( sal_uInt16 i=1; i<aSortParam.GetSortKeyCount(); i++ )
     377           0 :                         aSortParam.maKeyState[i].bDoSort = false;
     378             : 
     379           0 :                     aArgSet.Put( ScSortItem( SCITEM_SORTDATA, GetViewData(), &aSortParam ) );
     380             : 
     381           0 :                     pTabViewShell->UISort( aSortParam );        // subtotal when needed new
     382             : 
     383           0 :                     rReq.Done();
     384           0 :                 }
     385             :             }
     386           0 :             break;
     387             : 
     388             :         case SID_SORT:
     389             :             {
     390           0 :                 const SfxItemSet* pArgs = rReq.GetArgs();
     391             : 
     392             :                 //#i60401 ux-ctest: Calc does not support all users' strategies regarding sorting data
     393             :                 //the patch comes from maoyg
     394             : 
     395           0 :                 if ( pArgs )        // Basic
     396             :                 {
     397           0 :                     ScSortParam aSortParam;
     398           0 :                     ScDBData*   pDBData = pTabViewShell->GetDBData();
     399           0 :                     ScViewData* pData   = GetViewData();
     400             : 
     401           0 :                     pDBData->GetSortParam( aSortParam );
     402             : 
     403           0 :                     if( lcl_GetSortParam( pData, aSortParam ) )
     404             :                     {
     405           0 :                         ScDocument* pDoc = GetViewData()->GetDocument();
     406             : 
     407           0 :                         pDBData->GetSortParam( aSortParam );
     408           0 :                         sal_Bool bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, pData->GetTabNo() );
     409           0 :                         if( bHasHeader )
     410           0 :                             aSortParam.bHasHeader = bHasHeader;
     411             : 
     412           0 :                         aSortParam.bInplace = true;             // from Basic always
     413             : 
     414             :                         const SfxPoolItem* pItem;
     415           0 :                         if ( pArgs->GetItemState( SID_SORT_BYROW, true, &pItem ) == SFX_ITEM_SET )
     416           0 :                             aSortParam.bByRow = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     417           0 :                         if ( pArgs->GetItemState( SID_SORT_HASHEADER, true, &pItem ) == SFX_ITEM_SET )
     418           0 :                             aSortParam.bHasHeader = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     419           0 :                         if ( pArgs->GetItemState( SID_SORT_CASESENS, true, &pItem ) == SFX_ITEM_SET )
     420           0 :                             aSortParam.bCaseSens = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     421           0 :                         if ( pArgs->GetItemState( SID_SORT_NATURALSORT, true, &pItem ) == SFX_ITEM_SET )
     422           0 :                             aSortParam.bNaturalSort = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     423           0 :                         if ( pArgs->GetItemState( SID_SORT_ATTRIBS, true, &pItem ) == SFX_ITEM_SET )
     424           0 :                             aSortParam.bIncludePattern = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     425           0 :                         if ( pArgs->GetItemState( SID_SORT_USERDEF, true, &pItem ) == SFX_ITEM_SET )
     426             :                         {
     427           0 :                             sal_uInt16 nUserIndex = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     428           0 :                             aSortParam.bUserDef = ( nUserIndex != 0 );
     429           0 :                             if ( nUserIndex )
     430           0 :                                 aSortParam.nUserIndex = nUserIndex - 1;     // Basic: 1-based
     431             :                         }
     432             : 
     433           0 :                         SCCOLROW nField0 = 0;
     434           0 :                         if ( pArgs->GetItemState( FN_PARAM_1, true, &pItem ) == SFX_ITEM_SET )
     435           0 :                             nField0 = static_cast<const SfxInt32Item*>(pItem)->GetValue();
     436           0 :                         aSortParam.maKeyState[0].bDoSort = ( nField0 != 0 );
     437           0 :                         aSortParam.maKeyState[0].nField = nField0 > 0 ? (nField0-1) : 0;
     438           0 :                         if ( pArgs->GetItemState( FN_PARAM_2, true, &pItem ) == SFX_ITEM_SET )
     439           0 :                             aSortParam.maKeyState[0].bAscending = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     440           0 :                         SCCOLROW nField1 = 0;
     441           0 :                         if ( pArgs->GetItemState( FN_PARAM_3, true, &pItem ) == SFX_ITEM_SET )
     442           0 :                             nField1 = static_cast<const SfxInt32Item*>(pItem)->GetValue();
     443           0 :                         aSortParam.maKeyState[1].bDoSort = ( nField1 != 0 );
     444           0 :                         aSortParam.maKeyState[1].nField = nField1 > 0 ? (nField1-1) : 0;
     445           0 :                         if ( pArgs->GetItemState( FN_PARAM_4, true, &pItem ) == SFX_ITEM_SET )
     446           0 :                             aSortParam.maKeyState[1].bAscending = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     447           0 :                         SCCOLROW nField2 = 0;
     448           0 :                         if ( pArgs->GetItemState( FN_PARAM_5, true, &pItem ) == SFX_ITEM_SET )
     449           0 :                             nField2 = static_cast<const SfxInt32Item*>(pItem)->GetValue();
     450           0 :                         aSortParam.maKeyState[2].bDoSort = ( nField2 != 0 );
     451           0 :                         aSortParam.maKeyState[2].nField = nField2 > 0 ? (nField2-1) : 0;
     452           0 :                         if ( pArgs->GetItemState( FN_PARAM_6, true, &pItem ) == SFX_ITEM_SET )
     453           0 :                             aSortParam.maKeyState[2].bAscending = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     454             : 
     455             :                         // subtotal when needed new
     456           0 :                         pTabViewShell->UISort( aSortParam );
     457           0 :                         rReq.Done();
     458           0 :                     }
     459             :                 }
     460             :                 else
     461             :                 {
     462           0 :                     ScSortParam aSortParam;
     463           0 :                     ScDBData*   pDBData = pTabViewShell->GetDBData();
     464           0 :                     ScViewData* pData   = GetViewData();
     465             : 
     466           0 :                     pDBData->GetSortParam( aSortParam );
     467             : 
     468           0 :                     if( lcl_GetSortParam( pData, aSortParam ) )
     469             :                     {
     470           0 :                         SfxAbstractTabDialog* pDlg = NULL;
     471           0 :                         ScDocument* pDoc = GetViewData()->GetDocument();
     472           0 :                         SfxItemSet  aArgSet( GetPool(), SCITEM_SORTDATA, SCITEM_SORTDATA );
     473             : 
     474           0 :                         pDBData->GetSortParam( aSortParam );
     475           0 :                         sal_Bool bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, pData->GetTabNo() );
     476           0 :                         if( bHasHeader )
     477           0 :                             aSortParam.bHasHeader = bHasHeader;
     478             : 
     479           0 :                         aArgSet.Put( ScSortItem( SCITEM_SORTDATA, GetViewData(), &aSortParam ) );
     480             : 
     481           0 :                         ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     482             :                         assert(pFact); //ScAbstractFactory create fail!
     483             : 
     484           0 :                         pDlg = pFact->CreateScSortDlg(pTabViewShell->GetDialogParent(),  &aArgSet);
     485             :                         assert(pDlg); //Dialog create fail!
     486           0 :                         pDlg->SetCurPageId("criteria");  // 1=sort field tab  2=sort options tab
     487             : 
     488           0 :                         if ( pDlg->Execute() == RET_OK )
     489             :                         {
     490           0 :                             const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
     491             :                             const ScSortParam& rOutParam = ((const ScSortItem&)
     492           0 :                                 pOutSet->Get( SCITEM_SORTDATA )).GetSortData();
     493             : 
     494             :                             // subtotal when needed new
     495             : 
     496           0 :                             pTabViewShell->UISort( rOutParam );
     497             : 
     498           0 :                             if ( rOutParam.bInplace )
     499             :                             {
     500             :                                 rReq.AppendItem( SfxBoolItem( SID_SORT_BYROW,
     501           0 :                                     rOutParam.bByRow ) );
     502             :                                 rReq.AppendItem( SfxBoolItem( SID_SORT_HASHEADER,
     503           0 :                                     rOutParam.bHasHeader ) );
     504             :                                 rReq.AppendItem( SfxBoolItem( SID_SORT_CASESENS,
     505           0 :                                     rOutParam.bCaseSens ) );
     506             :                             rReq.AppendItem( SfxBoolItem( SID_SORT_NATURALSORT,
     507           0 :                                                 rOutParam.bNaturalSort ) );
     508             :                                 rReq.AppendItem( SfxBoolItem( SID_SORT_ATTRIBS,
     509           0 :                                     rOutParam.bIncludePattern ) );
     510           0 :                                 sal_uInt16 nUser = rOutParam.bUserDef ? ( rOutParam.nUserIndex + 1 ) : 0;
     511           0 :                                 rReq.AppendItem( SfxUInt16Item( SID_SORT_USERDEF, nUser ) );
     512           0 :                                 if ( rOutParam.maKeyState[0].bDoSort )
     513             :                                 {
     514             :                                     rReq.AppendItem( SfxInt32Item( FN_PARAM_1,
     515           0 :                                         rOutParam.maKeyState[0].nField + 1 ) );
     516             :                                     rReq.AppendItem( SfxBoolItem( FN_PARAM_2,
     517           0 :                                         rOutParam.maKeyState[0].bAscending ) );
     518             :                                 }
     519           0 :                                 if ( rOutParam.maKeyState[1].bDoSort )
     520             :                                 {
     521             :                                     rReq.AppendItem( SfxInt32Item( FN_PARAM_3,
     522           0 :                                         rOutParam.maKeyState[1].nField + 1 ) );
     523             :                                     rReq.AppendItem( SfxBoolItem( FN_PARAM_4,
     524           0 :                                         rOutParam.maKeyState[1].bAscending ) );
     525             :                                 }
     526           0 :                                 if ( rOutParam.maKeyState[2].bDoSort )
     527             :                                 {
     528             :                                     rReq.AppendItem( SfxInt32Item( FN_PARAM_5,
     529           0 :                                         rOutParam.maKeyState[2].nField + 1 ) );
     530             :                                     rReq.AppendItem( SfxBoolItem( FN_PARAM_6,
     531           0 :                                         rOutParam.maKeyState[2].bAscending ) );
     532             :                                 }
     533             :                             }
     534             : 
     535           0 :                             rReq.Done();
     536             :                         }
     537             :                         else
     538           0 :                             GetViewData()->GetDocShell()->CancelAutoDBRange();
     539             : 
     540           0 :                         delete pDlg;
     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( ((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( ((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 && SFX_ITEM_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 && SFX_ITEM_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 = (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             : #ifndef DISABLE_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 :                         (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             :                         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             :                         }
     737             : 
     738           0 :                         delete pDlg;
     739             :                     }
     740             :                 }
     741             :             }
     742           0 :             break;
     743             :         case SID_DATA_STREAMS:
     744             :         {
     745           0 :             sc::DataStreamDlg aDialog( GetViewData()->GetDocShell(), pTabViewShell->GetDialogParent() );
     746           0 :             ScDocument *pDoc = GetViewData()->GetDocument();
     747           0 :             sc::DocumentLinkManager& rMgr = pDoc->GetDocLinkManager();
     748           0 :             sc::DataStream* pStrm = rMgr.getDataStream();
     749           0 :             if (pStrm)
     750           0 :                 aDialog.Init(*pStrm);
     751             : 
     752           0 :             if (aDialog.Execute() == RET_OK)
     753           0 :                 aDialog.StartStream();
     754             :         }
     755           0 :         break;
     756             :         case SID_DATA_STREAMS_PLAY:
     757             :         {
     758           0 :             ScDocument *pDoc = GetViewData()->GetDocument();
     759           0 :             sc::DocumentLinkManager& rMgr = pDoc->GetDocLinkManager();
     760           0 :             sc::DataStream* pStrm = rMgr.getDataStream();
     761           0 :             if (pStrm)
     762           0 :                 pStrm->StartImport();
     763             :         }
     764           0 :         break;
     765             :         case SID_DATA_STREAMS_STOP:
     766             :         {
     767           0 :             ScDocument *pDoc = GetViewData()->GetDocument();
     768           0 :             sc::DocumentLinkManager& rMgr = pDoc->GetDocLinkManager();
     769           0 :             sc::DataStream* pStrm = rMgr.getDataStream();
     770           0 :             if (pStrm)
     771           0 :                 pStrm->StopImport();
     772             :         }
     773           0 :         break;
     774             :         case SID_MANAGE_XML_SOURCE:
     775           0 :             ExecuteXMLSourceDialog();
     776           0 :         break;
     777             :         case FID_VALIDATION:
     778             :             {
     779             :                 const SfxPoolItem* pItem;
     780           0 :                 const SfxItemSet* pArgs = rReq.GetArgs();
     781           0 :                 if ( pArgs )
     782             :                 {
     783             :                     OSL_FAIL("later...");
     784             :                 }
     785             :                 else
     786             :                 {
     787           0 :                     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     788             :                     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     789           0 :                     ::GetTabPageRanges ScTPValidationValueGetRanges = pFact->GetTabPageRangesFunc();
     790             :                     OSL_ENSURE(ScTPValidationValueGetRanges, "TabPage create fail!");
     791           0 :                     SfxItemSet aArgSet( GetPool(), (*ScTPValidationValueGetRanges)() );
     792           0 :                     ScValidationMode eMode = SC_VALID_ANY;
     793           0 :                     ScConditionMode eOper = SC_COND_EQUAL;
     794           0 :                     OUString aExpr1, aExpr2;
     795           0 :                     sal_Bool bBlank = sal_True;
     796           0 :                     sal_Int16 nListType = ValidListType::UNSORTED;
     797           0 :                     sal_Bool bShowHelp = false;
     798           0 :                     OUString aHelpTitle, aHelpText;
     799           0 :                     sal_Bool bShowError = false;
     800           0 :                     ScValidErrorStyle eErrStyle = SC_VALERR_STOP;
     801           0 :                     OUString aErrTitle, aErrText;
     802             : 
     803           0 :                     ScDocument* pDoc = GetViewData()->GetDocument();
     804           0 :                     SCCOL nCurX = GetViewData()->GetCurX();
     805           0 :                     SCROW nCurY = GetViewData()->GetCurY();
     806           0 :                     SCTAB nTab = GetViewData()->GetTabNo();
     807           0 :                     ScAddress aCursorPos( nCurX, nCurY, nTab );
     808             :                     sal_uLong nIndex = ((SfxUInt32Item*)pDoc->GetAttr(
     809           0 :                                 nCurX, nCurY, nTab, ATTR_VALIDDATA ))->GetValue();
     810           0 :                     if ( nIndex )
     811             :                     {
     812           0 :                         const ScValidationData* pOldData = pDoc->GetValidationEntry( nIndex );
     813           0 :                         if ( pOldData )
     814             :                         {
     815           0 :                             eMode = pOldData->GetDataMode();
     816           0 :                             eOper = pOldData->GetOperation();
     817           0 :                             sal_uLong nNumFmt = 0;
     818           0 :                             if ( eMode == SC_VALID_DATE || eMode == SC_VALID_TIME )
     819             :                             {
     820             :                                 short nType = ( eMode == SC_VALID_DATE ) ? NUMBERFORMAT_DATE
     821           0 :                                                                          : NUMBERFORMAT_TIME;
     822             :                                 nNumFmt = pDoc->GetFormatTable()->GetStandardFormat(
     823           0 :                                                                     nType, ScGlobal::eLnge );
     824             :                             }
     825           0 :                             aExpr1 = pOldData->GetExpression( aCursorPos, 0, nNumFmt );
     826           0 :                             aExpr2 = pOldData->GetExpression( aCursorPos, 1, nNumFmt );
     827           0 :                             bBlank = pOldData->IsIgnoreBlank();
     828           0 :                             nListType = pOldData->GetListType();
     829             : 
     830           0 :                             bShowHelp = pOldData->GetInput( aHelpTitle, aHelpText );
     831           0 :                             bShowError = pOldData->GetErrMsg( aErrTitle, aErrText, eErrStyle );
     832             : 
     833           0 :                             aArgSet.Put( SfxAllEnumItem( FID_VALID_MODE,        sal::static_int_cast<sal_uInt16>(eMode) ) );
     834           0 :                             aArgSet.Put( SfxAllEnumItem( FID_VALID_CONDMODE,    sal::static_int_cast<sal_uInt16>(eOper) ) );
     835           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_VALUE1,      aExpr1 ) );
     836           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_VALUE2,      aExpr2 ) );
     837           0 :                             aArgSet.Put( SfxBoolItem(    FID_VALID_BLANK,       bBlank ) );
     838           0 :                             aArgSet.Put( SfxInt16Item(   FID_VALID_LISTTYPE,    nListType ) );
     839           0 :                             aArgSet.Put( SfxBoolItem(    FID_VALID_SHOWHELP,    bShowHelp ) );
     840           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_HELPTITLE,   aHelpTitle ) );
     841           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_HELPTEXT,    aHelpText ) );
     842           0 :                             aArgSet.Put( SfxBoolItem(    FID_VALID_SHOWERR,     bShowError ) );
     843           0 :                             aArgSet.Put( SfxAllEnumItem( FID_VALID_ERRSTYLE,    sal::static_int_cast<sal_uInt16>(eErrStyle) ) );
     844           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_ERRTITLE,    aErrTitle ) );
     845           0 :                             aArgSet.Put( SfxStringItem(  FID_VALID_ERRTEXT,     aErrText ) );
     846             :                         }
     847             :                     }
     848             : 
     849             :                     // cell range picker
     850           0 :                     SfxAbstractTabDialog* pDlg = pFact->CreateScValidationDlg(NULL, &aArgSet, pTabViewShell);
     851             :                     assert(pDlg); //Dialog create fail!
     852             : 
     853           0 :                     short nResult = pDlg->Execute();
     854             :                     //When picking Cell Range, other Tab may be switched. Need restore the correct tab
     855           0 :                     pTabViewShell->SetTabNo( nTab );
     856           0 :                     if ( nResult == RET_OK )
     857             :                     {
     858           0 :                         const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
     859             : 
     860           0 :                         if ( pOutSet->GetItemState( FID_VALID_MODE, true, &pItem ) == SFX_ITEM_SET )
     861           0 :                             eMode = (ScValidationMode) ((const SfxAllEnumItem*)pItem)->GetValue();
     862           0 :                         if ( pOutSet->GetItemState( FID_VALID_CONDMODE, true, &pItem ) == SFX_ITEM_SET )
     863           0 :                             eOper = (ScConditionMode) ((const SfxAllEnumItem*)pItem)->GetValue();
     864           0 :                         if ( pOutSet->GetItemState( FID_VALID_VALUE1, true, &pItem ) == SFX_ITEM_SET )
     865             :                         {
     866           0 :                             OUString aTemp1 = ((const SfxStringItem*)pItem)->GetValue();
     867           0 :                             if (eMode == SC_VALID_DATE || eMode == SC_VALID_TIME)
     868             :                             {
     869           0 :                                 sal_uInt32 nNumIndex = 0;
     870             :                                 double nVal;
     871           0 :                                 if (pDoc->GetFormatTable()->IsNumberFormat(aTemp1, nNumIndex, nVal))
     872           0 :                                     aExpr1 = OUString( ::rtl::math::doubleToUString( nVal,
     873             :                                             rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
     874           0 :                                             ScGlobal::pLocaleData->getNumDecimalSep()[0], true));
     875             :                                 else
     876           0 :                                     aExpr1 = aTemp1;
     877             :                             }
     878             :                             else
     879           0 :                                 aExpr1 = aTemp1;
     880             :                         }
     881           0 :                         if ( pOutSet->GetItemState( FID_VALID_VALUE2, true, &pItem ) == SFX_ITEM_SET )
     882             :                         {
     883           0 :                             OUString aTemp2 = ((const SfxStringItem*)pItem)->GetValue();
     884           0 :                             if (eMode == SC_VALID_DATE || eMode == SC_VALID_TIME)
     885             :                             {
     886           0 :                                 sal_uInt32 nNumIndex = 0;
     887             :                                 double nVal;
     888           0 :                                 if (pDoc->GetFormatTable()->IsNumberFormat(aTemp2, nNumIndex, nVal))
     889           0 :                                     aExpr2 = OUString( ::rtl::math::doubleToUString( nVal,
     890             :                                             rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
     891           0 :                                             ScGlobal::pLocaleData->getNumDecimalSep()[0], true));
     892             :                                 else
     893           0 :                                     aExpr2 = aTemp2;
     894             :                             }
     895             :                             else
     896           0 :                                 aExpr2 = aTemp2;
     897             :                         }
     898             : 
     899           0 :                         if ( pOutSet->GetItemState( FID_VALID_BLANK, true, &pItem ) == SFX_ITEM_SET )
     900           0 :                             bBlank = ((const SfxBoolItem*)pItem)->GetValue();
     901           0 :                         if ( pOutSet->GetItemState( FID_VALID_LISTTYPE, true, &pItem ) == SFX_ITEM_SET )
     902           0 :                             nListType = ((const SfxInt16Item*)pItem)->GetValue();
     903             : 
     904           0 :                         if ( pOutSet->GetItemState( FID_VALID_SHOWHELP, true, &pItem ) == SFX_ITEM_SET )
     905           0 :                             bShowHelp = ((const SfxBoolItem*)pItem)->GetValue();
     906           0 :                         if ( pOutSet->GetItemState( FID_VALID_HELPTITLE, true, &pItem ) == SFX_ITEM_SET )
     907           0 :                             aHelpTitle = ((const SfxStringItem*)pItem)->GetValue();
     908           0 :                         if ( pOutSet->GetItemState( FID_VALID_HELPTEXT, true, &pItem ) == SFX_ITEM_SET )
     909           0 :                             aHelpText = ((const SfxStringItem*)pItem)->GetValue();
     910             : 
     911           0 :                         if ( pOutSet->GetItemState( FID_VALID_SHOWERR, true, &pItem ) == SFX_ITEM_SET )
     912           0 :                             bShowError = ((const SfxBoolItem*)pItem)->GetValue();
     913           0 :                         if ( pOutSet->GetItemState( FID_VALID_ERRSTYLE, true, &pItem ) == SFX_ITEM_SET )
     914           0 :                             eErrStyle = (ScValidErrorStyle) ((const SfxAllEnumItem*)pItem)->GetValue();
     915           0 :                         if ( pOutSet->GetItemState( FID_VALID_ERRTITLE, true, &pItem ) == SFX_ITEM_SET )
     916           0 :                             aErrTitle = ((const SfxStringItem*)pItem)->GetValue();
     917           0 :                         if ( pOutSet->GetItemState( FID_VALID_ERRTEXT, true, &pItem ) == SFX_ITEM_SET )
     918           0 :                             aErrText = ((const SfxStringItem*)pItem)->GetValue();
     919             : 
     920           0 :                         ScValidationData aData( eMode, eOper, aExpr1, aExpr2, pDoc, aCursorPos );
     921           0 :                         aData.SetIgnoreBlank( bBlank );
     922           0 :                         aData.SetListType( nListType );
     923             : 
     924           0 :                         aData.SetInput(aHelpTitle, aHelpText);          // sets bShowInput to TRUE
     925           0 :                         if (!bShowHelp)
     926           0 :                             aData.ResetInput();                         // reset only bShowInput
     927             : 
     928           0 :                         aData.SetError(aErrTitle, aErrText, eErrStyle); // sets bShowError to TRUE
     929           0 :                         if (!bShowError)
     930           0 :                             aData.ResetError();                         // reset only bShowError
     931             : 
     932           0 :                         pTabViewShell->SetValidation( aData );
     933           0 :                         pTabViewShell->TestHintWindow();
     934           0 :                         rReq.Done( *pOutSet );
     935             :                     }
     936             :                     //after end execute from !IsModalInputMode, it is safer to delay deleting
     937             :                     //delete pDlg;
     938           0 :                     Application::PostUserEvent( Link( pDlg, &DelayDeleteAbstractDialog ) );
     939             :                 }
     940             :             }
     941           0 :             break;
     942             : 
     943             :         case SID_TEXT_TO_COLUMNS:
     944             :             {
     945           0 :                 ScViewData* pData = GetViewData();
     946             :                 OSL_ENSURE( pData, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pData is null!" );
     947           0 :                 ScRange aRange;
     948             : 
     949           0 :                 if ( lcl_GetTextToColumnsRange( pData, aRange ) )
     950             :                 {
     951           0 :                     ScDocument* pDoc = pData->GetDocument();
     952             :                     OSL_ENSURE( pDoc, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDoc is null!" );
     953             : 
     954           0 :                     ScImportExport aExport( pDoc, aRange );
     955           0 :                     aExport.SetExportTextOptions( ScExportTextOptions( ScExportTextOptions::None, 0, false ) );
     956             : 
     957             :                     // #i87703# text to columns fails with tab separator
     958           0 :                     aExport.SetDelimiter( static_cast< sal_Unicode >( 0 ) );
     959             : 
     960           0 :                     SvMemoryStream aStream;
     961           0 :                     aStream.SetStreamCharSet( RTL_TEXTENCODING_UNICODE );
     962           0 :                     ScImportExport::SetNoEndianSwap( aStream );
     963           0 :                     aExport.ExportStream( aStream, OUString(), FORMAT_STRING );
     964             : 
     965           0 :                     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     966             :                     OSL_ENSURE( pFact, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pFact is null!" );
     967             :                     AbstractScImportAsciiDlg *pDlg = pFact->CreateScImportAsciiDlg(
     968           0 :                         NULL, OUString(), &aStream, SC_TEXTTOCOLUMNS);
     969             :                     OSL_ENSURE( pDlg, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDlg is null!" );
     970             : 
     971           0 :                     if ( pDlg->Execute() == RET_OK )
     972             :                     {
     973           0 :                         ScDocShell* pDocSh = pData->GetDocShell();
     974             :                         OSL_ENSURE( pDocSh, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDocSh is null!" );
     975             : 
     976           0 :                         OUString aUndo = ScGlobal::GetRscString( STR_UNDO_TEXTTOCOLUMNS );
     977           0 :                         pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
     978             : 
     979           0 :                         ScImportExport aImport( pDoc, aRange.aStart );
     980           0 :                         ScAsciiOptions aOptions;
     981           0 :                         pDlg->GetOptions( aOptions );
     982           0 :                         pDlg->SaveParameters();
     983           0 :                         aImport.SetExtOptions( aOptions );
     984           0 :                         aImport.SetApi( false );
     985           0 :                         aStream.Seek( 0 );
     986           0 :                         aImport.ImportStream( aStream, OUString(), FORMAT_STRING );
     987             : 
     988           0 :                         pDocSh->GetUndoManager()->LeaveListAction();
     989             :                     }
     990           0 :                     delete pDlg;
     991             :                 }
     992             :             }
     993           0 :             break;
     994             :         }
     995           0 : }
     996             : 
     997           0 : void ScCellShell::GetDBState( SfxItemSet& rSet )
     998             : {
     999           0 :     ScTabViewShell* pTabViewShell   = GetViewData()->GetViewShell();
    1000           0 :     ScViewData* pData       = GetViewData();
    1001           0 :     ScDocShell* pDocSh      = pData->GetDocShell();
    1002           0 :     ScDocument* pDoc        = pDocSh->GetDocument();
    1003           0 :     SCCOL       nPosX       = pData->GetCurX();
    1004           0 :     SCROW       nPosY       = pData->GetCurY();
    1005           0 :     SCTAB       nTab        = pData->GetTabNo();
    1006             : 
    1007           0 :     sal_Bool bAutoFilter = false;
    1008           0 :     sal_Bool bAutoFilterTested = false;
    1009             : 
    1010           0 :     SfxWhichIter aIter(rSet);
    1011           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
    1012           0 :     while (nWhich)
    1013             :     {
    1014           0 :         switch (nWhich)
    1015             :         {
    1016             :             case SID_REFRESH_DBAREA:
    1017             :                 {
    1018             :                     //  imported data without selection
    1019             :                     //  or filter,sort,subtotal (also without import)
    1020           0 :                     sal_Bool bOk = false;
    1021           0 :                     ScDBData* pDBData = pTabViewShell->GetDBData(false,SC_DB_OLD);
    1022           0 :                     if (pDBData && pDoc->GetChangeTrack() == NULL)
    1023             :                     {
    1024           0 :                         if ( pDBData->HasImportParam() )
    1025           0 :                             bOk = !pDBData->HasImportSelection();
    1026             :                         else
    1027             :                         {
    1028           0 :                             bOk = pDBData->HasQueryParam() ||
    1029           0 :                                   pDBData->HasSortParam() ||
    1030           0 :                                   pDBData->HasSubTotalParam();
    1031             :                         }
    1032             :                     }
    1033           0 :                     if (!bOk)
    1034           0 :                         rSet.DisableItem( nWhich );
    1035             :                 }
    1036           0 :                 break;
    1037             : 
    1038             :             case SID_FILTER:
    1039             :             case SID_SPECIAL_FILTER:
    1040             :                 {
    1041           0 :                     ScRange aDummy;
    1042           0 :                     ScMarkType eMarkType = GetViewData()->GetSimpleArea( aDummy);
    1043           0 :                     if (eMarkType != SC_MARK_SIMPLE && eMarkType != SC_MARK_SIMPLE_FILTERED)
    1044             :                     {
    1045           0 :                         rSet.DisableItem( nWhich );
    1046             :                     }
    1047             :                 }
    1048           0 :                 break;
    1049             : 
    1050             : 
    1051             :                 //in case of Redlining and multiselection disable
    1052             :             case SID_SORT_ASCENDING:
    1053             :             case SID_SORT_DESCENDING:
    1054             :             case SCITEM_SORTDATA:
    1055             :             case SCITEM_SUBTDATA:
    1056             :             case SID_OPENDLG_PIVOTTABLE:
    1057             :                 {
    1058             :                     //! move ReadOnly check to idl flags
    1059             : 
    1060           0 :                     if ( pDocSh->IsReadOnly() || pDoc->GetChangeTrack()!=NULL ||
    1061           0 :                             GetViewData()->IsMultiMarked() )
    1062             :                     {
    1063           0 :                         rSet.DisableItem( nWhich );
    1064             :                     }
    1065             :                 }
    1066           0 :                 break;
    1067             : 
    1068             :             case SID_REIMPORT_DATA:
    1069             :                 {
    1070             :                     //  only imported data without selection
    1071           0 :                     ScDBData* pDBData = pTabViewShell->GetDBData(false,SC_DB_OLD);
    1072           0 :                     if (!pDBData || !pDBData->HasImportParam() || pDBData->HasImportSelection() ||
    1073           0 :                         pDoc->GetChangeTrack()!=NULL)
    1074             :                     {
    1075           0 :                         rSet.DisableItem( nWhich );
    1076             :                     }
    1077             :                 }
    1078           0 :                 break;
    1079             : 
    1080             :             case SID_VIEW_DATA_SOURCE_BROWSER:
    1081             :                 {
    1082           0 :                     if (!SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SDATABASE))
    1083           0 :                         rSet.Put(SfxVisibilityItem(nWhich, false));
    1084             :                     else
    1085             :                         //  get state (BoolItem) from SfxViewFrame
    1086           0 :                         pTabViewShell->GetViewFrame()->GetSlotState( nWhich, NULL, &rSet );
    1087             :                 }
    1088           0 :                 break;
    1089             :             case SID_SBA_BRW_INSERT:
    1090             :                 {
    1091             :                     //  SBA wants a sal_Bool-item, enabled
    1092             : 
    1093           0 :                     sal_Bool bEnable = sal_True;
    1094           0 :                     rSet.Put(SfxBoolItem(nWhich, bEnable));
    1095             :                 }
    1096           0 :                 break;
    1097             : 
    1098             :             case SID_AUTO_FILTER:
    1099             :             case SID_AUTOFILTER_HIDE:
    1100             :                 {
    1101           0 :                     if (!bAutoFilterTested)
    1102             :                     {
    1103           0 :                         bAutoFilter = pDoc->HasAutoFilter( nPosX, nPosY, nTab );
    1104           0 :                         bAutoFilterTested = sal_True;
    1105             :                     }
    1106           0 :                     if ( nWhich == SID_AUTO_FILTER )
    1107             :                     {
    1108           0 :                         ScRange aDummy;
    1109           0 :                         ScMarkType eMarkType = GetViewData()->GetSimpleArea( aDummy);
    1110           0 :                         if (eMarkType != SC_MARK_SIMPLE && eMarkType != SC_MARK_SIMPLE_FILTERED)
    1111             :                         {
    1112           0 :                             rSet.DisableItem( nWhich );
    1113             :                         }
    1114           0 :                         else if (pDoc->GetDPAtBlock(aDummy))
    1115             :                         {
    1116           0 :                             rSet.DisableItem( nWhich );
    1117             :                         }
    1118             :                         else
    1119           0 :                             rSet.Put( SfxBoolItem( nWhich, bAutoFilter ) );
    1120             :                     }
    1121             :                     else
    1122           0 :                         if (!bAutoFilter)
    1123           0 :                             rSet.DisableItem( nWhich );
    1124             :                 }
    1125           0 :                 break;
    1126             : 
    1127             :             case SID_UNFILTER:
    1128             :                 {
    1129             :                     SCCOL nStartCol, nEndCol;
    1130             :                     SCROW  nStartRow, nEndRow;
    1131             :                     SCTAB  nStartTab, nEndTab;
    1132           0 :                     sal_Bool bAnyQuery = false;
    1133             : 
    1134             :                     sal_Bool bSelected = (GetViewData()->GetSimpleArea(
    1135           0 :                                 nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab )
    1136           0 :                             == SC_MARK_SIMPLE);
    1137             : 
    1138           0 :                     if ( bSelected )
    1139             :                     {
    1140           0 :                         if (nStartCol==nEndCol && nStartRow==nEndRow)
    1141           0 :                             bSelected = false;
    1142             :                     }
    1143             :                     else
    1144             :                     {
    1145           0 :                         nStartCol = GetViewData()->GetCurX();
    1146           0 :                         nStartRow = GetViewData()->GetCurY();
    1147           0 :                         nStartTab = GetViewData()->GetTabNo();
    1148             :                     }
    1149             : 
    1150             :                     ScDBData* pDBData = bSelected
    1151           0 :                                 ? pDoc->GetDBAtArea( nStartTab, nStartCol, nStartRow, nEndCol, nEndRow )
    1152           0 :                                 : pDoc->GetDBAtCursor( nStartCol, nStartRow, nStartTab );
    1153             : 
    1154           0 :                     if ( pDBData )
    1155             :                     {
    1156           0 :                         ScQueryParam aParam;
    1157           0 :                         pDBData->GetQueryParam( aParam );
    1158           0 :                         if ( aParam.GetEntry(0).bDoQuery )
    1159           0 :                             bAnyQuery = sal_True;
    1160             :                     }
    1161             : 
    1162           0 :                     if ( !bAnyQuery )
    1163           0 :                         rSet.DisableItem( nWhich );
    1164             :                 }
    1165           0 :                 break;
    1166             : 
    1167             :             case SID_DEFINE_DBNAME:
    1168             :                 {
    1169           0 :                     if ( pDocSh && pDocSh->IsDocShared() )
    1170             :                     {
    1171           0 :                         rSet.DisableItem( nWhich );
    1172             :                     }
    1173             :                 }
    1174           0 :                 break;
    1175             :             case SID_DATA_STREAMS:
    1176             :             case SID_DATA_STREAMS_PLAY:
    1177             :             case SID_DATA_STREAMS_STOP:
    1178             :                 {
    1179           0 :                     SvtMiscOptions aMiscOptions;
    1180           0 :                     if ( !aMiscOptions.IsExperimentalMode() )
    1181           0 :                         rSet.DisableItem( nWhich );
    1182             :                 }
    1183           0 :                 break;
    1184             :             case SID_TEXT_TO_COLUMNS:
    1185             :                 {
    1186           0 :                     ScRange aRange;
    1187           0 :                     if ( !lcl_GetTextToColumnsRange( pData, aRange ) )
    1188             :                     {
    1189           0 :                         rSet.DisableItem( nWhich );
    1190             :                     }
    1191             :                 }
    1192           0 :                 break;
    1193             : #if !ENABLE_ORCUS
    1194             :             case SID_MANAGE_XML_SOURCE:
    1195             :                 rSet.DisableItem(nWhich);
    1196             :             break;
    1197             : #endif
    1198             :         }
    1199           0 :         nWhich = aIter.NextWhich();
    1200           0 :     }
    1201           0 : }
    1202             : 
    1203             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10