From 8a79692a73dc598b7b3bf1fea744ca771aa93e3f Mon Sep 17 00:00:00 2001 From: Jan Holesovsky Date: Thu, 21 Jan 2016 00:02:16 +0100 Subject: sc lok: Fix .uno:Remove (removing sheets) to accept a parameter. .sdi annouces that, but it was never implemented... Change-Id: I7abfbdc88f055eeb993617a5a51371af0f825d34 --- sc/source/ui/view/tabvwshf.cxx | 65 ++++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 21 deletions(-) (limited to 'sc/source/ui/view/tabvwshf.cxx') diff --git a/sc/source/ui/view/tabvwshf.cxx b/sc/source/ui/view/tabvwshf.cxx index 8ed4937c1f8c..d22ece2095b1 100644 --- a/sc/source/ui/view/tabvwshf.cxx +++ b/sc/source/ui/view/tabvwshf.cxx @@ -567,37 +567,60 @@ void ScTabViewShell::ExecuteTable( SfxRequest& rReq ) case FID_DELETE_TABLE: { - // unnecessary parameter -> method depends on table + bool bHasIndex = (pReqArgs != nullptr); - bool bDoIt = rReq.IsAPI(); - if( !bDoIt ) + // allow removing via the Index/FID_DELETE_TABLE parameter + SCTAB nIndexTab = nCurrentTab; + if (bHasIndex) { - // source isn't basic -> ask again + const SfxPoolItem* pItem; + if (pReqArgs->HasItem(FID_DELETE_TABLE, &pItem)) + nIndexTab = static_cast(pItem)->GetValue(); + } - bDoIt = ( RET_YES == - ScopedVclPtr::Create( GetDialogParent(), - WinBits( WB_YES_NO | WB_DEF_YES ), - ScGlobal::GetRscString(STR_QUERY_DELTAB) - )->Execute() ); + bool bDoIt = bHasIndex; + if (!bDoIt) + { + // no parameter given, ask for confirmation + bDoIt = ( RET_YES == + ScopedVclPtr::Create( GetDialogParent(), + WinBits( WB_YES_NO | WB_DEF_YES ), + ScGlobal::GetRscString(STR_QUERY_DELTAB) + )->Execute() ); } - if( bDoIt ) + + if (bDoIt) { - SCTAB nNewTab = nCurrentTab; - SCTAB nFirstTab=0; - bool bTabFlag=false; - ScMarkData& rMark = rViewData.GetMarkData(); + SCTAB nNewTab = nCurrentTab; std::vector TheTabs; - for(SCTAB i=0;iIsTabProtected(i)) + // sheet no. provided by the parameter + TheTabs.push_back(nIndexTab); + if (nNewTab > nIndexTab && nNewTab > 0) + --nNewTab; + } + else + { + SCTAB nFirstTab = 0; + bool bTabFlag = false; + ScMarkData& rMark = rViewData.GetMarkData(); + for (SCTAB i = 0; i < nTabCount; i++) { - TheTabs.push_back(i); - bTabFlag=true; - if(nNewTab==i) nNewTab++; + if (rMark.GetTableSelect(i) && !pDoc->IsTabProtected(i)) + { + TheTabs.push_back(i); + bTabFlag = true; + if (nNewTab == i) + nNewTab++; + } + if (!bTabFlag) + nFirstTab = i; } - if(!bTabFlag) nFirstTab=i; + if (nNewTab >= nTabCount) + nNewTab = nFirstTab; } - if(nNewTab>=nTabCount) nNewTab=nFirstTab; rViewData.SetTabNo(nNewTab); DeleteTables(TheTabs); -- cgit