# Copyright 2021 (c) Anna Schumaker. from . import column from . import controls from . import model from . import runtime from gi.repository import Gtk import audio import tagdb Model = model.TagModel() def on_filter_pending(filter, pending): runtime.set_visible_count(FilterModel.get_n_items()) FilterModel = Gtk.FilterListModel() FilterModel.connect("notify::pending", on_filter_pending) FilterModel.set_filter(Model.Controls.filter) FilterModel.set_model(Model) Selection = Gtk.MultiSelection() Selection.set_model(FilterModel) def on_row_activate(view, position): track = FilterModel.get_item(position) if audio.Player.play_track(track) == True: Model.tag.track_selected(track) tagdb.save() View = Gtk.ColumnView() View.connect("activate", on_row_activate) View.add_css_class("data-table") View.set_enable_rubberband(True) View.set_hexpand(True) View.set_vexpand(True) View.set_model(Selection) View.append_column(column.Column("#", "tracknumber")) View.append_column(column.Column("Title", "title", width=250, expand=True)) View.append_column(column.Column("Length", "length", align=100)) View.append_column(column.Column("Artist", "artist", width=150)) View.append_column(column.Column("Album", "album", width=150)) View.append_column(column.Column("Year", "year")) View.append_column(column.Column("Count", "playcount")) View.append_column(column.Column("Last Played", "lastplayed", width=150)) Scroll = Gtk.ScrolledWindow() Scroll.set_child(View) def scroll_to_track(track): adj = Scroll.get_vadjustment() for i in range(FilterModel.get_n_items()): if FilterModel.get_item(i) == track: Selection.select_item(i, True) pos = (max(i - 5, 0) / FilterModel.get_n_items()) adj.set_value(pos * adj.get_upper()) return def on_tracks_changed(prev, new): scroll_to_track(new) audio.Player.TrackChanged.register(on_tracks_changed) Box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0) Box.append(Model.Controls) Box.append(Scroll) Box.append(Gtk.Separator.new(Gtk.Orientation.HORIZONTAL)) Box.append(runtime.Box)