yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
canvas_usage_tracker.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GUI_CANVAS_CANVAS_USAGE_TRACKER_H
2#define YAZE_APP_GUI_CANVAS_CANVAS_USAGE_TRACKER_H
3
4#include <chrono>
5#include <memory>
6#include <string>
7#include <unordered_map>
8#include <vector>
9
10#include "imgui/imgui.h"
11
12namespace yaze {
13namespace gui {
14
18enum class CanvasUsage {
19 kTilePainting, // Drawing tiles on canvas
20 kTileSelecting, // Selecting tiles from canvas
21 kSelectRectangle, // Rectangle selection mode
22 kColorPainting, // Color painting mode
23 kBitmapEditing, // Direct bitmap editing
24 kPaletteEditing, // Palette editing mode
25 kBppConversion, // BPP format conversion
26 kPerformanceMode, // Performance monitoring mode
27 kEntityManipulation, // Generic entity manipulation
28 // (insertion/editing/deletion)
29 kUnknown // Unknown or mixed usage
30};
31
46
52 std::chrono::steady_clock::time_point session_start;
53 std::chrono::milliseconds total_time{0};
54 std::chrono::milliseconds active_time{0};
55 std::chrono::milliseconds idle_time{0};
56
57 // Interaction counts
58 int mouse_clicks = 0;
59 int mouse_drags = 0;
61 int modal_opens = 0;
62 int tool_changes = 0;
63 int mode_changes = 0;
64
65 // Performance metrics
69
70 // Canvas state
71 ImVec2 canvas_size = ImVec2(0, 0);
72 ImVec2 content_size = ImVec2(0, 0);
73 float global_scale = 1.0F;
74 float grid_step = 32.0F;
75 bool enable_grid = true;
76 bool enable_hex_labels = false;
78
79 void Reset() {
81 session_start = std::chrono::steady_clock::now();
82 total_time = std::chrono::milliseconds{0};
83 active_time = std::chrono::milliseconds{0};
84 idle_time = std::chrono::milliseconds{0};
85 mouse_clicks = 0;
86 mouse_drags = 0;
88 modal_opens = 0;
89 tool_changes = 0;
90 mode_changes = 0;
94 }
95};
96
101 public:
103
107 void Initialize(const std::string& canvas_id);
108
112 void SetUsageMode(CanvasUsage usage);
113
117 void RecordInteraction(CanvasInteraction interaction,
118 const std::string& details = "");
119
123 void RecordOperation(const std::string& operation_name, double time_ms);
124
128 void UpdateCanvasState(const ImVec2& canvas_size, const ImVec2& content_size,
129 float global_scale, float grid_step, bool enable_grid,
130 bool enable_hex_labels, bool enable_custom_labels);
131
136
140 const std::vector<CanvasUsageStats>& GetUsageHistory() const {
141 return usage_history_;
142 }
143
147 std::string GetUsageModeName(CanvasUsage usage) const;
148
152 ImVec4 GetUsageModeColor(CanvasUsage usage) const;
153
157 std::vector<std::string> GetUsageRecommendations() const;
158
162 std::string ExportUsageReport() const;
163
167 void ClearHistory();
168
172 void StartSession();
173
177 void EndSession();
178
179 private:
180 std::string canvas_id_;
182 std::vector<CanvasUsageStats> usage_history_;
183 std::chrono::steady_clock::time_point last_activity_;
184 std::chrono::steady_clock::time_point session_start_;
185
186 // Interaction history
187 std::vector<std::pair<CanvasInteraction, std::string>> interaction_history_;
188 std::unordered_map<std::string, std::vector<double>> operation_times_;
189
190 // Helper methods
191 void UpdateActiveTime();
192 void UpdateIdleTime();
193 void SaveCurrentStats();
194 double CalculateAverageOperationTime(const std::string& operation_name) const;
195 std::string FormatDuration(const std::chrono::milliseconds& duration) const;
196};
197
202 public:
203 static CanvasUsageManager& Get();
204
208 void RegisterTracker(const std::string& canvas_id,
209 std::shared_ptr<CanvasUsageTracker> tracker);
210
214 std::shared_ptr<CanvasUsageTracker> GetTracker(const std::string& canvas_id);
215
219 const std::unordered_map<std::string, std::shared_ptr<CanvasUsageTracker>>&
221 return trackers_;
222 }
223
228
232 std::string ExportGlobalReport() const;
233
237 void ClearAllTrackers();
238
239 private:
242
243 std::unordered_map<std::string, std::shared_ptr<CanvasUsageTracker>>
245};
246
247} // namespace gui
248} // namespace yaze
249
250#endif // YAZE_APP_GUI_CANVAS_CANVAS_USAGE_TRACKER_H
Global canvas usage tracker manager.
std::unordered_map< std::string, std::shared_ptr< CanvasUsageTracker > > trackers_
static CanvasUsageManager & Get()
std::shared_ptr< CanvasUsageTracker > GetTracker(const std::string &canvas_id)
Get tracker for canvas.
std::string ExportGlobalReport() const
Export global usage report.
CanvasUsageStats GetGlobalStats() const
Get global usage statistics.
void ClearAllTrackers()
Clear all trackers.
const std::unordered_map< std::string, std::shared_ptr< CanvasUsageTracker > > & GetAllTrackers() const
Get all trackers.
void RegisterTracker(const std::string &canvas_id, std::shared_ptr< CanvasUsageTracker > tracker)
Register a canvas tracker.
Canvas usage tracking and analysis system.
void RecordOperation(const std::string &operation_name, double time_ms)
Record operation timing.
std::vector< std::string > GetUsageRecommendations() const
Get usage recommendations.
void SetUsageMode(CanvasUsage usage)
Set the current usage mode.
void UpdateCanvasState(const ImVec2 &canvas_size, const ImVec2 &content_size, float global_scale, float grid_step, bool enable_grid, bool enable_hex_labels, bool enable_custom_labels)
Update canvas state.
std::string ExportUsageReport() const
Export usage report.
void ClearHistory()
Clear usage history.
std::chrono::steady_clock::time_point last_activity_
std::string FormatDuration(const std::chrono::milliseconds &duration) const
std::unordered_map< std::string, std::vector< double > > operation_times_
const CanvasUsageStats & GetCurrentStats() const
Get current usage statistics.
const std::vector< CanvasUsageStats > & GetUsageHistory() const
Get usage history.
double CalculateAverageOperationTime(const std::string &operation_name) const
void RecordInteraction(CanvasInteraction interaction, const std::string &details="")
Record an interaction.
std::vector< std::pair< CanvasInteraction, std::string > > interaction_history_
std::chrono::steady_clock::time_point session_start_
ImVec4 GetUsageModeColor(CanvasUsage usage) const
Get usage mode color for UI.
std::string GetUsageModeName(CanvasUsage usage) const
Get usage mode name.
void Initialize(const std::string &canvas_id)
Initialize the usage tracker.
std::vector< CanvasUsageStats > usage_history_
CanvasUsage
Canvas usage patterns and tracking.
CanvasInteraction
Canvas interaction types.
Canvas usage statistics.
std::chrono::milliseconds total_time
std::chrono::steady_clock::time_point session_start
std::chrono::milliseconds idle_time
std::chrono::milliseconds active_time