1
1
mirror of https://github.com/danbee/persephone synced 2025-03-04 08:39:11 +00:00
persephone/Persephone/Controllers/WindowController.swift

72 lines
2.0 KiB
Swift

//
// WindowController.swift
// Persephone
//
// Created by Daniel Barber on 2019/1/11.
// Copyright © 2019 Dan Barber. All rights reserved.
//
import Cocoa
class WindowController: NSWindowController {
enum TransportAction: Int {
case prevTrack = 0
case playPause = 1
case stop = 2
case nextTrack = 3
}
let playIcon = NSImage(named: NSImage.Name("playButton"))
let pauseIcon = NSImage(named: NSImage.Name("pauseButton"))
override func windowDidLoad() {
super.windowDidLoad()
window?.titleVisibility = .hidden
NotificationCenter.default.addObserver(
self,
selector: #selector(stateChanged(_:)),
name: Notification.stateChanged,
object: AppDelegate.mpdClient
)
}
@objc func stateChanged(_ notification: Notification) {
guard let state = notification.userInfo?[Notification.stateKey] as? MPDClient.Status.State
else { return }
setTransportControlState(state)
}
func setTransportControlState(_ state: MPDClient.Status.State) {
transportControls.setEnabled(state.isOneOf([.playing, .paused]), forSegment: 0)
transportControls.setEnabled(state.isOneOf([.playing, .paused, .stopped]), forSegment: 1)
transportControls.setEnabled(state.isOneOf([.playing, .paused]), forSegment: 2)
transportControls.setEnabled(state.isOneOf([.playing, .paused]), forSegment: 3)
if state.isOneOf([.paused, .stopped, .unknown]) {
transportControls.setImage(playIcon, forSegment: 1)
} else {
transportControls.setImage(pauseIcon, forSegment: 1)
}
}
@IBAction func handleTransportControl(_ sender: NSSegmentedControl) {
guard let transportAction = TransportAction(rawValue: sender.selectedSegment)
else { return }
switch transportAction {
case .prevTrack:
AppDelegate.mpdClient.prevTrack()
case .playPause:
AppDelegate.mpdClient.playPause()
case .stop:
AppDelegate.mpdClient.stop()
case .nextTrack:
AppDelegate.mpdClient.nextTrack()
}
}
@IBOutlet var transportControls: NSSegmentedCell!
}