mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-03 12:27:32 +01:00
Get rid of the window status bar. Put the current URL at the bottom of the detail view.
This commit is contained in:
parent
1f614c3c6a
commit
2efcd7ea0c
@ -99,6 +99,7 @@
|
|||||||
84B99C9D1FAE83C600ECDEDB /* DeleteFromSidebarCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B99C9C1FAE83C600ECDEDB /* DeleteFromSidebarCommand.swift */; };
|
84B99C9D1FAE83C600ECDEDB /* DeleteFromSidebarCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B99C9C1FAE83C600ECDEDB /* DeleteFromSidebarCommand.swift */; };
|
||||||
84BB4B771F11753300858766 /* Data.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84BB4B681F1174D400858766 /* Data.framework */; };
|
84BB4B771F11753300858766 /* Data.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84BB4B681F1174D400858766 /* Data.framework */; };
|
||||||
84BB4B781F11753300858766 /* Data.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84BB4B681F1174D400858766 /* Data.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
84BB4B781F11753300858766 /* Data.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84BB4B681F1174D400858766 /* Data.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
84D52E951FE588BB00D14F5B /* DetailStatusBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D52E941FE588BB00D14F5B /* DetailStatusBarView.swift */; };
|
||||||
84DAEE301F86CAFE0058304B /* OPMLImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DAEE2F1F86CAFE0058304B /* OPMLImporter.swift */; };
|
84DAEE301F86CAFE0058304B /* OPMLImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DAEE2F1F86CAFE0058304B /* OPMLImporter.swift */; };
|
||||||
84DAEE321F870B390058304B /* DockBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DAEE311F870B390058304B /* DockBadge.swift */; };
|
84DAEE321F870B390058304B /* DockBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DAEE311F870B390058304B /* DockBadge.swift */; };
|
||||||
84E46C7D1F75EF7B005ECFB3 /* AppDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E46C7C1F75EF7B005ECFB3 /* AppDefaults.swift */; };
|
84E46C7D1F75EF7B005ECFB3 /* AppDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E46C7C1F75EF7B005ECFB3 /* AppDefaults.swift */; };
|
||||||
@ -494,6 +495,7 @@
|
|||||||
84B99C9C1FAE83C600ECDEDB /* DeleteFromSidebarCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeleteFromSidebarCommand.swift; sourceTree = "<group>"; };
|
84B99C9C1FAE83C600ECDEDB /* DeleteFromSidebarCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeleteFromSidebarCommand.swift; sourceTree = "<group>"; };
|
||||||
84BB4B611F1174D400858766 /* Data.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Data.xcodeproj; path = Frameworks/Data/Data.xcodeproj; sourceTree = "<group>"; };
|
84BB4B611F1174D400858766 /* Data.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Data.xcodeproj; path = Frameworks/Data/Data.xcodeproj; sourceTree = "<group>"; };
|
||||||
84CBDDAE1FD3674C005A61AA /* Technotes */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Technotes; sourceTree = "<group>"; };
|
84CBDDAE1FD3674C005A61AA /* Technotes */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Technotes; sourceTree = "<group>"; };
|
||||||
|
84D52E941FE588BB00D14F5B /* DetailStatusBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailStatusBarView.swift; sourceTree = "<group>"; };
|
||||||
84DAEE2F1F86CAFE0058304B /* OPMLImporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OPMLImporter.swift; sourceTree = "<group>"; };
|
84DAEE2F1F86CAFE0058304B /* OPMLImporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OPMLImporter.swift; sourceTree = "<group>"; };
|
||||||
84DAEE311F870B390058304B /* DockBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = DockBadge.swift; path = Evergreen/DockBadge.swift; sourceTree = "<group>"; };
|
84DAEE311F870B390058304B /* DockBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = DockBadge.swift; path = Evergreen/DockBadge.swift; sourceTree = "<group>"; };
|
||||||
84E46C7C1F75EF7B005ECFB3 /* AppDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDefaults.swift; path = Evergreen/AppDefaults.swift; sourceTree = "<group>"; };
|
84E46C7C1F75EF7B005ECFB3 /* AppDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDefaults.swift; path = Evergreen/AppDefaults.swift; sourceTree = "<group>"; };
|
||||||
@ -715,6 +717,7 @@
|
|||||||
children = (
|
children = (
|
||||||
849A977E1ED9EC42007D329B /* DetailViewController.swift */,
|
849A977E1ED9EC42007D329B /* DetailViewController.swift */,
|
||||||
849A977D1ED9EC42007D329B /* ArticleRenderer.swift */,
|
849A977D1ED9EC42007D329B /* ArticleRenderer.swift */,
|
||||||
|
84D52E941FE588BB00D14F5B /* DetailStatusBarView.swift */,
|
||||||
);
|
);
|
||||||
path = Detail;
|
path = Detail;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -1402,6 +1405,7 @@
|
|||||||
84B99C9D1FAE83C600ECDEDB /* DeleteFromSidebarCommand.swift in Sources */,
|
84B99C9D1FAE83C600ECDEDB /* DeleteFromSidebarCommand.swift in Sources */,
|
||||||
849A97541ED9EAC0007D329B /* AddFeedWindowController.swift in Sources */,
|
849A97541ED9EAC0007D329B /* AddFeedWindowController.swift in Sources */,
|
||||||
849A976D1ED9EBC8007D329B /* TimelineTableView.swift in Sources */,
|
849A976D1ED9EBC8007D329B /* TimelineTableView.swift in Sources */,
|
||||||
|
84D52E951FE588BB00D14F5B /* DetailStatusBarView.swift in Sources */,
|
||||||
84B99C671FAE35E600ECDEDB /* FeedListTreeControllerDelegate.swift in Sources */,
|
84B99C671FAE35E600ECDEDB /* FeedListTreeControllerDelegate.swift in Sources */,
|
||||||
84B99C691FAE36B800ECDEDB /* FeedListFolder.swift in Sources */,
|
84B99C691FAE36B800ECDEDB /* FeedListFolder.swift in Sources */,
|
||||||
84F204DE1FAACB8B0076E152 /* FeedListTimelineViewController.swift in Sources */,
|
84F204DE1FAACB8B0076E152 /* FeedListTimelineViewController.swift in Sources */,
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="13770" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13770"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/>
|
||||||
<capability name="box content view" minToolsVersion="7.0"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
@ -238,7 +237,6 @@
|
|||||||
<toolbarItem reference="1Ql-WJ-KYi"/>
|
<toolbarItem reference="1Ql-WJ-KYi"/>
|
||||||
</defaultToolbarItems>
|
</defaultToolbarItems>
|
||||||
</toolbar>
|
</toolbar>
|
||||||
<contentBorderThickness minY="25"/>
|
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="B8D-0N-5wS" id="JSn-lq-Uwe"/>
|
<outlet property="delegate" destination="B8D-0N-5wS" id="JSn-lq-Uwe"/>
|
||||||
</connections>
|
</connections>
|
||||||
@ -282,12 +280,12 @@
|
|||||||
<scene sceneID="ZPA-jO-OkH">
|
<scene sceneID="ZPA-jO-OkH">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="reS-fe-pD8" sceneMemberID="viewController">
|
<viewController id="reS-fe-pD8" sceneMemberID="viewController">
|
||||||
<customView key="view" id="hWY-jP-A4m">
|
<customView key="view" wantsLayer="YES" id="hWY-jP-A4m">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="581" height="300"/>
|
<rect key="frame" x="0.0" y="0.0" width="581" height="300"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<containerView appearanceType="aqua" translatesAutoresizingMaskIntoConstraints="NO" id="K1o-Ws-XMQ">
|
<containerView appearanceType="aqua" translatesAutoresizingMaskIntoConstraints="NO" id="K1o-Ws-XMQ">
|
||||||
<rect key="frame" x="0.0" y="25" width="581" height="275"/>
|
<rect key="frame" x="0.0" y="0.0" width="581" height="300"/>
|
||||||
<userDefinedRuntimeAttributes>
|
<userDefinedRuntimeAttributes>
|
||||||
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
||||||
<color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
<color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
@ -297,73 +295,12 @@
|
|||||||
<segue destination="wEf-EP-9Fq" kind="embed" id="IT3-aj-bSe"/>
|
<segue destination="wEf-EP-9Fq" kind="embed" id="IT3-aj-bSe"/>
|
||||||
</connections>
|
</connections>
|
||||||
</containerView>
|
</containerView>
|
||||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="FWz-dC-55q" customClass="StatusBarView" customModule="Evergreen" customModuleProvider="target">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="581" height="25"/>
|
|
||||||
<subviews>
|
|
||||||
<popUpButton translatesAutoresizingMaskIntoConstraints="NO" id="k7g-zd-q4Q" userLabel="Gear Popup Button">
|
|
||||||
<rect key="frame" x="2" y="3" width="42" height="19"/>
|
|
||||||
<popUpButtonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" pullsDown="YES" selectedItem="Ijf-kL-7ym" id="z1h-lo-3qp">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="XUl-yC-HKz">
|
|
||||||
<items>
|
|
||||||
<menuItem state="on" image="NSActionTemplate" hidden="YES" id="Ijf-kL-7ym"/>
|
|
||||||
<menuItem title="Do A Thing…" id="8O0-wC-JIP"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
</popUpButton>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="Vq0-Di-DO2">
|
|
||||||
<rect key="frame" x="122" y="4" width="4" height="17"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" refusesFirstResponder="YES" allowsUndo="NO" sendsActionOnEndEditing="YES" usesSingleLineMode="YES" id="cUs-6K-KXd">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="NOS-H9-Mdl" userLabel="URL Label">
|
|
||||||
<rect key="frame" x="289" y="4" width="4" height="17"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" selectable="YES" refusesFirstResponder="YES" allowsUndo="NO" sendsActionOnEndEditing="YES" usesSingleLineMode="YES" id="JqV-71-gHH">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" white="0.25" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<progressIndicator wantsLayer="YES" maxValue="100" displayedWhenStopped="NO" style="bar" translatesAutoresizingMaskIntoConstraints="NO" id="kVh-DT-vkQ">
|
|
||||||
<rect key="frame" x="52" y="3" width="64" height="20"/>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="width" constant="64" id="AmG-EL-4l7"/>
|
|
||||||
</constraints>
|
|
||||||
</progressIndicator>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="NOS-H9-Mdl" firstAttribute="centerY" secondItem="FWz-dC-55q" secondAttribute="centerY" priority="999" id="0NZ-ry-RwE"/>
|
|
||||||
<constraint firstItem="k7g-zd-q4Q" firstAttribute="centerY" secondItem="FWz-dC-55q" secondAttribute="centerY" id="16o-PL-Tu4"/>
|
|
||||||
<constraint firstItem="Vq0-Di-DO2" firstAttribute="centerY" secondItem="FWz-dC-55q" secondAttribute="centerY" id="2sf-bK-T3N"/>
|
|
||||||
<constraint firstItem="kVh-DT-vkQ" firstAttribute="centerY" secondItem="FWz-dC-55q" secondAttribute="centerY" id="4h2-eA-vEm"/>
|
|
||||||
<constraint firstAttribute="height" constant="25" id="5Xu-xj-rhU"/>
|
|
||||||
<constraint firstItem="NOS-H9-Mdl" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Vq0-Di-DO2" secondAttribute="trailing" constant="8" id="Kdn-fY-Pg0"/>
|
|
||||||
<constraint firstItem="k7g-zd-q4Q" firstAttribute="leading" secondItem="FWz-dC-55q" secondAttribute="leading" constant="2" id="WyI-Mr-ysi"/>
|
|
||||||
<constraint firstItem="kVh-DT-vkQ" firstAttribute="leading" secondItem="k7g-zd-q4Q" secondAttribute="trailing" constant="8" id="g6B-We-Dqz"/>
|
|
||||||
<constraint firstItem="Vq0-Di-DO2" firstAttribute="leading" secondItem="kVh-DT-vkQ" secondAttribute="trailing" constant="8" id="pcT-32-3jd"/>
|
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="NOS-H9-Mdl" secondAttribute="trailing" constant="8" id="twV-E5-yKX"/>
|
|
||||||
</constraints>
|
|
||||||
<connections>
|
|
||||||
<outlet property="progressIndicator" destination="kVh-DT-vkQ" id="xDW-pX-IcH"/>
|
|
||||||
<outlet property="progressLabel" destination="Vq0-Di-DO2" id="Vy6-2E-jBh"/>
|
|
||||||
<outlet property="urlLabel" destination="NOS-H9-Mdl" id="ccW-m4-WXu"/>
|
|
||||||
</connections>
|
|
||||||
</customView>
|
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="trailing" secondItem="FWz-dC-55q" secondAttribute="trailing" id="2ct-ld-H1L"/>
|
|
||||||
<constraint firstItem="NOS-H9-Mdl" firstAttribute="centerX" secondItem="hWY-jP-A4m" secondAttribute="centerX" id="595-9t-wEe"/>
|
|
||||||
<constraint firstItem="K1o-Ws-XMQ" firstAttribute="top" secondItem="hWY-jP-A4m" secondAttribute="top" id="JPX-I3-QMN"/>
|
<constraint firstItem="K1o-Ws-XMQ" firstAttribute="top" secondItem="hWY-jP-A4m" secondAttribute="top" id="JPX-I3-QMN"/>
|
||||||
<constraint firstItem="K1o-Ws-XMQ" firstAttribute="leading" secondItem="hWY-jP-A4m" secondAttribute="leading" id="Vqi-IQ-2V0"/>
|
<constraint firstItem="K1o-Ws-XMQ" firstAttribute="leading" secondItem="hWY-jP-A4m" secondAttribute="leading" id="Vqi-IQ-2V0"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="K1o-Ws-XMQ" secondAttribute="trailing" id="Y9X-7J-odJ"/>
|
<constraint firstAttribute="trailing" secondItem="K1o-Ws-XMQ" secondAttribute="trailing" id="Y9X-7J-odJ"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="FWz-dC-55q" secondAttribute="bottom" id="h7d-Nx-QQG"/>
|
<constraint firstAttribute="bottom" secondItem="K1o-Ws-XMQ" secondAttribute="bottom" id="spp-4y-rEm"/>
|
||||||
<constraint firstItem="K1o-Ws-XMQ" firstAttribute="bottom" secondItem="FWz-dC-55q" secondAttribute="top" id="n95-KK-lST"/>
|
|
||||||
<constraint firstItem="FWz-dC-55q" firstAttribute="leading" secondItem="hWY-jP-A4m" secondAttribute="leading" id="tI7-n4-Eo1"/>
|
|
||||||
</constraints>
|
</constraints>
|
||||||
</customView>
|
</customView>
|
||||||
</viewController>
|
</viewController>
|
||||||
@ -637,14 +574,54 @@
|
|||||||
<scene sceneID="HMt-bN-oMN">
|
<scene sceneID="HMt-bN-oMN">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="Vho-7i-T8m" userLabel="Detail View Controller" customClass="DetailViewController" customModule="Evergreen" customModuleProvider="target" sceneMemberID="viewController">
|
<viewController id="Vho-7i-T8m" userLabel="Detail View Controller" customClass="DetailViewController" customModule="Evergreen" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
<box key="view" boxType="custom" borderType="none" title="Box" titlePosition="noTitle" id="ZqF-bf-2JN" customClass="DetailBox" customModule="Evergreen" customModuleProvider="target">
|
<customView key="view" id="37A-bp-izR">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="444" height="296"/>
|
<rect key="frame" x="0.0" y="0.0" width="450" height="300"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<view key="contentView" id="QLg-gD-24I">
|
<subviews>
|
||||||
<rect key="frame" x="0.0" y="0.0" width="444" height="296"/>
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="cJ9-6s-66u" customClass="DetailContainerView" customModule="Evergreen" customModuleProvider="target">
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<rect key="frame" x="0.0" y="28" width="450" height="272"/>
|
||||||
</view>
|
<userDefinedRuntimeAttributes>
|
||||||
</box>
|
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
||||||
|
<color key="value" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</customView>
|
||||||
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="xI5-lx-RD8" customClass="DetailStatusBarView" customModule="Evergreen" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="450" height="28"/>
|
||||||
|
<subviews>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Dim-ed-Dcz" userLabel="URL Label">
|
||||||
|
<rect key="frame" x="18" y="6" width="414" height="17"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" selectable="YES" allowsUndo="NO" sendsActionOnEndEditing="YES" alignment="center" usesSingleLineMode="YES" id="znU-Fh-L7H">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="Dim-ed-Dcz" firstAttribute="centerY" secondItem="xI5-lx-RD8" secondAttribute="centerY" id="Hna-uB-3F7"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="Dim-ed-Dcz" secondAttribute="trailing" constant="20" symbolic="YES" id="O5q-ZN-DjZ"/>
|
||||||
|
<constraint firstAttribute="height" constant="28" id="Sfk-Ri-WoD"/>
|
||||||
|
<constraint firstItem="Dim-ed-Dcz" firstAttribute="leading" secondItem="xI5-lx-RD8" secondAttribute="leading" constant="20" symbolic="YES" id="Y9c-WR-ZBY"/>
|
||||||
|
</constraints>
|
||||||
|
<connections>
|
||||||
|
<outlet property="urlLabel" destination="Dim-ed-Dcz" id="8fY-oo-cGT"/>
|
||||||
|
</connections>
|
||||||
|
</customView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="xI5-lx-RD8" secondAttribute="trailing" id="9M9-ef-mCr"/>
|
||||||
|
<constraint firstItem="cJ9-6s-66u" firstAttribute="leading" secondItem="37A-bp-izR" secondAttribute="leading" id="AM2-YB-J0B"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="xI5-lx-RD8" secondAttribute="bottom" id="DGH-Hk-TSv"/>
|
||||||
|
<constraint firstItem="cJ9-6s-66u" firstAttribute="top" secondItem="37A-bp-izR" secondAttribute="top" id="DXp-ju-WpM"/>
|
||||||
|
<constraint firstItem="xI5-lx-RD8" firstAttribute="top" secondItem="cJ9-6s-66u" secondAttribute="bottom" id="JJw-J8-N57"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="cJ9-6s-66u" secondAttribute="trailing" id="hUh-Uk-62r"/>
|
||||||
|
<constraint firstItem="xI5-lx-RD8" firstAttribute="leading" secondItem="37A-bp-izR" secondAttribute="leading" id="oCj-Mo-oMU"/>
|
||||||
|
</constraints>
|
||||||
|
</customView>
|
||||||
|
<connections>
|
||||||
|
<outlet property="containerView" destination="cJ9-6s-66u" id="gXc-Pz-9sQ"/>
|
||||||
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<customObject id="vzM-Vn-mEn" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
<customObject id="vzM-Vn-mEn" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
@ -652,7 +629,6 @@
|
|||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
<resources>
|
<resources>
|
||||||
<image name="NSActionTemplate" width="14" height="14"/>
|
|
||||||
<image name="NSAddTemplate" width="11" height="11"/>
|
<image name="NSAddTemplate" width="11" height="11"/>
|
||||||
<image name="NSGoLeftTemplate" width="9" height="12"/>
|
<image name="NSGoLeftTemplate" width="9" height="12"/>
|
||||||
<image name="NSGoRightTemplate" width="9" height="12"/>
|
<image name="NSGoRightTemplate" width="9" height="12"/>
|
||||||
|
146
Evergreen/MainWindow/Detail/DetailStatusBarView.swift
Normal file
146
Evergreen/MainWindow/Detail/DetailStatusBarView.swift
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
//
|
||||||
|
// DetailStatusBarView.swift
|
||||||
|
// Evergreen
|
||||||
|
//
|
||||||
|
// Created by Brent Simmons on 12/16/17.
|
||||||
|
// Copyright © 2017 Ranchero Software. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Cocoa
|
||||||
|
import DB5
|
||||||
|
import Data
|
||||||
|
|
||||||
|
final class DetailStatusBarView: NSView {
|
||||||
|
|
||||||
|
@IBOutlet var urlLabel: NSTextField!
|
||||||
|
|
||||||
|
// private var didConfigureLayer = false
|
||||||
|
|
||||||
|
private var article: Article? {
|
||||||
|
didSet {
|
||||||
|
updateURLLabel()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private var mouseoverLink: String? {
|
||||||
|
didSet {
|
||||||
|
updateURLLabel()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private let backgroundColor = appDelegate.currentTheme.color(forKey: "MainWindow.Detail.statusBar.backgroundColor")
|
||||||
|
|
||||||
|
override var isFlipped: Bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// override var wantsUpdateLayer: Bool {
|
||||||
|
// return true
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// override func updateLayer() {
|
||||||
|
//
|
||||||
|
// guard !didConfigureLayer else {
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// if let layer = layer {
|
||||||
|
// let color = appDelegate.currentTheme.color(forKey: "MainWindow.Detail.statusBar.backgroundColor")
|
||||||
|
// layer.backgroundColor = color.cgColor
|
||||||
|
// didConfigureLayer = true
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
override func awakeFromNib() {
|
||||||
|
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(timelineSelectionDidChange(_:)), name: .TimelineSelectionDidChange, object: nil)
|
||||||
|
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(mouseDidEnterLink(_:)), name: .MouseDidEnterLink, object: nil)
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(mouseDidExitLink(_:)), name: .MouseDidExitLink, object: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Notifications
|
||||||
|
|
||||||
|
@objc func mouseDidEnterLink(_ notification: Notification) {
|
||||||
|
|
||||||
|
guard let appInfo = AppInfo.pullFromUserInfo(notification.userInfo) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
guard let window = window, let notificationWindow = appInfo.view?.window, window === notificationWindow else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
guard let link = appInfo.url else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mouseoverLink = link
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func mouseDidExitLink(_ notification: Notification) {
|
||||||
|
|
||||||
|
guard let appInfo = AppInfo.pullFromUserInfo(notification.userInfo) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
guard let window = window, let notificationWindow = appInfo.view?.window, window === notificationWindow else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mouseoverLink = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func timelineSelectionDidChange(_ note: Notification) {
|
||||||
|
|
||||||
|
let timelineView = note.appInfo?.view
|
||||||
|
if timelineView?.window === self.window {
|
||||||
|
mouseoverLink = nil
|
||||||
|
article = note.appInfo?.article
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Drawing
|
||||||
|
|
||||||
|
private let lineColor = NSColor(calibratedWhite: 0.65, alpha: 1.0)
|
||||||
|
|
||||||
|
override func draw(_ dirtyRect: NSRect) {
|
||||||
|
|
||||||
|
backgroundColor.set()
|
||||||
|
dirtyRect.fill()
|
||||||
|
|
||||||
|
// let path = NSBezierPath()
|
||||||
|
// path.lineWidth = 1.0
|
||||||
|
// path.move(to: NSPoint(x: NSMinX(bounds), y: NSMinY(bounds) + 0.5))
|
||||||
|
// path.line(to: NSPoint(x: NSMaxX(bounds), y: NSMinY(bounds) + 0.5))
|
||||||
|
// lineColor.set()
|
||||||
|
// path.stroke()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private extension DetailStatusBarView {
|
||||||
|
|
||||||
|
// MARK: URL Label
|
||||||
|
|
||||||
|
func updateURLLabel() {
|
||||||
|
|
||||||
|
needsLayout = true
|
||||||
|
|
||||||
|
guard let article = article else {
|
||||||
|
setURLLabel("")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if let mouseoverLink = mouseoverLink, !mouseoverLink.isEmpty {
|
||||||
|
setURLLabel(mouseoverLink)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if let s = article.preferredLink {
|
||||||
|
setURLLabel(s)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setURLLabel("")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setURLLabel(_ link: String) {
|
||||||
|
|
||||||
|
urlLabel.stringValue = (link as NSString).rs_stringByStrippingHTTPOrHTTPSScheme()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -14,6 +14,8 @@ import RSWeb
|
|||||||
|
|
||||||
final class DetailViewController: NSViewController, WKNavigationDelegate, WKUIDelegate {
|
final class DetailViewController: NSViewController, WKNavigationDelegate, WKUIDelegate {
|
||||||
|
|
||||||
|
@IBOutlet var containerView: DetailContainerView!
|
||||||
|
|
||||||
var webview: WKWebView!
|
var webview: WKWebView!
|
||||||
var noSelectionView: NoSelectionView!
|
var noSelectionView: NoSelectionView!
|
||||||
|
|
||||||
@ -58,8 +60,7 @@ final class DetailViewController: NSViewController, WKNavigationDelegate, WKUIDe
|
|||||||
|
|
||||||
noSelectionView = NoSelectionView(frame: self.view.bounds)
|
noSelectionView = NoSelectionView(frame: self.view.bounds)
|
||||||
|
|
||||||
let boxView = self.view as! DetailBox
|
containerView.viewController = self
|
||||||
boxView.viewController = self
|
|
||||||
|
|
||||||
showOrHideWebView()
|
showOrHideWebView()
|
||||||
}
|
}
|
||||||
@ -109,12 +110,10 @@ final class DetailViewController: NSViewController, WKNavigationDelegate, WKUIDe
|
|||||||
|
|
||||||
private func switchToView(_ view: NSView) {
|
private func switchToView(_ view: NSView) {
|
||||||
|
|
||||||
let boxView = self.view as! DetailBox
|
if containerView.contentView == view {
|
||||||
if boxView.contentView == view {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
boxView.contentView = view
|
containerView.contentView = view
|
||||||
boxView.rs_addFullSizeConstraints(forSubview: view)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: WKNavigationDelegate
|
// MARK: WKNavigationDelegate
|
||||||
@ -170,10 +169,29 @@ extension DetailViewController: WKScriptMessageHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final class DetailBox: NSBox {
|
final class DetailContainerView: NSView {
|
||||||
|
|
||||||
weak var viewController: DetailViewController?
|
weak var viewController: DetailViewController? = nil
|
||||||
|
|
||||||
|
private var didConfigureLayer = false
|
||||||
|
|
||||||
|
override var wantsUpdateLayer: Bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
var contentView: NSView? {
|
||||||
|
didSet {
|
||||||
|
if let oldContentView = oldValue {
|
||||||
|
oldContentView.removeFromSuperviewWithoutNeedingDisplay()
|
||||||
|
}
|
||||||
|
if let contentView = contentView {
|
||||||
|
contentView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
addSubview(contentView)
|
||||||
|
rs_addFullSizeConstraints(forSubview: contentView)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override func viewWillStartLiveResize() {
|
override func viewWillStartLiveResize() {
|
||||||
|
|
||||||
viewController?.viewWillStartLiveResize()
|
viewController?.viewWillStartLiveResize()
|
||||||
@ -183,6 +201,18 @@ final class DetailBox: NSBox {
|
|||||||
|
|
||||||
viewController?.viewDidEndLiveResize()
|
viewController?.viewDidEndLiveResize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func updateLayer() {
|
||||||
|
|
||||||
|
guard !didConfigureLayer else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if let layer = layer {
|
||||||
|
let color = appDelegate.currentTheme.color(forKey: "MainWindow.Detail.backgroundColor")
|
||||||
|
layer.backgroundColor = color.cgColor
|
||||||
|
didConfigureLayer = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final class NoSelectionView: NSView {
|
final class NoSelectionView: NSView {
|
||||||
|
@ -10,7 +10,7 @@ import Cocoa
|
|||||||
|
|
||||||
class MainWindowSplitView: NSSplitView {
|
class MainWindowSplitView: NSSplitView {
|
||||||
|
|
||||||
private let splitViewDividerColor = NSColor(calibratedWhite: 0.75, alpha: 1.0)
|
private let splitViewDividerColor = NSColor(calibratedWhite: 0.65, alpha: 1.0)
|
||||||
|
|
||||||
override var dividerColor: NSColor {
|
override var dividerColor: NSColor {
|
||||||
get {
|
get {
|
||||||
|
@ -115,6 +115,13 @@
|
|||||||
<key>backgroundColor</key>
|
<key>backgroundColor</key>
|
||||||
<string>FFFFFF</string>
|
<string>FFFFFF</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<key>statusBar</key>
|
||||||
|
<dict>
|
||||||
|
<key>backgroundColor</key>
|
||||||
|
<string>FFFFFF</string>
|
||||||
|
</dict>
|
||||||
|
<key>backgroundColor</key>
|
||||||
|
<string>FFFFFF</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user