54 lines
1.9 KiB
Swift
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
|
|
}
|
|
}
|
|
}
|