1
1
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:
Daniel Barber 2019-06-08 18:20:39 -04:00
parent aecff619a2
commit b2a80abe7b
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
6 changed files with 66 additions and 5 deletions

View File

@ -135,6 +135,27 @@ class AppDelegate: NSObject,
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 cant 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) {
guard let song = App.store.state.uiState.selectedSong
else { return }

View File

@ -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 {
let cellView = outlineView.makeView(
withIdentifier: .queueSongTitle,

View File

@ -79,8 +79,18 @@
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Queue" id="CWM-rf-Ozu">
<items>
<menuItem title="Remove song" id="x9q-fx-zaQ">
<menuItem title="Remove Song" id="x9q-fx-zaQ">
<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>
</items>
</menu>
@ -88,13 +98,13 @@
<menuItem title="Song" id="elk-xW-VXb">
<menu key="submenu" title="Song" autoenablesItems="NO" id="RuT-kk-xTu">
<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"/>
<connections>
<action selector="playSelectedSongAction:" target="Voe-Tx-rLC" id="jIo-ux-Mhr"/>
</connections>
</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"/>
<connections>
<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"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<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"/>
<autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/>
@ -795,6 +805,7 @@
<color key="primaryBackgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<connections>
<outlet property="delegate" destination="gPn-fP-LFc" id="LQ2-Vl-r08"/>
<outlet property="menu" destination="Rif-KP-4xb" id="f7w-Ot-TKf"/>
</connections>
</collectionView>
</subviews>
@ -822,8 +833,18 @@
</connections>
</viewController>
<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>
<point key="canvasLocation" x="531" y="1358"/>
<point key="canvasLocation" x="329" y="1370"/>
</scene>
</scenes>
<resources>

View File

@ -18,6 +18,10 @@ struct DatabaseUpdateStartedAction: Action {}
struct DatabaseUpdateFinishedAction: Action {}
struct SetSelectedQueueItem: Action {
let selectedQueueItem: QueueItem?
}
struct SetSelectedSong: Action {
let selectedSong: Song?
}

View File

@ -30,6 +30,9 @@ func uiReducer(action: Action, state: UIState?) -> UIState {
case let action as SetSelectedSong:
state.selectedSong = action.selectedSong
case let action as SetSelectedQueueItem:
state.selectedQueueItem = action.selectedQueueItem
default:
break
}

View File

@ -20,4 +20,6 @@ struct UIState: StateType {
var databaseUpdating: Bool = false
var selectedSong: Song?
var selectedQueueItem: QueueItem?
}