summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-07-27 15:41:16 +0100
committerEike Rathke <erack@redhat.com>2017-07-28 14:13:29 +0200
commit1e796e4471ceb577b6a5bd577b2571231ae6fcf1 (patch)
tree4ee5fd92c3402b202786e5e3d6ea370a0acc6f34 /sc
parent42e3ad2ef6e0add0c61165e3374d9021043ef1e4 (diff)
Resolves: tdf#106872 only request selected shapes
that way we can avoid the super slow code path for filtered rows when we only care about selected shapes Change-Id: I175fa841e406dbbe7075296f2e0a0e79fa115fb7 Reviewed-on: https://gerrit.libreoffice.org/40496 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com> (cherry picked from commit 192d97cdf091af08a492416824918ea447bfb16f) Related: tdf#106872 factor out getting selected shapes Change-Id: I765c482a41e9681a1eb145c1833cc94f35a27db3 (cherry picked from commit 221dae68df80298e81e6e6549636f3528f5c8bc3) Reviewed-on: https://gerrit.libreoffice.org/40515 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'sc')
-rw-r--r--sc/source/ui/Accessibility/AccessibleDocument.cxx24
-rw-r--r--sc/source/ui/inc/tabvwsh.hxx1
-rw-r--r--sc/source/ui/unoobj/viewuno.cxx61
3 files changed, 44 insertions, 42 deletions
diff --git a/sc/source/ui/Accessibility/AccessibleDocument.cxx b/sc/source/ui/Accessibility/AccessibleDocument.cxx
index 102779633ddd..cf493d5ec34f 100644
--- a/sc/source/ui/Accessibility/AccessibleDocument.cxx
+++ b/sc/source/ui/Accessibility/AccessibleDocument.cxx
@@ -333,7 +333,7 @@ ScChildrenShapes::ScChildrenShapes(ScAccessibleDocument* pAccessibleDocument, Sc
{
if (mpAccessibleDocument)
xSelectionSupplier->addSelectionChangeListener(mpAccessibleDocument);
- uno::Reference<drawing::XShapes> xShapes (xSelectionSupplier->getSelection(), uno::UNO_QUERY);
+ uno::Reference<drawing::XShapes> xShapes(mpViewShell->getSelectedXShapes());
if (xShapes.is())
mnShapesSelected = xShapes->getCount();
}
@@ -350,7 +350,7 @@ ScChildrenShapes::ScChildrenShapes(ScAccessibleDocument* pAccessibleDocument, Sc
if (!xSelectionSupplier.is())
throw uno::RuntimeException();
- uno::Reference<drawing::XShapes> xShapes(xSelectionSupplier->getSelection(), uno::UNO_QUERY);
+ uno::Reference<drawing::XShapes> xShapes(mpViewShell->getSelectedXShapes());
if (xShapes.is())
FindSelectedShapesChanges(xShapes);
}
@@ -644,8 +644,8 @@ bool ScChildrenShapes::IsSelected(sal_Int32 nIndex,
#if OSL_DEBUG_LEVEL > 0 // test whether it is truly selected by a slower method
uno::Reference< drawing::XShape > xReturnShape;
bool bDebugResult(false);
- uno::Reference<container::XIndexAccess> xIndexAccess;
- xSelectionSupplier->getSelection() >>= xIndexAccess;
+ uno::Reference<drawing::XShapes> xShapes(mpViewShell->getSelectedXShapes());
+ uno::Reference<container::XIndexAccess> xIndexAccess(xShapes, uno::UNO_QUERY);
if (xIndexAccess.is())
{
@@ -680,7 +680,7 @@ bool ScChildrenShapes::SelectionChanged()
if (!xSelectionSupplier.is())
throw uno::RuntimeException();
- uno::Reference<drawing::XShapes> xShapes(xSelectionSupplier->getSelection(), uno::UNO_QUERY);
+ uno::Reference<drawing::XShapes> xShapes(mpViewShell->getSelectedXShapes());
bResult = FindSelectedShapesChanges(xShapes);
@@ -701,8 +701,7 @@ void ScChildrenShapes::Select(sal_Int32 nIndex)
uno::Reference<drawing::XShape> xShape;
if (!IsSelected(nIndex, xShape) && maZOrderedShapes[nIndex]->bSelectable)
{
- uno::Reference<drawing::XShapes> xShapes;
- xSelectionSupplier->getSelection() >>= xShapes;
+ uno::Reference<drawing::XShapes> xShapes(mpViewShell->getSelectedXShapes());
if (!xShapes.is())
xShapes = drawing::ShapeCollection::create(
@@ -770,9 +769,8 @@ void ScChildrenShapes::SelectAll()
void ScChildrenShapes::FillShapes(std::vector < uno::Reference < drawing::XShape > >& rShapes) const
{
- uno::Reference<container::XIndexAccess> xIndexAccess;
- xSelectionSupplier->getSelection() >>= xIndexAccess;
-
+ uno::Reference<drawing::XShapes> xShapes(mpViewShell->getSelectedXShapes());
+ uno::Reference<container::XIndexAccess> xIndexAccess(xShapes, uno::UNO_QUERY);
if (xIndexAccess.is())
{
sal_uInt32 nCount(xIndexAccess->getCount());
@@ -857,8 +855,7 @@ void ScChildrenShapes::Deselect(sal_Int32 nChildIndex)
{
if (xShape.is())
{
- uno::Reference<drawing::XShapes> xShapes;
- xSelectionSupplier->getSelection() >>= xShapes;
+ uno::Reference<drawing::XShapes> xShapes(mpViewShell->getSelectedXShapes());
if (xShapes.is())
xShapes->remove(xShape);
@@ -1244,7 +1241,8 @@ void ScChildrenShapes::AddShape(const uno::Reference<drawing::XShape>& xShape, b
if (!xSelectionSupplier.is())
throw uno::RuntimeException();
- uno::Reference<container::XEnumerationAccess> xEnumAcc(xSelectionSupplier->getSelection(), uno::UNO_QUERY);
+ uno::Reference<drawing::XShapes> xShapes(mpViewShell->getSelectedXShapes());
+ uno::Reference<container::XEnumerationAccess> xEnumAcc(xShapes, uno::UNO_QUERY);
if (xEnumAcc.is())
{
uno::Reference<container::XEnumeration> xEnum = xEnumAcc->createEnumeration();
diff --git a/sc/source/ui/inc/tabvwsh.hxx b/sc/source/ui/inc/tabvwsh.hxx
index e138c35aca4c..cf0720a9d0c5 100644
--- a/sc/source/ui/inc/tabvwsh.hxx
+++ b/sc/source/ui/inc/tabvwsh.hxx
@@ -396,6 +396,7 @@ public:
void NotifyCursor(SfxViewShell* pViewShell) const override;
/// Emits a LOK_CALLBACK_INVALIDATE_HEADER for all views whose current tab is equal to nCurrentTabIndex
static void notifyAllViewsHeaderInvalidation(const OString& rPayload, SCTAB nCurrentTabIndex = -1);
+ css::uno::Reference<css::drawing::XShapes> getSelectedXShapes();
};
#endif
diff --git a/sc/source/ui/unoobj/viewuno.cxx b/sc/source/ui/unoobj/viewuno.cxx
index 0dee66e16ea0..5299051b5c1b 100644
--- a/sc/source/ui/unoobj/viewuno.cxx
+++ b/sc/source/ui/unoobj/viewuno.cxx
@@ -849,43 +849,46 @@ sal_Bool SAL_CALL ScTabViewObj::select( const uno::Any& aSelection )
return bRet;
}
-uno::Any SAL_CALL ScTabViewObj::getSelection()
+uno::Reference<drawing::XShapes> ScTabViewShell::getSelectedXShapes()
{
- SolarMutexGuard aGuard;
- ScTabViewShell* pViewSh = GetViewShell();
- ScCellRangesBase* pObj = nullptr;
- if (pViewSh)
+ uno::Reference<drawing::XShapes> xShapes;
+ SdrView* pSdrView = GetSdrView();
+ if (pSdrView)
{
- // is something selected in drawing layer?
-
- SdrView* pDrawView = pViewSh->GetSdrView();
- if (pDrawView)
+ const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
+ const size_t nMarkCount = rMarkList.GetMarkCount();
+ if (nMarkCount)
{
- const SdrMarkList& rMarkList = pDrawView->GetMarkedObjectList();
- const size_t nMarkCount = rMarkList.GetMarkCount();
- if (nMarkCount)
- {
- // generate ShapeCollection (like in SdXImpressView::getSelection in Draw)
- // XInterfaceRef will be returned and it has to be UsrObject-XInterface
-
- uno::Reference< drawing::XShapes > xShapes = drawing::ShapeCollection::create(
- comphelper::getProcessComponentContext());
+ // generate ShapeCollection (like in SdXImpressView::getSelection in Draw)
+ // XInterfaceRef will be returned and it has to be UsrObject-XInterface
+ xShapes = drawing::ShapeCollection::create(comphelper::getProcessComponentContext());
- uno::Reference<uno::XInterface> xRet(xShapes);
-
- for (size_t i=0; i<nMarkCount; ++i)
+ for (size_t i = 0; i < nMarkCount; ++i)
+ {
+ SdrObject* pDrawObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
+ if (pDrawObj)
{
- SdrObject* pDrawObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
- if (pDrawObj)
- {
- uno::Reference<drawing::XShape> xShape( pDrawObj->getUnoShape(), uno::UNO_QUERY );
- if (xShape.is())
- xShapes->add(xShape);
- }
+ uno::Reference<drawing::XShape> xShape( pDrawObj->getUnoShape(), uno::UNO_QUERY );
+ if (xShape.is())
+ xShapes->add(xShape);
}
- return uno::makeAny(xRet);
}
}
+ }
+ return xShapes;
+}
+
+uno::Any SAL_CALL ScTabViewObj::getSelection()
+{
+ SolarMutexGuard aGuard;
+ ScTabViewShell* pViewSh = GetViewShell();
+ ScCellRangesBase* pObj = nullptr;
+ if (pViewSh)
+ {
+ // is something selected in drawing layer?
+ uno::Reference<uno::XInterface> xRet(pViewSh->getSelectedXShapes());
+ if (xRet.is())
+ return uno::makeAny(xRet);
// otherwise sheet (cell) selection