[Libreoffice-commits] core.git: include/sfx2 officecfg/registry sfx2/sdi sfx2/source

Tomaž Vajngerl (via logerrit) logerrit at kemper.freedesktop.org
Sun Feb 14 01:26:00 UTC 2021


 include/sfx2/devtools/DevelopmentToolDockingWindow.hxx               |    6 +
 include/sfx2/sfxsids.hrc                                             |    1 
 officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu |    8 ++
 sfx2/sdi/appslots.sdi                                                |    5 +
 sfx2/sdi/sfx.sdi                                                     |   16 ++++
 sfx2/source/appl/appserv.cxx                                         |   37 ++++++++++
 sfx2/source/devtools/DevelopmentToolDockingWindow.cxx                |   13 +--
 7 files changed, 79 insertions(+), 7 deletions(-)

New commits:
commit 063602ea3791e87f9bd6685c9bd6dac7a1e4d189
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sat Feb 13 10:42:52 2021 +0900
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Sun Feb 14 02:25:17 2021 +0100

    devtools: add .uno action to trigger inspect of the selected object
    
    Added .uno:InspectSelectedObject, which can be added to context
    menu and when triggered, shows the current selected object in the
    object inspector.
    
    Change-Id: I2ade6c74197dcb3cf33b0ad2194822e6ae25fb7e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110837
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/include/sfx2/devtools/DevelopmentToolDockingWindow.hxx b/include/sfx2/devtools/DevelopmentToolDockingWindow.hxx
index 4721a424e66d..987bc053a878 100644
--- a/include/sfx2/devtools/DevelopmentToolDockingWindow.hxx
+++ b/include/sfx2/devtools/DevelopmentToolDockingWindow.hxx
@@ -21,6 +21,7 @@
 #include <com/sun/star/uno/XInterface.hpp>
 #include <com/sun/star/uno/Reference.hxx>
 #include <com/sun/star/view/XSelectionChangeListener.hpp>
+#include <com/sun/star/view/XSelectionSupplier.hpp>
 #include <com/sun/star/frame/XController.hpp>
 
 #include <unordered_map>
@@ -36,6 +37,7 @@ private:
     css::uno::Reference<css::uno::XInterface> mxRoot;
     css::uno::Reference<css::uno::XInterface> mxCurrentSelection;
     css::uno::Reference<css::view::XSelectionChangeListener> mxSelectionListener;
+    css::uno::Reference<css::view::XSelectionSupplier> mxSelectionSupplier;
 
     DocumentModelTreeHandler maDocumentModelTreeHandler;
     ObjectInspectorTreeHandler maObjectInspectorTreeHandler;
@@ -45,7 +47,7 @@ private:
 
     void inspectDocument();
     void updateSelection();
-    void inspectSelectionOrRoot(css::uno::Reference<css::frame::XController> const& xController);
+    void inspectSelectionOrRoot();
 
 public:
     DevelopmentToolDockingWindow(SfxBindings* pBindings, SfxChildWindow* pChildWindow,
@@ -60,6 +62,8 @@ public:
     void introspect(css::uno::Reference<css::uno::XInterface> const& xInterface);
 
     void selectionChanged(css::uno::Reference<css::uno::XInterface> const& xInterface);
+
+    void changeToCurrentSelection();
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/sfx2/sfxsids.hrc b/include/sfx2/sfxsids.hrc
index 8cb256ff998a..3f9d4a232fb7 100644
--- a/include/sfx2/sfxsids.hrc
+++ b/include/sfx2/sfxsids.hrc
@@ -51,6 +51,7 @@ class SvxSearchItem;
 #define SID_SAFE_MODE                       (SID_SFX_START + 303)
 
 #define SID_DEVELOPMENT_TOOLS_DOCKING_WINDOW (SID_SFX_START + 306)
+#define SID_INSPECT_SELECTED_OBJECT          (SID_SFX_START + 307)
 
 #define SID_CONTEXT                         (SID_SFX_START + 310)
 
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
index ee5c3fd9e81d..508238ccbaf4 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
@@ -7336,6 +7336,14 @@ bit 3 (0x8): #define UICOMMANDDESCRIPTION_PROPERTIES_TOGGLEBUTTON 8
           <value>1</value>
         </prop>
       </node>
+      <node oor:name=".uno:InspectSelectedObject" oor:op="replace">
+        <prop oor:name="Label" oor:type="xs:string">
+          <value xml:lang="en-US">Inspect Object</value>
+        </prop>
+        <prop oor:name="Properties" oor:type="xs:int">
+          <value>1</value>
+        </prop>
+      </node>
     </node>
   </node>
 </oor:component-data>
diff --git a/sfx2/sdi/appslots.sdi b/sfx2/sdi/appslots.sdi
index ee620ff3fa8c..5dbee7376b6e 100644
--- a/sfx2/sdi/appslots.sdi
+++ b/sfx2/sdi/appslots.sdi
@@ -219,6 +219,11 @@ interface Application
         ExecMethod = MiscExec_Impl ;
         StateMethod = MiscState_Impl ;
     ]
+    SID_INSPECT_SELECTED_OBJECT
+    [
+        ExecMethod = MiscExec_Impl ;
+        StateMethod = MiscState_Impl ;
+    ]
 }
 
 
diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index 5a52dd558114..425724440d13 100644
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -5640,6 +5640,22 @@ SfxBoolItem DevelopmentToolsDockingWindow SID_DEVELOPMENT_TOOLS_DOCKING_WINDOW
     GroupId = SfxGroupId::Application;
 ]
 
+SfxVoidItem InspectSelectedObject SID_INSPECT_SELECTED_OBJECT
+[
+    AutoUpdate = FALSE,
+    FastCall = FALSE,
+    ReadOnlyDoc = TRUE,
+    Toggle = FALSE,
+    Container = FALSE,
+    RecordAbsolute = FALSE,
+    RecordPerSet;
+
+    AccelConfig = TRUE,
+    MenuConfig = TRUE,
+    ToolBoxConfig = TRUE,
+    GroupId = SfxGroupId::View;
+]
+
 SfxVoidItem UnicodeNotationToggle SID_UNICODE_NOTATION_TOGGLE
 ()
 [
diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx
index e5360c796183..43f36d187bfd 100644
--- a/sfx2/source/appl/appserv.cxx
+++ b/sfx2/source/appl/appserv.cxx
@@ -97,6 +97,7 @@
 #include <sfx2/sidebar/SidebarController.hxx>
 #include <sfx2/safemode.hxx>
 #include <sfx2/sfxuno.hxx>
+#include <sfx2/devtools/DevelopmentToolDockingWindow.hxx>
 
 #include <comphelper/types.hxx>
 #include <officecfg/Office/Common.hxx>
@@ -1022,6 +1023,26 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq )
             bDone = true;
             break;
         }
+        case SID_INSPECT_SELECTED_OBJECT:
+        {
+            SfxViewShell* pViewShell = SfxViewShell::Current();
+            SfxViewFrame* pViewFrame = pViewShell->GetViewFrame();
+
+            pViewFrame->ShowChildWindow(SID_DEVELOPMENT_TOOLS_DOCKING_WINDOW, true);
+
+            SfxChildWindow* pChild = pViewFrame->GetChildWindow(SID_DEVELOPMENT_TOOLS_DOCKING_WINDOW);
+            if (!pChild)
+                return;
+
+            auto pDockingWin = dynamic_cast<DevelopmentToolDockingWindow*>(pChild->GetWindow());
+            if (pDockingWin)
+            {
+                pDockingWin->changeToCurrentSelection();
+            }
+
+            bDone = true;
+            break;
+        }
         case SID_SAFE_MODE:
         {
             SafeModeQueryDialog aDialog(rReq.GetFrameWeld());
@@ -1212,6 +1233,22 @@ void SfxApplication::MiscState_Impl(SfxItemSet &rSet)
                         rSet.DisableItem(nWhich);
                 }
                 break;
+                case SID_INSPECT_SELECTED_OBJECT:
+                {
+                    bool bSuccess = false;
+                    auto* pViewShell = SfxViewShell::Current();
+                    if (pViewShell)
+                    {
+                        auto* pViewFrame = pViewShell->GetViewFrame();
+                        if (pViewFrame && pViewFrame->KnowsChildWindow(SID_DEVELOPMENT_TOOLS_DOCKING_WINDOW))
+                        {
+                            bSuccess = true;
+                        }
+                    }
+                    if (!bSuccess)
+                        rSet.DisableItem(nWhich);
+                }
+                break;
 
                 default:
                     break;
diff --git a/sfx2/source/devtools/DevelopmentToolDockingWindow.cxx b/sfx2/source/devtools/DevelopmentToolDockingWindow.cxx
index 0d335b5118cc..5a5134548f11 100644
--- a/sfx2/source/devtools/DevelopmentToolDockingWindow.cxx
+++ b/sfx2/source/devtools/DevelopmentToolDockingWindow.cxx
@@ -48,17 +48,16 @@ DevelopmentToolDockingWindow::DevelopmentToolDockingWindow(SfxBindings* pInputBi
 
     maDocumentModelTreeHandler.inspectDocument();
     mxSelectionListener.set(new SelectionChangeHandler(xController, this));
+    mxSelectionSupplier.set(xController, css::uno::UNO_QUERY);
 
-    inspectSelectionOrRoot(xController);
+    maObjectInspectorTreeHandler.introspect(mxRoot);
 }
 
-void DevelopmentToolDockingWindow::inspectSelectionOrRoot(
-    uno::Reference<frame::XController> const& xController)
+void DevelopmentToolDockingWindow::inspectSelectionOrRoot()
 {
-    css::uno::Reference<css::view::XSelectionSupplier> xSupplier(xController, css::uno::UNO_QUERY);
-    if (xSupplier.is())
+    if (mxSelectionSupplier.is())
     {
-        css::uno::Any aAny = xSupplier->getSelection();
+        css::uno::Any aAny = mxSelectionSupplier->getSelection();
         if (aAny.hasValue())
         {
             auto xInterface = aAny.get<css::uno::Reference<css::uno::XInterface>>();
@@ -145,4 +144,6 @@ void DevelopmentToolDockingWindow::selectionChanged(
     updateSelection();
 }
 
+void DevelopmentToolDockingWindow::changeToCurrentSelection() { inspectSelectionOrRoot(); }
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list