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 <string>
5#include <vector>
6#include <unordered_map>
7#include <chrono>
8#include <memory>
9#include "imgui/imgui.h"
10
11namespace yaze {
12namespace gui {
13namespace canvas {
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 kUnknown // Unknown or mixed usage
28};
29
44
50 std::chrono::steady_clock::time_point session_start;
51 std::chrono::milliseconds total_time{0};
52 std::chrono::milliseconds active_time{0};
53 std::chrono::milliseconds idle_time{0};
54
55 // Interaction counts
56 int mouse_clicks = 0;
57 int mouse_drags = 0;
59 int modal_opens = 0;
60 int tool_changes = 0;
61 int mode_changes = 0;
62
63 // Performance metrics
67
68 // Canvas state
69 ImVec2 canvas_size = ImVec2(0, 0);
70 ImVec2 content_size = ImVec2(0, 0);
71 float global_scale = 1.0F;
72 float grid_step = 32.0F;
73 bool enable_grid = true;
74 bool enable_hex_labels = false;
76
77 void Reset() {
79 session_start = std::chrono::steady_clock::now();
80 total_time = std::chrono::milliseconds{0};
81 active_time = std::chrono::milliseconds{0};
82 idle_time = std::chrono::milliseconds{0};
83 mouse_clicks = 0;
84 mouse_drags = 0;
86 modal_opens = 0;
87 tool_changes = 0;
88 mode_changes = 0;
92 }
93};
94
99 public:
101
105 void Initialize(const std::string& canvas_id);
106
110 void SetUsageMode(CanvasUsage usage);
111
115 void RecordInteraction(CanvasInteraction interaction,
116 const std::string& details = "");
117
121 void RecordOperation(const std::string& operation_name,
122 double time_ms);
123
127 void UpdateCanvasState(const ImVec2& canvas_size,
128 const ImVec2& content_size,
129 float global_scale,
130 float grid_step,
131 bool enable_grid,
132 bool enable_hex_labels,
133 bool enable_custom_labels);
134
139
143 const std::vector<CanvasUsageStats>& GetUsageHistory() const { return usage_history_; }
144
148 std::string GetUsageModeName(CanvasUsage usage) const;
149
153 ImVec4 GetUsageModeColor(CanvasUsage usage) const;
154
158 std::vector<std::string> GetUsageRecommendations() const;
159
163 std::string ExportUsageReport() const;
164
168 void ClearHistory();
169
173 void StartSession();
174
178 void EndSession();
179
180 private:
181 std::string canvas_id_;
183 std::vector<CanvasUsageStats> usage_history_;
184 std::chrono::steady_clock::time_point last_activity_;
185 std::chrono::steady_clock::time_point session_start_;
186
187 // Interaction history
188 std::vector<std::pair<CanvasInteraction, std::string>> interaction_history_;
189 std::unordered_map<std::string, std::vector<double>> operation_times_;
190
191 // Helper methods
192 void UpdateActiveTime();
193 void UpdateIdleTime();
194 void SaveCurrentStats();
195 double CalculateAverageOperationTime(const std::string& operation_name) const;
196 std::string FormatDuration(const std::chrono::milliseconds& duration) const;
197};
198
203 public:
204 static CanvasUsageManager& Get();
205
209 void RegisterTracker(const std::string& canvas_id,
210 std::shared_ptr<CanvasUsageTracker> tracker);
211
215 std::shared_ptr<CanvasUsageTracker> GetTracker(const std::string& canvas_id);
216
220 const std::unordered_map<std::string, std::shared_ptr<CanvasUsageTracker>>&
221 GetAllTrackers() const { return trackers_; }
222
227
231 std::string ExportGlobalReport() const;
232
236 void ClearAllTrackers();
237
238 private:
241
242 std::unordered_map<std::string, std::shared_ptr<CanvasUsageTracker>> trackers_;
243};
244
245} // namespace canvas
246} // namespace gui
247} // namespace yaze
248
249#endif // YAZE_APP_GUI_CANVAS_CANVAS_USAGE_TRACKER_H
Global canvas usage tracker manager.
std::unordered_map< std::string, std::shared_ptr< CanvasUsageTracker > > trackers_
void RegisterTracker(const std::string &canvas_id, std::shared_ptr< CanvasUsageTracker > tracker)
Register a canvas tracker.
const std::unordered_map< std::string, std::shared_ptr< CanvasUsageTracker > > & GetAllTrackers() const
Get all trackers.
std::string ExportGlobalReport() const
Export global usage report.
CanvasUsageStats GetGlobalStats() const
Get global usage statistics.
std::shared_ptr< CanvasUsageTracker > GetTracker(const std::string &canvas_id)
Get tracker for canvas.
Canvas usage tracking and analysis system.
std::chrono::steady_clock::time_point session_start_
std::vector< CanvasUsageStats > usage_history_
std::vector< std::string > GetUsageRecommendations() const
Get usage recommendations.
std::unordered_map< std::string, std::vector< double > > operation_times_
std::chrono::steady_clock::time_point last_activity_
std::string FormatDuration(const std::chrono::milliseconds &duration) const
std::vector< std::pair< CanvasInteraction, std::string > > interaction_history_
void RecordInteraction(CanvasInteraction interaction, const std::string &details="")
Record an interaction.
double CalculateAverageOperationTime(const std::string &operation_name) const
const CanvasUsageStats & GetCurrentStats() const
Get current usage statistics.
const std::vector< CanvasUsageStats > & GetUsageHistory() const
Get usage history.
void SetUsageMode(CanvasUsage usage)
Set the current usage mode.
std::string ExportUsageReport() const
Export usage report.
std::string GetUsageModeName(CanvasUsage usage) const
Get usage mode name.
void Initialize(const std::string &canvas_id)
Initialize the usage tracker.
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.
void RecordOperation(const std::string &operation_name, double time_ms)
Record operation timing.
ImVec4 GetUsageModeColor(CanvasUsage usage) const
Get usage mode color for UI.
CanvasUsage
Canvas usage patterns and tracking.
CanvasInteraction
Canvas interaction types.
Main namespace for the application.
std::chrono::steady_clock::time_point session_start