15 return "Unknown Node";
17 wxString label = node->
GetName();
21 int status =
static_cast<int>(
m_stateManager->GetNodeStatus(
static_cast<int64_t
>(node->
GetId())));
23 if (!statusLabel.IsEmpty()) {
24 label +=
" " + statusLabel;
32 auto now = std::chrono::steady_clock::now();
33 auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now -
m_lastRefreshTime);
43 if (!tc || !tc->GetRootItem().IsOk())
47 if (changedIds.empty())
62 if (!tc || !tc->GetRootItem().IsOk())
77 wxTreeItemIdValue cookie;
78 wxTreeItemId child = tc->GetFirstChild(item, cookie);
79 while (child.IsOk()) {
81 child = tc->GetNextChild(item, cookie);
90 if (!tc || !tc->GetRootItem().IsOk())
95 for (int64_t nodeId : changedIds) {
100 wxTreeItemData *rawData = tc->GetItemData(it->second);
116 tc->SetItemText(item, label);
118 int status =
static_cast<int>(
m_stateManager->GetNodeStatus(
static_cast<int64_t
>(node->
GetId())));
122 tc->SetItemTextColour(item, wxColour(100, 150, 255));
125 tc->SetItemTextColour(item, wxColour(100, 220, 100));
128 tc->SetItemTextColour(item, wxColour(255, 80, 80));
131 tc->SetItemTextColour(item, wxColour(255, 180, 50));
134 tc->SetItemTextColour(item, wxColour(200, 200, 200));
146 std::function<void(wxTreeItemId)> updateItem = [&](wxTreeItemId item) {
155 wxTreeItemIdValue cookie;
156 wxTreeItemId child = tc->GetFirstChild(item, cookie);
157 while (child.IsOk()) {
159 child = tc->GetNextChild(item, cookie);
163 updateItem(tc->GetRootItem());
170 return wxString::FromUTF8(
"\xe2\x96\xb6");
172 return wxString::FromUTF8(
"\xe2\x9c\x93");
174 return wxString::FromUTF8(
"\xe2\x9c\x97");
176 return wxString::FromUTF8(
"\xe2\x96\xa0");
201 std::shared_ptr<Network::StateManager> stateManager,
202 const std::string &treeId) {
208 std::string
id = treeId.empty() ?
"monitored_tree" : treeId;
Abstract interface for tree nodes that can be visualized.
virtual String GetTypeString() const
virtual size_t GetId() const =0
virtual const String & GetName() const =0
TreeHierarchyTab subclass with context menu and node activation hooks.
NavigatorHierarchyView(wxWindow *parent, const EmberUI::TreeHierarchyConfig &config)
void SetEditingEnabled(bool enabled)
void SetActiveTree(std::shared_ptr< EmberCore::ITreeStructure > tree, const std::string &treeId)
Sets the active tree for hierarchy view and drills into it.
void NavigateBack()
Navigates back in breadcrumb history.
NavigatorHierarchyView * GetHierarchyView() const
void DrillIntoTree(const std::string &treeId)
Drills into a subtree (updates breadcrumb and hierarchy).
NavigatorTab(wxWindow *parent)
wxTreeCtrl * GetTreeCtrl() const
Returns the tree control widget.
EmberCore::ITreeNode * GetNodeFromItem(const wxTreeItemId &item) const
Extracts ITreeNode from a tree item (or nullptr if DummyTreeItemData).
Hierarchy view with live status updates.
std::unordered_map< int64_t, wxTreeItemId > m_nodeIdToItem
wxString GetNodeDisplayText(EmberCore::ITreeNode *node) const override
Returns display text including status for the given node.
std::shared_ptr< Network::StateManager > m_stateManager
void UpdateSingleItem(const wxTreeItemId &item, EmberCore::ITreeNode *node)
std::chrono::steady_clock::time_point m_lastRefreshTime
wxString GetStatusLabel(int status) const
void UpdateChangedNodes(const std::vector< int64_t > &changedIds)
void RefreshStatus()
Refreshes status icons and labels for visible tree nodes.
void RebuildNodeIdMapRecursive(const wxTreeItemId &item)
MonitorHierarchyView(wxWindow *parent, const EmberUI::TreeHierarchyConfig &config)
static constexpr int64_t REFRESH_INTERVAL_MS
void RebuildNodeIdMap()
Rebuilds the node ID to tree item mapping.
MonitorNavigatorTab(wxWindow *parent)
void ClearMonitorTree()
Clears the current monitor tree.
EmberUI::NavigatorHierarchyView * CreateHierarchyView(wxWindow *parent, const EmberUI::TreeHierarchyConfig &cfg) override
Creates and returns a MonitorHierarchyView instance.
void RefreshStatus()
Refreshes status display for all visible nodes.
void SetMonitorTree(std::shared_ptr< EmberCore::ITreeStructure > tree, std::shared_ptr< Network::StateManager > stateManager, const std::string &treeId="")
Sets the monitor tree and state manager; optionally associates a tree ID.
MonitorHierarchyView * m_monitorHierView
std::shared_ptr< Network::StateManager > m_stateManager
Configuration for TreeHierarchyTab appearance and behavior.
bool syncSelectionWithCanvas
Sync selection with canvas.
int autoExpandDepth
Depth to auto-expand.