lok: only publish MEDIA_SHAPE to selecting view

We now publish the url for the media shape
in the LOK_CALLBACK_GRAPHIC_SELECTION message.

This has many advantages, most notably that it
only sends the URL to the view selecting the
media. Also, it is now easier to handle
the message as there is no need for both
a LOK_CALLBACK_GRAPHIC_SELECTION and
a LOK_CALLBACK_MEDIA_SHAPE. However, the
latter is still defined as we might still
use it at some point.

Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Change-Id: I8d4b8794d8e590628630f2b0bfbfb5debe02515f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146848
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153009
Reviewed-by: Pranam Lashkari <lpranam@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153369
Tested-by: Jenkins
Reviewed-by: Aron Budea <aron.budea@collabora.com>
This commit is contained in:
Ashod Nakashian
2023-06-27 06:26:51 +02:00
committed by Aron Budea
parent 609a1567d0
commit 097cf021cb
5 changed files with 15 additions and 49 deletions
-4
View File
@@ -182,10 +182,6 @@ public:
/// Helper for diagnosing run-time problems
static void dumpState(rtl::OStringBuffer &rState);
/// Notify all views of a media update.
/// This could be a new insertion or property modifications to an existing one.
static void notifyMediaUpdate(boost::property_tree::ptree& json);
/// Process the mouse event in the currently active in-place component (if any).
/// Returns true if the event has been processed, and no further processing is necessary.
static bool testInPlaceComponentMouseEventHit(SfxViewShell* pViewShell, int nType, int nX,
-3
View File
@@ -75,9 +75,6 @@ public:
virtual bool shouldKeepAspectRatio() const override { return true; }
/// When Lokit is enabled, notify the media details.
void notifyPropertiesForLOKit();
private:
void mediaPropertiesChanged( const ::avmedia::MediaItem& rNewState );
virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
-9
View File
@@ -983,15 +983,6 @@ void SfxLokHelper::dumpState(rtl::OStringBuffer &rState)
}
}
void SfxLokHelper::notifyMediaUpdate(boost::property_tree::ptree& json)
{
std::stringstream aStream;
boost::property_tree::write_json(aStream, json, /*pretty=*/ false);
const std::string str = aStream.str();
SfxLokHelper::notifyAllViews(LOK_CALLBACK_MEDIA_SHAPE, OString(str));
}
bool SfxLokHelper::testInPlaceComponentMouseEventHit(SfxViewShell* pViewShell, int nType, int nX,
int nY, int nCount, int nButtons,
int nModifier, double fScaleX, double fScaleY,
+15 -10
View File
@@ -823,10 +823,12 @@ void SdrMarkView::SetMarkHandlesForLOKit(tools::Rectangle const & rRect, const S
}
{
OStringBuffer aExtraInfo;
OString sSelectionText;
OString sSelectionTextView;
boost::property_tree::ptree aTableJsonTree;
boost::property_tree::ptree aGluePointsTree;
const bool bMediaObj = (mpMarkedObj && mpMarkedObj->GetObjIdentifier() == SdrObjKind::Media);
bool bTableSelection = false;
bool bConnectorSelection = false;
@@ -839,6 +841,7 @@ void SdrMarkView::SetMarkHandlesForLOKit(tools::Rectangle const & rRect, const S
{
bConnectorSelection = dumpGluePointsToJSON(aGluePointsTree);
}
if (GetMarkedObjectCount())
{
SdrMark* pM = GetSdrMarkByIndex(0);
@@ -848,7 +851,6 @@ void SdrMarkView::SetMarkHandlesForLOKit(tools::Rectangle const & rRect, const S
// (SwVirtFlyDrawObj with a SwGrfNode)
bool bWriterGraphic = pO->HasLimitedRotation();
OStringBuffer aExtraInfo;
OString handleArrayStr;
aExtraInfo.append("{\"id\":\""
@@ -1101,13 +1103,23 @@ void SdrMarkView::SetMarkHandlesForLOKit(tools::Rectangle const & rRect, const S
sSelectionText = aSelection.toString() +
", " + OString::number(nRotAngle.get());
}
if (!aExtraInfo.isEmpty())
{
sSelectionTextView = sSelectionText + ", " + aExtraInfo + "}";
if (bMediaObj && pOtherShell == nullptr)
{
// Add the URL only if we have a Media Object and
// we are the selecting view.
SdrMediaObj* mediaObj = dynamic_cast<SdrMediaObj*>(mpMarkedObj);
if (mediaObj)
aExtraInfo.append(", \"url\": \"" + mediaObj->getTempURL().toUtf8() + "\"");
}
aExtraInfo.append(handleArrayStr
+ "}");
sSelectionText += ", " + aExtraInfo;
aExtraInfo.setLength(0);
}
}
@@ -1149,15 +1161,8 @@ void SdrMarkView::SetMarkHandlesForLOKit(tools::Rectangle const & rRect, const S
// We have a new selection, so both pViewShell and the
// other views want to know about it.
pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_GRAPHIC_SELECTION, sSelectionText);
SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_GRAPHIC_VIEW_SELECTION, "selection", sSelectionTextView);
}
if (comphelper::LibreOfficeKit::isActive() && mpMarkedObj
&& mpMarkedObj->GetObjIdentifier() == SdrObjKind::Media)
{
SdrMediaObj* mediaObj = dynamic_cast<SdrMediaObj*>(mpMarkedObj);
if (mediaObj)
mediaObj->notifyPropertiesForLOKit();
SfxLokHelper::notifyOtherViews(pViewShell, LOK_CALLBACK_GRAPHIC_VIEW_SELECTION, "selection", sSelectionTextView);
}
}
}
-23
View File
@@ -469,27 +469,4 @@ void SdrMediaObj::mediaPropertiesChanged( const ::avmedia::MediaItem& rNewProper
}
}
void SdrMediaObj::notifyPropertiesForLOKit()
{
#if HAVE_FEATURE_AVMEDIA
if (!m_xImpl->m_MediaProperties.getTempURL().isEmpty())
{
const auto mediaId = reinterpret_cast<std::size_t>(this);
boost::property_tree::ptree json;
json.put("action", "update");
json.put("id", mediaId);
json.put("url", m_xImpl->m_MediaProperties.getTempURL());
const tools::Rectangle aRect = o3tl::convert(getRectangle(), o3tl::Length::mm100, o3tl::Length::twip);
json.put("x", aRect.getX());
json.put("y", aRect.getY());
json.put("w", aRect.getOpenWidth());
json.put("h", aRect.getOpenHeight());
SfxLokHelper::notifyMediaUpdate(json);
}
#endif
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */