ui: move translation credentials into settings

This commit is contained in:
2026-10-17 22:17:21 +02:00
parent b847a483f0
commit 9eb16ddd5a
7 changed files with 186 additions and 86 deletions
+31 -6
View File
@@ -5,6 +5,7 @@ import ServiceManagement
@MainActor
final class SettingsWindowController: NSWindowController, NSWindowDelegate {
private let shortcuts: GlobalShortcuts
private let translationSettings = TranslationSettingsController()
private let destinationSelector = NSPopUpButton(frame: .zero, pullsDown: false)
private let commandSpaceButton = NSButton(title: "Use ⌘Space", target: nil, action: nil)
private var shortcut: GlobalShortcut { shortcuts.bindings[destinationSelector.indexOfSelectedItem] }
@@ -146,15 +147,20 @@ final class SettingsWindowController: NSWindowController, NSWindowDelegate {
let loginHeading = NSTextField(labelWithString: "Startup")
loginHeading.font = .systemFont(ofSize: 20, weight: .semibold)
loginHeading.textColor = SunsetPalette.text
let translationHeading = NSTextField(labelWithString: "Conjure Translate")
translationHeading.font = .systemFont(ofSize: 20, weight: .semibold)
translationHeading.textColor = SunsetPalette.text
let stack = NSStackView(views: [
heading, destinationSelector, controls, instructions, statusLabel, errorLabel, spotlight, keyboardSettings,
loginHeading, loginToggle, loginStatus, loginSettings, recoveryLabel, recoveryButton
loginHeading, loginToggle, loginStatus, loginSettings, recoveryLabel, recoveryButton,
translationHeading, translationSettings.view
])
stack.orientation = .vertical
stack.alignment = .leading
stack.spacing = 12
stack.setCustomSpacing(32, after: keyboardSettings)
stack.setCustomSpacing(32, after: recoveryButton)
stack.translatesAutoresizingMaskIntoConstraints = false
let content = NSVisualEffectView()
content.material = .hudWindow
@@ -165,12 +171,27 @@ final class SettingsWindowController: NSWindowController, NSWindowDelegate {
background.autoresizingMask = [.width, .height]
background.setAccessibilityElement(false)
content.addSubview(background)
content.addSubview(stack)
let scroll = NSScrollView()
scroll.hasVerticalScroller = true
scroll.autohidesScrollers = true
scroll.drawsBackground = false
scroll.translatesAutoresizingMaskIntoConstraints = false
let document = SettingsDocumentView()
document.translatesAutoresizingMaskIntoConstraints = false
document.addSubview(stack)
scroll.documentView = document
content.addSubview(scroll)
NSLayoutConstraint.activate([
stack.leadingAnchor.constraint(equalTo: content.leadingAnchor, constant: 24),
stack.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -24),
stack.topAnchor.constraint(equalTo: (window.contentLayoutGuide as! NSLayoutGuide).topAnchor, constant: 24),
stack.bottomAnchor.constraint(lessThanOrEqualTo: content.bottomAnchor, constant: -24),
scroll.leadingAnchor.constraint(equalTo: content.leadingAnchor),
scroll.trailingAnchor.constraint(equalTo: content.trailingAnchor),
scroll.topAnchor.constraint(equalTo: (window.contentLayoutGuide as! NSLayoutGuide).topAnchor),
scroll.bottomAnchor.constraint(equalTo: content.bottomAnchor),
document.widthAnchor.constraint(equalTo: scroll.contentView.widthAnchor),
stack.leadingAnchor.constraint(equalTo: document.leadingAnchor, constant: 24),
stack.trailingAnchor.constraint(equalTo: document.trailingAnchor, constant: -24),
stack.topAnchor.constraint(equalTo: document.topAnchor, constant: 24),
stack.bottomAnchor.constraint(equalTo: document.bottomAnchor, constant: -24),
translationSettings.view.widthAnchor.constraint(equalTo: stack.widthAnchor),
recorder.widthAnchor.constraint(greaterThanOrEqualToConstant: 190)
])
for label in [instructions, statusLabel, errorLabel, spotlight, loginStatus, recoveryLabel] {
@@ -389,3 +410,7 @@ private final class ShortcutRecorderButton: NSButton {
return resigned
}
}
private final class SettingsDocumentView: NSView {
override var isFlipped: Bool { true }
}