From 4b0d5f7b6d6bc0595036d15def2aba285648a71a Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Sat, 14 Sep 2024 21:34:29 +0200 Subject: [PATCH] window: Add edit view --- src/widgets.rs | 2 ++ src/widgets/window_edit.rs | 67 ++++++++++++++++++++++++++++++++++++++ src/widgets/window_edit.ui | 17 ++++++++++ src/window.rs | 13 ++++---- src/window.ui | 11 +++++-- 5 files changed, 102 insertions(+), 8 deletions(-) create mode 100644 src/widgets/window_edit.rs create mode 100644 src/widgets/window_edit.ui diff --git a/src/widgets.rs b/src/widgets.rs index 2add57a..3de4f91 100644 --- a/src/widgets.rs +++ b/src/widgets.rs @@ -28,6 +28,7 @@ mod properties_view; mod shy_bin; mod sliding_view; mod window_content; +mod window_edit; mod window_image; pub use drag_overlay::LpDragOverlay; @@ -41,4 +42,5 @@ pub use properties_view::LpPropertiesView; pub use shy_bin::LpShyBin; pub use sliding_view::LpSlidingView; pub use window_content::LpWindowContent; +pub use window_edit::LpWindowEdit; pub use window_image::LpWindowImage; diff --git a/src/widgets/window_edit.rs b/src/widgets/window_edit.rs new file mode 100644 index 0000000..1b0c15b --- /dev/null +++ b/src/widgets/window_edit.rs @@ -0,0 +1,67 @@ +// Copyright (c) 2024 Sophie Herold +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// SPDX-License-Identifier: GPL-3.0-or-later + +use adw::prelude::*; +use adw::subclass::prelude::*; +use adw::{glib, gtk}; + +mod imp { + use super::*; + #[derive(Debug, Default, gtk::CompositeTemplate, glib::Properties)] + #[properties(wrapper_type = super::LpWindowEdit)] + #[template(file = "window_edit.ui")] + pub struct LpWindowEdit { + #[property(get)] + example: u64, + } + + #[glib::object_subclass] + impl ObjectSubclass for LpWindowEdit { + const NAME: &'static str = "LpWindowEdit"; + type Type = super::LpWindowEdit; + type ParentType = adw::Bin; + + fn class_init(klass: &mut Self::Class) { + Self::bind_template(klass); + } + + fn instance_init(obj: &glib::subclass::InitializingObject) { + obj.init_template(); + } + } + + #[glib::derived_properties] + impl ObjectImpl for LpWindowEdit { + fn constructed(&self) { + self.parent_constructed(); + } + } + + impl WidgetImpl for LpWindowEdit {} + impl BinImpl for LpWindowEdit {} +} + +glib::wrapper! { + pub struct LpWindowEdit(ObjectSubclass) + @extends gtk::Widget, adw::Bin; +} + +impl LpWindowEdit { + pub fn new() -> Self { + glib::Object::new() + } +} diff --git a/src/widgets/window_edit.ui b/src/widgets/window_edit.ui new file mode 100644 index 0000000..d16d64d --- /dev/null +++ b/src/widgets/window_edit.ui @@ -0,0 +1,17 @@ + + + + diff --git a/src/window.rs b/src/window.rs index 696ff2c..81c00f4 100644 --- a/src/window.rs +++ b/src/window.rs @@ -17,21 +17,18 @@ use adw::prelude::*; use adw::subclass::prelude::*; +use gio::glib::VariantTy; use gtk::CompositeTemplate; use crate::config; use crate::deps::*; -use crate::widgets::LpImageView; +use crate::widgets::{LpImageView, LpWindowEdit, LpWindowImage}; /// Show window after X milliseconds even if image dimensions are not known yet const SHOW_WINDOW_AFTER: u64 = 2000; mod imp { - - use gio::glib::VariantTy; - use super::*; - use crate::widgets::LpWindowImage; // To use composite templates, you need // to use derive macro. Derive macros generate @@ -52,9 +49,13 @@ mod imp { pub struct LpWindow { #[template_child] pub(super) toast_overlay: TemplateChild, + #[template_child] + pub(super) stack: TemplateChild, #[template_child] pub(super) window_image: TemplateChild, + #[template_child] + pub(super) window_edit: TemplateChild, } #[glib::object_subclass] @@ -190,7 +191,7 @@ impl LpWindow { } pub fn show_edit(&self) { - todo!() + self.imp().stack.set_visible_child(&*self.imp().window_edit); } pub fn image_view(&self) -> LpImageView { diff --git a/src/window.ui b/src/window.ui index a93f412..8b8001e 100644 --- a/src/window.ui +++ b/src/window.ui @@ -22,8 +22,15 @@ - - LpWindow + + + + LpWindow + + + + +