Commit Graph

815 Commits

Author SHA1 Message Date
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