1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 22:48:11 +00:00
serenity/Userland/Applications/SpaceAnalyzer/TreeMapWidget.h
Arda Cinar c045ae1a96 SpaceAnalyzer: Keep the current path via filenames, not indices
The tree map widget keeps the current path to allow the user to navigate
between directories. This path was being kept as indices into the
children array. The indices might change after the tree is regenerated
and this change is required to keep the user's current place after a
re-analysis
2023-01-09 17:08:17 +00:00

61 lines
1.7 KiB
C++

/*
* Copyright (c) 2021-2022, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include "Tree.h"
#include <AK/DeprecatedString.h>
#include <LibGUI/Frame.h>
#include <LibGfx/Rect.h>
namespace SpaceAnalyzer {
class TreeMapWidget final : public GUI::Frame {
C_OBJECT(TreeMapWidget)
public:
virtual ~TreeMapWidget() override = default;
Function<void()> on_path_change;
Function<void(GUI::ContextMenuEvent&)> on_context_menu_request;
size_t path_size() const;
TreeNode const* path_node(size_t n) const;
size_t viewpoint() const;
void set_viewpoint(size_t);
void set_tree(RefPtr<Tree> tree);
private:
TreeMapWidget() = default;
virtual void paint_event(GUI::PaintEvent&) override;
virtual void mousemove_event(GUI::MouseEvent&) override;
virtual void mousedown_event(GUI::MouseEvent&) override;
virtual void doubleclick_event(GUI::MouseEvent&) override;
virtual void mousewheel_event(GUI::MouseEvent&) override;
virtual void context_menu_event(GUI::ContextMenuEvent&) override;
virtual void keydown_event(GUI::KeyEvent&) override;
bool rect_can_contain_label(Gfx::IntRect const& rect) const;
enum class HasLabel {
Yes,
No
};
enum class IsRemainder {
Yes,
No
};
template<typename Function>
void lay_out_children(TreeNode const&, Gfx::IntRect const&, int depth, Function);
void paint_cell_frame(GUI::Painter&, TreeNode const&, Gfx::IntRect const&, Gfx::IntRect const&, int depth, HasLabel has_label) const;
Vector<DeprecatedString> path_to_position(Gfx::IntPoint);
RefPtr<Tree> m_tree;
Vector<DeprecatedString> m_path;
size_t m_viewpoint { 0 };
void const* m_selected_node_cache;
};
}