diff --git a/client/src/activities_view.vala b/client/src/activities_view.vala index d6726e7..f1b4240 100644 --- a/client/src/activities_view.vala +++ b/client/src/activities_view.vala @@ -1,37 +1,16 @@ namespace StudySystemClient { public class ActivitiesView : Gtk.Box { private Client client; - private Gtk.FlowBox card_container; private RefreshingIndicator refreshing_indicator; + private CardArea card_area; public ActivitiesView(Client client) { - Object(orientation: Gtk.Orientation.VERTICAL, - hexpand: true, - vexpand: true, - margin_top: 0, - margin_bottom: 0, - margin_start: 0, - margin_end: 0); - this.client = client; - - card_container = new Gtk.FlowBox(); - card_container.homogeneous = true; - card_container.min_children_per_line = 1; - card_container.max_children_per_line = 1; - card_container.selection_mode = Gtk.SelectionMode.NONE; - card_container.valign = Gtk.Align.START; - - var scrolled_window = new Gtk.ScrolledWindow(); - scrolled_window.hscrollbar_policy = Gtk.PolicyType.NEVER; - scrolled_window.hexpand = true; - scrolled_window.vexpand = true; - scrolled_window.add_css_class("card-container"); - scrolled_window.set_child(card_container); + card_area = new CardArea(); var overlay = new Gtk.Overlay(); overlay.hexpand = overlay.vexpand = true; - overlay.set_child(scrolled_window); + overlay.set_child(card_area); this.append(overlay); refreshing_indicator = new RefreshingIndicator(overlay); @@ -43,11 +22,11 @@ namespace StudySystemClient { refreshing_indicator.show(); try { var activities = yield client.list_activities(); - card_container.remove_all(); + card_area.clear(); foreach (var activity in activities) { var card = new ActivityCard(activity); card.session_logged.connect(log_session); - card_container.append(card); + card_area.add(card); } } catch (ClientError e) { stderr.printf("Error refreshing activities: %s\n", diff --git a/client/src/activity_card.vala b/client/src/activity_card.vala index df3e234..c7c3d63 100644 --- a/client/src/activity_card.vala +++ b/client/src/activity_card.vala @@ -1,10 +1,10 @@ namespace StudySystemClient { - public class ActivityCard : Gtk.Frame { + public class ActivityCard : Card { public signal void session_logged(string subject, ActivityType type, int minutes); public ActivityCard(Activity activity) { - add_css_class("card"); + base(); var subject = new Gtk.Label(activity.subject); subject.halign = Gtk.Align.START; diff --git a/client/src/card.vala b/client/src/card.vala new file mode 100644 index 0000000..9d21d1d --- /dev/null +++ b/client/src/card.vala @@ -0,0 +1,40 @@ +namespace StudySystemClient { + public class Card : Gtk.Frame { + public Card() { + hexpand = true; + add_css_class("card"); + } + } + + public class CardArea : Gtk.Box { + private Gtk.FlowBox flow_box; + + public CardArea() { + hexpand = vexpand = true; + margin_top = margin_bottom = margin_start = margin_end = 0; + + flow_box = new Gtk.FlowBox(); + flow_box.homogeneous = true; + flow_box.min_children_per_line = 1; + flow_box.max_children_per_line = 1; + flow_box.selection_mode = Gtk.SelectionMode.NONE; + flow_box.valign = Gtk.Align.START; + + var scrolled_window = new Gtk.ScrolledWindow(); + scrolled_window.hscrollbar_policy = Gtk.PolicyType.NEVER; + scrolled_window.hexpand = scrolled_window.vexpand = true; + scrolled_window.add_css_class("card-container"); + scrolled_window.set_child(flow_box); + + append(scrolled_window); + } + + public void clear() { + flow_box.remove_all(); + } + + public void add(Card card) { + flow_box.append(card); + } + } +} diff --git a/client/src/meson.build b/client/src/meson.build index 7b7bad1..07a6e94 100644 --- a/client/src/meson.build +++ b/client/src/meson.build @@ -13,6 +13,7 @@ lib = library( 'activities_view.vala', 'activity.vala', 'activity_card.vala', + 'card.vala', 'client.vala', 'connection.vala', 'der.vala',