From 7d3ab7e56bd6b1d4c6ac9f3ebe297a0731105438 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Fri, 31 May 2024 13:57:14 +0200 Subject: [PATCH] editor: Redesign translation section --- data/ui/person_editor.blp | 16 +++++++- data/ui/translation_editor.blp | 29 +++++++++++++++ data/ui/translation_section.blp | 19 ---------- data/ui/work_editor.blp | 14 ++++++- src/editor/mod.rs | 2 +- src/editor/person_editor.rs | 4 +- ...ation_section.rs => translation_editor.rs} | 37 ++++++++++--------- src/editor/work_editor.rs | 4 +- 8 files changed, 80 insertions(+), 45 deletions(-) create mode 100644 data/ui/translation_editor.blp delete mode 100644 data/ui/translation_section.blp rename src/editor/{translation_section.rs => translation_editor.rs} (69%) diff --git a/data/ui/person_editor.blp b/data/ui/person_editor.blp index 6d69e37..59b2430 100644 --- a/data/ui/person_editor.blp +++ b/data/ui/person_editor.blp @@ -1,7 +1,7 @@ using Gtk 4.0; using Adw 1; -template $MusicusPersonEditor : Adw.NavigationPage { +template $MusicusPersonEditor: Adw.NavigationPage { title: _("Person"); Adw.ToolbarView { @@ -9,7 +9,19 @@ template $MusicusPersonEditor : Adw.NavigationPage { Adw.HeaderBar header_bar {} Adw.Clamp { - $MusicusTranslationSection name_section {} + Gtk.Label { + label: _("Name"); + xalign: 0; + margin-top: 24; + + styles [ + "heading" + ] + } + + $MusicusTranslationEditor name_editor { + margin-start: 12; + } } } } diff --git a/data/ui/translation_editor.blp b/data/ui/translation_editor.blp new file mode 100644 index 0000000..96d6113 --- /dev/null +++ b/data/ui/translation_editor.blp @@ -0,0 +1,29 @@ +using Gtk 4.0; +using Adw 1; + +template $MusicusTranslationEditor: Adw.Bin { + Gtk.ListBox list_box { + selection-mode: none; + + styles [ + "boxed-list" + ] + + Adw.EntryRow entry_row { + title: _("Name"); + } + + Adw.ActionRow { + title: _("Add translation"); + activatable: true; + activated => $add_translation() swapped; + + [prefix] + Gtk.Box select_person_box { + Gtk.Image { + icon-name: "list-add-symbolic"; + } + } + } + } +} diff --git a/data/ui/translation_section.blp b/data/ui/translation_section.blp deleted file mode 100644 index 22c4644..0000000 --- a/data/ui/translation_section.blp +++ /dev/null @@ -1,19 +0,0 @@ -using Gtk 4.0; -using Adw 1; - -template $MusicusTranslationSection : Adw.PreferencesGroup { - title: _("Name"); - header-suffix: Gtk.Button add_button { - styles ["flat"] - clicked => $add_translation() swapped; - - Adw.ButtonContent { - icon-name: "list-add-symbolic"; - label: _("Translate"); - } - }; - - Adw.EntryRow entry_row { - title: _("Name"); - } -} \ No newline at end of file diff --git a/data/ui/work_editor.blp b/data/ui/work_editor.blp index c37ae00..1e6c463 100644 --- a/data/ui/work_editor.blp +++ b/data/ui/work_editor.blp @@ -16,7 +16,19 @@ template $MusicusWorkEditor: Adw.NavigationPage { margin-start: 12; margin-end: 12; - $MusicusTranslationSection name_section {} + Gtk.Label { + label: _("Name"); + xalign: 0; + margin-top: 24; + + styles [ + "heading" + ] + } + + $MusicusTranslationEditor name_editor { + margin-top: 12; + } Gtk.Label { label: _("Composers"); diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 5085a6b..d1f88be 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -4,6 +4,6 @@ pub mod person_editor; pub mod person_selector_popover; pub mod role_selector_popover; pub mod translation_entry; -pub mod translation_section; +pub mod translation_editor; pub mod work_editor; pub mod work_editor_composer_row; \ No newline at end of file diff --git a/src/editor/person_editor.rs b/src/editor/person_editor.rs index 4d764a4..42c1f84 100644 --- a/src/editor/person_editor.rs +++ b/src/editor/person_editor.rs @@ -1,7 +1,7 @@ use adw::{prelude::*, subclass::prelude::*}; use gtk::glib; -use crate::editor::translation_section::MusicusTranslationSection; +use crate::editor::translation_editor::MusicusTranslationEditor; mod imp { use super::*; @@ -17,7 +17,7 @@ mod imp { type ParentType = adw::NavigationPage; fn class_init(klass: &mut Self::Class) { - MusicusTranslationSection::static_type(); + MusicusTranslationEditor::static_type(); klass.bind_template(); klass.bind_template_instance_callbacks(); } diff --git a/src/editor/translation_section.rs b/src/editor/translation_editor.rs similarity index 69% rename from src/editor/translation_section.rs rename to src/editor/translation_editor.rs index 5e1c795..d8e16e5 100644 --- a/src/editor/translation_section.rs +++ b/src/editor/translation_editor.rs @@ -12,8 +12,10 @@ mod imp { use super::*; #[derive(Debug, Default, gtk::CompositeTemplate)] - #[template(file = "data/ui/translation_section.blp")] - pub struct MusicusTranslationSection { + #[template(file = "data/ui/translation_editor.blp")] + pub struct MusicusTranslationEditor { + #[template_child] + pub list_box: TemplateChild, #[template_child] pub entry_row: TemplateChild, @@ -21,10 +23,10 @@ mod imp { } #[glib::object_subclass] - impl ObjectSubclass for MusicusTranslationSection { - const NAME: &'static str = "MusicusTranslationSection"; - type Type = super::MusicusTranslationSection; - type ParentType = adw::PreferencesGroup; + impl ObjectSubclass for MusicusTranslationEditor { + const NAME: &'static str = "MusicusTranslationEditor"; + type Type = super::MusicusTranslationEditor; + type ParentType = adw::Bin; fn class_init(klass: &mut Self::Class) { klass.bind_template(); @@ -36,23 +38,23 @@ mod imp { } } - impl ObjectImpl for MusicusTranslationSection { + impl ObjectImpl for MusicusTranslationEditor { fn constructed(&self) { self.parent_constructed(); } } - impl WidgetImpl for MusicusTranslationSection {} - impl PreferencesGroupImpl for MusicusTranslationSection {} + impl WidgetImpl for MusicusTranslationEditor {} + impl BinImpl for MusicusTranslationEditor {} } glib::wrapper! { - pub struct MusicusTranslationSection(ObjectSubclass) + pub struct MusicusTranslationEditor(ObjectSubclass) @extends gtk::Widget, adw::PreferencesGroup; } #[gtk::template_callbacks] -impl MusicusTranslationSection { +impl MusicusTranslationEditor { pub fn new(translation: TranslatedString) -> Self { let obj: Self = glib::Object::new(); let mut translation = translation.0; @@ -69,7 +71,7 @@ impl MusicusTranslationSection { } #[template_callback] - fn add_translation(&self, _: >k::Button) { + fn add_translation(&self, _: &adw::ActionRow) { self.add_entry(&util::LANG, &self.imp().entry_row.text()); } @@ -90,14 +92,13 @@ impl MusicusTranslationSection { let obj = self.clone(); entry.connect_remove(move |entry| { - let mut entries = obj.imp().translation_entries.borrow_mut(); - if let Some(index) = entries.iter().position(|e| e == entry) { - entries.remove(index); - } - obj.remove(entry); + obj.imp().translation_entries.borrow_mut().retain(|e| e != entry); + obj.imp().list_box.remove(entry); }); - self.add(&entry); + self.imp().list_box.insert(&entry, self.imp().translation_entries.borrow().len() as i32 + 1); + entry.grab_focus(); + self.imp().translation_entries.borrow_mut().push(entry); } } diff --git a/src/editor/work_editor.rs b/src/editor/work_editor.rs index eb9ea47..d1eec75 100644 --- a/src/editor/work_editor.rs +++ b/src/editor/work_editor.rs @@ -3,7 +3,7 @@ use crate::{ editor::{ instrument_selector_popover::MusicusInstrumentSelectorPopover, person_selector_popover::MusicusPersonSelectorPopover, - translation_section::MusicusTranslationSection, + translation_editor::MusicusTranslationEditor, work_editor_composer_row::MusicusWorkEditorComposerRow, }, library::MusicusLibrary, @@ -50,7 +50,7 @@ mod imp { type ParentType = adw::NavigationPage; fn class_init(klass: &mut Self::Class) { - MusicusTranslationSection::static_type(); + MusicusTranslationEditor::static_type(); klass.bind_template(); klass.bind_template_instance_callbacks(); }