1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sc.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir //------------------------------------------------------------------ 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir // INCLUDE --------------------------------------------------------------- 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir #include "scitems.hxx" 38*cdf0e10cSrcweir #include <sfx2/viewfrm.hxx> 39*cdf0e10cSrcweir #include <sfx2/app.hxx> 40*cdf0e10cSrcweir #include <sfx2/request.hxx> 41*cdf0e10cSrcweir #include <svl/aeitem.hxx> 42*cdf0e10cSrcweir #include <basic/sbxcore.hxx> 43*cdf0e10cSrcweir #include <svl/whiter.hxx> 44*cdf0e10cSrcweir #include <svl/zforlist.hxx> 45*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 46*cdf0e10cSrcweir #include <svl/stritem.hxx> 47*cdf0e10cSrcweir #include <svl/visitem.hxx> 48*cdf0e10cSrcweir #include <unotools/moduleoptions.hxx> 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir #include <com/sun/star/frame/FrameSearchFlag.hpp> 51*cdf0e10cSrcweir #include <com/sun/star/sdbc/XResultSet.hpp> 52*cdf0e10cSrcweir 53*cdf0e10cSrcweir #include "cellsh.hxx" 54*cdf0e10cSrcweir #include "tabvwsh.hxx" 55*cdf0e10cSrcweir #include "sc.hrc" 56*cdf0e10cSrcweir #include "globstr.hrc" 57*cdf0e10cSrcweir #include "global.hxx" 58*cdf0e10cSrcweir #include "scmod.hxx" 59*cdf0e10cSrcweir #include "docsh.hxx" 60*cdf0e10cSrcweir #include "document.hxx" 61*cdf0e10cSrcweir #include "uiitems.hxx" 62*cdf0e10cSrcweir #include "dbfunc.hxx" 63*cdf0e10cSrcweir #include "dbdocfun.hxx" 64*cdf0e10cSrcweir //CHINA001 #include "lbseldlg.hxx" 65*cdf0e10cSrcweir //CHINA001 #include "sortdlg.hxx" 66*cdf0e10cSrcweir #include "filtdlg.hxx" 67*cdf0e10cSrcweir #include "dbnamdlg.hxx" 68*cdf0e10cSrcweir //CHINA001 #include "subtdlg.hxx" 69*cdf0e10cSrcweir #include "reffact.hxx" 70*cdf0e10cSrcweir #include "pvlaydlg.hxx" 71*cdf0e10cSrcweir #include "validat.hxx" 72*cdf0e10cSrcweir #include "scresid.hxx" 73*cdf0e10cSrcweir //CHINA001 #include "validate.hxx" 74*cdf0e10cSrcweir #include "pivot.hxx" 75*cdf0e10cSrcweir #include "dpobject.hxx" 76*cdf0e10cSrcweir //CHINA001 #include "dapitype.hxx" 77*cdf0e10cSrcweir //CHINA001 #include "dapidata.hxx" 78*cdf0e10cSrcweir #include "dpsdbtab.hxx" // ScImportSourceDesc 79*cdf0e10cSrcweir #include "dpshttab.hxx" // ScSheetSourceDesc 80*cdf0e10cSrcweir 81*cdf0e10cSrcweir #include "validate.hrc" //CHINA001 add for ScValidationDlg 82*cdf0e10cSrcweir #include "scui_def.hxx" //CHINA001 83*cdf0e10cSrcweir #include "scabstdlg.hxx" //CHINA001 84*cdf0e10cSrcweir #include "impex.hxx" 85*cdf0e10cSrcweir #include "asciiopt.hxx" 86*cdf0e10cSrcweir using namespace com::sun::star; 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir //#include "strindlg.hxx" //! Test !!!!! 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir //static ScArea aPivotSource; //! wohin? (ueber den Dialog retten) 91*cdf0e10cSrcweir 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir #define IS_AVAILABLE(WhichId,ppItem) \ 94*cdf0e10cSrcweir (pReqArgs->GetItemState((WhichId), sal_True, ppItem ) == SFX_ITEM_SET) 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir //------------------------------------------------------------------ 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir bool lcl_GetTextToColumnsRange( const ScViewData* pData, ScRange& rRange ) 99*cdf0e10cSrcweir { 100*cdf0e10cSrcweir DBG_ASSERT( pData, "lcl_GetTextToColumnsRange: pData is null!" ); 101*cdf0e10cSrcweir 102*cdf0e10cSrcweir bool bRet = false; 103*cdf0e10cSrcweir const ScMarkData& rMark = pData->GetMarkData(); 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir if ( rMark.IsMarked() ) 106*cdf0e10cSrcweir { 107*cdf0e10cSrcweir if ( !rMark.IsMultiMarked() ) 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir rMark.GetMarkArea( rRange ); 110*cdf0e10cSrcweir if ( rRange.aStart.Col() == rRange.aEnd.Col() ) 111*cdf0e10cSrcweir { 112*cdf0e10cSrcweir bRet = true; 113*cdf0e10cSrcweir } 114*cdf0e10cSrcweir } 115*cdf0e10cSrcweir } 116*cdf0e10cSrcweir else 117*cdf0e10cSrcweir { 118*cdf0e10cSrcweir const SCCOL nCol = pData->GetCurX(); 119*cdf0e10cSrcweir const SCROW nRow = pData->GetCurY(); 120*cdf0e10cSrcweir const SCTAB nTab = pData->GetTabNo(); 121*cdf0e10cSrcweir rRange = ScRange( nCol, nRow, nTab, nCol, nRow, nTab ); 122*cdf0e10cSrcweir bRet = true; 123*cdf0e10cSrcweir } 124*cdf0e10cSrcweir 125*cdf0e10cSrcweir const ScDocument* pDoc = pData->GetDocument(); 126*cdf0e10cSrcweir DBG_ASSERT( pDoc, "lcl_GetTextToColumnsRange: pDoc is null!" ); 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir if ( bRet && pDoc->IsBlockEmpty( rRange.aStart.Tab(), rRange.aStart.Col(), 129*cdf0e10cSrcweir rRange.aStart.Row(), rRange.aEnd.Col(), 130*cdf0e10cSrcweir rRange.aEnd.Row() ) ) 131*cdf0e10cSrcweir { 132*cdf0e10cSrcweir bRet = false; 133*cdf0e10cSrcweir } 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir return bRet; 136*cdf0e10cSrcweir } 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir sal_Bool lcl_GetSortParam( const ScViewData* pData, ScSortParam& rSortParam ) 139*cdf0e10cSrcweir { 140*cdf0e10cSrcweir ScTabViewShell* pTabViewShell = pData->GetViewShell(); 141*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(); 142*cdf0e10cSrcweir ScDocument* pDoc = pData->GetDocument(); 143*cdf0e10cSrcweir SCTAB nTab = pData->GetTabNo(); 144*cdf0e10cSrcweir ScDirection eFillDir = DIR_TOP; 145*cdf0e10cSrcweir sal_Bool bSort = sal_True; 146*cdf0e10cSrcweir ScRange aExternalRange; 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir if( rSortParam.nCol1 != rSortParam.nCol2 ) 149*cdf0e10cSrcweir eFillDir = DIR_LEFT; 150*cdf0e10cSrcweir if( rSortParam.nRow1 != rSortParam.nRow2 ) 151*cdf0e10cSrcweir eFillDir = DIR_TOP; 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir SCSIZE nCount = pDoc->GetEmptyLinesInBlock( rSortParam.nCol1, rSortParam.nRow1, nTab, rSortParam.nCol2, rSortParam.nRow2, nTab, eFillDir ); 154*cdf0e10cSrcweir 155*cdf0e10cSrcweir if( rSortParam.nRow2 == MAXROW ) 156*cdf0e10cSrcweir aExternalRange = ScRange( rSortParam.nCol1,sal::static_int_cast<SCROW>( nCount ), nTab ); 157*cdf0e10cSrcweir else 158*cdf0e10cSrcweir aExternalRange = ScRange( pData->GetCurX(), pData->GetCurY(), nTab ); 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir SCROW nStartRow = aExternalRange.aStart.Row(); 161*cdf0e10cSrcweir SCCOL nStartCol = aExternalRange.aStart.Col(); 162*cdf0e10cSrcweir SCROW nEndRow = aExternalRange.aEnd.Row(); 163*cdf0e10cSrcweir SCCOL nEndCol = aExternalRange.aEnd.Col(); 164*cdf0e10cSrcweir pDoc->GetDataArea( aExternalRange.aStart.Tab(), nStartCol, nStartRow, nEndCol, nEndRow, sal_False, false ); 165*cdf0e10cSrcweir aExternalRange.aStart.SetRow( nStartRow ); 166*cdf0e10cSrcweir aExternalRange.aStart.SetCol( nStartCol ); 167*cdf0e10cSrcweir aExternalRange.aEnd.SetRow( nEndRow ); 168*cdf0e10cSrcweir aExternalRange.aEnd.SetCol( nEndCol ); 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir if(( rSortParam.nCol1 == rSortParam.nCol2 && aExternalRange.aStart.Col() != aExternalRange.aEnd.Col() ) || 171*cdf0e10cSrcweir ( rSortParam.nRow1 == rSortParam.nRow2 && aExternalRange.aStart.Row() != aExternalRange.aEnd.Row() ) ) 172*cdf0e10cSrcweir { 173*cdf0e10cSrcweir sal_uInt16 nFmt = SCA_VALID; 174*cdf0e10cSrcweir String aExtendStr,aCurrentStr; 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir pTabViewShell->AddHighlightRange( aExternalRange,Color( COL_LIGHTBLUE ) ); 177*cdf0e10cSrcweir ScRange rExtendRange( aExternalRange.aStart.Col(), aExternalRange.aStart.Row(), nTab, aExternalRange.aEnd.Col(), aExternalRange.aEnd.Row(), nTab ); 178*cdf0e10cSrcweir rExtendRange.Format( aExtendStr, nFmt, pDoc ); 179*cdf0e10cSrcweir 180*cdf0e10cSrcweir ScRange rCurrentRange( rSortParam.nCol1, rSortParam.nRow1, nTab, rSortParam.nCol2, rSortParam.nRow2, nTab ); 181*cdf0e10cSrcweir rCurrentRange.Format( aCurrentStr, nFmt, pDoc ); 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 184*cdf0e10cSrcweir DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 185*cdf0e10cSrcweir 186*cdf0e10cSrcweir VclAbstractDialog* pWarningDlg = pFact->CreateScSortWarningDlg( pTabViewShell->GetDialogParent(),aExtendStr,aCurrentStr,RID_SCDLG_SORT_WARNING ); 187*cdf0e10cSrcweir DBG_ASSERT(pWarningDlg, "Dialog create fail!");//CHINA001 188*cdf0e10cSrcweir short bResult = pWarningDlg->Execute(); 189*cdf0e10cSrcweir if( bResult == BTN_EXTEND_RANGE || bResult == BTN_CURRENT_SELECTION ) 190*cdf0e10cSrcweir { 191*cdf0e10cSrcweir if( bResult == BTN_EXTEND_RANGE ) 192*cdf0e10cSrcweir { 193*cdf0e10cSrcweir pTabViewShell->MarkRange( aExternalRange, sal_False ); 194*cdf0e10cSrcweir pDBData->SetArea( nTab, aExternalRange.aStart.Col(), aExternalRange.aStart.Row(), aExternalRange.aEnd.Col(), aExternalRange.aEnd.Row() ); 195*cdf0e10cSrcweir } 196*cdf0e10cSrcweir } 197*cdf0e10cSrcweir else 198*cdf0e10cSrcweir { 199*cdf0e10cSrcweir bSort = sal_False; 200*cdf0e10cSrcweir pData->GetDocShell()->CancelAutoDBRange(); 201*cdf0e10cSrcweir } 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir delete pWarningDlg; 204*cdf0e10cSrcweir pTabViewShell->ClearHighlightRanges(); 205*cdf0e10cSrcweir } 206*cdf0e10cSrcweir return bSort; 207*cdf0e10cSrcweir } 208*cdf0e10cSrcweir 209*cdf0e10cSrcweir //<!-- Added by PengYunQuan for Validity Cell Range Picker 210*cdf0e10cSrcweir //after end execute from !IsModalInputMode, it is safer to delay deleting 211*cdf0e10cSrcweir namespace 212*cdf0e10cSrcweir { 213*cdf0e10cSrcweir long DelayDeleteAbstractDialog( void *pAbstractDialog, void * /*pArg*/ ) 214*cdf0e10cSrcweir { 215*cdf0e10cSrcweir delete reinterpret_cast<VclAbstractDialog*>( pAbstractDialog ); 216*cdf0e10cSrcweir return 0; 217*cdf0e10cSrcweir } 218*cdf0e10cSrcweir } 219*cdf0e10cSrcweir //--> Added by PengYunQuan for Validity Cell Range Picker 220*cdf0e10cSrcweir 221*cdf0e10cSrcweir void ScCellShell::ExecuteDB( SfxRequest& rReq ) 222*cdf0e10cSrcweir { 223*cdf0e10cSrcweir ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell(); 224*cdf0e10cSrcweir sal_uInt16 nSlotId = rReq.GetSlot(); 225*cdf0e10cSrcweir const SfxItemSet* pReqArgs = rReq.GetArgs(); 226*cdf0e10cSrcweir ScModule* pScMod = SC_MOD(); 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox 229*cdf0e10cSrcweir 230*cdf0e10cSrcweir if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) ) 231*cdf0e10cSrcweir { 232*cdf0e10cSrcweir pScMod->InputEnterHandler(); 233*cdf0e10cSrcweir pTabViewShell->UpdateInputHandler(); 234*cdf0e10cSrcweir } 235*cdf0e10cSrcweir 236*cdf0e10cSrcweir switch ( nSlotId ) 237*cdf0e10cSrcweir { 238*cdf0e10cSrcweir case SID_VIEW_DATA_SOURCE_BROWSER: 239*cdf0e10cSrcweir { 240*cdf0e10cSrcweir // check if database beamer is open 241*cdf0e10cSrcweir 242*cdf0e10cSrcweir SfxViewFrame* pViewFrame = pTabViewShell->GetViewFrame(); 243*cdf0e10cSrcweir sal_Bool bWasOpen = sal_False; 244*cdf0e10cSrcweir { 245*cdf0e10cSrcweir uno::Reference<frame::XFrame> xFrame = pViewFrame->GetFrame().GetFrameInterface(); 246*cdf0e10cSrcweir uno::Reference<frame::XFrame> xBeamerFrame = xFrame->findFrame( 247*cdf0e10cSrcweir rtl::OUString::createFromAscii("_beamer"), 248*cdf0e10cSrcweir frame::FrameSearchFlag::CHILDREN); 249*cdf0e10cSrcweir if ( xBeamerFrame.is() ) 250*cdf0e10cSrcweir bWasOpen = sal_True; 251*cdf0e10cSrcweir } 252*cdf0e10cSrcweir 253*cdf0e10cSrcweir if ( bWasOpen ) 254*cdf0e10cSrcweir { 255*cdf0e10cSrcweir // close database beamer: just forward to SfxViewFrame 256*cdf0e10cSrcweir 257*cdf0e10cSrcweir pViewFrame->ExecuteSlot( rReq ); 258*cdf0e10cSrcweir } 259*cdf0e10cSrcweir else 260*cdf0e10cSrcweir { 261*cdf0e10cSrcweir // show database beamer: SfxViewFrame call must be synchronous 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir pViewFrame->ExecuteSlot( rReq, (sal_Bool) sal_False ); // sal_False = synchronous 264*cdf0e10cSrcweir 265*cdf0e10cSrcweir // select current database in database beamer 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir ScImportParam aImportParam; 268*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(sal_True,SC_DB_OLD); // don't create if none found 269*cdf0e10cSrcweir if (pDBData) 270*cdf0e10cSrcweir pDBData->GetImportParam( aImportParam ); 271*cdf0e10cSrcweir 272*cdf0e10cSrcweir ScDBDocFunc::ShowInBeamer( aImportParam, pTabViewShell->GetViewFrame() ); 273*cdf0e10cSrcweir } 274*cdf0e10cSrcweir rReq.Done(); // needed because it's a toggle slot 275*cdf0e10cSrcweir } 276*cdf0e10cSrcweir break; 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir case SID_REIMPORT_DATA: 279*cdf0e10cSrcweir { 280*cdf0e10cSrcweir sal_Bool bOk = sal_False; 281*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(sal_True,SC_DB_OLD); 282*cdf0e10cSrcweir if (pDBData) 283*cdf0e10cSrcweir { 284*cdf0e10cSrcweir ScImportParam aImportParam; 285*cdf0e10cSrcweir pDBData->GetImportParam( aImportParam ); 286*cdf0e10cSrcweir if (aImportParam.bImport && !pDBData->HasImportSelection()) 287*cdf0e10cSrcweir { 288*cdf0e10cSrcweir pTabViewShell->ImportData( aImportParam ); 289*cdf0e10cSrcweir pDBData->SetImportParam( aImportParam ); //! Undo ?? 290*cdf0e10cSrcweir bOk = sal_True; 291*cdf0e10cSrcweir } 292*cdf0e10cSrcweir } 293*cdf0e10cSrcweir 294*cdf0e10cSrcweir if (!bOk && ! rReq.IsAPI() ) 295*cdf0e10cSrcweir pTabViewShell->ErrorMessage(STR_REIMPORT_EMPTY); 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir if( bOk ) 298*cdf0e10cSrcweir rReq.Done(); 299*cdf0e10cSrcweir } 300*cdf0e10cSrcweir break; 301*cdf0e10cSrcweir 302*cdf0e10cSrcweir case SID_REFRESH_DBAREA: 303*cdf0e10cSrcweir { 304*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(sal_True,SC_DB_OLD); 305*cdf0e10cSrcweir if (pDBData) 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir // Import wiederholen wie SID_REIMPORT_DATA 308*cdf0e10cSrcweir 309*cdf0e10cSrcweir sal_Bool bContinue = sal_True; 310*cdf0e10cSrcweir ScImportParam aImportParam; 311*cdf0e10cSrcweir pDBData->GetImportParam( aImportParam ); 312*cdf0e10cSrcweir if (aImportParam.bImport && !pDBData->HasImportSelection()) 313*cdf0e10cSrcweir { 314*cdf0e10cSrcweir bContinue = pTabViewShell->ImportData( aImportParam ); 315*cdf0e10cSrcweir pDBData->SetImportParam( aImportParam ); //! Undo ?? 316*cdf0e10cSrcweir 317*cdf0e10cSrcweir // markieren (Groesse kann sich geaendert haben) 318*cdf0e10cSrcweir ScRange aNewRange; 319*cdf0e10cSrcweir pDBData->GetArea(aNewRange); 320*cdf0e10cSrcweir pTabViewShell->MarkRange(aNewRange); 321*cdf0e10cSrcweir } 322*cdf0e10cSrcweir 323*cdf0e10cSrcweir if ( bContinue ) // #41905# Fehler beim Import -> Abbruch 324*cdf0e10cSrcweir { 325*cdf0e10cSrcweir // interne Operationen, wenn welche gespeichert 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir if ( pDBData->HasQueryParam() || pDBData->HasSortParam() || 328*cdf0e10cSrcweir pDBData->HasSubTotalParam() ) 329*cdf0e10cSrcweir pTabViewShell->RepeatDB(); 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir // Pivottabellen die den Bereich als Quelldaten haben 332*cdf0e10cSrcweir 333*cdf0e10cSrcweir ScRange aRange; 334*cdf0e10cSrcweir pDBData->GetArea(aRange); 335*cdf0e10cSrcweir GetViewData()->GetDocShell()->RefreshPivotTables(aRange); 336*cdf0e10cSrcweir } 337*cdf0e10cSrcweir } 338*cdf0e10cSrcweir rReq.Done(); 339*cdf0e10cSrcweir } 340*cdf0e10cSrcweir break; 341*cdf0e10cSrcweir 342*cdf0e10cSrcweir case SID_SBA_BRW_INSERT: 343*cdf0e10cSrcweir { 344*cdf0e10cSrcweir DBG_ERROR( "Deprecated Slot" ); 345*cdf0e10cSrcweir } 346*cdf0e10cSrcweir break; 347*cdf0e10cSrcweir 348*cdf0e10cSrcweir case SID_SUBTOTALS: 349*cdf0e10cSrcweir { 350*cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs(); 351*cdf0e10cSrcweir if ( pArgs ) 352*cdf0e10cSrcweir { 353*cdf0e10cSrcweir pTabViewShell->DoSubTotals( ((const ScSubTotalItem&) pArgs->Get( SCITEM_SUBTDATA )). 354*cdf0e10cSrcweir GetSubTotalData() ); 355*cdf0e10cSrcweir rReq.Done(); 356*cdf0e10cSrcweir } 357*cdf0e10cSrcweir else 358*cdf0e10cSrcweir { 359*cdf0e10cSrcweir //CHINA001 ScSubTotalDlg* pDlg = NULL; 360*cdf0e10cSrcweir SfxAbstractTabDialog * pDlg = NULL; 361*cdf0e10cSrcweir ScSubTotalParam aSubTotalParam; 362*cdf0e10cSrcweir SfxItemSet aArgSet( GetPool(), SCITEM_SUBTDATA, SCITEM_SUBTDATA ); 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(); 365*cdf0e10cSrcweir pDBData->GetSubTotalParam( aSubTotalParam ); 366*cdf0e10cSrcweir aSubTotalParam.bRemoveOnly = sal_False; 367*cdf0e10cSrcweir 368*cdf0e10cSrcweir aArgSet.Put( ScSubTotalItem( SCITEM_SUBTDATA, GetViewData(), &aSubTotalParam ) ); 369*cdf0e10cSrcweir //CHINA001 pDlg = new ScSubTotalDlg( pTabViewShell->GetDialogParent(), &aArgSet ); 370*cdf0e10cSrcweir ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 371*cdf0e10cSrcweir DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir pDlg = pFact->CreateScSubTotalDlg( pTabViewShell->GetDialogParent(), &aArgSet, RID_SCDLG_SUBTOTALS ); 374*cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 375*cdf0e10cSrcweir pDlg->SetCurPageId(1); 376*cdf0e10cSrcweir 377*cdf0e10cSrcweir short bResult = pDlg->Execute(); 378*cdf0e10cSrcweir 379*cdf0e10cSrcweir if ( (bResult == RET_OK) || (bResult == SCRET_REMOVE) ) 380*cdf0e10cSrcweir { 381*cdf0e10cSrcweir const SfxItemSet* pOutSet = NULL; 382*cdf0e10cSrcweir 383*cdf0e10cSrcweir if ( bResult == RET_OK ) 384*cdf0e10cSrcweir { 385*cdf0e10cSrcweir pOutSet = pDlg->GetOutputItemSet(); 386*cdf0e10cSrcweir aSubTotalParam = 387*cdf0e10cSrcweir ((const ScSubTotalItem&) 388*cdf0e10cSrcweir pOutSet->Get( SCITEM_SUBTDATA )). 389*cdf0e10cSrcweir GetSubTotalData(); 390*cdf0e10cSrcweir } 391*cdf0e10cSrcweir else // if (bResult == SCRET_REMOVE) 392*cdf0e10cSrcweir { 393*cdf0e10cSrcweir pOutSet = &aArgSet; 394*cdf0e10cSrcweir aSubTotalParam.bRemoveOnly = sal_True; 395*cdf0e10cSrcweir aSubTotalParam.bReplace = sal_True; 396*cdf0e10cSrcweir aArgSet.Put( ScSubTotalItem( SCITEM_SUBTDATA, 397*cdf0e10cSrcweir GetViewData(), 398*cdf0e10cSrcweir &aSubTotalParam ) ); 399*cdf0e10cSrcweir } 400*cdf0e10cSrcweir 401*cdf0e10cSrcweir pTabViewShell->DoSubTotals( aSubTotalParam ); 402*cdf0e10cSrcweir rReq.Done( *pOutSet ); 403*cdf0e10cSrcweir } 404*cdf0e10cSrcweir else 405*cdf0e10cSrcweir GetViewData()->GetDocShell()->CancelAutoDBRange(); 406*cdf0e10cSrcweir 407*cdf0e10cSrcweir delete pDlg; 408*cdf0e10cSrcweir } 409*cdf0e10cSrcweir } 410*cdf0e10cSrcweir break; 411*cdf0e10cSrcweir 412*cdf0e10cSrcweir case SID_SORT_DESCENDING: 413*cdf0e10cSrcweir case SID_SORT_ASCENDING: 414*cdf0e10cSrcweir { 415*cdf0e10cSrcweir //#i60401 ux-ctest: Calc does not support all users' strategies regarding sorting data 416*cdf0e10cSrcweir //the patch comes from maoyg 417*cdf0e10cSrcweir ScSortParam aSortParam; 418*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(); 419*cdf0e10cSrcweir ScViewData* pData = GetViewData(); 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir pDBData->GetSortParam( aSortParam ); 422*cdf0e10cSrcweir 423*cdf0e10cSrcweir if( lcl_GetSortParam( pData, aSortParam ) ) 424*cdf0e10cSrcweir { 425*cdf0e10cSrcweir SfxItemSet aArgSet( GetPool(), SCITEM_SORTDATA, SCITEM_SORTDATA ); 426*cdf0e10cSrcweir SCCOL nCol = GetViewData()->GetCurX(); 427*cdf0e10cSrcweir SCCOL nTab = GetViewData()->GetTabNo(); 428*cdf0e10cSrcweir ScDocument* pDoc = GetViewData()->GetDocument(); 429*cdf0e10cSrcweir 430*cdf0e10cSrcweir pDBData->GetSortParam( aSortParam ); 431*cdf0e10cSrcweir sal_Bool bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, nTab ); 432*cdf0e10cSrcweir 433*cdf0e10cSrcweir if( nCol < aSortParam.nCol1 ) 434*cdf0e10cSrcweir nCol = aSortParam.nCol1; 435*cdf0e10cSrcweir else if( nCol > aSortParam.nCol2 ) 436*cdf0e10cSrcweir nCol = aSortParam.nCol2; 437*cdf0e10cSrcweir 438*cdf0e10cSrcweir aSortParam.bHasHeader = bHasHeader; 439*cdf0e10cSrcweir aSortParam.bByRow = sal_True; 440*cdf0e10cSrcweir aSortParam.bCaseSens = sal_False; 441*cdf0e10cSrcweir aSortParam.bIncludePattern = sal_True; 442*cdf0e10cSrcweir aSortParam.bInplace = sal_True; 443*cdf0e10cSrcweir aSortParam.bDoSort[0] = sal_True; 444*cdf0e10cSrcweir aSortParam.nField[0] = nCol; 445*cdf0e10cSrcweir aSortParam.bAscending[0] = (nSlotId == SID_SORT_ASCENDING); 446*cdf0e10cSrcweir 447*cdf0e10cSrcweir for ( sal_uInt16 i=1; i<MAXSORT; i++ ) 448*cdf0e10cSrcweir aSortParam.bDoSort[i] = sal_False; 449*cdf0e10cSrcweir 450*cdf0e10cSrcweir aArgSet.Put( ScSortItem( SCITEM_SORTDATA, GetViewData(), &aSortParam ) ); 451*cdf0e10cSrcweir 452*cdf0e10cSrcweir pTabViewShell->UISort( aSortParam ); // Teilergebnisse bei Bedarf neu 453*cdf0e10cSrcweir 454*cdf0e10cSrcweir rReq.Done(); 455*cdf0e10cSrcweir } 456*cdf0e10cSrcweir } 457*cdf0e10cSrcweir break; 458*cdf0e10cSrcweir 459*cdf0e10cSrcweir case SID_SORT: 460*cdf0e10cSrcweir { 461*cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs(); 462*cdf0e10cSrcweir 463*cdf0e10cSrcweir //#i60401 ux-ctest: Calc does not support all users' strategies regarding sorting data 464*cdf0e10cSrcweir //the patch comes from maoyg 465*cdf0e10cSrcweir 466*cdf0e10cSrcweir if ( pArgs ) // Basic 467*cdf0e10cSrcweir { 468*cdf0e10cSrcweir ScSortParam aSortParam; 469*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(); 470*cdf0e10cSrcweir ScViewData* pData = GetViewData(); 471*cdf0e10cSrcweir 472*cdf0e10cSrcweir pDBData->GetSortParam( aSortParam ); 473*cdf0e10cSrcweir 474*cdf0e10cSrcweir if( lcl_GetSortParam( pData, aSortParam ) ) 475*cdf0e10cSrcweir { 476*cdf0e10cSrcweir ScDocument* pDoc = GetViewData()->GetDocument(); 477*cdf0e10cSrcweir 478*cdf0e10cSrcweir pDBData->GetSortParam( aSortParam ); 479*cdf0e10cSrcweir sal_Bool bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, pData->GetTabNo() ); 480*cdf0e10cSrcweir if( bHasHeader ) 481*cdf0e10cSrcweir aSortParam.bHasHeader = bHasHeader; 482*cdf0e10cSrcweir 483*cdf0e10cSrcweir aSortParam.bInplace = sal_True; // von Basic immer 484*cdf0e10cSrcweir 485*cdf0e10cSrcweir const SfxPoolItem* pItem; 486*cdf0e10cSrcweir if ( pArgs->GetItemState( SID_SORT_BYROW, sal_True, &pItem ) == SFX_ITEM_SET ) 487*cdf0e10cSrcweir aSortParam.bByRow = ((const SfxBoolItem*)pItem)->GetValue(); 488*cdf0e10cSrcweir if ( pArgs->GetItemState( SID_SORT_HASHEADER, sal_True, &pItem ) == SFX_ITEM_SET ) 489*cdf0e10cSrcweir aSortParam.bHasHeader = ((const SfxBoolItem*)pItem)->GetValue(); 490*cdf0e10cSrcweir if ( pArgs->GetItemState( SID_SORT_CASESENS, sal_True, &pItem ) == SFX_ITEM_SET ) 491*cdf0e10cSrcweir aSortParam.bCaseSens = ((const SfxBoolItem*)pItem)->GetValue(); 492*cdf0e10cSrcweir if ( pArgs->GetItemState( SID_SORT_ATTRIBS, sal_True, &pItem ) == SFX_ITEM_SET ) 493*cdf0e10cSrcweir aSortParam.bIncludePattern = ((const SfxBoolItem*)pItem)->GetValue(); 494*cdf0e10cSrcweir if ( pArgs->GetItemState( SID_SORT_USERDEF, sal_True, &pItem ) == SFX_ITEM_SET ) 495*cdf0e10cSrcweir { 496*cdf0e10cSrcweir sal_uInt16 nUserIndex = ((const SfxUInt16Item*)pItem)->GetValue(); 497*cdf0e10cSrcweir aSortParam.bUserDef = ( nUserIndex != 0 ); 498*cdf0e10cSrcweir if ( nUserIndex ) 499*cdf0e10cSrcweir aSortParam.nUserIndex = nUserIndex - 1; // Basic: 1-basiert 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir 502*cdf0e10cSrcweir SCCOLROW nField0 = 0; 503*cdf0e10cSrcweir if ( pArgs->GetItemState( FN_PARAM_1, sal_True, &pItem ) == SFX_ITEM_SET ) 504*cdf0e10cSrcweir nField0 = ((const SfxInt32Item*)pItem)->GetValue(); 505*cdf0e10cSrcweir aSortParam.bDoSort[0] = ( nField0 != 0 ); 506*cdf0e10cSrcweir aSortParam.nField[0] = nField0 > 0 ? (nField0-1) : 0; 507*cdf0e10cSrcweir if ( pArgs->GetItemState( FN_PARAM_2, sal_True, &pItem ) == SFX_ITEM_SET ) 508*cdf0e10cSrcweir aSortParam.bAscending[0] = ((const SfxBoolItem*)pItem)->GetValue(); 509*cdf0e10cSrcweir SCCOLROW nField1 = 0; 510*cdf0e10cSrcweir if ( pArgs->GetItemState( FN_PARAM_3, sal_True, &pItem ) == SFX_ITEM_SET ) 511*cdf0e10cSrcweir nField1 = ((const SfxInt32Item*)pItem)->GetValue(); 512*cdf0e10cSrcweir aSortParam.bDoSort[1] = ( nField1 != 0 ); 513*cdf0e10cSrcweir aSortParam.nField[1] = nField1 > 0 ? (nField1-1) : 0; 514*cdf0e10cSrcweir if ( pArgs->GetItemState( FN_PARAM_4, sal_True, &pItem ) == SFX_ITEM_SET ) 515*cdf0e10cSrcweir aSortParam.bAscending[1] = ((const SfxBoolItem*)pItem)->GetValue(); 516*cdf0e10cSrcweir SCCOLROW nField2 = 0; 517*cdf0e10cSrcweir if ( pArgs->GetItemState( FN_PARAM_5, sal_True, &pItem ) == SFX_ITEM_SET ) 518*cdf0e10cSrcweir nField2 = ((const SfxInt32Item*)pItem)->GetValue(); 519*cdf0e10cSrcweir aSortParam.bDoSort[2] = ( nField2 != 0 ); 520*cdf0e10cSrcweir aSortParam.nField[2] = nField2 > 0 ? (nField2-1) : 0; 521*cdf0e10cSrcweir if ( pArgs->GetItemState( FN_PARAM_6, sal_True, &pItem ) == SFX_ITEM_SET ) 522*cdf0e10cSrcweir aSortParam.bAscending[2] = ((const SfxBoolItem*)pItem)->GetValue(); 523*cdf0e10cSrcweir 524*cdf0e10cSrcweir // Teilergebnisse bei Bedarf neu 525*cdf0e10cSrcweir pTabViewShell->UISort( aSortParam ); 526*cdf0e10cSrcweir rReq.Done(); 527*cdf0e10cSrcweir } 528*cdf0e10cSrcweir } 529*cdf0e10cSrcweir else 530*cdf0e10cSrcweir { 531*cdf0e10cSrcweir ScSortParam aSortParam; 532*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(); 533*cdf0e10cSrcweir ScViewData* pData = GetViewData(); 534*cdf0e10cSrcweir 535*cdf0e10cSrcweir pDBData->GetSortParam( aSortParam ); 536*cdf0e10cSrcweir 537*cdf0e10cSrcweir if( lcl_GetSortParam( pData, aSortParam ) ) 538*cdf0e10cSrcweir { 539*cdf0e10cSrcweir SfxAbstractTabDialog* pDlg = NULL; 540*cdf0e10cSrcweir ScDocument* pDoc = GetViewData()->GetDocument(); 541*cdf0e10cSrcweir SfxItemSet aArgSet( GetPool(), SCITEM_SORTDATA, SCITEM_SORTDATA ); 542*cdf0e10cSrcweir 543*cdf0e10cSrcweir pDBData->GetSortParam( aSortParam ); 544*cdf0e10cSrcweir sal_Bool bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, pData->GetTabNo() ); 545*cdf0e10cSrcweir if( bHasHeader ) 546*cdf0e10cSrcweir aSortParam.bHasHeader = bHasHeader; 547*cdf0e10cSrcweir 548*cdf0e10cSrcweir aArgSet.Put( ScSortItem( SCITEM_SORTDATA, GetViewData(), &aSortParam ) ); 549*cdf0e10cSrcweir 550*cdf0e10cSrcweir ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 551*cdf0e10cSrcweir DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 552*cdf0e10cSrcweir 553*cdf0e10cSrcweir pDlg = pFact->CreateScSortDlg( pTabViewShell->GetDialogParent(), &aArgSet, RID_SCDLG_SORT ); 554*cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 555*cdf0e10cSrcweir pDlg->SetCurPageId(1); 556*cdf0e10cSrcweir 557*cdf0e10cSrcweir if ( pDlg->Execute() == RET_OK ) 558*cdf0e10cSrcweir { 559*cdf0e10cSrcweir const SfxItemSet* pOutSet = pDlg->GetOutputItemSet(); 560*cdf0e10cSrcweir const ScSortParam& rOutParam = ((const ScSortItem&) 561*cdf0e10cSrcweir pOutSet->Get( SCITEM_SORTDATA )).GetSortData(); 562*cdf0e10cSrcweir 563*cdf0e10cSrcweir // Teilergebnisse bei Bedarf neu 564*cdf0e10cSrcweir pTabViewShell->UISort( rOutParam ); 565*cdf0e10cSrcweir 566*cdf0e10cSrcweir if ( rOutParam.bInplace ) 567*cdf0e10cSrcweir { 568*cdf0e10cSrcweir rReq.AppendItem( SfxBoolItem( SID_SORT_BYROW, 569*cdf0e10cSrcweir rOutParam.bByRow ) ); 570*cdf0e10cSrcweir rReq.AppendItem( SfxBoolItem( SID_SORT_HASHEADER, 571*cdf0e10cSrcweir rOutParam.bHasHeader ) ); 572*cdf0e10cSrcweir rReq.AppendItem( SfxBoolItem( SID_SORT_CASESENS, 573*cdf0e10cSrcweir rOutParam.bCaseSens ) ); 574*cdf0e10cSrcweir rReq.AppendItem( SfxBoolItem( SID_SORT_ATTRIBS, 575*cdf0e10cSrcweir rOutParam.bIncludePattern ) ); 576*cdf0e10cSrcweir sal_uInt16 nUser = rOutParam.bUserDef ? ( rOutParam.nUserIndex + 1 ) : 0; 577*cdf0e10cSrcweir rReq.AppendItem( SfxUInt16Item( SID_SORT_USERDEF, nUser ) ); 578*cdf0e10cSrcweir if ( rOutParam.bDoSort[0] ) 579*cdf0e10cSrcweir { 580*cdf0e10cSrcweir rReq.AppendItem( SfxInt32Item( FN_PARAM_1, 581*cdf0e10cSrcweir rOutParam.nField[0] + 1 ) ); 582*cdf0e10cSrcweir rReq.AppendItem( SfxBoolItem( FN_PARAM_2, 583*cdf0e10cSrcweir rOutParam.bAscending[0] ) ); 584*cdf0e10cSrcweir } 585*cdf0e10cSrcweir if ( rOutParam.bDoSort[1] ) 586*cdf0e10cSrcweir { 587*cdf0e10cSrcweir rReq.AppendItem( SfxInt32Item( FN_PARAM_3, 588*cdf0e10cSrcweir rOutParam.nField[1] + 1 ) ); 589*cdf0e10cSrcweir rReq.AppendItem( SfxBoolItem( FN_PARAM_4, 590*cdf0e10cSrcweir rOutParam.bAscending[1] ) ); 591*cdf0e10cSrcweir } 592*cdf0e10cSrcweir if ( rOutParam.bDoSort[2] ) 593*cdf0e10cSrcweir { 594*cdf0e10cSrcweir rReq.AppendItem( SfxInt32Item( FN_PARAM_5, 595*cdf0e10cSrcweir rOutParam.nField[2] + 1 ) ); 596*cdf0e10cSrcweir rReq.AppendItem( SfxBoolItem( FN_PARAM_6, 597*cdf0e10cSrcweir rOutParam.bAscending[2] ) ); 598*cdf0e10cSrcweir } 599*cdf0e10cSrcweir } 600*cdf0e10cSrcweir 601*cdf0e10cSrcweir rReq.Done(); 602*cdf0e10cSrcweir } 603*cdf0e10cSrcweir else 604*cdf0e10cSrcweir GetViewData()->GetDocShell()->CancelAutoDBRange(); 605*cdf0e10cSrcweir 606*cdf0e10cSrcweir delete pDlg; 607*cdf0e10cSrcweir } 608*cdf0e10cSrcweir } 609*cdf0e10cSrcweir } 610*cdf0e10cSrcweir break; 611*cdf0e10cSrcweir 612*cdf0e10cSrcweir case SID_FILTER: 613*cdf0e10cSrcweir { 614*cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs(); 615*cdf0e10cSrcweir if ( pArgs ) 616*cdf0e10cSrcweir { 617*cdf0e10cSrcweir DBG_ERROR("SID_FILTER with arguments?"); 618*cdf0e10cSrcweir pTabViewShell->Query( ((const ScQueryItem&) 619*cdf0e10cSrcweir pArgs->Get( SCITEM_QUERYDATA )).GetQueryData(), NULL, sal_True ); 620*cdf0e10cSrcweir rReq.Done(); 621*cdf0e10cSrcweir } 622*cdf0e10cSrcweir else 623*cdf0e10cSrcweir { 624*cdf0e10cSrcweir sal_uInt16 nId = ScFilterDlgWrapper::GetChildWindowId(); 625*cdf0e10cSrcweir SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame(); 626*cdf0e10cSrcweir SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId ); 627*cdf0e10cSrcweir 628*cdf0e10cSrcweir pScMod->SetRefDialog( nId, pWnd ? sal_False : sal_True ); 629*cdf0e10cSrcweir } 630*cdf0e10cSrcweir } 631*cdf0e10cSrcweir break; 632*cdf0e10cSrcweir 633*cdf0e10cSrcweir case SID_SPECIAL_FILTER: 634*cdf0e10cSrcweir { 635*cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs(); 636*cdf0e10cSrcweir if ( pArgs ) 637*cdf0e10cSrcweir { 638*cdf0e10cSrcweir DBG_ERROR("SID_SPECIAL_FILTER with arguments?"); 639*cdf0e10cSrcweir pTabViewShell->Query( ((const ScQueryItem&) 640*cdf0e10cSrcweir pArgs->Get( SCITEM_QUERYDATA )).GetQueryData(), NULL, sal_True ); 641*cdf0e10cSrcweir rReq.Done(); 642*cdf0e10cSrcweir } 643*cdf0e10cSrcweir else 644*cdf0e10cSrcweir { 645*cdf0e10cSrcweir sal_uInt16 nId = ScSpecialFilterDlgWrapper::GetChildWindowId(); 646*cdf0e10cSrcweir SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame(); 647*cdf0e10cSrcweir SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId ); 648*cdf0e10cSrcweir 649*cdf0e10cSrcweir pScMod->SetRefDialog( nId, pWnd ? sal_False : sal_True ); 650*cdf0e10cSrcweir } 651*cdf0e10cSrcweir } 652*cdf0e10cSrcweir break; 653*cdf0e10cSrcweir 654*cdf0e10cSrcweir case FID_FILTER_OK: 655*cdf0e10cSrcweir { 656*cdf0e10cSrcweir const SfxPoolItem* pItem; 657*cdf0e10cSrcweir if ( pReqArgs && SFX_ITEM_SET == 658*cdf0e10cSrcweir pReqArgs->GetItemState( SCITEM_QUERYDATA, sal_True, &pItem ) ) 659*cdf0e10cSrcweir { 660*cdf0e10cSrcweir const ScQueryItem& rQueryItem = static_cast<const ScQueryItem&>(*pItem); 661*cdf0e10cSrcweir 662*cdf0e10cSrcweir SCTAB nCurTab = GetViewData()->GetTabNo(); 663*cdf0e10cSrcweir SCTAB nRefTab = GetViewData()->GetRefTabNo(); 664*cdf0e10cSrcweir 665*cdf0e10cSrcweir // If RefInput switched to a different sheet from the data sheet, 666*cdf0e10cSrcweir // switch back: 667*cdf0e10cSrcweir 668*cdf0e10cSrcweir if ( nCurTab != nRefTab ) 669*cdf0e10cSrcweir { 670*cdf0e10cSrcweir pTabViewShell->SetTabNo( nRefTab ); 671*cdf0e10cSrcweir pTabViewShell->PaintExtras(); 672*cdf0e10cSrcweir } 673*cdf0e10cSrcweir 674*cdf0e10cSrcweir ScRange aAdvSource; 675*cdf0e10cSrcweir if (rQueryItem.GetAdvancedQuerySource(aAdvSource)) 676*cdf0e10cSrcweir pTabViewShell->Query( rQueryItem.GetQueryData(), &aAdvSource, sal_True ); 677*cdf0e10cSrcweir else 678*cdf0e10cSrcweir pTabViewShell->Query( rQueryItem.GetQueryData(), NULL, sal_True ); 679*cdf0e10cSrcweir rReq.Done( *pReqArgs ); 680*cdf0e10cSrcweir } 681*cdf0e10cSrcweir } 682*cdf0e10cSrcweir break; 683*cdf0e10cSrcweir 684*cdf0e10cSrcweir case SID_UNFILTER: 685*cdf0e10cSrcweir { 686*cdf0e10cSrcweir ScQueryParam aParam; 687*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(); 688*cdf0e10cSrcweir 689*cdf0e10cSrcweir pDBData->GetQueryParam( aParam ); 690*cdf0e10cSrcweir SCSIZE nEC = aParam.GetEntryCount(); 691*cdf0e10cSrcweir for (SCSIZE i=0; i<nEC; i++) 692*cdf0e10cSrcweir aParam.GetEntry(i).bDoQuery = sal_False; 693*cdf0e10cSrcweir aParam.bDuplicate = sal_True; 694*cdf0e10cSrcweir pTabViewShell->Query( aParam, NULL, sal_True ); 695*cdf0e10cSrcweir rReq.Done(); 696*cdf0e10cSrcweir } 697*cdf0e10cSrcweir break; 698*cdf0e10cSrcweir 699*cdf0e10cSrcweir case SID_AUTO_FILTER: 700*cdf0e10cSrcweir pTabViewShell->ToggleAutoFilter(); 701*cdf0e10cSrcweir rReq.Done(); 702*cdf0e10cSrcweir break; 703*cdf0e10cSrcweir 704*cdf0e10cSrcweir case SID_AUTOFILTER_HIDE: 705*cdf0e10cSrcweir pTabViewShell->HideAutoFilter(); 706*cdf0e10cSrcweir rReq.Done(); 707*cdf0e10cSrcweir break; 708*cdf0e10cSrcweir 709*cdf0e10cSrcweir case SID_PIVOT_TABLE: 710*cdf0e10cSrcweir { 711*cdf0e10cSrcweir const SfxPoolItem* pItem; 712*cdf0e10cSrcweir if ( pReqArgs && SFX_ITEM_SET == 713*cdf0e10cSrcweir pReqArgs->GetItemState( SCITEM_PIVOTDATA, sal_True, &pItem ) ) 714*cdf0e10cSrcweir { 715*cdf0e10cSrcweir SCTAB nCurTab = GetViewData()->GetTabNo(); 716*cdf0e10cSrcweir SCTAB nRefTab = GetViewData()->GetRefTabNo(); 717*cdf0e10cSrcweir 718*cdf0e10cSrcweir // Wenn RefInput auf andere Tabelle als Datentabelle umgeschaltet 719*cdf0e10cSrcweir // hat wieder zurueckschalten: 720*cdf0e10cSrcweir 721*cdf0e10cSrcweir if ( nCurTab != nRefTab ) 722*cdf0e10cSrcweir { 723*cdf0e10cSrcweir pTabViewShell->SetTabNo( nRefTab ); 724*cdf0e10cSrcweir pTabViewShell->PaintExtras(); 725*cdf0e10cSrcweir } 726*cdf0e10cSrcweir 727*cdf0e10cSrcweir const ScDPObject* pDPObject = pTabViewShell->GetDialogDPObject(); 728*cdf0e10cSrcweir if ( pDPObject ) 729*cdf0e10cSrcweir { 730*cdf0e10cSrcweir const ScPivotItem* pPItem = (const ScPivotItem*)pItem; 731*cdf0e10cSrcweir bool bSuccess = pTabViewShell->MakePivotTable( 732*cdf0e10cSrcweir pPItem->GetData(), pPItem->GetDestRange(), pPItem->IsNewSheet(), *pDPObject ); 733*cdf0e10cSrcweir SfxBoolItem aRet(0, bSuccess); 734*cdf0e10cSrcweir rReq.SetReturnValue(aRet); 735*cdf0e10cSrcweir } 736*cdf0e10cSrcweir rReq.Done(); 737*cdf0e10cSrcweir } 738*cdf0e10cSrcweir else if (rReq.IsAPI()) 739*cdf0e10cSrcweir SbxBase::SetError(SbxERR_BAD_PARAMETER); 740*cdf0e10cSrcweir } 741*cdf0e10cSrcweir break; 742*cdf0e10cSrcweir 743*cdf0e10cSrcweir case SID_OPENDLG_PIVOTTABLE: 744*cdf0e10cSrcweir { 745*cdf0e10cSrcweir ScViewData* pData = GetViewData(); 746*cdf0e10cSrcweir ScDocument* pDoc = pData->GetDocument(); 747*cdf0e10cSrcweir 748*cdf0e10cSrcweir ScDPObject* pNewDPObject = NULL; 749*cdf0e10cSrcweir 750*cdf0e10cSrcweir // ScPivot is no longer used... 751*cdf0e10cSrcweir ScDPObject* pDPObj = pDoc->GetDPAtCursor( 752*cdf0e10cSrcweir pData->GetCurX(), pData->GetCurY(), 753*cdf0e10cSrcweir pData->GetTabNo() ); 754*cdf0e10cSrcweir if ( pDPObj ) // on an existing table? 755*cdf0e10cSrcweir { 756*cdf0e10cSrcweir pNewDPObject = new ScDPObject( *pDPObj ); 757*cdf0e10cSrcweir } 758*cdf0e10cSrcweir else // create new table 759*cdf0e10cSrcweir { 760*cdf0e10cSrcweir // select database range or data 761*cdf0e10cSrcweir pTabViewShell->GetDBData( sal_True, SC_DB_OLD ); 762*cdf0e10cSrcweir ScMarkData& rMark = GetViewData()->GetMarkData(); 763*cdf0e10cSrcweir if ( !rMark.IsMarked() && !rMark.IsMultiMarked() ) 764*cdf0e10cSrcweir pTabViewShell->MarkDataArea( sal_False ); 765*cdf0e10cSrcweir 766*cdf0e10cSrcweir // output to cursor position for non-sheet data 767*cdf0e10cSrcweir ScAddress aDestPos( pData->GetCurX(), pData->GetCurY(), 768*cdf0e10cSrcweir pData->GetTabNo() ); 769*cdf0e10cSrcweir 770*cdf0e10cSrcweir // first select type of source data 771*cdf0e10cSrcweir 772*cdf0e10cSrcweir sal_Bool bEnableExt = ScDPObject::HasRegisteredSources(); 773*cdf0e10cSrcweir //CHINA001 ScDataPilotSourceTypeDlg* pTypeDlg = new ScDataPilotSourceTypeDlg( 774*cdf0e10cSrcweir //CHINA001 pTabViewShell->GetDialogParent(), bEnableExt ); 775*cdf0e10cSrcweir 776*cdf0e10cSrcweir ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 777*cdf0e10cSrcweir DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 778*cdf0e10cSrcweir 779*cdf0e10cSrcweir AbstractScDataPilotSourceTypeDlg* pTypeDlg = pFact->CreateScDataPilotSourceTypeDlg( pTabViewShell->GetDialogParent(), bEnableExt, RID_SCDLG_DAPITYPE ); 780*cdf0e10cSrcweir DBG_ASSERT(pTypeDlg, "Dialog create fail!");//CHINA001 781*cdf0e10cSrcweir if ( pTypeDlg->Execute() == RET_OK ) 782*cdf0e10cSrcweir { 783*cdf0e10cSrcweir if ( pTypeDlg->IsExternal() ) 784*cdf0e10cSrcweir { 785*cdf0e10cSrcweir uno::Sequence<rtl::OUString> aSources = ScDPObject::GetRegisteredSources(); 786*cdf0e10cSrcweir //CHINA001 ScDataPilotServiceDlg* pServDlg = new ScDataPilotServiceDlg( 787*cdf0e10cSrcweir //CHINA001 pTabViewShell->GetDialogParent(), aSources ); 788*cdf0e10cSrcweir AbstractScDataPilotServiceDlg* pServDlg = pFact->CreateScDataPilotServiceDlg( pTabViewShell->GetDialogParent(), aSources, RID_SCDLG_DAPISERVICE ); 789*cdf0e10cSrcweir DBG_ASSERT(pServDlg, "Dialog create fail!");//CHINA001 790*cdf0e10cSrcweir if ( pServDlg->Execute() == RET_OK ) 791*cdf0e10cSrcweir { 792*cdf0e10cSrcweir ScDPServiceDesc aServDesc( 793*cdf0e10cSrcweir pServDlg->GetServiceName(), 794*cdf0e10cSrcweir pServDlg->GetParSource(), 795*cdf0e10cSrcweir pServDlg->GetParName(), 796*cdf0e10cSrcweir pServDlg->GetParUser(), 797*cdf0e10cSrcweir pServDlg->GetParPass() ); 798*cdf0e10cSrcweir pNewDPObject = new ScDPObject( pDoc ); 799*cdf0e10cSrcweir pNewDPObject->SetServiceData( aServDesc ); 800*cdf0e10cSrcweir } 801*cdf0e10cSrcweir delete pServDlg; 802*cdf0e10cSrcweir } 803*cdf0e10cSrcweir else if ( pTypeDlg->IsDatabase() ) 804*cdf0e10cSrcweir { 805*cdf0e10cSrcweir //CHINA001 ScDataPilotDatabaseDlg* pDataDlg = new ScDataPilotDatabaseDlg( 806*cdf0e10cSrcweir //CHINA001 pTabViewShell->GetDialogParent() ); 807*cdf0e10cSrcweir //ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 808*cdf0e10cSrcweir DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 809*cdf0e10cSrcweir 810*cdf0e10cSrcweir AbstractScDataPilotDatabaseDlg* pDataDlg = pFact->CreateScDataPilotDatabaseDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_DAPIDATA); 811*cdf0e10cSrcweir DBG_ASSERT(pDataDlg, "Dialog create fail!");//CHINA001 812*cdf0e10cSrcweir if ( pDataDlg->Execute() == RET_OK ) 813*cdf0e10cSrcweir { 814*cdf0e10cSrcweir ScImportSourceDesc aImpDesc; 815*cdf0e10cSrcweir pDataDlg->GetValues( aImpDesc ); 816*cdf0e10cSrcweir pNewDPObject = new ScDPObject( pDoc ); 817*cdf0e10cSrcweir pNewDPObject->SetImportDesc( aImpDesc ); 818*cdf0e10cSrcweir } 819*cdf0e10cSrcweir delete pDataDlg; 820*cdf0e10cSrcweir } 821*cdf0e10cSrcweir else // selection 822*cdf0e10cSrcweir { 823*cdf0e10cSrcweir //! use database ranges (select before type dialog?) 824*cdf0e10cSrcweir ScRange aRange; 825*cdf0e10cSrcweir ScMarkType eType = GetViewData()->GetSimpleArea(aRange); 826*cdf0e10cSrcweir if ( (eType & SC_MARK_SIMPLE) == SC_MARK_SIMPLE ) 827*cdf0e10cSrcweir { 828*cdf0e10cSrcweir // Shrink the range to the data area. 829*cdf0e10cSrcweir SCCOL nStartCol = aRange.aStart.Col(), nEndCol = aRange.aEnd.Col(); 830*cdf0e10cSrcweir SCROW nStartRow = aRange.aStart.Row(), nEndRow = aRange.aEnd.Row(); 831*cdf0e10cSrcweir if (pDoc->ShrinkToDataArea(aRange.aStart.Tab(), nStartCol, nStartRow, nEndCol, nEndRow)) 832*cdf0e10cSrcweir { 833*cdf0e10cSrcweir aRange.aStart.SetCol(nStartCol); 834*cdf0e10cSrcweir aRange.aStart.SetRow(nStartRow); 835*cdf0e10cSrcweir aRange.aEnd.SetCol(nEndCol); 836*cdf0e10cSrcweir aRange.aEnd.SetRow(nEndRow); 837*cdf0e10cSrcweir rMark.SetMarkArea(aRange); 838*cdf0e10cSrcweir pTabViewShell->MarkRange(aRange); 839*cdf0e10cSrcweir } 840*cdf0e10cSrcweir 841*cdf0e10cSrcweir sal_Bool bOK = sal_True; 842*cdf0e10cSrcweir if ( pDoc->HasSubTotalCells( aRange ) ) 843*cdf0e10cSrcweir { 844*cdf0e10cSrcweir // confirm selection if it contains SubTotal cells 845*cdf0e10cSrcweir 846*cdf0e10cSrcweir QueryBox aBox( pTabViewShell->GetDialogParent(), 847*cdf0e10cSrcweir WinBits(WB_YES_NO | WB_DEF_YES), 848*cdf0e10cSrcweir ScGlobal::GetRscString(STR_DATAPILOT_SUBTOTAL) ); 849*cdf0e10cSrcweir if (aBox.Execute() == RET_NO) 850*cdf0e10cSrcweir bOK = sal_False; 851*cdf0e10cSrcweir } 852*cdf0e10cSrcweir if (bOK) 853*cdf0e10cSrcweir { 854*cdf0e10cSrcweir ScSheetSourceDesc aShtDesc; 855*cdf0e10cSrcweir aShtDesc.aSourceRange = aRange; 856*cdf0e10cSrcweir pNewDPObject = new ScDPObject( pDoc ); 857*cdf0e10cSrcweir pNewDPObject->SetSheetDesc( aShtDesc ); 858*cdf0e10cSrcweir 859*cdf0e10cSrcweir // output below source data 860*cdf0e10cSrcweir if ( aRange.aEnd.Row()+2 <= MAXROW - 4 ) 861*cdf0e10cSrcweir aDestPos = ScAddress( aRange.aStart.Col(), 862*cdf0e10cSrcweir aRange.aEnd.Row()+2, 863*cdf0e10cSrcweir aRange.aStart.Tab() ); 864*cdf0e10cSrcweir } 865*cdf0e10cSrcweir } 866*cdf0e10cSrcweir } 867*cdf0e10cSrcweir } 868*cdf0e10cSrcweir delete pTypeDlg; 869*cdf0e10cSrcweir 870*cdf0e10cSrcweir if ( pNewDPObject ) 871*cdf0e10cSrcweir pNewDPObject->SetOutRange( aDestPos ); 872*cdf0e10cSrcweir 873*cdf0e10cSrcweir #if 0 874*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(); 875*cdf0e10cSrcweir String aErrMsg; 876*cdf0e10cSrcweir 877*cdf0e10cSrcweir pDBData->GetArea( nTab, nCol1, nRow1, nCol2, nRow2 ); 878*cdf0e10cSrcweir 879*cdf0e10cSrcweir bAreaOk = sal_True; 880*cdf0e10cSrcweir if ( nRow2-nRow1 < 1 ) 881*cdf0e10cSrcweir { 882*cdf0e10cSrcweir // "mindestens eine Datenzeile" 883*cdf0e10cSrcweir pTabViewShell->ErrorMessage(STR_PIVOT_INVALID_DBAREA); 884*cdf0e10cSrcweir bAreaOk = sal_False; 885*cdf0e10cSrcweir } 886*cdf0e10cSrcweir else if (!pDBData->HasHeader()) 887*cdf0e10cSrcweir { 888*cdf0e10cSrcweir if ( MessBox( pTabViewShell->GetDialogParent(), WinBits(WB_YES_NO | WB_DEF_YES), 889*cdf0e10cSrcweir ScGlobal::GetRscString( STR_MSSG_DOSUBTOTALS_0 ), // "StarCalc" 890*cdf0e10cSrcweir ScGlobal::GetRscString( STR_MSSG_MAKEAUTOFILTER_0 ) // Koepfe aus erster Zeile? 891*cdf0e10cSrcweir ).Execute() == RET_YES ) 892*cdf0e10cSrcweir { 893*cdf0e10cSrcweir pDBData->SetHeader( sal_True ); //! Undo ?? 894*cdf0e10cSrcweir } 895*cdf0e10cSrcweir else 896*cdf0e10cSrcweir bAreaOk = sal_False; 897*cdf0e10cSrcweir } 898*cdf0e10cSrcweir #endif 899*cdf0e10cSrcweir } 900*cdf0e10cSrcweir 901*cdf0e10cSrcweir pTabViewShell->SetDialogDPObject( pNewDPObject ); // is copied 902*cdf0e10cSrcweir if ( pNewDPObject ) 903*cdf0e10cSrcweir { 904*cdf0e10cSrcweir // start layout dialog 905*cdf0e10cSrcweir 906*cdf0e10cSrcweir sal_uInt16 nId = ScPivotLayoutWrapper::GetChildWindowId(); 907*cdf0e10cSrcweir SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame(); 908*cdf0e10cSrcweir SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId ); 909*cdf0e10cSrcweir pScMod->SetRefDialog( nId, pWnd ? sal_False : sal_True ); 910*cdf0e10cSrcweir } 911*cdf0e10cSrcweir delete pNewDPObject; 912*cdf0e10cSrcweir } 913*cdf0e10cSrcweir break; 914*cdf0e10cSrcweir 915*cdf0e10cSrcweir case SID_DEFINE_DBNAME: 916*cdf0e10cSrcweir { 917*cdf0e10cSrcweir 918*cdf0e10cSrcweir sal_uInt16 nId = ScDbNameDlgWrapper::GetChildWindowId(); 919*cdf0e10cSrcweir SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame(); 920*cdf0e10cSrcweir SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId ); 921*cdf0e10cSrcweir 922*cdf0e10cSrcweir pScMod->SetRefDialog( nId, pWnd ? sal_False : sal_True ); 923*cdf0e10cSrcweir 924*cdf0e10cSrcweir } 925*cdf0e10cSrcweir break; 926*cdf0e10cSrcweir 927*cdf0e10cSrcweir case SID_SELECT_DB: 928*cdf0e10cSrcweir { 929*cdf0e10cSrcweir if ( pReqArgs ) 930*cdf0e10cSrcweir { 931*cdf0e10cSrcweir const SfxStringItem* pItem = 932*cdf0e10cSrcweir (const SfxStringItem*)&pReqArgs->Get( SID_SELECT_DB ); 933*cdf0e10cSrcweir 934*cdf0e10cSrcweir if( pItem ) 935*cdf0e10cSrcweir { 936*cdf0e10cSrcweir pTabViewShell->GotoDBArea( pItem->GetValue() ); 937*cdf0e10cSrcweir rReq.Done(); 938*cdf0e10cSrcweir } 939*cdf0e10cSrcweir else 940*cdf0e10cSrcweir { 941*cdf0e10cSrcweir DBG_ERROR("NULL"); 942*cdf0e10cSrcweir } 943*cdf0e10cSrcweir } 944*cdf0e10cSrcweir else 945*cdf0e10cSrcweir { 946*cdf0e10cSrcweir ScDocument* pDoc = GetViewData()->GetDocument(); 947*cdf0e10cSrcweir ScDBCollection* pDBCol = pDoc->GetDBCollection(); 948*cdf0e10cSrcweir 949*cdf0e10cSrcweir if ( pDBCol ) 950*cdf0e10cSrcweir { 951*cdf0e10cSrcweir const String aStrNoName( ScGlobal::GetRscString(STR_DB_NONAME) ); 952*cdf0e10cSrcweir List aList; 953*cdf0e10cSrcweir sal_uInt16 nDBCount = pDBCol->GetCount(); 954*cdf0e10cSrcweir ScDBData* pDbData = NULL; 955*cdf0e10cSrcweir String* pDBName = NULL; 956*cdf0e10cSrcweir 957*cdf0e10cSrcweir for ( sal_uInt16 i=0; i < nDBCount; i++ ) 958*cdf0e10cSrcweir { 959*cdf0e10cSrcweir pDbData = (ScDBData*)(pDBCol->At( i )); 960*cdf0e10cSrcweir if ( pDbData ) 961*cdf0e10cSrcweir { 962*cdf0e10cSrcweir pDBName = new String; 963*cdf0e10cSrcweir pDbData->GetName( *pDBName ); 964*cdf0e10cSrcweir 965*cdf0e10cSrcweir if ( *pDBName != aStrNoName ) 966*cdf0e10cSrcweir aList.Insert( pDBName ); 967*cdf0e10cSrcweir else 968*cdf0e10cSrcweir DELETEZ(pDBName); 969*cdf0e10cSrcweir } 970*cdf0e10cSrcweir } 971*cdf0e10cSrcweir 972*cdf0e10cSrcweir //CHINA001 ScSelEntryDlg* pDlg = 973*cdf0e10cSrcweir //CHINA001 new ScSelEntryDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_SELECTDB, 974*cdf0e10cSrcweir //CHINA001 String(ScResId(SCSTR_SELECTDB)), 975*cdf0e10cSrcweir //CHINA001 String(ScResId(SCSTR_AREAS)), 976*cdf0e10cSrcweir //CHINA001 aList ); 977*cdf0e10cSrcweir ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 978*cdf0e10cSrcweir DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 979*cdf0e10cSrcweir 980*cdf0e10cSrcweir AbstractScSelEntryDlg* pDlg = pFact->CreateScSelEntryDlg( pTabViewShell->GetDialogParent(), 981*cdf0e10cSrcweir RID_SCDLG_SELECTDB, 982*cdf0e10cSrcweir String(ScResId(SCSTR_SELECTDB)), 983*cdf0e10cSrcweir String(ScResId(SCSTR_AREAS)), 984*cdf0e10cSrcweir aList, 985*cdf0e10cSrcweir RID_SCDLG_SELECTDB); 986*cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 987*cdf0e10cSrcweir if ( pDlg->Execute() == RET_OK ) 988*cdf0e10cSrcweir { 989*cdf0e10cSrcweir String aName = pDlg->GetSelectEntry(); 990*cdf0e10cSrcweir pTabViewShell->GotoDBArea( aName ); 991*cdf0e10cSrcweir rReq.AppendItem( SfxStringItem( SID_SELECT_DB, aName ) ); 992*cdf0e10cSrcweir rReq.Done(); 993*cdf0e10cSrcweir } 994*cdf0e10cSrcweir 995*cdf0e10cSrcweir delete pDlg; 996*cdf0e10cSrcweir 997*cdf0e10cSrcweir void* pEntry = aList.First(); 998*cdf0e10cSrcweir while ( pEntry ) 999*cdf0e10cSrcweir { 1000*cdf0e10cSrcweir delete (String*) aList.Remove( pEntry ); 1001*cdf0e10cSrcweir pEntry = aList.Next(); 1002*cdf0e10cSrcweir } 1003*cdf0e10cSrcweir } 1004*cdf0e10cSrcweir } 1005*cdf0e10cSrcweir } 1006*cdf0e10cSrcweir break; 1007*cdf0e10cSrcweir 1008*cdf0e10cSrcweir case FID_VALIDATION: 1009*cdf0e10cSrcweir { 1010*cdf0e10cSrcweir const SfxPoolItem* pItem; 1011*cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs(); 1012*cdf0e10cSrcweir if ( pArgs ) 1013*cdf0e10cSrcweir { 1014*cdf0e10cSrcweir DBG_ERROR("spaeter..."); 1015*cdf0e10cSrcweir } 1016*cdf0e10cSrcweir else 1017*cdf0e10cSrcweir { 1018*cdf0e10cSrcweir //CHINA001 SfxItemSet aArgSet( GetPool(), ScTPValidationValue::GetRanges() ); 1019*cdf0e10cSrcweir ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 1020*cdf0e10cSrcweir DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 1021*cdf0e10cSrcweir ::GetTabPageRanges ScTPValidationValueGetRanges = pFact->GetTabPageRangesFunc(TP_VALIDATION_VALUES); 1022*cdf0e10cSrcweir DBG_ASSERT(ScTPValidationValueGetRanges, "TabPage create fail!");//CHINA001 1023*cdf0e10cSrcweir SfxItemSet aArgSet( GetPool(), (*ScTPValidationValueGetRanges)() );//CHINA001 1024*cdf0e10cSrcweir ScValidationMode eMode = SC_VALID_ANY; 1025*cdf0e10cSrcweir ScConditionMode eOper = SC_COND_EQUAL; 1026*cdf0e10cSrcweir String aExpr1, aExpr2; 1027*cdf0e10cSrcweir sal_Bool bBlank = sal_True; 1028*cdf0e10cSrcweir sal_Int16 nListType = ValidListType::UNSORTED; 1029*cdf0e10cSrcweir sal_Bool bShowHelp = sal_False; 1030*cdf0e10cSrcweir String aHelpTitle, aHelpText; 1031*cdf0e10cSrcweir sal_Bool bShowError = sal_False; 1032*cdf0e10cSrcweir ScValidErrorStyle eErrStyle = SC_VALERR_STOP; 1033*cdf0e10cSrcweir String aErrTitle, aErrText; 1034*cdf0e10cSrcweir 1035*cdf0e10cSrcweir ScDocument* pDoc = GetViewData()->GetDocument(); 1036*cdf0e10cSrcweir SCCOL nCurX = GetViewData()->GetCurX(); 1037*cdf0e10cSrcweir SCROW nCurY = GetViewData()->GetCurY(); 1038*cdf0e10cSrcweir SCTAB nTab = GetViewData()->GetTabNo(); 1039*cdf0e10cSrcweir ScAddress aCursorPos( nCurX, nCurY, nTab ); 1040*cdf0e10cSrcweir sal_uLong nIndex = ((SfxUInt32Item*)pDoc->GetAttr( 1041*cdf0e10cSrcweir nCurX, nCurY, nTab, ATTR_VALIDDATA ))->GetValue(); 1042*cdf0e10cSrcweir if ( nIndex ) 1043*cdf0e10cSrcweir { 1044*cdf0e10cSrcweir const ScValidationData* pOldData = pDoc->GetValidationEntry( nIndex ); 1045*cdf0e10cSrcweir if ( pOldData ) 1046*cdf0e10cSrcweir { 1047*cdf0e10cSrcweir eMode = pOldData->GetDataMode(); 1048*cdf0e10cSrcweir eOper = pOldData->GetOperation(); 1049*cdf0e10cSrcweir sal_uLong nNumFmt = 0; 1050*cdf0e10cSrcweir if ( eMode == SC_VALID_DATE || eMode == SC_VALID_TIME ) 1051*cdf0e10cSrcweir { 1052*cdf0e10cSrcweir short nType = ( eMode == SC_VALID_DATE ) ? NUMBERFORMAT_DATE 1053*cdf0e10cSrcweir : NUMBERFORMAT_TIME; 1054*cdf0e10cSrcweir nNumFmt = pDoc->GetFormatTable()->GetStandardFormat( 1055*cdf0e10cSrcweir nType, ScGlobal::eLnge ); 1056*cdf0e10cSrcweir } 1057*cdf0e10cSrcweir aExpr1 = pOldData->GetExpression( aCursorPos, 0, nNumFmt ); 1058*cdf0e10cSrcweir aExpr2 = pOldData->GetExpression( aCursorPos, 1, nNumFmt ); 1059*cdf0e10cSrcweir bBlank = pOldData->IsIgnoreBlank(); 1060*cdf0e10cSrcweir nListType = pOldData->GetListType(); 1061*cdf0e10cSrcweir 1062*cdf0e10cSrcweir bShowHelp = pOldData->GetInput( aHelpTitle, aHelpText ); 1063*cdf0e10cSrcweir bShowError = pOldData->GetErrMsg( aErrTitle, aErrText, eErrStyle ); 1064*cdf0e10cSrcweir 1065*cdf0e10cSrcweir aArgSet.Put( SfxAllEnumItem( FID_VALID_MODE, sal::static_int_cast<sal_uInt16>(eMode) ) ); 1066*cdf0e10cSrcweir aArgSet.Put( SfxAllEnumItem( FID_VALID_CONDMODE, sal::static_int_cast<sal_uInt16>(eOper) ) ); 1067*cdf0e10cSrcweir aArgSet.Put( SfxStringItem( FID_VALID_VALUE1, aExpr1 ) ); 1068*cdf0e10cSrcweir aArgSet.Put( SfxStringItem( FID_VALID_VALUE2, aExpr2 ) ); 1069*cdf0e10cSrcweir aArgSet.Put( SfxBoolItem( FID_VALID_BLANK, bBlank ) ); 1070*cdf0e10cSrcweir aArgSet.Put( SfxInt16Item( FID_VALID_LISTTYPE, nListType ) ); 1071*cdf0e10cSrcweir aArgSet.Put( SfxBoolItem( FID_VALID_SHOWHELP, bShowHelp ) ); 1072*cdf0e10cSrcweir aArgSet.Put( SfxStringItem( FID_VALID_HELPTITLE, aHelpTitle ) ); 1073*cdf0e10cSrcweir aArgSet.Put( SfxStringItem( FID_VALID_HELPTEXT, aHelpText ) ); 1074*cdf0e10cSrcweir aArgSet.Put( SfxBoolItem( FID_VALID_SHOWERR, bShowError ) ); 1075*cdf0e10cSrcweir aArgSet.Put( SfxAllEnumItem( FID_VALID_ERRSTYLE, sal::static_int_cast<sal_uInt16>(eErrStyle) ) ); 1076*cdf0e10cSrcweir aArgSet.Put( SfxStringItem( FID_VALID_ERRTITLE, aErrTitle ) ); 1077*cdf0e10cSrcweir aArgSet.Put( SfxStringItem( FID_VALID_ERRTEXT, aErrText ) ); 1078*cdf0e10cSrcweir } 1079*cdf0e10cSrcweir } 1080*cdf0e10cSrcweir 1081*cdf0e10cSrcweir //CHINA001 ScValidationDlg* pDlg = new ScValidationDlg( NULL, &aArgSet ); 1082*cdf0e10cSrcweir //CHINA001 ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 1083*cdf0e10cSrcweir //CHINA001 DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 1084*cdf0e10cSrcweir 1085*cdf0e10cSrcweir //<!--Modified by PengYunQuan for Validity Cell Range Picker 1086*cdf0e10cSrcweir //SfxAbstractTabDialog* pDlg = pFact->CreateScValidationDlg( NULL, &aArgSet, TAB_DLG_VALIDATION ); 1087*cdf0e10cSrcweir SfxAbstractTabDialog* pDlg = pFact->CreateScValidationDlg( NULL, &aArgSet, TAB_DLG_VALIDATION, pTabViewShell ); 1088*cdf0e10cSrcweir //-->Modified by PengYunQuan for Validity Cell Range Picker 1089*cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 1090*cdf0e10cSrcweir 1091*cdf0e10cSrcweir //<!--Modified by PengYunQuan for Validity Cell Range Picker 1092*cdf0e10cSrcweir //if ( pDlg->Execute() == RET_OK ) 1093*cdf0e10cSrcweir short nResult = pDlg->Execute(); 1094*cdf0e10cSrcweir pTabViewShell->SetTabNo( nTab );//When picking Cell Range ,other Tab may be switched. Need restore the correct tab 1095*cdf0e10cSrcweir if ( nResult == RET_OK ) 1096*cdf0e10cSrcweir //-->Modified by PengYunQuan for Validity Cell Range Picker 1097*cdf0e10cSrcweir { 1098*cdf0e10cSrcweir const SfxItemSet* pOutSet = pDlg->GetOutputItemSet(); 1099*cdf0e10cSrcweir 1100*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_MODE, sal_True, &pItem ) == SFX_ITEM_SET ) 1101*cdf0e10cSrcweir eMode = (ScValidationMode) ((const SfxAllEnumItem*)pItem)->GetValue(); 1102*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_CONDMODE, sal_True, &pItem ) == SFX_ITEM_SET ) 1103*cdf0e10cSrcweir eOper = (ScConditionMode) ((const SfxAllEnumItem*)pItem)->GetValue(); 1104*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_VALUE1, sal_True, &pItem ) == SFX_ITEM_SET ) 1105*cdf0e10cSrcweir { 1106*cdf0e10cSrcweir String aTemp1 = ((const SfxStringItem*)pItem)->GetValue(); 1107*cdf0e10cSrcweir if (eMode == SC_VALID_DATE || eMode == SC_VALID_TIME) 1108*cdf0e10cSrcweir { 1109*cdf0e10cSrcweir sal_uInt32 nNumIndex = 0; 1110*cdf0e10cSrcweir double nVal; 1111*cdf0e10cSrcweir if (pDoc->GetFormatTable()->IsNumberFormat(aTemp1, nNumIndex, nVal)) 1112*cdf0e10cSrcweir aExpr1 =String( ::rtl::math::doubleToUString( nVal, 1113*cdf0e10cSrcweir rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max, 1114*cdf0e10cSrcweir ScGlobal::pLocaleData->getNumDecimalSep().GetChar(0), sal_True)); 1115*cdf0e10cSrcweir else 1116*cdf0e10cSrcweir aExpr1 = aTemp1; 1117*cdf0e10cSrcweir } 1118*cdf0e10cSrcweir else 1119*cdf0e10cSrcweir aExpr1 = aTemp1; 1120*cdf0e10cSrcweir } 1121*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_VALUE2, sal_True, &pItem ) == SFX_ITEM_SET ) 1122*cdf0e10cSrcweir { 1123*cdf0e10cSrcweir String aTemp2 = ((const SfxStringItem*)pItem)->GetValue(); 1124*cdf0e10cSrcweir if (eMode == SC_VALID_DATE || eMode == SC_VALID_TIME) 1125*cdf0e10cSrcweir { 1126*cdf0e10cSrcweir sal_uInt32 nNumIndex = 0; 1127*cdf0e10cSrcweir double nVal; 1128*cdf0e10cSrcweir if (pDoc->GetFormatTable()->IsNumberFormat(aTemp2, nNumIndex, nVal)) 1129*cdf0e10cSrcweir aExpr2 =String( ::rtl::math::doubleToUString( nVal, 1130*cdf0e10cSrcweir rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max, 1131*cdf0e10cSrcweir ScGlobal::pLocaleData->getNumDecimalSep().GetChar(0), sal_True)); 1132*cdf0e10cSrcweir else 1133*cdf0e10cSrcweir aExpr2 = aTemp2; 1134*cdf0e10cSrcweir } 1135*cdf0e10cSrcweir else 1136*cdf0e10cSrcweir aExpr2 = aTemp2; 1137*cdf0e10cSrcweir } 1138*cdf0e10cSrcweir 1139*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_BLANK, sal_True, &pItem ) == SFX_ITEM_SET ) 1140*cdf0e10cSrcweir bBlank = ((const SfxBoolItem*)pItem)->GetValue(); 1141*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_LISTTYPE, sal_True, &pItem ) == SFX_ITEM_SET ) 1142*cdf0e10cSrcweir nListType = ((const SfxInt16Item*)pItem)->GetValue(); 1143*cdf0e10cSrcweir 1144*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_SHOWHELP, sal_True, &pItem ) == SFX_ITEM_SET ) 1145*cdf0e10cSrcweir bShowHelp = ((const SfxBoolItem*)pItem)->GetValue(); 1146*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_HELPTITLE, sal_True, &pItem ) == SFX_ITEM_SET ) 1147*cdf0e10cSrcweir aHelpTitle = ((const SfxStringItem*)pItem)->GetValue(); 1148*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_HELPTEXT, sal_True, &pItem ) == SFX_ITEM_SET ) 1149*cdf0e10cSrcweir aHelpText = ((const SfxStringItem*)pItem)->GetValue(); 1150*cdf0e10cSrcweir 1151*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_SHOWERR, sal_True, &pItem ) == SFX_ITEM_SET ) 1152*cdf0e10cSrcweir bShowError = ((const SfxBoolItem*)pItem)->GetValue(); 1153*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_ERRSTYLE, sal_True, &pItem ) == SFX_ITEM_SET ) 1154*cdf0e10cSrcweir eErrStyle = (ScValidErrorStyle) ((const SfxAllEnumItem*)pItem)->GetValue(); 1155*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_ERRTITLE, sal_True, &pItem ) == SFX_ITEM_SET ) 1156*cdf0e10cSrcweir aErrTitle = ((const SfxStringItem*)pItem)->GetValue(); 1157*cdf0e10cSrcweir if ( pOutSet->GetItemState( FID_VALID_ERRTEXT, sal_True, &pItem ) == SFX_ITEM_SET ) 1158*cdf0e10cSrcweir aErrText = ((const SfxStringItem*)pItem)->GetValue(); 1159*cdf0e10cSrcweir 1160*cdf0e10cSrcweir ScValidationData aData( eMode, eOper, aExpr1, aExpr2, pDoc, aCursorPos ); 1161*cdf0e10cSrcweir aData.SetIgnoreBlank( bBlank ); 1162*cdf0e10cSrcweir aData.SetListType( nListType ); 1163*cdf0e10cSrcweir 1164*cdf0e10cSrcweir aData.SetInput(aHelpTitle, aHelpText); // sets bShowInput to TRUE 1165*cdf0e10cSrcweir if (!bShowHelp) 1166*cdf0e10cSrcweir aData.ResetInput(); // reset only bShowInput 1167*cdf0e10cSrcweir 1168*cdf0e10cSrcweir aData.SetError(aErrTitle, aErrText, eErrStyle); // sets bShowError to TRUE 1169*cdf0e10cSrcweir if (!bShowError) 1170*cdf0e10cSrcweir aData.ResetError(); // reset only bShowError 1171*cdf0e10cSrcweir 1172*cdf0e10cSrcweir pTabViewShell->SetValidation( aData ); 1173*cdf0e10cSrcweir rReq.Done( *pOutSet ); 1174*cdf0e10cSrcweir } 1175*cdf0e10cSrcweir //<!-- Modified by PengYunQuan for Validity Cell Range Picker 1176*cdf0e10cSrcweir //after end execute from !IsModalInputMode, it is safer to delay deleting 1177*cdf0e10cSrcweir //delete pDlg; 1178*cdf0e10cSrcweir Application::PostUserEvent( Link( pDlg, &DelayDeleteAbstractDialog ) ); 1179*cdf0e10cSrcweir //--> Modified by PengYunQuan for Validity Cell Range Picker 1180*cdf0e10cSrcweir } 1181*cdf0e10cSrcweir } 1182*cdf0e10cSrcweir break; 1183*cdf0e10cSrcweir 1184*cdf0e10cSrcweir case SID_TEXT_TO_COLUMNS: 1185*cdf0e10cSrcweir { 1186*cdf0e10cSrcweir ScViewData* pData = GetViewData(); 1187*cdf0e10cSrcweir DBG_ASSERT( pData, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pData is null!" ); 1188*cdf0e10cSrcweir ScRange aRange; 1189*cdf0e10cSrcweir 1190*cdf0e10cSrcweir if ( lcl_GetTextToColumnsRange( pData, aRange ) ) 1191*cdf0e10cSrcweir { 1192*cdf0e10cSrcweir ScDocument* pDoc = pData->GetDocument(); 1193*cdf0e10cSrcweir DBG_ASSERT( pDoc, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDoc is null!" ); 1194*cdf0e10cSrcweir 1195*cdf0e10cSrcweir ScImportExport aExport( pDoc, aRange ); 1196*cdf0e10cSrcweir aExport.SetExportTextOptions( ScExportTextOptions( ScExportTextOptions::None, 0, false ) ); 1197*cdf0e10cSrcweir 1198*cdf0e10cSrcweir // #i87703# text to columns fails with tab separator 1199*cdf0e10cSrcweir aExport.SetDelimiter( static_cast< sal_Unicode >( 0 ) ); 1200*cdf0e10cSrcweir 1201*cdf0e10cSrcweir SvMemoryStream aStream; 1202*cdf0e10cSrcweir aStream.SetStreamCharSet( RTL_TEXTENCODING_UNICODE ); 1203*cdf0e10cSrcweir ScImportExport::SetNoEndianSwap( aStream ); 1204*cdf0e10cSrcweir aExport.ExportStream( aStream, String(), FORMAT_STRING ); 1205*cdf0e10cSrcweir 1206*cdf0e10cSrcweir ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 1207*cdf0e10cSrcweir DBG_ASSERT( pFact, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pFact is null!" ); 1208*cdf0e10cSrcweir AbstractScImportAsciiDlg *pDlg = pFact->CreateScImportAsciiDlg( 1209*cdf0e10cSrcweir NULL, String(), &aStream, RID_SCDLG_ASCII ); 1210*cdf0e10cSrcweir DBG_ASSERT( pDlg, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDlg is null!" ); 1211*cdf0e10cSrcweir pDlg->SetTextToColumnsMode(); 1212*cdf0e10cSrcweir 1213*cdf0e10cSrcweir if ( pDlg->Execute() == RET_OK ) 1214*cdf0e10cSrcweir { 1215*cdf0e10cSrcweir ScDocShell* pDocSh = pData->GetDocShell(); 1216*cdf0e10cSrcweir DBG_ASSERT( pDocSh, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDocSh is null!" ); 1217*cdf0e10cSrcweir 1218*cdf0e10cSrcweir String aUndo = ScGlobal::GetRscString( STR_UNDO_TEXTTOCOLUMNS ); 1219*cdf0e10cSrcweir pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo ); 1220*cdf0e10cSrcweir 1221*cdf0e10cSrcweir ScImportExport aImport( pDoc, aRange.aStart ); 1222*cdf0e10cSrcweir ScAsciiOptions aOptions; 1223*cdf0e10cSrcweir pDlg->GetOptions( aOptions ); 1224*cdf0e10cSrcweir aImport.SetExtOptions( aOptions ); 1225*cdf0e10cSrcweir aImport.SetApi( false ); 1226*cdf0e10cSrcweir aStream.Seek( 0 ); 1227*cdf0e10cSrcweir aImport.ImportStream( aStream, String(), FORMAT_STRING ); 1228*cdf0e10cSrcweir 1229*cdf0e10cSrcweir pDocSh->GetUndoManager()->LeaveListAction(); 1230*cdf0e10cSrcweir } 1231*cdf0e10cSrcweir delete pDlg; 1232*cdf0e10cSrcweir } 1233*cdf0e10cSrcweir } 1234*cdf0e10cSrcweir break; 1235*cdf0e10cSrcweir } 1236*cdf0e10cSrcweir } 1237*cdf0e10cSrcweir 1238*cdf0e10cSrcweir void __EXPORT ScCellShell::GetDBState( SfxItemSet& rSet ) 1239*cdf0e10cSrcweir { 1240*cdf0e10cSrcweir ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell(); 1241*cdf0e10cSrcweir ScViewData* pData = GetViewData(); 1242*cdf0e10cSrcweir ScDocShell* pDocSh = pData->GetDocShell(); 1243*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 1244*cdf0e10cSrcweir SCCOL nPosX = pData->GetCurX(); 1245*cdf0e10cSrcweir SCROW nPosY = pData->GetCurY(); 1246*cdf0e10cSrcweir SCTAB nTab = pData->GetTabNo(); 1247*cdf0e10cSrcweir 1248*cdf0e10cSrcweir sal_Bool bAutoFilter = sal_False; 1249*cdf0e10cSrcweir sal_Bool bAutoFilterTested = sal_False; 1250*cdf0e10cSrcweir 1251*cdf0e10cSrcweir SfxWhichIter aIter(rSet); 1252*cdf0e10cSrcweir sal_uInt16 nWhich = aIter.FirstWhich(); 1253*cdf0e10cSrcweir while (nWhich) 1254*cdf0e10cSrcweir { 1255*cdf0e10cSrcweir switch (nWhich) 1256*cdf0e10cSrcweir { 1257*cdf0e10cSrcweir case SID_REFRESH_DBAREA: 1258*cdf0e10cSrcweir { 1259*cdf0e10cSrcweir // importierte Daten ohne Selektion 1260*cdf0e10cSrcweir // oder Filter,Sortierung,Teilergebis (auch ohne Import) 1261*cdf0e10cSrcweir sal_Bool bOk = sal_False; 1262*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(sal_False,SC_DB_OLD); 1263*cdf0e10cSrcweir if (pDBData && pDoc->GetChangeTrack() == NULL) 1264*cdf0e10cSrcweir { 1265*cdf0e10cSrcweir if ( pDBData->HasImportParam() ) 1266*cdf0e10cSrcweir bOk = !pDBData->HasImportSelection(); 1267*cdf0e10cSrcweir else 1268*cdf0e10cSrcweir { 1269*cdf0e10cSrcweir bOk = pDBData->HasQueryParam() || 1270*cdf0e10cSrcweir pDBData->HasSortParam() || 1271*cdf0e10cSrcweir pDBData->HasSubTotalParam(); 1272*cdf0e10cSrcweir } 1273*cdf0e10cSrcweir } 1274*cdf0e10cSrcweir if (!bOk) 1275*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1276*cdf0e10cSrcweir } 1277*cdf0e10cSrcweir break; 1278*cdf0e10cSrcweir 1279*cdf0e10cSrcweir case SID_FILTER: 1280*cdf0e10cSrcweir case SID_SPECIAL_FILTER: 1281*cdf0e10cSrcweir { 1282*cdf0e10cSrcweir ScRange aDummy; 1283*cdf0e10cSrcweir ScMarkType eMarkType = GetViewData()->GetSimpleArea( aDummy); 1284*cdf0e10cSrcweir if (eMarkType != SC_MARK_SIMPLE && eMarkType != SC_MARK_SIMPLE_FILTERED) 1285*cdf0e10cSrcweir { 1286*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1287*cdf0e10cSrcweir } 1288*cdf0e10cSrcweir } 1289*cdf0e10cSrcweir break; 1290*cdf0e10cSrcweir 1291*cdf0e10cSrcweir 1292*cdf0e10cSrcweir //Bei Redlining und Multiselektion Disablen 1293*cdf0e10cSrcweir case SID_SORT_ASCENDING: 1294*cdf0e10cSrcweir case SID_SORT_DESCENDING: 1295*cdf0e10cSrcweir case SCITEM_SORTDATA: 1296*cdf0e10cSrcweir case SCITEM_SUBTDATA: 1297*cdf0e10cSrcweir case SID_OPENDLG_PIVOTTABLE: 1298*cdf0e10cSrcweir { 1299*cdf0e10cSrcweir //! move ReadOnly check to idl flags 1300*cdf0e10cSrcweir 1301*cdf0e10cSrcweir if ( pDocSh->IsReadOnly() || pDoc->GetChangeTrack()!=NULL || 1302*cdf0e10cSrcweir GetViewData()->IsMultiMarked() ) 1303*cdf0e10cSrcweir { 1304*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1305*cdf0e10cSrcweir } 1306*cdf0e10cSrcweir } 1307*cdf0e10cSrcweir break; 1308*cdf0e10cSrcweir 1309*cdf0e10cSrcweir case SID_REIMPORT_DATA: 1310*cdf0e10cSrcweir { 1311*cdf0e10cSrcweir // nur importierte Daten ohne Selektion 1312*cdf0e10cSrcweir ScDBData* pDBData = pTabViewShell->GetDBData(sal_False,SC_DB_OLD); 1313*cdf0e10cSrcweir if (!pDBData || !pDBData->HasImportParam() || pDBData->HasImportSelection() || 1314*cdf0e10cSrcweir pDoc->GetChangeTrack()!=NULL) 1315*cdf0e10cSrcweir { 1316*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1317*cdf0e10cSrcweir } 1318*cdf0e10cSrcweir } 1319*cdf0e10cSrcweir break; 1320*cdf0e10cSrcweir 1321*cdf0e10cSrcweir case SID_VIEW_DATA_SOURCE_BROWSER: 1322*cdf0e10cSrcweir { 1323*cdf0e10cSrcweir if (!SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SDATABASE)) 1324*cdf0e10cSrcweir rSet.Put(SfxVisibilityItem(nWhich, sal_False)); 1325*cdf0e10cSrcweir else 1326*cdf0e10cSrcweir // get state (BoolItem) from SfxViewFrame 1327*cdf0e10cSrcweir pTabViewShell->GetViewFrame()->GetSlotState( nWhich, NULL, &rSet ); 1328*cdf0e10cSrcweir } 1329*cdf0e10cSrcweir break; 1330*cdf0e10cSrcweir case SID_SBA_BRW_INSERT: 1331*cdf0e10cSrcweir { 1332*cdf0e10cSrcweir // SBA will ein sal_Bool-Item, damit ueberhaupt enabled 1333*cdf0e10cSrcweir 1334*cdf0e10cSrcweir sal_Bool bEnable = sal_True; 1335*cdf0e10cSrcweir rSet.Put(SfxBoolItem(nWhich, bEnable)); 1336*cdf0e10cSrcweir } 1337*cdf0e10cSrcweir break; 1338*cdf0e10cSrcweir 1339*cdf0e10cSrcweir case SID_AUTO_FILTER: 1340*cdf0e10cSrcweir case SID_AUTOFILTER_HIDE: 1341*cdf0e10cSrcweir { 1342*cdf0e10cSrcweir if (!bAutoFilterTested) 1343*cdf0e10cSrcweir { 1344*cdf0e10cSrcweir bAutoFilter = pDoc->HasAutoFilter( nPosX, nPosY, nTab ); 1345*cdf0e10cSrcweir bAutoFilterTested = sal_True; 1346*cdf0e10cSrcweir } 1347*cdf0e10cSrcweir if ( nWhich == SID_AUTO_FILTER ) 1348*cdf0e10cSrcweir { 1349*cdf0e10cSrcweir ScRange aDummy; 1350*cdf0e10cSrcweir ScMarkType eMarkType = GetViewData()->GetSimpleArea( aDummy); 1351*cdf0e10cSrcweir if (eMarkType != SC_MARK_SIMPLE && eMarkType != SC_MARK_SIMPLE_FILTERED) 1352*cdf0e10cSrcweir { 1353*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1354*cdf0e10cSrcweir } 1355*cdf0e10cSrcweir else if (pDoc->GetDPAtBlock(aDummy)) 1356*cdf0e10cSrcweir { 1357*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1358*cdf0e10cSrcweir } 1359*cdf0e10cSrcweir else 1360*cdf0e10cSrcweir rSet.Put( SfxBoolItem( nWhich, bAutoFilter ) ); 1361*cdf0e10cSrcweir } 1362*cdf0e10cSrcweir else 1363*cdf0e10cSrcweir if (!bAutoFilter) 1364*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1365*cdf0e10cSrcweir } 1366*cdf0e10cSrcweir break; 1367*cdf0e10cSrcweir 1368*cdf0e10cSrcweir case SID_UNFILTER: 1369*cdf0e10cSrcweir { 1370*cdf0e10cSrcweir SCCOL nStartCol, nEndCol; 1371*cdf0e10cSrcweir SCROW nStartRow, nEndRow; 1372*cdf0e10cSrcweir SCTAB nStartTab, nEndTab; 1373*cdf0e10cSrcweir sal_Bool bAnyQuery = sal_False; 1374*cdf0e10cSrcweir 1375*cdf0e10cSrcweir sal_Bool bSelected = (GetViewData()->GetSimpleArea( 1376*cdf0e10cSrcweir nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab ) 1377*cdf0e10cSrcweir == SC_MARK_SIMPLE); 1378*cdf0e10cSrcweir 1379*cdf0e10cSrcweir if ( bSelected ) 1380*cdf0e10cSrcweir { 1381*cdf0e10cSrcweir if (nStartCol==nEndCol && nStartRow==nEndRow) 1382*cdf0e10cSrcweir bSelected = sal_False; 1383*cdf0e10cSrcweir } 1384*cdf0e10cSrcweir else 1385*cdf0e10cSrcweir { 1386*cdf0e10cSrcweir nStartCol = GetViewData()->GetCurX(); 1387*cdf0e10cSrcweir nStartRow = GetViewData()->GetCurY(); 1388*cdf0e10cSrcweir nStartTab = GetViewData()->GetTabNo(); 1389*cdf0e10cSrcweir } 1390*cdf0e10cSrcweir 1391*cdf0e10cSrcweir ScDBData* pDBData = bSelected 1392*cdf0e10cSrcweir ? pDoc->GetDBAtArea( nStartTab, nStartCol, nStartRow, nEndCol, nEndRow ) 1393*cdf0e10cSrcweir : pDoc->GetDBAtCursor( nStartCol, nStartRow, nStartTab ); 1394*cdf0e10cSrcweir 1395*cdf0e10cSrcweir if ( pDBData ) 1396*cdf0e10cSrcweir { 1397*cdf0e10cSrcweir ScQueryParam aParam; 1398*cdf0e10cSrcweir pDBData->GetQueryParam( aParam ); 1399*cdf0e10cSrcweir if ( aParam.GetEntry(0).bDoQuery ) 1400*cdf0e10cSrcweir bAnyQuery = sal_True; 1401*cdf0e10cSrcweir } 1402*cdf0e10cSrcweir 1403*cdf0e10cSrcweir if ( !bAnyQuery ) 1404*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1405*cdf0e10cSrcweir } 1406*cdf0e10cSrcweir break; 1407*cdf0e10cSrcweir 1408*cdf0e10cSrcweir case SID_DEFINE_DBNAME: 1409*cdf0e10cSrcweir { 1410*cdf0e10cSrcweir if ( pDocSh && pDocSh->IsDocShared() ) 1411*cdf0e10cSrcweir { 1412*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1413*cdf0e10cSrcweir } 1414*cdf0e10cSrcweir } 1415*cdf0e10cSrcweir break; 1416*cdf0e10cSrcweir 1417*cdf0e10cSrcweir case SID_TEXT_TO_COLUMNS: 1418*cdf0e10cSrcweir { 1419*cdf0e10cSrcweir ScRange aRange; 1420*cdf0e10cSrcweir if ( !lcl_GetTextToColumnsRange( pData, aRange ) ) 1421*cdf0e10cSrcweir { 1422*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1423*cdf0e10cSrcweir } 1424*cdf0e10cSrcweir } 1425*cdf0e10cSrcweir break; 1426*cdf0e10cSrcweir } 1427*cdf0e10cSrcweir nWhich = aIter.NextWhich(); 1428*cdf0e10cSrcweir } 1429*cdf0e10cSrcweir } 1430*cdf0e10cSrcweir 1431*cdf0e10cSrcweir 1432*cdf0e10cSrcweir 1433