OSDN Git Service

#keyPathが使用可能な部分で全て使用するようにした
[kcd/KCD.git] / KCD / ExternalBrowserWindowController.swift
index 04d16a1..e4e74d2 100644 (file)
@@ -21,8 +21,8 @@ class ExternalBrowserWindowController: NSWindowController {
     let managedObjectContext = BookmarkManager.shared().manageObjectContext
     
     deinit {
-        webView.removeObserver(self, forKeyPath: "canGoBack")
-        webView.removeObserver(self, forKeyPath: "canGoForward")
+        webView.removeObserver(self, forKeyPath: #keyPath(webView.canGoBack))
+        webView.removeObserver(self, forKeyPath: #keyPath(webView.canGoForward))
     }
     
     @IBOutlet var webView: WebView!
@@ -72,24 +72,20 @@ class ExternalBrowserWindowController: NSWindowController {
             contentRect.size = newValue
             var newFrame = window.frameRect(forContentRect: contentRect)
             let frame = window.frame
-            newFrame.origin.x = NSMinX(frame)
-            newFrame.origin.y = NSMaxY(frame) - NSHeight(newFrame)
+            newFrame.origin.x = frame.minX
+            newFrame.origin.y = frame.maxY - newFrame.height
             window.setFrame(newFrame, display: true)
         }
     }
     var contentVisibleRect: NSRect {
-        get {
-            return webView.mainFrame.frameView.documentView.visibleRect
-        }
-        set {
-            webView.mainFrame.frameView.documentView.scrollToVisible(newValue)
-        }
+        get { return webView.mainFrame.frameView.documentView.visibleRect }
+        set { webView.mainFrame.frameView.documentView.scrollToVisible(newValue) }
     }
     
     fileprivate var bookmarkShowing: Bool = false
     fileprivate var waitingBookmarkItem: Bookmark?
     
-    private lazy var bookmarkListViwController: BookmarkListViewController? = {
+    fileprivate lazy var bookmarkListViwController: BookmarkListViewController? = {
         [weak self] in
         guard let `self` = self else { return nil }
         let controller = BookmarkListViewController()
@@ -108,43 +104,26 @@ class ExternalBrowserWindowController: NSWindowController {
     override func windowDidLoad() {
         super.windowDidLoad()
         
-        webView.addObserver(self, forKeyPath: "canGoBack", context: nil)
-        webView.addObserver(self, forKeyPath: "canGoForward", context: nil)
+        webView.addObserver(self, forKeyPath: #keyPath(webView.canGoBack), context: nil)
+        webView.addObserver(self, forKeyPath: #keyPath(webView.canGoForward), context: nil)
         webView.applicationNameForUserAgent = AppDelegate.shared.appNameForUserAgent
         webView.frameLoadDelegate = self
     }
-    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
-        if keyPath == "canGoBack" {
+    override func observeValue(forKeyPath keyPath: String?,
+                               of object: Any?,
+                               change: [NSKeyValueChangeKey: Any]?,
+                               context: UnsafeMutableRawPointer?) {
+        if keyPath == #keyPath(webView.canGoBack) {
             goSegment.setEnabled(webView.canGoBack, forSegment: 0)
             return
         }
-        if keyPath == "canGoForward" {
+        if keyPath == #keyPath(webView.canGoForward) {
             goSegment.setEnabled(webView.canGoForward, forSegment: 1)
             return
         }
         
         super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
     }
-    override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
-        guard let action = menuItem.action else { return false }
-        switch action {
-        case Selector.addBookmark:
-            return webView.mainFrameURL != nil
-        case Selector.showBookmark:
-            if showsBookmarkList() {
-                menuItem.title = NSLocalizedString("Hide Bookmark", comment: "Menu item title, Hide Bookmark")
-            } else {
-                menuItem.title = NSLocalizedString("Show Bookmark", comment: "Menu item title, Show Bookmark")
-            }
-            return true
-        case Selector.selectBookmark:
-            return true
-        case Selector.reloadContent:
-            return true
-        default:
-            return false
-        }
-    }
     override func swipe(with event: NSEvent) {
         if event.deltaX > 0 && showsBookmarkList() {
             showBookmark(nil)
@@ -169,8 +148,31 @@ class ExternalBrowserWindowController: NSWindowController {
     fileprivate func showsBookmarkList() -> Bool {
         return webView.frame.origin.x > 0
     }
+}
+
+// MARK: - IBAction
+extension ExternalBrowserWindowController {
+    override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
+        guard let action = menuItem.action else { return false }
+        switch action {
+        case Selector.addBookmark:
+            return webView.mainFrameURL != nil
+        case Selector.showBookmark:
+            if showsBookmarkList() {
+                menuItem.title = NSLocalizedString("Hide Bookmark", comment: "Menu item title, Hide Bookmark")
+            } else {
+                menuItem.title = NSLocalizedString("Show Bookmark", comment: "Menu item title, Show Bookmark")
+            }
+            return true
+        case Selector.selectBookmark:
+            return true
+        case Selector.reloadContent:
+            return true
+        default:
+            return false
+        }
+    }
     
-    // MARK: - IBAction
     @IBAction func selectBookmark(_ sender: AnyObject?) {
         guard let item = sender?.representedObject as? Bookmark
             else { return }
@@ -230,11 +232,11 @@ class ExternalBrowserWindowController: NSWindowController {
             newFrame.size.width = window.frame.size.width - 200
         }
         
-        let webAnime: [String : Any] = [
+        let webAnime: [String: Any] = [
             NSViewAnimationTargetKey: webView,
             NSViewAnimationEndFrameKey: NSValue(rect: newFrame)
         ]
-        let bookmarkAnime: [String : Any] = [
+        let bookmarkAnime: [String: Any] = [
             NSViewAnimationTargetKey: bookmarkListView,
             NSViewAnimationEndFrameKey: NSValue(rect: frame)
         ]
@@ -310,11 +312,19 @@ extension ExternalBrowserWindowController: WebFrameLoadDelegate, WebPolicyDelega
     }
     func webView(_ sender: WebView!, didFinishLoadFor frame: WebFrame!) {
         if let waitingBookmarkItem = waitingBookmarkItem {
-            Timer.scheduledTimer(timeInterval: waitingBookmarkItem.scrollDelay, target: self, selector: .updateContentVisibleRect, userInfo: waitingBookmarkItem, repeats: false)
+            Timer.scheduledTimer(timeInterval: waitingBookmarkItem.scrollDelay,
+                                 target: self,
+                                 selector: .updateContentVisibleRect,
+                                 userInfo: waitingBookmarkItem,
+                                 repeats: false)
         }
         waitingBookmarkItem = nil
     }
-    func webView(_ webView: WebView!, decidePolicyForNavigationAction actionInformation: [AnyHashable: Any]!, request: URLRequest!, frame: WebFrame!, decisionListener listener: WebPolicyDecisionListener!) {
+    func webView(_ webView: WebView!,
+                 decidePolicyForNavigationAction actionInformation: [AnyHashable: Any]!,
+                 request: URLRequest!,
+                 frame: WebFrame!,
+                 decisionListener listener: WebPolicyDecisionListener!) {
         if actionInformation?[WebActionNavigationTypeKey] as? WebNavigationType == .linkClicked {
             if canMovePage {
                 listener.use()
@@ -324,4 +334,3 @@ extension ExternalBrowserWindowController: WebFrameLoadDelegate, WebPolicyDelega
         listener.use()
     }
 }
-