diff --git a/Stats/Supporting Files/Assets.xcassets/pause.imageset/Contents.json b/Stats/Supporting Files/Assets.xcassets/pause.imageset/Contents.json new file mode 100644 index 00000000..4cc7319f --- /dev/null +++ b/Stats/Supporting Files/Assets.xcassets/pause.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "filename" : "outline_pause_white_24pt_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "outline_pause_white_24pt_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "outline_pause_white_24pt_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Stats/Supporting Files/Assets.xcassets/pause.imageset/outline_pause_white_24pt_1x.png b/Stats/Supporting Files/Assets.xcassets/pause.imageset/outline_pause_white_24pt_1x.png new file mode 100644 index 00000000..2272d478 Binary files /dev/null and b/Stats/Supporting Files/Assets.xcassets/pause.imageset/outline_pause_white_24pt_1x.png differ diff --git a/Stats/Supporting Files/Assets.xcassets/pause.imageset/outline_pause_white_24pt_2x.png b/Stats/Supporting Files/Assets.xcassets/pause.imageset/outline_pause_white_24pt_2x.png new file mode 100644 index 00000000..f49aed75 Binary files /dev/null and b/Stats/Supporting Files/Assets.xcassets/pause.imageset/outline_pause_white_24pt_2x.png differ diff --git a/Stats/Supporting Files/Assets.xcassets/pause.imageset/outline_pause_white_24pt_3x.png b/Stats/Supporting Files/Assets.xcassets/pause.imageset/outline_pause_white_24pt_3x.png new file mode 100644 index 00000000..7192ad48 Binary files /dev/null and b/Stats/Supporting Files/Assets.xcassets/pause.imageset/outline_pause_white_24pt_3x.png differ diff --git a/Stats/Supporting Files/Assets.xcassets/resume.imageset/Contents.json b/Stats/Supporting Files/Assets.xcassets/resume.imageset/Contents.json new file mode 100644 index 00000000..d7a4cf3c --- /dev/null +++ b/Stats/Supporting Files/Assets.xcassets/resume.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "filename" : "baseline_play_arrow_white_24pt_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "baseline_play_arrow_white_24pt_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "baseline_play_arrow_white_24pt_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Stats/Supporting Files/Assets.xcassets/resume.imageset/baseline_play_arrow_white_24pt_1x.png b/Stats/Supporting Files/Assets.xcassets/resume.imageset/baseline_play_arrow_white_24pt_1x.png new file mode 100644 index 00000000..ca2ffcc4 Binary files /dev/null and b/Stats/Supporting Files/Assets.xcassets/resume.imageset/baseline_play_arrow_white_24pt_1x.png differ diff --git a/Stats/Supporting Files/Assets.xcassets/resume.imageset/baseline_play_arrow_white_24pt_2x.png b/Stats/Supporting Files/Assets.xcassets/resume.imageset/baseline_play_arrow_white_24pt_2x.png new file mode 100644 index 00000000..8ded4f06 Binary files /dev/null and b/Stats/Supporting Files/Assets.xcassets/resume.imageset/baseline_play_arrow_white_24pt_2x.png differ diff --git a/Stats/Supporting Files/Assets.xcassets/resume.imageset/baseline_play_arrow_white_24pt_3x.png b/Stats/Supporting Files/Assets.xcassets/resume.imageset/baseline_play_arrow_white_24pt_3x.png new file mode 100644 index 00000000..f658682e Binary files /dev/null and b/Stats/Supporting Files/Assets.xcassets/resume.imageset/baseline_play_arrow_white_24pt_3x.png differ diff --git a/Stats/Views/AppSettings.swift b/Stats/Views/AppSettings.swift index fc84896f..d75a135f 100644 --- a/Stats/Views/AppSettings.swift +++ b/Stats/Views/AppSettings.swift @@ -26,19 +26,9 @@ class ApplicationSettings: NSStackView { } } - private var pauseState: Bool { - get { - return Store.shared.bool(key: "pause", defaultValue: false) - } - set { - Store.shared.set(key: "pause", value: newValue) - } - } - private let updateWindow: UpdateWindow = UpdateWindow() private var updateSelector: NSPopUpButton? private var startAtLoginBtn: NSButton? - private var pauseButton: NSButton? private var uninstallHelperButton: NSButton? private var buttonsContainer: NSStackView? @@ -55,7 +45,6 @@ class ApplicationSettings: NSStackView { self.addArrangedSubview(self.separatorView()) self.addArrangedSubview(self.buttonsView()) - NotificationCenter.default.addObserver(self, selector: #selector(listenForPause), name: .pause, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(toggleUninstallHelperButton), name: .fanHelperState, object: nil) } @@ -64,7 +53,6 @@ class ApplicationSettings: NSStackView { } deinit { - NotificationCenter.default.removeObserver(self, name: .pause, object: nil) NotificationCenter.default.removeObserver(self, name: .fanHelperState, object: nil) } @@ -200,13 +188,6 @@ class ApplicationSettings: NSStackView { reset.target = self reset.action = #selector(self.resetSettings) - let pause: NSButton = NSButton() - pause.title = localizedString(self.pauseState ? "Resume the Stats" : "Pause the Stats") - pause.bezelStyle = .rounded - pause.target = self - pause.action = #selector(self.togglePause) - self.pauseButton = pause - let uninstall: NSButton = NSButton() uninstall.title = localizedString("Uninstall fan helper") uninstall.bezelStyle = .rounded @@ -215,7 +196,6 @@ class ApplicationSettings: NSStackView { self.uninstallHelperButton = uninstall view.addArrangedSubview(reset) - view.addArrangedSubview(pause) if SMCHelper.shared.isInstalled { view.addArrangedSubview(uninstall) } @@ -324,16 +304,6 @@ class ApplicationSettings: NSStackView { } } - @objc func togglePause(_ sender: NSButton) { - self.pauseState = !self.pauseState - self.pauseButton?.title = localizedString(self.pauseState ? "Resume the Stats" : "Pause the Stats") - NotificationCenter.default.post(name: .pause, object: nil, userInfo: ["state": self.pauseState]) - } - - @objc func listenForPause() { - self.pauseButton?.title = localizedString(self.pauseState ? "Resume the Stats" : "Pause the Stats") - } - @objc private func toggleUninstallHelperButton(_ notification: Notification) { guard let state = notification.userInfo?["state"] as? Bool, let v = self.uninstallHelperButton else { return diff --git a/Stats/Views/Settings.swift b/Stats/Views/Settings.swift index baed9ac7..c0cb099c 100644 --- a/Stats/Views/Settings.swift +++ b/Stats/Views/Settings.swift @@ -268,6 +268,16 @@ private class SidebarView: NSStackView { private let scrollView: ScrollableStackView private let supportPopover = NSPopover() + private var pauseButton: NSButton? = nil + + private var pauseState: Bool { + get { + return Store.shared.bool(key: "pause", defaultValue: false) + } + set { + Store.shared.set(key: "pause", value: newValue) + } + } private var dashboardIcon: NSImage { if #available(macOS 11.0, *), let icon = NSImage(systemSymbolName: "circle.grid.3x3.fill", accessibilityDescription: nil) { @@ -283,22 +293,19 @@ private class SidebarView: NSStackView { } private var bugIcon: NSImage { -// if #available(macOS 11.0, *), let icon = NSImage(systemSymbolName: "ladybug", accessibilityDescription: nil) { -// return icon -// } - return NSImage(named: NSImage.Name("bug"))! + NSImage(named: NSImage.Name("bug"))! } private var supportIcon: NSImage { -// if #available(macOS 11.0, *), let icon = NSImage(systemSymbolName: "heart.fill", accessibilityDescription: nil) { -// return icon -// } - return NSImage(named: NSImage.Name("donate"))! + NSImage(named: NSImage.Name("donate"))! + } + private var pauseIcon: NSImage { + NSImage(named: NSImage.Name("pause"))! + } + private var resumeIcon: NSImage { + NSImage(named: NSImage.Name("resume"))! } private var closeIcon: NSImage { -// if #available(macOS 11.0, *), let icon = NSImage(systemSymbolName: "power.circle", accessibilityDescription: nil) { -// return icon -// } - return NSImage(named: NSImage.Name("power"))! + NSImage(named: NSImage.Name("power"))! } override init(frame: NSRect) { @@ -326,8 +333,12 @@ private class SidebarView: NSStackView { additionalButtons.distribution = .fillEqually additionalButtons.spacing = 0 + let pauseButton = self.makeButton(title: localizedString("Pause the Stats"), image: self.pauseState ? self.resumeIcon : self.pauseIcon, action: #selector(togglePause)) + self.pauseButton = pauseButton + additionalButtons.addArrangedSubview(self.makeButton(title: localizedString("Report a bug"), image: self.bugIcon, action: #selector(reportBug))) additionalButtons.addArrangedSubview(self.makeButton(title: localizedString("Support the application"), image: self.supportIcon, action: #selector(donate))) + additionalButtons.addArrangedSubview(pauseButton) additionalButtons.addArrangedSubview(self.makeButton(title: localizedString("Close application"), image: self.closeIcon, action: #selector(closeApp))) let emptySpace = NSView() @@ -338,6 +349,12 @@ private class SidebarView: NSStackView { } self.addArrangedSubview(self.scrollView) self.addArrangedSubview(additionalButtons) + + NotificationCenter.default.addObserver(self, selector: #selector(listenForPause), name: .pause, object: nil) + } + + deinit { + NotificationCenter.default.removeObserver(self, name: .pause, object: nil) } required init?(coder: NSCoder) { @@ -460,6 +477,18 @@ private class SidebarView: NSStackView { @objc private func closeApp(_ sender: Any) { NSApp.terminate(sender) } + + @objc private func togglePause(_ sender: NSButton) { + self.pauseState = !self.pauseState + self.pauseButton?.toolTip = localizedString(self.pauseState ? "Resume the Stats" : "Pause the Stats") + self.pauseButton?.image = self.pauseState ? self.resumeIcon : self.pauseIcon + NotificationCenter.default.post(name: .pause, object: nil, userInfo: ["state": self.pauseState]) + } + + @objc func listenForPause() { + self.pauseButton?.toolTip = localizedString(self.pauseState ? "Resume the Stats" : "Pause the Stats") + self.pauseButton?.image = self.pauseState ? self.resumeIcon : self.pauseIcon + } } private class MenuItem: NSView {