11#include <unordered_map>
13#include <wx/dcbuffer.h>
87 void SetTree(std::shared_ptr<EmberCore::ITreeStructure> tree);
89 std::shared_ptr<EmberCore::ITreeStructure>
GetTree()
const {
return m_tree; }
168 virtual void OnKeyDown(wxKeyEvent &event);
170 virtual void OnKeyUp(wxKeyEvent &event);
184 void OnPaint(wxPaintEvent &event);
185 void OnSize(wxSizeEvent &event);
195 void DrawGrid(wxDC &dc,
const wxRect &viewport);
205 int offsetX,
int offsetY,
const wxRect &minimapArea);
230 std::shared_ptr<EmberCore::ITreeStructure>
m_tree;
Abstract interface for tree nodes that can be visualized.
NodeType
Node types for visualization categorization.
Interface for querying node status and execution path.
void CenterOnNode(EmberCore::ITreeNode *node)
Centers the view on the given node.
void DrawOverlayInfo(wxDC &dc)
void OnMouseMotion(wxMouseEvent &event)
void DrawMinimapNode(wxDC &dc, EmberCore::ITreeNode *node, wxCoord x, wxCoord y, float scaleX, float scaleY, int offsetX, int offsetY, const wxRect &minimapArea)
std::set< int64_t > m_executionPathIds
virtual ~TreeCanvas()
Destructor.
void OnMouseWheel(wxMouseEvent &event)
void SetNodeSelectionCallback(NodeSelectionCallback callback)
Sets callback invoked when a node is selected.
wxPoint FindNodeWorldPosition(EmberCore::ITreeNode *target_node)
void EnterFocusMode(EmberCore::ITreeNode *node)
Enters focus mode, showing only the subtree rooted at the given node.
std::unordered_map< EmberCore::ITreeNode *, int > m_widthCache
std::vector< CollapseArrowInfo > m_collapseArrows
EmberCore::ITreeNode * FindNodeAtPosition(EmberCore::ITreeNode *node, wxPoint node_pos, wxPoint target_pos)
std::shared_ptr< EmberCore::ITreeStructure > m_tree
void OnSize(wxSizeEvent &event)
void DrawTypeHeader(wxDC &dc, EmberCore::ITreeNode *node, const wxRect &nodeRect)
float GetZoom() const
Returns the current zoom factor.
EmberCore::ITreeNode * m_hoveredArrowNode
virtual void OnNodeSelected(EmberCore::ITreeNode *node)
Called when a node is selected; override for app-specific behavior.
TreeCanvas(wxWindow *parent, wxWindowID id=wxID_ANY)
Constructor.
wxColour GetNodeTypeColor(EmberCore::ITreeNode::NodeType type) const
void RefreshCanvas()
Marks canvas dirty (alias for MarkDirty).
int m_minimapCacheTreeMinX
void ClearWidthCache()
Clears the subtree width cache.
void OnMouseLeftDClick(wxMouseEvent &event)
void OnMouseRightUp(wxMouseEvent &event)
TreeCanvasConfig m_scaled
std::map< EmberCore::ITreeNode::NodeType, wxBitmap > m_typeIcons
void SetShowMinimap(bool show)
Enables or disables minimap display.
EmberCore::ITreeNode * GetFocusRoot() const
Returns the focus mode root node, or nullptr if not in focus mode.
void DrawNodeText(wxDC &dc, EmberCore::ITreeNode *node, wxCoord x, wxCoord y)
void DrawGrid(wxDC &dc, const wxRect &viewport)
void DrawNodeBox(wxDC &dc, EmberCore::ITreeNode *node, wxCoord x, wxCoord y)
virtual void OnKeyUp(wxKeyEvent &event)
Key up handler; override for custom key handling.
void DrawNodeConnections(wxDC &dc, EmberCore::ITreeNode *node, wxCoord x, wxCoord y)
std::vector< std::pair< wxRect, EmberCore::ITreeNode * > > m_breadcrumbHitTargets
wxPoint WorldToScreen(const wxPoint &world_pos) const
void ExpandAllChildren(EmberCore::ITreeNode *node)
void SetTree(std::shared_ptr< EmberCore::ITreeStructure > tree)
Sets the tree structure to display.
void InvalidateLayout()
Invalidates layout cache and triggers refresh.
IStatusProvider * GetStatusProvider() const
Returns the status overlay provider.
virtual wxColour GetNodeFillColor(EmberCore::ITreeNode *node, bool selected, bool hovered)
Returns the fill color for a node; override for custom coloring.
void OnMouseMiddleUp(wxMouseEvent &event)
void SetShowOverlayInfo(bool show)
Enables or disables overlay info display.
void DrawBreadcrumb(wxDC &dc)
void AutoCollapseTree(EmberCore::ITreeNode *node, int depth)
float m_minimapCacheScale
void SetTargetOffset(const wxPoint &offset)
Sets the target offset for smooth panning.
void ResetView()
Resets zoom and pan to default values.
virtual void OnKeyDown(wxKeyEvent &event)
Key down handler; override for custom key handling.
const TreeCanvasConfig & GetConfig() const
Returns const configuration.
EmberCore::ITreeNode * m_hoveredNode
NodeSelectionCallback m_selectionCallback
void UpdateScaledConfig()
void MarkDirty()
Marks the canvas for repaint.
std::vector< LineSegment > m_selectedPathSegments
void BuildPathToSelected()
void DrawNode(wxDC &dc, EmberCore::ITreeNode *node, wxCoord x, wxCoord y, int level, const wxRect &viewport)
EmberCore::ITreeNode * m_selectedNode
wxPoint GetTargetOffset() const
Returns the target offset for smooth panning.
void LoadTypeIcons()
Loads type icons from the configured icon directory.
VisibilityChangeCallback m_visibilityChangeCallback
void SetShowBreadcrumb(bool show)
Enables or disables breadcrumb display.
bool GetShowMinimap() const
Returns whether the minimap is shown.
std::function< void(EmberCore::ITreeNode *)> NodeSelectionCallback
void ExpandToDepth(EmberCore::ITreeNode *node, int relativeDepth)
void SetZoom(float zoom)
Sets the zoom factor.
void SetStatusProvider(IStatusProvider *provider)
Sets the status overlay provider.
TreeCanvasConfig m_config
void OnMouseLeftUp(wxMouseEvent &event)
virtual wxColour GetNodeBorderColor(EmberCore::ITreeNode *node, bool selected, bool hovered)
Returns the border color for a node; override for custom coloring.
void CollapseAllChildren(EmberCore::ITreeNode *node)
void ComputeTreeExtent(EmberCore::ITreeNode *node, wxCoord x, wxCoord y, int &minX, int &maxX, int &maxY)
IStatusProvider * m_statusProvider
EmberCore::ITreeNode * GetEffectiveRoot() const
std::set< int > m_pathToSelectedIds
wxLongLong m_lastFrameTime
EmberCore::ITreeNode * GetSelectedNode() const
Returns the currently selected node.
void FitTreeInView()
Adjusts view to fit the entire tree.
void DrawMinimap(wxDC &dc)
wxPoint CalculateRootPosition()
EmberCore::ITreeNode * m_focusRoot
void SetShowGrid(bool show)
Enables or disables grid display.
wxPoint ScreenToWorld(const wxPoint &screen_pos) const
void OnPaint(wxPaintEvent &event)
void ExitFocusMode()
Exits focus mode.
int CalculateSubtreeWidth(EmberCore::ITreeNode *node)
TreeCanvasConfig & GetConfig()
Returns mutable configuration.
void SetVisibilityChangeCallback(VisibilityChangeCallback callback)
Sets callback invoked when node visibility changes.
void OnMouseMiddleDown(wxMouseEvent &event)
bool IsInFocusMode() const
Returns whether focus mode is active.
void OnMouseLeftDown(wxMouseEvent &event)
virtual void OnBeforePaintOverlays(wxDC &dc)
Called before painting overlays; override to draw custom overlays.
std::shared_ptr< EmberCore::ITreeStructure > GetTree() const
Returns the current tree structure.
EmberCore::ITreeNode * m_pressedArrowNode
wxRect GetViewportBounds() const
void SetSelectedNode(EmberCore::ITreeNode *node)
Sets the selected node.
virtual wxColour GetNodeTextColor(EmberCore::ITreeNode *node, bool selected, bool hovered)
Returns the text color for a node; override for custom coloring.
std::vector< LineSegment > m_highlightedSegments
void DrawCollapseArrow(wxDC &dc, EmberCore::ITreeNode *node, wxCoord x, wxCoord y)
wxPoint GetViewOffset() const
Returns the current view offset.
std::function< void()> VisibilityChangeCallback
EmberCore::ITreeNode * FindArrowAtPosition(const wxPoint &world_pos) const
Configuration for tree canvas (node sizes, spacing, colors, zoom settings, etc.)
bool enable_viewport_culling
int viewport_culling_margin
wxColour action_type_color
float mouse_wheel_sensitivity
wxColour path_highlight_color
wxColour behavior_tree_type_color
bool enable_smooth_panning
wxColour selected_border_color
bool highlight_path_to_selected
bool show_navigation_info
int autoCollapseThreshold
wxColour connection_color
wxColour decorator_type_color
wxColour hovered_border_color
wxColour condition_type_color
wxColour background_color
wxColour type_header_text_color
wxColour control_type_color
EmberCore::ITreeNode * node