summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/include/turns/core/turn_order.hpp3
-rw-r--r--core/src/turn_order.cpp13
-rw-r--r--ui/include/turns/ui/widgets/turn_order_view.hpp9
-rw-r--r--ui/res/ui.cmb41
-rw-r--r--ui/src/widgets/turn_order_view.cpp14
5 files changed, 57 insertions, 23 deletions
diff --git a/core/include/turns/core/turn_order.hpp b/core/include/turns/core/turn_order.hpp
index 59cab84..59556bb 100644
--- a/core/include/turns/core/turn_order.hpp
+++ b/core/include/turns/core/turn_order.hpp
@@ -30,6 +30,7 @@ namespace turns::core
using has_next_type = bool;
using has_previous_type = bool;
using is_running_type = bool;
+ using progress_type = double;
using round_number_type = unsigned int;
auto static constexpr invalid_participant_index = std::numeric_limits<active_participant_type>::max();
@@ -45,6 +46,7 @@ namespace turns::core
auto has_next() const -> Glib::PropertyProxy_ReadOnly<has_next_type>;
auto has_previous() const -> Glib::PropertyProxy_ReadOnly<has_previous_type>;
auto is_running() const -> Glib::PropertyProxy_ReadOnly<is_running_type>;
+ auto progress() const -> Glib::PropertyProxy_ReadOnly<progress_type>;
auto round_number() const -> Glib::PropertyProxy_ReadOnly<round_number_type>;
/** Element Modifications */
@@ -77,6 +79,7 @@ namespace turns::core
Glib::Property<has_previous_type> m_has_previous{*this, "has-previous", false};
Glib::Property<is_empty_type> m_is_empty{*this, "is-empty", true};
Glib::Property<is_running_type> m_is_running{*this, "is-running", false};
+ Glib::Property<progress_type> m_progress{*this, "progress", 0.0};
Glib::Property<round_number_type> m_round_number{*this, "round-number", invalid_round_number};
};
diff --git a/core/src/turn_order.cpp b/core/src/turn_order.cpp
index 234f394..835baab 100644
--- a/core/src/turn_order.cpp
+++ b/core/src/turn_order.cpp
@@ -56,6 +56,11 @@ namespace turns::core
return m_is_running.get_proxy();
}
+ auto turn_order::progress() const -> Glib::PropertyProxy_ReadOnly<progress_type>
+ {
+ return m_progress.get_proxy();
+ }
+
auto turn_order::round_number() const -> Glib::PropertyProxy_ReadOnly<round_number_type>
{
return m_round_number.get_proxy();
@@ -85,6 +90,7 @@ namespace turns::core
m_has_previous = false;
m_active.reset();
m_round_number = invalid_round_number;
+ m_progress = 0;
auto old_size = get_n_items();
m_data.clear();
@@ -100,6 +106,8 @@ namespace turns::core
m_data[old_active]->is_active() = false;
m_data[*m_active]->is_active() = true;
+ m_progress = (static_cast<float>(*m_active) + 1) / get_n_items();
+
if (m_active == 0)
{
m_round_number = m_round_number + 1;
@@ -120,6 +128,8 @@ namespace turns::core
m_data[old_active]->is_active() = false;
m_data[*m_active]->is_active() = true;
+ m_progress = (static_cast<float>(*m_active) + 1) / get_n_items();
+
if (m_active == 0 && m_round_number > 0)
{
m_round_number = m_round_number - 1;
@@ -156,11 +166,14 @@ namespace turns::core
m_round_number = 0;
}
m_is_running = true;
+
+ m_progress = (static_cast<float>(*m_active) + 1) / get_n_items();
}
auto turn_order::stop() -> void
{
m_is_running = false;
+ m_progress = 0;
}
/** ListModel implementation */
diff --git a/ui/include/turns/ui/widgets/turn_order_view.hpp b/ui/include/turns/ui/widgets/turn_order_view.hpp
index b174ce7..c14d239 100644
--- a/ui/include/turns/ui/widgets/turn_order_view.hpp
+++ b/ui/include/turns/ui/widgets/turn_order_view.hpp
@@ -1,25 +1,27 @@
#ifndef TURNS_APP_WIDGETS_TURN_ORDER_VIEW_HPP
#define TURNS_APP_WIDGETS_TURN_ORDER_VIEW_HPP
-#include "turns/ui/widgets/template_widget.hpp"
#include "turns/core/fwd.hpp"
+#include "turns/ui/widgets/template_widget.hpp"
#include <glibmm/object.h>
#include <glibmm/refptr.h>
+#include <gtkmm/box.h>
#include <gtkmm/listbox.h>
-#include <gtkmm/scrolledwindow.h>
+#include <gtkmm/progressbar.h>
#include <gtkmm/widget.h>
#include <array>
namespace turns::app::widgets
{
- struct turn_order_view : template_widget<turn_order_view, Gtk::ScrolledWindow>
+ struct turn_order_view : template_widget<turn_order_view, Gtk::Box>
{
using model_type = core::turn_order;
auto constexpr inline static children = std::array{
+ "progress",
"view",
};
@@ -29,6 +31,7 @@ namespace turns::app::widgets
auto handle_create_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *;
Glib::RefPtr<model_type> m_model;
+ Gtk::ProgressBar * m_progress;
Gtk::ListBox * m_view;
};
} // namespace turns::app::widgets
diff --git a/ui/res/ui.cmb b/ui/res/ui.cmb
index f3cc8e8..acf1687 100644
--- a/ui/res/ui.cmb
+++ b/ui/res/ui.cmb
@@ -12,7 +12,9 @@
(1,"libadwaita","1.5",None),
(2,"gtk","4.14",None),
(2,"libadwaita","1.5",None),
- (3,"gtk","4.14",None)
+ (3,"gtk","4.14",None),
+ (4,"gtk","4.14",None),
+ (4,"libadwaita","1.5",None)
</ui_library>
<object>
(1,1,"AdwApplicationWindow","tracker",None,None,None,None,-1,None,None),
@@ -54,9 +56,11 @@
(3,8,"GtkLabel","subtitle",4,None,None,None,-1,None,None),
(3,9,"GtkButton","delete",5,None,None,None,-1,None,None),
(3,10,"GtkButton","edit",5,None,None,None,-1,None,None),
- (4,1,"GtkScrolledWindow","gtkmm__CustomObject_turn_order_view",None,None,None,None,-1,None,None),
- (4,2,"AdwClamp",None,1,None,None,None,-1,None,None),
- (4,3,"GtkListBox","view",2,None,None,None,-1,None,None)
+ (4,1,"GtkBox","gtkmm__CustomObject_turn_order_view",None,None,None,None,-1,None,None),
+ (4,2,"GtkProgressBar","progress",1,None,None,None,None,None,None),
+ (4,3,"GtkScrolledWindow",None,1,None,None,None,1,None,None),
+ (4,4,"AdwClamp",None,3,None,None,None,-1,None,None),
+ (4,5,"GtkListBox","view",4,None,None,None,-1,None,None)
</object>
<object_property>
(1,1,"AdwApplicationWindow","content",None,None,None,None,None,2,None,None,None,None),
@@ -142,13 +146,15 @@
(3,9,"GtkWidget","tooltip-text","Delete participant",1,None,None,None,None,None,None,None,None),
(3,10,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None),
(3,10,"GtkWidget","tooltip-text","Edit participant",1,None,None,None,None,None,None,None,None),
- (4,1,"GtkScrolledWindow","child",None,None,None,None,None,2,None,None,None,None),
- (4,2,"AdwClamp","child",None,None,None,None,None,3,None,None,None,None),
- (4,2,"GtkWidget","margin-bottom","18",None,None,None,None,None,None,None,None,None),
- (4,2,"GtkWidget","margin-end","12",None,None,None,None,None,None,None,None,None),
- (4,2,"GtkWidget","margin-start","12",None,None,None,None,None,None,None,None,None),
- (4,2,"GtkWidget","margin-top","12",None,None,None,None,None,None,None,None,None),
- (4,3,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None)
+ (4,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
+ (4,3,"GtkScrolledWindow","child",None,None,None,None,None,4,None,None,None,None),
+ (4,3,"GtkWidget","vexpand","True",None,None,None,None,None,None,None,None,None),
+ (4,4,"AdwClamp","child",None,None,None,None,None,5,None,None,None,None),
+ (4,4,"GtkWidget","margin-bottom","18",None,None,None,None,None,None,None,None,None),
+ (4,4,"GtkWidget","margin-end","12",None,None,None,None,None,None,None,None,None),
+ (4,4,"GtkWidget","margin-start","12",None,None,None,None,None,None,None,None,None),
+ (4,4,"GtkWidget","margin-top","12",None,None,None,None,None,None,None,None,None),
+ (4,5,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None)
</object_property>
<object_data>
(1,1,"GtkWidget",2,2,None,1,None,None,None,None),
@@ -180,8 +186,6 @@
(3,5,"GtkWidget",2,2,None,1,None,None,None,None),
(3,3,"GtkWidget",1,1,None,None,None,None,None,None),
(3,3,"GtkWidget",2,2,None,1,None,None,None,None),
- (4,3,"GtkWidget",1,1,None,None,None,None,None,None),
- (4,3,"GtkWidget",2,2,None,1,None,None,None,None),
(1,22,"GtkWidget",1,1,None,None,None,None,None,None),
(1,22,"GtkWidget",2,2,None,1,None,None,None,None),
(1,22,"GtkWidget",2,3,None,1,None,None,None,None),
@@ -192,7 +196,11 @@
(1,24,"GtkWidget",2,2,None,1,None,None,None,None),
(1,24,"GtkWidget",2,3,None,1,None,None,None,None),
(1,21,"GtkWidget",1,1,None,None,None,None,None,None),
- (1,21,"GtkWidget",2,2,None,1,None,None,None,None)
+ (1,21,"GtkWidget",2,2,None,1,None,None,None,None),
+ (4,2,"GtkWidget",1,1,None,None,None,None,None,None),
+ (4,2,"GtkWidget",2,2,None,1,None,None,None,None),
+ (4,5,"GtkWidget",1,1,None,None,None,None,None,None),
+ (4,5,"GtkWidget",2,2,None,1,None,None,None,None)
</object_data>
<object_data_arg>
(1,1,"GtkWidget",2,2,"name","background"),
@@ -211,13 +219,14 @@
(3,10,"GtkWidget",2,3,"name","suggested-action"),
(3,5,"GtkWidget",2,2,"name","suffixes"),
(3,3,"GtkWidget",2,2,"name","prefixes"),
- (4,3,"GtkWidget",2,2,"name","boxed-list"),
(1,22,"GtkWidget",2,2,"name","pill"),
(1,22,"GtkWidget",2,3,"name","suggested-action"),
(1,23,"GtkWidget",2,2,"name","pill"),
(1,23,"GtkWidget",2,3,"name","destructive-action"),
(1,24,"GtkWidget",2,2,"name","pill"),
(1,24,"GtkWidget",2,3,"name","suggested-action"),
- (1,21,"GtkWidget",2,2,"name","toolbar")
+ (1,21,"GtkWidget",2,2,"name","toolbar"),
+ (4,2,"GtkWidget",2,2,"name","osd"),
+ (4,5,"GtkWidget",2,2,"name","boxed-list")
</object_data_arg>
</cambalache-project>
diff --git a/ui/src/widgets/turn_order_view.cpp b/ui/src/widgets/turn_order_view.cpp
index 9456cbe..78d7c43 100644
--- a/ui/src/widgets/turn_order_view.cpp
+++ b/ui/src/widgets/turn_order_view.cpp
@@ -1,8 +1,8 @@
#include "turns/ui/widgets/turn_order_view.hpp"
-#include "turns/ui/widgets/participant_row.hpp"
#include "turns/core/participant.hpp"
#include "turns/core/turn_order.hpp"
+#include "turns/ui/widgets/participant_row.hpp"
#include <sigc++/functors/mem_fun.h>
@@ -20,14 +20,20 @@ namespace turns::app::widgets
turn_order_view::turn_order_view(Glib::RefPtr<model_type> model)
: Glib::ObjectBase(TYPE_NAME)
- , template_widget<turn_order_view, Gtk::ScrolledWindow>{TEMPLATE}
+ , template_widget{TEMPLATE}
, m_model{model}
+ , m_progress{get_widget<Gtk::ProgressBar>("progress")}
, m_view{get_widget<Gtk::ListBox>("view")}
{
- if (model)
+ if (!model)
{
- m_view->bind_model(m_model, sigc::mem_fun(*this, &turn_order_view::handle_create_row));
+ return;
}
+
+ set_orientation(Gtk::Orientation::VERTICAL);
+
+ m_view->bind_model(m_model, sigc::mem_fun(*this, &turn_order_view::handle_create_row));
+ Glib::Binding::bind_property(m_model->progress(), m_progress->property_fraction(), Glib::Binding::Flags::SYNC_CREATE);
}
auto turn_order_view::handle_create_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *