Files
openless/Sources/OpenLessApp/Settings/SettingsWindowController.swift
T

54 lines
1.9 KiB
Swift

import AppKit
import SwiftUI
@MainActor
final class SettingsWindowController {
private var window: NSWindow?
private let navigation = SettingsNavigationModel()
func show(tab: OpenLessMainTab = .home) {
navigation.selection = tab
if let window = window {
window.makeKeyAndOrderFront(nil)
NSApp.activate(ignoringOtherApps: true)
return
}
let hosting = NSHostingController(rootView: SettingsView(navigation: navigation))
let win = NSWindow(contentViewController: hosting)
win.title = "OpenLess"
win.styleMask = [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView]
win.titleVisibility = .hidden
win.titlebarAppearsTransparent = true
win.toolbar = nil
win.isMovableByWindowBackground = true
win.setContentSize(NSSize(width: 1040, height: 700))
win.contentMinSize = NSSize(width: 960, height: 640)
win.tabbingMode = .disallowed
win.center()
win.isReleasedWhenClosed = false
self.window = win
win.makeKeyAndOrderFront(nil)
NSApp.activate(ignoringOtherApps: true)
DispatchQueue.main.async { [weak self, weak win] in
guard let win else { return }
self?.alignTrafficLights(in: win)
}
}
private func alignTrafficLights(in window: NSWindow) {
let buttons: [NSButton?] = [
window.standardWindowButton(.closeButton),
window.standardWindowButton(.miniaturizeButton),
window.standardWindowButton(.zoomButton),
]
for (index, button) in buttons.compactMap({ $0 }).enumerated() {
var frame = button.frame
frame.origin.x = 34 + CGFloat(index) * 24
if let superview = button.superview, superview.bounds.height > 80 {
frame.origin.y = superview.bounds.height - 38
}
button.frame = frame
}
}
}