diff --git a/Persephone.xcodeproj/project.pbxproj b/Persephone.xcodeproj/project.pbxproj index 2c4c0db..9d49b1d 100644 --- a/Persephone.xcodeproj/project.pbxproj +++ b/Persephone.xcodeproj/project.pbxproj @@ -18,8 +18,9 @@ E408D3C2220E134F0006D9BE /* AlbumViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E408D3C1220E134F0006D9BE /* AlbumViewController.swift */; }; E408D3CA220E341D0006D9BE /* AlbumItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E408D3C8220E341D0006D9BE /* AlbumItem.swift */; }; E408D3CB220E341D0006D9BE /* AlbumItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = E408D3C9220E341D0006D9BE /* AlbumItem.xib */; }; - E40FE719221B48E300A4223F /* AlbumViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = E40FE718221B48E300A4223F /* AlbumViewLayout.swift */; }; + E40F41F3221EDE27004B6CB8 /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = E40F41F2221EDE27004B6CB8 /* Preferences.swift */; }; E40FE7132219AD7A00A4223F /* AlbumItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E40FE7122219AD7A00A4223F /* AlbumItemView.swift */; }; + E40FE719221B48E300A4223F /* AlbumViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = E40FE718221B48E300A4223F /* AlbumViewLayout.swift */; }; E41B22C021FB6BBA00D544F6 /* libmpdclient.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E41B22BF21FB6BBA00D544F6 /* libmpdclient.2.dylib */; settings = {ATTRIBUTES = (Required, ); }; }; E41B22C121FB6C3300D544F6 /* libmpdclient.2.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = E41B22BF21FB6BBA00D544F6 /* libmpdclient.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; E41B22C621FB932700D544F6 /* MPDClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41B22C521FB932700D544F6 /* MPDClient.swift */; }; @@ -38,6 +39,7 @@ E4EB237B220F7CF1008C70C0 /* Album.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4EB237A220F7CF1008C70C0 /* Album.swift */; }; E4F6B460221E119B00ACF42A /* QueueDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F6B45F221E119B00ACF42A /* QueueDataSource.swift */; }; E4F6B463221E125900ACF42A /* SongItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F6B462221E125900ACF42A /* SongItem.swift */; }; + E4F6B467221E233200ACF42A /* AlbumDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F6B466221E233200ACF42A /* AlbumDataSource.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -90,8 +92,9 @@ E408D3C1220E134F0006D9BE /* AlbumViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumViewController.swift; sourceTree = ""; }; E408D3C8220E341D0006D9BE /* AlbumItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumItem.swift; sourceTree = ""; }; E408D3C9220E341D0006D9BE /* AlbumItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AlbumItem.xib; sourceTree = ""; }; - E40FE718221B48E300A4223F /* AlbumViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumViewLayout.swift; sourceTree = ""; }; + E40F41F2221EDE27004B6CB8 /* Preferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = ""; }; E40FE7122219AD7A00A4223F /* AlbumItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumItemView.swift; sourceTree = ""; }; + E40FE718221B48E300A4223F /* AlbumViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumViewLayout.swift; sourceTree = ""; }; E41B22BF21FB6BBA00D544F6 /* libmpdclient.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libmpdclient.2.dylib; path = libmpdclient/output/libmpdclient.2.dylib; sourceTree = ""; }; E41B22C421FB715A00D544F6 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; E41B22C521FB932700D544F6 /* MPDClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPDClient.swift; sourceTree = ""; }; @@ -145,6 +148,7 @@ E4EB237A220F7CF1008C70C0 /* Album.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Album.swift; sourceTree = ""; }; E4F6B45F221E119B00ACF42A /* QueueDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueueDataSource.swift; sourceTree = ""; }; E4F6B462221E125900ACF42A /* SongItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongItem.swift; sourceTree = ""; }; + E4F6B466221E233200ACF42A /* AlbumDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumDataSource.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -183,6 +187,7 @@ E41B22BE21FB6B3300D544F6 /* Frameworks */, E42A8F3922176D6400A13ED9 /* LICENSE.md */, E42A8F3A22176D6400A13ED9 /* README.md */, + E40F41F1221EDD20004B6CB8 /* Recovered References */, ); sourceTree = ""; }; @@ -327,14 +332,6 @@ path = mpd; sourceTree = ""; }; - E41EA46D221715820068EF46 /* Models */ = { - isa = PBXGroup; - children = ( - E41EA46E221715910068EF46 /* Preferences.swift */, - ); - path = Models; - sourceTree = ""; - }; E4A642DB220912FA00067D21 /* MPDClient */ = { isa = PBXGroup; children = ( @@ -391,6 +388,7 @@ isa = PBXGroup; children = ( E4F6B45F221E119B00ACF42A /* QueueDataSource.swift */, + E4F6B466221E233200ACF42A /* AlbumDataSource.swift */, ); path = DataSources; sourceTree = ""; @@ -398,6 +396,7 @@ E4F6B461221E124700ACF42A /* Models */ = { isa = PBXGroup; children = ( + E40F41F2221EDE27004B6CB8 /* Preferences.swift */, E4F6B462221E125900ACF42A /* SongItem.swift */, ); path = Models; @@ -545,6 +544,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E4F6B467221E233200ACF42A /* AlbumDataSource.swift in Sources */, E408D3C2220E134F0006D9BE /* AlbumViewController.swift in Sources */, E4928E0B2218D62A001D4BEA /* CGColor.swift in Sources */, E4F6B460221E119B00ACF42A /* QueueDataSource.swift in Sources */, @@ -554,10 +554,10 @@ E408D3B6220DD8970006D9BE /* Notification.swift in Sources */, E408D3B9220DE98F0006D9BE /* NSUserInterfaceItemIdentifier.swift in Sources */, E4EB2379220F10B8008C70C0 /* Pair.swift in Sources */, - E41EA46F221715910068EF46 /* Preferences.swift in Sources */, E4F6B463221E125900ACF42A /* SongItem.swift in Sources */, E465049A21E94DF500A70F4C /* WindowController.swift in Sources */, E41B22C621FB932700D544F6 /* MPDClient.swift in Sources */, + E40F41F3221EDE27004B6CB8 /* Preferences.swift in Sources */, E407861C2110CE6E006887B1 /* AppDelegate.swift in Sources */, E40FE7132219AD7A00A4223F /* AlbumItemView.swift in Sources */, E4E8CC9A22075D370024217A /* Song.swift in Sources */, diff --git a/Persephone/Controllers/AlbumViewController.swift b/Persephone/Controllers/AlbumViewController.swift index 517d4ac..42bec54 100644 --- a/Persephone/Controllers/AlbumViewController.swift +++ b/Persephone/Controllers/AlbumViewController.swift @@ -9,13 +9,13 @@ import Cocoa class AlbumViewController: NSViewController, - NSCollectionViewDataSource, NSCollectionViewDelegate, NSCollectionViewDelegateFlowLayout { - var albums: [MPDClient.Album] = [] let paddingWidth: CGFloat = 40 let gutterWidth: CGFloat = 20 + var dataSource = AlbumDataSource() + override func viewDidLoad() { super.viewDidLoad() @@ -34,6 +34,8 @@ class AlbumViewController: NSViewController, name: Notification.willDisconnect, object: AppDelegate.mpdClient ) + + albumCollectionView.dataSource = dataSource } override func viewWillLayout() { @@ -46,48 +48,16 @@ class AlbumViewController: NSViewController, guard let albums = notification.userInfo?[Notification.albumsKey] as? [MPDClient.Album] else { return } - self.albums = albums - + dataSource.albums = albums albumCollectionView.reloadData() } @objc func clearAlbums(_ notification: Notification) { - self.albums = [] + dataSource.albums = [] albumCollectionView.reloadData() } - func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int { - return albums.count - } - - func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem { - let item = collectionView.makeItem(withIdentifier: .albumItem, for: indexPath) - guard let albumItem = item as? AlbumItem else { return item } - - albumItem.view.wantsLayer = true - albumItem.setAlbum(albums[indexPath.item]) - - return albumItem - } - - func collectionView(_ collectionView: NSCollectionView, layout: NSCollectionViewLayout, sizeForItemAt: IndexPath) -> NSSize { - let width = collectionView.frame.size.width - var divider: CGFloat = 1 - var itemWidth: CGFloat = 0 - - repeat { - let totalPaddingWidth = paddingWidth * 2 - let totalGutterWidth = (divider - 1) * (gutterWidth + 1) - itemWidth = (width - totalPaddingWidth - totalGutterWidth) / divider - divider = divider + 1 - } while itemWidth > 180 - - let itemHeight = itemWidth + 39 - - return NSSize(width: itemWidth, height: itemHeight) - } - @IBOutlet var albumScrollView: NSScrollView! @IBOutlet var albumCollectionView: NSCollectionView! } diff --git a/Persephone/DataSources/AlbumDataSource.swift b/Persephone/DataSources/AlbumDataSource.swift new file mode 100644 index 0000000..7d63005 --- /dev/null +++ b/Persephone/DataSources/AlbumDataSource.swift @@ -0,0 +1,27 @@ +// +// AlbumDataSource.swift +// Persephone +// +// Created by Daniel Barber on 2019/2/20. +// Copyright © 2019 Dan Barber. All rights reserved. +// + +import Cocoa + +class AlbumDataSource: NSObject, NSCollectionViewDataSource { + var albums: [MPDClient.Album] = [] + + func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int { + return albums.count + } + + func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem { + let item = collectionView.makeItem(withIdentifier: .albumItem, for: indexPath) + guard let albumItem = item as? AlbumItem else { return item } + + albumItem.view.wantsLayer = true + albumItem.setAlbum(albums[indexPath.item]) + + return albumItem + } +} diff --git a/Persephone/Resources/Base.lproj/Main.storyboard b/Persephone/Resources/Base.lproj/Main.storyboard index dce8076..be19814 100644 --- a/Persephone/Resources/Base.lproj/Main.storyboard +++ b/Persephone/Resources/Base.lproj/Main.storyboard @@ -1027,7 +1027,6 @@ -