include/svx/devtools/DevelopmentToolDockingWindow.hxx | 2 + include/svx/devtools/DocumentModelTreeHandler.hxx | 2 + svx/source/devtools/DevelopmentToolDockingWindow.cxx | 12 ++++++- svx/source/devtools/DocumentModelTreeHandler.cxx | 29 ++++++++++++++++-- 4 files changed, 41 insertions(+), 4 deletions(-)
New commits: commit b58747e7dbfdb4ded3d774e850b4fcf6940c998e Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Wed Jan 27 21:35:47 2021 +0900 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Mon Feb 1 07:50:51 2021 +0100 devtools: add "Current Selection" to the left-side tree view "Current Selection" shows in the object inspector the current selected object in the document. Change-Id: I944759b03b3b875e062de0d4555d93012eb48317 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110117 Tested-by: Tomaž Vajngerl <qui...@gmail.com> Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/include/svx/devtools/DevelopmentToolDockingWindow.hxx b/include/svx/devtools/DevelopmentToolDockingWindow.hxx index 03ca8a387000..98a805a22716 100644 --- a/include/svx/devtools/DevelopmentToolDockingWindow.hxx +++ b/include/svx/devtools/DevelopmentToolDockingWindow.hxx @@ -50,6 +50,8 @@ public: virtual void ToggleFloatingMode() override; void introspect(css::uno::Reference<css::uno::XInterface> const& xInterface); + + void selectionChanged(css::uno::Reference<css::uno::XInterface> const& xInterface); }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/devtools/DocumentModelTreeHandler.hxx b/include/svx/devtools/DocumentModelTreeHandler.hxx index ca7cab62b0b2..731c733015e0 100644 --- a/include/svx/devtools/DocumentModelTreeHandler.hxx +++ b/include/svx/devtools/DocumentModelTreeHandler.hxx @@ -23,6 +23,7 @@ class DocumentModelTreeHandler private: std::unique_ptr<weld::TreeView>& mpDocumentModelTree; css::uno::Reference<css::uno::XInterface> mxDocument; + OUString msCurrentSelectionID; void clearChildren(weld::TreeIter const& rParent); @@ -39,6 +40,7 @@ public: DECL_LINK(ExpandingHandler, const weld::TreeIter&, bool); void inspectDocument(); + void setCurrentSelectedObject(css::uno::Reference<css::uno::XInterface> xObject); static css::uno::Reference<css::uno::XInterface> getObjectByID(OUString const& rID); void dispose(); diff --git a/svx/source/devtools/DevelopmentToolDockingWindow.cxx b/svx/source/devtools/DevelopmentToolDockingWindow.cxx index 65e4d140cf0e..d5f5a1ca0be1 100644 --- a/svx/source/devtools/DevelopmentToolDockingWindow.cxx +++ b/svx/source/devtools/DevelopmentToolDockingWindow.cxx @@ -72,8 +72,8 @@ public: if (xSupplier.is()) { uno::Any aAny = xSupplier->getSelection(); - auto aRef = aAny.get<uno::Reference<uno::XInterface>>(); - mpDockingWindow->introspect(aRef); + auto xInterface = aAny.get<uno::Reference<uno::XInterface>>(); + mpDockingWindow->selectionChanged(xInterface); } } virtual void SAL_CALL disposing(const css::lang::EventObject& /*rEvent*/) override {} @@ -148,6 +148,14 @@ void DevelopmentToolDockingWindow::ToggleFloatingMode() Invalidate(); } +void DevelopmentToolDockingWindow::selectionChanged( + uno::Reference<uno::XInterface> const& xInterface) +{ + maDocumentModelTreeHandler.setCurrentSelectedObject(xInterface); + // We need to update the introspection window + LeftSideSelected(*mpLeftSideTreeView); +} + void DevelopmentToolDockingWindow::introspect(uno::Reference<uno::XInterface> const& xInterface) { if (!xInterface.is()) diff --git a/svx/source/devtools/DocumentModelTreeHandler.cxx b/svx/source/devtools/DocumentModelTreeHandler.cxx index af446f923d0d..4d36077a74e7 100644 --- a/svx/source/devtools/DocumentModelTreeHandler.cxx +++ b/svx/source/devtools/DocumentModelTreeHandler.cxx @@ -49,11 +49,12 @@ void lclAppendToParentEntry(std::unique_ptr<weld::TreeView>& rTree, weld::TreeIt rTree->insert(&rParent, -1, &rString, &sId, nullptr, nullptr, bChildrenOnDemand, nullptr); } -void lclAppend(std::unique_ptr<weld::TreeView>& rTree, OUString const& rString, - DocumentModelTreeEntry* pEntry, bool bChildrenOnDemand = false) +OUString lclAppend(std::unique_ptr<weld::TreeView>& rTree, OUString const& rString, + DocumentModelTreeEntry* pEntry, bool bChildrenOnDemand = false) { OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry))); rTree->insert(nullptr, -1, &rString, &sId, nullptr, nullptr, bChildrenOnDemand, nullptr); + return sId; } OUString lclGetNamed(uno::Reference<uno::XInterface> const& xObject) @@ -121,6 +122,15 @@ public: } }; +class CurrentSelectionEntry : public DocumentModelTreeEntry +{ +public: + CurrentSelectionEntry(css::uno::Reference<css::uno::XInterface> const& xObject) + : DocumentModelTreeEntry(xObject) + { + } +}; + class ParagraphsEntry : public DocumentModelTreeEntry { public: @@ -623,6 +633,8 @@ void DocumentModelTreeHandler::inspectDocument() { uno::Reference<lang::XServiceInfo> xDocumentServiceInfo(mxDocument, uno::UNO_QUERY_THROW); + msCurrentSelectionID = lclAppend(mpDocumentModelTree, "Current Selection", + new CurrentSelectionEntry(mxDocument), false); lclAppend(mpDocumentModelTree, "Document", new DocumentRootEntry(mxDocument), false); if (xDocumentServiceInfo->supportsService("com.sun.star.sheet.SpreadsheetDocument")) @@ -657,4 +669,17 @@ void DocumentModelTreeHandler::inspectDocument() } } +void DocumentModelTreeHandler::setCurrentSelectedObject( + css::uno::Reference<css::uno::XInterface> xObject) +{ + if (msCurrentSelectionID.isEmpty()) + return; + + auto* pEntry = reinterpret_cast<DocumentModelTreeEntry*>(msCurrentSelectionID.toInt64()); + if (!pEntry) + return; + + pEntry->mxObject = xObject; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits