Files
loongoffice/include/sfx2/devtools/ObjectInspectorTreeHandler.hxx
Tomaž Vajngerl 66d8951df3 sfx2: use natural string sort for sorting in object inspector
Use a natural string sort for all strings in the object inspector
tree view. This is more useful for properties as those can have
indices, which are shown as numbers, so having them in natural
order makes the tree view easier to digest.

Change-Id: I7d036cd755f6595fa302c7a28a005684897f2963
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134541
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2022-05-20 06:19:16 +02:00

102 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 <vcl/weld.hxx>
#include <vcl/commandevent.hxx>
#include <comphelper/string.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/uno/XInterface.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <sfx2/devtools/ObjectInspectorWidgets.hxx>
#include <memory>
#include <deque>
/** 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(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::TreeView&, 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 OString&, void);
// callback when a page is entered or left on the notebook bar for
// different categories
DECL_LINK(NotebookEnterPage, const OString&, void);
DECL_LINK(NotebookLeavePage, const OString&, 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: */