diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2021-02-01 15:42:54 +0900 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2021-02-10 14:15:04 +0100 |
commit | e71350e037dcd49f24c939395ab6436051382c83 (patch) | |
tree | dc31b95e659eff53cc9e7013a1d9000e4a513bfb /svx | |
parent | 26ee85d5ecf97745cc6e0a773eac654e2d573040 (diff) |
devtools: add values for properties in object inspector tree view
Change-Id: Ia53ea2cbc9797cd787d1ea3d841f947a515055e1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110251
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/devtools/DevelopmentToolDockingWindow.cxx | 195 | ||||
-rw-r--r-- | svx/uiconfig/ui/developmenttool.ui | 24 |
2 files changed, 203 insertions, 16 deletions
diff --git a/svx/source/devtools/DevelopmentToolDockingWindow.cxx b/svx/source/devtools/DevelopmentToolDockingWindow.cxx index 40e5bcc76857..da3b8d5896b5 100644 --- a/svx/source/devtools/DevelopmentToolDockingWindow.cxx +++ b/svx/source/devtools/DevelopmentToolDockingWindow.cxx @@ -21,6 +21,10 @@ #include <com/sun/star/beans/Property.hpp> #include <com/sun/star/beans/PropertyConcept.hpp> #include <com/sun/star/beans/MethodConcept.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> + +#include <com/sun/star/reflection/theCoreReflection.hpp> +#include <com/sun/star/reflection/XIdlReflection.hpp> #include <com/sun/star/reflection/XIdlMethod.hpp> #include <comphelper/processfactory.hxx> @@ -193,6 +197,156 @@ void DevelopmentToolDockingWindow::selectionChanged( updateSelection(); } +namespace +{ +uno::Reference<reflection::XIdlClass> +TypeToIdlClass(const uno::Type& rType, const uno::Reference<uno::XComponentContext>& xContext) +{ + auto xReflection = reflection::theCoreReflection::get(xContext); + + uno::Reference<reflection::XIdlClass> xRetClass; + typelib_TypeDescription* pTD = nullptr; + rType.getDescription(&pTD); + if (pTD) + { + OUString sOWName(pTD->pTypeName); + xRetClass = xReflection->forName(sOWName); + } + return xRetClass; +} + +OUString AnyToString(const uno::Any& aValue, const uno::Reference<uno::XComponentContext>& xContext) +{ + uno::Type aValType = aValue.getValueType(); + uno::TypeClass eType = aValType.getTypeClass(); + + OUString aRetStr; + switch (eType) + { + case uno::TypeClass_TYPE: + { + auto xIdlClass = TypeToIdlClass(aValType, xContext); + aRetStr = xIdlClass->getName() + " <TYPE>"; + break; + } + case uno::TypeClass_INTERFACE: + { + auto xIdlClass = TypeToIdlClass(aValType, xContext); + aRetStr = xIdlClass->getName() + " <INTERFACE>"; + break; + } + case uno::TypeClass_SERVICE: + { + auto xIdlClass = TypeToIdlClass(aValType, xContext); + aRetStr = xIdlClass->getName() + " <SERVICE>"; + break; + } + case uno::TypeClass_STRUCT: + { + auto xIdlClass = TypeToIdlClass(aValType, xContext); + aRetStr = xIdlClass->getName() + " <STRUCT>"; + break; + } + case uno::TypeClass_TYPEDEF: + { + auto xIdlClass = TypeToIdlClass(aValType, xContext); + aRetStr = xIdlClass->getName() + " <TYPEDEF>"; + break; + } + case uno::TypeClass_ENUM: + { + auto xIdlClass = TypeToIdlClass(aValType, xContext); + aRetStr = xIdlClass->getName() + " <ENUM>"; + break; + } + case uno::TypeClass_EXCEPTION: + { + auto xIdlClass = TypeToIdlClass(aValType, xContext); + aRetStr = xIdlClass->getName() + " <EXCEPTION>"; + break; + } + case uno::TypeClass_SEQUENCE: + { + auto xIdlClass = TypeToIdlClass(aValType, xContext); + aRetStr = xIdlClass->getName() + " <SEQUENCE>"; + break; + } + case uno::TypeClass_VOID: + { + auto xIdlClass = TypeToIdlClass(aValType, xContext); + aRetStr = xIdlClass->getName() + " <VOID>"; + break; + } + case uno::TypeClass_ANY: + { + auto xIdlClass = TypeToIdlClass(aValType, xContext); + aRetStr = xIdlClass->getName() + " <ANY>"; + break; + } + case uno::TypeClass_UNKNOWN: + aRetStr = "<Unknown>"; + break; + case uno::TypeClass_BOOLEAN: + { + bool bBool = aValue.get<bool>(); + aRetStr = bBool ? u"True" : u"False"; + break; + } + case uno::TypeClass_CHAR: + { + sal_Unicode aChar = aValue.get<sal_Unicode>(); + aRetStr = OUString::number(aChar); + break; + } + case uno::TypeClass_STRING: + { + aRetStr = "\"" + aValue.get<OUString>() + "\""; + break; + } + case uno::TypeClass_FLOAT: + { + auto aNumber = aValue.get<float>(); + aRetStr = OUString::number(aNumber); + break; + } + case uno::TypeClass_DOUBLE: + { + auto aNumber = aValue.get<double>(); + aRetStr = OUString::number(aNumber); + break; + } + case uno::TypeClass_BYTE: + { + auto aNumber = aValue.get<sal_Int8>(); + aRetStr = OUString::number(aNumber); + break; + } + case uno::TypeClass_SHORT: + { + auto aNumber = aValue.get<sal_Int16>(); + aRetStr = OUString::number(aNumber); + break; + } + case uno::TypeClass_LONG: + { + auto aNumber = aValue.get<sal_Int32>(); + aRetStr = OUString::number(aNumber); + break; + } + case uno::TypeClass_HYPER: + { + auto aNumber = aValue.get<sal_Int64>(); + aRetStr = OUString::number(aNumber); + break; + } + + default: + break; + } + return aRetStr; +} +} + void DevelopmentToolDockingWindow::introspect(uno::Reference<uno::XInterface> const& xInterface) { if (!xInterface.is()) @@ -230,19 +384,38 @@ void DevelopmentToolDockingWindow::introspect(uno::Reference<uno::XInterface> co uno::Reference<beans::XIntrospectionAccess> xIntrospectionAccess; xIntrospectionAccess = xIntrospection->inspect(uno::makeAny(xInterface)); + { + OUString aPropertiesString("Properties"); - OUString aPropertiesString("Properties"); - mpClassListBox->insert(nullptr, -1, &aPropertiesString, nullptr, nullptr, nullptr, false, - pParent.get()); - mpClassListBox->set_text_emphasis(*pParent, true, 0); + mpClassListBox->insert(nullptr, -1, &aPropertiesString, nullptr, nullptr, nullptr, false, + pParent.get()); + mpClassListBox->set_text_emphasis(*pParent, true, 0); - const auto xProperties = xIntrospectionAccess->getProperties( - beans::PropertyConcept::ALL - beans::PropertyConcept::DANGEROUS); - for (auto const& xProperty : xProperties) - { - mpClassListBox->insert(pParent.get(), -1, &xProperty.Name, nullptr, nullptr, nullptr, false, - pResult.get()); - mpClassListBox->set_text_emphasis(*pResult, false, 0); + uno::Reference<beans::XPropertySet> xPropertySet(xInterface, uno::UNO_QUERY); + + const auto xProperties = xIntrospectionAccess->getProperties( + beans::PropertyConcept::ALL - beans::PropertyConcept::DANGEROUS); + for (auto const& xProperty : xProperties) + { + mpClassListBox->insert(pParent.get(), -1, &xProperty.Name, nullptr, nullptr, nullptr, + false, pResult.get()); + + if (xPropertySet.is()) + { + OUString aValue; + try + { + uno::Any aAny = xPropertySet->getPropertyValue(xProperty.Name); + aValue = AnyToString(aAny, xContext); + } + catch (const beans::UnknownPropertyException&) + { + aValue = "UnknownPropertyException"; + } + + mpClassListBox->set_text(*pResult, aValue, 1); + } + } } { diff --git a/svx/uiconfig/ui/developmenttool.ui b/svx/uiconfig/ui/developmenttool.ui index 8310d0fffae8..e3f3bc78e9e8 100644 --- a/svx/uiconfig/ui/developmenttool.ui +++ b/svx/uiconfig/ui/developmenttool.ui @@ -2,7 +2,7 @@ <!-- Generated with glade 3.38.2 --> <interface domain="svx"> <requires lib="gtk+" version="3.20"/> - <object class="GtkTreeStore" id="liststore"> + <object class="GtkTreeStore" id="liststore1"> <columns> <!-- column-name text --> <column type="gchararray"/> @@ -10,10 +10,12 @@ <column type="gchararray"/> </columns> </object> - <object class="GtkTreeStore" id="liststore1"> + <object class="GtkTreeStore" id="object_inspector_liststore"> <columns> <!-- column-name text --> <column type="gchararray"/> + <!-- column-name value --> + <column type="gchararray"/> <!-- column-name id --> <column type="gchararray"/> </columns> @@ -156,7 +158,7 @@ <property name="receives-default">True</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <property name="model">liststore</property> + <property name="model">object_inspector_liststore</property> <property name="search-column">0</property> <property name="enable-tree-lines">True</property> <child internal-child="selection"> @@ -165,9 +167,9 @@ <child> <object class="GtkTreeViewColumn" id="treeviewcolumn1"> <property name="resizable">True</property> - <property name="title" translatable="yes" context="developmenttool|class">Class</property> + <property name="title" translatable="yes" context="developmenttool|object">Object</property> <child> - <object class="GtkCellRendererText" id="cellrenderertext1"> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext1"> <property name="ellipsize">end</property> </object> <attributes> @@ -177,6 +179,18 @@ </child> </object> </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn2"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|value">Value</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext2"/> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + </object> + </child> </object> </child> </object> |