diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2021-02-17 11:49:56 +0900 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2021-02-22 06:28:00 +0100 |
commit | 28115cec387e4a548844a7402be798d6ff47f9ac (patch) | |
tree | 2fd2fcbe009ebbefdc253667c2b35aad9acfc0e7 /sfx2 | |
parent | 385808a2dff7300ec0120fdd5e8acfad8f86e50d (diff) |
devtools: change the object inspector view to tabs
Until now we had only one tree view with top-level nodes for
services, interfaces, properties and methods. The problem with
this is that each one category has it's own distinct columns
(especially methods) so they can't fit well into just one tree
view. Services and interfaces categories are very simple so they
can be presented in a simpler way.
This change adds a tab-bar on top, for all the categories and each
one is now presented in its own tree view, which makes it possible
to modify the tree view to the specific category. Tree views are
currently copies, but they will be modified in the future into
what is more appropriate for the category.
Change-Id: Ib532df9bb7b9e0920fff57085d6ec4f1031b3ed8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111092
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/devtools/DevelopmentToolDockingWindow.cxx | 13 | ||||
-rw-r--r-- | sfx2/source/devtools/ObjectInspectorTreeHandler.cxx | 325 | ||||
-rw-r--r-- | sfx2/uiconfig/ui/developmenttool.ui | 338 |
3 files changed, 475 insertions, 201 deletions
diff --git a/sfx2/source/devtools/DevelopmentToolDockingWindow.cxx b/sfx2/source/devtools/DevelopmentToolDockingWindow.cxx index 5a5134548f11..6bd92f17256d 100644 --- a/sfx2/source/devtools/DevelopmentToolDockingWindow.cxx +++ b/sfx2/source/devtools/DevelopmentToolDockingWindow.cxx @@ -28,13 +28,17 @@ DevelopmentToolDockingWindow::DevelopmentToolDockingWindow(SfxBindings* pInputBi : SfxDockingWindow(pInputBindings, pChildWindow, pParent, "DevelopmentTool", "sfx/ui/developmenttool.ui") , mpClassNameLabel(m_xBuilder->weld_label("class_name_value_id")) - , mpClassListBox(m_xBuilder->weld_tree_view("class_listbox_id")) + , mpInterfacesTreeView(m_xBuilder->weld_tree_view("interfaces_treeview_id")) + , mpServicesTreeView(m_xBuilder->weld_tree_view("services_treeview_id")) + , mpPropertiesTreeView(m_xBuilder->weld_tree_view("properties_treeview_id")) + , mpMethodsTreeView(m_xBuilder->weld_tree_view("methods_treeview_id")) , mpDocumentModelTreeView(m_xBuilder->weld_tree_view("leftside_treeview_id")) , mpSelectionToggle(m_xBuilder->weld_toggle_button("selection_toggle")) , maDocumentModelTreeHandler( mpDocumentModelTreeView, pInputBindings->GetDispatcher()->GetFrame()->GetObjectShell()->GetBaseModel()) - , maObjectInspectorTreeHandler(mpClassListBox, mpClassNameLabel) + , maObjectInspectorTreeHandler(mpInterfacesTreeView, mpServicesTreeView, mpPropertiesTreeView, + mpMethodsTreeView, mpClassNameLabel) { mpDocumentModelTreeView->connect_changed( LINK(this, DevelopmentToolDockingWindow, DocumentModelTreeViewSelectionHandler)); @@ -106,7 +110,10 @@ void DevelopmentToolDockingWindow::dispose() // dispose welded objects mpClassNameLabel.reset(); - mpClassListBox.reset(); + mpInterfacesTreeView.reset(); + mpServicesTreeView.reset(); + mpPropertiesTreeView.reset(); + mpMethodsTreeView.reset(); mpSelectionToggle.reset(); mpDocumentModelTreeView.reset(); diff --git a/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx b/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx index cbf5640abd5a..6ea018564865 100644 --- a/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx +++ b/sfx2/source/devtools/ObjectInspectorTreeHandler.cxx @@ -205,7 +205,7 @@ public: virtual bool shouldShowExpander() { return false; } - virtual void fillChildren(std::unique_ptr<weld::TreeView>& rTree, weld::TreeIter const& rParent) + virtual void fillChildren(std::unique_ptr<weld::TreeView>& rTree, const weld::TreeIter* pParent) = 0; virtual std::vector<std::pair<sal_Int32, OUString>> getColumnValues() @@ -232,12 +232,12 @@ OUString lclAppendNode(std::unique_ptr<weld::TreeView>& pTree, ObjectInspectorNo } OUString lclAppendNodeToParent(std::unique_ptr<weld::TreeView>& pTree, - weld::TreeIter const& rParent, ObjectInspectorNodeInterface* pEntry) + const weld::TreeIter* pParent, ObjectInspectorNodeInterface* pEntry) { OUString sName = pEntry->getObjectName(); OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry))); std::unique_ptr<weld::TreeIter> pCurrent = pTree->make_iterator(); - pTree->insert(&rParent, -1, &sName, &sId, nullptr, nullptr, pEntry->shouldShowExpander(), + pTree->insert(pParent, -1, &sName, &sId, nullptr, nullptr, pEntry->shouldShowExpander(), pCurrent.get()); pTree->set_text_emphasis(*pCurrent, true, 0); @@ -261,7 +261,7 @@ public: } void fillChildren(std::unique_ptr<weld::TreeView>& /*rTree*/, - weld::TreeIter const& /*rParent*/) override + const weld::TreeIter* /*pParent*/) override { } @@ -274,11 +274,6 @@ protected: uno::Any maAny; uno::Reference<uno::XComponentContext> mxContext; - uno::Reference<uno::XInterface> getObjectFromAny() - { - return uno::Reference<uno::XInterface>(maAny, uno::UNO_QUERY); - } - ObjectInspectorNodeInterface* createNodeObjectForAny(OUString const& rName, uno::Any& rAny); public: @@ -323,38 +318,6 @@ public: } }; -class ServicesNode : public BasicValueNode -{ -public: - ServicesNode(css::uno::Reference<css::uno::XInterface> const& xObject, - uno::Reference<uno::XComponentContext> const& xContext) - : BasicValueNode("Services", uno::Any(xObject), xContext) - { - } - - bool shouldShowExpander() override { return true; } - - void fillChildren(std::unique_ptr<weld::TreeView>& pTree, - weld::TreeIter const& rParent) override - { - auto xObject = getObjectFromAny(); - if (xObject.is()) - { - auto xServiceInfo = uno::Reference<lang::XServiceInfo>(xObject, uno::UNO_QUERY); - const uno::Sequence<OUString> aServiceNames(xServiceInfo->getSupportedServiceNames()); - for (auto const& aServiceName : aServiceNames) - { - lclAppendNodeToParent(pTree, rParent, new SimpleStringNode(aServiceName)); - } - } - } - - std::vector<std::pair<sal_Int32, OUString>> getColumnValues() override - { - return std::vector<std::pair<sal_Int32, OUString>>(); - } -}; - class GenericPropertiesNode : public BasicValueNode { public: @@ -365,93 +328,7 @@ public: } void fillChildren(std::unique_ptr<weld::TreeView>& pTree, - weld::TreeIter const& rParent) override; -}; - -class PropertiesNode : public GenericPropertiesNode -{ -public: - PropertiesNode(uno::Reference<uno::XInterface> const& xObject, - uno::Reference<uno::XComponentContext> const& xContext) - : GenericPropertiesNode("Properties", uno::Any(xObject), xContext) - { - } - - bool shouldShowExpander() override { return true; } - - std::vector<std::pair<sal_Int32, OUString>> getColumnValues() override - { - return ObjectInspectorNodeInterface::getColumnValues(); - } -}; - -class InterfacesNode : public BasicValueNode -{ -public: - InterfacesNode(css::uno::Reference<css::uno::XInterface> const& xObject, - uno::Reference<uno::XComponentContext> const& xContext) - : BasicValueNode("Interfaces", uno::Any(xObject), xContext) - { - } - - bool shouldShowExpander() override { return true; } - - void fillChildren(std::unique_ptr<weld::TreeView>& pTree, - weld::TreeIter const& rParent) override - { - auto xObject = getObjectFromAny(); - if (xObject.is()) - { - uno::Reference<lang::XTypeProvider> xTypeProvider(xObject, uno::UNO_QUERY); - if (xTypeProvider.is()) - { - const auto xSequenceTypes = xTypeProvider->getTypes(); - for (auto const& xType : xSequenceTypes) - { - OUString aName = xType.getTypeName(); - lclAppendNodeToParent(pTree, rParent, new SimpleStringNode(aName)); - } - } - } - } - - std::vector<std::pair<sal_Int32, OUString>> getColumnValues() override - { - return std::vector<std::pair<sal_Int32, OUString>>(); - } -}; - -class MethodsNode : public BasicValueNode -{ -public: - MethodsNode(css::uno::Reference<css::uno::XInterface> const& xObject, - uno::Reference<uno::XComponentContext> const& xContext) - : BasicValueNode("Methods", uno::Any(xObject), xContext) - { - } - - bool shouldShowExpander() override { return true; } - - void fillChildren(std::unique_ptr<weld::TreeView>& pTree, - weld::TreeIter const& rParent) override - { - uno::Reference<beans::XIntrospection> xIntrospection - = beans::theIntrospection::get(mxContext); - auto xIntrospectionAccess = xIntrospection->inspect(maAny); - - const auto xMethods = xIntrospectionAccess->getMethods(beans::MethodConcept::ALL); - for (auto const& xMethod : xMethods) - { - OUString aMethodName = xMethod->getName(); - - lclAppendNodeToParent(pTree, rParent, new SimpleStringNode(aMethodName)); - } - } - - std::vector<std::pair<sal_Int32, OUString>> getColumnValues() override - { - return std::vector<std::pair<sal_Int32, OUString>>(); - } + const weld::TreeIter* pParent) override; }; class StructNode : public BasicValueNode @@ -466,7 +343,7 @@ public: bool shouldShowExpander() override { return true; } void fillChildren(std::unique_ptr<weld::TreeView>& pTree, - weld::TreeIter const& rParent) override; + const weld::TreeIter* pParent) override; }; class SequenceNode : public BasicValueNode @@ -481,7 +358,7 @@ public: bool shouldShowExpander() override { return true; } void fillChildren(std::unique_ptr<weld::TreeView>& pTree, - weld::TreeIter const& rParent) override + const weld::TreeIter* pParent) override { auto xReflection = reflection::theCoreReflection::get(mxContext); uno::Reference<reflection::XIdlClass> xClass @@ -497,7 +374,7 @@ public: auto* pObjectInspectorNode = createNodeObjectForAny(OUString::number(i), aArrayValue); if (pObjectInspectorNode) - lclAppendNodeToParent(pTree, rParent, pObjectInspectorNode); + lclAppendNodeToParent(pTree, pParent, pObjectInspectorNode); } } @@ -521,7 +398,7 @@ public: }; void GenericPropertiesNode::fillChildren(std::unique_ptr<weld::TreeView>& pTree, - weld::TreeIter const& rParent) + const weld::TreeIter* pParent) { if (!maAny.hasValue()) return; @@ -553,11 +430,11 @@ void GenericPropertiesNode::fillChildren(std::unique_ptr<weld::TreeView>& pTree, auto* pObjectInspectorNode = createNodeObjectForAny(xProperty.Name, aCurrentAny); if (pObjectInspectorNode) - lclAppendNodeToParent(pTree, rParent, pObjectInspectorNode); + lclAppendNodeToParent(pTree, pParent, pObjectInspectorNode); } } -void StructNode::fillChildren(std::unique_ptr<weld::TreeView>& pTree, weld::TreeIter const& rParent) +void StructNode::fillChildren(std::unique_ptr<weld::TreeView>& pTree, const weld::TreeIter* pParent) { auto xReflection = reflection::theCoreReflection::get(mxContext); uno::Reference<reflection::XIdlClass> xClass @@ -572,7 +449,9 @@ void StructNode::fillChildren(std::unique_ptr<weld::TreeView>& pTree, weld::Tree auto* pObjectInspectorNode = createNodeObjectForAny(aFieldName, aFieldValue); if (pObjectInspectorNode) - lclAppendNodeToParent(pTree, rParent, pObjectInspectorNode); + { + lclAppendNodeToParent(pTree, pParent, pObjectInspectorNode); + } } } @@ -603,50 +482,155 @@ ObjectInspectorNodeInterface* BasicValueNode::createNodeObjectForAny(OUString co } // end anonymous namespace ObjectInspectorTreeHandler::ObjectInspectorTreeHandler( - std::unique_ptr<weld::TreeView>& pObjectInspectorTree, + std::unique_ptr<weld::TreeView>& pInterfacesTreeView, + std::unique_ptr<weld::TreeView>& pServicesTreeView, + std::unique_ptr<weld::TreeView>& pPropertiesTreeView, + std::unique_ptr<weld::TreeView>& pMethodsTreeView, std::unique_ptr<weld::Label>& pClassNameLabel) - : mpObjectInspectorTree(pObjectInspectorTree) + : mpInterfacesTreeView(pInterfacesTreeView) + , mpServicesTreeView(pServicesTreeView) + , mpPropertiesTreeView(pPropertiesTreeView) + , mpMethodsTreeView(pMethodsTreeView) , mpClassNameLabel(pClassNameLabel) { - mpObjectInspectorTree->connect_expanding( - LINK(this, ObjectInspectorTreeHandler, ExpandingHandler)); + mpInterfacesTreeView->connect_expanding( + LINK(this, ObjectInspectorTreeHandler, ExpandingHandlerInterfaces)); + mpServicesTreeView->connect_expanding( + LINK(this, ObjectInspectorTreeHandler, ExpandingHandlerServices)); + mpPropertiesTreeView->connect_expanding( + LINK(this, ObjectInspectorTreeHandler, ExpandingHandlerProperties)); + mpMethodsTreeView->connect_expanding( + LINK(this, ObjectInspectorTreeHandler, ExpandingHandlerMethods)); } -IMPL_LINK(ObjectInspectorTreeHandler, ExpandingHandler, weld::TreeIter const&, rParent, bool) +void ObjectInspectorTreeHandler::handleExpanding(std::unique_ptr<weld::TreeView>& pTreeView, + weld::TreeIter const& rParent) { - OUString sID = mpObjectInspectorTree->get_id(rParent); + OUString sID = pTreeView->get_id(rParent); if (sID.isEmpty()) - return true; + return; - clearObjectInspectorChildren(rParent); + clearObjectInspectorChildren(pTreeView, rParent); auto* pNode = reinterpret_cast<ObjectInspectorNodeInterface*>(sID.toInt64()); - pNode->fillChildren(mpObjectInspectorTree, rParent); + pNode->fillChildren(pTreeView, &rParent); +} +IMPL_LINK(ObjectInspectorTreeHandler, ExpandingHandlerInterfaces, weld::TreeIter const&, rParent, + bool) +{ + handleExpanding(mpInterfacesTreeView, rParent); return true; } -void ObjectInspectorTreeHandler::clearObjectInspectorChildren(weld::TreeIter const& rParent) +IMPL_LINK(ObjectInspectorTreeHandler, ExpandingHandlerServices, weld::TreeIter const&, rParent, + bool) +{ + handleExpanding(mpServicesTreeView, rParent); + return true; +} + +IMPL_LINK(ObjectInspectorTreeHandler, ExpandingHandlerProperties, weld::TreeIter const&, rParent, + bool) +{ + handleExpanding(mpPropertiesTreeView, rParent); + return true; +} + +IMPL_LINK(ObjectInspectorTreeHandler, ExpandingHandlerMethods, weld::TreeIter const&, rParent, bool) +{ + handleExpanding(mpMethodsTreeView, rParent); + return true; +} + +void ObjectInspectorTreeHandler::clearObjectInspectorChildren( + std::unique_ptr<weld::TreeView>& pTreeView, weld::TreeIter const& rParent) { bool bChild = false; do { - bChild = mpObjectInspectorTree->iter_has_child(rParent); + bChild = pTreeView->iter_has_child(rParent); if (bChild) { - std::unique_ptr<weld::TreeIter> pChild = mpObjectInspectorTree->make_iterator(&rParent); - bChild = mpObjectInspectorTree->iter_children(*pChild); + std::unique_ptr<weld::TreeIter> pChild = pTreeView->make_iterator(&rParent); + bChild = pTreeView->iter_children(*pChild); if (bChild) { - clearObjectInspectorChildren(*pChild); - OUString sID = mpObjectInspectorTree->get_id(*pChild); + clearObjectInspectorChildren(pTreeView, *pChild); + OUString sID = pTreeView->get_id(*pChild); auto* pEntry = reinterpret_cast<ObjectInspectorNodeInterface*>(sID.toInt64()); delete pEntry; - mpObjectInspectorTree->remove(*pChild); + pTreeView->remove(*pChild); } } } while (bChild); } +void ObjectInspectorTreeHandler::clearAll(std::unique_ptr<weld::TreeView>& pTreeView) +{ + // destroy all ObjectInspectorNodes from the tree + pTreeView->all_foreach([&pTreeView](weld::TreeIter& rEntry) { + OUString sID = pTreeView->get_id(rEntry); + auto* pEntry = reinterpret_cast<ObjectInspectorNodeInterface*>(sID.toInt64()); + delete pEntry; + return false; + }); + pTreeView->clear(); +} + +void ObjectInspectorTreeHandler::appendInterfaces(uno::Reference<uno::XInterface> const& 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)); + } + } +} + +void ObjectInspectorTreeHandler::appendServices(uno::Reference<uno::XInterface> const& xInterface) +{ + if (!xInterface.is()) + return; + + auto xServiceInfo = uno::Reference<lang::XServiceInfo>(xInterface, uno::UNO_QUERY); + const uno::Sequence<OUString> aServiceNames(xServiceInfo->getSupportedServiceNames()); + for (auto const& aServiceName : aServiceNames) + { + lclAppendNode(mpServicesTreeView, new SimpleStringNode(aServiceName)); + } +} + +void ObjectInspectorTreeHandler::appendProperties(uno::Reference<uno::XInterface> const& xInterface) +{ + if (!xInterface.is()) + return; + GenericPropertiesNode aNode("", uno::Any(xInterface), comphelper::getProcessComponentContext()); + aNode.fillChildren(mpPropertiesTreeView, nullptr); +} + +void ObjectInspectorTreeHandler::appendMethods(uno::Reference<uno::XInterface> const& xInterface) +{ + if (!xInterface.is()) + return; + + uno::Reference<beans::XIntrospection> xIntrospection + = beans::theIntrospection::get(comphelper::getProcessComponentContext()); + auto xIntrospectionAccess = xIntrospection->inspect(uno::Any(xInterface)); + + const auto xMethods = xIntrospectionAccess->getMethods(beans::MethodConcept::ALL); + for (auto const& xMethod : xMethods) + { + OUString aMethodName = xMethod->getName(); + lclAppendNode(mpMethodsTreeView, new SimpleStringNode(aMethodName)); + } +} + void ObjectInspectorTreeHandler::introspect(uno::Reference<uno::XInterface> const& xInterface) { if (!xInterface.is()) @@ -662,26 +646,33 @@ void ObjectInspectorTreeHandler::introspect(uno::Reference<uno::XInterface> cons mpClassNameLabel->set_label(aImplementationName); // fill object inspector - mpObjectInspectorTree->freeze(); - mpObjectInspectorTree->clear(); - - lclAppendNode(mpObjectInspectorTree, new ServicesNode(xInterface, xContext)); - lclAppendNode(mpObjectInspectorTree, new InterfacesNode(xInterface, xContext)); - lclAppendNode(mpObjectInspectorTree, new PropertiesNode(xInterface, xContext)); - lclAppendNode(mpObjectInspectorTree, new MethodsNode(xInterface, xContext)); - - mpObjectInspectorTree->thaw(); + mpInterfacesTreeView->freeze(); + clearAll(mpInterfacesTreeView); + appendInterfaces(xInterface); + mpInterfacesTreeView->thaw(); + + mpServicesTreeView->freeze(); + clearAll(mpServicesTreeView); + appendServices(xInterface); + mpServicesTreeView->thaw(); + + mpPropertiesTreeView->freeze(); + clearAll(mpPropertiesTreeView); + appendProperties(xInterface); + mpPropertiesTreeView->thaw(); + + mpMethodsTreeView->freeze(); + clearAll(mpMethodsTreeView); + appendMethods(xInterface); + mpMethodsTreeView->thaw(); } void ObjectInspectorTreeHandler::dispose() { - // destroy all ObjectInspectorNodes from the tree - mpObjectInspectorTree->all_foreach([this](weld::TreeIter& rEntry) { - OUString sID = mpObjectInspectorTree->get_id(rEntry); - auto* pEntry = reinterpret_cast<ObjectInspectorNodeInterface*>(sID.toInt64()); - delete pEntry; - return false; - }); + clearAll(mpInterfacesTreeView); + clearAll(mpServicesTreeView); + clearAll(mpPropertiesTreeView); + clearAll(mpMethodsTreeView); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/uiconfig/ui/developmenttool.ui b/sfx2/uiconfig/ui/developmenttool.ui index d65542b00167..32423886558c 100644 --- a/sfx2/uiconfig/ui/developmenttool.ui +++ b/sfx2/uiconfig/ui/developmenttool.ui @@ -10,7 +10,43 @@ <column type="gchararray"/> </columns> </object> - <object class="GtkTreeStore" id="object_inspector_liststore"> + <object class="GtkTreeStore" id="object_inspector_interfaces_liststore"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name value --> + <column type="gchararray"/> + <!-- column-name type --> + <column type="gchararray"/> + <!-- column-name id --> + <column type="gchararray"/> + </columns> + </object> + <object class="GtkTreeStore" id="object_inspector_methods_liststore"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name value --> + <column type="gchararray"/> + <!-- column-name type --> + <column type="gchararray"/> + <!-- column-name id --> + <column type="gchararray"/> + </columns> + </object> + <object class="GtkTreeStore" id="object_inspector_properties_liststore"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name value --> + <column type="gchararray"/> + <!-- column-name type --> + <column type="gchararray"/> + <!-- column-name id --> + <column type="gchararray"/> + </columns> + </object> + <object class="GtkTreeStore" id="object_inspector_services_liststore"> <columns> <!-- column-name text --> <column type="gchararray"/> @@ -147,62 +183,302 @@ </packing> </child> <child> - <object class="GtkScrolledWindow"> + <object class="GtkNotebook"> <property name="visible">True</property> <property name="can-focus">True</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <property name="shadow-type">in</property> <child> - <object class="GtkTreeView" id="class_listbox_id"> + <object class="GtkScrolledWindow"> <property name="visible">True</property> <property name="can-focus">True</property> - <property name="receives-default">True</property> <property name="hexpand">True</property> <property name="vexpand">True</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"> - <object class="GtkTreeSelection"/> + <property name="shadow-type">in</property> + <child> + <object class="GtkTreeView" id="interfaces_treeview_id"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="model">object_inspector_interfaces_liststore</property> + <property name="search-column">0</property> + <property name="enable-tree-lines">True</property> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn4"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|object">Object</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext4"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn5"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|value">Value</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext5"/> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn6"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|type">Type</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext6"/> + <attributes> + <attribute name="text">2</attribute> + </attributes> + </child> + </object> + </child> + </object> </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="developmenttool|interfaces">Interfaces</property> + </object> + <packing> + <property name="tab-fill">False</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="shadow-type">in</property> <child> - <object class="GtkTreeViewColumn" id="treeviewcolumn1"> - <property name="resizable">True</property> - <property name="title" translatable="yes" context="developmenttool|object">Object</property> + <object class="GtkTreeView" id="services_treeview_id"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="model">object_inspector_services_liststore</property> + <property name="search-column">0</property> + <property name="enable-tree-lines">True</property> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> <child> - <object class="GtkCellRendererText" id="obj_insp_cellrenderertext1"/> - <attributes> - <attribute name="text">0</attribute> - </attributes> + <object class="GtkTreeViewColumn" id="treeviewcolumn7"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|object">Object</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext7"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn8"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|value">Value</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext8"/> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn9"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|type">Type</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext9"/> + <attributes> + <attribute name="text">2</attribute> + </attributes> + </child> + </object> </child> </object> </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="developmenttool|services">Services</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab-fill">False</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="shadow-type">in</property> <child> - <object class="GtkTreeViewColumn" id="treeviewcolumn2"> - <property name="resizable">True</property> - <property name="title" translatable="yes" context="developmenttool|value">Value</property> + <object class="GtkTreeView" id="properties_treeview_id"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="model">object_inspector_properties_liststore</property> + <property name="search-column">0</property> + <property name="enable-tree-lines">True</property> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> <child> - <object class="GtkCellRendererText" id="obj_insp_cellrenderertext2"/> - <attributes> - <attribute name="text">1</attribute> - </attributes> + <object class="GtkTreeViewColumn" id="treeviewcolumn1"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|object">Object</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext1"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </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> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn3"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|type">Type</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext3"/> + <attributes> + <attribute name="text">2</attribute> + </attributes> + </child> + </object> </child> </object> </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="developmenttool|properties">Properties</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab-fill">False</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="shadow-type">in</property> <child> - <object class="GtkTreeViewColumn" id="treeviewcolumn3"> - <property name="resizable">True</property> - <property name="title" translatable="yes" context="developmenttool|type">Type</property> + <object class="GtkTreeView" id="methods_treeview_id"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="model">object_inspector_methods_liststore</property> + <property name="search-column">0</property> + <property name="enable-tree-lines">True</property> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> <child> - <object class="GtkCellRendererText" id="obj_insp_cellrenderertext3"/> - <attributes> - <attribute name="text">2</attribute> - </attributes> + <object class="GtkTreeViewColumn" id="treeviewcolumn10"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|object">Object</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext10"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn11"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|value">Value</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext11"/> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn12"> + <property name="resizable">True</property> + <property name="title" translatable="yes" context="developmenttool|type">Type</property> + <child> + <object class="GtkCellRendererText" id="obj_insp_cellrenderertext12"/> + <attributes> + <attribute name="text">2</attribute> + </attributes> + </child> + </object> </child> </object> </child> </object> + <packing> + <property name="position">3</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="developmenttool|methods">Methods</property> + </object> + <packing> + <property name="position">3</property> + <property name="tab-fill">False</property> + </packing> </child> </object> <packing> |