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 "scitems.hxx" 36*cdf0e10cSrcweir #include <svl/srchitem.hxx> 37*cdf0e10cSrcweir #include <sfx2/app.hxx> 38*cdf0e10cSrcweir #include <sfx2/objface.hxx> 39*cdf0e10cSrcweir #include <sfx2/objsh.hxx> 40*cdf0e10cSrcweir #include <sfx2/request.hxx> 41*cdf0e10cSrcweir #include <svl/whiter.hxx> 42*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir #include "sc.hrc" 45*cdf0e10cSrcweir #include "pivotsh.hxx" 46*cdf0e10cSrcweir #include "tabvwsh.hxx" 47*cdf0e10cSrcweir #include "docsh.hxx" 48*cdf0e10cSrcweir #include "scresid.hxx" 49*cdf0e10cSrcweir #include "document.hxx" 50*cdf0e10cSrcweir #include "dpobject.hxx" 51*cdf0e10cSrcweir #include "dpshttab.hxx" 52*cdf0e10cSrcweir #include "dbdocfun.hxx" 53*cdf0e10cSrcweir #include "uiitems.hxx" 54*cdf0e10cSrcweir //CHINA001 #include "pfiltdlg.hxx" 55*cdf0e10cSrcweir #include "scabstdlg.hxx" //CHINA001 56*cdf0e10cSrcweir //------------------------------------------------------------------------ 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir #define ScPivotShell 59*cdf0e10cSrcweir #include "scslots.hxx" 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir //------------------------------------------------------------------------ 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir TYPEINIT1( ScPivotShell, SfxShell ); 64*cdf0e10cSrcweir 65*cdf0e10cSrcweir SFX_IMPL_INTERFACE(ScPivotShell, SfxShell, ScResId(SCSTR_PIVOTSHELL)) 66*cdf0e10cSrcweir { 67*cdf0e10cSrcweir SFX_POPUPMENU_REGISTRATION( ScResId(RID_POPUP_PIVOT) ); 68*cdf0e10cSrcweir } 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir //------------------------------------------------------------------------ 72*cdf0e10cSrcweir 73*cdf0e10cSrcweir ScPivotShell::ScPivotShell( ScTabViewShell* pViewSh ) : 74*cdf0e10cSrcweir SfxShell(pViewSh), 75*cdf0e10cSrcweir pViewShell( pViewSh ) 76*cdf0e10cSrcweir { 77*cdf0e10cSrcweir SetPool( &pViewSh->GetPool() ); 78*cdf0e10cSrcweir ScViewData* pViewData = pViewSh->GetViewData(); 79*cdf0e10cSrcweir ::svl::IUndoManager* pMgr = pViewData->GetSfxDocShell()->GetUndoManager(); 80*cdf0e10cSrcweir SetUndoManager( pMgr ); 81*cdf0e10cSrcweir if ( !pViewData->GetDocument()->IsUndoEnabled() ) 82*cdf0e10cSrcweir { 83*cdf0e10cSrcweir pMgr->SetMaxUndoActionCount( 0 ); 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir SetHelpId( HID_SCSHELL_PIVOTSH ); 86*cdf0e10cSrcweir SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Pivot"))); 87*cdf0e10cSrcweir } 88*cdf0e10cSrcweir 89*cdf0e10cSrcweir //------------------------------------------------------------------------ 90*cdf0e10cSrcweir ScPivotShell::~ScPivotShell() 91*cdf0e10cSrcweir { 92*cdf0e10cSrcweir } 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir //------------------------------------------------------------------------ 95*cdf0e10cSrcweir void ScPivotShell::Execute( SfxRequest& rReq ) 96*cdf0e10cSrcweir { 97*cdf0e10cSrcweir switch ( rReq.GetSlot() ) 98*cdf0e10cSrcweir { 99*cdf0e10cSrcweir case SID_PIVOT_RECALC: 100*cdf0e10cSrcweir pViewShell->RecalcPivotTable(); 101*cdf0e10cSrcweir break; 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir case SID_PIVOT_KILL: 104*cdf0e10cSrcweir pViewShell->DeletePivotTable(); 105*cdf0e10cSrcweir break; 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir case SID_DP_FILTER: 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir ScDPObject* pDPObj = GetCurrDPObject(); 110*cdf0e10cSrcweir if( pDPObj ) 111*cdf0e10cSrcweir { 112*cdf0e10cSrcweir ScQueryParam aQueryParam; 113*cdf0e10cSrcweir SCTAB nSrcTab = 0; 114*cdf0e10cSrcweir const ScSheetSourceDesc* pDesc = pDPObj->GetSheetDesc(); 115*cdf0e10cSrcweir DBG_ASSERT( pDesc, "no sheet source for DP filter dialog" ); 116*cdf0e10cSrcweir if( pDesc ) 117*cdf0e10cSrcweir { 118*cdf0e10cSrcweir aQueryParam = pDesc->aQueryParam; 119*cdf0e10cSrcweir nSrcTab = pDesc->aSourceRange.aStart.Tab(); 120*cdf0e10cSrcweir } 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir ScViewData* pViewData = pViewShell->GetViewData(); 123*cdf0e10cSrcweir SfxItemSet aArgSet( pViewShell->GetPool(), 124*cdf0e10cSrcweir SCITEM_QUERYDATA, SCITEM_QUERYDATA ); 125*cdf0e10cSrcweir aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA, pViewData, &aQueryParam ) ); 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir //CHINA001 ScPivotFilterDlg* pDlg = new ScPivotFilterDlg( 128*cdf0e10cSrcweir //CHINA001 pViewShell->GetDialogParent(), aArgSet, nSrcTab ); 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); 131*cdf0e10cSrcweir DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir AbstractScPivotFilterDlg* pDlg = pFact->CreateScPivotFilterDlg( pViewShell->GetDialogParent(), 134*cdf0e10cSrcweir aArgSet, nSrcTab, 135*cdf0e10cSrcweir RID_SCDLG_PIVOTFILTER); 136*cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir if( pDlg->Execute() == RET_OK ) 139*cdf0e10cSrcweir { 140*cdf0e10cSrcweir ScSheetSourceDesc aNewDesc; 141*cdf0e10cSrcweir if( pDesc ) 142*cdf0e10cSrcweir aNewDesc = *pDesc; 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir const ScQueryItem& rQueryItem = pDlg->GetOutputItem(); 145*cdf0e10cSrcweir aNewDesc.aQueryParam = rQueryItem.GetQueryData(); 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir ScDPObject aNewObj( *pDPObj ); 148*cdf0e10cSrcweir aNewObj.SetSheetDesc( aNewDesc ); 149*cdf0e10cSrcweir ScDBDocFunc aFunc( *pViewData->GetDocShell() ); 150*cdf0e10cSrcweir aFunc.DataPilotUpdate( pDPObj, &aNewObj, sal_True, sal_False ); 151*cdf0e10cSrcweir pViewData->GetView()->CursorPosChanged(); // shells may be switched 152*cdf0e10cSrcweir } 153*cdf0e10cSrcweir delete pDlg; 154*cdf0e10cSrcweir } 155*cdf0e10cSrcweir } 156*cdf0e10cSrcweir break; 157*cdf0e10cSrcweir } 158*cdf0e10cSrcweir } 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir //------------------------------------------------------------------------ 161*cdf0e10cSrcweir void __EXPORT ScPivotShell::GetState( SfxItemSet& rSet ) 162*cdf0e10cSrcweir { 163*cdf0e10cSrcweir ScDocShell* pDocSh = pViewShell->GetViewData()->GetDocShell(); 164*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 165*cdf0e10cSrcweir sal_Bool bDisable = pDocSh->IsReadOnly() || pDoc->GetChangeTrack(); 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir SfxWhichIter aIter(rSet); 168*cdf0e10cSrcweir sal_uInt16 nWhich = aIter.FirstWhich(); 169*cdf0e10cSrcweir while (nWhich) 170*cdf0e10cSrcweir { 171*cdf0e10cSrcweir switch (nWhich) 172*cdf0e10cSrcweir { 173*cdf0e10cSrcweir case SID_PIVOT_RECALC: 174*cdf0e10cSrcweir case SID_PIVOT_KILL: 175*cdf0e10cSrcweir { 176*cdf0e10cSrcweir //! move ReadOnly check to idl flags 177*cdf0e10cSrcweir if ( bDisable ) 178*cdf0e10cSrcweir { 179*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 180*cdf0e10cSrcweir } 181*cdf0e10cSrcweir } 182*cdf0e10cSrcweir break; 183*cdf0e10cSrcweir case SID_DP_FILTER: 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir ScDPObject* pDPObj = GetCurrDPObject(); 186*cdf0e10cSrcweir if( bDisable || !pDPObj || !pDPObj->IsSheetData() ) 187*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 188*cdf0e10cSrcweir } 189*cdf0e10cSrcweir break; 190*cdf0e10cSrcweir } 191*cdf0e10cSrcweir nWhich = aIter.NextWhich(); 192*cdf0e10cSrcweir } 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir //------------------------------------------------------------------------ 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir ScDPObject* ScPivotShell::GetCurrDPObject() 199*cdf0e10cSrcweir { 200*cdf0e10cSrcweir const ScViewData& rViewData = *pViewShell->GetViewData(); 201*cdf0e10cSrcweir return rViewData.GetDocument()->GetDPAtCursor( 202*cdf0e10cSrcweir rViewData.GetCurX(), rViewData.GetCurY(), rViewData.GetTabNo() ); 203*cdf0e10cSrcweir } 204*cdf0e10cSrcweir 205