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
aecff619a2
commit
b2a80abe7b
@ -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 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) {
|
||||
guard let song = App.store.state.uiState.selectedSong
|
||||
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 {
|
||||
let cellView = outlineView.makeView(
|
||||
withIdentifier: .queueSongTitle,
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -18,6 +18,10 @@ struct DatabaseUpdateStartedAction: Action {}
|
||||
|
||||
struct DatabaseUpdateFinishedAction: Action {}
|
||||
|
||||
struct SetSelectedQueueItem: Action {
|
||||
let selectedQueueItem: QueueItem?
|
||||
}
|
||||
|
||||
struct SetSelectedSong: Action {
|
||||
let selectedSong: Song?
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -20,4 +20,6 @@ struct UIState: StateType {
|
||||
var databaseUpdating: Bool = false
|
||||
|
||||
var selectedSong: Song?
|
||||
|
||||
var selectedQueueItem: QueueItem?
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user