From f72131c6f85af1d6dbe8fbefd29aea93defb202d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Paul=20K=C3=BChne?= <felix@feepk.net> Date: Fri, 31 May 2019 14:07:05 +0200 Subject: [PATCH] macosx/library window: make the playlist collapsable and add widgets to describe the future look --- modules/gui/macosx/UI/VLCLibraryWindow.xib | 216 ++++++++++++------ modules/gui/macosx/library/VLCLibraryWindow.h | 2 + modules/gui/macosx/library/VLCLibraryWindow.m | 62 ++++- 3 files changed, 211 insertions(+), 69 deletions(-) diff --git a/modules/gui/macosx/UI/VLCLibraryWindow.xib b/modules/gui/macosx/UI/VLCLibraryWindow.xib index d083f419f21d..4c2f970b252a 100644 --- a/modules/gui/macosx/UI/VLCLibraryWindow.xib +++ b/modules/gui/macosx/UI/VLCLibraryWindow.xib @@ -23,49 +23,46 @@ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="W1M-0o-qYG"> - <rect key="frame" x="88" y="333" width="304" height="24"/> - <constraints> - <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="300" id="Wg7-mn-ahw"/> - </constraints> - <segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="Twg-gp-8ng"> + <rect key="frame" x="212" y="333" width="56" height="23"/> + <segmentedCell key="cell" borderStyle="border" alignment="left" style="texturedRounded" trackingMode="selectOne" id="Twg-gp-8ng"> <font key="font" metaFont="system"/> <segments> - <segment width="99"/> - <segment width="99" selected="YES" tag="1"/> - <segment width="98"/> + <segment/> + <segment selected="YES" tag="1"/> + <segment/> </segments> </segmentedCell> </segmentedControl> <splitView autosaveName="librarywindowsplitview" dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="u8g-jy-S4e"> - <rect key="frame" x="0.0" y="36" width="480" height="292"/> + <rect key="frame" x="0.0" y="36" width="480" height="257"/> <subviews> - <customView fixedFrame="YES" id="iSp-bV-w6B"> - <rect key="frame" x="0.0" y="0.0" width="242" height="292"/> + <customView id="iSp-bV-w6B"> + <rect key="frame" x="0.0" y="0.0" width="242" height="257"/> <autoresizingMask key="autoresizingMask"/> </customView> <customView id="dus-WQ-AmE"> - <rect key="frame" x="243" y="0.0" width="237" height="292"/> + <rect key="frame" x="243" y="0.0" width="237" height="257"/> <autoresizingMask key="autoresizingMask"/> <subviews> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Vry-OZ-ySI"> - <rect key="frame" x="18" y="275" width="51" height="17"/> - <textFieldCell key="cell" lineBreakMode="clipping" title="Up next" id="7PB-pT-1Xp"> - <font key="font" usesAppearanceFont="YES"/> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TET-5r-zHx"> + <rect key="frame" x="18" y="230" width="37" height="17"/> + <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="fo5-R8-TeO"> + <font key="font" metaFont="system"/> <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> </textFieldCell> </textField> <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="qmL-Ar-cj1"> - <rect key="frame" x="20" y="248" width="197" height="5"/> + <rect key="frame" x="20" y="220" width="197" height="5"/> </box> <scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Z7y-D0-11Q"> - <rect key="frame" x="20" y="63" width="217" height="179"/> + <rect key="frame" x="20" y="63" width="217" height="151"/> <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Vdr-bg-tuS"> - <rect key="frame" x="0.0" y="0.0" width="217" height="179"/> + <rect key="frame" x="0.0" y="0.0" width="217" height="151"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" id="Fr1-af-8gb" customClass="VLCPlaylistTableView"> - <rect key="frame" x="0.0" y="0.0" width="217" height="179"/> + <rect key="frame" x="0.0" y="0.0" width="217" height="151"/> <autoresizingMask key="autoresizingMask"/> <size key="intercellSpacing" width="3" height="2"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> @@ -146,8 +143,8 @@ </connections> </button> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cih-xp-HmY"> - <rect key="frame" x="133" y="15" width="84" height="17"/> - <buttonCell key="cell" type="square" title="Empty queue" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="OjM-W9-IrQ"> + <rect key="frame" x="202" y="15" width="15" height="30"/> + <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSTouchBarDeleteTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="OjM-W9-IrQ"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="system"/> </buttonCell> @@ -156,10 +153,10 @@ </connections> </button> <customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VFI-oW-dMZ" customClass="VLCDragDropView"> - <rect key="frame" x="0.0" y="55" width="237" height="195"/> + <rect key="frame" x="0.0" y="55" width="237" height="167"/> <subviews> <imageView translatesAutoresizingMaskIntoConstraints="NO" id="cTV-Wf-TfJ" customClass="VLCDropDisabledImageView"> - <rect key="frame" x="63" y="42" width="112" height="112"/> + <rect key="frame" x="63" y="28" width="112" height="112"/> <constraints> <constraint firstAttribute="width" constant="112" id="IvG-i0-rbs"/> <constraint firstAttribute="height" constant="112" id="dO8-Iv-pDk"/> @@ -167,7 +164,7 @@ <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="dropzone" id="sHO-XQ-hCU"/> </imageView> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SWh-4E-Qtf"> - <rect key="frame" x="56" y="4" width="125" height="32"/> + <rect key="frame" x="56" y="-10" width="125" height="32"/> <buttonCell key="cell" type="push" title="Open media..." bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="UUH-HF-Iqc"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="system"/> @@ -184,24 +181,36 @@ <constraint firstItem="SWh-4E-Qtf" firstAttribute="centerX" secondItem="cTV-Wf-TfJ" secondAttribute="centerX" id="xrf-SM-XAK"/> </constraints> </customView> + <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="244-FS-P3T"> + <rect key="frame" x="171" y="23" width="21" height="14"/> + <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSTextRulerLineHeightIncrease" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="qDZ-84-3uy"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <connections> + <action selector="repeatAction:" target="QvC-M9-y7g" id="r9L-pE-b8A"/> + </connections> + </button> </subviews> <constraints> - <constraint firstItem="Vry-OZ-ySI" firstAttribute="leading" secondItem="dus-WQ-AmE" secondAttribute="leading" constant="20" id="6iz-2G-xXO"/> <constraint firstItem="cih-xp-HmY" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="8zF-Wo-H79" secondAttribute="trailing" constant="45" id="8Dc-DN-myV"/> - <constraint firstItem="qmL-Ar-cj1" firstAttribute="top" secondItem="Vry-OZ-ySI" secondAttribute="bottom" constant="24" id="De2-Wf-QsC"/> <constraint firstItem="nAW-KH-ipk" firstAttribute="leading" secondItem="dus-WQ-AmE" secondAttribute="leading" constant="20" id="EUp-9J-Fid"/> + <constraint firstItem="qmL-Ar-cj1" firstAttribute="top" secondItem="dus-WQ-AmE" secondAttribute="top" constant="34" id="FfM-yJ-qCy"/> <constraint firstItem="Z7y-D0-11Q" firstAttribute="top" secondItem="qmL-Ar-cj1" secondAttribute="bottom" constant="8" id="GIh-g3-rqJ"/> <constraint firstItem="Z7y-D0-11Q" firstAttribute="leading" secondItem="dus-WQ-AmE" secondAttribute="leading" constant="20" id="J3s-se-6bL"/> <constraint firstItem="VFI-oW-dMZ" firstAttribute="top" secondItem="qmL-Ar-cj1" secondAttribute="bottom" id="JzJ-oS-dIb"/> - <constraint firstItem="Vry-OZ-ySI" firstAttribute="top" secondItem="dus-WQ-AmE" secondAttribute="top" id="K80-Vw-FfD"/> <constraint firstItem="8zF-Wo-H79" firstAttribute="centerY" secondItem="jg5-33-vH0" secondAttribute="centerY" id="Qdp-7K-RkD"/> + <constraint firstItem="244-FS-P3T" firstAttribute="centerY" secondItem="cih-xp-HmY" secondAttribute="centerY" id="XB9-iZ-mQY"/> <constraint firstAttribute="trailing" secondItem="VFI-oW-dMZ" secondAttribute="trailing" id="YeE-gw-hV0"/> <constraint firstItem="Z7y-D0-11Q" firstAttribute="baseline" secondItem="nAW-KH-ipk" secondAttribute="firstBaseline" constant="-8" id="ZIg-X2-w2p"/> <constraint firstAttribute="trailing" secondItem="cih-xp-HmY" secondAttribute="trailing" constant="20" id="ZmV-zc-4a0"/> <constraint firstItem="8zF-Wo-H79" firstAttribute="leading" secondItem="jg5-33-vH0" secondAttribute="trailing" constant="20" id="aAn-lh-NcZ"/> <constraint firstAttribute="trailing" secondItem="nAW-KH-ipk" secondAttribute="trailing" constant="20" id="d3t-R3-45M"/> <constraint firstAttribute="trailing" secondItem="qmL-Ar-cj1" secondAttribute="trailing" constant="20" id="epP-za-NOo"/> + <constraint firstItem="cih-xp-HmY" firstAttribute="leading" secondItem="244-FS-P3T" secondAttribute="trailing" constant="10" id="hKG-Qf-FgK"/> <constraint firstAttribute="bottom" secondItem="cih-xp-HmY" secondAttribute="bottom" constant="15" id="jRf-7P-2Vc"/> + <constraint firstItem="TET-5r-zHx" firstAttribute="leading" secondItem="qmL-Ar-cj1" secondAttribute="leading" id="jsm-nZ-hT7"/> + <constraint firstItem="qmL-Ar-cj1" firstAttribute="top" secondItem="TET-5r-zHx" secondAttribute="bottom" constant="7" id="lz9-Mt-0RI"/> <constraint firstItem="qmL-Ar-cj1" firstAttribute="leading" secondItem="dus-WQ-AmE" secondAttribute="leading" constant="20" id="st7-tK-qLh"/> <constraint firstAttribute="trailing" secondItem="Z7y-D0-11Q" secondAttribute="trailing" id="x0A-xI-BVt"/> <constraint firstItem="jg5-33-vH0" firstAttribute="firstBaseline" secondItem="cih-xp-HmY" secondAttribute="firstBaseline" id="xwe-Nb-2Rz"/> @@ -388,22 +397,108 @@ <constraint firstAttribute="bottom" secondItem="MQH-bI-Zdh" secondAttribute="bottom" id="lBe-S3-sJr"/> </constraints> </customView> + <searchField wantsLayer="YES" verticalHuggingPriority="751" allowsCharacterPickerTouchBarItem="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Uje-gs-XyH"> + <rect key="frame" x="374" y="334" width="96" height="22"/> + <constraints> + <constraint firstAttribute="height" constant="22" id="bdi-0E-ZYl"/> + <constraint firstAttribute="width" constant="96" id="pdg-70-JyS"/> + </constraints> + <searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" usesSingleLineMode="YES" bezelStyle="round" id="hOD-ST-dRA"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </searchFieldCell> + </searchField> + <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="j4q-VF-mVm"> + <rect key="frame" x="328" y="331" width="38" height="27"/> + <constraints> + <constraint firstAttribute="width" constant="34" id="0x1-bE-bd5"/> + </constraints> + <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="NSPrivateChaptersTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="qZO-fT-bFY"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <connections> + <action selector="showAndHidePlaylist:" target="QvC-M9-y7g" id="hRz-bm-JJi"/> + </connections> + </button> + <segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8iI-b7-Eag"> + <rect key="frame" x="212" y="301" width="56" height="24"/> + <segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="j8T-nk-7Ny"> + <font key="font" metaFont="system"/> + <segments> + <segment/> + <segment selected="YES" tag="1"/> + <segment> + <nil key="label"/> + </segment> + </segments> + </segmentedCell> + </segmentedControl> + <segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7K7-4r-Swk"> + <rect key="frame" x="177" y="301" width="67" height="24"/> + <segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="Txm-sT-UX4"> + <font key="font" metaFont="system"/> + <segments> + <segment image="NSIconViewTemplate"/> + <segment image="NSListViewTemplate" selected="YES" tag="1"/> + </segments> + </segmentedCell> + </segmentedControl> + <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Rja-6g-wNZ"> + <rect key="frame" x="4" y="296" width="57" height="32"/> + <buttonCell key="cell" type="push" bezelStyle="rounded" image="NSTextRulerLineHeightIncrease" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="PIW-C4-naY"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Rhu-eh-ywm"> + <rect key="frame" x="56" y="328" width="45" height="32"/> + <buttonCell key="cell" type="push" bezelStyle="rounded" image="NSLeftFacingTriangleTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="iCT-DX-7zt"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ehX-wB-NgX"> + <rect key="frame" x="89" y="328" width="45" height="32"/> + <buttonCell key="cell" type="push" bezelStyle="rounded" image="NSRightFacingTriangleTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="2fB-Bb-72z"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> </subviews> <constraints> + <constraint firstItem="Uje-gs-XyH" firstAttribute="leading" secondItem="j4q-VF-mVm" secondAttribute="trailing" constant="10" id="05s-O7-6XG"/> + <constraint firstItem="ehX-wB-NgX" firstAttribute="centerY" secondItem="Rhu-eh-ywm" secondAttribute="centerY" id="3Dz-pU-GvC"/> + <constraint firstItem="8iI-b7-Eag" firstAttribute="centerY" secondItem="Rja-6g-wNZ" secondAttribute="centerY" id="4gy-0U-jRa"/> <constraint firstItem="W1M-0o-qYG" firstAttribute="centerX" secondItem="EiT-Mj-1SZ" secondAttribute="centerX" id="4k0-zs-btE"/> + <constraint firstItem="j4q-VF-mVm" firstAttribute="height" secondItem="Uje-gs-XyH" secondAttribute="height" id="E0d-Un-tTT"/> + <constraint firstAttribute="trailing" secondItem="Uje-gs-XyH" secondAttribute="trailing" constant="10" id="FQt-CJ-LaL"/> + <constraint firstItem="Rja-6g-wNZ" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" constant="10" id="NEx-y8-ljp"/> <constraint firstItem="vUy-jt-gjY" firstAttribute="top" secondItem="u8g-jy-S4e" secondAttribute="bottom" id="QH8-mU-6ZP"/> - <constraint firstItem="u8g-jy-S4e" firstAttribute="top" secondItem="W1M-0o-qYG" secondAttribute="bottom" constant="7" id="QVr-jj-gZM"/> + <constraint firstItem="u8g-jy-S4e" firstAttribute="top" secondItem="7K7-4r-Swk" secondAttribute="bottom" constant="10" id="RBR-gc-JAY"/> + <constraint firstItem="ehX-wB-NgX" firstAttribute="leading" secondItem="Rhu-eh-ywm" secondAttribute="trailing" id="RKh-Oh-ceZ"/> <constraint firstItem="vUy-jt-gjY" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" id="Sse-bx-ewr"/> + <constraint firstItem="Rhu-eh-ywm" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" constant="62" id="T4e-1R-QpA"/> <constraint firstAttribute="trailing" secondItem="vUy-jt-gjY" secondAttribute="trailing" id="amK-mR-Fvr"/> + <constraint firstItem="7K7-4r-Swk" firstAttribute="top" secondItem="Uje-gs-XyH" secondAttribute="bottom" constant="10" id="aoh-Mz-6q3"/> + <constraint firstItem="ehX-wB-NgX" firstAttribute="centerY" secondItem="W1M-0o-qYG" secondAttribute="centerY" id="cAC-MZ-bLq"/> + <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="7K7-4r-Swk" secondAttribute="trailing" constant="10" id="efh-bR-8eX"/> + <constraint firstItem="8iI-b7-Eag" firstAttribute="centerX" secondItem="EiT-Mj-1SZ" secondAttribute="centerX" id="fnd-vq-xxU"/> + <constraint firstItem="Rja-6g-wNZ" firstAttribute="centerY" secondItem="7K7-4r-Swk" secondAttribute="centerY" id="fr8-rk-duT"/> + <constraint firstItem="Uje-gs-XyH" firstAttribute="centerY" secondItem="W1M-0o-qYG" secondAttribute="centerY" id="gej-u6-rhx"/> + <constraint firstItem="7K7-4r-Swk" firstAttribute="trailing" secondItem="iSp-bV-w6B" secondAttribute="trailing" id="gvz-2T-TjF"/> + <constraint firstItem="7K7-4r-Swk" firstAttribute="centerY" secondItem="8iI-b7-Eag" secondAttribute="centerY" id="k8Q-8U-5rg"/> <constraint firstAttribute="trailing" secondItem="u8g-jy-S4e" secondAttribute="trailing" id="lEc-Vr-8M9"/> <constraint firstItem="u8g-jy-S4e" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" id="s58-Wr-5SV"/> <constraint firstAttribute="bottom" secondItem="vUy-jt-gjY" secondAttribute="bottom" id="vMr-VQ-r4P"/> + <constraint firstItem="j4q-VF-mVm" firstAttribute="centerY" secondItem="Uje-gs-XyH" secondAttribute="centerY" id="vOD-ce-ydq"/> <constraint firstItem="W1M-0o-qYG" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" constant="7" id="y9h-yj-Ufq"/> </constraints> </view> <connections> <outlet property="alternativeAudioCollectionView" destination="QAt-jP-zE7" id="269-UN-dfM"/> - <outlet property="alternativeAudioSegmentedControl" destination="nzi-H5-fyv" id="AmI-6s-ALm"/> + <outlet property="alternativeAudioSegmentedControl" destination="8iI-b7-Eag" id="ZYQ-79-H8k"/> <outlet property="alternativeAudioView" destination="k7f-ic-LrF" id="8Cp-d2-3UJ"/> <outlet property="audioCategorySelectionTableView" destination="dNP-8u-8iI" id="KiD-PX-T2p"/> <outlet property="audioCollectionSelectionTableView" destination="LNt-ot-2wU" id="eJS-WZ-Ri7"/> @@ -419,11 +514,12 @@ <outlet property="openMediaButton" destination="SWh-4E-Qtf" id="sIZ-xo-GLA"/> <outlet property="playlistDragDropView" destination="VFI-oW-dMZ" id="gVc-mu-f8T"/> <outlet property="playlistTableView" destination="Fr1-af-8gb" id="yaB-Ab-jrx"/> + <outlet property="playlistView" destination="dus-WQ-AmE" id="fTF-HP-Chb"/> <outlet property="recentVideoLibraryCollectionView" destination="hnE-Hj-MZo" id="Fko-5v-1bC"/> <outlet property="repeatPlaylistButton" destination="8zF-Wo-H79" id="6bH-HF-arx"/> <outlet property="segmentedTitleControl" destination="W1M-0o-qYG" id="Gw1-T6-78k"/> <outlet property="shufflePlaylistButton" destination="jg5-33-vH0" id="FV2-36-3lG"/> - <outlet property="upNextLabel" destination="Vry-OZ-ySI" id="KxM-oZ-tSg"/> + <outlet property="upNextLabel" destination="TET-5r-zHx" id="3oI-LK-NDP"/> <outlet property="upNextSeparator" destination="qmL-Ar-cj1" id="GRX-ZE-2UG"/> <outlet property="videoLibraryCollectionView" destination="B8x-e8-7zp" id="u1I-gn-IU1"/> <outlet property="videoLibraryStackView" destination="vak-Gp-ljo" id="ulu-pc-ctF"/> @@ -451,16 +547,16 @@ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <subviews> <scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HmU-mL-Tjk"> - <rect key="frame" x="0.0" y="364" width="242" height="444"/> - <clipView key="contentView" id="J5s-sy-il6"> - <rect key="frame" x="0.0" y="0.0" width="242" height="444"/> + <rect key="frame" x="0.0" y="498" width="242" height="310"/> + <clipView key="contentView" copiesOnScroll="NO" id="J5s-sy-il6"> + <rect key="frame" x="0.0" y="0.0" width="242" height="310"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <collectionView selectable="YES" id="hnE-Hj-MZo"> - <rect key="frame" x="0.0" y="0.0" width="242" height="444"/> + <rect key="frame" x="0.0" y="0.0" width="242" height="310"/> <autoresizingMask key="autoresizingMask" heightSizable="YES"/> <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="20" minimumLineSpacing="20" scrollDirection="horizontal" id="N2a-bI-WQc"> - <size key="itemSize" width="532" height="404"/> + <size key="itemSize" width="354" height="270"/> <edgeInsets key="sectionInset" left="20" right="20" top="20" bottom="20"/> </collectionViewFlowLayout> <color key="primaryBackgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/> @@ -469,7 +565,7 @@ </subviews> </clipView> <constraints> - <constraint firstAttribute="height" constant="444" id="Htb-Ql-chZ"/> + <constraint firstAttribute="height" constant="310" id="Htb-Ql-chZ"/> </constraints> <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="f2z-AL-CFF"> <rect key="frame" x="-100" y="-100" width="233" height="15"/> @@ -481,13 +577,13 @@ </scroller> </scrollView> <scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nXS-11-7iK"> - <rect key="frame" x="0.0" y="0.0" width="242" height="364"/> - <clipView key="contentView" id="OKa-dt-1yY"> - <rect key="frame" x="0.0" y="0.0" width="242" height="364"/> + <rect key="frame" x="0.0" y="0.0" width="242" height="498"/> + <clipView key="contentView" copiesOnScroll="NO" id="OKa-dt-1yY"> + <rect key="frame" x="0.0" y="0.0" width="242" height="498"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <collectionView selectable="YES" id="B8x-e8-7zp"> - <rect key="frame" x="0.0" y="0.0" width="242" height="364"/> + <rect key="frame" x="0.0" y="0.0" width="242" height="498"/> <autoresizingMask key="autoresizingMask" widthSizable="YES"/> <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="20" minimumLineSpacing="20" id="Rag-cM-k1g"> <size key="itemSize" width="256" height="214"/> @@ -532,7 +628,7 @@ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <clipView key="contentView" id="tI4-x3-55j"> <rect key="frame" x="0.0" y="0.0" width="242" height="291"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <autoresizingMask key="autoresizingMask"/> <subviews> <collectionView id="r7v-GI-W1U"> <rect key="frame" x="0.0" y="0.0" width="242" height="291"/> @@ -749,27 +845,14 @@ <rect key="frame" x="0.0" y="0.0" width="500" height="302"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <subviews> - <segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nzi-H5-fyv"> - <rect key="frame" x="10" y="280" width="52" height="23"/> - <segmentedCell key="cell" borderStyle="border" alignment="left" style="smallSquare" trackingMode="selectOne" id="ic1-QN-Oy2"> - <font key="font" metaFont="system"/> - <segments> - <segment/> - <segment selected="YES" tag="1"/> - <segment> - <nil key="label"/> - </segment> - </segments> - </segmentedCell> - </segmentedControl> - <scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AYf-gS-P66"> - <rect key="frame" x="0.0" y="0.0" width="500" height="271"/> + <scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AYf-gS-P66"> + <rect key="frame" x="0.0" y="0.0" width="500" height="302"/> <clipView key="contentView" id="2oa-WL-dxA"> - <rect key="frame" x="0.0" y="0.0" width="500" height="271"/> + <rect key="frame" x="0.0" y="0.0" width="500" height="302"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <collectionView id="QAt-jP-zE7"> - <rect key="frame" x="0.0" y="0.0" width="500" height="158"/> + <rect key="frame" x="0.0" y="0.0" width="500" height="302"/> <autoresizingMask key="autoresizingMask" widthSizable="YES"/> <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" id="oKT-Ic-UdV"> <size key="itemSize" width="50" height="50"/> @@ -779,27 +862,32 @@ </subviews> </clipView> <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Wb8-r8-xfF"> - <rect key="frame" x="1" y="144" width="233" height="15"/> + <rect key="frame" x="-100" y="-100" width="233" height="15"/> <autoresizingMask key="autoresizingMask"/> </scroller> <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="Lae-xQ-39f"> - <rect key="frame" x="234" y="1" width="15" height="143"/> + <rect key="frame" x="484" y="0.0" width="16" height="271"/> <autoresizingMask key="autoresizingMask"/> </scroller> </scrollView> </subviews> <constraints> - <constraint firstItem="nzi-H5-fyv" firstAttribute="top" secondItem="k7f-ic-LrF" secondAttribute="top" id="Hub-0d-koP"/> - <constraint firstItem="AYf-gS-P66" firstAttribute="top" secondItem="nzi-H5-fyv" secondAttribute="bottom" constant="10" id="IpM-PQ-9Lk"/> <constraint firstAttribute="trailing" secondItem="AYf-gS-P66" secondAttribute="trailing" id="KEG-os-Mk9"/> <constraint firstAttribute="bottom" secondItem="AYf-gS-P66" secondAttribute="bottom" id="Wkc-LW-FiO"/> - <constraint firstItem="nzi-H5-fyv" firstAttribute="leading" secondItem="k7f-ic-LrF" secondAttribute="leading" constant="10" id="thF-Jr-QPO"/> <constraint firstItem="AYf-gS-P66" firstAttribute="leading" secondItem="k7f-ic-LrF" secondAttribute="leading" id="tqb-gA-coA"/> + <constraint firstItem="AYf-gS-P66" firstAttribute="top" secondItem="k7f-ic-LrF" secondAttribute="top" id="wMO-EV-Yya"/> </constraints> <point key="canvasLocation" x="247" y="771"/> </customView> </objects> <resources> + <image name="NSIconViewTemplate" width="14" height="10"/> + <image name="NSLeftFacingTriangleTemplate" width="9" height="12"/> + <image name="NSListViewTemplate" width="14" height="10"/> + <image name="NSPrivateChaptersTemplate" width="14" height="13"/> + <image name="NSRightFacingTriangleTemplate" width="9" height="12"/> + <image name="NSTextRulerLineHeightIncrease" width="21" height="14"/> + <image name="NSTouchBarDeleteTemplate" width="15" height="30"/> <image name="backward-3btns" width="29" height="23"/> <image name="backward-3btns-pressed" width="29" height="23"/> <image name="dropzone" width="112" height="112"/> diff --git a/modules/gui/macosx/library/VLCLibraryWindow.h b/modules/gui/macosx/library/VLCLibraryWindow.h index b42394ab9bba..8611d7e23898 100644 --- a/modules/gui/macosx/library/VLCLibraryWindow.h +++ b/modules/gui/macosx/library/VLCLibraryWindow.h @@ -37,6 +37,7 @@ NS_ASSUME_NONNULL_BEGIN @property (readwrite, weak) IBOutlet NSSegmentedControl *segmentedTitleControl; @property (readwrite, weak) IBOutlet NSSplitView *mainSplitView; @property (readwrite, weak) IBOutlet NSStackView *videoLibraryStackView; +@property (readwrite, strong) IBOutlet NSView *playlistView; @property (readwrite, weak) IBOutlet NSCollectionView *videoLibraryCollectionView; @property (readwrite, weak) IBOutlet NSCollectionView *recentVideoLibraryCollectionView; @property (readwrite, weak) IBOutlet NSCollectionView *mediaSourceCollectionView; @@ -71,6 +72,7 @@ NS_ASSUME_NONNULL_BEGIN - (IBAction)repeatAction:(id)sender; - (IBAction)clearPlaylist:(id)sender; - (IBAction)openMedia:(id)sender; +- (IBAction)showAndHidePlaylist:(id)sender; @end diff --git a/modules/gui/macosx/library/VLCLibraryWindow.m b/modules/gui/macosx/library/VLCLibraryWindow.m index eb90a1fca7d4..6747da672b33 100644 --- a/modules/gui/macosx/library/VLCLibraryWindow.m +++ b/modules/gui/macosx/library/VLCLibraryWindow.m @@ -57,8 +57,9 @@ const CGFloat VLCLibraryWindowMinimalHeight = 307.; const CGFloat VLCLibraryWindowPlaylistRowHeight = 72.; const CGFloat VLCLibraryWindowSmallRowHeight = 24.; const CGFloat VLCLibraryWindowLargeRowHeight = 50.; +const CGFloat VLCLibraryWindowDefaultPlaylistWidth = 340.; -@interface VLCLibraryWindow () <VLCDragDropTarget> +@interface VLCLibraryWindow () <VLCDragDropTarget, NSSplitViewDelegate> { VLCPlaylistDataSource *_playlistDataSource; VLCLibraryVideoDataSource *_libraryVideoDataSource; @@ -70,6 +71,7 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.; VLCPlaylistController *_playlistController; NSRect _windowFrameBeforePlayback; + CGFloat _lastPlaylistWidthBeforeCollaps; VLCFSPanelController *_fspanel; } @@ -191,10 +193,6 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.; self.upNextLabel.font = [NSFont VLClibrarySectionHeaderFont]; self.upNextLabel.stringValue = _NS("Playlist"); - NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:_NS("Clear queue") - attributes:@{NSFontAttributeName : [NSFont VLClibraryButtonFont], - NSForegroundColorAttributeName : [NSColor VLClibraryHighlightColor]}]; - self.clearPlaylistButton.attributedTitle = attributedTitle; [self updateColorsBasedOnAppearance]; self.openMediaButton.title = _NS("Open media..."); @@ -204,6 +202,9 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.; _alternativeAudioViewController.libraryModel = mainInstance.libraryController.libraryModel; [_alternativeAudioViewController setupAppearance]; + _mainSplitView.delegate = self; + _lastPlaylistWidthBeforeCollaps = VLCLibraryWindowDefaultPlaylistWidth; + [self segmentedControlAction:nil]; [self repeatStateUpdated:nil]; [self shuffleStateUpdated:nil]; @@ -431,6 +432,57 @@ const CGFloat VLCLibraryWindowLargeRowHeight = 50.; return NO; } +#pragma mark - split view delegation + +- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex +{ + switch (dividerIndex) { + case 0: + return VLCLibraryWindowMinimalWidth; + break; + + case 1: + return VLCLibraryWindowDefaultPlaylistWidth; + break; + + default: + break; + } + + return proposedMinimumPosition; +} + +- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview +{ + return [subview isEqual:_playlistView]; +} + +- (BOOL)splitView:(NSSplitView *)splitView shouldCollapseSubview:(NSView *)subview forDoubleClickOnDividerAtIndex:(NSInteger)dividerIndex +{ + return [subview isEqual:_playlistView]; +} + +- (void)splitViewDidResizeSubviews:(NSNotification *)notification +{ + _lastPlaylistWidthBeforeCollaps = [_playlistView frame].size.width; +} + +- (void)togglePlaylist +{ + [_mainSplitView adjustSubviews]; + CGFloat splitViewWidth = _mainSplitView.frame.size.width; + if ([_mainSplitView isSubviewCollapsed:_playlistView]) { + [_mainSplitView setPosition:splitViewWidth - _lastPlaylistWidthBeforeCollaps ofDividerAtIndex:0]; + } else { + [_mainSplitView setPosition:splitViewWidth ofDividerAtIndex:0]; + } +} + +- (IBAction)showAndHidePlaylist:(id)sender +{ + [self togglePlaylist]; +} + #pragma mark - video output controlling - (void)videoPlaybackWillBeStarted -- GitLab