@@ -14,14 +14,12 @@ class TestDatePickerController: NSViewController {
14
14
let calendar = Calendar . current
15
15
let date = calendar. date ( from: DateComponents ( year: 2019 , month: 12 , day: 9 ) )
16
16
17
- datePickerController = DatePickerController ( date: date, calendar: calendar, style: . dateTime)
18
- menuDatePickerController = DatePickerController ( date: date, calendar: calendar, style: . dateTime)
19
-
20
- datePickerController? . delegate = self
21
- menuDatePickerController? . delegate = self
22
-
23
- datePickerController? . hasEdgePadding = true
24
- menuDatePickerController? . hasEdgePadding = true
17
+ for location in DatePickerLocation . allCases {
18
+ let datePickerController = DatePickerController ( date: date, calendar: calendar, style: . dateTime)
19
+ datePickerController. delegate = self
20
+ datePickerController. hasEdgePadding = true
21
+ datePickerControllers [ location] = datePickerController
22
+ }
25
23
}
26
24
27
25
@available ( * , unavailable)
@@ -50,7 +48,7 @@ class TestDatePickerController: NSViewController {
50
48
vfxView. layer? . cornerRadius = 5
51
49
52
50
horizontalStack. addView ( vfxView, in: . center)
53
- if let controller = datePickerController {
51
+ if let controller = datePickerControllers [ . inline ] {
54
52
vfxView. addSubview ( controller. view)
55
53
56
54
NSLayoutConstraint . activate ( [
@@ -70,7 +68,7 @@ class TestDatePickerController: NSViewController {
70
68
let menu = NSMenu ( )
71
69
datePickerMenuItem = NSMenuItem ( title: " NSMenu " , action: nil , keyEquivalent: " " )
72
70
73
- if let controller = menuDatePickerController , let menuItem = datePickerMenuItem {
71
+ if let controller = datePickerControllers [ . menu ] , let menuItem = datePickerMenuItem {
74
72
menuItem. view = NSView ( frame: NSRect ( origin: . zero, size: controller. view. fittingSize) )
75
73
menuItem. view? . addSubview ( controller. view)
76
74
menu. addItem ( menuItem)
@@ -128,8 +126,8 @@ class TestDatePickerController: NSViewController {
128
126
let delegateMessagesScrollView = NSScrollView ( )
129
127
delegateMessagesScrollView. documentView = delegateMessagesTextView
130
128
131
- [ delegateMessagesLabel, delegateMessagesScrollView] . forEach {
132
- containerView. addView ( $0 , in: . bottom)
129
+ for view in [ delegateMessagesLabel, delegateMessagesScrollView] {
130
+ containerView. addView ( view , in: . bottom)
133
131
}
134
132
135
133
NSLayoutConstraint . activate ( [
@@ -145,8 +143,7 @@ class TestDatePickerController: NSViewController {
145
143
}
146
144
147
145
@objc func clearCustomColor( ) {
148
- datePickerController? . customSelectionColor = nil
149
- menuDatePickerController? . customSelectionColor = nil
146
+ datePickerControllers. values. forEach { $0. customSelectionColor = nil }
150
147
}
151
148
152
149
@objc func launchColorPicker( ) {
@@ -157,54 +154,41 @@ class TestDatePickerController: NSViewController {
157
154
}
158
155
159
156
@objc func toggleSecondaryCalendar( ) {
160
- if datePickerController? . secondaryCalendar == nil {
161
- datePickerController? . secondaryCalendar = chineseLunarCalendar
162
- } else {
163
- datePickerController? . secondaryCalendar = nil
164
- }
165
-
166
- if menuDatePickerController? . secondaryCalendar == nil {
167
- menuDatePickerController? . secondaryCalendar = chineseLunarCalendar
168
- } else {
169
- menuDatePickerController? . secondaryCalendar = nil
157
+ for datePickerController in datePickerControllers. values {
158
+ if datePickerController. secondaryCalendar == nil {
159
+ datePickerController. secondaryCalendar = chineseLunarCalendar
160
+ } else {
161
+ datePickerController. secondaryCalendar = nil
162
+ }
170
163
}
171
164
}
172
165
173
166
@objc func toggleAutoSelection( _ sender: NSButton ) {
174
167
let enabled = sender. state == . on
175
- datePickerController? . autoSelectWhenPaging = enabled
176
- menuDatePickerController? . autoSelectWhenPaging = enabled
168
+ datePickerControllers. values. forEach { $0. autoSelectWhenPaging = enabled }
177
169
}
178
170
179
171
@objc func toggleEdgePadding( _ sender: NSButton ) {
180
172
let enabled = sender. state == . on
181
- datePickerController? . hasEdgePadding = enabled
182
- menuDatePickerController? . hasEdgePadding = enabled
183
- datePickerMenuItem? . view? . frame. size = menuDatePickerController? . view. fittingSize ?? . zero
173
+ datePickerControllers. values. forEach { $0. hasEdgePadding = enabled }
174
+ datePickerMenuItem? . view? . frame. size = datePickerControllers [ . menu] ? . view. fittingSize ?? . zero
184
175
}
185
176
186
177
@objc func toggleTextDatePicker( _ sender: NSButton ) {
187
178
let enabled = sender. state == . on
188
- datePickerController? . hasTextField = enabled
189
- menuDatePickerController? . hasTextField = enabled
190
- datePickerMenuItem? . view? . frame. size = menuDatePickerController? . view. fittingSize ?? . zero
179
+ datePickerControllers. values. forEach { $0. hasTextField = enabled }
180
+ datePickerMenuItem? . view? . frame. size = datePickerControllers [ . menu] ? . view. fittingSize ?? . zero
191
181
}
192
182
193
183
@objc func showPopover( _ sender: NSButton ) {
194
184
let popover = NSPopover ( )
195
185
popover. behavior = . transient
196
-
197
- let controller = DatePickerController ( date: nil , calendar: nil , style: . dateTime)
198
- controller. hasTextField = false
199
- controller. hasEdgePadding = true
200
-
201
- popover. contentViewController = controller
186
+ popover. contentViewController = datePickerControllers [ . popover]
202
187
popover. show ( relativeTo: sender. bounds, of: sender, preferredEdge: . maxY)
203
188
}
204
189
205
190
@objc func changeColor( _ sender: NSColorPanel ? ) {
206
- datePickerController? . customSelectionColor = sender? . color
207
- menuDatePickerController? . customSelectionColor = sender? . color
191
+ datePickerControllers. values. forEach { $0. customSelectionColor = sender? . color }
208
192
}
209
193
210
194
private let chineseLunarCalendar : Calendar = {
@@ -214,8 +198,12 @@ class TestDatePickerController: NSViewController {
214
198
return calendar
215
199
} ( )
216
200
217
- private var datePickerController : DatePickerController ?
218
- private var menuDatePickerController : DatePickerController ?
201
+ private enum DatePickerLocation : CaseIterable {
202
+ case inline
203
+ case menu
204
+ case popover
205
+ }
206
+ private var datePickerControllers : [ DatePickerLocation : DatePickerController ] = [ : ]
219
207
private var datePickerMenuItem : NSMenuItem ?
220
208
221
209
private let delegateMessagesTextView : NSTextView = {
0 commit comments