diff options
Diffstat (limited to 'sc/source/ui/view/tabvwshb.cxx')
-rw-r--r-- | sc/source/ui/view/tabvwshb.cxx | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/sc/source/ui/view/tabvwshb.cxx b/sc/source/ui/view/tabvwshb.cxx index 3dced2749fd7..52990c0f9428 100644 --- a/sc/source/ui/view/tabvwshb.cxx +++ b/sc/source/ui/view/tabvwshb.cxx @@ -19,6 +19,8 @@ #include <com/sun/star/embed/NoVisualAreaSizeException.hpp> #include <com/sun/star/chart2/data/XDataReceiver.hpp> +#include <com/sun/star/awt/XRequestCallback.hpp> +#include <com/sun/star/awt/Rectangle.hpp> #include <com/sun/star/embed/EmbedMisc.hpp> #include <com/sun/star/embed/EmbedStates.hpp> @@ -111,10 +113,32 @@ public: {} // XCallback - virtual void SAL_CALL notify(const css::uno::Any& /*aData*/) override + virtual void SAL_CALL notify(const css::uno::Any& aData) override { - tools::Rectangle aRect = m_pObject->GetLogicRect(); - m_pViewShell->DoDPFieldPopup(aRect.TopLeft(), aRect.GetSize()); + uno::Sequence<beans::PropertyValue> aProperties; + if (aData >>= aProperties) + { + awt::Rectangle xRectangle; + sal_Int32 dimensionIndex = 0; + OUString sPivotTableName("DataPilot1"); + + for (beans::PropertyValue const & rProperty : aProperties) + { + if (rProperty.Name == "Rectangle") + rProperty.Value >>= xRectangle; + if (rProperty.Name == "DimensionIndex") + rProperty.Value >>= dimensionIndex; + if (rProperty.Name == "PivotTableName") + rProperty.Value >>= sPivotTableName; + } + + tools::Rectangle aChartRect = m_pObject->GetLogicRect(); + + Point aPoint(xRectangle.X + aChartRect.Left(), xRectangle.Y + aChartRect.Top()); + Size aSize(xRectangle.Width, xRectangle.Height); + + m_pViewShell->DoDPFieldPopup(sPivotTableName, dimensionIndex, aPoint, aSize); + } } }; @@ -209,7 +233,7 @@ void ScTabViewShell::ActivateObject( SdrOle2Obj* pObj, long nVerb ) new ScChartRangeSelectionListener( this )); xRangeHightlighter->addSelectionChangeListener( xListener ); } - uno::Reference<chart2::data::XPopupRequest> xPopupRequest(xDataReceiver->getPopupRequest()); + uno::Reference<awt::XRequestCallback> xPopupRequest(xDataReceiver->getPopupRequest()); if (xPopupRequest.is()) { uno::Reference<awt::XCallback> xCallback(new PopupCallback(this, pObj)); |