[vlc-commits] [Git][videolan/vlc][master] 6 commits: macosx: Extract view setup parts in VLCLibraryAudioDataSource into separate methods
Jean-Baptiste Kempf (@jbk)
gitlab at videolan.org
Tue Dec 13 11:49:57 UTC 2022
Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC
Commits:
a9084b53 by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Extract view setup parts in VLCLibraryAudioDataSource into separate methods
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
0bd9b55c by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Define songs table column identifiers as static global NSStrings
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
cd272a2a by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Add NSSortDescriptors to songs table view
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
02e4203a by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Make song table view headers functional, change sort
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
855ea3ea by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Correctly set initial sort on song table view init
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
02343458 by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Ensure song table view headers are updated on library sort change
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
1 changed file:
- modules/gui/macosx/library/audio-library/VLCLibraryAudioDataSource.m
Changes:
=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioDataSource.m
=====================================
@@ -44,6 +44,23 @@
#import "views/VLCImageView.h"
#import "views/VLCSubScrollView.h"
+static NSString *VLCLibrarySongsTableViewSongPlayingColumnIdentifier = @"VLCLibrarySongsTableViewSongPlayingColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewTitleColumnIdentifier = @"VLCLibrarySongsTableViewTitleColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewDurationColumnIdentifier = @"VLCLibrarySongsTableViewDurationColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewArtistColumnIdentifier = @"VLCLibrarySongsTableViewArtistColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewAlbumColumnIdentifier = @"VLCLibrarySongsTableViewAlbumColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewGenreColumnIdentifier = @"VLCLibrarySongsTableViewGenreColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewPlayCountColumnIdentifier = @"VLCLibrarySongsTableViewPlayCountColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewYearColumnIdentifier = @"VLCLibrarySongsTableViewYearColumnIdentifier";
+
+static NSString *VLCLibraryTitleSortDescriptorKey = @"VLCLibraryTitleSortDescriptorKey";
+static NSString *VLCLibraryDurationSortDescriptorKey = @"VLCLibraryDurationSortDescriptorKey";
+static NSString *VLCLibraryArtistSortDescriptorKey = @"VLCLibraryArtistSortDescriptorKey";
+static NSString *VLCLibraryAlbumSortDescriptorKey = @"VLCLibraryAlbumSortDescriptorKey";
+static NSString *VLCLibraryPlayCountSortDescriptorKey = @"VLCLibraryPlayCountSortDescriptorKey";
+static NSString *VLCLibraryYearSortDescriptorKey = @"VLCLibraryYearSortDescriptorKey";
+// TODO: Add sorting by genre
+
@interface VLCLibraryAudioDataSource ()
{
VLCLibraryCollectionViewFlowLayout *_collectionViewFlowLayout;
@@ -226,6 +243,14 @@
}
- (void)setup
+{
+ [self setupCollectionView];
+ [self setupTableViews];
+
+ _audioLibrarySegment = -1; // Force setAudioLibrarySegment to do something always on first try
+}
+
+- (void)setupCollectionView
{
_collectionView.dataSource = self;
_collectionView.delegate = self;
@@ -234,12 +259,12 @@
NSNib *albumSupplementaryDetailView = [[NSNib alloc] initWithNibNamed:@"VLCLibraryCollectionViewAlbumSupplementaryDetailView" bundle:nil];
[_collectionView registerNib:albumSupplementaryDetailView
- forSupplementaryViewOfKind:VLCLibraryCollectionViewAlbumSupplementaryDetailViewKind
+ forSupplementaryViewOfKind:VLCLibraryCollectionViewAlbumSupplementaryDetailViewKind
withIdentifier:VLCLibraryCollectionViewAlbumSupplementaryDetailViewIdentifier];
NSNib *audioGroupSupplementaryDetailView = [[NSNib alloc] initWithNibNamed:@"VLCLibraryCollectionViewAudioGroupSupplementaryDetailView" bundle:nil];
[_collectionView registerNib:audioGroupSupplementaryDetailView
- forSupplementaryViewOfKind:VLCLibraryCollectionViewAudioGroupSupplementaryDetailViewKind
+ forSupplementaryViewOfKind:VLCLibraryCollectionViewAudioGroupSupplementaryDetailViewKind
withIdentifier:VLCLibraryCollectionViewAudioGroupSupplementaryDetailViewIdentifier];
NSNib *mediaItemSupplementaryDetailView = [[NSNib alloc] initWithNibNamed:@"VLCLibraryCollectionViewMediaItemSupplementaryDetailView" bundle:nil];
@@ -249,15 +274,99 @@
_collectionViewFlowLayout = [[VLCLibraryCollectionViewFlowLayout alloc] init];
_collectionView.collectionViewLayout = _collectionViewFlowLayout;
+}
+- (void)setupTableViews
+{
_groupSelectionTableView.target = self;
_groupSelectionTableView.doubleAction = @selector(groubSelectionDoubleClickAction:);
+
_collectionSelectionTableView.target = self;
_collectionSelectionTableView.doubleAction = @selector(collectionSelectionDoubleClickAction:);
+
+ [self setupSongsTableView];
+}
+
+- (void)setupSongsTableView
+{
_songsTableView.target = self;
_songsTableView.doubleAction = @selector(songDoubleClickAction:);
- _audioLibrarySegment = -1; // Force setAudioLibrarySegment to do something always on first try
+ [self setupPrototypeSortDescriptorsForTableView:_songsTableView];
+ [self setupExistingSortForTableView:_songsTableView];
+}
+
+- (void)setupPrototypeSortDescriptorsForTableView:(NSTableView *)tableView
+{
+ for(NSTableColumn *column in tableView.tableColumns) {
+ NSSortDescriptor * const columnSortDescriptor = [self sortDescriptorPrototypeForSongsTableViewColumnIdentifier:column.identifier];
+
+ if(columnSortDescriptor) {
+ column.sortDescriptorPrototype = columnSortDescriptor;
+ }
+ }
+}
+
+- (NSSortDescriptor *)sortDescriptorPrototypeForSongsTableViewColumnIdentifier:(NSString *)columnIdentifier
+{
+ if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewTitleColumnIdentifier]) {
+ return [[NSSortDescriptor alloc] initWithKey:VLCLibraryTitleSortDescriptorKey ascending:true];
+
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewDurationColumnIdentifier]) {
+ return [[NSSortDescriptor alloc] initWithKey:VLCLibraryDurationSortDescriptorKey ascending:true];
+
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewArtistColumnIdentifier]) {
+ return [[NSSortDescriptor alloc] initWithKey:VLCLibraryArtistSortDescriptorKey ascending:true];
+
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewAlbumColumnIdentifier]) {
+ return [[NSSortDescriptor alloc] initWithKey:VLCLibraryAlbumSortDescriptorKey ascending:true];
+
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewPlayCountColumnIdentifier]) {
+ return [[NSSortDescriptor alloc] initWithKey:VLCLibraryPlayCountSortDescriptorKey ascending:true];
+
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewYearColumnIdentifier]) {
+ return [[NSSortDescriptor alloc] initWithKey:VLCLibraryYearSortDescriptorKey ascending:true];
+
+ }
+
+ return nil;
+}
+
+- (void)setupExistingSortForTableView:(NSTableView *)tableView
+{
+ const VLCLibraryController * const libraryController = VLCMain.sharedInstance.libraryController;
+ const vlc_ml_sorting_criteria_t existingSortCriteria = libraryController.lastSortingCriteria;
+
+ NSString *sortDescriptorKey = [self sortDescriptorKeyFromVlcMlSortingCriteria:existingSortCriteria];
+ const NSSortDescriptor * const sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortDescriptorKey
+ ascending:!libraryController.descendingLibrarySorting];
+
+ tableView.sortDescriptors = @[sortDescriptor];
+}
+
+- (NSString *)sortDescriptorKeyFromVlcMlSortingCriteria:(vlc_ml_sorting_criteria_t)existingSortCriteria
+{
+ if (existingSortCriteria == VLC_ML_SORTING_DEFAULT) {
+ return VLCLibraryTitleSortDescriptorKey;
+
+ } else if (existingSortCriteria == VLC_ML_SORTING_DURATION) {
+ return VLCLibraryDurationSortDescriptorKey;
+
+ } else if (existingSortCriteria == VLC_ML_SORTING_ARTIST) {
+ return VLCLibraryArtistSortDescriptorKey;
+
+ } else if (existingSortCriteria == VLC_ML_SORTING_ALBUM) {
+ return VLCLibraryAlbumSortDescriptorKey;
+
+ } else if (existingSortCriteria == VLC_ML_SORTING_PLAYCOUNT) {
+ return VLCLibraryPlayCountSortDescriptorKey;
+
+ } else if (existingSortCriteria == VLC_ML_SORTING_RELEASEDATE) {
+ return VLCLibraryYearSortDescriptorKey;
+
+ }
+
+ return VLCLibraryTitleSortDescriptorKey;
}
- (void)reloadData
@@ -274,6 +383,7 @@
[self.collectionSelectionTableView reloadData];
[self.groupSelectionTableView reloadData];
[self.songsTableView reloadData];
+ [self setupExistingSortForTableView:_songsTableView];
}
- (void)setAudioLibrarySegment:(VLCAudioLibrarySegment)audioLibrarySegment
@@ -332,30 +442,30 @@
NSString *cellText = @"";
NSString *cellIdentifier = @"";
- if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewSongPlayingColumnIdentifier"]) {
+ if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewSongPlayingColumnIdentifier]) {
VLCLibrarySongsTableViewSongPlayingTableCellView *cellView = (VLCLibrarySongsTableViewSongPlayingTableCellView*)[tableView makeViewWithIdentifier:@"VLCLibrarySongsTableViewSongPlayingTableCellViewIdentifier" owner:self];
NSAssert(cellView, @"Unexpectedly received null cellview");
cellView.representedMediaItem = [self libraryItemAtRow:row];
return cellView;
- } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewTitleColumnIdentifier"]) {
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewTitleColumnIdentifier]) {
cellIdentifier = @"VLCLibrarySongsTableViewTitleTableCellViewIdentifier";
cellText = mediaItem.title;
- } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewDurationColumnIdentifier"]) {
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewDurationColumnIdentifier]) {
cellIdentifier = @"VLCLibrarySongsTableViewDurationTableCellViewIdentifier";
cellText = mediaItem.durationString;
- } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewArtistColumnIdentifier"]) {
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewArtistColumnIdentifier]) {
cellIdentifier = @"VLCLibrarySongsTableViewArtistTableCellViewIdentifier";
cellText = album.artistName.length == 0 ? @"" : album.artistName;
- } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewAlbumColumnIdentifier"]) {
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewAlbumColumnIdentifier]) {
cellIdentifier = @"VLCLibrarySongsTableViewAlbumTableCellViewIdentifier";
cellText = album.title.length == 0 ? @"" : album.title;
- } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewGenreColumnIdentifier"]) {
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewGenreColumnIdentifier]) {
cellIdentifier = @"VLCLibrarySongsTableViewGenreTableCellViewIdentifier";
cellText = genre.name.length == 0 ? @"" : genre.name;
- } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewPlayCountColumnIdentifier"]) {
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewPlayCountColumnIdentifier]) {
cellIdentifier = @"VLCLibrarySongsTableViewPlayCountTableCellViewIdentifier";
cellText = [@(mediaItem.playCount) stringValue];
- } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewYearColumnIdentifier"]) {
+ } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewYearColumnIdentifier]) {
cellIdentifier = @"VLCLibrarySongsTableViewYearTableCellViewIdentifier";
cellText = [@(mediaItem.year) stringValue];
} else {
@@ -402,6 +512,40 @@
[self.groupSelectionTableView reloadData];
}
+- (void)tableView:(NSTableView *)tableView sortDescriptorsDidChange:(NSArray<NSSortDescriptor *> *)oldDescriptors
+{
+ const NSSortDescriptor * const sortDescriptor = tableView.sortDescriptors.firstObject;
+ const vlc_ml_sorting_criteria_t sortCriteria = [self sortDescriptorKeyToVlcMlSortingCriteria:sortDescriptor.key];
+
+ [VLCMain.sharedInstance.libraryController sortByCriteria:sortCriteria andDescending:!sortDescriptor.ascending];
+ [self reloadData];
+}
+
+- (vlc_ml_sorting_criteria_t)sortDescriptorKeyToVlcMlSortingCriteria:(NSString *)sortDescriptorKey
+{
+ if ([sortDescriptorKey isEqualToString:VLCLibraryTitleSortDescriptorKey]) {
+ return VLC_ML_SORTING_DEFAULT;
+
+ } else if ([sortDescriptorKey isEqualToString:VLCLibraryDurationSortDescriptorKey]) {
+ return VLC_ML_SORTING_DURATION;
+
+ } else if ([sortDescriptorKey isEqualToString:VLCLibraryArtistSortDescriptorKey]) {
+ return VLC_ML_SORTING_ARTIST;
+
+ } else if ([sortDescriptorKey isEqualToString:VLCLibraryAlbumSortDescriptorKey]) {
+ return VLC_ML_SORTING_ALBUM;
+
+ } else if ([sortDescriptorKey isEqualToString:VLCLibraryPlayCountSortDescriptorKey]) {
+ return VLC_ML_SORTING_PLAYCOUNT;
+
+ } else if ([sortDescriptorKey isEqualToString:VLCLibraryYearSortDescriptorKey]) {
+ return VLC_ML_SORTING_RELEASEDATE;
+
+ }
+
+ return VLC_ML_SORTING_DEFAULT;
+}
+
#pragma mark - table view double click actions
- (void)groubSelectionDoubleClickAction:(id)sender
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/2d9100ed9c1780d5b1eada4d64712265f36a5139...02343458eadb9eccb4ba8befd4e470930d9913f3
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/2d9100ed9c1780d5b1eada4d64712265f36a5139...02343458eadb9eccb4ba8befd4e470930d9913f3
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list