Make sidebar expand/collapse keyboard shortcuts work.
This commit is contained in:
parent
70000c1d31
commit
84845c21b3
|
@ -6,41 +6,25 @@
|
|||
<key>key</key>
|
||||
<string>,</string>
|
||||
<key>action</key>
|
||||
<string>sidebarCollapse:</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>key</key>
|
||||
<string>[leftarrow]</string>
|
||||
<key>action</key>
|
||||
<string>sidebarCollapse:</string>
|
||||
<key>commandModifier</key>
|
||||
<true/>
|
||||
<string>collapseSelectedRows:</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>key</key>
|
||||
<string>.</string>
|
||||
<key>action</key>
|
||||
<string>sidebarExpand:</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>key</key>
|
||||
<string>[rightarrow]</string>
|
||||
<key>action</key>
|
||||
<string>sidebarExpand:</string>
|
||||
<key>commandModifier</key>
|
||||
<true/>
|
||||
<string>expandSelectedRows:</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>key</key>
|
||||
<string>;</string>
|
||||
<key>action</key>
|
||||
<string>sidebarCollapseAll:</string>
|
||||
<string>collapseAllExceptForGroupItems:</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>key</key>
|
||||
<string>[leftarrow]</string>
|
||||
<key>action</key>
|
||||
<string>sidebarCollapseAll:</string>
|
||||
<string>collapseAllExceptForGroupItems:</string>
|
||||
<key>commandModifier</key>
|
||||
<true/>
|
||||
<key>optionModifier</key>
|
||||
|
@ -50,13 +34,13 @@
|
|||
<key>key</key>
|
||||
<string>'</string>
|
||||
<key>action</key>
|
||||
<string>sidebarExpandAll:</string>
|
||||
<string>expandAll:</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>key</key>
|
||||
<string>[rightarrow]</string>
|
||||
<key>action</key>
|
||||
<string>sidebarExpandAll:</string>
|
||||
<string>expandAll:</string>
|
||||
<key>commandModifier</key>
|
||||
<true/>
|
||||
<key>optionModifier</key>
|
||||
|
|
|
@ -135,7 +135,6 @@ import RSCore
|
|||
|
||||
// MARK: Navigation
|
||||
|
||||
|
||||
func canGoToNextUnread() -> Bool {
|
||||
|
||||
if let _ = rowContainingNextUnread() {
|
||||
|
|
|
@ -52,9 +52,9 @@
|
|||
|
||||
<tr><td colspan="2"> <br /></td></tr>
|
||||
<tr><td colspan="2" class="tableTitleRow">Left sidebar only…</td></tr>
|
||||
<tr class="backgroundColorRow"><td>Collapse</td><td>, or cmd-leftArrow</td></tr>
|
||||
<tr><td>Expand</td><td>. or cmd-rightArrow</td></tr>
|
||||
<tr class="backgroundColorRow"><td>Collapse All</td><td>; or option-cmd-leftArrow</td></tr>
|
||||
<tr class="backgroundColorRow"><td>Collapse</td><td>, or option-leftArrow</td></tr>
|
||||
<tr><td>Expand</td><td>. or option-rightArrow</td></tr>
|
||||
<tr class="backgroundColorRow"><td>Collapse All (except for group items)</td><td>; or option-cmd-leftArrow</td></tr>
|
||||
<tr><td>Expand All</td><td>' or option-cmd-rightArrow</td></tr>
|
||||
<tr class="backgroundColorRow"><td>Move focus to headlines</td><td>rightArrow</td></tr>
|
||||
|
||||
|
|
|
@ -22,4 +22,79 @@ public extension NSOutlineView {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func collapseSelectedRows(_ sender: Any?) {
|
||||
|
||||
for item in selectedItems {
|
||||
if isExpandable(item) && isItemExpanded(item) {
|
||||
collapseItem(item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func expandSelectedRows(_ sender: Any?) {
|
||||
|
||||
for item in selectedItems {
|
||||
if isExpandable(item) && !isItemExpanded(item) {
|
||||
expandItem(item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func expandAll(_ sender: Any?) {
|
||||
|
||||
expandAllChildren(of: nil)
|
||||
}
|
||||
|
||||
@IBAction func collapseAllExceptForGroupItems(_ sender: Any?) {
|
||||
|
||||
collapseAllChildren(of: nil, exceptForGroupItems: true)
|
||||
}
|
||||
|
||||
func expandAllChildren(of item: Any?) {
|
||||
|
||||
guard let childItems = children(of: item) else {
|
||||
return
|
||||
}
|
||||
|
||||
for child in childItems {
|
||||
if !isItemExpanded(child) && isExpandable(child) {
|
||||
expandItem(child, expandChildren: true)
|
||||
}
|
||||
expandAllChildren(of: child)
|
||||
}
|
||||
}
|
||||
|
||||
func collapseAllChildren(of item: Any?, exceptForGroupItems: Bool) {
|
||||
|
||||
guard let childItems = children(of: item) else {
|
||||
return
|
||||
}
|
||||
|
||||
for child in childItems {
|
||||
collapseAllChildren(of: child, exceptForGroupItems: exceptForGroupItems)
|
||||
if exceptForGroupItems && isGroupItem(child) {
|
||||
continue
|
||||
}
|
||||
if isItemExpanded(child) {
|
||||
collapseItem(child, collapseChildren: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func children(of item: Any?) -> [Any]? {
|
||||
|
||||
var children = [Any]()
|
||||
for indexOfItem in 0..<numberOfChildren(ofItem: item) {
|
||||
if let child = child(indexOfItem, ofItem: item) {
|
||||
children.append(child)
|
||||
}
|
||||
}
|
||||
return children.isEmpty ? nil : children
|
||||
}
|
||||
|
||||
func isGroupItem(_ item: Any) -> Bool {
|
||||
|
||||
return delegate?.outlineView?(self, isGroupItem: item) ?? false
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue