Skip to content

Commit 4a3af3b

Browse files
committed
Move UI to AppBundle/ui folder. Rename TrayItemType. ExperimentalUISettings preview and name in 1 line
1 parent 8fabc27 commit 4a3af3b

File tree

3 files changed

+25
-27
lines changed

3 files changed

+25
-27
lines changed

Sources/AppBundle/ExperimentalUISettings.swift renamed to Sources/AppBundle/ui/ExperimentalUISettings.swift

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,43 +26,40 @@ func getExperimentalUISettingsMenu(viewModel: TrayMenuModel) -> some View {
2626
let appearence = NSApplication.shared.effectiveAppearance.name
2727
let color = (appearence == .vibrantDark || appearence == .darkAqua) ? Color.white : Color.black
2828
return Menu {
29-
Text("These settings are EXPERIMENTAL.")
30-
Text("No stability guarantees are provided.")
31-
Divider()
3229
Text("Menu bar style (macOS 14 or later):")
33-
Text(MenuBarStyle.systemText.title)
3430
Button {
35-
viewModel.experimentalUISettings.displayStyle = .systemText
31+
viewModel.experimentalUISettings.displayStyle = .monospacedText
3632
} label: {
37-
Toggle(isOn: .constant(viewModel.experimentalUISettings.displayStyle == .systemText)) {
38-
MenuBarLabel(viewModel.trayText, textStyle: .system, color: color)
33+
Toggle(isOn: .constant(viewModel.experimentalUISettings.displayStyle == .monospacedText)) {
34+
MenuBarLabel(viewModel.trayText, color: color)
35+
Text(" - " + MenuBarStyle.monospacedText.title)
3936
}
4037
}
41-
Text(MenuBarStyle.monospacedText.title)
4238
Button {
43-
viewModel.experimentalUISettings.displayStyle = .monospacedText
39+
viewModel.experimentalUISettings.displayStyle = .systemText
4440
} label: {
45-
Toggle(isOn: .constant(viewModel.experimentalUISettings.displayStyle == .monospacedText)) {
46-
MenuBarLabel(viewModel.trayText, color: color)
41+
Toggle(isOn: .constant(viewModel.experimentalUISettings.displayStyle == .systemText)) {
42+
MenuBarLabel(viewModel.trayText, textStyle: .system, color: color)
43+
Text(" - " + MenuBarStyle.systemText.title)
4744
}
4845
}
49-
Text(MenuBarStyle.squares.title)
5046
Button {
5147
viewModel.experimentalUISettings.displayStyle = .squares
5248
} label: {
5349
Toggle(isOn: .constant(viewModel.experimentalUISettings.displayStyle == .squares)) {
5450
MenuBarLabel(viewModel.trayText, color: color, trayItems: viewModel.trayItems)
51+
Text(" - " + MenuBarStyle.squares.title)
5552
}
5653
}
57-
Text(MenuBarStyle.i3.title)
5854
Button {
5955
viewModel.experimentalUISettings.displayStyle = .i3
6056
} label: {
6157
Toggle(isOn: .constant(viewModel.experimentalUISettings.displayStyle == .i3)) {
6258
MenuBarLabel(viewModel.trayText, color: color, trayItems: viewModel.trayItems, workspaces: viewModel.workspaces)
59+
Text(" - " + MenuBarStyle.i3.title)
6360
}
6461
}
6562
} label: {
66-
Text("Experimental UI Settings")
63+
Text("Experimental UI Settings (No stability guarantees)")
6764
}
6865
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ public func menuBar(viewModel: TrayMenuModel) -> some Scene { // todo should it
6565
} label: {
6666
if viewModel.isEnabled {
6767
switch viewModel.experimentalUISettings.displayStyle {
68-
case .systemText:
69-
MenuBarLabel(viewModel.trayText, textStyle: .system)
7068
case .monospacedText:
7169
MenuBarLabel(viewModel.trayText)
70+
case .systemText:
71+
MenuBarLabel(viewModel.trayText, textStyle: .system)
7272
case .squares:
7373
MenuBarLabel(viewModel.trayText, trayItems: viewModel.trayItems)
7474
case .i3:
@@ -134,9 +134,9 @@ struct MenuBarLabel: View {
134134
.bold()
135135
}
136136
}
137-
if workspaces != nil {
138-
let otherWorkspaces = Workspace.all.filter { workspace in
139-
!workspace.isEffectivelyEmpty && !trayItems.contains(where: { item in item.type == .monitor && item.name == workspace.name })
137+
if let workspaces {
138+
let otherWorkspaces = workspaces.filter { workspace in
139+
!workspace.isEffectivelyEmpty && !trayItems.contains(where: { item in item.type == .workspace && item.name == workspace.name })
140140
}
141141
if !otherWorkspaces.isEmpty {
142142
Group {
@@ -146,7 +146,7 @@ struct MenuBarLabel: View {
146146
.bold()
147147
.padding(.bottom, 2)
148148
ForEach(otherWorkspaces, id: \.name) { item in
149-
itemView(for: TrayItem(type: .monitor, name: item.name, isActive: false))
149+
itemView(for: TrayItem(type: .workspace, name: item.name, isActive: false))
150150
}
151151
}
152152
.opacity(0.6)
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ public class TrayMenuModel: ObservableObject {
2525
.joined(separator: "")
2626
TrayMenuModel.shared.workspaces = Workspace.all.map {
2727
let monitor = $0.isVisible || !$0.isEffectivelyEmpty ? " - \($0.workspaceMonitor.name)" : ""
28-
return WorkspaceViewModel(name: $0.name, suffix: monitor, isFocused: focus.workspace == $0)
28+
return WorkspaceViewModel(name: $0.name, suffix: monitor, isFocused: focus.workspace == $0, isEffectivelyEmpty: $0.isEffectivelyEmpty)
2929
}
3030
var items = sortedMonitors.map {
31-
TrayItem(type: .monitor, name: $0.activeWorkspace.name, isActive: $0.activeWorkspace == focus.workspace && sortedMonitors.count > 1)
31+
TrayItem(type: .workspace, name: $0.activeWorkspace.name, isActive: $0.activeWorkspace == focus.workspace && sortedMonitors.count > 1)
3232
}
3333
let mode = activeMode?.takeIf { $0 != mainModeId }?.first?.lets { TrayItem(type: .mode, name: $0.uppercased(), isActive: true) }
3434
if let mode {
@@ -41,29 +41,30 @@ struct WorkspaceViewModel: Hashable {
4141
let name: String
4242
let suffix: String
4343
let isFocused: Bool
44+
let isEffectivelyEmpty: Bool
4445
}
4546

4647
enum TrayItemType: String, Hashable {
4748
case mode
48-
case monitor
49+
case workspace
4950
}
5051

51-
private let validNumbers = "0" ... "9"
52+
private let validNumbers = (0 ... 50).map { String($0) }
5253
private let validLetters = "A" ... "Z"
5354

5455
struct TrayItem: Hashable, Identifiable {
5556
let type: TrayItemType
5657
let name: String
5758
let isActive: Bool
5859
var systemImageName: String? {
59-
// System image type is only valid for single number and single capital char workspace name
60-
guard name.count == 1 else { return nil }
60+
// System image type is only valid for numbers 0 to 50 and single capital char workspace name
61+
guard name.count <= 2 else { return nil }
6162
guard validNumbers.contains(name) || validLetters.contains(name) else { return nil }
6263
let lowercasedName = name.lowercased()
6364
switch type {
6465
case .mode:
6566
return "\(lowercasedName).circle"
66-
case .monitor:
67+
case .workspace:
6768
if isActive {
6869
return "\(lowercasedName).square.fill"
6970
} else {

0 commit comments

Comments
 (0)