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

Generated by: LCOV version 1.10