From 3ae5727f39701db79f69db927bb591fa25d28f14 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Thu, 7 Apr 2022 12:39:50 +0200 Subject: [PATCH] Replace most unnecessary frames with CSS classes --- musicus/res/ui/import_screen.ui | 191 ++++++++++++++------------- musicus/res/ui/medium_editor.ui | 39 +++--- musicus/res/ui/performance_editor.ui | 102 +++++++------- musicus/res/ui/player_screen.ui | 6 +- musicus/res/ui/recording_editor.ui | 69 +++++----- musicus/res/ui/section.ui | 3 - musicus/res/ui/selector.ui | 15 +-- musicus/res/ui/track_editor.ui | 23 ++-- musicus/res/ui/track_selector.ui | 15 +-- musicus/res/ui/track_set_editor.ui | 39 +++--- musicus/res/ui/work_editor.ui | 51 ++++--- musicus/res/ui/work_part_editor.ui | 34 +++-- musicus/src/editors/ensemble.rs | 1 + musicus/src/editors/instrument.rs | 1 + musicus/src/editors/performance.rs | 2 + musicus/src/editors/person.rs | 1 + musicus/src/import/medium_preview.rs | 7 +- musicus/src/import/track_editor.rs | 13 +- musicus/src/import/track_selector.rs | 13 +- musicus/src/screens/main.rs | 2 +- musicus/src/screens/player.rs | 64 +++------ musicus/src/selectors/selector.rs | 4 +- musicus/src/widgets/list.rs | 6 +- musicus/src/widgets/section.rs | 3 +- 24 files changed, 328 insertions(+), 376 deletions(-) diff --git a/musicus/res/ui/import_screen.ui b/musicus/res/ui/import_screen.ui index d7971bd..69c3d33 100644 --- a/musicus/res/ui/import_screen.ui +++ b/musicus/res/ui/import_screen.ui @@ -1,7 +1,7 @@ - - + + vertical @@ -41,89 +41,97 @@ start Matching metadata - + - + + crossfade + false + true - - crossfade - false - true - - - loading - - - none + + loading + + + none + + + False + Loading… - - False - Loading… - - - True - - + + True - + + - - - - error - - - none + + + + + + error + + + none + + + False + Error while searching for matching metadata + try_again_button - - False - Error while searching for matching metadata - try_again_button - - - view-refresh-symbolic - center - - + + view-refresh-symbolic + center - + + - - - - empty - - - none - - - False - No matching metadata found - - + + + + + + empty + + + none + + + False + No matching metadata found - + + - - - - content - - - none - - + + + + + + content + + + none + - + @@ -135,43 +143,42 @@ 6 Manually add metadata - + - + + none - - none + + False + Select existing medium + select_button - - False - Select existing medium - select_button - - - Select - center - - - - - - - False - Add a new medium - add_button - - - Add - center - - + + Select + center + + + False + Add a new medium + add_button + + + Add + center + + + + + diff --git a/musicus/res/ui/medium_editor.ui b/musicus/res/ui/medium_editor.ui index 722185c..739720f 100644 --- a/musicus/res/ui/medium_editor.ui +++ b/musicus/res/ui/medium_editor.ui @@ -1,7 +1,7 @@ - - + + crossfade @@ -18,7 +18,7 @@ Import music @@ -31,7 +31,7 @@ object-select-symbolic @@ -60,30 +60,29 @@ 6 Medium - + - + + none - - none + + False + Name of the medium + name_entry - - False - Name of the medium - name_entry - - - center - True - - + + center + True + @@ -98,7 +97,7 @@ True Recordings - + @@ -111,7 +110,7 @@ - + diff --git a/musicus/res/ui/performance_editor.ui b/musicus/res/ui/performance_editor.ui index b56c347..61c015e 100644 --- a/musicus/res/ui/performance_editor.ui +++ b/musicus/res/ui/performance_editor.ui @@ -1,7 +1,7 @@ - - + + vertical @@ -12,13 +12,13 @@ Performance - go-previous-symbolic + go-previous-symbolic @@ -26,7 +26,7 @@ False object-select-symbolic @@ -44,59 +44,57 @@ 500 300 - - start + + none - - none + + False + Select a person + person_button - - False - Select a person - person_button - - - Select - center - - - - - - - False - Select an ensemble - ensemble_button - - - Select - center - - - - - - - False - Select a role - role_button - - - false - user-trash-symbolic - center - - - - - Select - center - - + + Select + center + + + False + Select an ensemble + ensemble_button + + + Select + center + + + + + + + False + Select a role + role_button + + + false + user-trash-symbolic + center + + + + + Select + center + + + + + diff --git a/musicus/res/ui/player_screen.ui b/musicus/res/ui/player_screen.ui index ce9134a..b0d2903 100644 --- a/musicus/res/ui/player_screen.ui +++ b/musicus/res/ui/player_screen.ui @@ -44,7 +44,7 @@ 12 800 - + vertical 12 @@ -144,10 +144,6 @@ - - - - diff --git a/musicus/res/ui/recording_editor.ui b/musicus/res/ui/recording_editor.ui index 90c79d6..93f720c 100644 --- a/musicus/res/ui/recording_editor.ui +++ b/musicus/res/ui/recording_editor.ui @@ -1,7 +1,7 @@ - - + + @@ -17,13 +17,13 @@ Recording - go-previous-symbolic + go-previous-symbolic @@ -31,7 +31,7 @@ False object-select-symbolic @@ -64,43 +64,42 @@ 6 Overview - + - + + none - - none + + False + Select a work + work_button - - False - Select a work - work_button - - - Select - center - - - - - - - False - Comment - comment_entry - - - center - True - - + + Select + center + + + False + Comment + comment_entry + + + center + True + + + + + @@ -115,7 +114,7 @@ True Performers - + @@ -128,7 +127,7 @@ - + @@ -154,7 +153,7 @@ Recording diff --git a/musicus/res/ui/section.ui b/musicus/res/ui/section.ui index 2ba5a53..fe71908 100644 --- a/musicus/res/ui/section.ui +++ b/musicus/res/ui/section.ui @@ -34,8 +34,5 @@ - - - diff --git a/musicus/res/ui/selector.ui b/musicus/res/ui/selector.ui index 54e91ca..fd5e845 100644 --- a/musicus/res/ui/selector.ui +++ b/musicus/res/ui/selector.ui @@ -93,18 +93,13 @@ 200 true - + 500 300 - - - start - 6 - 6 - 12 - 6 - - + 6 + 6 + 12 + 6 diff --git a/musicus/res/ui/track_editor.ui b/musicus/res/ui/track_editor.ui index 9f138bb..ff6aba6 100644 --- a/musicus/res/ui/track_editor.ui +++ b/musicus/res/ui/track_editor.ui @@ -1,7 +1,7 @@ - - + + vertical @@ -12,7 +12,7 @@ Track @@ -25,7 +25,7 @@ object-select-symbolic @@ -35,16 +35,11 @@ True - - - - start - 12 - 6 - 6 - 6 - - + + 12 + 6 + 6 + 6 diff --git a/musicus/res/ui/track_selector.ui b/musicus/res/ui/track_selector.ui index e8d14e9..f50c062 100644 --- a/musicus/res/ui/track_selector.ui +++ b/musicus/res/ui/track_selector.ui @@ -36,16 +36,11 @@ True - - - - start - 12 - 6 - 6 - 6 - - + + 12 + 6 + 6 + 6 diff --git a/musicus/res/ui/track_set_editor.ui b/musicus/res/ui/track_set_editor.ui index 3ba3511..9d96127 100644 --- a/musicus/res/ui/track_set_editor.ui +++ b/musicus/res/ui/track_set_editor.ui @@ -1,7 +1,7 @@ - - + + vertical @@ -12,7 +12,7 @@ Import music @@ -26,7 +26,7 @@ object-select-symbolic False @@ -50,30 +50,29 @@ 6 Recording - + - + + none - - none + + False + Select a recording + select_recording_button - - False - Select a recording - select_recording_button - - - Select - center - - + + Select + center + @@ -88,7 +87,7 @@ True Tracks - + @@ -101,7 +100,7 @@ - + diff --git a/musicus/res/ui/work_editor.ui b/musicus/res/ui/work_editor.ui index 84c8883..8ae7b53 100644 --- a/musicus/res/ui/work_editor.ui +++ b/musicus/res/ui/work_editor.ui @@ -69,38 +69,37 @@ - + + none - - none + + False + Select a composer + composer_button - - False - Select a composer - composer_button - - - Select - center - - - - - - - False - Title - title_entry - - - center - True - - + + Select + center + + + False + Title + title_entry + + + center + True + + + + + diff --git a/musicus/res/ui/work_part_editor.ui b/musicus/res/ui/work_part_editor.ui index 41b0c0e..ee08bcd 100644 --- a/musicus/res/ui/work_part_editor.ui +++ b/musicus/res/ui/work_part_editor.ui @@ -1,7 +1,7 @@ - - + + vertical @@ -12,7 +12,7 @@ Work part @@ -25,7 +25,7 @@ object-select-symbolic @@ -48,26 +48,24 @@ 500 300 - - start + + none - - none + + False + Title + title_entry - - False - Title - title_entry - - - center - True - - + + center + True + diff --git a/musicus/src/editors/ensemble.rs b/musicus/src/editors/ensemble.rs index dbc056c..1b0136f 100644 --- a/musicus/src/editors/ensemble.rs +++ b/musicus/src/editors/ensemble.rs @@ -26,6 +26,7 @@ impl Screen, Ensemble> for EnsembleEditor { let list = gtk::ListBoxBuilder::new() .selection_mode(gtk::SelectionMode::None) + .css_classes(vec![String::from("boxed-list")]) .build(); let name = EntryRow::new(&gettext("Name")); diff --git a/musicus/src/editors/instrument.rs b/musicus/src/editors/instrument.rs index cc64cf9..91e569c 100644 --- a/musicus/src/editors/instrument.rs +++ b/musicus/src/editors/instrument.rs @@ -26,6 +26,7 @@ impl Screen, Instrument> for InstrumentEditor { let list = gtk::ListBoxBuilder::new() .selection_mode(gtk::SelectionMode::None) + .css_classes(vec![String::from("boxed-list")]) .build(); let name = EntryRow::new(&gettext("Name")); diff --git a/musicus/src/editors/performance.rs b/musicus/src/editors/performance.rs index 55154ec..8d79bb9 100644 --- a/musicus/src/editors/performance.rs +++ b/musicus/src/editors/performance.rs @@ -31,6 +31,7 @@ impl Screen, Performance> for PerformanceEditor { let performer_list = gtk::ListBoxBuilder::new() .selection_mode(gtk::SelectionMode::None) + .css_classes(vec![String::from("boxed-list")]) .build(); let person_row = ButtonRow::new("Person", "Select"); @@ -46,6 +47,7 @@ impl Screen, Performance> for PerformanceEditor { let role_list = gtk::ListBoxBuilder::new() .selection_mode(gtk::SelectionMode::None) + .css_classes(vec![String::from("boxed-list")]) .build(); let reset_role_button = gtk::ButtonBuilder::new() diff --git a/musicus/src/editors/person.rs b/musicus/src/editors/person.rs index af5e32d..0e7d2d8 100644 --- a/musicus/src/editors/person.rs +++ b/musicus/src/editors/person.rs @@ -27,6 +27,7 @@ impl Screen, Person> for PersonEditor { let list = gtk::ListBoxBuilder::new() .selection_mode(gtk::SelectionMode::None) + .css_classes(vec![String::from("boxed-list")]) .build(); let first_name = EntryRow::new(&gettext("First name")); diff --git a/musicus/src/import/medium_preview.rs b/musicus/src/import/medium_preview.rs index ff6c893..3d118c8 100644 --- a/musicus/src/import/medium_preview.rs +++ b/musicus/src/import/medium_preview.rs @@ -141,6 +141,8 @@ impl MediumPreview { let list = gtk::ListBoxBuilder::new() .selection_mode(gtk::SelectionMode::None) + .margin_bottom(12) + .css_classes(vec![String::from("boxed-list")]) .build(); let header = adw::ActionRowBuilder::new() @@ -152,10 +154,7 @@ impl MediumPreview { list.append(&header); if let Some(list) = &last_list { - let frame = gtk::FrameBuilder::new().margin_bottom(12).build(); - - frame.set_child(Some(list)); - self.medium_box.append(&frame); + self.medium_box.append(list); } last_list = Some(list); diff --git a/musicus/src/import/track_editor.rs b/musicus/src/import/track_editor.rs index 3b5fd41..d2ebe60 100644 --- a/musicus/src/import/track_editor.rs +++ b/musicus/src/import/track_editor.rs @@ -27,13 +27,14 @@ impl Screen<(Recording, Vec), Vec> for TrackEditor { get_widget!(builder, gtk::Box, widget); get_widget!(builder, gtk::Button, back_button); get_widget!(builder, gtk::Button, select_button); - get_widget!(builder, gtk::Frame, parts_frame); + get_widget!(builder, adw::Clamp, clamp); - let parts_list = gtk::ListBox::new(); - parts_list.set_selection_mode(gtk::SelectionMode::None); - parts_list.set_vexpand(false); - parts_list.show(); - parts_frame.set_child(Some(&parts_list)); + let parts_list = gtk::ListBoxBuilder::new() + .selection_mode(gtk::SelectionMode::None) + .css_classes(vec![String::from("boxed-list")]) + .build(); + + clamp.set_child(Some(&parts_list)); let this = Rc::new(Self { handle, diff --git a/musicus/src/import/track_selector.rs b/musicus/src/import/track_selector.rs index 69c87c5..0bbc129 100644 --- a/musicus/src/import/track_selector.rs +++ b/musicus/src/import/track_selector.rs @@ -27,13 +27,14 @@ impl Screen, Vec> for TrackSelector { get_widget!(builder, gtk::Box, widget); get_widget!(builder, gtk::Button, back_button); get_widget!(builder, gtk::Button, select_button); - get_widget!(builder, gtk::Frame, tracks_frame); + get_widget!(builder, adw::Clamp, clamp); - let track_list = gtk::ListBox::new(); - track_list.set_selection_mode(gtk::SelectionMode::None); - track_list.set_vexpand(false); - track_list.show(); - tracks_frame.set_child(Some(&track_list)); + let track_list = gtk::ListBoxBuilder::new() + .selection_mode(gtk::SelectionMode::None) + .css_classes(vec![String::from("boxed-list")]) + .build(); + + clamp.set_child(Some(&track_list)); let this = Rc::new(Self { handle, diff --git a/musicus/src/screens/main.rs b/musicus/src/screens/main.rs index 7d79b82..31d46d8 100644 --- a/musicus/src/screens/main.rs +++ b/musicus/src/screens/main.rs @@ -48,7 +48,7 @@ impl Screen<(), ()> for MainScreen { widget.insert_action_group("widget", Some(&actions)); let poe_list = List::new(); - poe_list.widget.add_css_class("navigation-sidebar"); + poe_list.widget.set_css_classes(&["navigation-sidebar"]); poe_list.enable_selection(); let navigator = Navigator::new(Rc::clone(&handle.backend), &handle.window, &empty_screen); diff --git a/musicus/src/screens/player.rs b/musicus/src/screens/player.rs index acc5075..2237615 100644 --- a/musicus/src/screens/player.rs +++ b/musicus/src/screens/player.rs @@ -7,23 +7,17 @@ use musicus_backend::db::Track; use std::cell::{Cell, RefCell}; use std::rc::Rc; -/// Elements for visually representing the playlist. +/// A playable track within the playlist. #[derive(Clone)] -enum ListItem { - /// A playable track. - Track { - /// Index within the playlist. - index: usize, +struct ListItem { + /// Index within the playlist. + index: usize, - /// Whether this is the first track of the recording. - first: bool, + /// Whether this is the first track of the recording. + first: bool, - /// Whether this is the currently played track. - playing: bool, - }, - - /// A separator shown between recordings. - Separator, + /// Whether this is the currently played track. + playing: bool, } pub struct PlayerScreen { @@ -52,6 +46,7 @@ impl Screen<(), ()> for PlayerScreen { get_widget!(builder, gtk::Box, widget); get_widget!(builder, gtk::Button, back_button); + get_widget!(builder, gtk::Box, content); get_widget!(builder, gtk::Label, title_label); get_widget!(builder, gtk::Label, subtitle_label); get_widget!(builder, gtk::Button, previous_button); @@ -64,10 +59,9 @@ impl Screen<(), ()> for PlayerScreen { get_widget!(builder, gtk::Label, duration_label); get_widget!(builder, gtk::Image, play_image); get_widget!(builder, gtk::Image, pause_image); - get_widget!(builder, gtk::Frame, frame); let list = List::new(); - frame.set_child(Some(&list.widget)); + content.append(&list.widget); let event_controller = gtk::EventControllerLegacy::new(); position_scale.add_controller(&event_controller); @@ -209,22 +203,9 @@ impl Screen<(), ()> for PlayerScreen { this.list .set_make_widget_cb(clone!(@weak this => @default-panic, move |index| { - let widget = match this.items.borrow()[index] { - ListItem::Track {index, first, playing} => { - let track = &this.playlist.borrow()[index]; - TrackRow::new(track, first, playing).get_widget() - } - ListItem::Separator => { - gtk::ListBoxRowBuilder::new() - .selectable(false) - .activatable(false) - .child(>k::Separator::new(gtk::Orientation::Horizontal)) - .build() - .upcast() - } - }; - - widget + let item = &this.items.borrow()[index]; + let track = &this.playlist.borrow()[item.index]; + TrackRow::new(track, item.first, item.playing).get_widget() })); this.list @@ -232,9 +213,7 @@ impl Screen<(), ()> for PlayerScreen { .connect_row_activated(clone!(@weak this => move |_, row| { let list_index = row.index(); let list_item = this.items.borrow()[list_index as usize].clone(); - if let ListItem::Track {index, ..} = list_item { - this.handle.backend.pl().set_track(index).unwrap(); - }; + this.handle.backend.pl().set_track(list_item.index).unwrap(); })); player.send_data(); @@ -249,33 +228,22 @@ impl PlayerScreen { let playlist = self.playlist.borrow(); let current_track = self.current_track.get(); - let mut first = true; let mut items = Vec::new(); - let mut last_recording_id = ""; for (index, track) in playlist.iter().enumerate() { let first_track = if track.recording.id != last_recording_id { last_recording_id = &track.recording.id; - - if !first { - items.push(ListItem::Separator); - } else { - first = false; - } - true } else { false }; - let item = ListItem::Track { + items.push(ListItem { index, first: first_track, playing: index == current_track, - }; - - items.push(item); + }); } let length = items.len(); diff --git a/musicus/src/selectors/selector.rs b/musicus/src/selectors/selector.rs index 678cb49..1e35add 100644 --- a/musicus/src/selectors/selector.rs +++ b/musicus/src/selectors/selector.rs @@ -34,10 +34,10 @@ impl Selector { get_widget!(builder, gtk::Button, add_button); get_widget!(builder, gtk::SearchEntry, search_entry); get_widget!(builder, gtk::Stack, stack); - get_widget!(builder, gtk::Frame, frame); + get_widget!(builder, adw::Clamp, clamp); let list = List::new(); - frame.set_child(Some(&list.widget)); + clamp.set_child(Some(&list.widget)); let this = Rc::new(Self { widget, diff --git a/musicus/src/widgets/list.rs b/musicus/src/widgets/list.rs index 841cec0..67b9f03 100644 --- a/musicus/src/widgets/list.rs +++ b/musicus/src/widgets/list.rs @@ -27,8 +27,10 @@ impl List { // let factory = gtk::SignalListItemFactory::new(); // let widget = gtk::ListView::new(Some(&selection), Some(&factory)); - let widget = gtk::ListBox::new(); - widget.set_selection_mode(gtk::SelectionMode::None); + let widget = gtk::ListBoxBuilder::new() + .selection_mode(gtk::SelectionMode::None) + .css_classes(vec![String::from("boxed-list")]) + .build(); let this = Rc::new(Self { widget, diff --git a/musicus/src/widgets/section.rs b/musicus/src/widgets/section.rs index ed8e7cb..d88134c 100644 --- a/musicus/src/widgets/section.rs +++ b/musicus/src/widgets/section.rs @@ -24,10 +24,9 @@ impl Section { get_widget!(builder, gtk::Box, title_box); get_widget!(builder, gtk::Label, title_label); get_widget!(builder, gtk::Label, subtitle_label); - get_widget!(builder, gtk::Frame, frame); title_label.set_label(title); - frame.set_child(Some(&content.get_widget())); + widget.append(&content.get_widget()); Self { widget,