[gnome-tour/bilelmoussaoui/fixes] port PaginatorWidget to CompositeTemplate
- From: Bilal Elmoussaoui <bilelmoussaoui src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-tour/bilelmoussaoui/fixes] port PaginatorWidget to CompositeTemplate
- Date: Mon, 3 Jan 2022 16:21:32 +0000 (UTC)
commit 56031b7afaeed19c809a369b85f3777b55602e9f
Author: Bilal Elmoussaoui <bil elmoussaoui gmail com>
Date: Sat Jan 1 11:37:45 2022 +0100
port PaginatorWidget to CompositeTemplate
data/resources.gresource.xml | 1 +
data/resources/ui/paginator.ui | 80 +++++++++++++++++++++++++++++++
src/widgets/paginator.rs | 105 +++++++++++------------------------------
3 files changed, 108 insertions(+), 78 deletions(-)
---
diff --git a/data/resources.gresource.xml b/data/resources.gresource.xml
index ea29d68..33bcaf9 100644
--- a/data/resources.gresource.xml
+++ b/data/resources.gresource.xml
@@ -2,6 +2,7 @@
<gresources>
<gresource prefix="/org/gnome/Tour/">
<file compressed="true" alias="style.css">resources/style.css</file>
+ <file compressed="true" preprocess="xml-stripblanks"
alias="ui/paginator.ui">resources/ui/paginator.ui</file>
<file compressed="true" preprocess="xml-stripblanks" alias="ui/window.ui">resources/ui/window.ui</file>
<file compressed="true" alias="welcome.svg">resources/assets/welcome.svg</file>
<file compressed="true" alias="overview.svg">resources/assets/overview.svg</file>
diff --git a/data/resources/ui/paginator.ui b/data/resources/ui/paginator.ui
new file mode 100644
index 0000000..64c2da3
--- /dev/null
+++ b/data/resources/ui/paginator.ui
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <template class="PaginatorWidget" parent="GtkBox">
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="show-title-buttons">True</property>
+ <property name="title-widget">
+ <object class="AdwCarouselIndicatorDots" id="carousel_dots">
+ <property name="carousel">carousel</property>
+ </object>
+ </property>
+ <style>
+ <class name="flat" />
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <child>
+ <object class="GtkOverlay" id="previous_overlay">
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkButton" id="previous_btn">
+ <property name="icon-name">left-large-symbolic</property>
+ <property name="valign">center</property>
+ <property name="action-name">app.previous-page</property>
+ <property name="tooltip-text" translatable="yes">Previous</property>
+ <style>
+ <class name="circular" />
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="AdwCarousel" id="carousel">
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkOverlay" id="start_overlay">
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkButton" id="start_btn">
+ <property name="icon-name">right-large-symbolic</property>
+ <property name="valign">center</property>
+ <property name="action-name">app.start-tour</property>
+ <property name="tooltip-text" translatable="yes">Start</property>
+ <style>
+ <class name="suggested-action" />
+ <class name="circular" />
+ </style>
+ </object>
+ </child>
+ <child type="overlay">
+ <object class="GtkOverlay" id="next_overlay">
+ <property name="valign">center</property>
+ <property name="can-target">false</property>
+ <child>
+ <object class="GtkButton" id="next_btn">
+ <property name="icon-name">right-large-symbolic</property>
+ <property name="valign">center</property>
+ <property name="action-name">app.next-page</property>
+ <property name="tooltip-text" translatable="yes">Next</property>
+ <style>
+ <class name="circular" />
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/widgets/paginator.rs b/src/widgets/paginator.rs
index ac59cd4..861d22f 100644
--- a/src/widgets/paginator.rs
+++ b/src/widgets/paginator.rs
@@ -1,39 +1,39 @@
-use gettextrs::gettext;
use gtk::prelude::*;
use gtk::{
glib::{self, clone},
subclass::prelude::*,
};
-use std::cell::RefCell;
mod imp {
- use std::cell::Cell;
-
use super::*;
+ use std::cell::Cell;
+ use std::cell::RefCell;
- #[derive(Debug)]
+ #[derive(Debug, gtk::CompositeTemplate)]
+ #[template(resource = "/org/gnome/Tour/ui/paginator.ui")]
pub struct PaginatorWidget {
- pub(super) carousel: adw::Carousel,
- pub(super) carousel_dots: adw::CarouselIndicatorDots,
- pub(super) headerbar: gtk::HeaderBar,
+ #[template_child]
+ pub(super) carousel: TemplateChild<adw::Carousel>,
pub(super) pages: RefCell<Vec<gtk::Widget>>,
pub(super) current_page: Cell<u32>,
- pub(super) next_overlay: gtk::Overlay,
- pub(super) next_btn: gtk::Button,
- pub(super) start_btn: gtk::Button,
- pub(super) previous_btn: gtk::Button,
+ #[template_child]
+ pub(super) next_overlay: TemplateChild<gtk::Overlay>,
+ #[template_child]
+ pub(super) next_btn: TemplateChild<gtk::Button>,
+ #[template_child]
+ pub(super) start_btn: TemplateChild<gtk::Button>,
+ #[template_child]
+ pub(super) previous_btn: TemplateChild<gtk::Button>,
}
impl Default for PaginatorWidget {
fn default() -> Self {
Self {
- carousel: adw::Carousel::new(),
- carousel_dots: adw::CarouselIndicatorDots::new(),
- headerbar: gtk::HeaderBar::builder().show_title_buttons(true).build(),
- start_btn: gtk::Button::from_icon_name(Some("right-large-symbolic")),
- next_overlay: gtk::Overlay::new(),
- next_btn: gtk::Button::from_icon_name(Some("right-large-symbolic")),
- previous_btn: gtk::Button::from_icon_name(Some("left-large-symbolic")),
+ carousel: TemplateChild::default(),
+ start_btn: TemplateChild::default(),
+ next_overlay: TemplateChild::default(),
+ next_btn: TemplateChild::default(),
+ previous_btn: TemplateChild::default(),
pages: RefCell::new(Vec::new()),
current_page: Cell::new(0),
}
@@ -45,6 +45,14 @@ mod imp {
const NAME: &'static str = "PaginatorWidget";
type ParentType = gtk::Box;
type Type = super::PaginatorWidget;
+
+ fn class_init(klass: &mut Self::Class) {
+ Self::bind_template(klass);
+ }
+
+ fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
+ obj.init_template();
+ }
}
impl ObjectImpl for PaginatorWidget {
@@ -54,71 +62,12 @@ mod imp {
.map(|l| l.downcast::<gtk::BoxLayout>().unwrap())
.unwrap();
layout_manager.set_orientation(gtk::Orientation::Vertical);
-
- self.headerbar.add_css_class("flat");
- self.carousel_dots.set_carousel(Some(&self.carousel));
- self.carousel.set_hexpand(true);
- self.carousel.set_vexpand(true);
self.carousel
.set_scroll_params(&adw::SpringParams::new(1.0, 0.5, 300.0));
-
self.carousel
.connect_position_notify(clone!(@weak obj => move |_| {
obj.update_position();
}));
- self.start_btn.add_css_class("suggested-action");
- self.start_btn.set_use_underline(true);
- self.start_btn.set_valign(gtk::Align::Center);
- self.start_btn.set_action_name(Some("app.start-tour"));
- self.start_btn.set_tooltip_text(Some(&gettext("Start")));
- self.start_btn.add_css_class("circular");
-
- self.next_btn.set_tooltip_text(Some(&gettext("Next")));
- self.next_btn.set_use_underline(true);
- self.next_btn.set_valign(gtk::Align::Center);
- self.next_btn.set_action_name(Some("app.next-page"));
- self.next_btn.add_css_class("circular");
-
- self.previous_btn.set_use_underline(true);
- self.previous_btn.set_valign(gtk::Align::Center);
- self.previous_btn.set_action_name(Some("app.previous-page"));
- self.previous_btn
- .set_tooltip_text(Some(&gettext("Previous")));
- self.previous_btn.add_css_class("circular");
-
- self.next_overlay.set_child(Some(&self.next_btn));
- self.next_overlay.set_valign(gtk::Align::Center);
- self.next_overlay.set_can_target(false);
-
- let previous_overlay = gtk::Overlay::new();
- previous_overlay.set_valign(gtk::Align::Center);
- previous_overlay.add_overlay(&self.previous_btn);
-
- let start_overlay = gtk::Overlay::new();
- start_overlay.set_child(Some(&self.start_btn));
- start_overlay.set_valign(gtk::Align::Center);
- start_overlay.add_overlay(&self.next_overlay);
-
- let btn_size_group = gtk::SizeGroup::new(gtk::SizeGroupMode::Horizontal);
- btn_size_group.add_widget(&self.previous_btn);
- btn_size_group.add_widget(&self.next_overlay);
- btn_size_group.add_widget(&start_overlay);
-
- self.headerbar.set_title_widget(Some(&self.carousel_dots));
-
- obj.append(&self.headerbar);
- let container = gtk::Box::builder()
- .orientation(gtk::Orientation::Horizontal)
- .margin_start(12)
- .margin_end(12)
- .build();
-
- container.append(&previous_overlay);
- container.append(&self.carousel);
- container.append(&start_overlay);
-
- obj.append(&container);
-
self.parent_constructed(obj);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]