Anna Schumaker
f91334dab1
playlist: Add a "Add to Playlist" button to the Controls
...
And display the new popover when pressed
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
7b53536b27
playlist: Create a popover for adding tracks to playlists
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
d2362368f3
playlist: Add a Controls instance above the ColumnView
...
And set up a FilterListModel so we can filter tracks
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
315312615e
playlist: Add a Filter to the controls
...
And respond when text is typed in the search bar
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
e8fc15dc6c
playlist: Create a custom filter for matching tracks
...
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
Anna Schumaker
0952eeccde
playlist: Configure playlist random and loop buttons
...
Sometimes the user is able to change them, but sometimes not. We also
need to set to the current state when changing the current playlist.
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-07-23 12:56:02 -04:00
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