Anna Schumaker
e61adceafb
playlist: Add a class for playlist controls
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
c5a4db041c
playlist: Update the visible and runtime labels
...
I do this whenever items_changed() is called so it updates whenever we
update the model.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
9dd017dc43
playlist: Use a bus for TrackAdded and TrackRemoved
...
This helps keep us from sending the items_changed() signal too soon,
before the track finishes initializing.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
e21eca37ae
playlist: Create a function for changing the current tag
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
eac9bde353
playlist: Bind columns to a ListItemFactory
...
Gtk doesn't seem to provide a way to create a ListItem for testing, so I
skip testing this for now.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
9d2efcfedd
playlist: Create a Model and have it shown by the Selection
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
91ef91a5f0
playlist: Create a way to switch tags in the TagModel
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
035fcd3398
playlist: Allow creating models without a Tag
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
1fb4c25fc6
playlist: Create a TagModel as a custom GListModel
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
eb163b27bb
trackdb: Turn Tracks into GObjects
...
So they can be returned directly by the ListModel
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
7b204f2d1b
lib: Give Tags __getitem__() support
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
6e1da0f7b4
playlist: Have the last column expand to fill any remaining space
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
fc9b734e38
playlist: Initialize column widths to some reasonable values
...
And save / restore through the settings file.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
849503eaf2
playlist: Create a custom columns class for the playlist ColumnView
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
fa088ae8ea
playlist: Begin playlist widgets
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
193dd7c85c
sidebar: Add a key event controller to user tagrows
...
And respond to the delete key to remove playlists
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
00d43547e5
sidebar: Create a custom listrow for User playlists
...
With a button that deletes the user-created playlist when clicked
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
6c8903e7fd
sidebar: Bold the top playlist on the trackdb.Stack
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
aa15f9bf69
sidebar: Push selected rows onto the trackdb TagStack
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
d6b7a4bb8b
sidebar: Give child TagRows an indented look
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
3362029123
sidebar: Don't set headers on child TagRows
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
f477f8f12a
sidebar: Load child tagstores during __init__()
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
cf23b4f8e0
sidebar: Respond to child Added and Removed notifications
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
de155f6c88
sidebar: Create ParentTagRows
...
With an expander button that shows or hides its children
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
43033b4e21
sidebar: Create ParentTagBoxes
...
For use displaying Tags and SuperTags
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
ab515326c9
sidebar: Create a UserTagBox
...
With different icons for each type of user playlist
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
e6c936d51e
sidebar: Create LibraryTagRows and a LibraryTagBox for library paths
...
So we can add in buttons for updating and removing individual paths.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
6059081d03
sidebar: Add a header to some TagBoxes
...
I enable it for Genre and Artist tagboxes right now
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
6a044b8d4b
sidebar: Load TagRows during TagBox __init__()
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
2614db8923
sidebar: Give TagBoxes a sort_func()
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
ef759c2e64
sidebar: Give TagBoxes a clear() function
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
ca8d4961de
sidebar: TagBoxes can update tag size when changed
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
bf0dbbe5dc
sidebar: TagBoxes take a tagstore and icon as constructor arguments
...
I use the tagstore to register Added and Removed notifications. From
there, I can create and remove TagRow instances in the listbox.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
9ceb2d8a2f
sidebar: Create a TagRow class
...
This gives me a consistent look to use across each sidebar ListBox
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
6e8bdf1ae1
sidebar: Add a function for adding library paths
...
I make sure to carefully select between the parent folder or the
currently selected file.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
e5ce819b23
sidebar: Add directory chooser widgets
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
bb44fbd128
sidebar: Give the Library tab a few extra widgets
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
ac282cb9e3
sidebar: Create a TagBox class
...
And set it as each of the pages in the sidebar stack
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:45 -04:00
Anna Schumaker
f7b2383ff4
trackdb: Add discnumber to the tracknumber field
...
This is inspired by how Musicbrainz Picard lists tracks during scanning
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:27 -04:00
Anna Schumaker
cd94100c22
trackdb: Set artist sort order during scanning
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:26 -04:00
Anna Schumaker
b0d419e7bb
trackdb: Give the TagStack a NextTrack publisher
...
This is mostly needed so we save the stack after tracks are picked,
otherwise queued tracks will keep reappearing after a restart.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:24 -04:00
Anna Schumaker
d477aeddb2
trackdb: Give TagStacks an autopause counter
...
And change next() to return both a track and a boolean indicating if we
should keep playing
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:23 -04:00
Anna Schumaker
b27b44df38
trackdb: Add a TagStack instance to the trackdb
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:22 -04:00
Anna Schumaker
5870e7e9a1
trackdb: Give TagStacks state related functions
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:20 -04:00
Anna Schumaker
0a8462e5c5
trackdb: Give TagStacks a PushPop publisher
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:19 -04:00
Anna Schumaker
925664f7aa
trackdb: Give stacks an easy way to queue up tracks
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:17 -04:00
Anna Schumaker
db5bfdb550
trackdb: Give TagStacks next() and previous() operations
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:16 -04:00
Anna Schumaker
90cfcd29f6
trackdb: Create a TagStack with push() and pop() operations
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:15 -04:00
Anna Schumaker
1cd9780cdf
trackdb: Have the UpNextPlaylist use Track.remove_from_playlist()
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:13 -04:00
Anna Schumaker
13be9e3ee2
trackdb: Add user playlist support to Tracks
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:55:12 -04:00