mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 11:47:25 +01:00
Remove unused track list code
This commit is contained in:
parent
b050a7f0ea
commit
cc5febe4a8
1 changed files with 0 additions and 143 deletions
|
|
@ -1,143 +0,0 @@
|
|||
use super::{List, Widget};
|
||||
use gtk::prelude::*;
|
||||
use glib::clone;
|
||||
use itertools::Itertools;
|
||||
use musicus_backend::db::{Recording, Track, Work};
|
||||
use std::{cell::RefCell, rc::Rc};
|
||||
|
||||
/// A widget for displaying a list of tracks.
|
||||
pub struct TrackList {
|
||||
tracks: RefCell<Vec<Track>>,
|
||||
list: Rc<List>,
|
||||
}
|
||||
|
||||
impl TrackList {
|
||||
pub fn new() -> Rc<Self> {
|
||||
let list = List::new();
|
||||
|
||||
let this = Rc::new(Self {
|
||||
tracks: RefCell::new(Vec::new()),
|
||||
list,
|
||||
});
|
||||
|
||||
this.list.set_make_widget_cb(clone!(@weak this => move |index| {
|
||||
this.track_row(index)
|
||||
}));
|
||||
|
||||
this
|
||||
}
|
||||
|
||||
fn track_row(&self, index: usize) -> gtk::Widget {
|
||||
let tracks = self.tracks.borrow();
|
||||
let track = &tracks[index];
|
||||
|
||||
if index > 0 {
|
||||
let previous_track = &tracks[index - 1];
|
||||
if previous_track.recording.id != track.recording.id {
|
||||
return TrackRow::new
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
impl Widget for TrackList {
|
||||
fn get_widget(&self) -> gtk::Widget {
|
||||
self.list.get_widget()
|
||||
}
|
||||
}
|
||||
|
||||
/// Create a new separator row.
|
||||
fn separator() -> gtk::ListBoxRow {
|
||||
gtk::ListBoxRowBuilder::new()
|
||||
.selectable(false)
|
||||
.activatable(false)
|
||||
.child(>k::Separator::new(gtk::Orientation::Horizontal))
|
||||
.build()
|
||||
}
|
||||
|
||||
/// Return an unfinished builder for a recording row.
|
||||
fn recording_row(recording: &Recording) -> adw::ActionRowBuilder {
|
||||
adw::ActionRowBuilder::new()
|
||||
.title(&recording.work.get_title())
|
||||
.subtitle(&recording.get_performers())
|
||||
}
|
||||
|
||||
/// Get a string representing the given list of work parts.
|
||||
fn parts_string(work: &Work, part_indices: &[usize]) -> String {
|
||||
part_indices
|
||||
.iter()
|
||||
.map(|index| work.parts[*index].title.clone())
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ")
|
||||
}
|
||||
|
||||
/// A widget for displaying a single track within a list box.
|
||||
struct TrackRow {
|
||||
pub widget: gtk::ListBoxRow,
|
||||
status_image: gtk::Image,
|
||||
}
|
||||
|
||||
impl TrackRow {
|
||||
/// Create a new track row.
|
||||
///
|
||||
/// Depending on the value of `header`, the row will display additional
|
||||
/// information on the recording.
|
||||
pub fn new(track: &Track, header: bool) -> Self {
|
||||
let widget = gtk::ListBoxRow::new();
|
||||
let content = gtk::Box::new(gtk::Orientation::Horizontal, 6);
|
||||
|
||||
let status_image = gtk::Image::from_icon_name(None);
|
||||
content.append(&status_image);
|
||||
|
||||
if header {
|
||||
let work_label = gtk::LabelBuilder::new()
|
||||
.label(&track.recording.work.get_title())
|
||||
.css_classes(vec![String::from("heading")])
|
||||
.build();
|
||||
|
||||
let performers_label = gtk::LabelBuilder::new()
|
||||
.label(&track.recording.get_performers())
|
||||
.css_classes(vec![String::from("heading")])
|
||||
.margin_bottom(6)
|
||||
.build();
|
||||
|
||||
let labels = gtk::Box::new(gtk::Orientation::Vertical, 0);
|
||||
labels.append(&work_label);
|
||||
labels.append(&performers_label);
|
||||
|
||||
let title = track.title();
|
||||
if !title.is_empty() {
|
||||
let title_label = gtk::Label::new(Some(&track.title()));
|
||||
labels.append(&title_label);
|
||||
}
|
||||
|
||||
content.append(&labels);
|
||||
} else {
|
||||
content.append(&title_label);
|
||||
}
|
||||
|
||||
widget.set_child(Some(&content));
|
||||
|
||||
Self {
|
||||
widget,
|
||||
status_image,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_playing(&self, playing: bool) {
|
||||
if playing {
|
||||
self.status_image
|
||||
.set_from_icon_name(Some("media-playback-start-symbolic"));
|
||||
} else {
|
||||
self.status_image.set_from_icon_name(None);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ListItem {
|
||||
playing: bool,
|
||||
header: Option<(String, String)>,
|
||||
title: Option<String>,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue