mirror of
https://github.com/Toxblh/MTMR.git
synced 2026-01-10 00:58:37 +00:00
Merge pull request #167 from willsunnn:master
Added an additional option for the dock to automatically resize
This commit is contained in:
commit
164295820b
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Application-->
|
||||
@ -619,7 +619,7 @@
|
||||
<menuItem title="Show Sidebar" keyEquivalent="s" id="kIP-vf-haE">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="toggleSourceList:" target="Ady-hI-5gd" id="iwa-gc-5KM"/>
|
||||
<action selector="toggleSidebar:" target="Ady-hI-5gd" id="iwa-gc-5KM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.20.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>185</string>
|
||||
<string>250</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.utilities</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
|
||||
@ -197,9 +197,12 @@ class SupportedTypesHolder {
|
||||
)
|
||||
},
|
||||
|
||||
"dock": { _ in
|
||||
(
|
||||
item: .dock(),
|
||||
"dock": { decoder in
|
||||
enum CodingKeys: String, CodingKey { case autoResize }
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
let autoResize = try container.decodeIfPresent(Bool.self, forKey: .autoResize) ?? false
|
||||
return (
|
||||
item: .dock(autoResize: autoResize),
|
||||
action: .none,
|
||||
longAction: .none,
|
||||
parameters: [:]
|
||||
@ -327,7 +330,7 @@ enum ItemType: Decodable {
|
||||
case appleScriptTitledButton(source: SourceProtocol, refreshInterval: Double)
|
||||
case timeButton(formatTemplate: String, timeZone: String?)
|
||||
case battery()
|
||||
case dock()
|
||||
case dock(autoResize: Bool)
|
||||
case volume()
|
||||
case brightness(refreshInterval: Double)
|
||||
case weather(interval: Double, units: String, api_key: String, icon_type: String)
|
||||
@ -360,6 +363,7 @@ enum ItemType: Decodable {
|
||||
case workTime
|
||||
case restTime
|
||||
case flip
|
||||
case autoResize
|
||||
}
|
||||
|
||||
enum ItemTypeRaw: String, Decodable {
|
||||
@ -403,7 +407,8 @@ enum ItemType: Decodable {
|
||||
self = .battery()
|
||||
|
||||
case .dock:
|
||||
self = .dock()
|
||||
let autoResize = try container.decodeIfPresent(Bool.self, forKey: .autoResize) ?? false
|
||||
self = .dock(autoResize: autoResize)
|
||||
|
||||
case .volume:
|
||||
self = .volume()
|
||||
|
||||
@ -27,7 +27,7 @@ extension ItemType {
|
||||
return "com.toxblh.mtmr.timeButton."
|
||||
case .battery():
|
||||
return "com.toxblh.mtmr.battery."
|
||||
case .dock():
|
||||
case .dock(autoResize: _):
|
||||
return "com.toxblh.mtmr.dock"
|
||||
case .volume():
|
||||
return "com.toxblh.mtmr.volume"
|
||||
@ -251,8 +251,8 @@ class TouchBarController: NSObject, NSTouchBarDelegate {
|
||||
barItem = TimeTouchBarItem(identifier: identifier, formatTemplate: template, timeZone: timeZone)
|
||||
case .battery():
|
||||
barItem = BatteryBarItem(identifier: identifier)
|
||||
case .dock:
|
||||
barItem = AppScrubberTouchBarItem(identifier: identifier)
|
||||
case let .dock(autoResize: autoResize):
|
||||
barItem = AppScrubberTouchBarItem(identifier: identifier, autoResize: autoResize)
|
||||
case .volume:
|
||||
if case let .image(source)? = item.additionalParameters[.image] {
|
||||
barItem = VolumeViewController(identifier: identifier, image: source.image)
|
||||
|
||||
@ -17,6 +17,8 @@ class AppScrubberTouchBarItem: NSCustomTouchBarItem, NSScrubberDelegate, NSScrub
|
||||
private let minTicks: Int = 5
|
||||
private let maxTicks: Int = 20
|
||||
private var lastSelected: Int = 0
|
||||
private var autoResize: Bool = false
|
||||
private var widthConstraint: NSLayoutConstraint?
|
||||
|
||||
private var persistentAppIdentifiers: [String] = []
|
||||
private var runningAppsIdentifiers: [String] = []
|
||||
@ -27,17 +29,25 @@ class AppScrubberTouchBarItem: NSCustomTouchBarItem, NSScrubberDelegate, NSScrub
|
||||
}
|
||||
|
||||
private var applications: [DockItem] = []
|
||||
|
||||
convenience override init(identifier: NSTouchBarItem.Identifier) {
|
||||
self.init(identifier: identifier, autoResize: false)
|
||||
}
|
||||
|
||||
static var iconWidth = 36
|
||||
static var spacingWidth = 2
|
||||
|
||||
override init(identifier: NSTouchBarItem.Identifier) {
|
||||
init(identifier: NSTouchBarItem.Identifier, autoResize: Bool) {
|
||||
super.init(identifier: identifier)
|
||||
|
||||
self.autoResize = autoResize
|
||||
|
||||
scrubber = NSScrubber()
|
||||
scrubber.delegate = self
|
||||
scrubber.dataSource = self
|
||||
scrubber.mode = .free // .fixed
|
||||
let layout = NSScrubberFlowLayout()
|
||||
layout.itemSize = NSSize(width: 36, height: 32)
|
||||
layout.itemSpacing = 2
|
||||
layout.itemSize = NSSize(width: AppScrubberTouchBarItem.iconWidth, height: 32)
|
||||
layout.itemSpacing = CGFloat(AppScrubberTouchBarItem.spacingWidth)
|
||||
scrubber.scrubberLayout = layout
|
||||
scrubber.selectionBackgroundStyle = .roundedBackground
|
||||
scrubber.showsAdditionalContentIndicators = true
|
||||
@ -79,9 +89,22 @@ class AppScrubberTouchBarItem: NSCustomTouchBarItem, NSScrubberDelegate, NSScrub
|
||||
applications = newApplications
|
||||
applications += getDockPersistentAppsList()
|
||||
scrubber.reloadData()
|
||||
updateSize()
|
||||
|
||||
scrubber.selectedIndex = index ?? 0
|
||||
}
|
||||
|
||||
func updateSize() {
|
||||
if self.autoResize {
|
||||
if let constraint: NSLayoutConstraint = self.widthConstraint {
|
||||
constraint.isActive = false
|
||||
self.scrubber.removeConstraint(constraint)
|
||||
}
|
||||
let width = (AppScrubberTouchBarItem.iconWidth + AppScrubberTouchBarItem.spacingWidth) * self.applications.count - AppScrubberTouchBarItem.spacingWidth
|
||||
self.widthConstraint = self.scrubber.widthAnchor.constraint(equalToConstant: CGFloat(width))
|
||||
self.widthConstraint!.isActive = true
|
||||
}
|
||||
}
|
||||
|
||||
public func numberOfItems(for _: NSScrubber) -> Int {
|
||||
return applications.count
|
||||
|
||||
Loading…
Reference in New Issue
Block a user