Finish hiding the NavigationStateController internal structures.

This commit is contained in:
Maurice Parker 2019-04-21 18:13:39 -05:00
parent 4479d724ae
commit 5f653c7ba1
2 changed files with 31 additions and 12 deletions

View File

@ -137,11 +137,11 @@ class MasterViewController: UITableViewController, UndoableCommandRunner {
// MARK: Table View
override func numberOfSections(in tableView: UITableView) -> Int {
return navState.shadowTable.count
return navState.numberOfSections
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return navState.shadowTable[section].count
return navState.rowsInSection(section)
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
@ -168,7 +168,7 @@ class MasterViewController: UITableViewController, UndoableCommandRunner {
}
headerView.tag = section
headerView.disclosureExpanded = navState.expandedNodes.contains(sectionNode)
headerView.disclosureExpanded = navState.isExpanded(sectionNode)
let tap = UITapGestureRecognizer(target: self, action:#selector(self.toggleSectionHeader(_:)))
headerView.addGestureRecognizer(tap)
@ -275,7 +275,7 @@ class MasterViewController: UITableViewController, UndoableCommandRunner {
}
// If this is a folder and isn't expanded or doesn't have any entries, let the users drop on it
if destNode.representedObject is Folder && (destNode.numberOfChildNodes == 0 || !navState.expandedNodes.contains(destNode)) {
if destNode.representedObject is Folder && (destNode.numberOfChildNodes == 0 || !navState.isExpanded(destNode)) {
let movementAdjustment = sourceIndexPath > destIndexPath ? 1 : 0
return IndexPath(row: destIndexPath.row + movementAdjustment, section: destIndexPath.section)
}
@ -458,7 +458,7 @@ class MasterViewController: UITableViewController, UndoableCommandRunner {
return
}
if navState.expandedNodes.contains(sectionNode) {
if navState.isExpanded(sectionNode) {
headerView.disclosureExpanded = false
navState.collapse(section: sectionIndex) { [weak self] indexPaths in
self?.tableView.beginUpdates()
@ -486,7 +486,7 @@ class MasterViewController: UITableViewController, UndoableCommandRunner {
} else {
cell.indentationLevel = 0
}
cell.disclosureExpanded = navState.expandedNodes.contains(node)
cell.disclosureExpanded = navState.isExpanded(node)
cell.allowDisclosureSelection = node.canHaveChildNodes
cell.name = nameFor(node)
@ -534,13 +534,13 @@ class MasterViewController: UITableViewController, UndoableCommandRunner {
return
}
navState.animatingChanges = true
navState.beginUpdates()
runCommand(deleteCommand)
navState.rebuildShadowTable()
tableView.deleteRows(at: [indexPath], with: .automatic)
navState.animatingChanges = false
navState.endUpdates()
}

View File

@ -27,10 +27,9 @@ class NavigationStateController {
private var articleRowMap = [String: Int]() // articleID: rowIndex
// Eventually I want these to be private too -Maurice
var animatingChanges = false
var expandedNodes = [Node]()
var shadowTable = [[Node]]()
private var animatingChanges = false
private var expandedNodes = [Node]()
private var shadowTable = [[Node]]()
private var sortDirection = AppDefaults.timelineSortDirection {
didSet {
@ -49,6 +48,10 @@ class NavigationStateController {
return treeController.rootNode
}
var numberOfSections: Int {
return shadowTable.count
}
var showFeedNames = false {
didSet {
NotificationCenter.default.post(name: .ShowFeedNamesDidChange, object: self, userInfo: nil)
@ -178,7 +181,19 @@ class NavigationStateController {
}
// MARK: API
func beginUpdates() {
animatingChanges = true
}
func endUpdates() {
animatingChanges = false
}
func rowsInSection(_ section: Int) -> Int {
return shadowTable[section].count
}
func rebuildBackingStores() {
if !animatingChanges && !BatchUpdate.shared.isPerforming {
treeController.rebuild()
@ -210,6 +225,10 @@ class NavigationStateController {
}
func isExpanded(_ node: Node) -> Bool {
return expandedNodes.contains(node)
}
func nodeFor(_ indexPath: IndexPath) -> Node? {
guard indexPath.section < shadowTable.count || indexPath.row < shadowTable[indexPath.section].count else {
return nil