2021-06-29 11:22:10 -04:00
|
|
|
# Copyright 2021 (c) Anna Schumaker.
|
2021-06-29 11:44:10 -04:00
|
|
|
from . import column
|
2021-07-11 12:10:47 -04:00
|
|
|
from . import controls
|
2021-07-03 10:07:21 -04:00
|
|
|
from . import model
|
2021-07-11 12:10:47 -04:00
|
|
|
from . import runtime
|
2021-06-29 11:22:10 -04:00
|
|
|
from gi.repository import Gtk
|
2021-07-05 13:08:08 -04:00
|
|
|
import audio
|
2021-07-26 11:15:15 -04:00
|
|
|
import tagdb
|
2021-06-29 11:22:10 -04:00
|
|
|
|
2021-07-03 10:07:21 -04:00
|
|
|
Model = model.TagModel()
|
|
|
|
|
2021-07-11 12:10:47 -04:00
|
|
|
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)
|
|
|
|
|
2021-07-12 16:11:51 -04:00
|
|
|
Selection = Gtk.MultiSelection()
|
2021-07-11 12:10:47 -04:00
|
|
|
Selection.set_model(FilterModel)
|
2021-06-29 11:22:10 -04:00
|
|
|
|
2021-07-05 13:08:08 -04:00
|
|
|
def on_row_activate(view, position):
|
|
|
|
track = FilterModel.get_item(position)
|
2021-09-06 13:12:40 -04:00
|
|
|
if audio.play_track(track):
|
2021-07-05 13:08:08 -04:00
|
|
|
Model.tag.track_selected(track)
|
2021-07-26 11:15:15 -04:00
|
|
|
tagdb.save()
|
2021-07-05 13:08:08 -04:00
|
|
|
|
2021-06-29 11:22:10 -04:00
|
|
|
View = Gtk.ColumnView()
|
2021-07-05 13:08:08 -04:00
|
|
|
View.connect("activate", on_row_activate)
|
2021-06-29 17:01:30 -04:00
|
|
|
View.add_css_class("data-table")
|
2021-07-12 16:11:51 -04:00
|
|
|
View.set_enable_rubberband(True)
|
2021-06-29 11:22:10 -04:00
|
|
|
View.set_hexpand(True)
|
2021-07-11 12:10:47 -04:00
|
|
|
View.set_vexpand(True)
|
2021-06-29 11:22:10 -04:00
|
|
|
View.set_model(Selection)
|
|
|
|
|
2021-11-03 13:11:31 -04:00
|
|
|
View.append_column(column.OldColumn("#", "tracknumber"))
|
|
|
|
View.append_column(column.OldColumn("Title", "title", width=250, expand=True))
|
|
|
|
View.append_column(column.OldColumn("Length", "length", align=100))
|
|
|
|
View.append_column(column.OldColumn("Artist", "artist", width=150))
|
|
|
|
View.append_column(column.OldColumn("Album", "album", width=150))
|
|
|
|
View.append_column(column.OldColumn("Year", "year"))
|
|
|
|
View.append_column(column.OldColumn("Count", "playcount"))
|
|
|
|
View.append_column(column.OldColumn("Last Played", "lastplayed", width=150))
|
2021-06-29 11:44:10 -04:00
|
|
|
|
2021-06-29 11:22:10 -04:00
|
|
|
Scroll = Gtk.ScrolledWindow()
|
|
|
|
Scroll.set_child(View)
|
2021-07-11 12:10:47 -04:00
|
|
|
|
2021-07-19 13:40:16 -04:00
|
|
|
def scroll_to_track(track):
|
2021-07-31 10:03:42 -04:00
|
|
|
adj = View.get_vadjustment()
|
2021-07-19 13:40:16 -04:00
|
|
|
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
|
|
|
|
|
2021-07-31 13:12:43 -04:00
|
|
|
def scroll_to_current(*args):
|
|
|
|
scroll_to_track(audio.Player.track)
|
|
|
|
Model.Controls.jump.connect("clicked", scroll_to_current)
|
|
|
|
|
2021-08-30 16:27:33 -04:00
|
|
|
def on_tracks_changed(player, prev, new):
|
2021-07-19 13:40:16 -04:00
|
|
|
scroll_to_track(new)
|
2021-08-30 16:27:33 -04:00
|
|
|
audio.Player.connect("track-changed", on_tracks_changed)
|
2021-07-19 13:40:16 -04:00
|
|
|
|
2021-07-31 13:12:43 -04:00
|
|
|
|
2021-07-11 12:10:47 -04:00
|
|
|
Box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
|
|
|
|
Box.append(Model.Controls)
|
|
|
|
Box.append(Scroll)
|
2021-07-14 14:39:37 -04:00
|
|
|
Box.append(Gtk.Separator.new(Gtk.Orientation.HORIZONTAL))
|
|
|
|
Box.append(runtime.Box)
|