Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Show layout names rather than keys in Preferences UI #792

Merged
merged 4 commits into from Feb 25, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 6 additions & 6 deletions Amethyst/Events/HotKeyManager.swift
Expand Up @@ -187,9 +187,9 @@ final class HotKeyManager: NSObject {
self.userConfiguration.toggleFocusFollowsMouse()
}

LayoutManager.availableLayoutStrings().forEach { layoutString in
self.constructCommandWithCommandKey(UserConfiguration.constructLayoutKeyString(layoutString)) {
windowManager.focusedScreenManager()?.selectLayout(layoutString)
LayoutManager.availableLayoutStrings().forEach { (layoutKey, _) in
self.constructCommandWithCommandKey(UserConfiguration.constructLayoutKeyString(layoutKey)) {
windowManager.focusedScreenManager()?.selectLayout(layoutKey)
}
}
}
Expand Down Expand Up @@ -336,9 +336,9 @@ final class HotKeyManager: NSObject {
hotKeyNameToDefaultsKey.append(["Display current layout", CommandKey.displayCurrentLayout.rawValue])
hotKeyNameToDefaultsKey.append(["Toggle global tiling", CommandKey.toggleTiling.rawValue])

for layoutString in LayoutManager.availableLayoutStrings() {
let commandName = "Select \(layoutString) layout"
let commandKey = "select-\(layoutString)-layout"
for (layoutKey, layoutName) in LayoutManager.availableLayoutStrings() {
let commandName = "Select \(layoutName) layout"
let commandKey = "select-\(layoutKey)-layout"
hotKeyNameToDefaultsKey.append([commandName, commandKey])
}

Expand Down
48 changes: 40 additions & 8 deletions Amethyst/Managers/LayoutManager.swift
Expand Up @@ -9,8 +9,8 @@
import Foundation

enum LayoutManager {
static func layoutForKey(_ layoutString: String, with windowActivityCache: WindowActivityCache) -> Layout? {
switch layoutString {
static func layoutForKey(_ layoutKey: String, with windowActivityCache: WindowActivityCache) -> Layout? {
cdisselkoen marked this conversation as resolved.
Show resolved Hide resolved
switch layoutKey {
case "tall":
return TallLayout(windowActivityCache: windowActivityCache)
case "tall-right":
Expand Down Expand Up @@ -40,7 +40,39 @@ enum LayoutManager {
}
}

static func availableLayoutStrings() -> [String] {
static func layoutNameForKey(_ layoutKey: String) -> String? {
ianyh marked this conversation as resolved.
Show resolved Hide resolved
switch layoutKey {
case "tall":
return TallLayout.layoutName
case "tall-right":
return TallRightLayout.layoutName
case "wide":
return WideLayout.layoutName
case "3column-left":
return ThreeColumnLeftLayout.layoutName
case "middle-wide":
return ThreeColumnMiddleLayout.layoutName
case "3column-right":
return ThreeColumnRightLayout.layoutName
case "fullscreen":
return FullscreenLayout.layoutName
case "column":
return ColumnLayout.layoutName
case "row":
return RowLayout.layoutName
case "floating":
return FloatingLayout.layoutName
case "widescreen-tall":
return WidescreenTallLayout.layoutName
case "bsp":
return BinarySpacePartitioningLayout.layoutName
default:
return nil
}
}

// Returns a list of (key, name) pairs
static func availableLayoutStrings() -> [(key: String, name: String)] {
let layoutClasses: [Layout.Type] = [
TallLayout.self,
TallRightLayout.self,
Expand All @@ -56,14 +88,14 @@ enum LayoutManager {
BinarySpacePartitioningLayout.self
]

return layoutClasses.map { $0.layoutKey }
return layoutClasses.map { ($0.layoutKey, $0.layoutName) }
}

static func layoutsWithConfiguration(_ userConfiguration: UserConfiguration, windowActivityCache: WindowActivityCache) -> [Layout] {
let layoutStrings: [String] = userConfiguration.layoutStrings()
let layouts = layoutStrings.map { layoutString -> Layout? in
guard let layout = LayoutManager.layoutForKey(layoutString, with: windowActivityCache) else {
log.warning("Unrecognized layout string \(layoutString)")
let layoutKeys: [String] = userConfiguration.layoutKeys()
let layouts = layoutKeys.map { layoutKey -> Layout? in
guard let layout = LayoutManager.layoutForKey(layoutKey, with: windowActivityCache) else {
log.warning("Unrecognized layout key \(layoutKey)")
return nil
}

Expand Down
28 changes: 15 additions & 13 deletions Amethyst/Preferences/GeneralPreferencesViewController.swift
Expand Up @@ -10,7 +10,7 @@ import Cocoa
import Foundation

final class GeneralPreferencesViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
private var layouts: [String] = []
private var layoutKeys: [String] = []

@IBOutlet var layoutsTableView: NSTableView?

Expand All @@ -24,16 +24,18 @@ final class GeneralPreferencesViewController: NSViewController, NSTableViewDataS
override func viewWillAppear() {
super.viewWillAppear()

layouts = UserConfiguration.shared.layoutStrings()
layoutKeys = UserConfiguration.shared.layoutKeys()

layoutsTableView?.reloadData()
}

@IBAction func addLayout(_ sender: NSButton) {
let layoutMenu = NSMenu(title: "")

for layoutString in LayoutManager.availableLayoutStrings() {
let menuItem = NSMenuItem(title: layoutString, action: #selector(addLayoutString(_:)), keyEquivalent: "")
for (layoutKey, layoutName) in LayoutManager.availableLayoutStrings() {
let menuItem = NSMenuItem(title: layoutKey, action: #selector(addLayoutString(_:)), keyEquivalent: "")
menuItem.attributedTitle = NSAttributedString(string: layoutName)
menuItem.title = layoutKey
ianyh marked this conversation as resolved.
Show resolved Hide resolved
menuItem.target = self
menuItem.action = #selector(addLayoutString(_:))

Expand All @@ -59,34 +61,34 @@ final class GeneralPreferencesViewController: NSViewController, NSTableViewDataS
}

@IBAction func addLayoutString(_ sender: NSMenuItem) {
var layouts = self.layouts
layouts.append(sender.title)
self.layouts = layouts
var layoutKeys = self.layoutKeys
layoutKeys.append(sender.title)
self.layoutKeys = layoutKeys

UserConfiguration.shared.setLayoutStrings(self.layouts)
UserConfiguration.shared.setLayoutKeys(self.layoutKeys)

layoutsTableView?.reloadData()
}

@IBAction func removeLayout(_ sender: AnyObject) {
guard let selectedRow = layoutsTableView?.selectedRow, selectedRow < self.layouts.count, selectedRow != NSTableView.noRowSelectedIndex else { return }
guard let selectedRow = layoutsTableView?.selectedRow, selectedRow < self.layoutKeys.count, selectedRow != NSTableView.noRowSelectedIndex else { return }
ianyh marked this conversation as resolved.
Show resolved Hide resolved

layouts.remove(at: selectedRow)
layoutKeys.remove(at: selectedRow)

UserConfiguration.shared.setLayoutStrings(layouts)
UserConfiguration.shared.setLayoutKeys(layoutKeys)

layoutsTableView?.reloadData()
}

func numberOfRows(in tableView: NSTableView) -> Int {
return layouts.count
return layoutKeys.count
}

func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
guard row > -1 else {
return nil
}

return layouts[row]
return LayoutManager.layoutNameForKey(layoutKeys[row])
}
}
14 changes: 7 additions & 7 deletions Amethyst/Preferences/UserConfiguration.swift
Expand Up @@ -312,8 +312,8 @@ final class UserConfiguration: NSObject {
modifier2 = modifierFlagsForStrings(mod2Strings)
}

static func constructLayoutKeyString(_ layoutString: String) -> String {
return "select-\(layoutString)-layout"
static func constructLayoutKeyString(_ layoutKey: String) -> String {
return "select-\(layoutKey)-layout"
}

func constructCommand(for hotKeyRegistrar: HotKeyRegistrar, commandKey: String, handler: @escaping HotKeyHandler) {
Expand Down Expand Up @@ -388,13 +388,13 @@ final class UserConfiguration: NSObject {
}
}

func layoutStrings() -> [String] {
let layoutStrings = storage.array(forKey: .layouts) as? [String]
return layoutStrings ?? []
func layoutKeys() -> [String] {
let layoutKeys = storage.array(forKey: .layouts) as? [String]
return layoutKeys ?? []
}

func setLayoutStrings(_ layoutStrings: [String]) {
storage.set(layoutStrings as Any?, forKey: .layouts)
func setLayoutKeys(_ layoutKeys: [String]) {
storage.set(layoutKeys as Any?, forKey: .layouts)
}

func runningApplication(_ runningApplication: BundleIdentifiable, shouldFloatWindowWithTitle title: String) -> Bool {
Expand Down