Files
DockPhobia/DockPhobia/AppDelegate.swift

146 lines
3.4 KiB
Swift

//
// AppDelegate.swift
// DockPhobia
//
// Created by neon443 on 23/05/2025.
//
import AppKit
@main
class AppDelegate: NSObject, NSApplicationDelegate {
public var statusItem: NSStatusItem!
var settings = DPSettingsModel()
var mouseTracker: MouseTracker
override init() {
self.mouseTracker = MouseTracker(settings: settings)
super.init()
}
func applicationDidFinishLaunching(_ aNotification: Notification) {
statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
if let button = statusItem.button {
button.image = NSImage(named: "cursor.slash")
}
refreshMenus()
}
func applicationWillTerminate(_ aNotification: Notification) {
settings.saveSettings()
}
func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
return true
}
//MARK: menu bar stuff
func setupMenus() {
let menu = NSMenu()
let start = NSMenuItem(title: describeStartButton(), action: #selector(didTapStart), keyEquivalent: "")
menu.addItem(start)
let screen = NSMenuItem(
title: "\(mouseTracker.screen.width)x\(mouseTracker.screen.height)",
action: nil,
keyEquivalent: ""
)
menu.addItem(screen)
let dockMoves = NSMenuItem(
title: "Moved the Dock \(settings.settings.dockMoves) time\(settings.settings.dockMoves.plural)",
action: nil,
keyEquivalent: ""
)
menu.addItem(dockMoves)
menu.addItem(NSMenuItem.separator())
let checkfullscreenButton = NSMenuItem(
title: "Smaller deathzone in fullscreen",
action: #selector(checkFullscreenToggle),
keyEquivalent: ""
)
checkfullscreenButton.state = NSControl.StateValue(rawValue: settings.settings.checkFullscreen ? 1 : 0)
menu.addItem(checkfullscreenButton)
menu.addItem(NSMenuItem.separator())
menu.addItem(
NSMenuItem(
title: "Move Dock to left",
action: #selector(moveDockObjcLeft),
keyEquivalent: ""
)
)
menu.addItem(
NSMenuItem(
title: "Move Dock to bottom",
action: #selector(moveDockObjcBottom),
keyEquivalent: ""
)
)
menu.addItem(
NSMenuItem(
title: "Move Dock to right",
action: #selector(moveDockObjcRight),
keyEquivalent: ""
)
)
menu.addItem(NSMenuItem.separator())
let quit = NSMenuItem(title: "Quit", action: #selector(quit), keyEquivalent: "q")
menu.addItem(quit)
statusItem.menu = menu
}
func changeMenuIcon(running: Bool) {
guard let button = statusItem.button else { return }
switch running {
case true:
button.image = NSImage(named: "cursor.motion")
case false:
button.image = NSImage(named: "cursor.slash")
}
}
@objc func didTapStart() {
if mouseTracker.running {
mouseTracker.stop()
changeMenuIcon(running: false)
} else {
mouseTracker.start()
changeMenuIcon(running: true)
}
refreshMenus()
}
@objc func quit() {
NSApplication.shared.terminate(self)
}
@objc func moveDockObjcLeft() { mouseTracker.moveDock(.left) }
@objc func moveDockObjcRight() { mouseTracker.moveDock(.right) }
@objc func moveDockObjcBottom() { mouseTracker.moveDock(.bottom) }
@objc func checkFullscreenToggle() {
settings.settings.checkFullscreen.toggle()
refreshMenus()
}
func describeStartButton() -> String {
if mouseTracker.running {
return "Stop tracking"
} else {
return "Start tracking"
}
}
}
func refreshMenus() {
guard let delegate = NSApp.delegate as? AppDelegate else { return }
delegate.setupMenus()
}
extension Numeric {
var plural: String {
return self == 1 ? "" : "s"
}
}