diff --git a/Frameworks/Account/AccountManager.swift b/Frameworks/Account/AccountManager.swift index 9bc984c17..1bd871834 100644 --- a/Frameworks/Account/AccountManager.swift +++ b/Frameworks/Account/AccountManager.swift @@ -104,8 +104,10 @@ public final class AccountManager: UnreadCountProvider { let account = Account(dataFolder: accountFolder, type: type, accountID: accountID)! accountsDictionary[accountID] = account - return account + NotificationCenter.default.post(name: .AccountsDidChangeNotification, object: self) + + return account } public func existingAccount(with accountID: String) -> Account? { diff --git a/Mac/AppImages.swift b/Mac/AppImages.swift index c99342a91..f48b8bec4 100644 --- a/Mac/AppImages.swift +++ b/Mac/AppImages.swift @@ -27,15 +27,11 @@ struct AppImages { }() static var accountLocal: RSImage! = { - let image = RSImage(named: "accountLocal") - image?.isTemplate = true - return image + return RSImage(named: "accountLocal") }() static var accountFeedbin: RSImage! = { - let image = RSImage(named: "accountFeedbin") - image?.isTemplate = true - return image + return RSImage(named: "accountFeedbin") }() } diff --git a/Mac/MainWindow/Sidebar/SidebarViewController.swift b/Mac/MainWindow/Sidebar/SidebarViewController.swift index 18f856ca2..b1f64175e 100644 --- a/Mac/MainWindow/Sidebar/SidebarViewController.swift +++ b/Mac/MainWindow/Sidebar/SidebarViewController.swift @@ -53,6 +53,7 @@ protocol SidebarDelegate: class { NotificationCenter.default.addObserver(self, selector: #selector(unreadCountDidChange(_:)), name: .UnreadCountDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(containerChildrenDidChange(_:)), name: .ChildrenDidChange, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(accountsDidChangeNotification(_:)), name: .AccountsDidChangeNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(userDidAddFeed(_:)), name: .UserDidAddFeed, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(batchUpdateDidPerform(_:)), name: .BatchUpdateDidPerform, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(faviconDidBecomeAvailable(_:)), name: .FaviconDidBecomeAvailable, object: nil) @@ -110,6 +111,10 @@ protocol SidebarDelegate: class { rebuildTreeAndRestoreSelection() } + @objc func accountsDidChangeNotification(_ notification: Notification) { + rebuildTreeAndRestoreSelection() + } + @objc func batchUpdateDidPerform(_ notification: Notification) { rebuildTreeAndRestoreSelection() } diff --git a/Mac/Preferences/Accounts/AccountsAddLocal.xib b/Mac/Preferences/Accounts/AccountsAddLocal.xib new file mode 100644 index 000000000..9e6ec3d2f --- /dev/null +++ b/Mac/Preferences/Accounts/AccountsAddLocal.xib @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Mac/Preferences/Accounts/AccountsAddLocalWindowController.swift b/Mac/Preferences/Accounts/AccountsAddLocalWindowController.swift new file mode 100644 index 000000000..f89ee0e4a --- /dev/null +++ b/Mac/Preferences/Accounts/AccountsAddLocalWindowController.swift @@ -0,0 +1,43 @@ +// +// AccountsAddLocalWindowController.swift +// NetNewsWire +// +// Created by Maurice Parker on 5/1/19. +// Copyright © 2019 Ranchero Software. All rights reserved. +// + +import AppKit +import Account + +class AccountsAddLocalWindowController: NSWindowController { + + @IBOutlet weak var nameTextField: NSTextField! + + private weak var hostWindow: NSWindow? + + convenience init() { + self.init(windowNibName: NSNib.Name("AccountsAddLocal")) + } + + // MARK: API + + func runSheetOnWindow(_ hostWindow: NSWindow) { + self.hostWindow = hostWindow + hostWindow.beginSheet(window!) + } + + // MARK: Actions + + @IBAction func cancel(_ sender: Any) { + hostWindow!.endSheet(window!, returnCode: NSApplication.ModalResponse.cancel) + } + + @IBAction func create(_ sender: Any) { + let account = AccountManager.shared.createAccount(type: .onMyMac) + if !nameTextField.stringValue.isEmpty { + account.name = nameTextField.stringValue + } + hostWindow!.endSheet(window!, returnCode: NSApplication.ModalResponse.OK) + } + +} diff --git a/Mac/Preferences/Accounts/AccountsAddTableCellView.swift b/Mac/Preferences/Accounts/AccountsAddTableCellView.swift index e83507a65..cf8af80ec 100644 --- a/Mac/Preferences/Accounts/AccountsAddTableCellView.swift +++ b/Mac/Preferences/Accounts/AccountsAddTableCellView.swift @@ -6,7 +6,7 @@ // Copyright © 2019 Ranchero Software. All rights reserved. // -import Cocoa +import AppKit class AccountsAddTableCellView: NSTableCellView { diff --git a/Mac/Preferences/Accounts/AccountsAddViewController.swift b/Mac/Preferences/Accounts/AccountsAddViewController.swift index fc6f50991..baa802464 100644 --- a/Mac/Preferences/Accounts/AccountsAddViewController.swift +++ b/Mac/Preferences/Accounts/AccountsAddViewController.swift @@ -6,12 +6,14 @@ // Copyright © 2019 Ranchero Software. All rights reserved. // -import Cocoa +import AppKit class AccountsAddViewController: NSViewController { @IBOutlet weak var tableView: NSTableView! + private var accountsAddWindowController: NSWindowController? + init() { super.init(nibName: "AccountsAdd", bundle: nil) } @@ -21,11 +23,14 @@ class AccountsAddViewController: NSViewController { } override func viewDidLoad() { + super.viewDidLoad() + tableView.dataSource = self tableView.delegate = self - } + } + } // MARK: - NSTableViewDataSource @@ -52,7 +57,7 @@ extension AccountsAddViewController: NSTableViewDelegate { if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "Cell"), owner: nil) as? AccountsAddTableCellView { switch row { case 0: - cell.accountNameLabel?.stringValue = NSLocalizedString("Local", comment: "Local") + cell.accountNameLabel?.stringValue = NSLocalizedString("On My Mac", comment: "Local") cell.accountImageView?.image = AppImages.accountLocal case 1: cell.accountNameLabel?.stringValue = NSLocalizedString("Feedbin", comment: "Feedbin") @@ -67,18 +72,21 @@ extension AccountsAddViewController: NSTableViewDelegate { func tableViewSelectionDidChange(_ notification: Notification) { -// let selectedRow = tableView.selectedRow -// guard selectedRow != -1 else { -// return -// } -// -// let account = sortedAccounts[selectedRow] -// -// let controller = AccountDetailViewController(account: account) -// addChild(controller) -// controller.view.translatesAutoresizingMaskIntoConstraints = false -// detailView.addSubview(controller.view) -// detailView.rs_addFullSizeConstraints(forSubview: controller.view) + let selectedRow = tableView.selectedRow + guard selectedRow != -1 else { + return + } + + switch selectedRow { + case 0: + let accountsAddLocalWindowController = AccountsAddLocalWindowController() + accountsAddLocalWindowController.runSheetOnWindow(self.view.window!) + accountsAddWindowController = accountsAddLocalWindowController + default: + break + } + + tableView.selectRowIndexes([], byExtendingSelection: false) } diff --git a/Mac/Preferences/Accounts/AccountsPreferencesViewController.swift b/Mac/Preferences/Accounts/AccountsPreferencesViewController.swift index 2ec565458..6cbb40604 100644 --- a/Mac/Preferences/Accounts/AccountsPreferencesViewController.swift +++ b/Mac/Preferences/Accounts/AccountsPreferencesViewController.swift @@ -24,6 +24,8 @@ final class AccountsPreferencesViewController: NSViewController { tableView.dataSource = self NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange(_:)), name: .DisplayNameDidChange, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(accountsDidChangeNotification(_:)), name: .AccountsDidChangeNotification, object: nil) + showController(AccountsAddViewController()) } @@ -41,6 +43,11 @@ final class AccountsPreferencesViewController: NSViewController { tableView.reloadData() } + @objc func accountsDidChangeNotification(_ note: Notification) { + updateSortedAccounts() + tableView.reloadData() + } + } // MARK: - NSTableViewDataSource diff --git a/Mac/Resources/Assets.xcassets/accountFeedbin.imageset/Contents.json b/Mac/Resources/Assets.xcassets/accountFeedbin.imageset/Contents.json index d2d0aef70..327e5717e 100644 --- a/Mac/Resources/Assets.xcassets/accountFeedbin.imageset/Contents.json +++ b/Mac/Resources/Assets.xcassets/accountFeedbin.imageset/Contents.json @@ -8,5 +8,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/Mac/Resources/Assets.xcassets/accountLocal.imageset/Contents.json b/Mac/Resources/Assets.xcassets/accountLocal.imageset/Contents.json index 9ad92bad7..4b7dc7acc 100644 --- a/Mac/Resources/Assets.xcassets/accountLocal.imageset/Contents.json +++ b/Mac/Resources/Assets.xcassets/accountLocal.imageset/Contents.json @@ -8,5 +8,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 54eb5795f..382d17364 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -18,6 +18,8 @@ 512E09352268B25900BDCFDD /* UISplitViewController-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512E092B2268B25500BDCFDD /* UISplitViewController-Extensions.swift */; }; 512E094D2268B8AB00BDCFDD /* DeleteCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B99C9C1FAE83C600ECDEDB /* DeleteCommand.swift */; }; 5144EA2F2279FAB600D19003 /* AccountsDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5144EA2E2279FAB600D19003 /* AccountsDetailViewController.swift */; }; + 5144EA362279FC3D00D19003 /* AccountsAddLocal.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5144EA352279FC3D00D19003 /* AccountsAddLocal.xib */; }; + 5144EA382279FC6200D19003 /* AccountsAddLocalWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5144EA372279FC6200D19003 /* AccountsAddLocalWindowController.swift */; }; 5183CCD0226E1E880010922C /* NonIntrinsicLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCCF226E1E880010922C /* NonIntrinsicLabel.swift */; }; 5183CCDA226E31A50010922C /* NonIntrinsicImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCD9226E31A50010922C /* NonIntrinsicImageView.swift */; }; 5183CCDD226F1F5C0010922C /* NavigationProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCDC226F1F5C0010922C /* NavigationProgressView.swift */; }; @@ -638,6 +640,8 @@ 512E08F722688F7C00BDCFDD /* MasterFeedTableViewSectionHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterFeedTableViewSectionHeader.swift; sourceTree = ""; }; 512E092B2268B25500BDCFDD /* UISplitViewController-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UISplitViewController-Extensions.swift"; sourceTree = ""; }; 5144EA2E2279FAB600D19003 /* AccountsDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountsDetailViewController.swift; sourceTree = ""; }; + 5144EA352279FC3D00D19003 /* AccountsAddLocal.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AccountsAddLocal.xib; sourceTree = ""; }; + 5144EA372279FC6200D19003 /* AccountsAddLocalWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsAddLocalWindowController.swift; sourceTree = ""; }; 5183CCCF226E1E880010922C /* NonIntrinsicLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NonIntrinsicLabel.swift; sourceTree = ""; }; 5183CCD9226E31A50010922C /* NonIntrinsicImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NonIntrinsicImageView.swift; sourceTree = ""; }; 5183CCDC226F1F5C0010922C /* NavigationProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationProgressView.swift; sourceTree = ""; }; @@ -1570,6 +1574,8 @@ 51EF0F912279CA620050506E /* AccountsAddTableCellView.swift */, 84C9FC7422629E1200D921D6 /* AccountsDetail.xib */, 5144EA2E2279FAB600D19003 /* AccountsDetailViewController.swift */, + 5144EA352279FC3D00D19003 /* AccountsAddLocal.xib */, + 5144EA372279FC6200D19003 /* AccountsAddLocalWindowController.swift */, ); path = Accounts; sourceTree = ""; @@ -2165,6 +2171,7 @@ 51EF0F8E2279C9260050506E /* AccountsAdd.xib in Resources */, 84C9FC8F22629E8F00D921D6 /* NetNewsWire.sdef in Resources */, 84C9FC7D22629E1200D921D6 /* AccountsDetail.xib in Resources */, + 5144EA362279FC3D00D19003 /* AccountsAddLocal.xib in Resources */, 84C9FC8C22629E8F00D921D6 /* KeyboardShortcuts.html in Resources */, 844B5B691FEA20DF00C7C76A /* SidebarKeyboardShortcuts.plist in Resources */, 84A3EE5F223B667F00557320 /* DefaultFeeds.opml in Resources */, @@ -2392,6 +2399,7 @@ 84E185C3203BB12600F69BFA /* MultilineTextFieldSizer.swift in Sources */, 8477ACBE22238E9500DF7F37 /* SearchFeedDelegate.swift in Sources */, 8472058120142E8900AD578B /* FeedInspectorViewController.swift in Sources */, + 5144EA382279FC6200D19003 /* AccountsAddLocalWindowController.swift in Sources */, 84AD1EAA2031617300BC20B7 /* FolderPasteboardWriter.swift in Sources */, 84AD1EBC2032AF5C00BC20B7 /* SidebarOutlineDataSource.swift in Sources */, 845A29241FC9255E007B49E3 /* SidebarCellAppearance.swift in Sources */,