mirror of
https://github.com/danbee/persephone
synced 2025-03-04 08:39:11 +00:00
Wire up main queue menu options
This commit is contained in:
parent
a88d55d1a4
commit
44afb98f89
@ -135,6 +135,27 @@ class AppDelegate: NSObject,
|
|||||||
App.store.dispatch(MPDPrevTrackAction())
|
App.store.dispatch(MPDPrevTrackAction())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@IBAction func removeQueueSongMenuAction(_ sender: NSMenuItem) {
|
||||||
|
guard let queueItem = App.store.state.uiState.selectedQueueItem
|
||||||
|
else { return }
|
||||||
|
|
||||||
|
App.store.dispatch(MPDRemoveTrack(queuePos: queueItem.queuePos))
|
||||||
|
}
|
||||||
|
@IBAction func clearQueueMenuAction(_ sender: NSMenuItem) {
|
||||||
|
let alert = NSAlert()
|
||||||
|
alert.alertStyle = .informational
|
||||||
|
alert.messageText = "Are you sure you want to clear the queue?"
|
||||||
|
alert.informativeText = "You can’t undo this action."
|
||||||
|
alert.addButton(withTitle: "Clear")
|
||||||
|
alert.addButton(withTitle: "Cancel")
|
||||||
|
|
||||||
|
let result = alert.runModal()
|
||||||
|
|
||||||
|
if result == .alertFirstButtonReturn {
|
||||||
|
App.store.dispatch(UpdateQueueAction(queue: []))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@IBAction func playSelectedSongAction(_ sender: NSMenuItem) {
|
@IBAction func playSelectedSongAction(_ sender: NSMenuItem) {
|
||||||
guard let song = App.store.state.uiState.selectedSong
|
guard let song = App.store.state.uiState.selectedSong
|
||||||
else { return }
|
else { return }
|
||||||
|
|||||||
@ -93,6 +93,16 @@ class QueueViewController: NSViewController,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func outlineViewSelectionDidChange(_ notification: Notification) {
|
||||||
|
if queueView.selectedRow >= 1 {
|
||||||
|
let queueItem = dataSource.queue[queueView.selectedRow - 1]
|
||||||
|
|
||||||
|
App.store.dispatch(SetSelectedQueueItem(selectedQueueItem: queueItem))
|
||||||
|
} else {
|
||||||
|
App.store.dispatch(SetSelectedQueueItem(selectedQueueItem: nil))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func cellForSongTitle(_ outlineView: NSOutlineView, with queueItem: QueueItem) -> NSView {
|
func cellForSongTitle(_ outlineView: NSOutlineView, with queueItem: QueueItem) -> NSView {
|
||||||
let cellView = outlineView.makeView(
|
let cellView = outlineView.makeView(
|
||||||
withIdentifier: .queueSongTitle,
|
withIdentifier: .queueSongTitle,
|
||||||
|
|||||||
@ -79,8 +79,18 @@
|
|||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<menu key="submenu" title="Queue" id="CWM-rf-Ozu">
|
<menu key="submenu" title="Queue" id="CWM-rf-Ozu">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Remove song" id="x9q-fx-zaQ">
|
<menuItem title="Remove Song" id="x9q-fx-zaQ">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="removeQueueSongMenuAction:" target="Voe-Tx-rLC" id="stm-VC-mfp"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="MG8-dW-RM9"/>
|
||||||
|
<menuItem title="Clear…" id="x6w-87-3xV">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="clearQueueMenuAction:" target="Voe-Tx-rLC" id="q00-ts-Swv"/>
|
||||||
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
</items>
|
</items>
|
||||||
</menu>
|
</menu>
|
||||||
@ -88,13 +98,13 @@
|
|||||||
<menuItem title="Song" id="elk-xW-VXb">
|
<menuItem title="Song" id="elk-xW-VXb">
|
||||||
<menu key="submenu" title="Song" autoenablesItems="NO" id="RuT-kk-xTu">
|
<menu key="submenu" title="Song" autoenablesItems="NO" id="RuT-kk-xTu">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Play selected song" enabled="NO" id="dyT-9E-DRY">
|
<menuItem title="Play Selected Song" enabled="NO" id="dyT-9E-DRY">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="playSelectedSongAction:" target="Voe-Tx-rLC" id="jIo-ux-Mhr"/>
|
<action selector="playSelectedSongAction:" target="Voe-Tx-rLC" id="jIo-ux-Mhr"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Add selected song to queue" enabled="NO" id="JFH-jT-sBp">
|
<menuItem title="Add Selected Song to Queue" enabled="NO" id="JFH-jT-sBp">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="addSelectedSongToQueueAction:" target="Voe-Tx-rLC" id="9j9-Xd-g0D"/>
|
<action selector="addSelectedSongToQueueAction:" target="Voe-Tx-rLC" id="9j9-Xd-g0D"/>
|
||||||
@ -575,7 +585,7 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="328" height="219"/>
|
<rect key="frame" x="0.0" y="0.0" width="328" height="219"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="sourceList" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" outlineTableColumn="0Co-uF-CCB" id="jEJ-jg-fll" customClass="QueueView" customModule="Persephone" customModuleProvider="target">
|
<outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="sourceList" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" outlineTableColumn="0Co-uF-CCB" id="jEJ-jg-fll">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="328" height="219"/>
|
<rect key="frame" x="0.0" y="0.0" width="328" height="219"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
@ -795,6 +805,7 @@
|
|||||||
<color key="primaryBackgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="primaryBackgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="gPn-fP-LFc" id="LQ2-Vl-r08"/>
|
<outlet property="delegate" destination="gPn-fP-LFc" id="LQ2-Vl-r08"/>
|
||||||
|
<outlet property="menu" destination="Rif-KP-4xb" id="f7w-Ot-TKf"/>
|
||||||
</connections>
|
</connections>
|
||||||
</collectionView>
|
</collectionView>
|
||||||
</subviews>
|
</subviews>
|
||||||
@ -822,8 +833,18 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<customObject id="uex-Ws-5X4" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
<customObject id="uex-Ws-5X4" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||||
|
<menu id="Rif-KP-4xb">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Play album" id="Cuu-eF-cPb">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Add album to queue" id="pUA-0C-zhs">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="531" y="1358"/>
|
<point key="canvasLocation" x="329" y="1370"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
<resources>
|
<resources>
|
||||||
|
|||||||
@ -18,6 +18,10 @@ struct DatabaseUpdateStartedAction: Action {}
|
|||||||
|
|
||||||
struct DatabaseUpdateFinishedAction: Action {}
|
struct DatabaseUpdateFinishedAction: Action {}
|
||||||
|
|
||||||
|
struct SetSelectedQueueItem: Action {
|
||||||
|
let selectedQueueItem: QueueItem?
|
||||||
|
}
|
||||||
|
|
||||||
struct SetSelectedSong: Action {
|
struct SetSelectedSong: Action {
|
||||||
let selectedSong: Song?
|
let selectedSong: Song?
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,6 +30,9 @@ func uiReducer(action: Action, state: UIState?) -> UIState {
|
|||||||
case let action as SetSelectedSong:
|
case let action as SetSelectedSong:
|
||||||
state.selectedSong = action.selectedSong
|
state.selectedSong = action.selectedSong
|
||||||
|
|
||||||
|
case let action as SetSelectedQueueItem:
|
||||||
|
state.selectedQueueItem = action.selectedQueueItem
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,4 +20,6 @@ struct UIState: StateType {
|
|||||||
var databaseUpdating: Bool = false
|
var databaseUpdating: Bool = false
|
||||||
|
|
||||||
var selectedSong: Song?
|
var selectedSong: Song?
|
||||||
|
|
||||||
|
var selectedQueueItem: QueueItem?
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user