summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/sfx2/devtools/DevelopmentToolDockingWindow.hxx5
-rw-r--r--include/sfx2/devtools/ObjectInspectorTreeHandler.hxx27
-rw-r--r--sfx2/source/devtools/DevelopmentToolDockingWindow.cxx13
-rw-r--r--sfx2/source/devtools/ObjectInspectorTreeHandler.cxx325
-rw-r--r--sfx2/uiconfig/ui/developmenttool.ui338
5 files changed, 502 insertions, 206 deletions
diff --git a/include/sfx2/devtools/DevelopmentToolDockingWindow.hxx b/include/sfx2/devtools/DevelopmentToolDockingWindow.hxx
index 987bc053a878..f3633189c9b6 100644
--- a/include/sfx2/devtools/DevelopmentToolDockingWindow.hxx
+++ b/include/sfx2/devtools/DevelopmentToolDockingWindow.hxx
@@ -30,7 +30,10 @@ class SFX2_DLLPUBLIC DevelopmentToolDockingWindow final : public SfxDockingWindo
{
private:
std::unique_ptr<weld::Label> mpClassNameLabel;
- std::unique_ptr<weld::TreeView> mpClassListBox;
+ std::unique_ptr<weld::TreeView> mpInterfacesTreeView;
+ std::unique_ptr<weld::TreeView> mpServicesTreeView;
+ std::unique_ptr<weld::TreeView> mpPropertiesTreeView;
+ std::unique_ptr<weld::TreeView> mpMethodsTreeView;
std::unique_ptr<weld::TreeView> mpDocumentModelTreeView;
std::unique_ptr<weld::ToggleButton> mpSelectionToggle;
diff --git a/include/sfx2/devtools/ObjectInspectorTreeHandler.hxx b/include/sfx2/devtools/ObjectInspectorTreeHandler.hxx
index 69769cc261d9..9bb27e4a72cc 100644
--- a/include/sfx2/devtools/ObjectInspectorTreeHandler.hxx
+++ b/include/sfx2/devtools/ObjectInspectorTreeHandler.hxx
@@ -19,16 +19,35 @@
class ObjectInspectorTreeHandler
{
private:
- std::unique_ptr<weld::TreeView>& mpObjectInspectorTree;
+ std::unique_ptr<weld::TreeView>& mpInterfacesTreeView;
+ std::unique_ptr<weld::TreeView>& mpServicesTreeView;
+ std::unique_ptr<weld::TreeView>& mpPropertiesTreeView;
+ std::unique_ptr<weld::TreeView>& mpMethodsTreeView;
+
std::unique_ptr<weld::Label>& mpClassNameLabel;
- void clearObjectInspectorChildren(weld::TreeIter const& rParent);
+ static void clearObjectInspectorChildren(std::unique_ptr<weld::TreeView>& pTreeView,
+ weld::TreeIter const& rParent);
+ static void handleExpanding(std::unique_ptr<weld::TreeView>& pTreeView,
+ weld::TreeIter const& rParent);
+ static void clearAll(std::unique_ptr<weld::TreeView>& pTreeView);
+
+ void appendInterfaces(css::uno::Reference<css::uno::XInterface> const& xInterface);
+ void appendServices(css::uno::Reference<css::uno::XInterface> const& xInterface);
+ void appendProperties(css::uno::Reference<css::uno::XInterface> const& xInterface);
+ void appendMethods(css::uno::Reference<css::uno::XInterface> const& xInterface);
public:
- ObjectInspectorTreeHandler(std::unique_ptr<weld::TreeView>& pObjectInspectorTree,
+ ObjectInspectorTreeHandler(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);
- DECL_LINK(ExpandingHandler, const weld::TreeIter&, bool);
+ DECL_LINK(ExpandingHandlerInterfaces, const weld::TreeIter&, bool);
+ DECL_LINK(ExpandingHandlerServices, const weld::TreeIter&, bool);
+ DECL_LINK(ExpandingHandlerProperties, const weld::TreeIter&, bool);
+ DECL_LINK(ExpandingHandlerMethods, const weld::TreeIter&, bool);
void introspect(css::uno::Reference<css::uno::XInterface> const& xInterface);
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>