summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chart2/source/controller/inc/ChartController.hxx4
-rw-r--r--chart2/source/controller/inc/SelectionHelper.hxx6
-rw-r--r--chart2/source/controller/main/ChartController_Tools.cxx17
-rw-r--r--chart2/source/controller/main/ChartController_Window.cxx11
-rw-r--r--chart2/source/controller/main/SelectionHelper.cxx6
-rw-r--r--chart2/source/inc/ObjectIdentifier.hxx4
-rw-r--r--chart2/source/tools/ObjectIdentifier.cxx4
-rw-r--r--svx/source/svdraw/svdmrkv.cxx34
8 files changed, 76 insertions, 10 deletions
diff --git a/chart2/source/controller/inc/ChartController.hxx b/chart2/source/controller/inc/ChartController.hxx
index a14224e24c73..98225c96dd49 100644
--- a/chart2/source/controller/inc/ChartController.hxx
+++ b/chart2/source/controller/inc/ChartController.hxx
@@ -320,6 +320,10 @@ public:
static bool isObjectDeleteable( const css::uno::Any& rSelection );
+ bool isSelectedObjectDraggable() const;
+ bool isSelectedObjectResizable() const;
+ bool isSelectedObjectRotatable() const;
+
void setDrawMode( ChartDrawMode eMode ) { m_eDrawMode = eMode; }
bool isShapeContext() const;
diff --git a/chart2/source/controller/inc/SelectionHelper.hxx b/chart2/source/controller/inc/SelectionHelper.hxx
index b9fe3fc20377..19a40c9a5af2 100644
--- a/chart2/source/controller/inc/SelectionHelper.hxx
+++ b/chart2/source/controller/inc/SelectionHelper.hxx
@@ -38,9 +38,9 @@ public: //methods
css::uno::Reference< css::drawing::XShape > const & getSelectedAdditionalShape();
const ObjectIdentifier& getSelectedOID() const { return m_aSelectedOID;}
- bool isResizeableObjectSelected();
- bool isRotateableObjectSelected( const css::uno::Reference< css::frame::XModel >& xChartModel );
- bool isDragableObjectSelected();
+ bool isResizeableObjectSelected() const;
+ bool isRotateableObjectSelected( const css::uno::Reference< css::frame::XModel >& xChartModel ) const;
+ bool isDragableObjectSelected() const;
bool isAdditionalShapeSelected() const;
diff --git a/chart2/source/controller/main/ChartController_Tools.cxx b/chart2/source/controller/main/ChartController_Tools.cxx
index c55d0a004134..799b4b6b48f7 100644
--- a/chart2/source/controller/main/ChartController_Tools.cxx
+++ b/chart2/source/controller/main/ChartController_Tools.cxx
@@ -565,6 +565,23 @@ bool ChartController::isObjectDeleteable( const uno::Any& rSelection )
return false;
}
+bool ChartController::isSelectedObjectDraggable() const
+{
+ return m_aSelection.isDragableObjectSelected();
+}
+
+bool ChartController::isSelectedObjectResizable() const
+{
+ return m_aSelection.isResizeableObjectSelected();
+}
+
+bool ChartController::isSelectedObjectRotatable() const
+{
+ const ChartController* pThis = this;
+ const uno::Reference< frame::XModel >& xChartModel = const_cast<ChartController*>(pThis)->getModel();
+ return m_aSelection.isRotateableObjectSelected(xChartModel);
+}
+
bool ChartController::isShapeContext() const
{
return m_aSelection.isAdditionalShapeSelected() ||
diff --git a/chart2/source/controller/main/ChartController_Window.cxx b/chart2/source/controller/main/ChartController_Window.cxx
index c928be0e3a17..8907ed5ca203 100644
--- a/chart2/source/controller/main/ChartController_Window.cxx
+++ b/chart2/source/controller/main/ChartController_Window.cxx
@@ -1670,6 +1670,17 @@ uno::Any SAL_CALL ChartController::getSelection()
OUString aCID( m_aSelection.getSelectedCID() );
if ( !aCID.isEmpty() )
{
+ if ( comphelper::LibreOfficeKit::isActive() )
+ {
+ sal_Int32 nPos = aCID.lastIndexOf('/');
+ OUString sFirst = aCID.copy(0, nPos);
+ OUString sSecond = aCID.copy(nPos);
+ aCID = sFirst;
+ aCID += "/Draggable=" + OUString::number(static_cast<int>(isSelectedObjectDraggable()));
+ aCID += ":Resizable=" + OUString::number(static_cast<int>(isSelectedObjectResizable()));
+ aCID += ":Rotatable=" + OUString::number(static_cast<int>(isSelectedObjectRotatable()));
+ aCID += sSecond;
+ }
aReturn <<= aCID;
}
else
diff --git a/chart2/source/controller/main/SelectionHelper.cxx b/chart2/source/controller/main/SelectionHelper.cxx
index 11370bb480a7..e950f292d238 100644
--- a/chart2/source/controller/main/SelectionHelper.cxx
+++ b/chart2/source/controller/main/SelectionHelper.cxx
@@ -286,7 +286,7 @@ void Selection::adaptSelectionToNewPos( const Point& rMousePos, DrawViewWrapper
}
}
-bool Selection::isResizeableObjectSelected()
+bool Selection::isResizeableObjectSelected() const
{
ObjectType eObjectType = m_aSelectedOID.getObjectType();
switch( eObjectType )
@@ -301,12 +301,12 @@ bool Selection::isResizeableObjectSelected()
}
}
-bool Selection::isRotateableObjectSelected( const uno::Reference< frame::XModel >& xChartModel )
+bool Selection::isRotateableObjectSelected( const uno::Reference< frame::XModel >& xChartModel ) const
{
return SelectionHelper::isRotateableObject( m_aSelectedOID.getObjectCID(), xChartModel );
}
-bool Selection::isDragableObjectSelected()
+bool Selection::isDragableObjectSelected() const
{
return m_aSelectedOID.isDragableObject();
}
diff --git a/chart2/source/inc/ObjectIdentifier.hxx b/chart2/source/inc/ObjectIdentifier.hxx
index 79fb15232c81..87fb5723e3fc 100644
--- a/chart2/source/inc/ObjectIdentifier.hxx
+++ b/chart2/source/inc/ObjectIdentifier.hxx
@@ -164,7 +164,7 @@ public:
static OUString getDragMethodServiceName( const OUString& rClassifiedIdentifier );
static OUString getDragParameterString( const OUString& rCID );
static bool isDragableObject( const OUString& rClassifiedIdentifier );
- bool isDragableObject();
+ bool isDragableObject() const;
static bool isRotateableObject( const OUString& rClassifiedIdentifier );
static bool isMultiClickObject( const OUString& rClassifiedIdentifier );
static bool areSiblings( const OUString& rCID1, const OUString& rCID2 );//identical object is no sibling
@@ -172,7 +172,7 @@ public:
static OUString getStringForType( ObjectType eObjectType );
static ObjectType getObjectType( const OUString& rCID );
- ObjectType getObjectType();
+ ObjectType getObjectType() const;
static OUString createSeriesSubObjectStub( ObjectType eSubObjectType
, const OUString& rSeriesParticle
diff --git a/chart2/source/tools/ObjectIdentifier.cxx b/chart2/source/tools/ObjectIdentifier.cxx
index 40c7380d3c23..0b29437546dd 100644
--- a/chart2/source/tools/ObjectIdentifier.cxx
+++ b/chart2/source/tools/ObjectIdentifier.cxx
@@ -811,7 +811,7 @@ bool ObjectIdentifier::isDragableObject( const OUString& rClassifiedIdentifier )
return bReturn;
}
-bool ObjectIdentifier::isDragableObject()
+bool ObjectIdentifier::isDragableObject() const
{
bool bReturn = false;
if ( isAutoGeneratedObject() )
@@ -1056,7 +1056,7 @@ ObjectType ObjectIdentifier::getObjectType( const OUString& rCID )
return eRet;
}
-ObjectType ObjectIdentifier::getObjectType()
+ObjectType ObjectIdentifier::getObjectType() const
{
ObjectType eObjectType( OBJECTTYPE_UNKNOWN );
if ( isAutoGeneratedObject() )
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 3bbf3b4a72ed..8a41e521d480 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -30,6 +30,7 @@
#include <svdibrow.hxx>
#endif
+#include <osl/thread.h>
#include <svx/svdoole2.hxx>
#include <svx/xgrad.hxx>
#include <svx/xflgrit.hxx>
@@ -56,8 +57,11 @@
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#include <comphelper/lok.hxx>
#include <sfx2/lokhelper.hxx>
+#include <sfx2/lokcharthelper.hxx>
#include <sfx2/viewsh.hxx>
+#include <com/sun/star/view/XSelectionSupplier.hpp>
+
using namespace com::sun::star;
// Migrate Marking of Objects, Points and GluePoints
@@ -734,6 +738,7 @@ void SdrMarkView::SetMarkHandles(SfxViewShell* pOtherShell)
tools::Rectangle aRect(GetMarkedObjRect());
tools::Rectangle aSelection(aRect);
+ bool bIsChart = false;
if (bTiledRendering && !aRect.IsEmpty())
{
sal_uInt32 nTotalPaintWindows = this->PaintWindowCount();
@@ -742,6 +747,7 @@ void SdrMarkView::SetMarkHandles(SfxViewShell* pOtherShell)
const vcl::Window* pWin = dynamic_cast<const vcl::Window*>(this->GetFirstOutputDevice());
if (pWin && pWin->IsChart())
{
+ bIsChart = true;
const vcl::Window* pViewShellWindow = GetSfxViewShell()->GetEditWindowForActiveOLEObj();
if (pViewShellWindow && pViewShellWindow->IsAncestorOf(*pWin))
{
@@ -799,6 +805,34 @@ void SdrMarkView::SetMarkHandles(SfxViewShell* pOtherShell)
{
sProperties = "{ WriterGraphic=true }";
}
+ else if (bIsChart)
+ {
+ LokChartHelper aChartHelper(pViewShell);
+ css::uno::Reference<css::frame::XController>& xChartController = aChartHelper.GetXController();
+ css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier( xChartController, uno::UNO_QUERY);
+ if (xSelectionSupplier.is())
+ {
+ uno::Any aSel = xSelectionSupplier->getSelection();
+ OUString aValue;
+ if (aSel >>= aValue)
+ {
+ OString aObjectCID(aValue.getStr(), aValue.getLength(), osl_getThreadTextEncoding());
+ sProperties += "{ ";
+ const std::vector<OString> aProps{"Draggable=", "Resizable=", "Rotatable="};
+ for (const auto& rProp: aProps)
+ {
+ sal_Int32 nPos = aObjectCID.indexOf(rProp);
+ if (nPos == -1) continue;
+ nPos += rProp.getLength();
+ if (sProperties.getLength() > 2)
+ sProperties += ", ";
+ sProperties += rProp;
+ sProperties += OString::boolean(aObjectCID[nPos] == '1');
+ }
+ sProperties += " }";
+ }
+ }
+ }
if (!sProperties.isEmpty())
{