yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
wasm_drop_handler.h
Go to the documentation of this file.
1#ifndef YAZE_APP_PLATFORM_WASM_WASM_DROP_HANDLER_H_
2#define YAZE_APP_PLATFORM_WASM_WASM_DROP_HANDLER_H_
3
4#ifdef __EMSCRIPTEN__
5
6#include <functional>
7#include <memory>
8#include <string>
9#include <vector>
10
11#include "absl/status/status.h"
12#include "absl/status/statusor.h"
13
14namespace yaze {
15namespace platform {
16
25class WasmDropHandler {
26 public:
32 using DropCallback = std::function<void(const std::string& filename,
33 const std::vector<uint8_t>& data)>;
34
39 using ErrorCallback = std::function<void(const std::string& error_message)>;
40
45 static WasmDropHandler& GetInstance();
46
54 absl::Status Initialize(const std::string& element_id = "",
55 DropCallback on_drop = nullptr,
56 ErrorCallback on_error = nullptr);
57
62 void SetDropCallback(DropCallback on_drop);
63
68 void SetErrorCallback(ErrorCallback on_error);
69
74 void SetEnabled(bool enabled);
75
80 bool IsEnabled() const { return enabled_; }
81
86 void SetOverlayVisible(bool visible);
87
92 void SetOverlayText(const std::string& text);
93
98 static bool IsSupported();
99
105 static bool IsValidRomFile(const std::string& filename);
106
113 static void HandleDroppedFile(const char* filename, const uint8_t* data,
114 size_t size);
115
120 static void HandleDropError(const char* error_message);
121
125 static void HandleDragEnter();
126
130 static void HandleDragLeave();
131
132 public:
133 ~WasmDropHandler();
134
135 private:
136 // Singleton pattern - private constructor
137 WasmDropHandler();
138
139 // Delete copy constructor and assignment operator
140 WasmDropHandler(const WasmDropHandler&) = delete;
141 WasmDropHandler& operator=(const WasmDropHandler&) = delete;
142
143 // Instance data
144 bool initialized_ = false;
145 bool enabled_ = false;
146 DropCallback drop_callback_;
147 ErrorCallback error_callback_;
148 std::string element_id_;
149 int drag_counter_ = 0; // Track nested drag enter/leave events
150
151 // Static singleton instance
152 static std::unique_ptr<WasmDropHandler> instance_;
153};
154
155} // namespace platform
156} // namespace yaze
157
158// C-style callbacks for JavaScript interop
159extern "C" {
160void yazeHandleDroppedFile(const char* filename, const uint8_t* data,
161 size_t size);
162void yazeHandleDropError(const char* error_message);
163void yazeHandleDragEnter();
164void yazeHandleDragLeave();
165}
166
167#endif // __EMSCRIPTEN__
168
169#endif // YAZE_APP_PLATFORM_WASM_WASM_DROP_HANDLER_H_