Refactor Controller and File Dialog: streamline platform handling, remove redundant parameters, and enhance initialization logic
This commit is contained in:
@@ -7,10 +7,10 @@
|
|||||||
|
|
||||||
#include "absl/status/status.h"
|
#include "absl/status/status.h"
|
||||||
#include "absl/strings/str_format.h"
|
#include "absl/strings/str_format.h"
|
||||||
|
#include "app/core/platform/file_dialog.h"
|
||||||
#include "app/core/platform/font_loader.h"
|
#include "app/core/platform/font_loader.h"
|
||||||
#include "app/editor/editor_manager.h"
|
#include "app/editor/editor_manager.h"
|
||||||
#include "app/gui/style.h"
|
#include "app/gui/style.h"
|
||||||
#include "app/core/platform/file_dialog.h"
|
|
||||||
#include "imgui/backends/imgui_impl_sdl2.h"
|
#include "imgui/backends/imgui_impl_sdl2.h"
|
||||||
#include "imgui/backends/imgui_impl_sdlrenderer2.h"
|
#include "imgui/backends/imgui_impl_sdlrenderer2.h"
|
||||||
#include "imgui/imgui.h"
|
#include "imgui/imgui.h"
|
||||||
@@ -19,26 +19,17 @@ namespace yaze {
|
|||||||
namespace core {
|
namespace core {
|
||||||
|
|
||||||
absl::Status Controller::OnEntry(std::string filename) {
|
absl::Status Controller::OnEntry(std::string filename) {
|
||||||
#if defined(__APPLE__) && defined(__MACH__)
|
|
||||||
#if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
|
|
||||||
platform_ = Platform::kiOS;
|
|
||||||
#elif TARGET_OS_MAC == 1
|
|
||||||
platform_ = Platform::kMacOS;
|
|
||||||
#endif
|
|
||||||
#elif defined(_WIN32)
|
|
||||||
platform_ = Platform::kWindows;
|
|
||||||
#elif defined(__linux__)
|
|
||||||
platform_ = Platform::kLinux;
|
|
||||||
#else
|
|
||||||
platform_ = Platform::kUnknown;
|
|
||||||
#endif
|
|
||||||
RETURN_IF_ERROR(CreateWindow())
|
RETURN_IF_ERROR(CreateWindow())
|
||||||
RETURN_IF_ERROR(CreateRenderer())
|
RETURN_IF_ERROR(CreateRenderer())
|
||||||
RETURN_IF_ERROR(CreateGuiContext())
|
RETURN_IF_ERROR(CreateGuiContext())
|
||||||
RETURN_IF_ERROR(LoadAudioDevice())
|
RETURN_IF_ERROR(LoadAudioDevice())
|
||||||
|
Initialize(filename);
|
||||||
|
return absl::OkStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Controller::Initialize(std::string filename) {
|
||||||
editor_manager_.Initialize(filename);
|
editor_manager_.Initialize(filename);
|
||||||
active_ = true;
|
active_ = true;
|
||||||
return absl::OkStatus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Controller::OnInput() {
|
void Controller::OnInput() {
|
||||||
@@ -49,30 +40,30 @@ void Controller::OnInput() {
|
|||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
ImGui_ImplSDL2_ProcessEvent(&event);
|
ImGui_ImplSDL2_ProcessEvent(&event);
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
case SDL_KEYUP: {
|
case SDL_KEYUP: {
|
||||||
ImGuiIO &io = ImGui::GetIO();
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
io.KeyShift = ((SDL_GetModState() & KMOD_SHIFT) != 0);
|
io.KeyShift = ((SDL_GetModState() & KMOD_SHIFT) != 0);
|
||||||
io.KeyCtrl = ((SDL_GetModState() & KMOD_CTRL) != 0);
|
io.KeyCtrl = ((SDL_GetModState() & KMOD_CTRL) != 0);
|
||||||
io.KeyAlt = ((SDL_GetModState() & KMOD_ALT) != 0);
|
io.KeyAlt = ((SDL_GetModState() & KMOD_ALT) != 0);
|
||||||
io.KeySuper = ((SDL_GetModState() & KMOD_GUI) != 0);
|
io.KeySuper = ((SDL_GetModState() & KMOD_GUI) != 0);
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SDL_WINDOWEVENT:
|
|
||||||
switch (event.window.event) {
|
|
||||||
case SDL_WINDOWEVENT_CLOSE:
|
|
||||||
active_ = false;
|
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_SIZE_CHANGED:
|
}
|
||||||
io.DisplaySize.x = static_cast<float>(event.window.data1);
|
case SDL_WINDOWEVENT:
|
||||||
io.DisplaySize.y = static_cast<float>(event.window.data2);
|
switch (event.window.event) {
|
||||||
|
case SDL_WINDOWEVENT_CLOSE:
|
||||||
|
active_ = false;
|
||||||
|
break;
|
||||||
|
case SDL_WINDOWEVENT_SIZE_CHANGED:
|
||||||
|
io.DisplaySize.x = static_cast<float>(event.window.data1);
|
||||||
|
io.DisplaySize.y = static_cast<float>(event.window.data2);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,12 +144,12 @@ absl::Status Controller::CreateWindow() {
|
|||||||
int screen_height = display_mode.h * 0.8;
|
int screen_height = display_mode.h * 0.8;
|
||||||
|
|
||||||
window_ = std::unique_ptr<SDL_Window, core::SDL_Deleter>(
|
window_ = std::unique_ptr<SDL_Window, core::SDL_Deleter>(
|
||||||
SDL_CreateWindow("Yet Another Zelda3 Editor", // window title
|
SDL_CreateWindow("Yet Another Zelda3 Editor", // window title
|
||||||
SDL_WINDOWPOS_UNDEFINED, // initial x position
|
SDL_WINDOWPOS_UNDEFINED, // initial x position
|
||||||
SDL_WINDOWPOS_UNDEFINED, // initial y position
|
SDL_WINDOWPOS_UNDEFINED, // initial y position
|
||||||
screen_width, // width, in pixels
|
screen_width, // width, in pixels
|
||||||
screen_height, // height, in pixels
|
screen_height, // height, in pixels
|
||||||
SDL_WINDOW_RESIZABLE),
|
SDL_WINDOW_RESIZABLE),
|
||||||
core::SDL_Deleter());
|
core::SDL_Deleter());
|
||||||
if (window_ == nullptr) {
|
if (window_ == nullptr) {
|
||||||
return absl::InternalError(
|
return absl::InternalError(
|
||||||
@@ -208,7 +199,7 @@ absl::Status Controller::LoadAudioDevice() {
|
|||||||
want.format = AUDIO_S16;
|
want.format = AUDIO_S16;
|
||||||
want.channels = 2;
|
want.channels = 2;
|
||||||
want.samples = 2048;
|
want.samples = 2048;
|
||||||
want.callback = NULL; // Uses the queue
|
want.callback = NULL; // Uses the queue
|
||||||
audio_device_ = SDL_OpenAudioDevice(NULL, 0, &want, &have, 0);
|
audio_device_ = SDL_OpenAudioDevice(NULL, 0, &want, &have, 0);
|
||||||
if (audio_device_ == 0) {
|
if (audio_device_ == 0) {
|
||||||
return absl::InternalError(
|
return absl::InternalError(
|
||||||
@@ -225,7 +216,7 @@ absl::Status Controller::LoadAudioDevice() {
|
|||||||
absl::Status Controller::LoadConfigFiles() {
|
absl::Status Controller::LoadConfigFiles() {
|
||||||
// Create and load a dotfile for the application
|
// Create and load a dotfile for the application
|
||||||
// This will store the user's preferences and settings
|
// This will store the user's preferences and settings
|
||||||
std::string config_directory = GetConfigDirectory(platform_);
|
std::string config_directory = GetConfigDirectory();
|
||||||
|
|
||||||
// Create the directory if it doesn't exist
|
// Create the directory if it doesn't exist
|
||||||
if (!std::filesystem::exists(config_directory)) {
|
if (!std::filesystem::exists(config_directory)) {
|
||||||
@@ -250,5 +241,5 @@ absl::Status Controller::LoadConfigFiles() {
|
|||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace core
|
} // namespace core
|
||||||
} // namespace yaze
|
} // namespace yaze
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include "absl/status/status.h"
|
#include "absl/status/status.h"
|
||||||
#include "app/core/platform/renderer.h"
|
|
||||||
#include "app/core/platform/file_dialog.h"
|
#include "app/core/platform/file_dialog.h"
|
||||||
|
#include "app/core/platform/renderer.h"
|
||||||
#include "app/editor/editor.h"
|
#include "app/editor/editor.h"
|
||||||
#include "app/editor/editor_manager.h"
|
#include "app/editor/editor_manager.h"
|
||||||
#include "imgui/backends/imgui_impl_sdl2.h"
|
#include "imgui/backends/imgui_impl_sdl2.h"
|
||||||
@@ -30,6 +30,7 @@ class Controller {
|
|||||||
public:
|
public:
|
||||||
bool IsActive() const { return active_; }
|
bool IsActive() const { return active_; }
|
||||||
absl::Status OnEntry(std::string filename = "");
|
absl::Status OnEntry(std::string filename = "");
|
||||||
|
void Initialize(std::string filename = "");
|
||||||
void OnInput();
|
void OnInput();
|
||||||
absl::Status OnLoad();
|
absl::Status OnLoad();
|
||||||
absl::Status OnTestLoad();
|
absl::Status OnTestLoad();
|
||||||
@@ -43,13 +44,6 @@ class Controller {
|
|||||||
absl::Status LoadAudioDevice();
|
absl::Status LoadAudioDevice();
|
||||||
absl::Status LoadConfigFiles();
|
absl::Status LoadConfigFiles();
|
||||||
|
|
||||||
void SetupScreen(std::string filename = "") {
|
|
||||||
editor_manager_.Initialize(filename);
|
|
||||||
}
|
|
||||||
auto editor_manager() -> editor::EditorManager & { return editor_manager_; }
|
|
||||||
auto renderer() -> SDL_Renderer * {
|
|
||||||
return Renderer::GetInstance().renderer();
|
|
||||||
}
|
|
||||||
auto window() -> SDL_Window * { return window_.get(); }
|
auto window() -> SDL_Window * { return window_.get(); }
|
||||||
void init_test_editor(editor::Editor *editor) { test_editor_ = editor; }
|
void init_test_editor(editor::Editor *editor) { test_editor_ = editor; }
|
||||||
void set_active(bool active) { active_ = active; }
|
void set_active(bool active) { active_ = active; }
|
||||||
@@ -59,7 +53,6 @@ class Controller {
|
|||||||
friend int ::main(int argc, char **argv);
|
friend int ::main(int argc, char **argv);
|
||||||
|
|
||||||
bool active_ = false;
|
bool active_ = false;
|
||||||
Platform platform_ = Platform::kUnknown;
|
|
||||||
editor::Editor *test_editor_ = nullptr;
|
editor::Editor *test_editor_ = nullptr;
|
||||||
editor::EditorManager editor_manager_;
|
editor::EditorManager editor_manager_;
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ std::string LoadConfigFile(const std::string &filename) {
|
|||||||
#else
|
#else
|
||||||
platform = Platform::kLinux;
|
platform = Platform::kLinux;
|
||||||
#endif
|
#endif
|
||||||
std::string filepath = GetConfigDirectory(platform) + "/" + filename;
|
std::string filepath = GetConfigDirectory() + "/" + filename;
|
||||||
std::ifstream file(filepath);
|
std::ifstream file(filepath);
|
||||||
if (file.is_open()) {
|
if (file.is_open()) {
|
||||||
std::stringstream buffer;
|
std::stringstream buffer;
|
||||||
@@ -67,9 +67,8 @@ std::string LoadConfigFile(const std::string &filename) {
|
|||||||
return contents;
|
return contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SaveFile(const std::string &filename, const std::string &contents,
|
void SaveFile(const std::string &filename, const std::string &contents) {
|
||||||
Platform platform) {
|
std::string filepath = GetConfigDirectory() + "/" + filename;
|
||||||
std::string filepath = GetConfigDirectory(platform) + "/" + filename;
|
|
||||||
std::ofstream file(filepath);
|
std::ofstream file(filepath);
|
||||||
if (file.is_open()) {
|
if (file.is_open()) {
|
||||||
file << contents;
|
file << contents;
|
||||||
@@ -77,8 +76,22 @@ void SaveFile(const std::string &filename, const std::string &contents,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GetConfigDirectory(Platform platform) {
|
std::string GetConfigDirectory() {
|
||||||
std::string config_directory = ".yaze";
|
std::string config_directory = ".yaze";
|
||||||
|
Platform platform;
|
||||||
|
#if defined(__APPLE__) && defined(__MACH__)
|
||||||
|
#if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
|
||||||
|
platform = Platform::kiOS;
|
||||||
|
#elif TARGET_OS_MAC == 1
|
||||||
|
platform = Platform::kMacOS;
|
||||||
|
#endif
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
platform = Platform::kWindows;
|
||||||
|
#elif defined(__linux__)
|
||||||
|
platform = Platform::kLinux;
|
||||||
|
#else
|
||||||
|
platform = Platform::kUnknown;
|
||||||
|
#endif
|
||||||
switch (platform) {
|
switch (platform) {
|
||||||
case Platform::kWindows:
|
case Platform::kWindows:
|
||||||
config_directory = "~/AppData/Roaming/yaze";
|
config_directory = "~/AppData/Roaming/yaze";
|
||||||
|
|||||||
@@ -38,10 +38,8 @@ std::string GetFileExtension(const std::string &filename);
|
|||||||
std::string GetFileName(const std::string &filename);
|
std::string GetFileName(const std::string &filename);
|
||||||
std::string LoadFile(const std::string &filename);
|
std::string LoadFile(const std::string &filename);
|
||||||
std::string LoadConfigFile(const std::string &filename);
|
std::string LoadConfigFile(const std::string &filename);
|
||||||
std::string GetConfigDirectory(Platform platform);
|
std::string GetConfigDirectory();
|
||||||
|
void SaveFile(const std::string &filename, const std::string &data);
|
||||||
void SaveFile(const std::string &filename, const std::string &data,
|
|
||||||
Platform platform);
|
|
||||||
|
|
||||||
} // namespace core
|
} // namespace core
|
||||||
} // namespace yaze
|
} // namespace yaze
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
#ifndef YAZE_APP_GUI_ZEML_H
|
#ifndef YAZE_APP_GUI_ZEML_H
|
||||||
#define YAZE_APP_GUI_ZEML_H
|
#define YAZE_APP_GUI_ZEML_H
|
||||||
|
|
||||||
#include "imgui/imgui.h"
|
|
||||||
|
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <map>
|
#include <map>
|
||||||
@@ -10,6 +8,8 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "imgui/imgui.h"
|
||||||
|
|
||||||
namespace yaze {
|
namespace yaze {
|
||||||
namespace gui {
|
namespace gui {
|
||||||
|
|
||||||
@@ -163,12 +163,6 @@ void BindSelectable(Node* node, bool* selected, std::function<void()> callback);
|
|||||||
*/
|
*/
|
||||||
WidgetType MapType(const std::string& type);
|
WidgetType MapType(const std::string& type);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Parse a zeml definition
|
|
||||||
*/
|
|
||||||
void ParseDefinitions(const std::vector<Token>& tokens, size_t& index,
|
|
||||||
std::map<std::string, Node>& definitions);
|
|
||||||
|
|
||||||
void ParseFlags(const WidgetType& type, const std::string& flags,
|
void ParseFlags(const WidgetType& type, const std::string& flags,
|
||||||
WidgetAttributes& flags_ptr);
|
WidgetAttributes& flags_ptr);
|
||||||
|
|
||||||
@@ -206,7 +200,6 @@ std::string LoadFile(const std::string& filename);
|
|||||||
|
|
||||||
} // namespace zeml
|
} // namespace zeml
|
||||||
} // namespace gui
|
} // namespace gui
|
||||||
|
|
||||||
} // namespace yaze
|
} // namespace yaze
|
||||||
|
|
||||||
#endif // YAZE_APP_GUI_YAZON_H_
|
#endif // YAZE_APP_GUI_ZEML_H
|
||||||
|
|||||||
@@ -46,7 +46,17 @@
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
_controller = new yaze::app::core::Controller();
|
_controller = new yaze::core::Controller();
|
||||||
|
|
||||||
|
// Setup Dear ImGui context
|
||||||
|
IMGUI_CHECKVERSION();
|
||||||
|
ImGui::CreateContext();
|
||||||
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
|
(void)io;
|
||||||
|
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls
|
||||||
|
io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls
|
||||||
|
|
||||||
|
yaze::gui::ColorsYaze();
|
||||||
|
|
||||||
SDL_SetMainReady();
|
SDL_SetMainReady();
|
||||||
SDL_iOSSetEventPump(SDL_TRUE);
|
SDL_iOSSetEventPump(SDL_TRUE);
|
||||||
@@ -76,23 +86,14 @@
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup Dear ImGui context
|
ImGui_ImplSDL2_InitForSDLRenderer(_controller->window(),
|
||||||
IMGUI_CHECKVERSION();
|
core::Renderer::GetInstance().renderer());
|
||||||
ImGui::CreateContext();
|
ImGui_ImplSDLRenderer2_Init(core::Renderer::GetInstance().renderer());
|
||||||
ImGuiIO &io = ImGui::GetIO();
|
|
||||||
(void)io;
|
|
||||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls
|
|
||||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls
|
|
||||||
|
|
||||||
yaze::app::gui::ColorsYaze();
|
|
||||||
|
|
||||||
ImGui_ImplSDL2_InitForSDLRenderer(_controller->window(), _controller->renderer());
|
|
||||||
ImGui_ImplSDLRenderer2_Init(_controller->renderer());
|
|
||||||
|
|
||||||
if (!_controller->LoadFontFamilies().ok()) {
|
if (!_controller->LoadFontFamilies().ok()) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
_controller->SetupScreen(rom_filename);
|
_controller->Initialize("");
|
||||||
_controller->set_active(true);
|
_controller->set_active(true);
|
||||||
|
|
||||||
_hoverGestureRecognizer =
|
_hoverGestureRecognizer =
|
||||||
|
|||||||
Reference in New Issue
Block a user