6
6
//
7
7
8
8
import Cocoa
9
- import SwiftUI
10
9
import ServiceManagement
10
+ import SwiftUI
11
11
12
12
class StatusBarController : ObservableObject {
13
13
static let shared = StatusBarController ( )
14
14
private var statusItem : NSStatusItem ?
15
15
private let windowManager = WindowManager . shared
16
-
16
+
17
17
private init ( ) {
18
18
DispatchQueue . main. async {
19
19
self . statusItem = NSStatusBar . system. statusItem ( withLength: NSStatusItem . squareLength)
@@ -22,126 +22,130 @@ class StatusBarController: ObservableObject {
22
22
self . setupLoginItem ( )
23
23
}
24
24
}
25
-
25
+
26
26
private func setupLoginItem( ) {
27
27
if let bundleIdentifier = Bundle . main. bundleIdentifier {
28
28
if !SMLoginItemSetEnabled( bundleIdentifier as CFString , true ) {
29
29
print ( " Login item eklenemedi " )
30
30
}
31
31
}
32
32
}
33
-
33
+
34
34
private func setupUI( ) {
35
35
if let button = statusItem? . button {
36
36
button. image = NSImage ( systemSymbolName: " rectangle.split.3x1 " , accessibilityDescription: nil )
37
37
}
38
38
}
39
-
39
+
40
40
private func setupMenus( ) {
41
41
let menu = NSMenu ( )
42
-
42
+
43
43
// 2/3 Split Menu Items
44
44
let leftTwoThirdsItem = NSMenuItem ( title: " Left 2/3 " , action: #selector( leftTwoThirds) , keyEquivalent: " " )
45
45
leftTwoThirdsItem. target = self
46
46
menu. addItem ( leftTwoThirdsItem)
47
-
47
+
48
48
let rightTwoThirdsItem = NSMenuItem ( title: " Right 2/3 " , action: #selector( rightTwoThirds) , keyEquivalent: " " )
49
49
rightTwoThirdsItem. target = self
50
50
menu. addItem ( rightTwoThirdsItem)
51
-
51
+
52
52
menu. addItem ( NSMenuItem . separator ( ) )
53
-
53
+
54
54
// 1/3 Split Menu Items
55
55
let leftThirdItem = NSMenuItem ( title: " Left 1/3 " , action: #selector( leftThird) , keyEquivalent: " " )
56
56
leftThirdItem. target = self
57
57
menu. addItem ( leftThirdItem)
58
-
58
+
59
59
let centerThirdItem = NSMenuItem ( title: " Center 1/3 " , action: #selector( centerThird) , keyEquivalent: " " )
60
60
centerThirdItem. target = self
61
61
menu. addItem ( centerThirdItem)
62
-
62
+
63
63
let rightThirdItem = NSMenuItem ( title: " Right 1/3 " , action: #selector( rightThird) , keyEquivalent: " " )
64
64
rightThirdItem. target = self
65
65
menu. addItem ( rightThirdItem)
66
-
66
+
67
67
menu. addItem ( NSMenuItem . separator ( ) )
68
-
68
+
69
69
// Half Split Menu Items
70
70
let leftHalfItem = NSMenuItem ( title: " Left Half " , action: #selector( leftHalf) , keyEquivalent: " " )
71
71
leftHalfItem. target = self
72
72
menu. addItem ( leftHalfItem)
73
-
73
+
74
74
let rightHalfItem = NSMenuItem ( title: " Right Half " , action: #selector( rightHalf) , keyEquivalent: " " )
75
75
rightHalfItem. target = self
76
76
menu. addItem ( rightHalfItem)
77
-
77
+
78
78
menu. addItem ( NSMenuItem . separator ( ) )
79
-
79
+
80
80
// Corner Controls
81
81
let cornersSubmenu = NSMenu ( )
82
-
82
+
83
83
let topLeftItem = NSMenuItem ( title: " Top Left " , action: #selector( topLeft) , keyEquivalent: " " )
84
84
topLeftItem. target = self
85
85
cornersSubmenu. addItem ( topLeftItem)
86
-
86
+
87
87
let topRightItem = NSMenuItem ( title: " Top Right " , action: #selector( topRight) , keyEquivalent: " " )
88
88
topRightItem. target = self
89
89
cornersSubmenu. addItem ( topRightItem)
90
-
90
+
91
91
let bottomLeftItem = NSMenuItem ( title: " Bottom Left " , action: #selector( bottomLeft) , keyEquivalent: " " )
92
92
bottomLeftItem. target = self
93
93
cornersSubmenu. addItem ( bottomLeftItem)
94
-
94
+
95
95
let bottomRightItem = NSMenuItem ( title: " Bottom Right " , action: #selector( bottomRight) , keyEquivalent: " " )
96
96
bottomRightItem. target = self
97
97
cornersSubmenu. addItem ( bottomRightItem)
98
-
98
+
99
99
let cornersItem = NSMenuItem ( title: " Corners " , action: nil , keyEquivalent: " " )
100
100
cornersItem. submenu = cornersSubmenu
101
101
menu. addItem ( cornersItem)
102
-
102
+
103
103
// Vertical Split
104
104
let verticalSubmenu = NSMenu ( )
105
-
105
+
106
106
let topHalfItem = NSMenuItem ( title: " Top Half " , action: #selector( topHalf) , keyEquivalent: " " )
107
107
topHalfItem. target = self
108
108
verticalSubmenu. addItem ( topHalfItem)
109
-
109
+
110
110
let bottomHalfItem = NSMenuItem ( title: " Bottom Half " , action: #selector( bottomHalf) , keyEquivalent: " " )
111
111
bottomHalfItem. target = self
112
112
verticalSubmenu. addItem ( bottomHalfItem)
113
-
113
+
114
114
let verticalItem = NSMenuItem ( title: " Vertical Split " , action: nil , keyEquivalent: " " )
115
115
verticalItem. submenu = verticalSubmenu
116
116
menu. addItem ( verticalItem)
117
-
117
+
118
118
menu. addItem ( NSMenuItem . separator ( ) )
119
-
119
+
120
120
// Other Controls
121
121
let centerItem = NSMenuItem ( title: " Center " , action: #selector( center) , keyEquivalent: " " )
122
122
centerItem. target = self
123
123
menu. addItem ( centerItem)
124
-
124
+
125
125
let fullScreenItem = NSMenuItem ( title: " Full Screen " , action: #selector( fullScreen) , keyEquivalent: " " )
126
126
fullScreenItem. target = self
127
127
menu. addItem ( fullScreenItem)
128
-
128
+
129
129
menu. addItem ( NSMenuItem . separator ( ) )
130
-
130
+
131
131
// Launch at Login option
132
- let launchAtLoginItem = NSMenuItem ( title: " Launch at Login " , action: #selector( toggleLaunchAtLogin) , keyEquivalent: " " )
132
+ let launchAtLoginItem = NSMenuItem (
133
+ title: " Launch at Login " ,
134
+ action: #selector( toggleLaunchAtLogin) ,
135
+ keyEquivalent: " "
136
+ )
133
137
launchAtLoginItem. target = self
134
138
launchAtLoginItem. state = isLoginItemEnabled ( ) ? . on : . off
135
139
menu. addItem ( launchAtLoginItem)
136
-
140
+
137
141
menu. addItem ( NSMenuItem . separator ( ) )
138
-
142
+
139
143
let quitItem = NSMenuItem ( title: " Quit " , action: #selector( NSApplication . terminate ( _: ) ) , keyEquivalent: " q " )
140
144
menu. addItem ( quitItem)
141
-
145
+
142
146
statusItem? . menu = menu
143
147
}
144
-
148
+
145
149
private func isLoginItemEnabled( ) -> Bool {
146
150
if let bundleIdentifier = Bundle . main. bundleIdentifier {
147
151
for app in NSWorkspace . shared. runningApplications {
@@ -152,7 +156,7 @@ class StatusBarController: ObservableObject {
152
156
}
153
157
return false
154
158
}
155
-
159
+
156
160
@objc private func toggleLaunchAtLogin( ) {
157
161
if let bundleIdentifier = Bundle . main. bundleIdentifier {
158
162
let currentState = isLoginItemEnabled ( )
@@ -162,97 +166,97 @@ class StatusBarController: ObservableObject {
162
166
}
163
167
}
164
168
}
165
-
169
+
166
170
// 2/3 Split Actions
167
171
@objc private func leftTwoThirds( ) {
168
172
DispatchQueue . main. async {
169
173
self . windowManager. divideScreenIntoTwoThirds ( position: . left)
170
174
}
171
175
}
172
-
176
+
173
177
@objc private func rightTwoThirds( ) {
174
178
DispatchQueue . main. async {
175
179
self . windowManager. divideScreenIntoTwoThirds ( position: . right)
176
180
}
177
181
}
178
-
182
+
179
183
// 1/3 Split Actions
180
184
@objc private func leftThird( ) {
181
185
DispatchQueue . main. async {
182
186
self . windowManager. resize ( . third( . left) )
183
187
}
184
188
}
185
-
189
+
186
190
@objc private func centerThird( ) {
187
191
DispatchQueue . main. async {
188
192
self . windowManager. resize ( . third( . center) )
189
193
}
190
194
}
191
-
195
+
192
196
@objc private func rightThird( ) {
193
197
DispatchQueue . main. async {
194
198
self . windowManager. resize ( . third( . right) )
195
199
}
196
200
}
197
-
201
+
198
202
// Half Split Actions
199
203
@objc private func leftHalf( ) {
200
204
DispatchQueue . main. async {
201
205
self . windowManager. resize ( . half( . left) )
202
206
}
203
207
}
204
-
208
+
205
209
@objc private func rightHalf( ) {
206
210
DispatchQueue . main. async {
207
211
self . windowManager. resize ( . half( . right) )
208
212
}
209
213
}
210
-
214
+
211
215
// Corner Actions
212
216
@objc private func topLeft( ) {
213
217
DispatchQueue . main. async {
214
218
self . windowManager. resize ( . corner( . topLeft) )
215
219
}
216
220
}
217
-
221
+
218
222
@objc private func topRight( ) {
219
223
DispatchQueue . main. async {
220
224
self . windowManager. resize ( . corner( . topRight) )
221
225
}
222
226
}
223
-
227
+
224
228
@objc private func bottomLeft( ) {
225
229
DispatchQueue . main. async {
226
230
self . windowManager. resize ( . corner( . bottomLeft) )
227
231
}
228
232
}
229
-
233
+
230
234
@objc private func bottomRight( ) {
231
235
DispatchQueue . main. async {
232
236
self . windowManager. resize ( . corner( . bottomRight) )
233
237
}
234
238
}
235
-
239
+
236
240
// Vertical Split Actions
237
241
@objc private func topHalf( ) {
238
242
DispatchQueue . main. async {
239
243
self . windowManager. resize ( . vertical( . top) )
240
244
}
241
245
}
242
-
246
+
243
247
@objc private func bottomHalf( ) {
244
248
DispatchQueue . main. async {
245
249
self . windowManager. resize ( . vertical( . bottom) )
246
250
}
247
251
}
248
-
252
+
249
253
// Other Actions
250
254
@objc private func center( ) {
251
255
DispatchQueue . main. async {
252
256
self . windowManager. resize ( . generic( . center) )
253
257
}
254
258
}
255
-
259
+
256
260
@objc private func fullScreen( ) {
257
261
DispatchQueue . main. async {
258
262
self . windowManager. resize ( . generic( . fullScreen) )
0 commit comments