Files
odfstudio/include/sfx2/devtools/ObjectInspectorTreeHandler.hxx
T
Michael Weghorn 03d5d803c4 weld: Switch TreeView selection changed signal param to ItemView
Switch the param for the signal and handlers used when
the selection in a weld::TreeView changes from weld::TreeView&
to the base class, weld::ItemView&.

This is in preparation of moving the logic to the weld::ItemView
base class in an upcoming commit.

Handler implementations that require a weld::TreeView
instance can use the one that the signal is connected
to, e.g. use the class member directly inside of the
implementation instead of using the param (as is done
in most of the places anyway).

Change-Id: I0bbf8fe1dbd95906a5224155d48d832bcd144532
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/203366
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-04-10 06:36:08 +02:00

116 lines
3.7 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
*/
#pragma once
#include <comphelper/string.hxx>
#include <tools/link.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include <memory>
#include <deque>
class CommandEvent;
struct ObjectInspectorWidgets;
namespace com::sun::star::uno
{
class XComponentContext;
}
namespace com::sun::star::uno
{
class XInterface;
}
namespace weld
{
class ItemView;
class TreeIter;
class TreeView;
}
/** Object inspector tree handler
*
* Handles the object inspector part of DevTools - mainly interaction
* between UI objects that consist of the object inspector.
*
*/
class ObjectInspectorTreeHandler
{
private:
std::unique_ptr<ObjectInspectorWidgets>& mpObjectInspectorWidgets;
// object stack to remember previously inspected objects so it is
// possible to return back to them
std::deque<css::uno::Any> maInspectionStack;
// just the current context
css::uno::Reference<css::uno::XComponentContext> mxContext;
// treeview sort and compare
comphelper::string::NaturalStringSorter mxSorter;
void setSortFunction(std::unique_ptr<weld::TreeView>& pTreeView);
sal_Int32 compare(const std::unique_ptr<weld::TreeView>& pTreeView, const weld::TreeIter& rLeft,
const weld::TreeIter& rRight);
// treeview manipulation
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);
void inspectObject(css::uno::Reference<css::uno::XInterface> const& xInterface);
// Object stack handling
void clearStack();
void addToStack(css::uno::Any const& rAny);
css::uno::Any popFromStack();
void updateBackButtonState();
public:
ObjectInspectorTreeHandler(std::unique_ptr<ObjectInspectorWidgets>& pObjectInspectorWidgets);
// callbacks when a node in the tree view is expanded
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);
// callback when the tree view selection changed to a different node
DECL_LINK(SelectionChanged, weld::ItemView&, void);
// callback when a pop-up is triggered on a tree view node
DECL_LINK(PopupMenuHandler, const CommandEvent&, bool);
// callback when a button is clicked on a toolbar
DECL_LINK(ToolbarButtonClicked, const OUString&, void);
// callback when a page is entered or left on the notebook bar for
// different categories
DECL_LINK(NotebookEnterPage, const OUString&, void);
DECL_LINK(NotebookLeavePage, const OUString&, bool);
DECL_LINK(HeaderBarClick, int, void);
void introspect(css::uno::Reference<css::uno::XInterface> const& xInterface);
void dispose();
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */