Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (33)
Showing
with 447 additions and 13 deletions
......@@ -80,6 +80,9 @@
53088E152AD7802C00C21358 /* VLCLibraryCarouselViewItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53088E142AD7802C00C21358 /* VLCLibraryCarouselViewItemView.m */; };
530F32B32C8C757600233C03 /* VLCLibraryAbstractSegmentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 530F32B22C8C757600233C03 /* VLCLibraryAbstractSegmentViewController.m */; };
531062192CE4AEFB0087F863 /* VLCStatusNotifierView.m in Sources */ = {isa = PBXBuildFile; fileRef = 531062182CE4AEFB0087F863 /* VLCStatusNotifierView.m */; };
531062112CE1CB520087F863 /* VLCLibraryHomeViewActionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 531062102CE1CB520087F863 /* VLCLibraryHomeViewActionsViewController.m */; };
531062112CE1CB520087F863 /* VLCLibraryHomeViewActionsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 531062102CE1CB520087F863 /* VLCLibraryHomeViewActionsView.m */; };
531062162CE259290087F863 /* VLCLibraryHomeViewActionButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 531062152CE259290087F863 /* VLCLibraryHomeViewActionButtonCell.m */; };
5310AFB12B4FE72700E75F9A /* NSArray+VLCAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5310AFB02B4FE72700E75F9A /* NSArray+VLCAdditions.m */; };
5310AFB52B53EC4F00E75F9A /* iCarousel.m in Sources */ = {isa = PBXBuildFile; fileRef = 5310AFB32B53EC4E00E75F9A /* iCarousel.m */; };
531343E72A8E7B94007AEDFA /* VLCLibraryWindowNavigationSidebarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 531343E62A8E7B94007AEDFA /* VLCLibraryWindowNavigationSidebarViewController.m */; };
......@@ -302,6 +305,12 @@
530F32B22C8C757600233C03 /* VLCLibraryAbstractSegmentViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryAbstractSegmentViewController.m; sourceTree = "<group>"; };
531062172CE4AEFB0087F863 /* VLCStatusNotifierView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCStatusNotifierView.h; sourceTree = "<group>"; };
531062182CE4AEFB0087F863 /* VLCStatusNotifierView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCStatusNotifierView.m; sourceTree = "<group>"; };
5310620F2CE1CB520087F863 /* VLCLibraryHomeViewActionsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryHomeViewActionsViewController.h; sourceTree = "<group>"; };
531062102CE1CB520087F863 /* VLCLibraryHomeViewActionsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryHomeViewActionsViewController.m; sourceTree = "<group>"; };
5310620F2CE1CB520087F863 /* VLCLibraryHomeViewActionsView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryHomeViewActionsView.h; sourceTree = "<group>"; };
531062102CE1CB520087F863 /* VLCLibraryHomeViewActionsView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryHomeViewActionsView.m; sourceTree = "<group>"; };
531062142CE259290087F863 /* VLCLibraryHomeViewActionButtonCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryHomeViewActionButtonCell.h; sourceTree = "<group>"; };
531062152CE259290087F863 /* VLCLibraryHomeViewActionButtonCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryHomeViewActionButtonCell.m; sourceTree = "<group>"; };
5310AFAF2B4FE72700E75F9A /* NSArray+VLCAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSArray+VLCAdditions.h"; sourceTree = "<group>"; };
5310AFB02B4FE72700E75F9A /* NSArray+VLCAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSArray+VLCAdditions.m"; sourceTree = "<group>"; };
5310AFB32B53EC4E00E75F9A /* iCarousel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iCarousel.m; sourceTree = "<group>"; };
......@@ -410,6 +419,7 @@
538DC4E42A6B69C00082DECD /* VLCLibraryAudioGroupHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCLibraryAudioGroupHeaderView.h; sourceTree = "<group>"; };
53903D3829576ED500D0B308 /* VLCLibraryAudioGroupDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryAudioGroupDataSource.h; sourceTree = "<group>"; };
53903D3929576ED500D0B308 /* VLCLibraryAudioGroupDataSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryAudioGroupDataSource.m; sourceTree = "<group>"; };
5390E0E52CE0AC3C00A4FC4A /* VLCLibraryHomeViewActionsView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = VLCLibraryHomeViewActionsView.xib; sourceTree = "<group>"; };
539BA79D298C726200918C36 /* VLCAspectRatioRetainingVideoWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCAspectRatioRetainingVideoWindow.h; sourceTree = "<group>"; };
539BA79E298C726200918C36 /* VLCAspectRatioRetainingVideoWindow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCAspectRatioRetainingVideoWindow.m; sourceTree = "<group>"; };
539F114929E83A4200F13460 /* VLCLibraryTwoPaneSplitViewDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryTwoPaneSplitViewDelegate.h; sourceTree = "<group>"; };
......@@ -1599,6 +1609,10 @@
5350E4EB2B1B210E00F276CB /* home-library */ = {
isa = PBXGroup;
children = (
531062142CE259290087F863 /* VLCLibraryHomeViewActionButtonCell.h */,
531062152CE259290087F863 /* VLCLibraryHomeViewActionButtonCell.m */,
5310620F2CE1CB520087F863 /* VLCLibraryHomeViewActionsView.h */,
531062102CE1CB520087F863 /* VLCLibraryHomeViewActionsView.m */,
535F1BBE2B4892A200C78D98 /* VLCLibraryHomeViewAudioCarouselContainerView.h */,
535F1BBF2B4892A200C78D98 /* VLCLibraryHomeViewAudioCarouselContainerView.m */,
535F1BC12B4979D300C78D98 /* VLCLibraryHomeViewBaseCarouselContainerView.h */,
......@@ -2072,6 +2086,7 @@
7D0F64052202047900FDB91F /* VLCLibraryCollectionViewItem.xib */,
536283FC2911476A00640C15 /* VLCLibraryCollectionViewMediaItemSupplementaryDetailView.xib */,
53B40FD42AA7618000C814E4 /* VLCLibraryHeroView.xib */,
5390E0E52CE0AC3C00A4FC4A /* VLCLibraryHomeViewActionsView.xib */,
536283FA2911476A00640C15 /* VLCLibrarySongTableCellView.xib */,
7DE2F0482282D7980040DD0A /* VLCLibraryTableCellView.xib */,
534E8E3729A04F95009503F8 /* VLCMainVideoView.xib */,
......@@ -2219,9 +2234,11 @@
1CCC89012078A3D500E5626F /* Preferences.xib in Sources */,
7DC21A7422049A6600F98A02 /* VLCOpenInputMetadata.m in Sources */,
1CCC89022078A3D500E5626F /* ResumeDialog.xib in Sources */,
531062162CE259290087F863 /* VLCLibraryHomeViewActionButtonCell.m in Sources */,
532572032C3D79D80068DEC3 /* VLCLibrarySegmentBookmarkedLocation.m in Sources */,
7DE7232E22A51F8D00D72616 /* VLCPositionFormatter.m in Sources */,
534E8E3A29A06325009503F8 /* VLCMainVideoViewController.m in Sources */,
531062112CE1CB520087F863 /* VLCLibraryHomeViewActionsView.m in Sources */,
536EFBF5295BCB8300F4CB13 /* VLCLibraryUIUnits.m in Sources */,
1CCC89032078A3D500E5626F /* SimplePreferences.xib in Sources */,
537BD6862C59216600446ED0 /* VLCLibraryGroupsViewController.m in Sources */,
......
......@@ -193,6 +193,10 @@ libmacosx_plugin_la_SOURCES = \
gui/macosx/library/groups-library/VLCLibraryGroupsDataSource.m \
gui/macosx/library/groups-library/VLCLibraryGroupsViewController.h \
gui/macosx/library/groups-library/VLCLibraryGroupsViewController.m \
gui/macosx/library/home-library/VLCLibraryHomeViewActionButtonCell.h \
gui/macosx/library/home-library/VLCLibraryHomeViewActionButtonCell.m \
gui/macosx/library/home-library/VLCLibraryHomeViewActionsView.h \
gui/macosx/library/home-library/VLCLibraryHomeViewActionsView.m \
gui/macosx/library/home-library/VLCLibraryHomeViewAudioCarouselContainerView.h \
gui/macosx/library/home-library/VLCLibraryHomeViewAudioCarouselContainerView.m \
gui/macosx/library/home-library/VLCLibraryHomeViewBaseCarouselContainerView.h \
......@@ -490,6 +494,7 @@ libmacosx_plugin_la_XIB_SOURCES = \
gui/macosx/UI/VLCLibraryCollectionViewMediaItemListSupplementaryDetailView.xib \
gui/macosx/UI/VLCLibraryCollectionViewMediaItemSupplementaryDetailView.xib \
gui/macosx/UI/VLCLibraryHeroView.xib \
gui/macosx/UI/VLCLibraryHomeViewActionsView.xib \
gui/macosx/UI/VLCLibrarySongTableCellView.xib \
gui/macosx/UI/VLCMainVideoView.xib \
gui/macosx/UI/VLCMainVideoViewAudioMediaDecorativeView.xib \
......
......@@ -281,7 +281,7 @@
<action selector="intfOpenDisc:" target="-2" id="Y60-I1-fEt"/>
</connections>
</menuItem>
<menuItem title="Open Network..." keyEquivalent="n" id="446">
<menuItem title="Open Stream..." keyEquivalent="n" id="446">
<connections>
<action selector="intfOpenNet:" target="-2" id="76C-uE-5DX"/>
</connections>
......
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23504" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23504"/>
<capability name="Image references" minToolsVersion="12.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner"/>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<stackView distribution="fillEqually" orientation="horizontal" alignment="centerY" spacing="10" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="250" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3qj-hs-qA9" customClass="VLCLibraryHomeViewActionsView">
<rect key="frame" x="0.0" y="0.0" width="801" height="128"/>
<subviews>
<button verticalHuggingPriority="251" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="z8M-pF-aNN">
<rect key="frame" x="0.0" y="0.0" width="152" height="128"/>
<buttonCell key="cell" type="inline" title="Open file" bezelStyle="inline" image="internaldrive.fill" catalog="system" imagePosition="above" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="BaI-vV-jQU" customClass="VLCLibraryHomeViewActionButtonCell">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
</buttonCell>
<constraints>
<constraint firstAttribute="height" constant="128" id="8rS-SD-guH"/>
</constraints>
<connections>
<action selector="openFileAction:" target="3qj-hs-qA9" id="WNK-Gq-vbI"/>
</connections>
</button>
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="cJy-ck-xd6">
<rect key="frame" x="162" y="0.0" width="152" height="128"/>
<buttonCell key="cell" type="inline" title="Open disc" bezelStyle="inline" imagePosition="above" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="92c-b8-kwg" customClass="VLCLibraryHomeViewActionButtonCell">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
<imageReference key="image" image="opticaldisc.fill" catalog="system" symbolScale="default"/>
</buttonCell>
<connections>
<action selector="openDiscAction:" target="3qj-hs-qA9" id="J6M-0U-hKB"/>
</connections>
</button>
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="j8l-xq-Zuw">
<rect key="frame" x="324" y="0.0" width="153" height="128"/>
<buttonCell key="cell" type="inline" title="Open Stream" bezelStyle="inline" image="network" catalog="system" imagePosition="above" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="2Vn-hv-Uao" customClass="VLCLibraryHomeViewActionButtonCell">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
</buttonCell>
<connections>
<action selector="openUrlAction:" target="3qj-hs-qA9" id="hON-OU-Kvy"/>
</connections>
</button>
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="y5B-QJ-eG5">
<rect key="frame" x="487" y="0.0" width="152" height="128"/>
<buttonCell key="cell" type="inline" title="Open capture device" bezelStyle="inline" image="camera.fill" catalog="system" imagePosition="above" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="6uQ-ex-ony" customClass="VLCLibraryHomeViewActionButtonCell">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystemBold"/>
</buttonCell>
<connections>
<action selector="openCaptureDeviceAction:" target="3qj-hs-qA9" id="wNJ-8K-1tJ"/>
</connections>
</button>
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="g9j-oN-Lyd">
<rect key="frame" x="649" y="0.0" width="152" height="128"/>
<buttonCell key="cell" type="inline" title="Browse" bezelStyle="inline" image="folder.fill" catalog="system" imagePosition="above" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="0K4-If-7Qb" customClass="VLCLibraryHomeViewActionButtonCell">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/>
</buttonCell>
<connections>
<action selector="openBrowseAction:" target="3qj-hs-qA9" id="T8n-Bm-2ni"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="cJy-ck-xd6" firstAttribute="height" secondItem="z8M-pF-aNN" secondAttribute="height" id="Aji-3k-gXf"/>
<constraint firstItem="g9j-oN-Lyd" firstAttribute="height" secondItem="z8M-pF-aNN" secondAttribute="height" id="CzX-vh-F4u"/>
<constraint firstItem="y5B-QJ-eG5" firstAttribute="height" secondItem="z8M-pF-aNN" secondAttribute="height" id="HAT-ug-Hw2"/>
<constraint firstItem="j8l-xq-Zuw" firstAttribute="height" secondItem="z8M-pF-aNN" secondAttribute="height" id="LhC-o6-IfS"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="50" id="q8R-0R-ebR"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
<connections>
<outlet property="openBrowseButton" destination="g9j-oN-Lyd" id="hRd-gf-7ar"/>
<outlet property="openCaptureDeviceButton" destination="y5B-QJ-eG5" id="sYh-WY-Hr0"/>
<outlet property="openDiscButton" destination="cJy-ck-xd6" id="5Kg-qb-mAA"/>
<outlet property="openFileButton" destination="z8M-pF-aNN" id="B3d-7J-NQ3"/>
<outlet property="openUrlButton" destination="j8l-xq-Zuw" id="Hw0-VI-0vH"/>
</connections>
<point key="canvasLocation" x="28.5" y="-120"/>
</stackView>
</objects>
<resources>
<image name="camera.fill" catalog="system" width="19" height="15"/>
<image name="folder.fill" catalog="system" width="18" height="14"/>
<image name="internaldrive.fill" catalog="system" width="18" height="13"/>
<image name="network" catalog="system" width="15" height="15"/>
<image name="opticaldisc.fill" catalog="system" width="15" height="15"/>
</resources>
</document>
......@@ -27,6 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface NSColor (VLCAdditions)
@property (class, readonly) NSColor *VLCAccentColor;
@property (class, readonly) NSColor *VLCSubtlerAccentColor;
@property (class, readonly) NSColor *VLClibraryLightTitleColor;
@property (class, readonly) NSColor *VLClibraryDarkTitleColor;
@property (class, readonly) NSColor *VLClibrarySubtitleColor;
......
......@@ -38,6 +38,11 @@
return [NSColor colorWithRed:1. green:.38 blue:.04 alpha:1.];
}
+ (NSColor *)VLCSubtlerAccentColor
{
return [NSColor.VLCAccentColor colorWithAlphaComponent:0.8];
}
+ (NSColor *)VLClibraryLightTitleColor
{
return [NSColor colorWithRed:0.15 green:0.16 blue:0.17 alpha:1.];
......
......@@ -39,6 +39,10 @@ NS_ASSUME_NONNULL_BEGIN
@property (class, readonly) const CGFloat mediumSpacing;
@property (class, readonly) const CGFloat smallSpacing;
@property (class, readonly) const CGFloat cornerRadius;
@property (class, readonly) const CGFloat borderThickness;
@property (class, readonly) const CGFloat scrollBarSmallSideSize;
@property (class, readonly) const CGFloat largeTableViewRowHeight;
......
......@@ -51,6 +51,16 @@
return 5;
}
+ (const CGFloat)cornerRadius
{
return 5.;
}
+ (const CGFloat)borderThickness
{
return 1.;
}
+ (const CGFloat)scrollBarSmallSideSize
{
return 16;
......
......@@ -53,7 +53,7 @@ NSString * const VLCLibraryAudioGroupHeaderViewIdentifier = @"VLCLibraryAudioGro
self.backgroundEffectView.wantsLayer = YES;
self.backgroundEffectView.layer.cornerRadius = VLCLibraryUIUnits.smallSpacing;
self.backgroundEffectView.layer.borderWidth = 1;
self.backgroundEffectView.layer.borderWidth = VLCLibraryUIUnits.borderThickness;
[self updateColoredAppearance:self.effectiveAppearance];
}
......
/*****************************************************************************
* VLCLibraryHomeViewActionButtonCell.h: MacOS X interface module
*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* Authors: Claudio Cambra <developer@claudiocambra.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface VLCLibraryHomeViewActionButtonCell : NSButtonCell
@end
NS_ASSUME_NONNULL_END
/*****************************************************************************
* VLCLibraryHomeViewActionButtonCell.m: MacOS X interface module
*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* Authors: Claudio Cambra <developer@claudiocambra.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import "VLCLibraryHomeViewActionButtonCell.h"
#import "extensions/NSColor+VLCAdditions.h"
#import "extensions/NSFont+VLCAdditions.h"
#import "library/VLCLibraryUIUnits.h"
@interface VLCLibraryHomeViewActionButtonCell ()
@property NSImage *cachedImage;
@property BOOL prevIsHighlighted;
@property NSRect prevFrame;
@end
@implementation VLCLibraryHomeViewActionButtonCell
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
[NSColor.VLCSubtleBorderColor setStroke];
[NSColor.windowBackgroundColor setFill];
const CGFloat cellMinX = NSMinX(cellFrame);
const CGFloat cellMinY = NSMinY(cellFrame);
const CGFloat cellMaxX = NSMaxX(cellFrame);
const CGFloat cellMaxY = NSMaxY(cellFrame);
NSBezierPath * const separatorPath =
[NSBezierPath bezierPathWithRoundedRect:cellFrame
xRadius:VLCLibraryUIUnits.cornerRadius
yRadius:VLCLibraryUIUnits.cornerRadius];
separatorPath.lineWidth = VLCLibraryUIUnits.borderThickness;
[separatorPath stroke];
[separatorPath fill];
const CGSize cellSize = cellFrame.size;
const CGFloat cellWidth = cellSize.width;
const CGFloat cellHeight = cellSize.height;
NSMutableParagraphStyle * const titleParagraphStyle = [[NSMutableParagraphStyle alloc] init];
titleParagraphStyle.alignment = NSTextAlignmentCenter;
NSDictionary<NSAttributedStringKey, id> * const titleAttributes = @{
NSForegroundColorAttributeName: NSColor.controlTextColor,
NSFontAttributeName: NSFont.VLCLibrarySubsectionSubheaderFont,
NSParagraphStyleAttributeName: titleParagraphStyle
};
const NSSize titleSize = [self.title sizeWithAttributes:titleAttributes];
const CGFloat titleHeight = titleSize.height + VLCLibraryUIUnits.smallSpacing;
[self.title drawInRect:CGRectMake(cellMinX + VLCLibraryUIUnits.smallSpacing,
cellMaxY - titleHeight,
cellWidth - VLCLibraryUIUnits.smallSpacing * 2,
titleHeight)
withAttributes:titleAttributes];
const CGSize imageSize = self.image.size;
if (self.cachedImage != self.image ||
self.prevIsHighlighted != self.isHighlighted ||
!NSEqualRects(self.prevFrame, cellFrame)) {
self.cachedImage = [NSImage imageWithSize:imageSize
flipped:NO
drawingHandler:^BOOL(NSRect dstRect) {
if (self.isHighlighted) {
[NSColor.VLCSubtleBorderColor set];
} else {
[NSColor.VLCSubtlerAccentColor set];
}
const NSRect imageRect = {NSZeroPoint, imageSize};
[self.image drawInRect:imageRect];
NSRectFillUsingOperation(imageRect, NSCompositingOperationSourceIn);
return YES;
}];
self.prevIsHighlighted = self.isHighlighted;
self.prevFrame = cellFrame;
}
const CGFloat originalImageAspectRatio = imageSize.width / imageSize.height;
const CGFloat imageAvailableVerticalSpace =
cellHeight - titleHeight - VLCLibraryUIUnits.largeSpacing * 2;
CGFloat imageWidth, imageHeight;
// Try to scale focusing on width first, if this yields a height that is too large, switch
if (cellWidth / originalImageAspectRatio > imageAvailableVerticalSpace) {
imageHeight = imageAvailableVerticalSpace;
imageWidth = imageHeight * originalImageAspectRatio;
} else {
imageWidth = cellWidth;
imageHeight = imageWidth / originalImageAspectRatio;
}
const CGPoint cellOrigin = cellFrame.origin;
const NSRect imageRect = NSMakeRect(cellOrigin.x + (cellWidth - imageWidth) / 2,
cellOrigin.y + (cellHeight - imageHeight) / 2,
imageWidth,
imageHeight);
[self.cachedImage drawInRect:imageRect];
}
@end
/*****************************************************************************
* VLCLibraryHomeViewActionsViewController.h: MacOS X interface module
*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* Authors: Claudio Cambra <developer@claudiocambra.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface VLCLibraryHomeViewActionsView : NSStackView
@property (readwrite, weak) IBOutlet NSButton *openFileButton;
@property (readwrite, weak) IBOutlet NSButton *openDiscButton;
@property (readwrite, weak) IBOutlet NSButton *openUrlButton;
@property (readwrite, weak) IBOutlet NSButton *openCaptureDeviceButton;
@property (readwrite, weak) IBOutlet NSButton *openBrowseButton;
+ (instancetype)fromNibWithOwner:(id)owner;
- (IBAction)openFileAction:(id)sender;
- (IBAction)openDiscAction:(id)sender;
- (IBAction)openUrlAction:(id)sender;
- (IBAction)openCaptureDeviceAction:(id)sender;
- (IBAction)openBrowseAction:(id)sender;
@end
NS_ASSUME_NONNULL_END
/*****************************************************************************
* VLCLibraryHomeViewActionsViewController.m: MacOS X interface module
*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* Authors: Claudio Cambra <developer@claudiocambra.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import "VLCLibraryHomeViewActionsView.h"
#import "extensions/NSString+Helpers.h"
#import "extensions/NSView+VLCAdditions.h"
#import "library/VLCLibraryWindow.h"
#import "main/VLCMain.h"
#import "menus/VLCMainMenu.h"
@implementation VLCLibraryHomeViewActionsView
+ (instancetype)fromNibWithOwner:(id)owner
{
return (VLCLibraryHomeViewActionsView*)[NSView fromNibNamed:@"VLCLibraryHomeViewActionsView"
withClass:VLCLibraryHomeViewActionsView.class
withOwner:owner];
}
- (void)awakeFromNib
{
[super awakeFromNib];
self.openFileButton.title = _NS("Open file");
self.openDiscButton.title = _NS("Open disc");
self.openUrlButton.title = _NS("Open stream");
self.openCaptureDeviceButton.title = _NS("Open capture device");
self.openBrowseButton.title = _NS("Browse");
}
- (IBAction)openFileAction:(id)sender
{
[VLCMain.sharedInstance.mainMenu intfOpenFile:self];
}
- (IBAction)openDiscAction:(id)sender
{
[VLCMain.sharedInstance.mainMenu intfOpenDisc:self];
}
- (IBAction)openUrlAction:(id)sender
{
[VLCMain.sharedInstance.mainMenu intfOpenNet:self];
}
- (IBAction)openCaptureDeviceAction:(id)sender
{
[VLCMain.sharedInstance.mainMenu intfOpenCapture:self];
}
- (IBAction)openBrowseAction:(id)sender
{
[VLCMain.sharedInstance.libraryWindow goToBrowseSection:self];
}
@end
......@@ -25,6 +25,7 @@
NS_ASSUME_NONNULL_BEGIN
@class VLCLibraryHeroView;
@class VLCLibraryHomeViewActionsView;
@class VLCLibraryHomeViewAudioCarouselContainerView;
@class VLCLibraryHomeViewVideoCarouselContainerView;
@protocol VLCMediaLibraryItemProtocol;
......@@ -39,6 +40,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (readwrite, weak, nonatomic) NSStackView *collectionsStackView;
@property (readwrite, weak, nonatomic) NSScrollView *collectionsStackViewScrollView;
@property (readonly) VLCLibraryHomeViewActionsView *actionsView;
@property (readonly) VLCLibraryHeroView *heroView;
@property (readonly) VLCLibraryHomeViewVideoCarouselContainerView *recentsView;
@property (readonly) VLCLibraryHomeViewAudioCarouselContainerView *audioRecentsView;
......
......@@ -30,6 +30,7 @@
#import "library/VLCLibraryModel.h"
#import "library/VLCLibraryUIUnits.h"
#import "library/home-library/VLCLibraryHomeViewActionsView.h"
#import "library/home-library/VLCLibraryHomeViewAudioCarouselContainerView.h"
#import "library/home-library/VLCLibraryHomeViewContainerView.h"
#import "library/home-library/VLCLibraryHomeViewVideoCarouselContainerView.h"
......@@ -89,15 +90,22 @@
- (void)generateCustomContainers
{
_actionsView = [VLCLibraryHomeViewActionsView fromNibWithOwner:self];
_heroView = [VLCLibraryHeroView fromNibWithOwner:self];
_leadingContainerCount += 1;
[self addView:self.heroView toStackView:self.collectionsStackView];
[self.heroView setOptimalRepresentedItem];
_leadingContainerCount += 2;
[self addCustomContainerViews];
[self audioRecentsChanged:nil];
[self recentsChanged:nil];
}
- (void)addCustomContainerViews
{
[self addView:self.actionsView toStackView:self.collectionsStackView];
[self addView:self.heroView toStackView:self.collectionsStackView];
[self.heroView setOptimalRepresentedItem];
}
- (BOOL)recentMediaPresent
{
VLCLibraryModel * const model = VLCMain.sharedInstance.libraryController.libraryModel;
......@@ -180,9 +188,9 @@
- (void)reloadData
{
dispatch_async(dispatch_get_main_queue(), ^{
for (NSView<VLCLibraryHomeViewContainerView> * const containerView in self->_containers) {
[self.heroView setOptimalRepresentedItem];
[self.heroView setOptimalRepresentedItem];
for (NSView<VLCLibraryHomeViewContainerView> * const containerView in self->_containers) {
if ([containerView isKindOfClass:VLCLibraryHomeViewBaseCarouselContainerView.class]) {
VLCLibraryHomeViewBaseCarouselContainerView * const baseContainerView = (VLCLibraryHomeViewBaseCarouselContainerView *)containerView;
[baseContainerView.dataSource reloadData];
......@@ -290,9 +298,7 @@
[_collectionsStackView setHuggingPriority:NSLayoutPriorityDefaultHigh
forOrientation:NSLayoutConstraintOrientationVertical];
[self addView:self.heroView toStackView:_collectionsStackView];
[self.heroView setOptimalRepresentedItem];
[self addCustomContainerViews];
for (NSView<VLCLibraryHomeViewContainerView> * const containerView in _containers) {
[self addContainerView:containerView toStackView:_collectionsStackView];
......
......@@ -360,7 +360,7 @@ typedef NS_ENUM(NSInteger, VLCObjectType) {
[_open_generic setTitle: _NS("Advanced Open File...")];
[_open_file setTitle: _NS("Open File...")];
[_open_disc setTitle: _NS("Open Disc...")];
[_open_net setTitle: _NS("Open Network...")];
[_open_net setTitle: _NS("Open Stream...")];
[_open_capture setTitle: _NS("Open Capture Device...")];
[_open_recent setTitle: _NS("Open Recent")];
[_close_window setTitle: _NS("Close Window")];
......
......@@ -26,6 +26,7 @@
#import "extensions/NSColor+VLCAdditions.h"
#import "extensions/NSView+VLCAdditions.h"
#import "library/VLCLibraryUIUnits.h"
@interface VLCImageView()
{
......@@ -78,8 +79,8 @@
- (void)updateLayerImageCornerCropping
{
if (self.cropsImagesToRoundedCorners) {
self.layer.cornerRadius = 5.;
self.layer.borderWidth = 1.;
self.layer.cornerRadius = VLCLibraryUIUnits.cornerRadius;
self.layer.borderWidth = VLCLibraryUIUnits.borderThickness;
} else {
self.layer.cornerRadius = 0.;
self.layer.borderWidth = 0.;
......