sfx2/source/devtools/ObjectInspectorTreeHandler.cxx |   81 +++++++++++++++++++-
 1 file changed, 79 insertions(+), 2 deletions(-)

New commits:
commit fed778b1cf85b100d5744ceffabb08a3d1243271
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Thu Feb 18 12:02:06 2021 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Mon Feb 22 06:29:00 2021 +0100

    devtools: add MethodNode to show the column values for methods
    
    This adds the MethodNode, which uses reflection to get the info
    for a perticular method - mainly the return type and input/output
    parameters. The types have been simplified for this view.
    
    Change-Id: I81f895d3cdf1472ae4b21227572b7ccfad607018
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111094
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx 
b/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx
index 6ea018564865..39f2d70eb06a 100644
--- a/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx
+++ b/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx
@@ -268,6 +268,84 @@ public:
     OUString getObjectName() override { return msName; }
 };
 
+class MethodNode : public ObjectInspectorNodeInterface
+{
+private:
+    uno::Reference<reflection::XIdlMethod> mxMethod;
+
+public:
+    MethodNode(uno::Reference<reflection::XIdlMethod> const& xMethod)
+        : mxMethod(xMethod)
+    {
+    }
+
+    OUString getObjectName() override { return mxMethod->getName(); }
+
+    static OUString simpleTypeName(uno::Reference<reflection::XIdlClass> 
const& xClass)
+    {
+        switch (xClass->getTypeClass())
+        {
+            case uno::TypeClass_INTERFACE:
+                return "object";
+            case uno::TypeClass_STRUCT:
+                return "struct";
+            case uno::TypeClass_ENUM:
+                return "enum";
+            case uno::TypeClass_SEQUENCE:
+                return "sequence";
+            default:
+                break;
+        }
+        return xClass->getName();
+    }
+
+    std::vector<std::pair<sal_Int32, OUString>> getColumnValues() override
+    {
+        OUString aInString;
+        OUString aOutString;
+
+        auto xClass = mxMethod->getReturnType();
+        aOutString = simpleTypeName(xClass);
+
+        const auto aParameters = mxMethod->getParameterInfos();
+        bool bFirst = true;
+        for (auto const& rParameterInfo : aParameters)
+        {
+            if (!bFirst)
+                aInString += ", ";
+            else
+                bFirst = false;
+
+            switch (rParameterInfo.aMode)
+            {
+                case reflection::ParamMode_IN:
+                    aInString += "[in] ";
+                    break;
+                case reflection::ParamMode_OUT:
+                    aInString += "[out] ";
+                    break;
+                case reflection::ParamMode_INOUT:
+                    aInString += "[in&out] ";
+                    break;
+                default:
+                    break;
+            }
+
+            aInString += rParameterInfo.aName + " : " + 
simpleTypeName(rParameterInfo.aType);
+        }
+
+        return {
+            { 1, aOutString },
+            { 2, aInString },
+        };
+    }
+
+    void fillChildren(std::unique_ptr<weld::TreeView>& /*rTree*/,
+                      const weld::TreeIter* /*pParent*/) override
+    {
+    }
+};
+
 class BasicValueNode : public SimpleStringNode
 {
 protected:
@@ -626,8 +704,7 @@ void 
ObjectInspectorTreeHandler::appendMethods(uno::Reference<uno::XInterface> c
     const auto xMethods = 
xIntrospectionAccess->getMethods(beans::MethodConcept::ALL);
     for (auto const& xMethod : xMethods)
     {
-        OUString aMethodName = xMethod->getName();
-        lclAppendNode(mpMethodsTreeView, new SimpleStringNode(aMethodName));
+        lclAppendNode(mpMethodsTreeView, new MethodNode(xMethod));
     }
 }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to