diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2024-07-26 20:16:33 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2024-07-26 20:16:33 +0200 |
| commit | 08a8362a39a7b71c087f165a1079b5439c52d35e (patch) | |
| tree | dde0b54f29e0737b7cb061746c3183164c653997 /ui/src/windows/tracker/event_handlers.cpp | |
| parent | 7a093920809394f7f31b75c444fe6009d1de7005 (diff) | |
| download | turns-08a8362a39a7b71c087f165a1079b5439c52d35e.tar.xz turns-08a8362a39a7b71c087f165a1079b5439c52d35e.zip | |
turns: perform source cleanup
Diffstat (limited to 'ui/src/windows/tracker/event_handlers.cpp')
| -rw-r--r-- | ui/src/windows/tracker/event_handlers.cpp | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/ui/src/windows/tracker/event_handlers.cpp b/ui/src/windows/tracker/event_handlers.cpp new file mode 100644 index 0000000..3fc1c53 --- /dev/null +++ b/ui/src/windows/tracker/event_handlers.cpp @@ -0,0 +1,100 @@ +#include "turns/lang/messages.hpp" +#include "turns/ui/windows/tracker.hpp" + +#include <sigc++/functors/mem_fun.h> + +#include <glibmm/i18n.h> +#include <glibmm/refptr.h> + +#include <giomm/asyncresult.h> +#include <giomm/error.h> + +#include <gtkmm/filedialog.h> + +#include <adwaita.h> +#include <nlohmann/json.hpp> + +#include <cstddef> +#include <exception> +#include <format> +#include <string_view> + +namespace turns::ui::windows +{ + + 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); + } + +} // namespace turns::ui::windows
\ No newline at end of file |
