summaryrefslogtreecommitdiff
path: root/app/include/turns
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2024-07-16 13:02:46 +0200
committerFelix Morgner <felix.morgner@gmail.com>2024-07-16 13:02:46 +0200
commit44d2614a260d2b029a79c59ee7fdd45e1958feb8 (patch)
treea39e043acf3b9f86f570b2b376d61dd3b5d68124 /app/include/turns
parent5bb826fa63b2b2d6f7b8bca354fa4a1606781dc3 (diff)
downloadturns-44d2614a260d2b029a79c59ee7fdd45e1958feb8.tar.xz
turns-44d2614a260d2b029a79c59ee7fdd45e1958feb8.zip
app: extract turn order view
Diffstat (limited to 'app/include/turns')
-rw-r--r--app/include/turns/app/application.hpp2
-rw-r--r--app/include/turns/app/widgets/participant_row.hpp5
-rw-r--r--app/include/turns/app/widgets/turn_order_view.hpp48
-rw-r--r--app/include/turns/app/windows/main.hpp7
4 files changed, 54 insertions, 8 deletions
diff --git a/app/include/turns/app/application.hpp b/app/include/turns/app/application.hpp
index 81fe333..6506dd7 100644
--- a/app/include/turns/app/application.hpp
+++ b/app/include/turns/app/application.hpp
@@ -27,6 +27,8 @@ namespace turns::app
auto on_shutdown() -> void;
auto on_startup() -> void;
+ auto register_derived_widgets() -> void;
+
AdwApplication * m_adw;
Glib::RefPtr<Gtk::Application> m_application;
windows::main * m_main;
diff --git a/app/include/turns/app/widgets/participant_row.hpp b/app/include/turns/app/widgets/participant_row.hpp
index a8f225f..79de1e9 100644
--- a/app/include/turns/app/widgets/participant_row.hpp
+++ b/app/include/turns/app/widgets/participant_row.hpp
@@ -28,9 +28,6 @@ namespace turns::app::widgets
participant_row(Glib::RefPtr<domain::participant> participant);
- auto set_subtitle(Glib::ustring const & value) -> void;
- auto set_title(Glib::ustring const & value) -> void;
-
private:
auto handle_delete() -> void;
auto handle_edit() -> void;
@@ -41,7 +38,9 @@ namespace turns::app::widgets
Gtk::Label * m_title;
Gtk::ToggleButton * m_toggle_defeated;
+ Glib::RefPtr<Glib::Binding> m_subtitle_label{};
Glib::RefPtr<Glib::Binding> m_subtitle_visibility{};
+ Glib::RefPtr<Glib::Binding> m_title_label{};
Glib::RefPtr<Glib::Binding> m_title_visibility{};
Glib::RefPtr<Glib::Binding> m_toggle_defeated_icon{};
};
diff --git a/app/include/turns/app/widgets/turn_order_view.hpp b/app/include/turns/app/widgets/turn_order_view.hpp
new file mode 100644
index 0000000..c55483a
--- /dev/null
+++ b/app/include/turns/app/widgets/turn_order_view.hpp
@@ -0,0 +1,48 @@
+#ifndef TURNS_APP_WIDGETS_TURN_ORDER_VIEW_HPP
+#define TURNS_APP_WIDGETS_TURN_ORDER_VIEW_HPP
+
+#include "turns/app/widgets/template_widget.hpp"
+#include "turns/domain/turn_order.hpp"
+#include "turns/domain/participant.hpp"
+#include "turns/domain/disposition.hpp"
+
+#include <array>
+
+#include <glibmm/object.h>
+#include <glibmm/propertyproxy.h>
+#include <glibmm/refptr.h>
+#include <gtkmm/listbox.h>
+#include <gtkmm/scrolledwindow.h>
+#include <gtkmm/widget.h>
+#include <glibmm/ustring.h>
+
+namespace turns::app::widgets
+{
+ struct turn_order_view : template_widget<turn_order_view, Gtk::ScrolledWindow>
+ {
+ auto constexpr inline static children = std::array{
+ "view",
+ };
+
+ turn_order_view();
+
+ auto append(Glib::ustring name, float priority, domain::disposition disposition) -> void;
+ auto clear() -> void;
+ auto get(std::size_t index) -> Glib::RefPtr<domain::participant>;
+ auto remove(std::size_t index) -> void;
+
+
+ auto get_n_items() const noexcept -> unsigned int;
+ auto property_n_items() const -> Glib::PropertyProxy_ReadOnly<unsigned int>;
+
+ private:
+ auto handle_create_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *;
+
+ Glib::RefPtr<domain::turn_order> m_model;
+ Gtk::ListBox * m_view;
+
+ Glib::PropertyProxy_ReadOnly<unsigned int> m_n_items;
+ };
+} // namespace turns::app::widgets
+
+#endif \ No newline at end of file
diff --git a/app/include/turns/app/windows/main.hpp b/app/include/turns/app/windows/main.hpp
index 694876e..5e13cf0 100644
--- a/app/include/turns/app/windows/main.hpp
+++ b/app/include/turns/app/windows/main.hpp
@@ -2,6 +2,7 @@
#define TURNS_APP_WINDOWS_MAIN_WINDOW_HPP
#include "turns/domain/turn_order.hpp"
+#include "turns/app/widgets/turn_order_view.hpp"
#include <adwaita.h>
#include <giomm/simpleaction.h>
@@ -25,19 +26,15 @@ namespace turns::app::windows
main(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder);
private:
- auto handle_create_list_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *;
auto handle_add_participant() -> void;
auto handle_clear() -> void;
auto handle_edit_participant(Glib::VariantBase param) -> void;
AdwApplicationWindow * m_adw;
Gtk::Widget * m_empty;
- Gtk::ListBox * m_participant_list;
Gtk::Stack * m_stack;
AdwWindowTitle * m_title;
- Gtk::ScrolledWindow * m_turn_order;
-
- Glib::RefPtr<domain::turn_order> m_participant_list_data;
+ widgets::turn_order_view * m_turn_order;
Glib::PropertyProxy<Glib::ustring> m_subtitle;