yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
canvas_automation_service.h
Go to the documentation of this file.
1#ifndef YAZE_APP_CORE_SERVICE_CANVAS_AUTOMATION_SERVICE_H_
2#define YAZE_APP_CORE_SERVICE_CANVAS_AUTOMATION_SERVICE_H_
3
5
6#include "grpcpp/impl/service_type.h"
7#ifdef YAZE_WITH_GRPC
8
9#include <memory>
10#include <string>
11#include <unordered_map>
12
13#include "absl/status/status.h"
15
16namespace yaze {
17namespace editor {
18class OverworldEditor;
19}
20
21namespace proto {
22// Forward declare proto types
23class SetTileRequest;
24class SetTileResponse;
25class GetTileRequest;
26class GetTileResponse;
27class SetTilesRequest;
28class SetTilesResponse;
29class SelectTileRequest;
30class SelectTileResponse;
31class SelectTileRectRequest;
32class SelectTileRectResponse;
33class GetSelectionRequest;
34class GetSelectionResponse;
35class ClearSelectionRequest;
36class ClearSelectionResponse;
37class ScrollToTileRequest;
38class ScrollToTileResponse;
39class CenterOnRequest;
40class CenterOnResponse;
41class SetZoomRequest;
42class SetZoomResponse;
43class GetZoomRequest;
44class GetZoomResponse;
45class GetDimensionsRequest;
46class GetDimensionsResponse;
47class GetVisibleRegionRequest;
48class GetVisibleRegionResponse;
49class IsTileVisibleRequest;
50class IsTileVisibleResponse;
51class ScreenToTileRequest;
52class ScreenToTileResponse;
53} // namespace proto
54
64class CanvasAutomationServiceImpl {
65 public:
66 CanvasAutomationServiceImpl() = default;
67
68 // Register a canvas for automation
69 void RegisterCanvas(const std::string& canvas_id, gui::Canvas* canvas);
70
71 // Register an overworld editor (for tile get/set callbacks)
72 void RegisterOverworldEditor(const std::string& canvas_id,
73 editor::OverworldEditor* editor);
74
75 // RPC method implementations
76 absl::Status SetTile(const proto::SetTileRequest* request,
77 proto::SetTileResponse* response);
78
79 absl::Status GetTile(const proto::GetTileRequest* request,
80 proto::GetTileResponse* response);
81
82 absl::Status SetTiles(const proto::SetTilesRequest* request,
83 proto::SetTilesResponse* response);
84
85 absl::Status SelectTile(const proto::SelectTileRequest* request,
86 proto::SelectTileResponse* response);
87
88 absl::Status SelectTileRect(const proto::SelectTileRectRequest* request,
89 proto::SelectTileRectResponse* response);
90
91 absl::Status GetSelection(const proto::GetSelectionRequest* request,
92 proto::GetSelectionResponse* response);
93
94 absl::Status ClearSelection(const proto::ClearSelectionRequest* request,
95 proto::ClearSelectionResponse* response);
96
97 absl::Status ScrollToTile(const proto::ScrollToTileRequest* request,
98 proto::ScrollToTileResponse* response);
99
100 absl::Status CenterOn(const proto::CenterOnRequest* request,
101 proto::CenterOnResponse* response);
102
103 absl::Status SetZoom(const proto::SetZoomRequest* request,
104 proto::SetZoomResponse* response);
105
106 absl::Status GetZoom(const proto::GetZoomRequest* request,
107 proto::GetZoomResponse* response);
108
109 absl::Status GetDimensions(const proto::GetDimensionsRequest* request,
110 proto::GetDimensionsResponse* response);
111
112 absl::Status GetVisibleRegion(const proto::GetVisibleRegionRequest* request,
113 proto::GetVisibleRegionResponse* response);
114
115 absl::Status IsTileVisible(const proto::IsTileVisibleRequest* request,
116 proto::IsTileVisibleResponse* response);
117
118 // Coordinate Mapping Operations
119 absl::Status ScreenToTile(const proto::ScreenToTileRequest* request,
120 proto::ScreenToTileResponse* response);
121
122 private:
123 gui::Canvas* GetCanvas(const std::string& canvas_id);
124 editor::OverworldEditor* GetOverworldEditor(const std::string& canvas_id);
125
126 // Canvas registry
127 std::unordered_map<std::string, gui::Canvas*> canvases_;
128
129 // Editor registry (for tile callbacks)
130 std::unordered_map<std::string, editor::OverworldEditor*> overworld_editors_;
131};
132
143std::unique_ptr<grpc::Service> CreateCanvasAutomationServiceGrpc(
144 CanvasAutomationServiceImpl* impl);
145
146} // namespace yaze
147
148#endif // YAZE_WITH_GRPC
149#endif // YAZE_APP_CORE_SERVICE_CANVAS_AUTOMATION_SERVICE_H_
void RegisterCanvas(const char *canvas_name, const std::string &description="")
Register a canvas widget after BeginChild or similar.