Skip to content

Commit 178ed31

Browse files
authored
Fixed some layout issues (MonitorControl#691)
* Compile three DDC startup options into one popup menu. * Combine multiple displays radio buttons into a popup menu * Changed record shortcut box to a more logical layout + needs less space * Further tweaks in keyboard preferences pane
1 parent c8c8710 commit 178ed31

40 files changed

+701
-967
lines changed

MonitorControl/Enums/PrefKey.swift

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,7 @@ enum PrefKey: String {
6161
case showTickMarks
6262

6363
// Instead of assuming default values, enable read or write upon startup (according to readDDCInsteadOfRestoreValues)
64-
case enableDDCDuringStartup
65-
66-
// Restore last saved values upon startup or wake
67-
case readDDCInsteadOfRestoreValues
64+
case startupAction
6865

6966
// Show advanced options under Displays tab in Preferences
7067
case showAdvancedSettings
@@ -96,11 +93,8 @@ enum PrefKey: String {
9693
// Synchronize brightness from sync source displays among all other displays
9794
case enableBrightnessSync
9895

99-
// Show only relevant slider for menu (depending on which display shows the menu)
100-
case slidersRelevant
101-
102-
// Combine sliders for all displays
103-
case slidersCombine
96+
// Sliders for multiple displays
97+
case multiSliders
10498

10599
/* -- Display specific settings */
106100

@@ -170,6 +164,18 @@ enum PrefKey: String {
170164
case remapDDC
171165
}
172166

167+
enum StartupAction: Int {
168+
case doNothing = 0
169+
case write = 1
170+
case read = 2
171+
}
172+
173+
enum MultiSliders: Int {
174+
case separate = 0
175+
case relevant = 1
176+
case combine = 2
177+
}
178+
173179
enum PollingMode: Int {
174180
case none = -2
175181
case minimal = -1

MonitorControl/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<key>CFBundleShortVersionString</key>
2020
<string>$(MARKETING_VERSION)</string>
2121
<key>CFBundleVersion</key>
22-
<string>6444</string>
22+
<string>6517</string>
2323
<key>LSApplicationCategoryType</key>
2424
<string>public.app-category.utilities</string>
2525
<key>LSMinimumSystemVersion</key>

MonitorControl/Model/OtherDisplay.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class OtherDisplay: Display {
8585
}
8686
os_log("Setting up display %{public}@ for %{public}@", type: .info, String(self.identifier), String(reflecting: command))
8787
if !self.isSw() {
88-
if prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue), prefs.bool(forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue), self.pollingCount != 0, !app.safeMode {
88+
if prefs.integer(forKey: PrefKey.startupAction.rawValue) == StartupAction.read.rawValue, self.pollingCount != 0, !app.safeMode {
8989
os_log("- Reading DDC from display %{public}@ times", type: .info, String(self.pollingCount))
9090
let delay = self.readPrefAsBool(key: .longerDelay) ? UInt64(40 * kMillisecondScale) : nil
9191
ddcValues = self.readDDCValues(for: command, tries: UInt(self.pollingCount), minReplyDelay: delay)
@@ -113,7 +113,7 @@ class OtherDisplay: Display {
113113
os_log("- Maximum DDC value: %{public}@ (overrides %{public}@)", type: .info, String(self.readPrefAsInt(key: .maxDDC, for: command)), String(maxDDCValue))
114114
os_log("- Current internal value: %{public}@", type: .info, String(self.readPrefAsFloat(for: command)))
115115
os_log("- Command status: %{public}@", type: .info, self.readPrefAsBool(key: .isTouched, for: command) ? "Touched" : "Untouched")
116-
if self.readPrefAsBool(key: .isTouched, for: command), prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue), !prefs.bool(forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue), !app.safeMode {
116+
if self.readPrefAsBool(key: .isTouched, for: command), prefs.integer(forKey: PrefKey.startupAction.rawValue) == StartupAction.write.rawValue, !app.safeMode {
117117
os_log("- Writing last saved DDC values.", type: .info, self.name, String(reflecting: command))
118118
_ = self.writeDDCValues(command: command, value: currentDDCValue)
119119
}
@@ -137,7 +137,7 @@ class OtherDisplay: Display {
137137
currentMuteValue = currentMuteValue == 0 ? 2 : currentMuteValue
138138
var muteValues: (current: UInt16, max: UInt16)?
139139
if self.readPrefAsBool(key: .enableMuteUnmute) {
140-
if self.pollingCount != 0, !app.safeMode, prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue), prefs.bool(forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue) {
140+
if self.pollingCount != 0, !app.safeMode, prefs.integer(forKey: PrefKey.startupAction.rawValue) == StartupAction.read.rawValue {
141141
os_log("Reading DDC from display %{public}@ times for Mute", type: .info, String(self.pollingCount))
142142
let delay = self.readPrefAsBool(key: .longerDelay) ? UInt64(40 * kMillisecondScale) : nil
143143
muteValues = self.readDDCValues(for: .audioMuteScreenBlank, tries: UInt(self.pollingCount), minReplyDelay: delay)
@@ -148,7 +148,7 @@ class OtherDisplay: Display {
148148
os_log("Mute read failed", type: .info)
149149
}
150150
}
151-
if prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue), !prefs.bool(forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue), !app.safeMode {
151+
if self.readPrefAsBool(key: .isTouched, for: .audioSpeakerVolume), prefs.integer(forKey: PrefKey.startupAction.rawValue) == StartupAction.write.rawValue, !app.safeMode {
152152
os_log("Writing last saved DDC value for Mute: %{public}@", type: .info, String(currentMuteValue))
153153
_ = self.writeDDCValues(command: .audioMuteScreenBlank, value: UInt16(currentMuteValue))
154154
}

MonitorControl/Support/MenuHandler.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ class MenuHandler: NSMenu, NSMenuDelegate {
4141
} else {
4242
displays.append(contentsOf: DisplayManager.shared.getDdcCapableDisplays())
4343
}
44-
let relevant = prefs.bool(forKey: PrefKey.slidersRelevant.rawValue)
45-
let combine = prefs.bool(forKey: PrefKey.slidersCombine.rawValue)
44+
let relevant = prefs.integer(forKey: PrefKey.multiSliders.rawValue) == MultiSliders.relevant.rawValue
45+
let combine = prefs.integer(forKey: PrefKey.multiSliders.rawValue) == MultiSliders.combine.rawValue
4646
let numOfDisplays = displays.count
4747
if numOfDisplays != 0 {
4848
let asSubMenu: Bool = (displays.count > 3 && !relevant && !combine && app.macOS10()) ? true : false
@@ -74,13 +74,13 @@ class MenuHandler: NSMenu, NSMenuDelegate {
7474
}
7575

7676
func setupMenuSliderHandler(command: Command, display: Display, title: String) -> SliderHandler {
77-
if prefs.bool(forKey: PrefKey.slidersCombine.rawValue), let combinedHandler = self.combinedSliderHandler[command] {
77+
if prefs.integer(forKey: PrefKey.multiSliders.rawValue) == MultiSliders.combine.rawValue, let combinedHandler = self.combinedSliderHandler[command] {
7878
combinedHandler.addDisplay(display)
7979
display.sliderHandler[command] = combinedHandler
8080
return combinedHandler
8181
} else {
8282
let sliderHandler = SliderHandler(display: display, command: command, title: title)
83-
if prefs.bool(forKey: PrefKey.slidersCombine.rawValue) {
83+
if prefs.integer(forKey: PrefKey.multiSliders.rawValue) == MultiSliders.combine.rawValue {
8484
self.combinedSliderHandler[command] = sliderHandler
8585
}
8686
display.sliderHandler[command] = sliderHandler
@@ -89,7 +89,7 @@ class MenuHandler: NSMenu, NSMenuDelegate {
8989
}
9090

9191
func addDisplayMenuBlock(addedSliderHandlers: [SliderHandler], blockName: String, monitorSubMenu: NSMenu, numOfDisplays: Int, asSubMenu: Bool) {
92-
if numOfDisplays > 1, !prefs.bool(forKey: PrefKey.slidersRelevant.rawValue), !DEBUG_MACOS10, #available(macOS 11.0, *) {
92+
if numOfDisplays > 1, prefs.integer(forKey: PrefKey.multiSliders.rawValue) != MultiSliders.relevant.rawValue, !DEBUG_MACOS10, #available(macOS 11.0, *) {
9393
class BlockView: NSView {
9494
override func draw(_: NSRect) {
9595
let radius = prefs.bool(forKey: PrefKey.showTickMarks.rawValue) ? CGFloat(4) : CGFloat(11)
@@ -178,7 +178,7 @@ class MenuHandler: NSMenu, NSMenuDelegate {
178178
let title = NSLocalizedString("Brightness", comment: "Shown in menu")
179179
addedSliderHandlers.append(self.setupMenuSliderHandler(command: .brightness, display: display, title: title))
180180
}
181-
if !prefs.bool(forKey: PrefKey.slidersCombine.rawValue) {
181+
if prefs.integer(forKey: PrefKey.multiSliders.rawValue) != MultiSliders.combine.rawValue {
182182
self.addDisplayMenuBlock(addedSliderHandlers: addedSliderHandlers, blockName: display.readPrefAsString(key: .friendlyName) != "" ? display.readPrefAsString(key: .friendlyName) : display.name, monitorSubMenu: monitorSubMenu, numOfDisplays: numOfDisplays, asSubMenu: asSubMenu)
183183
}
184184
if addedSliderHandlers.count > 0, prefs.integer(forKey: PrefKey.menuIcon.rawValue) == MenuIcon.sliderOnly.rawValue {
@@ -200,7 +200,7 @@ class MenuHandler: NSMenu, NSMenuDelegate {
200200
}
201201

202202
func updateMenuRelevantDisplay() {
203-
if prefs.bool(forKey: PrefKey.slidersRelevant.rawValue) {
203+
if prefs.integer(forKey: PrefKey.multiSliders.rawValue) == MultiSliders.relevant.rawValue {
204204
if let display = DisplayManager.shared.getCurrentDisplay(), display.identifier != self.lastMenuRelevantDisplayId {
205205
os_log("Menu must be refreshed as relevant display changed since last time.")
206206
self.lastMenuRelevantDisplayId = display.identifier

0 commit comments

Comments
 (0)