[Libreoffice-commits] core.git: include/sfx2 sfx2/source sfx2/uiconfig
Tomaž Vajngerl (via logerrit)
logerrit at kemper.freedesktop.org
Sat Mar 13 11:48:40 UTC 2021
include/sfx2/devtools/ObjectInspectorTreeHandler.hxx | 5 +
sfx2/source/devtools/ObjectInspectorTreeHandler.cxx | 68 ++++++++++++++-----
sfx2/uiconfig/ui/developmenttool.ui | 1
3 files changed, 56 insertions(+), 18 deletions(-)
New commits:
commit 1beb97dfc2d8c8e9ee06001ac59a22a3208214d1
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Thu Mar 11 23:26:29 2021 +0900
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Sat Mar 13 12:47:54 2021 +0100
devtools: show superclass tree in interface and services tree view
Change-Id: I508b568bbb5b0559c265a3f058e689eeeb326b83
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112372
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/include/sfx2/devtools/ObjectInspectorTreeHandler.hxx b/include/sfx2/devtools/ObjectInspectorTreeHandler.hxx
index 65a16be8c890..58b4c833961c 100644
--- a/include/sfx2/devtools/ObjectInspectorTreeHandler.hxx
+++ b/include/sfx2/devtools/ObjectInspectorTreeHandler.hxx
@@ -15,8 +15,9 @@
#include <vcl/commandevent.hxx>
#include <vcl/svapp.hxx>
-#include <com/sun/star/uno/XInterface.hpp>
#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/XInterface.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
#include <memory>
#include <deque>
@@ -34,6 +35,8 @@ private:
std::deque<css::uno::Any> maInspectionStack;
+ css::uno::Reference<css::uno::XComponentContext> mxContext;
+
static void clearObjectInspectorChildren(std::unique_ptr<weld::TreeView>& pTreeView,
weld::TreeIter const& rParent);
static void handleExpanding(std::unique_ptr<weld::TreeView>& pTreeView,
diff --git a/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx b/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx
index 33f2b5c90e85..553e7616308b 100644
--- a/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx
+++ b/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx
@@ -12,9 +12,6 @@
#include <sfx2/devtools/ObjectInspectorTreeHandler.hxx>
-#include <com/sun/star/uno/XInterface.hpp>
-#include <com/sun/star/uno/Reference.hxx>
-
#include <com/sun/star/beans/theIntrospection.hpp>
#include <com/sun/star/beans/XIntrospection.hpp>
#include <com/sun/star/beans/XIntrospectionAccess.hpp>
@@ -190,6 +187,14 @@ OUString getAnyType(const uno::Any& aValue)
return aTypeName.replaceAll("com.sun.star", "css");
}
+uno::Reference<reflection::XIdlClass>
+convertTypeToIdlClass(const uno::Type& rType,
+ const uno::Reference<uno::XComponentContext>& xContext)
+{
+ auto xReflection = reflection::theCoreReflection::get(xContext);
+ return xReflection->forName(rType.getTypeName());
+}
+
// Object inspector nodes
class ObjectInspectorNodeInterface
@@ -346,6 +351,43 @@ public:
}
};
+class ClassNode : public ObjectInspectorNodeInterface
+{
+private:
+ uno::Reference<reflection::XIdlClass> mxClass;
+
+ static bool isXInterface(uno::Reference<reflection::XIdlClass> const& xClass)
+ {
+ return xClass->getName() == "com.sun.star.uno.XInterface";
+ }
+
+public:
+ ClassNode(uno::Reference<reflection::XIdlClass> const& xClass)
+ : mxClass(xClass)
+ {
+ }
+
+ bool shouldShowExpander() override
+ {
+ auto const& xSuperClasses = mxClass->getSuperclasses();
+ return xSuperClasses.getLength() > 2
+ || (xSuperClasses.getLength() == 1 && !isXInterface(xSuperClasses[0]));
+ }
+
+ OUString getObjectName() override { return mxClass->getName(); }
+
+ void fillChildren(std::unique_ptr<weld::TreeView>& rTree,
+ const weld::TreeIter* pParent) override
+ {
+ auto const& xSuperClasses = mxClass->getSuperclasses();
+ for (auto const& xSuper : xSuperClasses)
+ {
+ if (!isXInterface(xSuper))
+ lclAppendNodeToParent(rTree, pParent, new ClassNode(xSuper));
+ }
+ }
+};
+
class BasicValueNode : public SimpleStringNode
{
protected:
@@ -434,9 +476,7 @@ public:
uno::Reference<uno::XComponentContext> const& xContext)
: BasicValueNode(rName, rAny, rInfo, xContext)
{
- auto xReflection = reflection::theCoreReflection::get(mxContext);
- OUString aTypeName = maAny.getValueType().getTypeName();
- auto xClass = xReflection->forName(aTypeName);
+ auto xClass = convertTypeToIdlClass(maAny.getValueType(), mxContext);
mxIdlArray = xClass->getArray();
}
@@ -717,6 +757,7 @@ ObjectInspectorTreeHandler::ObjectInspectorTreeHandler(
, mpClassNameLabel(pClassNameLabel)
, mpObjectInspectorToolbar(pObjectInspectorToolbar)
, mpObjectInspectorNotebook(pObjectInspectorNotebook)
+ , mxContext(comphelper::getProcessComponentContext())
{
mpInterfacesTreeView->connect_expanding(
LINK(this, ObjectInspectorTreeHandler, ExpandingHandlerInterfaces));
@@ -965,14 +1006,15 @@ void ObjectInspectorTreeHandler::appendInterfaces(uno::Reference<uno::XInterface
{
if (!xInterface.is())
return;
+
uno::Reference<lang::XTypeProvider> xTypeProvider(xInterface, uno::UNO_QUERY);
if (xTypeProvider.is())
{
const auto xSequenceTypes = xTypeProvider->getTypes();
for (auto const& xType : xSequenceTypes)
{
- OUString aName = xType.getTypeName();
- lclAppendNode(mpInterfacesTreeView, new SimpleStringNode(aName));
+ auto xClass = convertTypeToIdlClass(xType, mxContext);
+ lclAppendNode(mpInterfacesTreeView, new ClassNode(xClass));
}
}
}
@@ -994,8 +1036,7 @@ void ObjectInspectorTreeHandler::appendProperties(uno::Reference<uno::XInterface
{
if (!xInterface.is())
return;
- GenericPropertiesNode aNode("", uno::Any(xInterface), "",
- comphelper::getProcessComponentContext());
+ GenericPropertiesNode aNode("", uno::Any(xInterface), "", mxContext);
aNode.fillChildren(mpPropertiesTreeView, nullptr);
}
@@ -1004,8 +1045,7 @@ void ObjectInspectorTreeHandler::appendMethods(uno::Reference<uno::XInterface> c
if (!xInterface.is())
return;
- uno::Reference<beans::XIntrospection> xIntrospection
- = beans::theIntrospection::get(comphelper::getProcessComponentContext());
+ uno::Reference<beans::XIntrospection> xIntrospection = beans::theIntrospection::get(mxContext);
auto xIntrospectionAccess = xIntrospection->inspect(uno::Any(xInterface));
const auto xMethods = xIntrospectionAccess->getMethods(beans::MethodConcept::ALL);
@@ -1045,10 +1085,6 @@ void ObjectInspectorTreeHandler::inspectObject(uno::Reference<uno::XInterface> c
if (!xInterface.is())
return;
- uno::Reference<uno::XComponentContext> xContext = comphelper::getProcessComponentContext();
- if (!xContext.is())
- return;
-
// Set implementation name
auto xServiceInfo = uno::Reference<lang::XServiceInfo>(xInterface, uno::UNO_QUERY);
OUString aImplementationName = xServiceInfo->getImplementationName();
diff --git a/sfx2/uiconfig/ui/developmenttool.ui b/sfx2/uiconfig/ui/developmenttool.ui
index 9f23752d7f26..40223847ddd4 100644
--- a/sfx2/uiconfig/ui/developmenttool.ui
+++ b/sfx2/uiconfig/ui/developmenttool.ui
@@ -168,7 +168,6 @@
<property name="vexpand">True</property>
<property name="model">object_inspector_interfaces_liststore</property>
<property name="search-column">0</property>
- <property name="show-expanders">False</property>
<property name="enable-tree-lines">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
More information about the Libreoffice-commits
mailing list