summaryrefslogtreecommitdiff
path: root/ui/src/tracker/event_handlers.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2025-04-29 16:33:32 +0200
committerFelix Morgner <felix.morgner@gmail.com>2025-04-29 16:33:32 +0200
commit3ff5bd46952144926d9bd9beedf50023a51913ee (patch)
tree2c579fe13bbb5cc90f8f50e7af35218c98e123d5 /ui/src/tracker/event_handlers.cpp
parent873bf396b904ce477a238f22d1891e1b03f24eff (diff)
downloadturns-3ff5bd46952144926d9bd9beedf50023a51913ee.tar.xz
turns-3ff5bd46952144926d9bd9beedf50023a51913ee.zip
ui: flatten namespace hierarchy
Diffstat (limited to 'ui/src/tracker/event_handlers.cpp')
-rw-r--r--ui/src/tracker/event_handlers.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/ui/src/tracker/event_handlers.cpp b/ui/src/tracker/event_handlers.cpp
new file mode 100644
index 0000000..80664e4
--- /dev/null
+++ b/ui/src/tracker/event_handlers.cpp
@@ -0,0 +1,105 @@
+#include "turns/lang/messages.hpp"
+#include "turns/ui/tracker.hpp"
+
+#include <sigc++/functors/mem_fun.h>
+
+#include <glibmm/i18n.h>
+#include <glibmm/refptr.h>
+#include <glibmm/ustring.h>
+
+#include <giomm/asyncresult.h>
+#include <giomm/error.h>
+
+#include <gtkmm/filedialog.h>
+
+#include <nlohmann/json.hpp>
+
+#include <cstddef>
+#include <exception>
+#include <format>
+#include <string_view>
+
+namespace turns::ui
+{
+
+ auto tracker::on_load_content_done(Glib::RefPtr<Gio::AsyncResult> result) -> void
+ {
+ set_sensitive();
+ char * data{};
+ auto size = std::size_t{};
+
+ try
+ {
+ if (!m_file->load_contents_finish(result, data, size, m_file_etag))
+ {
+ m_file.reset();
+ m_file_etag.clear();
+ return;
+ }
+
+ m_turn_order->load(nlohmann::json::parse(std::string_view{data, size}));
+ }
+ catch (std::exception const & e)
+ {
+ return show_error(e);
+ }
+
+ auto name = m_file->get_basename();
+ show_toast(std::vformat(_(lang::successfully_opened_format), std::make_format_args(name)));
+ set_title(std::format("{} - {}", _(lang::turns), name));
+ }
+
+ auto tracker::on_replace_content_done(Glib::RefPtr<Gio::AsyncResult> result) -> void
+ {
+ set_sensitive();
+
+ try
+ {
+ m_file->replace_contents_finish(result, m_file_etag);
+ }
+ catch (Gio::Error const & e)
+ {
+ return show_error(e);
+ }
+
+ auto name = m_file->get_basename();
+ show_toast(std::vformat(_(lang::successfully_saved_format), std::make_format_args(name)));
+ set_title(std::format("{} - {}", _(lang::turns), name));
+ }
+
+ auto tracker::on_open_response(Glib::RefPtr<Gio::AsyncResult> result, Glib::RefPtr<Gtk::FileDialog> dialog) -> void
+ {
+ try
+ {
+ m_file = dialog->open_finish(result);
+ }
+ catch (std::exception const & e)
+ {
+ return show_error(e);
+ }
+
+ m_file->load_contents_async(sigc::mem_fun(*this, &tracker::on_load_content_done));
+ set_sensitive(false);
+ }
+
+ auto tracker::on_save_response(Glib::RefPtr<Gio::AsyncResult> result, Glib::RefPtr<Gtk::FileDialog> dialog) -> void
+ {
+ try
+ {
+ m_file = dialog->save_finish(result);
+ }
+ catch (std::exception const & e)
+ {
+ show_error(e);
+ }
+
+ start_replace_content();
+ set_sensitive(false);
+ }
+
+ auto tracker::on_settings_changed(Glib::ustring) -> void
+ {
+ update_colors();
+ }
+
+} // namespace turns::ui \ No newline at end of file