Simplify "bars" logic in Main Window (#7840)

* Adopt NSTitlebarAccessoryViewController for filter and status bars

Also remove custom views as separator is drawn with Horizontal Line.
Simplifies maintainance a bit.

* Unembed main content and status bar from NSStackView

Stack is no longer needed, as bars are moved into titlebar.
This commit is contained in:
Dzmitry Neviadomski
2025-11-20 05:30:55 +03:00
committed by GitHub
parent 147da72453
commit 54f0417f42
13 changed files with 582 additions and 699 deletions

View File

@@ -107,7 +107,6 @@
A209EC12114301C6002B02D1 /* InfoOptionsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = A209EC11114301C6002B02D1 /* InfoOptionsView.xib */; };
A209ECA2114319C3002B02D1 /* InfoWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = A209ECA1114319C3002B02D1 /* InfoWindow.xib */; };
A209EE5D1144B51E002B02D1 /* history.h in Headers */ = {isa = PBXBuildFile; fileRef = A209EE5B1144B51E002B02D1 /* history.h */; };
A21282A80CA6C66800EAEE0F /* StatusBarView.mm in Sources */ = {isa = PBXBuildFile; fileRef = A21282A60CA6C66800EAEE0F /* StatusBarView.mm */; };
A215BF5C0F02EBB800350CDB /* GroupRules.xib in Resources */ = {isa = PBXBuildFile; fileRef = A215BF5B0F02EBB800350CDB /* GroupRules.xib */; };
A219798B0D07B78400438EA7 /* GroupToolbarItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = A219798A0D07B78400438EA7 /* GroupToolbarItem.mm */; };
A21A9BE2106D86A800F1C3C1 /* TrackerNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = A21A9BE1106D86A800F1C3C1 /* TrackerNode.mm */; };
@@ -178,7 +177,6 @@
A25E74660AF5097D006F11AE /* ExpandedPathToIconTransformer.mm in Sources */ = {isa = PBXBuildFile; fileRef = A25E74460AF5089E006F11AE /* ExpandedPathToIconTransformer.mm */; };
A263C6B1F6718E2486DB20E0 /* tr-buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A263C6B1F6718E2486DB20E1 /* tr-buffer.h */; };
A263CFC010DD67670038DE27 /* InfoTextField.mm in Sources */ = {isa = PBXBuildFile; fileRef = A263CFBF10DD67670038DE27 /* InfoTextField.mm */; };
A2661D6112D0E8D9004F69D5 /* FilterBarView.mm in Sources */ = {isa = PBXBuildFile; fileRef = A2661D3B12D0E51B004F69D5 /* FilterBarView.mm */; };
A267927C130DFF2700CB7464 /* libutp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A2E38544130DFEE3001F501B /* libutp.a */; };
A2679294130E00A000CB7464 /* tr-utp.cc in Sources */ = {isa = PBXBuildFile; fileRef = A2679292130E00A000CB7464 /* tr-utp.cc */; };
A2679295130E00A000CB7464 /* tr-utp.h in Headers */ = {isa = PBXBuildFile; fileRef = A2679293130E00A000CB7464 /* tr-utp.h */; };
@@ -895,8 +893,6 @@
A209EBF81142FEEE002B02D1 /* InfoOptionsViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = InfoOptionsViewController.mm; sourceTree = "<group>"; };
A209ECA1114319C3002B02D1 /* InfoWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = InfoWindow.xib; sourceTree = "<group>"; };
A209EE5B1144B51E002B02D1 /* history.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = history.h; sourceTree = "<group>"; };
A21282A50CA6C66800EAEE0F /* StatusBarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StatusBarView.h; sourceTree = "<group>"; };
A21282A60CA6C66800EAEE0F /* StatusBarView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = StatusBarView.mm; sourceTree = "<group>"; };
A21979890D07B78400438EA7 /* GroupToolbarItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GroupToolbarItem.h; sourceTree = "<group>"; };
A219798A0D07B78400438EA7 /* GroupToolbarItem.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = GroupToolbarItem.mm; sourceTree = "<group>"; };
A21A9BE0106D86A800F1C3C1 /* TrackerNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TrackerNode.h; sourceTree = "<group>"; };
@@ -988,8 +984,6 @@
A263C6B1F6718E2486DB20E1 /* tr-buffer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = "tr-buffer.h"; sourceTree = "<group>"; };
A263CFBE10DD67670038DE27 /* InfoTextField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InfoTextField.h; sourceTree = "<group>"; };
A263CFBF10DD67670038DE27 /* InfoTextField.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = InfoTextField.mm; sourceTree = "<group>"; };
A2661D3A12D0E51A004F69D5 /* FilterBarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilterBarView.h; sourceTree = "<group>"; };
A2661D3B12D0E51B004F69D5 /* FilterBarView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FilterBarView.mm; sourceTree = "<group>"; };
A2679292130E00A000CB7464 /* tr-utp.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "tr-utp.cc"; sourceTree = "<group>"; };
A2679293130E00A000CB7464 /* tr-utp.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = "tr-utp.h"; sourceTree = "<group>"; };
A267C2832E9F2B23003B87D7 /* Transmission_Tahoe.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; name = Transmission_Tahoe.icon; path = Images/Transmission_Tahoe.icon; sourceTree = "<group>"; };
@@ -1756,12 +1750,8 @@
E138A9760C04D88F00C5426C /* ProgressGradients.mm */,
A2E57AB91310822C00A7DAB1 /* StatusBarController.h */,
A2E57ABA1310822C00A7DAB1 /* StatusBarController.mm */,
A21282A50CA6C66800EAEE0F /* StatusBarView.h */,
A21282A60CA6C66800EAEE0F /* StatusBarView.mm */,
A2E57BA513109E6B00A7DAB1 /* FilterBarController.h */,
A2E57BA613109E6B00A7DAB1 /* FilterBarController.mm */,
A2661D3A12D0E51A004F69D5 /* FilterBarView.h */,
A2661D3B12D0E51B004F69D5 /* FilterBarView.mm */,
A2ED7D8D0CEF431B00970975 /* FilterButton.h */,
A2ED7D8E0CEF431B00970975 /* FilterButton.mm */,
A2C89D5F0CFCBF57004CC2BC /* ButtonToolbarItem.mm */,
@@ -3560,7 +3550,6 @@
ED6F16B72EB8F1EB007CD864 /* FileCheckCellView.mm in Sources */,
A2DF37070C220D03006523C1 /* CreatorWindowController.mm in Sources */,
A2085DDC0C53BC74000BC3B7 /* AboutWindowController.mm in Sources */,
A21282A80CA6C66800EAEE0F /* StatusBarView.mm in Sources */,
A257C1820CAD3003004E121C /* PeerTableView.mm in Sources */,
45489C5429AF6FB20098A812 /* TorrentCellActionButton.mm in Sources */,
A2A6321B0CD9751700E3DA60 /* BadgeView.mm in Sources */,
@@ -3601,7 +3590,6 @@
A209EBF91142FEEE002B02D1 /* InfoOptionsViewController.mm in Sources */,
ED9862972B979AA2002F3035 /* Utils.mm in Sources */,
A21F15AC11729A8B00CF5A9C /* AddMagnetWindowController.mm in Sources */,
A2661D6112D0E8D9004F69D5 /* FilterBarView.mm in Sources */,
A2F7CF5F13035FFD0016FF10 /* URLSheetWindowController.mm in Sources */,
A2E57ABB1310822C00A7DAB1 /* StatusBarController.mm in Sources */,
A2E57BA713109E6B00A7DAB1 /* FilterBarController.mm in Sources */,

View File

@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="24412" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="24412"/>
<capability name="Image references" minToolsVersion="12.0"/>
<capability name="NSView safe area layout guides" minToolsVersion="12.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -13,513 +15,507 @@
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Transmission" separatorStyle="line" allowsToolTipsWhenApplicationIsInactive="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="TransmissionWindow" animationBehavior="default" tabbingMode="disallowed" id="21" userLabel="Transmission">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<window title="Transmission" allowsToolTipsWhenApplicationIsInactive="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="TransmissionWindow" animationBehavior="default" tabbingMode="disallowed" id="21" userLabel="Transmission">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" fullSizeContentView="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" topStrut="YES"/>
<rect key="contentRect" x="71" y="712" width="515" height="248"/>
<rect key="screenRect" x="0.0" y="0.0" width="1470" height="919"/>
<rect key="contentRect" x="71" y="712" width="480" height="269"/>
<rect key="screenRect" x="0.0" y="0.0" width="2056" height="1290"/>
<value key="minSize" type="size" width="350" height="5"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="524" height="220"/>
<rect key="frame" x="0.0" y="0.0" width="480" height="348"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" spacing="0.0" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Msk-Iv-kCJ">
<rect key="frame" x="0.0" y="0.0" width="524" height="220"/>
<subviews>
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="65" horizontalPageScroll="0.0" verticalLineScroll="65" verticalPageScroll="0.0" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3088">
<rect key="frame" x="0.0" y="24" width="524" height="196"/>
<clipView key="contentView" copiesOnScroll="NO" id="5cE-5g-l0I">
<rect key="frame" x="0.0" y="0.0" width="524" height="196"/>
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="65" horizontalPageScroll="0.0" verticalLineScroll="65" verticalPageScroll="0.0" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3088">
<rect key="frame" x="0.0" y="24" width="480" height="240"/>
<clipView key="contentView" copiesOnScroll="NO" id="5cE-5g-l0I">
<rect key="frame" x="0.0" y="0.0" width="480" height="240"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" autosaveColumns="NO" rowHeight="62" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" indentationMarkerFollowsCell="NO" autoresizesOutlineColumn="YES" outlineTableColumn="3093" id="3091" customClass="TorrentTableView">
<rect key="frame" x="0.0" y="0.0" width="480" height="240"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" autosaveColumns="NO" rowHeight="62" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" indentationMarkerFollowsCell="NO" autoresizesOutlineColumn="YES" outlineTableColumn="3093" id="3091" customClass="TorrentTableView">
<rect key="frame" x="0.0" y="0.0" width="524" height="196"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="2" height="3"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" white="0.80241936000000003" alpha="1" colorSpace="calibratedWhite"/>
<tableColumns>
<tableColumn identifier="Torrent" editable="NO" width="492" minWidth="16" maxWidth="3000" id="3093">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Torrent">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell>
<imageCell key="dataCell" controlSize="small" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="imageCell:Uue-OE-Cnc:image" id="Uue-OE-Cnc">
<font key="font" metaFont="system"/>
</imageCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
<prototypeCellViews>
<tableCellView identifier="GroupCell" id="0FS-PW-dzb" customClass="GroupCell">
<rect key="frame" x="11" y="1" width="502" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Gwg-pn-lM5">
<rect key="frame" x="11" y="2" width="14" height="14"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="Jy3-b5-hDM"/>
<constraint firstAttribute="width" constant="14" id="njz-e9-z2g"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="NSStatusAvailable" id="9EY-oY-PNG"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ubd-A0-0oW">
<rect key="frame" x="337" y="1" width="16" height="16"/>
<constraints>
<constraint firstAttribute="height" constant="16" id="B9U-SP-PBV"/>
<constraint firstAttribute="width" constant="16" id="FmI-yQ-CfP"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="DownArrowTemplate" id="AQv-3A-dH5"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="hYZ-OW-ebc">
<rect key="frame" x="421" y="1" width="16" height="16"/>
<constraints>
<constraint firstAttribute="width" constant="16" id="CGc-C8-J6A"/>
<constraint firstAttribute="height" constant="16" id="SqQ-wV-N6u"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="UpArrowTemplate" id="M11-HA-ONH"/>
</imageView>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JAO-DI-vbm">
<rect key="frame" x="351" y="2" width="64" height="14"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="60" id="MR1-WF-Gcs"/>
</constraints>
<textFieldCell key="cell" lineBreakMode="clipping" title="0.0KB/s" id="x8g-Nv-jcD">
<font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kLh-dT-fWl">
<rect key="frame" x="435" y="2" width="64" height="14"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="60" id="FLW-3y-3Ft"/>
</constraints>
<textFieldCell key="cell" lineBreakMode="clipping" title="0.0KB/s" id="HmT-FI-amY">
<font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="XfM-wG-Zxc">
<rect key="frame" x="28" y="2" width="311" height="14"/>
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="Group Title" id="zIM-6D-jsa">
<font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<size key="intercellSpacing" width="2" height="3"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn identifier="Torrent" editable="NO" width="448" minWidth="16" maxWidth="3000" id="3093">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Torrent">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell>
<imageCell key="dataCell" controlSize="small" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="imageCell:Uue-OE-Cnc:image" id="Uue-OE-Cnc">
<font key="font" metaFont="system"/>
</imageCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
<prototypeCellViews>
<tableCellView identifier="GroupCell" id="0FS-PW-dzb" customClass="GroupCell">
<rect key="frame" x="11" y="1" width="458" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Gwg-pn-lM5">
<rect key="frame" x="11" y="2" width="14" height="14"/>
<constraints>
<constraint firstItem="hYZ-OW-ebc" firstAttribute="leading" secondItem="JAO-DI-vbm" secondAttribute="trailing" constant="8" symbolic="YES" id="3ZJ-sm-LLQ"/>
<constraint firstItem="XfM-wG-Zxc" firstAttribute="leading" secondItem="Gwg-pn-lM5" secondAttribute="trailing" constant="5" id="4bb-lb-TYP"/>
<constraint firstItem="JAO-DI-vbm" firstAttribute="leading" secondItem="ubd-A0-0oW" secondAttribute="trailing" id="8gL-pL-QKz"/>
<constraint firstAttribute="trailing" secondItem="kLh-dT-fWl" secondAttribute="trailing" constant="5" id="D4t-PI-NVX"/>
<constraint firstItem="ubd-A0-0oW" firstAttribute="leading" secondItem="XfM-wG-Zxc" secondAttribute="trailing" id="E4I-Nb-vB5"/>
<constraint firstItem="ubd-A0-0oW" firstAttribute="centerY" secondItem="Gwg-pn-lM5" secondAttribute="centerY" id="GZB-R5-O8z"/>
<constraint firstItem="hYZ-OW-ebc" firstAttribute="centerY" secondItem="Gwg-pn-lM5" secondAttribute="centerY" id="NWK-Hj-44W"/>
<constraint firstItem="Gwg-pn-lM5" firstAttribute="centerY" secondItem="0FS-PW-dzb" secondAttribute="centerY" id="Yau-WM-aqf"/>
<constraint firstItem="XfM-wG-Zxc" firstAttribute="centerY" secondItem="Gwg-pn-lM5" secondAttribute="centerY" id="pB3-eZ-C1W"/>
<constraint firstItem="Gwg-pn-lM5" firstAttribute="leading" secondItem="0FS-PW-dzb" secondAttribute="leading" constant="11" id="qsg-vi-UIQ"/>
<constraint firstItem="JAO-DI-vbm" firstAttribute="centerY" secondItem="Gwg-pn-lM5" secondAttribute="centerY" id="rWB-xX-7V9"/>
<constraint firstItem="kLh-dT-fWl" firstAttribute="leading" secondItem="hYZ-OW-ebc" secondAttribute="trailing" id="t7S-2X-ur7"/>
<constraint firstItem="kLh-dT-fWl" firstAttribute="centerY" secondItem="Gwg-pn-lM5" secondAttribute="centerY" id="uLM-dC-jCY"/>
<constraint firstAttribute="height" constant="14" id="Jy3-b5-hDM"/>
<constraint firstAttribute="width" constant="14" id="njz-e9-z2g"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="NSStatusAvailable" id="9EY-oY-PNG"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ubd-A0-0oW">
<rect key="frame" x="293" y="1" width="16" height="16"/>
<constraints>
<constraint firstAttribute="height" constant="16" id="B9U-SP-PBV"/>
<constraint firstAttribute="width" constant="16" id="FmI-yQ-CfP"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="DownArrowTemplate" id="AQv-3A-dH5"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="hYZ-OW-ebc">
<rect key="frame" x="377" y="1" width="16" height="16"/>
<constraints>
<constraint firstAttribute="width" constant="16" id="CGc-C8-J6A"/>
<constraint firstAttribute="height" constant="16" id="SqQ-wV-N6u"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="UpArrowTemplate" id="M11-HA-ONH"/>
</imageView>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JAO-DI-vbm">
<rect key="frame" x="307" y="2" width="64" height="14"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="60" id="MR1-WF-Gcs"/>
</constraints>
<textFieldCell key="cell" lineBreakMode="clipping" title="0.0KB/s" id="x8g-Nv-jcD">
<font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kLh-dT-fWl">
<rect key="frame" x="391" y="2" width="64" height="14"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="60" id="FLW-3y-3Ft"/>
</constraints>
<textFieldCell key="cell" lineBreakMode="clipping" title="0.0KB/s" id="HmT-FI-amY">
<font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="XfM-wG-Zxc">
<rect key="frame" x="28" y="2" width="267" height="14"/>
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="Group Title" id="zIM-6D-jsa">
<font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="hYZ-OW-ebc" firstAttribute="leading" secondItem="JAO-DI-vbm" secondAttribute="trailing" constant="8" symbolic="YES" id="3ZJ-sm-LLQ"/>
<constraint firstItem="XfM-wG-Zxc" firstAttribute="leading" secondItem="Gwg-pn-lM5" secondAttribute="trailing" constant="5" id="4bb-lb-TYP"/>
<constraint firstItem="JAO-DI-vbm" firstAttribute="leading" secondItem="ubd-A0-0oW" secondAttribute="trailing" id="8gL-pL-QKz"/>
<constraint firstAttribute="trailing" secondItem="kLh-dT-fWl" secondAttribute="trailing" constant="5" id="D4t-PI-NVX"/>
<constraint firstItem="ubd-A0-0oW" firstAttribute="leading" secondItem="XfM-wG-Zxc" secondAttribute="trailing" id="E4I-Nb-vB5"/>
<constraint firstItem="ubd-A0-0oW" firstAttribute="centerY" secondItem="Gwg-pn-lM5" secondAttribute="centerY" id="GZB-R5-O8z"/>
<constraint firstItem="hYZ-OW-ebc" firstAttribute="centerY" secondItem="Gwg-pn-lM5" secondAttribute="centerY" id="NWK-Hj-44W"/>
<constraint firstItem="Gwg-pn-lM5" firstAttribute="centerY" secondItem="0FS-PW-dzb" secondAttribute="centerY" id="Yau-WM-aqf"/>
<constraint firstItem="XfM-wG-Zxc" firstAttribute="centerY" secondItem="Gwg-pn-lM5" secondAttribute="centerY" id="pB3-eZ-C1W"/>
<constraint firstItem="Gwg-pn-lM5" firstAttribute="leading" secondItem="0FS-PW-dzb" secondAttribute="leading" constant="11" id="qsg-vi-UIQ"/>
<constraint firstItem="JAO-DI-vbm" firstAttribute="centerY" secondItem="Gwg-pn-lM5" secondAttribute="centerY" id="rWB-xX-7V9"/>
<constraint firstItem="kLh-dT-fWl" firstAttribute="leading" secondItem="hYZ-OW-ebc" secondAttribute="trailing" id="t7S-2X-ur7"/>
<constraint firstItem="kLh-dT-fWl" firstAttribute="centerY" secondItem="Gwg-pn-lM5" secondAttribute="centerY" id="uLM-dC-jCY"/>
</constraints>
<connections>
<outlet property="fGroupDownloadField" destination="JAO-DI-vbm" id="jls-TR-sdX"/>
<outlet property="fGroupDownloadView" destination="ubd-A0-0oW" id="l2t-pP-sMi"/>
<outlet property="fGroupIndicatorView" destination="Gwg-pn-lM5" id="FCY-PW-4YQ"/>
<outlet property="fGroupTitleField" destination="XfM-wG-Zxc" id="o72-mm-63H"/>
<outlet property="fGroupUploadAndRatioField" destination="kLh-dT-fWl" id="31q-Z9-mDX"/>
<outlet property="fGroupUploadAndRatioView" destination="hYZ-OW-ebc" id="92U-rh-k8B"/>
</connections>
</tableCellView>
<tableCellView identifier="TorrentCell" id="7Ic-8y-f3v" customClass="TorrentCell">
<rect key="frame" x="11" y="22" width="458" height="62"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="FLl-ue-i20">
<rect key="frame" x="0.0" y="26" width="10" height="10"/>
<constraints>
<constraint firstAttribute="height" constant="10" id="NhU-Lf-nCs"/>
<constraint firstAttribute="width" constant="10" id="zar-fl-hEG"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSStatusAvailable" id="Oyo-d7-APt"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="WTV-L6-lc2">
<rect key="frame" x="13" y="13" width="36" height="36"/>
<constraints>
<constraint firstAttribute="height" constant="36" id="Qka-wO-mv5"/>
<constraint firstAttribute="width" constant="36" id="tDk-n4-lHb"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSFolder" id="WGQ-kl-WZm"/>
</imageView>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="4" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vYS-eL-CGb">
<rect key="frame" x="65" y="44" width="41" height="15"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="1000" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gIX-h2-fIl">
<rect key="frame" x="-2" y="0.0" width="29" height="15"/>
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" title="Title" id="y9O-gd-sXA">
<font key="font" metaFont="cellTitle"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<imageView horizontalHuggingPriority="1000" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="FUW-Pk-EJ8">
<rect key="frame" x="29" y="2" width="12" height="12"/>
<constraints>
<constraint firstAttribute="height" constant="12" id="Cs2-6B-XzK"/>
<constraint firstAttribute="width" constant="12" id="jRb-Kc-aSX"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="PriorityHighTemplate" id="z1h-pZ-LtL"/>
</imageView>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7sy-Kk-M9Y">
<rect key="frame" x="63" y="30" width="344" height="13"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" allowsUndo="NO" title="Progress" id="oSz-TE-8jj">
<font key="font" metaFont="system" size="10"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="J4v-0p-u4L">
<rect key="frame" x="63" y="1" width="344" height="13"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" allowsUndo="NO" title="Status" id="lmp-Y3-ZQO">
<font key="font" metaFont="system" size="10"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button horizontalHuggingPriority="1000" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="kNl-5i-USx" customClass="TorrentCellControlButton">
<rect key="frame" x="419" y="15" width="14" height="14"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ResumeOff" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" id="oxr-Hn-H15">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<outlet property="torrentCell" destination="7Ic-8y-f3v" id="BrY-70-Qul"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Rxb-qW-x6p" customClass="TorrentCellActionButton">
<rect key="frame" x="23" y="23" width="16" height="16"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ActionHover" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" id="9Xz-qo-fuz">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<constraints>
<constraint firstAttribute="width" constant="16" id="WLP-JK-i9A"/>
<constraint firstAttribute="height" constant="16" id="bMb-uB-fO6"/>
</constraints>
<connections>
<outlet property="fGroupDownloadField" destination="JAO-DI-vbm" id="jls-TR-sdX"/>
<outlet property="fGroupDownloadView" destination="ubd-A0-0oW" id="l2t-pP-sMi"/>
<outlet property="fGroupIndicatorView" destination="Gwg-pn-lM5" id="FCY-PW-4YQ"/>
<outlet property="fGroupTitleField" destination="XfM-wG-Zxc" id="o72-mm-63H"/>
<outlet property="fGroupUploadAndRatioField" destination="kLh-dT-fWl" id="31q-Z9-mDX"/>
<outlet property="fGroupUploadAndRatioView" destination="hYZ-OW-ebc" id="92U-rh-k8B"/>
<outlet property="torrentCell" destination="7Ic-8y-f3v" id="sNJ-lh-B90"/>
</connections>
</tableCellView>
<tableCellView identifier="TorrentCell" id="7Ic-8y-f3v" customClass="TorrentCell">
<rect key="frame" x="11" y="22" width="502" height="62"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="FLl-ue-i20">
<rect key="frame" x="0.0" y="26" width="10" height="10"/>
<constraints>
<constraint firstAttribute="height" constant="10" id="NhU-Lf-nCs"/>
<constraint firstAttribute="width" constant="10" id="zar-fl-hEG"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSStatusAvailable" id="Oyo-d7-APt"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="WTV-L6-lc2">
<rect key="frame" x="13" y="13" width="36" height="36"/>
<constraints>
<constraint firstAttribute="height" constant="36" id="Qka-wO-mv5"/>
<constraint firstAttribute="width" constant="36" id="tDk-n4-lHb"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSFolder" id="WGQ-kl-WZm"/>
</imageView>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="4" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vYS-eL-CGb">
<rect key="frame" x="65" y="44" width="41" height="15"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="1000" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gIX-h2-fIl">
<rect key="frame" x="-2" y="0.0" width="29" height="15"/>
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" title="Title" id="y9O-gd-sXA">
<font key="font" metaFont="cellTitle"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<imageView horizontalHuggingPriority="1000" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="FUW-Pk-EJ8">
<rect key="frame" x="29" y="2" width="12" height="12"/>
<constraints>
<constraint firstAttribute="height" constant="12" id="Cs2-6B-XzK"/>
<constraint firstAttribute="width" constant="12" id="jRb-Kc-aSX"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="PriorityHighTemplate" id="z1h-pZ-LtL"/>
</imageView>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7sy-Kk-M9Y">
<rect key="frame" x="63" y="30" width="388" height="13"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" allowsUndo="NO" title="Progress" id="oSz-TE-8jj">
<font key="font" metaFont="system" size="10"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="J4v-0p-u4L">
<rect key="frame" x="63" y="1" width="388" height="13"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" allowsUndo="NO" title="Status" id="lmp-Y3-ZQO">
<font key="font" metaFont="system" size="10"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button horizontalHuggingPriority="1000" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="kNl-5i-USx" customClass="TorrentCellControlButton">
<rect key="frame" x="463" y="15" width="14" height="14"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ResumeOff" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" id="oxr-Hn-H15">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<outlet property="torrentCell" destination="7Ic-8y-f3v" id="BrY-70-Qul"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Rxb-qW-x6p" customClass="TorrentCellActionButton">
<rect key="frame" x="23" y="23" width="16" height="16"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ActionHover" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" id="9Xz-qo-fuz">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<constraints>
<constraint firstAttribute="width" constant="16" id="WLP-JK-i9A"/>
<constraint firstAttribute="height" constant="16" id="bMb-uB-fO6"/>
</constraints>
<connections>
<outlet property="torrentCell" destination="7Ic-8y-f3v" id="sNJ-lh-B90"/>
</connections>
</button>
<button horizontalHuggingPriority="1000" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="k5I-MN-hYk" customClass="TorrentCellRevealButton">
<rect key="frame" x="480" y="15" width="14" height="14"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="RevealOff" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" id="WF0-QY-3DO">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<outlet property="torrentCell" destination="7Ic-8y-f3v" id="npT-CF-ee4"/>
</connections>
</button>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="Ifq-ub-ay4">
<rect key="frame" x="65" y="15" width="384" height="14"/>
<constraints>
<constraint firstAttribute="height" constant="14" id="D7V-m1-heE"/>
</constraints>
</customView>
</subviews>
</button>
<button horizontalHuggingPriority="1000" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="k5I-MN-hYk" customClass="TorrentCellRevealButton">
<rect key="frame" x="436" y="15" width="14" height="14"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="RevealOff" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" id="WF0-QY-3DO">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<outlet property="torrentCell" destination="7Ic-8y-f3v" id="npT-CF-ee4"/>
</connections>
</button>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="Ifq-ub-ay4">
<rect key="frame" x="65" y="15" width="340" height="14"/>
<constraints>
<constraint firstItem="FLl-ue-i20" firstAttribute="centerY" secondItem="7Ic-8y-f3v" secondAttribute="centerY" id="7iF-OP-ifv"/>
<constraint firstItem="WTV-L6-lc2" firstAttribute="leading" secondItem="FLl-ue-i20" secondAttribute="trailing" constant="3" id="8e4-oE-Kzh"/>
<constraint firstItem="J4v-0p-u4L" firstAttribute="top" secondItem="Ifq-ub-ay4" secondAttribute="bottom" constant="1" id="AyP-y5-tmL"/>
<constraint firstItem="Ifq-ub-ay4" firstAttribute="leading" secondItem="vYS-eL-CGb" secondAttribute="leading" id="Dyg-7e-eOb"/>
<constraint firstItem="kNl-5i-USx" firstAttribute="centerY" secondItem="Ifq-ub-ay4" secondAttribute="centerY" id="F2k-wy-sR2"/>
<constraint firstItem="WTV-L6-lc2" firstAttribute="centerY" secondItem="FLl-ue-i20" secondAttribute="centerY" id="FXq-kY-5ny"/>
<constraint firstItem="FLl-ue-i20" firstAttribute="leading" secondItem="7Ic-8y-f3v" secondAttribute="leading" id="Fu9-kh-dtb"/>
<constraint firstItem="Ifq-ub-ay4" firstAttribute="trailing" secondItem="7sy-Kk-M9Y" secondAttribute="trailing" id="KFR-7d-Sjr"/>
<constraint firstAttribute="trailing" secondItem="k5I-MN-hYk" secondAttribute="trailing" constant="8" id="NRQ-sA-ng6"/>
<constraint firstItem="vYS-eL-CGb" firstAttribute="top" secondItem="7Ic-8y-f3v" secondAttribute="top" constant="3" id="QtZ-VZ-lRO"/>
<constraint firstItem="Rxb-qW-x6p" firstAttribute="centerX" secondItem="WTV-L6-lc2" secondAttribute="centerX" id="Uyo-j3-TSH"/>
<constraint firstItem="Ifq-ub-ay4" firstAttribute="top" secondItem="7sy-Kk-M9Y" secondAttribute="bottom" constant="1" id="XRq-cM-zeI"/>
<constraint firstItem="Ifq-ub-ay4" firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="vYS-eL-CGb" secondAttribute="trailing" id="b7f-KU-XuC"/>
<constraint firstItem="kNl-5i-USx" firstAttribute="leading" secondItem="Ifq-ub-ay4" secondAttribute="trailing" constant="14" id="b80-qd-DxN"/>
<constraint firstItem="vYS-eL-CGb" firstAttribute="leading" secondItem="WTV-L6-lc2" secondAttribute="trailing" constant="16" id="bhS-IK-CO7"/>
<constraint firstItem="7sy-Kk-M9Y" firstAttribute="top" secondItem="vYS-eL-CGb" secondAttribute="bottom" constant="1" id="fDS-sV-lfi"/>
<constraint firstItem="k5I-MN-hYk" firstAttribute="leading" secondItem="kNl-5i-USx" secondAttribute="trailing" constant="3" id="fsy-23-flK"/>
<constraint firstItem="J4v-0p-u4L" firstAttribute="trailing" secondItem="Ifq-ub-ay4" secondAttribute="trailing" id="j5C-sr-mIK"/>
<constraint firstItem="7sy-Kk-M9Y" firstAttribute="leading" secondItem="Ifq-ub-ay4" secondAttribute="leading" id="utw-yR-w0F"/>
<constraint firstItem="J4v-0p-u4L" firstAttribute="leading" secondItem="Ifq-ub-ay4" secondAttribute="leading" id="vQR-NJ-Twe"/>
<constraint firstItem="k5I-MN-hYk" firstAttribute="centerY" secondItem="kNl-5i-USx" secondAttribute="centerY" id="xjv-n4-F1m"/>
<constraint firstItem="Rxb-qW-x6p" firstAttribute="centerY" secondItem="WTV-L6-lc2" secondAttribute="centerY" id="y0a-c5-pYS"/>
<constraint firstAttribute="height" constant="14" id="D7V-m1-heE"/>
</constraints>
</customView>
</subviews>
<constraints>
<constraint firstItem="FLl-ue-i20" firstAttribute="centerY" secondItem="7Ic-8y-f3v" secondAttribute="centerY" id="7iF-OP-ifv"/>
<constraint firstItem="WTV-L6-lc2" firstAttribute="leading" secondItem="FLl-ue-i20" secondAttribute="trailing" constant="3" id="8e4-oE-Kzh"/>
<constraint firstItem="J4v-0p-u4L" firstAttribute="top" secondItem="Ifq-ub-ay4" secondAttribute="bottom" constant="1" id="AyP-y5-tmL"/>
<constraint firstItem="Ifq-ub-ay4" firstAttribute="leading" secondItem="vYS-eL-CGb" secondAttribute="leading" id="Dyg-7e-eOb"/>
<constraint firstItem="kNl-5i-USx" firstAttribute="centerY" secondItem="Ifq-ub-ay4" secondAttribute="centerY" id="F2k-wy-sR2"/>
<constraint firstItem="WTV-L6-lc2" firstAttribute="centerY" secondItem="FLl-ue-i20" secondAttribute="centerY" id="FXq-kY-5ny"/>
<constraint firstItem="FLl-ue-i20" firstAttribute="leading" secondItem="7Ic-8y-f3v" secondAttribute="leading" id="Fu9-kh-dtb"/>
<constraint firstItem="Ifq-ub-ay4" firstAttribute="trailing" secondItem="7sy-Kk-M9Y" secondAttribute="trailing" id="KFR-7d-Sjr"/>
<constraint firstAttribute="trailing" secondItem="k5I-MN-hYk" secondAttribute="trailing" constant="8" id="NRQ-sA-ng6"/>
<constraint firstItem="vYS-eL-CGb" firstAttribute="top" secondItem="7Ic-8y-f3v" secondAttribute="top" constant="3" id="QtZ-VZ-lRO"/>
<constraint firstItem="Rxb-qW-x6p" firstAttribute="centerX" secondItem="WTV-L6-lc2" secondAttribute="centerX" id="Uyo-j3-TSH"/>
<constraint firstItem="Ifq-ub-ay4" firstAttribute="top" secondItem="7sy-Kk-M9Y" secondAttribute="bottom" constant="1" id="XRq-cM-zeI"/>
<constraint firstItem="Ifq-ub-ay4" firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="vYS-eL-CGb" secondAttribute="trailing" id="b7f-KU-XuC"/>
<constraint firstItem="kNl-5i-USx" firstAttribute="leading" secondItem="Ifq-ub-ay4" secondAttribute="trailing" constant="14" id="b80-qd-DxN"/>
<constraint firstItem="vYS-eL-CGb" firstAttribute="leading" secondItem="WTV-L6-lc2" secondAttribute="trailing" constant="16" id="bhS-IK-CO7"/>
<constraint firstItem="7sy-Kk-M9Y" firstAttribute="top" secondItem="vYS-eL-CGb" secondAttribute="bottom" constant="1" id="fDS-sV-lfi"/>
<constraint firstItem="k5I-MN-hYk" firstAttribute="leading" secondItem="kNl-5i-USx" secondAttribute="trailing" constant="3" id="fsy-23-flK"/>
<constraint firstItem="J4v-0p-u4L" firstAttribute="trailing" secondItem="Ifq-ub-ay4" secondAttribute="trailing" id="j5C-sr-mIK"/>
<constraint firstItem="7sy-Kk-M9Y" firstAttribute="leading" secondItem="Ifq-ub-ay4" secondAttribute="leading" id="utw-yR-w0F"/>
<constraint firstItem="J4v-0p-u4L" firstAttribute="leading" secondItem="Ifq-ub-ay4" secondAttribute="leading" id="vQR-NJ-Twe"/>
<constraint firstItem="k5I-MN-hYk" firstAttribute="centerY" secondItem="kNl-5i-USx" secondAttribute="centerY" id="xjv-n4-F1m"/>
<constraint firstItem="Rxb-qW-x6p" firstAttribute="centerY" secondItem="WTV-L6-lc2" secondAttribute="centerY" id="y0a-c5-pYS"/>
</constraints>
<connections>
<outlet property="fActionButton" destination="Rxb-qW-x6p" id="ICn-NC-ahy"/>
<outlet property="fControlButton" destination="kNl-5i-USx" id="iN7-sX-ciA"/>
<outlet property="fGroupIndicatorView" destination="FLl-ue-i20" id="0QU-wF-59e"/>
<outlet property="fIconView" destination="WTV-L6-lc2" id="gmV-h3-Muk"/>
<outlet property="fRevealButton" destination="k5I-MN-hYk" id="Qkq-Yq-UAY"/>
<outlet property="fStackView" destination="vYS-eL-CGb" id="MDM-8N-HVT"/>
<outlet property="fTorrentPriorityView" destination="FUW-Pk-EJ8" id="0MT-4C-9H7"/>
<outlet property="fTorrentPriorityViewWidthConstraint" destination="jRb-Kc-aSX" id="tEJ-L9-33e"/>
<outlet property="fTorrentProgressBarView" destination="Ifq-ub-ay4" id="rEw-BU-47h"/>
<outlet property="fTorrentProgressField" destination="7sy-Kk-M9Y" id="nk4-R3-1Wv"/>
<outlet property="fTorrentStatusField" destination="J4v-0p-u4L" id="nqa-rT-XUI"/>
<outlet property="fTorrentTitleField" destination="gIX-h2-fIl" id="h3s-C4-XNT"/>
</connections>
</tableCellView>
<tableCellView identifier="SmallTorrentCell" id="ouH-H8-Otv" customClass="SmallTorrentCell">
<rect key="frame" x="11" y="87" width="458" height="22"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="x9c-7U-Odp">
<rect key="frame" x="45" y="2" width="408" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="18" id="UN3-pW-1Yw"/>
</constraints>
</customView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="4yg-IA-aOF">
<rect key="frame" x="0.0" y="8" width="6" height="6"/>
<constraints>
<constraint firstAttribute="height" constant="6" id="Gfx-gR-O2I"/>
<constraint firstAttribute="width" constant="6" id="SCs-lp-qum"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSStatusAvailable" id="brn-HI-eEh"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="WWu-yD-Amw">
<rect key="frame" x="14" y="3" width="16" height="16"/>
<constraints>
<constraint firstAttribute="height" constant="16" id="42D-Ja-dYD"/>
<constraint firstAttribute="width" constant="16" id="y2G-x9-YIV"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSFolder" id="Kea-PS-H27"/>
</imageView>
<button translatesAutoresizingMaskIntoConstraints="NO" id="9Cg-Nh-Hcr" customClass="TorrentCellActionButton">
<rect key="frame" x="14" y="3" width="16" height="16"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ActionHover" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="ejE-Yu-JNS">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<constraints>
<constraint firstAttribute="width" constant="16" id="B01-Zu-gNh"/>
<constraint firstAttribute="height" constant="16" id="dNQ-J3-27z"/>
</constraints>
<connections>
<outlet property="fActionButton" destination="Rxb-qW-x6p" id="ICn-NC-ahy"/>
<outlet property="fControlButton" destination="kNl-5i-USx" id="iN7-sX-ciA"/>
<outlet property="fGroupIndicatorView" destination="FLl-ue-i20" id="0QU-wF-59e"/>
<outlet property="fIconView" destination="WTV-L6-lc2" id="gmV-h3-Muk"/>
<outlet property="fRevealButton" destination="k5I-MN-hYk" id="Qkq-Yq-UAY"/>
<outlet property="fStackView" destination="vYS-eL-CGb" id="MDM-8N-HVT"/>
<outlet property="fTorrentPriorityView" destination="FUW-Pk-EJ8" id="0MT-4C-9H7"/>
<outlet property="fTorrentPriorityViewWidthConstraint" destination="jRb-Kc-aSX" id="tEJ-L9-33e"/>
<outlet property="fTorrentProgressBarView" destination="Ifq-ub-ay4" id="rEw-BU-47h"/>
<outlet property="fTorrentProgressField" destination="7sy-Kk-M9Y" id="nk4-R3-1Wv"/>
<outlet property="fTorrentStatusField" destination="J4v-0p-u4L" id="nqa-rT-XUI"/>
<outlet property="fTorrentTitleField" destination="gIX-h2-fIl" id="h3s-C4-XNT"/>
<outlet property="torrentCell" destination="ouH-H8-Otv" id="r2c-b8-jcH"/>
</connections>
</tableCellView>
<tableCellView identifier="SmallTorrentCell" id="ouH-H8-Otv" customClass="SmallTorrentCell">
<rect key="frame" x="11" y="87" width="502" height="22"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</button>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="4" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dPU-vz-fnz">
<rect key="frame" x="45" y="4" width="45" height="15"/>
<subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="x9c-7U-Odp">
<rect key="frame" x="45" y="2" width="452" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="18" id="UN3-pW-1Yw"/>
</constraints>
</customView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="4yg-IA-aOF">
<rect key="frame" x="0.0" y="8" width="6" height="6"/>
<constraints>
<constraint firstAttribute="height" constant="6" id="Gfx-gR-O2I"/>
<constraint firstAttribute="width" constant="6" id="SCs-lp-qum"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSStatusAvailable" id="brn-HI-eEh"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="WWu-yD-Amw">
<rect key="frame" x="14" y="3" width="16" height="16"/>
<constraints>
<constraint firstAttribute="height" constant="16" id="42D-Ja-dYD"/>
<constraint firstAttribute="width" constant="16" id="y2G-x9-YIV"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSFolder" id="Kea-PS-H27"/>
</imageView>
<button translatesAutoresizingMaskIntoConstraints="NO" id="9Cg-Nh-Hcr" customClass="TorrentCellActionButton">
<rect key="frame" x="14" y="3" width="16" height="16"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ActionHover" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="ejE-Yu-JNS">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<constraints>
<constraint firstAttribute="width" constant="16" id="B01-Zu-gNh"/>
<constraint firstAttribute="height" constant="16" id="dNQ-J3-27z"/>
</constraints>
<connections>
<outlet property="torrentCell" destination="ouH-H8-Otv" id="r2c-b8-jcH"/>
</connections>
</button>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="4" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dPU-vz-fnz">
<rect key="frame" x="45" y="4" width="41" height="15"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="1000" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nyW-bO-2kN">
<rect key="frame" x="-2" y="0.0" width="29" height="15"/>
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" allowsUndo="NO" title="Title" id="kbX-Av-eP4">
<font key="font" metaFont="cellTitle"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<imageView horizontalHuggingPriority="1000" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ocL-c0-B8y">
<rect key="frame" x="29" y="1" width="12" height="12"/>
<constraints>
<constraint firstAttribute="width" constant="12" id="grl-70-hEy"/>
<constraint firstAttribute="height" constant="12" id="hps-Ab-lio"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="PriorityHighTemplate" id="LI6-cz-gYa"/>
</imageView>
</subviews>
<edgeInsets key="edgeInsets" left="0.0" right="4" top="0.0" bottom="0.0"/>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="ExW-pe-aKm">
<rect key="frame" x="84" y="4" width="412" height="14"/>
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" allowsUndo="NO" alignment="right" title="Status String" id="Zmj-A9-NPf">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<textField focusRingType="none" horizontalHuggingPriority="1000" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nyW-bO-2kN">
<rect key="frame" x="-2" y="0.0" width="29" height="15"/>
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" allowsUndo="NO" title="Title" id="kbX-Av-eP4">
<font key="font" metaFont="cellTitle"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button translatesAutoresizingMaskIntoConstraints="NO" id="bGq-Kc-jWE" customClass="TorrentCellControlButton">
<rect key="frame" x="463" y="4" width="14" height="14"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ResumeOff" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="DmO-My-6OF">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<imageView horizontalHuggingPriority="1000" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ocL-c0-B8y">
<rect key="frame" x="29" y="1" width="12" height="12"/>
<constraints>
<constraint firstAttribute="width" constant="14" id="hQW-cC-Lp7"/>
<constraint firstAttribute="height" constant="14" id="jWF-m2-n6g"/>
<constraint firstAttribute="width" constant="12" id="grl-70-hEy"/>
<constraint firstAttribute="height" constant="12" id="hps-Ab-lio"/>
</constraints>
<connections>
<outlet property="torrentCell" destination="ouH-H8-Otv" id="1mw-p3-MDP"/>
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="Hyt-Uv-vDm" customClass="TorrentCellRevealButton">
<rect key="frame" x="480" y="4" width="14" height="14"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="RevealOff" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="dWx-5q-ABk">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<constraints>
<constraint firstAttribute="height" constant="14" id="CYn-n4-Daq"/>
<constraint firstAttribute="width" constant="14" id="P9R-Cw-RJF"/>
</constraints>
<connections>
<outlet property="torrentCell" destination="ouH-H8-Otv" id="zlt-Qk-E34"/>
</connections>
</button>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="PriorityHighTemplate" id="LI6-cz-gYa"/>
</imageView>
</subviews>
<edgeInsets key="edgeInsets" left="0.0" right="4" top="0.0" bottom="0.0"/>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="ExW-pe-aKm">
<rect key="frame" x="88" y="4" width="364" height="14"/>
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" allowsUndo="NO" alignment="right" title="Status String" id="Zmj-A9-NPf">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button translatesAutoresizingMaskIntoConstraints="NO" id="bGq-Kc-jWE" customClass="TorrentCellControlButton">
<rect key="frame" x="419" y="4" width="14" height="14"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ResumeOff" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="DmO-My-6OF">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<constraints>
<constraint firstItem="Hyt-Uv-vDm" firstAttribute="centerY" secondItem="x9c-7U-Odp" secondAttribute="centerY" id="1WR-Ta-vbl"/>
<constraint firstAttribute="trailing" secondItem="ExW-pe-aKm" secondAttribute="trailing" constant="8" id="5OS-LM-hyI"/>
<constraint firstItem="ExW-pe-aKm" firstAttribute="leading" secondItem="dPU-vz-fnz" secondAttribute="trailing" id="7R9-zA-Nh7"/>
<constraint firstItem="ExW-pe-aKm" firstAttribute="centerY" secondItem="4yg-IA-aOF" secondAttribute="centerY" id="Lmc-wT-yP4"/>
<constraint firstItem="x9c-7U-Odp" firstAttribute="leading" secondItem="9Cg-Nh-Hcr" secondAttribute="trailing" constant="15" id="On5-WE-C7H"/>
<constraint firstItem="bGq-Kc-jWE" firstAttribute="centerY" secondItem="x9c-7U-Odp" secondAttribute="centerY" id="PrG-V3-ry0"/>
<constraint firstItem="4yg-IA-aOF" firstAttribute="leading" secondItem="ouH-H8-Otv" secondAttribute="leading" id="Ps8-HO-fGd"/>
<constraint firstItem="9Cg-Nh-Hcr" firstAttribute="centerY" secondItem="4yg-IA-aOF" secondAttribute="centerY" id="Rvd-RT-10P"/>
<constraint firstItem="dPU-vz-fnz" firstAttribute="centerY" secondItem="ouH-H8-Otv" secondAttribute="centerY" id="VXm-be-NaO"/>
<constraint firstItem="x9c-7U-Odp" firstAttribute="centerY" secondItem="9Cg-Nh-Hcr" secondAttribute="centerY" id="VaS-hJ-vAV"/>
<constraint firstAttribute="trailing" secondItem="x9c-7U-Odp" secondAttribute="trailing" constant="5" id="daS-0F-yKf"/>
<constraint firstAttribute="trailing" secondItem="Hyt-Uv-vDm" secondAttribute="trailing" constant="8" id="fKb-o5-n1k"/>
<constraint firstItem="dPU-vz-fnz" firstAttribute="leading" secondItem="WWu-yD-Amw" secondAttribute="trailing" constant="15" id="gxk-cy-Mq2"/>
<constraint firstItem="WWu-yD-Amw" firstAttribute="centerY" secondItem="9Cg-Nh-Hcr" secondAttribute="centerY" id="hYn-MV-EFh"/>
<constraint firstItem="4yg-IA-aOF" firstAttribute="centerY" secondItem="ouH-H8-Otv" secondAttribute="centerY" id="izm-2a-TOI"/>
<constraint firstItem="Hyt-Uv-vDm" firstAttribute="leading" secondItem="bGq-Kc-jWE" secondAttribute="trailing" constant="3" id="kX1-gB-jyF"/>
<constraint firstItem="9Cg-Nh-Hcr" firstAttribute="leading" secondItem="4yg-IA-aOF" secondAttribute="trailing" constant="8" id="lf2-Bm-TFR"/>
<constraint firstItem="WWu-yD-Amw" firstAttribute="centerX" secondItem="9Cg-Nh-Hcr" secondAttribute="centerX" id="tNz-Ea-fpP"/>
<constraint firstAttribute="width" constant="14" id="hQW-cC-Lp7"/>
<constraint firstAttribute="height" constant="14" id="jWF-m2-n6g"/>
</constraints>
<connections>
<outlet property="fActionButton" destination="9Cg-Nh-Hcr" id="88t-qS-msz"/>
<outlet property="fControlButton" destination="bGq-Kc-jWE" id="Oyb-Iu-Na0"/>
<outlet property="fGroupIndicatorView" destination="4yg-IA-aOF" id="ROF-Ua-PGS"/>
<outlet property="fIconView" destination="WWu-yD-Amw" id="vWy-ch-grE"/>
<outlet property="fRevealButton" destination="Hyt-Uv-vDm" id="PHz-zj-UsH"/>
<outlet property="fStackView" destination="dPU-vz-fnz" id="hPz-Up-wEK"/>
<outlet property="fTorrentPriorityView" destination="ocL-c0-B8y" id="OoF-f4-uU5"/>
<outlet property="fTorrentPriorityViewWidthConstraint" destination="grl-70-hEy" id="sps-C4-rsi"/>
<outlet property="fTorrentProgressBarView" destination="x9c-7U-Odp" id="WGd-KA-6xD"/>
<outlet property="fTorrentStatusField" destination="ExW-pe-aKm" id="rQQ-ip-8MV"/>
<outlet property="fTorrentTitleField" destination="nyW-bO-2kN" id="Xsd-Ro-ren"/>
<outlet property="torrentCell" destination="ouH-H8-Otv" id="1mw-p3-MDP"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
<connections>
<outlet property="dataSource" destination="206" id="3097"/>
<outlet property="fContextNoRow" destination="589" id="3101"/>
<outlet property="fContextRow" destination="456" id="3100"/>
<outlet property="fController" destination="206" id="3102"/>
</connections>
</outlineView>
</subviews>
</clipView>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="3090">
<rect key="frame" x="-100" y="-100" width="451" height="15"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="3089">
<rect key="frame" x="499" y="0.0" width="16" height="0.0"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<customView verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JCm-xb-Dpw">
<rect key="frame" x="0.0" y="0.0" width="524" height="24"/>
<subviews>
<textField focusRingType="none" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2700">
<rect key="frame" x="258" y="5" width="8" height="14"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" allowsUndo="NO" sendsActionOnEndEditing="YES" alignment="center" usesSingleLineMode="YES" id="3049">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button translatesAutoresizingMaskIntoConstraints="NO" id="3420">
<rect key="frame" x="60" y="3" width="18" height="18"/>
<buttonCell key="cell" type="squareTextured" bezelStyle="texturedSquare" image="CleanupTemplate" imagePosition="only" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="3421">
<behavior key="behavior" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="clearCompleted:" target="206" id="3424"/>
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="2690">
<rect key="frame" x="34" y="3" width="18" height="18"/>
<buttonCell key="cell" type="squareTextured" bezelStyle="texturedSquare" image="TortoiseTemplate" imagePosition="only" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="3048">
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="speedLimitChanged:" target="206" id="3180"/>
<binding destination="1815" name="value" keyPath="values.SpeedLimit" id="3179"/>
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="3435">
<rect key="frame" x="8" y="3" width="18" height="18"/>
<buttonCell key="cell" type="squareTextured" bezelStyle="texturedSquare" image="EllipsisTemplate" imagePosition="only" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="3436">
<behavior key="behavior" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="showGlobalPopover:" target="206" id="3439"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="3420" firstAttribute="leading" secondItem="2690" secondAttribute="trailing" constant="8" symbolic="YES" id="FEn-NM-flo"/>
<constraint firstItem="2690" firstAttribute="leading" secondItem="3435" secondAttribute="trailing" constant="8" symbolic="YES" id="Ofp-KJ-XZv"/>
<constraint firstItem="2690" firstAttribute="centerY" secondItem="JCm-xb-Dpw" secondAttribute="centerY" id="PS4-Bx-QIF"/>
<constraint firstItem="2700" firstAttribute="centerY" secondItem="JCm-xb-Dpw" secondAttribute="centerY" id="RtK-gx-Jsv"/>
<constraint firstItem="3435" firstAttribute="centerY" secondItem="JCm-xb-Dpw" secondAttribute="centerY" id="Wid-lz-U1e"/>
<constraint firstAttribute="height" constant="24" id="dyn-PY-CuN"/>
<constraint firstItem="2700" firstAttribute="centerX" secondItem="JCm-xb-Dpw" secondAttribute="centerX" id="hcK-0p-UnE"/>
<constraint firstItem="3420" firstAttribute="centerY" secondItem="JCm-xb-Dpw" secondAttribute="centerY" id="usg-NR-gmG"/>
<constraint firstItem="3435" firstAttribute="leading" secondItem="JCm-xb-Dpw" secondAttribute="leading" priority="750" constant="8" id="xFe-Hi-hSp"/>
</constraints>
</customView>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="Hyt-Uv-vDm" customClass="TorrentCellRevealButton">
<rect key="frame" x="436" y="4" width="14" height="14"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="RevealOff" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="dWx-5q-ABk">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<constraints>
<constraint firstAttribute="height" constant="14" id="CYn-n4-Daq"/>
<constraint firstAttribute="width" constant="14" id="P9R-Cw-RJF"/>
</constraints>
<connections>
<outlet property="torrentCell" destination="ouH-H8-Otv" id="zlt-Qk-E34"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="Hyt-Uv-vDm" firstAttribute="centerY" secondItem="x9c-7U-Odp" secondAttribute="centerY" id="1WR-Ta-vbl"/>
<constraint firstAttribute="trailing" secondItem="ExW-pe-aKm" secondAttribute="trailing" constant="8" id="5OS-LM-hyI"/>
<constraint firstItem="ExW-pe-aKm" firstAttribute="leading" secondItem="dPU-vz-fnz" secondAttribute="trailing" id="7R9-zA-Nh7"/>
<constraint firstItem="ExW-pe-aKm" firstAttribute="centerY" secondItem="4yg-IA-aOF" secondAttribute="centerY" id="Lmc-wT-yP4"/>
<constraint firstItem="x9c-7U-Odp" firstAttribute="leading" secondItem="9Cg-Nh-Hcr" secondAttribute="trailing" constant="15" id="On5-WE-C7H"/>
<constraint firstItem="bGq-Kc-jWE" firstAttribute="centerY" secondItem="x9c-7U-Odp" secondAttribute="centerY" id="PrG-V3-ry0"/>
<constraint firstItem="4yg-IA-aOF" firstAttribute="leading" secondItem="ouH-H8-Otv" secondAttribute="leading" id="Ps8-HO-fGd"/>
<constraint firstItem="9Cg-Nh-Hcr" firstAttribute="centerY" secondItem="4yg-IA-aOF" secondAttribute="centerY" id="Rvd-RT-10P"/>
<constraint firstItem="dPU-vz-fnz" firstAttribute="centerY" secondItem="ouH-H8-Otv" secondAttribute="centerY" id="VXm-be-NaO"/>
<constraint firstItem="x9c-7U-Odp" firstAttribute="centerY" secondItem="9Cg-Nh-Hcr" secondAttribute="centerY" id="VaS-hJ-vAV"/>
<constraint firstAttribute="trailing" secondItem="x9c-7U-Odp" secondAttribute="trailing" constant="5" id="daS-0F-yKf"/>
<constraint firstAttribute="trailing" secondItem="Hyt-Uv-vDm" secondAttribute="trailing" constant="8" id="fKb-o5-n1k"/>
<constraint firstItem="dPU-vz-fnz" firstAttribute="leading" secondItem="WWu-yD-Amw" secondAttribute="trailing" constant="15" id="gxk-cy-Mq2"/>
<constraint firstItem="WWu-yD-Amw" firstAttribute="centerY" secondItem="9Cg-Nh-Hcr" secondAttribute="centerY" id="hYn-MV-EFh"/>
<constraint firstItem="4yg-IA-aOF" firstAttribute="centerY" secondItem="ouH-H8-Otv" secondAttribute="centerY" id="izm-2a-TOI"/>
<constraint firstItem="Hyt-Uv-vDm" firstAttribute="leading" secondItem="bGq-Kc-jWE" secondAttribute="trailing" constant="3" id="kX1-gB-jyF"/>
<constraint firstItem="9Cg-Nh-Hcr" firstAttribute="leading" secondItem="4yg-IA-aOF" secondAttribute="trailing" constant="8" id="lf2-Bm-TFR"/>
<constraint firstItem="WWu-yD-Amw" firstAttribute="centerX" secondItem="9Cg-Nh-Hcr" secondAttribute="centerX" id="tNz-Ea-fpP"/>
</constraints>
<connections>
<outlet property="fActionButton" destination="9Cg-Nh-Hcr" id="88t-qS-msz"/>
<outlet property="fControlButton" destination="bGq-Kc-jWE" id="Oyb-Iu-Na0"/>
<outlet property="fGroupIndicatorView" destination="4yg-IA-aOF" id="ROF-Ua-PGS"/>
<outlet property="fIconView" destination="WWu-yD-Amw" id="vWy-ch-grE"/>
<outlet property="fRevealButton" destination="Hyt-Uv-vDm" id="PHz-zj-UsH"/>
<outlet property="fStackView" destination="dPU-vz-fnz" id="hPz-Up-wEK"/>
<outlet property="fTorrentPriorityView" destination="ocL-c0-B8y" id="OoF-f4-uU5"/>
<outlet property="fTorrentPriorityViewWidthConstraint" destination="grl-70-hEy" id="sps-C4-rsi"/>
<outlet property="fTorrentProgressBarView" destination="x9c-7U-Odp" id="WGd-KA-6xD"/>
<outlet property="fTorrentStatusField" destination="ExW-pe-aKm" id="rQQ-ip-8MV"/>
<outlet property="fTorrentTitleField" destination="nyW-bO-2kN" id="Xsd-Ro-ren"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
<connections>
<outlet property="dataSource" destination="206" id="3097"/>
<outlet property="fContextNoRow" destination="589" id="3101"/>
<outlet property="fContextRow" destination="456" id="3100"/>
<outlet property="fController" destination="206" id="3102"/>
</connections>
</outlineView>
</subviews>
</clipView>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="3090">
<rect key="frame" x="-100" y="-100" width="451" height="15"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="3089">
<rect key="frame" x="499" y="0.0" width="16" height="0.0"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<customView verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JCm-xb-Dpw" userLabel="Bottom bar">
<rect key="frame" x="0.0" y="0.0" width="480" height="24"/>
<subviews>
<textField focusRingType="none" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2700">
<rect key="frame" x="211" y="5" width="58" height="14"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" allowsUndo="NO" sendsActionOnEndEditing="YES" alignment="center" title="Transfers" usesSingleLineMode="YES" id="3049">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button translatesAutoresizingMaskIntoConstraints="NO" id="3435" userLabel="Global Actions">
<rect key="frame" x="8" y="3" width="18" height="18"/>
<buttonCell key="cell" type="squareTextured" bezelStyle="texturedSquare" image="EllipsisTemplate" imagePosition="only" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="3436">
<behavior key="behavior" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="showGlobalPopover:" target="206" id="3439"/>
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="2690" userLabel="Speed Limit">
<rect key="frame" x="34" y="3" width="18" height="18"/>
<buttonCell key="cell" type="squareTextured" bezelStyle="texturedSquare" image="TortoiseTemplate" imagePosition="only" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="3048">
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="speedLimitChanged:" target="206" id="3180"/>
<binding destination="1815" name="value" keyPath="values.SpeedLimit" id="3179"/>
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="3420" userLabel="Clear Completed">
<rect key="frame" x="60" y="3" width="18" height="18"/>
<buttonCell key="cell" type="squareTextured" bezelStyle="texturedSquare" image="CleanupTemplate" imagePosition="only" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="3421">
<behavior key="behavior" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="clearCompleted:" target="206" id="3424"/>
</connections>
</button>
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="RjE-Lj-Ija">
<rect key="frame" x="0.0" y="21" width="480" height="5"/>
</box>
</subviews>
<constraints>
<constraint firstItem="JCm-xb-Dpw" firstAttribute="leading" secondItem="Msk-Iv-kCJ" secondAttribute="leading" id="7N2-SG-w8d"/>
<constraint firstAttribute="trailing" secondItem="JCm-xb-Dpw" secondAttribute="trailing" id="RMo-FM-GgE"/>
<constraint firstItem="RjE-Lj-Ija" firstAttribute="leading" secondItem="JCm-xb-Dpw" secondAttribute="leading" id="18t-vw-Qo1"/>
<constraint firstItem="3420" firstAttribute="leading" secondItem="2690" secondAttribute="trailing" constant="8" symbolic="YES" id="FEn-NM-flo"/>
<constraint firstItem="RjE-Lj-Ija" firstAttribute="top" secondItem="JCm-xb-Dpw" secondAttribute="top" id="JvT-ug-aaa"/>
<constraint firstItem="2690" firstAttribute="leading" secondItem="3435" secondAttribute="trailing" constant="8" symbolic="YES" id="Ofp-KJ-XZv"/>
<constraint firstItem="2690" firstAttribute="centerY" secondItem="JCm-xb-Dpw" secondAttribute="centerY" id="PS4-Bx-QIF"/>
<constraint firstItem="2700" firstAttribute="centerY" secondItem="JCm-xb-Dpw" secondAttribute="centerY" id="RtK-gx-Jsv"/>
<constraint firstItem="3435" firstAttribute="centerY" secondItem="JCm-xb-Dpw" secondAttribute="centerY" id="Wid-lz-U1e"/>
<constraint firstAttribute="height" constant="24" id="dyn-PY-CuN"/>
<constraint firstItem="2700" firstAttribute="centerX" secondItem="JCm-xb-Dpw" secondAttribute="centerX" id="hcK-0p-UnE"/>
<constraint firstItem="3420" firstAttribute="centerY" secondItem="JCm-xb-Dpw" secondAttribute="centerY" id="usg-NR-gmG"/>
<constraint firstItem="3435" firstAttribute="leading" secondItem="JCm-xb-Dpw" secondAttribute="leading" priority="750" constant="8" id="xFe-Hi-hSp"/>
<constraint firstAttribute="trailing" secondItem="RjE-Lj-Ija" secondAttribute="trailing" id="zej-Ml-IeG"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</customView>
</subviews>
<constraints>
<constraint firstItem="Msk-Iv-kCJ" firstAttribute="leading" secondItem="2" secondAttribute="leading" id="MCc-fn-fwX"/>
<constraint firstAttribute="trailing" secondItem="Msk-Iv-kCJ" secondAttribute="trailing" id="Q4f-XT-uPH"/>
<constraint firstItem="Msk-Iv-kCJ" firstAttribute="top" secondItem="2" secondAttribute="top" id="Uv1-dY-LX7"/>
<constraint firstAttribute="bottom" secondItem="Msk-Iv-kCJ" secondAttribute="bottom" id="xdi-eZ-CRL"/>
<constraint firstItem="3088" firstAttribute="leading" secondItem="d6L-dv-l2F" secondAttribute="leading" id="24n-gr-fRj"/>
<constraint firstItem="3088" firstAttribute="trailing" secondItem="d6L-dv-l2F" secondAttribute="trailing" id="2Lr-O1-ixK"/>
<constraint firstAttribute="bottom" secondItem="JCm-xb-Dpw" secondAttribute="bottom" id="3p4-RO-fqZ"/>
<constraint firstItem="JCm-xb-Dpw" firstAttribute="top" secondItem="3088" secondAttribute="bottom" id="AKz-Hp-l2f"/>
<constraint firstItem="3088" firstAttribute="top" secondItem="d6L-dv-l2F" secondAttribute="top" id="aoY-8i-ff5"/>
<constraint firstAttribute="trailing" secondItem="JCm-xb-Dpw" secondAttribute="trailing" id="ibE-6g-rdA"/>
<constraint firstItem="JCm-xb-Dpw" firstAttribute="leading" secondItem="2" secondAttribute="leading" id="nd4-bq-8Ih"/>
</constraints>
<viewLayoutGuide key="safeArea" id="d6L-dv-l2F"/>
<viewLayoutGuide key="layoutMargins" id="yfA-KK-fCu"/>
</view>
<connections>
<outlet property="menu" destination="29" id="2687"/>
</connections>
<point key="canvasLocation" x="138.5" y="125"/>
<point key="canvasLocation" x="138" y="379.5"/>
</window>
<menu systemMenu="main" id="29" userLabel="MainMenu">
<items>
@@ -1063,7 +1059,6 @@ CA
<outlet property="fShareMenu" destination="Cay-iU-bH4" id="nHs-6t-KFn"/>
<outlet property="fSortMenu" destination="1895" id="3440"/>
<outlet property="fSpeedLimitButton" destination="2690" id="2703"/>
<outlet property="fStackView" destination="Msk-Iv-kCJ" id="UBA-Uw-iSC"/>
<outlet property="fTableView" destination="3091" id="3118"/>
<outlet property="fTotalTorrentsField" destination="2700" id="2702"/>
<outlet property="fWindow" destination="21" id="246"/>

View File

@@ -89,8 +89,6 @@ target_sources(${TR_NAME}-mac
FileRenameSheetController.mm
FilterBarController.h
FilterBarController.mm
FilterBarView.h
FilterBarView.mm
FilterButton.h
FilterButton.mm
GlobalOptionsPopoverViewController.h
@@ -170,8 +168,6 @@ target_sources(${TR_NAME}-mac
StatsWindowController.mm
StatusBarController.h
StatusBarController.mm
StatusBarView.h
StatusBarView.mm
Toolbar.h
Toolbar.mm
Torrent.h

View File

@@ -164,7 +164,7 @@ typedef NS_ENUM(NSUInteger, AddType) { //
- (void)setWindowSizeToFit;
- (void)updateForAutoSize;
- (void)updateWindowAfterToolbarChange;
- (void)removeStackViewHeightConstraints;
- (void)removeHeightConstraints;
@property(nonatomic, readonly) CGFloat minScrollViewHeightAllowed;
@property(nonatomic, readonly) CGFloat toolbarHeight;
@property(nonatomic, readonly) CGFloat mainWindowComponentHeight;

View File

@@ -112,8 +112,8 @@ static NSString* const kTorrentTableViewDataType = @"TorrentTableViewDataType";
static CGFloat const kRowHeightRegular = 62.0;
static CGFloat const kRowHeightSmall = 22.0;
static CGFloat const kStatusBarHeight = 21.0;
static CGFloat const kFilterBarHeight = 23.0;
static CGFloat const kStatusBarHeight = 24.0;
static CGFloat const kFilterBarHeight = 24.0;
static CGFloat const kBottomBarHeight = 24.0;
static NSTimeInterval const kUpdateUISeconds = 1.0;
@@ -268,8 +268,8 @@ static void removeKeRangerRansomware()
@interface Controller ()<UNUserNotificationCenterDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, PowerManagerDelegate>
@property(nonatomic) IBOutlet NSWindow* fWindow;
@property(nonatomic) IBOutlet NSStackView* fStackView;
@property(nonatomic) NSArray* fStackViewHeightConstraints;
@property(nonatomic) NSLayoutConstraint* fMinHeightConstraint;
@property(nonatomic) NSLayoutConstraint* fFixedHeightConstraint;
@property(nonatomic) IBOutlet TorrentTableView* fTableView;
@property(nonatomic) IBOutlet NSMenuItem* fOpenIgnoreDownloadFolder;
@@ -643,7 +643,6 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
self.fTableView.floatsGroupRows = YES;
//self.fTableView.usesAlternatingRowBackgroundColors = !small;
[self.fWindow setContentBorderThickness:NSMinY(self.fTableView.enclosingScrollView.frame) forEdge:NSMinYEdge];
self.fWindow.movableByWindowBackground = YES;
self.fTotalTorrentsField.cell.backgroundStyle = NSBackgroundStyleRaised;
@@ -4028,14 +4027,14 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
- (void)toggleStatusBar:(id)sender
{
BOOL const show = self.fStatusBar == nil;
BOOL const show = self.fStatusBar == nil || self.fStatusBar.isHidden;
[self.fDefaults setBool:show forKey:@"StatusBar"];
[self updateMainWindow];
}
- (void)toggleFilterBar:(id)sender
{
BOOL const show = self.fFilterBar == nil;
BOOL const show = self.fFilterBar == nil || self.fFilterBar.isHidden;
//disable filtering when hiding (have to do before updateMainWindow:)
if (!show)
@@ -4054,7 +4053,7 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
- (void)focusFilterField
{
if (!self.fFilterBar)
if (self.fFilterBar == nil || self.fFilterBar.isHidden)
{
[self toggleFilterBar:self];
}
@@ -4555,7 +4554,8 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
//set filter item
if ([ident isEqualToString:ToolbarItemIdentifierFilter])
{
((NSButton*)toolbarItem.view).state = self.fFilterBar != nil;
BOOL shown = !(self.fFilterBar == nil || self.fFilterBar.isHidden);
((NSButton*)toolbarItem.view).state = shown ? NSControlStateValueOn : NSControlStateValueOff;
return YES;
}
@@ -5079,59 +5079,41 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
- (void)updateMainWindow
{
NSArray* subViews = self.fStackView.arrangedSubviews;
NSUInteger idx = 0;
if (self.fStatusBar == nil)
{
self.fStatusBar = [[StatusBarController alloc] initWithLib:self.fLib];
self.fStatusBar.layoutAttribute = NSLayoutAttributeBottom;
self.fStatusBar.automaticallyAdjustsSize = NO;
[self.fWindow addTitlebarAccessoryViewController:self.fStatusBar];
}
//update layout
if ([self.fDefaults boolForKey:@"StatusBar"])
{
if (self.fStatusBar == nil)
{
self.fStatusBar = [[StatusBarController alloc] initWithLib:self.fLib];
}
[self.fStackView insertArrangedSubview:self.fStatusBar.view atIndex:idx];
NSDictionary* views = @{ @"fStatusBar" : self.fStatusBar.view };
[self.fStackView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[fStatusBar(==21)]" options:0
metrics:nil
views:views]];
idx = 1;
self.fStatusBar.hidden = NO;
}
else
{
if ([subViews containsObject:self.fStatusBar.view])
{
[self.fStackView removeView:self.fStatusBar.view];
self.fStatusBar = nil;
}
self.fStatusBar.hidden = YES;
}
if (self.fFilterBar == nil)
{
self.fFilterBar = [[FilterBarController alloc] init];
self.fFilterBar.layoutAttribute = NSLayoutAttributeBottom;
self.fFilterBar.automaticallyAdjustsSize = NO;
[self.fWindow addTitlebarAccessoryViewController:self.fFilterBar];
}
if ([self.fDefaults boolForKey:@"FilterBar"])
{
if (self.fFilterBar == nil)
{
self.fFilterBar = [[FilterBarController alloc] init];
}
[self.fStackView insertArrangedSubview:self.fFilterBar.view atIndex:idx];
NSDictionary* views = @{ @"fFilterBar" : self.fFilterBar.view };
[self.fStackView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[fFilterBar(==23)]" options:0
metrics:nil
views:views]];
self.fFilterBar.hidden = NO;
[self focusFilterField];
}
else
{
if ([subViews containsObject:self.fFilterBar.view])
{
[self.fStackView removeView:self.fFilterBar.view];
self.fFilterBar = nil;
[self.fWindow makeFirstResponder:self.fTableView];
}
self.fFilterBar.hidden = YES;
}
[self fullUpdateUI];
@@ -5146,40 +5128,47 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
scrollView.hasVerticalScroller = NO;
[self removeStackViewHeightConstraints];
NSDictionary* views = @{ @"scrollView" : scrollView };
[self removeHeightConstraints];
if (![self.fDefaults boolForKey:@"AutoSize"])
{
// Only set a minimum height constraint
CGFloat height = self.minScrollViewHeightAllowed;
NSString* constraintsString = [NSString stringWithFormat:@"V:[scrollView(>=%f)]", height];
self.fStackViewHeightConstraints = [NSLayoutConstraint constraintsWithVisualFormat:constraintsString options:0
metrics:nil
views:views];
if (self.fMinHeightConstraint == nil)
{
self.fMinHeightConstraint = [scrollView.heightAnchor constraintGreaterThanOrEqualToConstant:height];
}
else
{
self.fMinHeightConstraint.constant = height;
}
self.fMinHeightConstraint.active = YES;
}
else
{
// Set a fixed height constraint
CGFloat height = [self calculateScrollViewHeightWithDockAdjustment];
NSString* constraintsString = [NSString stringWithFormat:@"V:[scrollView(==%f)]", height];
self.fStackViewHeightConstraints = [NSLayoutConstraint constraintsWithVisualFormat:constraintsString options:0
metrics:nil
views:views];
if (self.fFixedHeightConstraint == nil)
{
self.fFixedHeightConstraint = [scrollView.heightAnchor constraintEqualToConstant:height];
}
else
{
self.fFixedHeightConstraint.constant = height;
}
// Redraw table to avoid empty cells
[self.fTableView reloadData];
}
// Add height constraint to fStackView
[self.fStackView addConstraints:self.fStackViewHeightConstraints];
self.fFixedHeightConstraint.active = YES;
}
scrollView.hasVerticalScroller = YES;
}
else
{
[self removeStackViewHeightConstraints];
[self removeHeightConstraints];
}
}
@@ -5207,7 +5196,7 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
}
else
{
[self removeStackViewHeightConstraints];
[self removeHeightConstraints];
}
}
@@ -5220,7 +5209,7 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
//and we only need to "fix" the layout when showing the toolbar
if (!self.fWindow.toolbar.isVisible)
{
[self removeStackViewHeightConstraints];
[self removeHeightConstraints];
}
//this fixes a macOS bug where on toggling the toolbar item bezels will show
@@ -5241,11 +5230,15 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
}
}
- (void)removeStackViewHeightConstraints
- (void)removeHeightConstraints
{
if (self.fStackViewHeightConstraints)
if (self.fFixedHeightConstraint != nil)
{
[self.fStackView removeConstraints:self.fStackViewHeightConstraints];
self.fFixedHeightConstraint.active = NO;
}
if (self.fMinHeightConstraint != nil)
{
self.fMinHeightConstraint.active = NO;
}
}
@@ -5263,12 +5256,13 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
- (CGFloat)mainWindowComponentHeight
{
CGFloat height = kBottomBarHeight;
if (self.fStatusBar)
if (self.fStatusBar != nil && !self.fStatusBar.isHidden)
{
height += kStatusBarHeight;
}
if (self.fFilterBar)
if (self.fFilterBar != nil && !self.fFilterBar.isHidden)
{
height += kFilterBarHeight;
}
@@ -5329,7 +5323,7 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool
- (void)windowWillEnterFullScreen:(NSNotification*)notification
{
[self removeStackViewHeightConstraints];
[self removeHeightConstraints];
}
- (void)windowDidExitFullScreen:(NSNotification*)notification

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="20037" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="24412" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="20037"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="24412"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -22,15 +22,12 @@
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView clipsToBounds="YES" id="2" userLabel="FilterBar" customClass="FilterBarView">
<rect key="frame" x="0.0" y="0.0" width="501" height="23"/>
<customView id="2" userLabel="FilterBar">
<rect key="frame" x="0.0" y="0.0" width="500" height="24"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="4">
<rect key="frame" x="5" y="4" width="26" height="15"/>
<constraints>
<constraint firstAttribute="width" constant="26" id="SSy-Cy-W3L"/>
</constraints>
<rect key="frame" x="5" y="6" width="26" height="12"/>
<popUpButtonCell key="cell" type="recessed" bezelStyle="recessed" imagePosition="left" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" tag="-999" imageScaling="proportionallyDown" inset="2" pullsDown="YES" arrowPosition="noArrow" selectedItem="57" id="16">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="miniSystem"/>
@@ -51,18 +48,21 @@
</connections>
</menu>
</popUpButtonCell>
<constraints>
<constraint firstAttribute="width" constant="26" id="SSy-Cy-W3L"/>
</constraints>
</popUpButton>
<box horizontalHuggingPriority="750" horizontalCompressionResistancePriority="1000" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="5">
<rect key="frame" x="34" y="5" width="5" height="13"/>
<rect key="frame" x="34" y="5" width="5" height="14"/>
<constraints>
<constraint firstAttribute="width" constant="1" id="6ed-rN-3Je"/>
</constraints>
</box>
<stackView distribution="fillProportionally" orientation="horizontal" alignment="centerY" spacing="1" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalClippingResistancePriority="750" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mzg-HE-ptV">
<rect key="frame" x="42" y="5" width="329" height="14"/>
<rect key="frame" x="42" y="4" width="341" height="16"/>
<subviews>
<button verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="9" customClass="FilterButton">
<rect key="frame" x="0.0" y="-1" width="29" height="15"/>
<rect key="frame" x="0.0" y="0.0" width="31" height="16"/>
<buttonCell key="cell" type="recessed" title="All" bezelStyle="recessed" alignment="center" controlSize="mini" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="12">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
@@ -72,7 +72,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="3" customClass="FilterButton">
<rect key="frame" x="30" y="-1" width="50" height="15"/>
<rect key="frame" x="32" y="0.0" width="52" height="16"/>
<buttonCell key="cell" type="recessed" title="Active" bezelStyle="recessed" alignment="center" controlSize="mini" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="21">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
@@ -82,7 +82,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="8" customClass="FilterButton">
<rect key="frame" x="81" y="-1" width="87" height="15"/>
<rect key="frame" x="85" y="0.0" width="89" height="16"/>
<buttonCell key="cell" type="recessed" title="Downloading" bezelStyle="recessed" alignment="center" controlSize="mini" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="13">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
@@ -92,7 +92,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="7" customClass="FilterButton">
<rect key="frame" x="169" y="-1" width="60" height="15"/>
<rect key="frame" x="175" y="0.0" width="62" height="16"/>
<buttonCell key="cell" type="recessed" title="Seeding" bezelStyle="recessed" alignment="center" controlSize="mini" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="14">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
@@ -102,7 +102,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="6" customClass="FilterButton">
<rect key="frame" x="230" y="-1" width="55" height="15"/>
<rect key="frame" x="238" y="0.0" width="57" height="16"/>
<buttonCell key="cell" type="recessed" title="Paused" bezelStyle="recessed" alignment="center" controlSize="mini" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="15">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
@@ -112,7 +112,7 @@
</connections>
</button>
<button verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nvH-xy-86S" customClass="FilterButton">
<rect key="frame" x="286" y="-1" width="43" height="15"/>
<rect key="frame" x="296" y="0.0" width="45" height="16"/>
<buttonCell key="cell" type="recessed" title="Error" bezelStyle="recessed" alignment="center" controlSize="mini" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="AtX-O4-Mqp">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
@@ -139,15 +139,15 @@
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<searchField wantsLayer="YES" verticalHuggingPriority="750" verticalCompressionResistancePriority="1000" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="10">
<rect key="frame" x="401" y="2" width="95" height="19"/>
<searchField wantsLayer="YES" focusRingType="none" verticalHuggingPriority="750" verticalCompressionResistancePriority="1000" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="10">
<rect key="frame" x="400" y="4" width="95" height="16"/>
<constraints>
<constraint firstAttribute="width" constant="95" placeholder="YES" id="RUH-hb-Ldl"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="48" id="Ven-bt-DjP"/>
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="95" id="b6y-sO-sUo"/>
</constraints>
<searchFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" bezelStyle="round" id="11">
<font key="font" metaFont="smallSystem"/>
<searchFieldCell key="cell" controlSize="mini" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" bezelStyle="round" id="11">
<font key="font" metaFont="miniSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</searchFieldCell>
@@ -156,13 +156,19 @@
<outlet property="searchMenuTemplate" destination="22" id="48"/>
</connections>
</searchField>
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="aLy-sV-SG8">
<rect key="frame" x="0.0" y="21" width="500" height="5"/>
</box>
</subviews>
<constraints>
<constraint firstItem="10" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="mzg-HE-ptV" secondAttribute="trailing" constant="5" id="09X-9L-yc0"/>
<constraint firstAttribute="trailing" secondItem="aLy-sV-SG8" secondAttribute="trailing" id="1jl-i3-TIG"/>
<constraint firstItem="4" firstAttribute="centerY" secondItem="2" secondAttribute="centerY" id="AuI-QF-CKh"/>
<constraint firstItem="mzg-HE-ptV" firstAttribute="leading" secondItem="5" secondAttribute="trailing" constant="5" id="KgL-2d-UXl"/>
<constraint firstItem="5" firstAttribute="centerY" secondItem="2" secondAttribute="centerY" id="SAr-4s-SlW"/>
<constraint firstItem="5" firstAttribute="top" secondItem="2" secondAttribute="top" constant="5" id="SlS-3C-JDT"/>
<constraint firstItem="aLy-sV-SG8" firstAttribute="leading" secondItem="2" secondAttribute="leading" id="TZo-AX-NEe"/>
<constraint firstItem="aLy-sV-SG8" firstAttribute="top" secondItem="2" secondAttribute="top" id="UXT-uZ-CRD"/>
<constraint firstItem="4" firstAttribute="leading" secondItem="2" secondAttribute="leading" constant="5" id="cB8-HO-JyJ"/>
<constraint firstItem="mzg-HE-ptV" firstAttribute="centerY" secondItem="2" secondAttribute="centerY" id="cOt-Q3-x7T"/>
<constraint firstItem="5" firstAttribute="leading" secondItem="4" secondAttribute="trailing" constant="5" id="dRA-mP-tCJ"/>
@@ -170,9 +176,6 @@
<constraint firstAttribute="bottom" secondItem="5" secondAttribute="bottom" constant="5" id="fKx-Ct-3z1"/>
<constraint firstAttribute="trailing" secondItem="10" secondAttribute="trailing" constant="5" id="s5c-0G-9tM"/>
</constraints>
<connections>
<outlet property="searchFieldVerticalConstraint" destination="ecz-eJ-l9b" id="hzc-vg-t2p"/>
</connections>
<point key="canvasLocation" x="139" y="150"/>
</customView>
<menu title="Menu" id="22" userLabel="SearchFilterMenu">

View File

@@ -20,7 +20,7 @@ extern FilterSearchType const FilterSearchTypeTracker;
extern NSInteger const kGroupFilterAllTag;
@interface FilterBarController : NSViewController<NSMenuItemValidation>
@interface FilterBarController : NSTitlebarAccessoryViewController<NSMenuItemValidation>
@property(nonatomic, readonly) NSArray<NSString*>* searchStrings;

View File

@@ -1,9 +0,0 @@
// This file Copyright © Transmission authors and contributors.
// It may be used under the MIT (SPDX: MIT) license.
// License text can be found in the licenses/ folder.
#import <AppKit/AppKit.h>
@interface FilterBarView : NSView
@end

View File

@@ -1,42 +0,0 @@
// This file Copyright © Transmission authors and contributors.
// It may be used under the MIT (SPDX: MIT) license.
// License text can be found in the licenses/ folder.
#import "FilterBarView.h"
@interface FilterBarView ()
@property(weak) IBOutlet NSLayoutConstraint* searchFieldVerticalConstraint;
@end
@implementation FilterBarView
- (void)awakeFromNib
{
[super awakeFromNib];
_searchFieldVerticalConstraint.constant = -.5;
}
- (BOOL)mouseDownCanMoveWindow
{
return NO;
}
- (BOOL)isOpaque
{
return YES;
}
- (void)drawRect:(NSRect)rect
{
[NSColor.windowBackgroundColor setFill];
NSRectFill(rect);
NSRect const lineBorderRect = NSMakeRect(NSMinX(rect), 0.0, NSWidth(rect), 1.0);
if (NSIntersectsRect(lineBorderRect, rect))
{
[NSColor.gridColor setFill];
NSRectFill(lineBorderRect);
}
}
@end

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="20037" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="24412" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="20037"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="24412"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -18,12 +18,12 @@
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView clipsToBounds="YES" id="2" userLabel="StatusBar" customClass="StatusBarView">
<rect key="frame" x="0.0" y="0.0" width="400" height="21"/>
<customView id="2" userLabel="StatusBar">
<rect key="frame" x="0.0" y="0.0" width="500" height="24"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="3">
<rect key="frame" x="5" y="2" width="89" height="17"/>
<rect key="frame" x="5" y="2" width="97" height="20"/>
<popUpButtonCell key="cell" type="recessed" title="status menu" bezelStyle="recessed" imagePosition="left" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" tag="-1" inset="2" pullsDown="YES" arrowPosition="noArrow" selectedItem="33" id="12">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="smallSystem"/>
@@ -55,44 +55,50 @@
</popUpButtonCell>
</popUpButton>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="4">
<rect key="frame" x="218" y="5" width="8" height="12"/>
<rect key="frame" x="318" y="6" width="8" height="12"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" image="DownArrowTemplate" id="11"/>
</imageView>
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="5">
<rect key="frame" x="309" y="5" width="8" height="12"/>
<rect key="frame" x="409" y="6" width="8" height="12"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" image="UpArrowTemplate" id="10"/>
</imageView>
<textField verticalHuggingPriority="1000" horizontalCompressionResistancePriority="1000" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6">
<rect key="frame" x="320" y="4" width="62" height="14"/>
<textField focusRingType="none" verticalHuggingPriority="1000" horizontalCompressionResistancePriority="1000" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6">
<rect key="frame" x="420" y="5" width="62" height="14"/>
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="left" title="999.9 KB/s" id="9">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="1000" horizontalCompressionResistancePriority="1000" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7">
<rect key="frame" x="229" y="4" width="62" height="14"/>
<textField focusRingType="none" verticalHuggingPriority="1000" horizontalCompressionResistancePriority="1000" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7">
<rect key="frame" x="329" y="5" width="62" height="14"/>
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="left" title="999.9 KB/s" id="8">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="na0-dX-KKO">
<rect key="frame" x="0.0" y="21" width="500" height="5"/>
</box>
</subviews>
<constraints>
<constraint firstItem="na0-dX-KKO" firstAttribute="top" secondItem="2" secondAttribute="top" id="30D-lP-vBf"/>
<constraint firstItem="4" firstAttribute="centerY" secondItem="2" secondAttribute="centerY" id="5X1-ao-0Th"/>
<constraint firstItem="6" firstAttribute="leading" secondItem="5" secondAttribute="trailing" constant="5" id="6EO-VX-DLE"/>
<constraint firstItem="4" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="3" secondAttribute="trailing" constant="5" id="6tW-KD-to5"/>
<constraint firstItem="6" firstAttribute="centerY" secondItem="2" secondAttribute="centerY" id="PhY-Kl-8UO"/>
<constraint firstItem="7" firstAttribute="centerY" secondItem="2" secondAttribute="centerY" id="RUV-jV-Cu3"/>
<constraint firstAttribute="trailing" secondItem="6" secondAttribute="trailing" constant="20" id="TYC-7o-i81"/>
<constraint firstItem="na0-dX-KKO" firstAttribute="leading" secondItem="2" secondAttribute="leading" id="VcY-K8-v6h"/>
<constraint firstItem="3" firstAttribute="leading" secondItem="2" secondAttribute="leading" constant="5" id="aSH-P9-sbq"/>
<constraint firstAttribute="trailing" secondItem="na0-dX-KKO" secondAttribute="trailing" id="qcN-md-bN6"/>
<constraint firstItem="5" firstAttribute="centerY" secondItem="2" secondAttribute="centerY" id="s5N-sn-GIz"/>
<constraint firstItem="7" firstAttribute="leading" secondItem="4" secondAttribute="trailing" constant="5" id="ucx-2O-Qeb"/>
<constraint firstItem="5" firstAttribute="leading" secondItem="7" secondAttribute="trailing" constant="20" id="w5L-Hb-0Ly"/>
<constraint firstItem="3" firstAttribute="centerY" secondItem="2" secondAttribute="centerY" id="xna-mB-gNK"/>
</constraints>
<point key="canvasLocation" x="139" y="136"/>
<point key="canvasLocation" x="211" y="136"/>
</customView>
</objects>
<resources>

View File

@@ -6,7 +6,7 @@
#include <libtransmission/transmission.h>
@interface StatusBarController : NSViewController<NSMenuItemValidation>
@interface StatusBarController : NSTitlebarAccessoryViewController<NSMenuItemValidation>
- (instancetype)initWithLib:(tr_session*)lib;

View File

@@ -1,9 +0,0 @@
// This file Copyright © Transmission authors and contributors.
// It may be used under the MIT (SPDX: MIT) license.
// License text can be found in the licenses/ folder.
#import <AppKit/AppKit.h>
@interface StatusBarView : NSView
@end

View File

@@ -1,39 +0,0 @@
// This file Copyright © Transmission authors and contributors.
// It may be used under the MIT (SPDX: MIT) license.
// License text can be found in the licenses/ folder.
#import "StatusBarView.h"
@implementation StatusBarView
- (BOOL)mouseDownCanMoveWindow
{
return YES;
}
- (BOOL)isOpaque
{
return YES;
}
- (void)drawRect:(NSRect)rect
{
[NSColor.windowBackgroundColor setFill];
NSRectFill(rect);
NSRect const lineBorderRect = NSMakeRect(NSMinX(rect), 0.0, NSWidth(rect), 1.0);
if (NSIntersectsRect(lineBorderRect, rect))
{
[NSColor.gridColor setFill];
NSRectFill(lineBorderRect);
}
}
#pragma mark - Private
- (void)reload
{
self.needsDisplay = YES;
}
@end