From a2fe663204d7b34f63f57fe8d286a324d8fe87ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Felix=20Paul=20K=C3=BChne?= <felix@feepk.net>
Date: Sun, 14 Apr 2019 22:07:05 +0200
Subject: [PATCH] macosx: remove the main window

---
 .../macosx/VLC.xcodeproj/project.pbxproj      |  92 --
 modules/gui/macosx/Makefile.am                |  26 -
 modules/gui/macosx/UI/MainWindow.xib          | 902 ------------------
 modules/gui/macosx/UI/VLCLibraryWindow.xib    |  42 +-
 .../macosx/extensions/NSScreen+VLCAdditions.m |   2 +-
 modules/gui/macosx/extensions/misc.m          |   1 -
 .../PXSourceListDelegateDataSourceProxy.h     |  21 -
 .../PXSourceListDelegateDataSourceProxy.m     | 470 ---------
 .../Internal/PXSourceListPrivateConstants.h   |  18 -
 .../Internal/PXSourceListRuntimeAdditions.h   |  21 -
 .../Internal/PXSourceListRuntimeAdditions.m   |  67 --
 .../imported/PXSourceList/PXSourceList.h      | 206 ----
 .../imported/PXSourceList/PXSourceList.m      | 578 -----------
 .../PXSourceList/PXSourceListBadgeCell.h      |  23 -
 .../PXSourceList/PXSourceListBadgeCell.m      | 122 ---
 .../PXSourceList/PXSourceListBadgeView.h      |  72 --
 .../PXSourceList/PXSourceListBadgeView.m      |  52 -
 .../PXSourceList/PXSourceListDataSource.h     | 396 --------
 .../PXSourceList/PXSourceListDelegate.h       | 522 ----------
 .../imported/PXSourceList/PXSourceListItem.h  | 228 -----
 .../imported/PXSourceList/PXSourceListItem.m  | 101 --
 .../PXSourceList/PXSourceListTableCellView.h  |  43 -
 .../PXSourceList/PXSourceListTableCellView.m  |  31 -
 modules/gui/macosx/library/VLCLibraryWindow.h |  11 +
 modules/gui/macosx/library/VLCLibraryWindow.m |  77 ++
 modules/gui/macosx/main/VLCMain.h             |   4 +-
 modules/gui/macosx/main/VLCMain.m             |  22 +-
 modules/gui/macosx/menus/VLCMainMenu.m        |  11 +-
 modules/gui/macosx/menus/VLCStatusBarIcon.m   |   2 +-
 .../gui/macosx/playlist/VLCPlayerController.m |   4 +-
 .../addons/VLCAddonsWindowController.m        |   1 -
 .../macosx/windows/mainwindow/VLCMainWindow.h | 109 ---
 .../macosx/windows/mainwindow/VLCMainWindow.m | 685 -------------
 .../mainwindow/VLCMainWindowControlsBar.m     |   4 +-
 .../mainwindow/VLCSourceListBadgeButton.h     |  33 -
 .../mainwindow/VLCSourceListBadgeButton.m     |  75 --
 .../windows/mainwindow/VLCSourceListItem.h    |  33 -
 .../windows/mainwindow/VLCSourceListItem.m    |  37 -
 .../mainwindow/VLCSourceListTableCellView.h   |  35 -
 .../mainwindow/VLCSourceListTableCellView.m   |  27 -
 .../windows/video/VLCVideoOutputProvider.m    |  32 +-
 .../windows/video/VLCVideoWindowCommon.m      |  19 +-
 .../gui/macosx/windows/video/VLCVoutView.m    |   4 +-
 po/POTFILES.in                                |   8 -
 44 files changed, 167 insertions(+), 5102 deletions(-)
 delete mode 100644 modules/gui/macosx/UI/MainWindow.xib
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListDelegateDataSourceProxy.h
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListDelegateDataSourceProxy.m
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListPrivateConstants.h
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListRuntimeAdditions.h
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListRuntimeAdditions.m
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceList.h
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceList.m
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeCell.h
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeCell.m
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeView.h
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeView.m
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceListDataSource.h
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceListDelegate.h
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceListItem.h
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceListItem.m
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceListTableCellView.h
 delete mode 100755 modules/gui/macosx/imported/PXSourceList/PXSourceListTableCellView.m
 delete mode 100644 modules/gui/macosx/windows/mainwindow/VLCMainWindow.h
 delete mode 100644 modules/gui/macosx/windows/mainwindow/VLCMainWindow.m
 delete mode 100644 modules/gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.h
 delete mode 100644 modules/gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.m
 delete mode 100644 modules/gui/macosx/windows/mainwindow/VLCSourceListItem.h
 delete mode 100644 modules/gui/macosx/windows/mainwindow/VLCSourceListItem.m
 delete mode 100644 modules/gui/macosx/windows/mainwindow/VLCSourceListTableCellView.h
 delete mode 100644 modules/gui/macosx/windows/mainwindow/VLCSourceListTableCellView.m

diff --git a/extras/package/macosx/VLC.xcodeproj/project.pbxproj b/extras/package/macosx/VLC.xcodeproj/project.pbxproj
index 4e16347b7381..dc676578e37b 100644
--- a/extras/package/macosx/VLC.xcodeproj/project.pbxproj
+++ b/extras/package/macosx/VLC.xcodeproj/project.pbxproj
@@ -31,7 +31,6 @@
 		1C3113BA1E508C6900D4DD76 /* VLCApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D5678EC1D5BA1DC002698F3 /* VLCApplication.m */; };
 		1C3113BC1E508C6900D4DD76 /* VLCKeyboardBacklightControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF812F01B555C8E0052293C /* VLCKeyboardBacklightControl.m */; };
 		1C3113BD1E508C6900D4DD76 /* macosx.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ED6C27E03E2EB1C0059A3A7 /* macosx.m */; };
-		1C3113C11E508C6900D4DD76 /* VLCMainWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CC448A6313B68A0B009F72E0 /* VLCMainWindow.m */; };
 		1C3113C51E508C6900D4DD76 /* misc.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ED6C28003E2EB1C0059A3A7 /* misc.m */; };
 		1C3113C71E508C6900D4DD76 /* VLCOpenWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ED6C28203E2EB1C0059A3A7 /* VLCOpenWindowController.m */; };
 		1C3113C91E508C6900D4DD76 /* VLCOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E55FB800459B0FD00FB3317 /* VLCOutput.m */; };
@@ -54,7 +53,6 @@
 		1C31140D1E508C8800D4DD76 /* SPMediaKeyTap.m in Sources */ = {isa = PBXBuildFile; fileRef = CCF0777C13659A8000AF19FD /* SPMediaKeyTap.m */; };
 		1CAC3EE820CD1B3B00613DB2 /* VLCVideoOutputProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CAC3EE620CD1B3B00613DB2 /* VLCVideoOutputProvider.m */; };
 		1CCC88EC2078A3D500E5626F /* MainMenu.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B8224091E4D2A9000833BE1 /* MainMenu.xib */; };
-		1CCC88ED2078A3D500E5626F /* MainWindow.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B82240A1E4D2A9000833BE1 /* MainWindow.xib */; };
 		1CCC88EE2078A3D500E5626F /* VLCStatusBarIconMainMenu.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B82241A1E4D2A9000833BE1 /* VLCStatusBarIconMainMenu.xib */; };
 		1CCC88EF2078A3D500E5626F /* VLCFullScreenPanel.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B8224181E4D2A9000833BE1 /* VLCFullScreenPanel.xib */; };
 		1CCC88F02078A3D500E5626F /* About.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B8223FE1E4D2A8F00833BE1 /* About.xib */; };
@@ -96,16 +94,6 @@
 		6B8166291EBFC34300C26F1B /* VLCDefaultValueSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B6A499B1DFD9B23009128AC /* VLCDefaultValueSlider.m */; };
 		6B81662A1EBFC34300C26F1B /* VLCDefaultValueSliderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B6A499D1DFD9B23009128AC /* VLCDefaultValueSliderCell.m */; };
 		6B81662C1EBFC38100C26F1B /* VLCUIWidgets.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CCED71514C0D4A90057F8D1 /* VLCUIWidgets.m */; };
-		6B8A6AFD21279D2600DC29F3 /* PXSourceListBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8A6AEB21279D2500DC29F3 /* PXSourceListBadgeView.m */; };
-		6B8A6AFE21279D2600DC29F3 /* PXSourceListRuntimeAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8A6AF021279D2500DC29F3 /* PXSourceListRuntimeAdditions.m */; };
-		6B8A6AFF21279D2600DC29F3 /* PXSourceListDelegateDataSourceProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8A6AF421279D2500DC29F3 /* PXSourceListDelegateDataSourceProxy.m */; };
-		6B8A6B0021279D2600DC29F3 /* PXSourceListItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8A6AF521279D2500DC29F3 /* PXSourceListItem.m */; };
-		6B8A6B0121279D2600DC29F3 /* PXSourceListTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8A6AF721279D2600DC29F3 /* PXSourceListTableCellView.m */; };
-		6B8A6B0221279D2600DC29F3 /* PXSourceList.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8A6AF921279D2600DC29F3 /* PXSourceList.m */; };
-		6B8A6B0321279D2600DC29F3 /* PXSourceListBadgeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8A6AFC21279D2600DC29F3 /* PXSourceListBadgeCell.m */; };
-		6B8A6B082127A3EA00DC29F3 /* VLCSourceListItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8A6B072127A3EA00DC29F3 /* VLCSourceListItem.m */; };
-		6B8A6B0B2128697E00DC29F3 /* VLCSourceListTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8A6B0A2128697E00DC29F3 /* VLCSourceListTableCellView.m */; };
-		6B8A6B0E21286D3600DC29F3 /* VLCSourceListBadgeButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8A6B0D21286D3600DC29F3 /* VLCSourceListBadgeButton.m */; };
 		6BBB05DA1EEFEA29003A1019 /* VLCHUDOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BBB05D91EEFEA29003A1019 /* VLCHUDOutlineView.m */; };
 		6BBB05E01EEFF165003A1019 /* VLCHUDTableCornerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BBB05DF1EEFF165003A1019 /* VLCHUDTableCornerView.m */; };
 		6BBBF9851F7B257100B404CD /* VLCLogMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BBBF9841F7B257100B404CD /* VLCLogMessage.m */; };
@@ -247,7 +235,6 @@
 		6B8224071E4D2A9000833BE1 /* Help.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Help.xib; sourceTree = "<group>"; };
 		6B8224081E4D2A9000833BE1 /* LogMessageWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LogMessageWindow.xib; sourceTree = "<group>"; };
 		6B8224091E4D2A9000833BE1 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
-		6B82240A1E4D2A9000833BE1 /* MainWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = "<group>"; };
 		6B82240B1E4D2A9000833BE1 /* MediaInfo.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MediaInfo.xib; sourceTree = "<group>"; };
 		6B82240C1E4D2A9000833BE1 /* Open.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Open.xib; sourceTree = "<group>"; };
 		6B82240D1E4D2A9000833BE1 /* PlaylistAccessoryView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PlaylistAccessoryView.xib; sourceTree = "<group>"; };
@@ -407,29 +394,6 @@
 		6B8229FF1E4D2DD100833BE1 /* vlc.scriptSuite */ = {isa = PBXFileReference; lastKnownFileType = text.plist.scriptSuite; path = vlc.scriptSuite; sourceTree = "<group>"; };
 		6B822A001E4D2DD100833BE1 /* vlc.scriptTerminology */ = {isa = PBXFileReference; lastKnownFileType = text.plist.scriptTerminology; path = vlc.scriptTerminology; sourceTree = "<group>"; };
 		6B822A031E4D2DEB00833BE1 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
-		6B8A6AEB21279D2500DC29F3 /* PXSourceListBadgeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PXSourceListBadgeView.m; sourceTree = "<group>"; };
-		6B8A6AEC21279D2500DC29F3 /* PXSourceListDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceListDataSource.h; sourceTree = "<group>"; };
-		6B8A6AED21279D2500DC29F3 /* PXSourceListTableCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceListTableCellView.h; sourceTree = "<group>"; };
-		6B8A6AEE21279D2500DC29F3 /* PXSourceListItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceListItem.h; sourceTree = "<group>"; };
-		6B8A6AF021279D2500DC29F3 /* PXSourceListRuntimeAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PXSourceListRuntimeAdditions.m; sourceTree = "<group>"; };
-		6B8A6AF121279D2500DC29F3 /* PXSourceListDelegateDataSourceProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceListDelegateDataSourceProxy.h; sourceTree = "<group>"; };
-		6B8A6AF221279D2500DC29F3 /* PXSourceListRuntimeAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceListRuntimeAdditions.h; sourceTree = "<group>"; };
-		6B8A6AF321279D2500DC29F3 /* PXSourceListPrivateConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceListPrivateConstants.h; sourceTree = "<group>"; };
-		6B8A6AF421279D2500DC29F3 /* PXSourceListDelegateDataSourceProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PXSourceListDelegateDataSourceProxy.m; sourceTree = "<group>"; };
-		6B8A6AF521279D2500DC29F3 /* PXSourceListItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PXSourceListItem.m; sourceTree = "<group>"; };
-		6B8A6AF621279D2600DC29F3 /* PXSourceList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceList.h; sourceTree = "<group>"; };
-		6B8A6AF721279D2600DC29F3 /* PXSourceListTableCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PXSourceListTableCellView.m; sourceTree = "<group>"; };
-		6B8A6AF821279D2600DC29F3 /* PXSourceListBadgeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceListBadgeView.h; sourceTree = "<group>"; };
-		6B8A6AF921279D2600DC29F3 /* PXSourceList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PXSourceList.m; sourceTree = "<group>"; };
-		6B8A6AFA21279D2600DC29F3 /* PXSourceListBadgeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceListBadgeCell.h; sourceTree = "<group>"; };
-		6B8A6AFB21279D2600DC29F3 /* PXSourceListDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PXSourceListDelegate.h; sourceTree = "<group>"; };
-		6B8A6AFC21279D2600DC29F3 /* PXSourceListBadgeCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PXSourceListBadgeCell.m; sourceTree = "<group>"; };
-		6B8A6B0421279FA200DC29F3 /* VLCSourceListItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCSourceListItem.h; sourceTree = "<group>"; };
-		6B8A6B072127A3EA00DC29F3 /* VLCSourceListItem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCSourceListItem.m; sourceTree = "<group>"; };
-		6B8A6B092128697E00DC29F3 /* VLCSourceListTableCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCSourceListTableCellView.h; sourceTree = "<group>"; };
-		6B8A6B0A2128697E00DC29F3 /* VLCSourceListTableCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCSourceListTableCellView.m; sourceTree = "<group>"; };
-		6B8A6B0C21286D3600DC29F3 /* VLCSourceListBadgeButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCSourceListBadgeButton.h; sourceTree = "<group>"; };
-		6B8A6B0D21286D3600DC29F3 /* VLCSourceListBadgeButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCSourceListBadgeButton.m; sourceTree = "<group>"; };
 		6BA1A0632038D93D005EA18A /* ci_filters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ci_filters.m; path = ../../../modules/video_filter/ci_filters.m; sourceTree = "<group>"; };
 		6BBB05D81EEFEA29003A1019 /* VLCHUDOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCHUDOutlineView.h; sourceTree = "<group>"; };
 		6BBB05D91EEFEA29003A1019 /* VLCHUDOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCHUDOutlineView.m; sourceTree = "<group>"; };
@@ -558,8 +522,6 @@
 		CC1941240B9C1F8400635F6B /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; };
 		CC3DC89B0A7CDB9600B53F32 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
 		CC426FD01020D44F00A32659 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = ../../../contrib/Sparkle.framework; sourceTree = SOURCE_ROOT; };
-		CC448A6213B68A0B009F72E0 /* VLCMainWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCMainWindow.h; sourceTree = "<group>"; };
-		CC448A6313B68A0B009F72E0 /* VLCMainWindow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCMainWindow.m; sourceTree = "<group>"; };
 		CC461F6C160078340022423C /* VLCTextfieldPanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = VLCTextfieldPanelController.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
 		CC461F6D160078340022423C /* VLCTextfieldPanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCTextfieldPanelController.m; sourceTree = "<group>"; };
 		CC4A33210F8CB017000FC4A7 /* VLCCoreDialogProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCCoreDialogProvider.m; sourceTree = "<group>"; };
@@ -830,16 +792,8 @@
 			children = (
 				1C1ED51D2205AC6B00811EC0 /* VLCControlsBarCommon.h */,
 				E0382C01160BA09E0031D7FF /* VLCControlsBarCommon.m */,
-				CC448A6213B68A0B009F72E0 /* VLCMainWindow.h */,
-				CC448A6313B68A0B009F72E0 /* VLCMainWindow.m */,
 				7D5678EE1D5BA397002698F3 /* VLCMainWindowControlsBar.h */,
 				7D5678EF1D5BA397002698F3 /* VLCMainWindowControlsBar.m */,
-				6B8A6B0C21286D3600DC29F3 /* VLCSourceListBadgeButton.h */,
-				6B8A6B0D21286D3600DC29F3 /* VLCSourceListBadgeButton.m */,
-				6B8A6B0421279FA200DC29F3 /* VLCSourceListItem.h */,
-				6B8A6B072127A3EA00DC29F3 /* VLCSourceListItem.m */,
-				6B8A6B092128697E00DC29F3 /* VLCSourceListTableCellView.h */,
-				6B8A6B0A2128697E00DC29F3 /* VLCSourceListTableCellView.m */,
 			);
 			path = mainwindow;
 			sourceTree = "<group>";
@@ -938,7 +892,6 @@
 			isa = PBXGroup;
 			children = (
 				1C1ED5212205ADDA00811EC0 /* AppleRemote */,
-				CC0CD0E413DE0EB500B0D90D /* PXSourceList */,
 				1C1ED5232205AF6A00811EC0 /* SPMediaKeyTap */,
 			);
 			path = imported;
@@ -1233,18 +1186,6 @@
 			path = "sidebar-icons";
 			sourceTree = "<group>";
 		};
-		6B8A6AEF21279D2500DC29F3 /* Internal */ = {
-			isa = PBXGroup;
-			children = (
-				6B8A6AF021279D2500DC29F3 /* PXSourceListRuntimeAdditions.m */,
-				6B8A6AF121279D2500DC29F3 /* PXSourceListDelegateDataSourceProxy.h */,
-				6B8A6AF221279D2500DC29F3 /* PXSourceListRuntimeAdditions.h */,
-				6B8A6AF321279D2500DC29F3 /* PXSourceListPrivateConstants.h */,
-				6B8A6AF421279D2500DC29F3 /* PXSourceListDelegateDataSourceProxy.m */,
-			);
-			path = Internal;
-			sourceTree = "<group>";
-		};
 		6BA1A0622038D8F1005EA18A /* filters */ = {
 			isa = PBXGroup;
 			children = (
@@ -1362,26 +1303,6 @@
 			name = "UI Graphics";
 			sourceTree = "<group>";
 		};
-		CC0CD0E413DE0EB500B0D90D /* PXSourceList */ = {
-			isa = PBXGroup;
-			children = (
-				6B8A6AEF21279D2500DC29F3 /* Internal */,
-				6B8A6AF621279D2600DC29F3 /* PXSourceList.h */,
-				6B8A6AF921279D2600DC29F3 /* PXSourceList.m */,
-				6B8A6AFA21279D2600DC29F3 /* PXSourceListBadgeCell.h */,
-				6B8A6AFC21279D2600DC29F3 /* PXSourceListBadgeCell.m */,
-				6B8A6AF821279D2600DC29F3 /* PXSourceListBadgeView.h */,
-				6B8A6AEB21279D2500DC29F3 /* PXSourceListBadgeView.m */,
-				6B8A6AEC21279D2500DC29F3 /* PXSourceListDataSource.h */,
-				6B8A6AFB21279D2600DC29F3 /* PXSourceListDelegate.h */,
-				6B8A6AEE21279D2500DC29F3 /* PXSourceListItem.h */,
-				6B8A6AF521279D2500DC29F3 /* PXSourceListItem.m */,
-				6B8A6AED21279D2500DC29F3 /* PXSourceListTableCellView.h */,
-				6B8A6AF721279D2600DC29F3 /* PXSourceListTableCellView.m */,
-			);
-			path = PXSourceList;
-			sourceTree = "<group>";
-		};
 		CC6C01A40DDF3E7800C7D754 /* Minimal macOS interface */ = {
 			isa = PBXGroup;
 			children = (
@@ -1444,7 +1365,6 @@
 			isa = PBXGroup;
 			children = (
 				6B8224091E4D2A9000833BE1 /* MainMenu.xib */,
-				6B82240A1E4D2A9000833BE1 /* MainWindow.xib */,
 				7D713D332201BB130042BEB7 /* VLCLibraryWindow.xib */,
 				7D0F64002201F66D00FDB91F /* VLCPlaylistTableCellView.xib */,
 				7D445D8F220339D400263D34 /* VLCPlaylistMenu.xib */,
@@ -1558,7 +1478,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				1CCC88EC2078A3D500E5626F /* MainMenu.xib in Sources */,
-				1CCC88ED2078A3D500E5626F /* MainWindow.xib in Sources */,
 				7D713D362201DC640042BEB7 /* VLCLibraryWindow.xib in Sources */,
 				1CCC88EE2078A3D500E5626F /* VLCStatusBarIconMainMenu.xib in Sources */,
 				1CCC88EF2078A3D500E5626F /* VLCFullScreenPanel.xib in Sources */,
@@ -1585,7 +1504,6 @@
 				1CCC89022078A3D500E5626F /* ResumeDialog.xib in Sources */,
 				1CCC89032078A3D500E5626F /* SimplePreferences.xib in Sources */,
 				1CCC89042078A3D500E5626F /* StreamOutput.xib in Sources */,
-				6B8A6B082127A3EA00DC29F3 /* VLCSourceListItem.m in Sources */,
 				1CCC89052078A3D500E5626F /* TextfieldPanel.xib in Sources */,
 				1CCC89062078A3D500E5626F /* TimeSelectionPanel.xib in Sources */,
 				6B81662C1EBFC38100C26F1B /* VLCUIWidgets.m in Sources */,
@@ -1598,7 +1516,6 @@
 				1CFE8D591EA0D42A00E94451 /* VLCErrorWindowController.m in Sources */,
 				6B4D50961E7A7D16004479B5 /* NSSound+VLCAdditions.m in Sources */,
 				6BF093F91EE0182B0049D8B0 /* VLCTimeField.m in Sources */,
-				6B8A6B0E21286D3600DC29F3 /* VLCSourceListBadgeButton.m in Sources */,
 				1C31140D1E508C8800D4DD76 /* SPMediaKeyTap.m in Sources */,
 				1C3113EF1E508C7600D4DD76 /* VLCRendererDiscovery.m in Sources */,
 				1C3113F11E508C7600D4DD76 /* VLCRendererItem.m in Sources */,
@@ -1613,7 +1530,6 @@
 				1C3113941E508C6900D4DD76 /* VLCAddonsWindowController.m in Sources */,
 				7D2E0EDE20CD206F0033A221 /* VLCVideoWindowCommon.m in Sources */,
 				1C3113961E508C6900D4DD76 /* applescript.m in Sources */,
-				6B8A6B0121279D2600DC29F3 /* PXSourceListTableCellView.m in Sources */,
 				1C3113981E508C6900D4DD76 /* VLCAudioEffectsWindowController.m in Sources */,
 				6BBBF9851F7B257100B404CD /* VLCLogMessage.m in Sources */,
 				7D445D8E2203375100263D34 /* VLCPlaylistMenuController.m in Sources */,
@@ -1622,7 +1538,6 @@
 				6BF5C5041EFE66EF008A9C12 /* VLCHUDTableView.m in Sources */,
 				6BBB05E01EEFF165003A1019 /* VLCHUDTableCornerView.m in Sources */,
 				1C31139D1E508C6900D4DD76 /* VLCControlsBarCommon.m in Sources */,
-				6B8A6B0021279D2600DC29F3 /* PXSourceListItem.m in Sources */,
 				7DD2F5C52081B73B007EE187 /* VLCRemoteControlService.m in Sources */,
 				1C31139F1E508C6900D4DD76 /* VLCMainWindowControlsBar.m in Sources */,
 				1C3113A11E508C6900D4DD76 /* VLCConvertAndSaveWindowController.m in Sources */,
@@ -1644,7 +1559,6 @@
 				1C3113BA1E508C6900D4DD76 /* VLCApplication.m in Sources */,
 				1C3113BC1E508C6900D4DD76 /* VLCKeyboardBacklightControl.m in Sources */,
 				1C3113BD1E508C6900D4DD76 /* macosx.m in Sources */,
-				1C3113C11E508C6900D4DD76 /* VLCMainWindow.m in Sources */,
 				6B0292E61F43256300A50082 /* VLCBottomBarView.m in Sources */,
 				1C3113C51E508C6900D4DD76 /* misc.m in Sources */,
 				1C3113C71E508C6900D4DD76 /* VLCOpenWindowController.m in Sources */,
@@ -1653,24 +1567,18 @@
 				1C3113C91E508C6900D4DD76 /* VLCOutput.m in Sources */,
 				1C1C62011F8260A90052DD4F /* VLCWrappableTextField.m in Sources */,
 				6BBB05DA1EEFEA29003A1019 /* VLCHUDOutlineView.m in Sources */,
-				6B8A6B0B2128697E00DC29F3 /* VLCSourceListTableCellView.m in Sources */,
 				7D445D842202524D00263D34 /* VLCPlaylistItem.m in Sources */,
 				1C3113CF1E508C6900D4DD76 /* prefs_widgets.m in Sources */,
 				7D0F63FF2201F63400FDB91F /* VLCPlaylistTableCellView.m in Sources */,
 				1C3113D11E508C6900D4DD76 /* prefs.m in Sources */,
-				6B8A6AFF21279D2600DC29F3 /* PXSourceListDelegateDataSourceProxy.m in Sources */,
 				1C3113D31E508C6900D4DD76 /* VLCResumeDialogController.m in Sources */,
 				1C3113D51E508C6900D4DD76 /* VLCTextfieldPanelController.m in Sources */,
 				1C3113D71E508C6900D4DD76 /* VLCPopupPanelController.m in Sources */,
 				7D445D8B22032B9200263D34 /* VLCPlaylistTableView.m in Sources */,
-				6B8A6AFE21279D2600DC29F3 /* PXSourceListRuntimeAdditions.m in Sources */,
-				6B8A6B0321279D2600DC29F3 /* PXSourceListBadgeCell.m in Sources */,
 				1C3113D91E508C6900D4DD76 /* VLCSimplePrefsController.m in Sources */,
-				6B8A6B0221279D2600DC29F3 /* PXSourceList.m in Sources */,
 				6B2EFC601F2819F700F3C0EA /* VLCVolumeSlider.m in Sources */,
 				7D2E0EDB20CD204D0033A221 /* VLCWindow.m in Sources */,
 				6B4D50A71E7AB52C004479B5 /* NSScreen+VLCAdditions.m in Sources */,
-				6B8A6AFD21279D2600DC29F3 /* PXSourceListBadgeView.m in Sources */,
 				1C3113DD1E508C6900D4DD76 /* VLCTrackSynchronizationWindowController.m in Sources */,
 				6B6FFF701EF9EC350001CEB1 /* CompatibilityFixes.m in Sources */,
 				1C3113DF1E508C6900D4DD76 /* VLCVideoEffectsWindowController.m in Sources */,
diff --git a/modules/gui/macosx/Makefile.am b/modules/gui/macosx/Makefile.am
index a326b6ab3a17..61bce30001fe 100644
--- a/modules/gui/macosx/Makefile.am
+++ b/modules/gui/macosx/Makefile.am
@@ -40,23 +40,6 @@ libmacosx_plugin_la_SOURCES = \
 	gui/macosx/extensions/misc.m \
 	gui/macosx/imported/AppleRemote/AppleRemote.h \
 	gui/macosx/imported/AppleRemote/AppleRemote.m \
-	gui/macosx/imported/PXSourceList/Internal/PXSourceListDelegateDataSourceProxy.h \
-	gui/macosx/imported/PXSourceList/Internal/PXSourceListDelegateDataSourceProxy.m \
-	gui/macosx/imported/PXSourceList/Internal/PXSourceListPrivateConstants.h \
-	gui/macosx/imported/PXSourceList/Internal/PXSourceListRuntimeAdditions.h \
-	gui/macosx/imported/PXSourceList/Internal/PXSourceListRuntimeAdditions.m \
-	gui/macosx/imported/PXSourceList/PXSourceList.h \
-	gui/macosx/imported/PXSourceList/PXSourceList.m \
-	gui/macosx/imported/PXSourceList/PXSourceListBadgeCell.h \
-	gui/macosx/imported/PXSourceList/PXSourceListBadgeCell.m \
-	gui/macosx/imported/PXSourceList/PXSourceListBadgeView.h \
-	gui/macosx/imported/PXSourceList/PXSourceListBadgeView.m \
-	gui/macosx/imported/PXSourceList/PXSourceListDataSource.h \
-	gui/macosx/imported/PXSourceList/PXSourceListDelegate.h \
-	gui/macosx/imported/PXSourceList/PXSourceListItem.h \
-	gui/macosx/imported/PXSourceList/PXSourceListItem.m \
-	gui/macosx/imported/PXSourceList/PXSourceListTableCellView.h \
-	gui/macosx/imported/PXSourceList/PXSourceListTableCellView.m \
 	gui/macosx/imported/SPMediaKeyTap/SPMediaKeyTap.h \
 	gui/macosx/imported/SPMediaKeyTap/SPMediaKeyTap.m \
 	gui/macosx/library/VLCLibraryCollectionViewItem.h \
@@ -202,16 +185,8 @@ libmacosx_plugin_la_SOURCES = \
 	gui/macosx/windows/logging/VLCLogWindowController.m \
 	gui/macosx/windows/mainwindow/VLCControlsBarCommon.h \
 	gui/macosx/windows/mainwindow/VLCControlsBarCommon.m \
-	gui/macosx/windows/mainwindow/VLCMainWindow.h \
-	gui/macosx/windows/mainwindow/VLCMainWindow.m \
 	gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.h \
 	gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m \
-	gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.h \
-	gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.m \
-	gui/macosx/windows/mainwindow/VLCSourceListItem.h \
-	gui/macosx/windows/mainwindow/VLCSourceListItem.m \
-	gui/macosx/windows/mainwindow/VLCSourceListTableCellView.h \
-	gui/macosx/windows/mainwindow/VLCSourceListTableCellView.m \
 	gui/macosx/windows/video/VLCDetachedVideoWindow.h \
 	gui/macosx/windows/video/VLCDetachedVideoWindow.m \
 	gui/macosx/windows/video/VLCFSPanelController.h \
@@ -240,7 +215,6 @@ libmacosx_plugin_la_XIB_SOURCES = \
 	gui/macosx/UI/Help.xib \
 	gui/macosx/UI/LogMessageWindow.xib \
 	gui/macosx/UI/MainMenu.xib \
-	gui/macosx/UI/MainWindow.xib \
 	gui/macosx/UI/VLCLibraryWindow.xib \
 	gui/macosx/UI/VLCPlaylistMenu.xib \
 	gui/macosx/UI/VLCPlaylistTableCellView.xib \
diff --git a/modules/gui/macosx/UI/MainWindow.xib b/modules/gui/macosx/UI/MainWindow.xib
deleted file mode 100644
index 5267f1bfec77..000000000000
--- a/modules/gui/macosx/UI/MainWindow.xib
+++ /dev/null
@@ -1,902 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
-    <dependencies>
-        <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="NSWindowController">
-            <connections>
-                <outlet property="window" destination="21" id="W4k-Fn-FoX"/>
-            </connections>
-        </customObject>
-        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
-        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <window title="VLC media player" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="21" userLabel="Main Window" customClass="VLCMainWindow">
-            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
-            <windowPositionMask key="initialPositionMask" leftStrut="YES" topStrut="YES"/>
-            <rect key="contentRect" x="53" y="419" width="716" height="333"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1177"/>
-            <view key="contentView" id="2">
-                <rect key="frame" x="0.0" y="0.0" width="716" height="333"/>
-                <autoresizingMask key="autoresizingMask"/>
-                <subviews>
-                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="3Bj-Gx-5iu" userLabel="Middle Content">
-                        <rect key="frame" x="0.0" y="36" width="716" height="297"/>
-                        <subviews>
-                            <customView hidden="YES" focusRingType="none" translatesAutoresizingMaskIntoConstraints="NO" id="4665" customClass="VLCVoutView">
-                                <rect key="frame" x="0.0" y="0.0" width="716" height="297"/>
-                            </customView>
-                            <splitView autosaveName="mainWindowSplitView" dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4680">
-                                <rect key="frame" x="0.0" y="0.0" width="716" height="297"/>
-                                <subviews>
-                                    <customView fixedFrame="YES" id="4681">
-                                        <rect key="frame" x="0.0" y="0.0" width="238" height="297"/>
-                                        <autoresizingMask key="autoresizingMask"/>
-                                        <subviews>
-                                            <scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="26" horizontalPageScroll="10" verticalLineScroll="26" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zwV-eF-2Ae">
-                                                <rect key="frame" x="0.0" y="0.0" width="238" height="297"/>
-                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                                <clipView key="contentView" ambiguous="YES" drawsBackground="NO" id="585-Kc-GFx">
-                                                    <rect key="frame" x="1" y="1" width="236" height="295"/>
-                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                                    <subviews>
-                                                        <outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="sourceList" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" rowHeight="24" rowSizeStyle="systemDefault" viewBased="YES" indentationPerLevel="16" outlineTableColumn="gWC-tA-rDs" id="nj2-9Y-xxN" customClass="PXSourceList">
-                                                            <rect key="frame" x="0.0" y="0.0" width="236" height="295"/>
-                                                            <autoresizingMask key="autoresizingMask"/>
-                                                            <size key="intercellSpacing" width="3" height="2"/>
-                                                            <color key="backgroundColor" name="_sourceListBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                                            <color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
-                                                            <tableColumns>
-                                                                <tableColumn width="233" minWidth="16" maxWidth="1000" id="gWC-tA-rDs">
-                                                                    <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
-                                                                        <font key="font" metaFont="smallSystem"/>
-                                                                        <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
-                                                                        <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
-                                                                    </tableHeaderCell>
-                                                                    <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="M8U-ps-CHN">
-                                                                        <font key="font" metaFont="system"/>
-                                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                                                        <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                                                    </textFieldCell>
-                                                                    <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
-                                                                    <prototypeCellViews>
-                                                                        <tableCellView identifier="HeaderCell" id="Hvw-LE-Za2" customClass="PXSourceListTableCellView">
-                                                                            <rect key="frame" x="1" y="1" width="233" height="17"/>
-                                                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                                                            <subviews>
-                                                                                <textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WaJ-bS-EIG">
-                                                                                    <rect key="frame" x="0.0" y="1" width="233" height="14"/>
-                                                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
-                                                                                    <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="HEADER CELL" id="LCI-SS-XSd">
-                                                                                        <font key="font" metaFont="smallSystemBold"/>
-                                                                                        <color key="textColor" name="headerColor" catalog="System" colorSpace="catalog"/>
-                                                                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                                                                    </textFieldCell>
-                                                                                </textField>
-                                                                            </subviews>
-                                                                            <connections>
-                                                                                <outlet property="textField" destination="WaJ-bS-EIG" id="8lv-jw-399"/>
-                                                                            </connections>
-                                                                        </tableCellView>
-                                                                        <tableCellView identifier="DataCell" id="xB8-ec-7Yv" customClass="VLCSourceListTableCellView">
-                                                                            <rect key="frame" x="1" y="20" width="233" height="17"/>
-                                                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                                                            <subviews>
-                                                                                <imageView translatesAutoresizingMaskIntoConstraints="NO" id="xTO-W7-AeC">
-                                                                                    <rect key="frame" x="3" y="1" width="14" height="15"/>
-                                                                                    <constraints>
-                                                                                        <constraint firstAttribute="width" secondItem="xTO-W7-AeC" secondAttribute="height" multiplier="14:15" id="9T2-ZZ-2s5"/>
-                                                                                    </constraints>
-                                                                                    <imageCell key="cell" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" image="NSActionTemplate" id="sFV-eO-qxM"/>
-                                                                                </imageView>
-                                                                                <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="0ju-Z4-RED">
-                                                                                    <rect key="frame" x="22" y="0.0" width="190" height="17"/>
-                                                                                    <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="oiO-3f-qfh">
-                                                                                        <font key="font" metaFont="system"/>
-                                                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                                                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                                                                    </textFieldCell>
-                                                                                </textField>
-                                                                                <button hidden="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZtM-n7-Nyl" customClass="VLCSourceListBadgeButton">
-                                                                                    <rect key="frame" x="212" y="-1" width="20" height="17"/>
-                                                                                    <buttonCell key="cell" type="inline" title="0" bezelStyle="inline" alignment="center" refusesFirstResponder="YES" state="on" borderStyle="border" inset="2" id="ZsW-rM-biz">
-                                                                                        <behavior key="behavior" lightByContents="YES"/>
-                                                                                        <font key="font" metaFont="smallSystemBold"/>
-                                                                                    </buttonCell>
-                                                                                    <userDefinedRuntimeAttributes>
-                                                                                        <userDefinedRuntimeAttribute type="boolean" keyPath="hideWhenZero" value="YES"/>
-                                                                                    </userDefinedRuntimeAttributes>
-                                                                                </button>
-                                                                            </subviews>
-                                                                            <constraints>
-                                                                                <constraint firstItem="xTO-W7-AeC" firstAttribute="centerY" secondItem="xB8-ec-7Yv" secondAttribute="centerY" id="Cby-pa-mb0"/>
-                                                                                <constraint firstItem="xTO-W7-AeC" firstAttribute="top" secondItem="xB8-ec-7Yv" secondAttribute="top" constant="1" id="Mdd-rm-8bF"/>
-                                                                                <constraint firstAttribute="trailing" secondItem="ZtM-n7-Nyl" secondAttribute="trailing" constant="1" id="RBP-b5-dRm"/>
-                                                                                <constraint firstItem="xTO-W7-AeC" firstAttribute="leading" secondItem="xB8-ec-7Yv" secondAttribute="leading" constant="3" id="TLD-5C-SXg"/>
-                                                                                <constraint firstItem="ZtM-n7-Nyl" firstAttribute="centerY" secondItem="xB8-ec-7Yv" secondAttribute="centerY" id="dd7-wK-AY9"/>
-                                                                                <constraint firstAttribute="bottom" secondItem="xTO-W7-AeC" secondAttribute="bottom" constant="1" id="hUY-JB-o3u"/>
-                                                                                <constraint firstItem="0ju-Z4-RED" firstAttribute="centerY" secondItem="xTO-W7-AeC" secondAttribute="centerY" id="oDe-uz-van"/>
-                                                                                <constraint firstItem="ZtM-n7-Nyl" firstAttribute="leading" secondItem="0ju-Z4-RED" secondAttribute="trailing" constant="2" id="rGB-F0-G1W"/>
-                                                                                <constraint firstItem="0ju-Z4-RED" firstAttribute="leading" secondItem="xTO-W7-AeC" secondAttribute="trailing" constant="7" id="tNX-nJ-GgZ"/>
-                                                                            </constraints>
-                                                                            <connections>
-                                                                                <outlet property="badgeView" destination="ZtM-n7-Nyl" id="bsQ-mM-b7K"/>
-                                                                                <outlet property="imageView" destination="xTO-W7-AeC" id="XKu-Yf-XVN"/>
-                                                                                <outlet property="textField" destination="0ju-Z4-RED" id="e8e-hp-hAG"/>
-                                                                            </connections>
-                                                                        </tableCellView>
-                                                                    </prototypeCellViews>
-                                                                </tableColumn>
-                                                            </tableColumns>
-                                                        </outlineView>
-                                                    </subviews>
-                                                    <nil key="backgroundColor"/>
-                                                </clipView>
-                                                <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="qmS-Ew-AbS">
-                                                    <rect key="frame" x="1" y="119" width="238" height="15"/>
-                                                    <autoresizingMask key="autoresizingMask"/>
-                                                </scroller>
-                                                <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="k9j-Tm-mSl">
-                                                    <rect key="frame" x="224" y="17" width="15" height="102"/>
-                                                    <autoresizingMask key="autoresizingMask"/>
-                                                </scroller>
-                                            </scrollView>
-                                        </subviews>
-                                    </customView>
-                                    <customView id="4682">
-                                        <rect key="frame" x="239" y="0.0" width="477" height="297"/>
-                                        <autoresizingMask key="autoresizingMask"/>
-                                        <subviews>
-                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="gff-CR-TiL" userLabel="Header View">
-                                                <rect key="frame" x="0.0" y="274" width="477" height="23"/>
-                                                <subviews>
-                                                    <imageView translatesAutoresizingMaskIntoConstraints="NO" id="4692">
-                                                        <rect key="frame" x="0.0" y="-4" width="477" height="27"/>
-                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="top" imageScaling="axesIndependently" image="topbar_background" id="4693"/>
-                                                    </imageView>
-                                                    <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5610">
-                                                        <rect key="frame" x="6" y="5" width="33" height="14"/>
-                                                        <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="5611">
-                                                            <font key="font" metaFont="smallSystem"/>
-                                                            <color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
-                                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                                        </textFieldCell>
-                                                    </textField>
-                                                    <searchField wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5614">
-                                                        <rect key="frame" x="319" y="2" width="150" height="19"/>
-                                                        <constraints>
-                                                            <constraint firstAttribute="width" constant="150" id="AM9-aF-RtQ"/>
-                                                        </constraints>
-                                                        <searchFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" usesSingleLineMode="YES" bezelStyle="round" id="5615">
-                                                            <font key="font" metaFont="smallSystem"/>
-                                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                                        </searchFieldCell>
-                                                    </searchField>
-                                                </subviews>
-                                                <constraints>
-                                                    <constraint firstAttribute="height" constant="23" id="4D5-Wx-lTu"/>
-                                                    <constraint firstItem="5610" firstAttribute="centerY" secondItem="gff-CR-TiL" secondAttribute="centerY" id="6Do-lj-4Id"/>
-                                                    <constraint firstItem="5610" firstAttribute="leading" secondItem="gff-CR-TiL" secondAttribute="leading" constant="8" id="S9e-Wf-aoV"/>
-                                                    <constraint firstAttribute="trailing" secondItem="4692" secondAttribute="trailing" id="UQn-vu-gKi"/>
-                                                    <constraint firstAttribute="trailing" secondItem="5614" secondAttribute="trailing" constant="8" id="Uhi-LR-5w5"/>
-                                                    <constraint firstItem="4692" firstAttribute="leading" secondItem="gff-CR-TiL" secondAttribute="leading" id="mEC-jY-rBT"/>
-                                                    <constraint firstItem="4692" firstAttribute="top" secondItem="gff-CR-TiL" secondAttribute="top" id="oo7-9w-9NY"/>
-                                                    <constraint firstItem="5614" firstAttribute="centerY" secondItem="gff-CR-TiL" secondAttribute="centerY" id="rOp-VL-0qH"/>
-                                                    <constraint firstAttribute="bottom" secondItem="4692" secondAttribute="bottom" constant="-4" id="yjP-gD-5lR"/>
-                                                </constraints>
-                                            </customView>
-                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="U2A-0F-udY" userLabel="Inner content view">
-                                                <rect key="frame" x="0.0" y="0.0" width="477" height="274"/>
-                                                <subviews>
-                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="4722" userLabel="Dropzone">
-                                                        <rect key="frame" x="0.0" y="0.0" width="477" height="274"/>
-                                                        <subviews>
-                                                            <imageView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4731" customClass="VLCDropDisabledImageView">
-                                                                <rect key="frame" x="0.0" y="0.0" width="477" height="274"/>
-                                                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="dropzone-background" id="4732"/>
-                                                            </imageView>
-                                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="5605" customClass="VLCDragDropView">
-                                                                <rect key="frame" x="0.0" y="0.0" width="477" height="274"/>
-                                                                <subviews>
-                                                                    <box autoresizesSubviews="NO" borderType="none" title="Box" titlePosition="noTitle" transparent="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4739">
-                                                                        <rect key="frame" x="89" y="21" width="300" height="230"/>
-                                                                        <view key="contentView" id="pxq-Tn-LtA">
-                                                                            <rect key="frame" x="0.0" y="0.0" width="300" height="230"/>
-                                                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                                                            <subviews>
-                                                                                <imageView translatesAutoresizingMaskIntoConstraints="NO" id="4725" customClass="VLCDropDisabledImageView">
-                                                                                    <rect key="frame" x="96" y="109" width="108" height="108"/>
-                                                                                    <constraints>
-                                                                                        <constraint firstAttribute="height" constant="108" id="X3R-xk-KyA"/>
-                                                                                        <constraint firstAttribute="width" constant="108" id="zkM-JD-1vy"/>
-                                                                                    </constraints>
-                                                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" imageScaling="proportionallyDown" image="dropzone" id="4726"/>
-                                                                                </imageView>
-                                                                                <textField verticalHuggingPriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="4727">
-                                                                                    <rect key="frame" x="78" y="69" width="143" height="22"/>
-                                                                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Drop Media here" id="4728">
-                                                                                        <font key="font" metaFont="system" size="18"/>
-                                                                                        <color key="textColor" name="headerColor" catalog="System" colorSpace="catalog"/>
-                                                                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                                                                    </textFieldCell>
-                                                                                </textField>
-                                                                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4729">
-                                                                                    <rect key="frame" x="100" y="15" width="99" height="23"/>
-                                                                                    <buttonCell key="cell" type="roundTextured" title="Open media..." bezelStyle="texturedRounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="4730">
-                                                                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                                                                        <font key="font" metaFont="system"/>
-                                                                                    </buttonCell>
-                                                                                    <connections>
-                                                                                        <action selector="dropzoneButtonAction:" target="21" id="4737"/>
-                                                                                    </connections>
-                                                                                </button>
-                                                                            </subviews>
-                                                                            <constraints>
-                                                                                <constraint firstItem="4727" firstAttribute="centerX" secondItem="pxq-Tn-LtA" secondAttribute="centerX" id="6wv-tL-UA8"/>
-                                                                                <constraint firstItem="4729" firstAttribute="top" secondItem="4727" secondAttribute="bottom" constant="31" id="OQO-a8-vyM"/>
-                                                                                <constraint firstItem="4727" firstAttribute="top" secondItem="4725" secondAttribute="bottom" constant="18" id="asl-58-YTG"/>
-                                                                                <constraint firstItem="4725" firstAttribute="top" secondItem="pxq-Tn-LtA" secondAttribute="top" constant="13" id="fbL-o1-erB"/>
-                                                                                <constraint firstItem="4729" firstAttribute="centerX" secondItem="pxq-Tn-LtA" secondAttribute="centerX" id="jbI-J1-5bo"/>
-                                                                                <constraint firstAttribute="bottom" secondItem="4729" secondAttribute="bottom" constant="16" id="ush-Fv-vq7"/>
-                                                                                <constraint firstItem="4725" firstAttribute="centerX" secondItem="pxq-Tn-LtA" secondAttribute="centerX" id="zMM-Hx-gyn"/>
-                                                                            </constraints>
-                                                                        </view>
-                                                                        <constraints>
-                                                                            <constraint firstAttribute="width" constant="294" id="6bV-ld-5E6"/>
-                                                                            <constraint firstAttribute="height" constant="224" id="xIC-FI-Wya"/>
-                                                                        </constraints>
-                                                                    </box>
-                                                                </subviews>
-                                                                <constraints>
-                                                                    <constraint firstItem="4739" firstAttribute="centerX" secondItem="5605" secondAttribute="centerX" id="DRn-ZU-uOV"/>
-                                                                    <constraint firstItem="4739" firstAttribute="centerY" secondItem="5605" secondAttribute="centerY" id="bLg-B5-qh6"/>
-                                                                </constraints>
-                                                            </customView>
-                                                        </subviews>
-                                                        <constraints>
-                                                            <constraint firstAttribute="trailing" secondItem="5605" secondAttribute="trailing" id="4lT-6R-Vts"/>
-                                                            <constraint firstItem="4731" firstAttribute="top" secondItem="4722" secondAttribute="top" id="COu-Rz-Uv9"/>
-                                                            <constraint firstItem="5605" firstAttribute="top" secondItem="4722" secondAttribute="top" id="EhV-L8-4be"/>
-                                                            <constraint firstItem="4731" firstAttribute="leading" secondItem="4722" secondAttribute="leading" id="IWJ-rb-eYv"/>
-                                                            <constraint firstAttribute="bottom" secondItem="4731" secondAttribute="bottom" id="UVM-80-u4f"/>
-                                                            <constraint firstAttribute="trailing" secondItem="4731" secondAttribute="trailing" id="Zz7-Yo-mNE"/>
-                                                            <constraint firstItem="5605" firstAttribute="leading" secondItem="4722" secondAttribute="leading" id="d47-SK-C7A"/>
-                                                            <constraint firstAttribute="bottom" secondItem="5605" secondAttribute="bottom" id="fdA-1r-rKk"/>
-                                                        </constraints>
-                                                    </customView>
-                                                </subviews>
-                                                <constraints>
-                                                    <constraint firstItem="4722" firstAttribute="leading" secondItem="U2A-0F-udY" secondAttribute="leading" id="FCe-Dh-MEG"/>
-                                                    <constraint firstAttribute="trailing" secondItem="4722" secondAttribute="trailing" id="G8U-K8-Aao"/>
-                                                    <constraint firstAttribute="bottom" secondItem="4722" secondAttribute="bottom" id="dSW-Uh-nP9"/>
-                                                    <constraint firstItem="4722" firstAttribute="top" secondItem="U2A-0F-udY" secondAttribute="top" id="tIs-Fh-Jsd"/>
-                                                </constraints>
-                                            </customView>
-                                            <customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5260" userLabel="Podcast">
-                                                <rect key="frame" x="0.0" y="0.0" width="477" height="23"/>
-                                                <subviews>
-                                                    <imageView translatesAutoresizingMaskIntoConstraints="NO" id="5261">
-                                                        <rect key="frame" x="0.0" y="-4" width="477" height="27"/>
-                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="topbar_background" id="5262"/>
-                                                    </imageView>
-                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5263">
-                                                        <rect key="frame" x="5" y="3" width="67" height="17"/>
-                                                        <buttonCell key="cell" type="roundRect" title="Subscribe" bezelStyle="roundedRect" alignment="center" controlSize="small" borderStyle="border" inset="2" id="5264">
-                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                                            <font key="font" metaFont="smallSystem"/>
-                                                        </buttonCell>
-                                                    </button>
-                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5302">
-                                                        <rect key="frame" x="392" y="3" width="81" height="17"/>
-                                                        <buttonCell key="cell" type="roundRect" title="Unsubscribe" bezelStyle="roundedRect" alignment="center" controlSize="small" borderStyle="border" inset="2" id="5303">
-                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                                            <font key="font" metaFont="smallSystem"/>
-                                                        </buttonCell>
-                                                    </button>
-                                                </subviews>
-                                                <constraints>
-                                                    <constraint firstAttribute="trailing" secondItem="5261" secondAttribute="trailing" id="1nM-pX-AJn"/>
-                                                    <constraint firstAttribute="bottom" secondItem="5261" secondAttribute="bottom" constant="-4" id="2BV-hb-uw2"/>
-                                                    <constraint firstItem="5261" firstAttribute="top" secondItem="5260" secondAttribute="top" id="A6X-Wg-BQE"/>
-                                                    <constraint firstItem="5302" firstAttribute="centerY" secondItem="5260" secondAttribute="centerY" id="FDB-Ao-9mv"/>
-                                                    <constraint firstAttribute="trailing" secondItem="5302" secondAttribute="trailing" constant="4" id="KJC-Ja-hJ4"/>
-                                                    <constraint firstItem="5261" firstAttribute="leading" secondItem="5260" secondAttribute="leading" id="T1s-FQ-h2g"/>
-                                                    <constraint firstItem="5263" firstAttribute="leading" secondItem="5260" secondAttribute="leading" constant="5" id="WZN-5t-aG1"/>
-                                                    <constraint firstAttribute="height" constant="23" id="f1Z-p5-sev"/>
-                                                    <constraint firstItem="5263" firstAttribute="centerY" secondItem="5260" secondAttribute="centerY" id="tHx-Kh-uf3"/>
-                                                </constraints>
-                                            </customView>
-                                        </subviews>
-                                        <constraints>
-                                            <constraint firstItem="5260" firstAttribute="top" secondItem="U2A-0F-udY" secondAttribute="bottom" priority="1" id="AIy-oz-19u"/>
-                                            <constraint firstAttribute="trailing" secondItem="U2A-0F-udY" secondAttribute="trailing" id="BB8-la-xdJ"/>
-                                            <constraint firstItem="gff-CR-TiL" firstAttribute="top" secondItem="4682" secondAttribute="top" id="MHI-aR-Ycf"/>
-                                            <constraint firstAttribute="trailing" secondItem="5260" secondAttribute="trailing" id="XeB-D8-G5P"/>
-                                            <constraint firstItem="U2A-0F-udY" firstAttribute="top" secondItem="gff-CR-TiL" secondAttribute="bottom" id="ad4-k9-Lhq"/>
-                                            <constraint firstItem="U2A-0F-udY" firstAttribute="leading" secondItem="4682" secondAttribute="leading" id="e7f-Ia-ZvZ"/>
-                                            <constraint firstItem="5260" firstAttribute="leading" secondItem="4682" secondAttribute="leading" id="hMd-13-gV5"/>
-                                            <constraint firstAttribute="bottom" secondItem="5260" secondAttribute="bottom" id="hyT-jU-bih"/>
-                                            <constraint firstItem="gff-CR-TiL" firstAttribute="leading" secondItem="4682" secondAttribute="leading" id="vsZ-Ek-eBa"/>
-                                            <constraint firstAttribute="bottom" secondItem="U2A-0F-udY" secondAttribute="bottom" priority="750" id="wxj-fU-8zZ"/>
-                                            <constraint firstAttribute="trailing" secondItem="gff-CR-TiL" secondAttribute="trailing" id="z4y-R6-tbz"/>
-                                        </constraints>
-                                    </customView>
-                                </subviews>
-                                <holdingPriorities>
-                                    <real value="250"/>
-                                    <real value="250"/>
-                                </holdingPriorities>
-                                <connections>
-                                    <outlet property="delegate" destination="21" id="4842"/>
-                                </connections>
-                            </splitView>
-                        </subviews>
-                        <constraints>
-                            <constraint firstItem="4680" firstAttribute="top" secondItem="3Bj-Gx-5iu" secondAttribute="top" id="5BD-QD-xZI"/>
-                            <constraint firstAttribute="bottom" secondItem="4680" secondAttribute="bottom" id="DLo-m4-Paa"/>
-                            <constraint firstItem="4665" firstAttribute="leading" secondItem="3Bj-Gx-5iu" secondAttribute="leading" id="P14-cO-Y3q"/>
-                            <constraint firstAttribute="bottom" secondItem="4665" secondAttribute="bottom" id="Tzn-Qi-iVK"/>
-                            <constraint firstItem="4680" firstAttribute="leading" secondItem="3Bj-Gx-5iu" secondAttribute="leading" id="hyB-Bw-1m8"/>
-                            <constraint firstAttribute="trailing" secondItem="4665" secondAttribute="trailing" id="lec-La-MnM"/>
-                            <constraint firstItem="4665" firstAttribute="top" secondItem="3Bj-Gx-5iu" secondAttribute="top" id="nz6-sf-xgK"/>
-                            <constraint firstAttribute="trailing" secondItem="4680" secondAttribute="trailing" id="tFU-RQ-RnY"/>
-                        </constraints>
-                    </customView>
-                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="4756" customClass="VLCBottomBarView">
-                        <rect key="frame" x="0.0" y="0.0" width="716" height="36"/>
-                        <subviews>
-                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="5608" customClass="VLCDragDropView">
-                                <rect key="frame" x="0.0" y="0.0" width="716" height="36"/>
-                                <subviews>
-                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="jlp-Z2-Qdl" userLabel="Playback Buttons">
-                                        <rect key="frame" x="8" y="7" width="141" height="23"/>
-                                        <subviews>
-                                            <button translatesAutoresizingMaskIntoConstraints="NO" id="qfh-30-nky" userLabel="Previous Button">
-                                                <rect key="frame" x="0.0" y="0.0" width="29" height="23"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="width" constant="29" id="bP7-Ec-OLG"/>
-                                                    <constraint firstAttribute="height" constant="23" id="bsS-LC-mxp"/>
-                                                </constraints>
-                                                <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="previous-6btns" imagePosition="only" alignment="center" alternateImage="previous-6btns-pressed" continuous="YES" enabled="NO" id="KXm-ys-zEA">
-                                                    <behavior key="behavior" lightByContents="YES"/>
-                                                    <font key="font" metaFont="label"/>
-                                                </buttonCell>
-                                                <connections>
-                                                    <action selector="prev:" target="5339" id="u4U-W5-1Is"/>
-                                                </connections>
-                                            </button>
-                                            <button translatesAutoresizingMaskIntoConstraints="NO" id="3651">
-                                                <rect key="frame" x="29" y="0.0" width="28" height="23"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="height" constant="23" id="Z0f-cm-vnG"/>
-                                                </constraints>
-                                                <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="backward-6btns" imagePosition="only" alignment="center" alternateImage="backward-6btns-pressed" continuous="YES" enabled="NO" id="4278">
-                                                    <behavior key="behavior" lightByContents="YES"/>
-                                                    <font key="font" metaFont="label"/>
-                                                </buttonCell>
-                                                <connections>
-                                                    <action selector="bwd:" target="5339" id="5341"/>
-                                                </connections>
-                                            </button>
-                                            <button translatesAutoresizingMaskIntoConstraints="NO" id="3571">
-                                                <rect key="frame" x="57" y="0.0" width="27" height="23"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="height" constant="23" id="Xgs-ps-uT9"/>
-                                                </constraints>
-                                                <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="play" imagePosition="only" alignment="center" alternateImage="play-pressed" id="4348">
-                                                    <behavior key="behavior" lightByContents="YES"/>
-                                                    <font key="font" metaFont="titleBar" size="12"/>
-                                                </buttonCell>
-                                                <connections>
-                                                    <action selector="play:" target="5339" id="5343"/>
-                                                </connections>
-                                            </button>
-                                            <button translatesAutoresizingMaskIntoConstraints="NO" id="3648">
-                                                <rect key="frame" x="84" y="0.0" width="28" height="23"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="height" constant="23" id="4yC-kJ-7V9"/>
-                                                </constraints>
-                                                <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="forward-6btns" imagePosition="only" alignment="center" alternateImage="forward-6btns-pressed" continuous="YES" enabled="NO" id="4275">
-                                                    <behavior key="behavior" lightByContents="YES"/>
-                                                    <font key="font" metaFont="label"/>
-                                                </buttonCell>
-                                                <connections>
-                                                    <action selector="fwd:" target="5339" id="5345"/>
-                                                </connections>
-                                            </button>
-                                            <button translatesAutoresizingMaskIntoConstraints="NO" id="HBS-xq-EkN" userLabel="Next Button">
-                                                <rect key="frame" x="112" y="0.0" width="29" height="23"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="height" constant="23" id="Icc-CC-PIU"/>
-                                                    <constraint firstAttribute="width" constant="29" id="uPv-u5-I21"/>
-                                                </constraints>
-                                                <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="next-6btns" imagePosition="only" alignment="center" alternateImage="next-6btns-pressed" continuous="YES" enabled="NO" id="tLR-jN-43M">
-                                                    <behavior key="behavior" lightByContents="YES"/>
-                                                    <font key="font" metaFont="label"/>
-                                                </buttonCell>
-                                                <connections>
-                                                    <action selector="next:" target="5339" id="pTZ-vt-eta"/>
-                                                </connections>
-                                            </button>
-                                        </subviews>
-                                        <constraints>
-                                            <constraint firstAttribute="bottom" secondItem="3648" secondAttribute="bottom" id="5pF-b1-jk1"/>
-                                            <constraint firstAttribute="bottom" secondItem="qfh-30-nky" secondAttribute="bottom" id="77t-B8-HS7"/>
-                                            <constraint firstAttribute="height" constant="23" id="7WQ-sL-o5r"/>
-                                            <constraint firstItem="qfh-30-nky" firstAttribute="left" secondItem="jlp-Z2-Qdl" secondAttribute="left" id="CFe-7h-rbP"/>
-                                            <constraint firstAttribute="bottom" secondItem="3651" secondAttribute="bottom" id="Ch4-MH-qNm"/>
-                                            <constraint firstAttribute="bottom" secondItem="HBS-xq-EkN" secondAttribute="bottom" id="KPu-7N-4el"/>
-                                            <constraint firstItem="qfh-30-nky" firstAttribute="right" secondItem="3651" secondAttribute="left" id="iH0-kR-WOU"/>
-                                            <constraint firstItem="3648" firstAttribute="right" secondItem="HBS-xq-EkN" secondAttribute="left" id="jwm-qd-Ded"/>
-                                            <constraint firstItem="3571" firstAttribute="left" secondItem="3651" secondAttribute="right" id="pes-MD-nr6"/>
-                                            <constraint firstAttribute="right" secondItem="HBS-xq-EkN" secondAttribute="right" id="skO-xe-5v0"/>
-                                            <constraint firstAttribute="bottom" secondItem="3571" secondAttribute="bottom" id="vqb-wZ-Gyb"/>
-                                            <constraint firstItem="3648" firstAttribute="left" secondItem="3571" secondAttribute="right" id="ysd-SC-AeK"/>
-                                        </constraints>
-                                    </customView>
-                                    <button translatesAutoresizingMaskIntoConstraints="NO" id="3647">
-                                        <rect key="frame" x="153" y="7" width="29" height="23"/>
-                                        <constraints>
-                                            <constraint firstAttribute="height" constant="23" id="m6O-Hj-xpC"/>
-                                        </constraints>
-                                        <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="stop" imagePosition="only" alignment="center" alternateImage="stop-pressed" enabled="NO" id="4274">
-                                            <behavior key="behavior" lightByContents="YES"/>
-                                            <font key="font" metaFont="label"/>
-                                        </buttonCell>
-                                        <connections>
-                                            <action selector="stop:" target="5339" id="5347"/>
-                                        </connections>
-                                    </button>
-                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="mrr-Bw-co0" userLabel="Left Control Buttons">
-                                        <rect key="frame" x="186" y="7" width="85" height="23"/>
-                                        <subviews>
-                                            <button translatesAutoresizingMaskIntoConstraints="NO" id="4671">
-                                                <rect key="frame" x="0.0" y="0.0" width="28" height="23"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="height" constant="23" id="LB9-H3-xcE"/>
-                                                </constraints>
-                                                <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="playlist-btn" imagePosition="only" alignment="center" alternateImage="playlist-btn-pressed" inset="2" id="4672">
-                                                    <behavior key="behavior" lightByContents="YES"/>
-                                                    <font key="font" metaFont="system"/>
-                                                </buttonCell>
-                                                <connections>
-                                                    <action selector="togglePlaylist:" target="5339" id="5604"/>
-                                                </connections>
-                                            </button>
-                                            <button translatesAutoresizingMaskIntoConstraints="NO" id="2789">
-                                                <rect key="frame" x="28" y="0.0" width="28" height="23"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="width" constant="28" id="3Ww-8A-Fh7"/>
-                                                    <constraint firstAttribute="height" constant="23" id="JJL-a1-CWG"/>
-                                                </constraints>
-                                                <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="repeat" imagePosition="only" alignment="center" alternateImage="repeat-pressed" inset="2" id="4316">
-                                                    <behavior key="behavior" lightByContents="YES"/>
-                                                    <font key="font" metaFont="system"/>
-                                                </buttonCell>
-                                                <connections>
-                                                    <action selector="repeat:" target="5339" id="5350"/>
-                                                </connections>
-                                            </button>
-                                            <button translatesAutoresizingMaskIntoConstraints="NO" id="2208">
-                                                <rect key="frame" x="56" y="0.0" width="29" height="23"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="width" constant="29" id="6Z4-L0-Wzo"/>
-                                                    <constraint firstAttribute="height" constant="23" id="7YJ-zp-9if"/>
-                                                </constraints>
-                                                <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="shuffle" imagePosition="only" alignment="center" alternateImage="shuffle-pressed" inset="2" id="4313">
-                                                    <behavior key="behavior" lightByContents="YES"/>
-                                                    <font key="font" metaFont="system"/>
-                                                </buttonCell>
-                                                <connections>
-                                                    <action selector="shuffle:" target="5339" id="5352"/>
-                                                </connections>
-                                            </button>
-                                        </subviews>
-                                        <constraints>
-                                            <constraint firstAttribute="bottom" secondItem="2208" secondAttribute="bottom" id="4KR-mU-PVL"/>
-                                            <constraint firstAttribute="height" constant="23" id="CUu-W1-cLg"/>
-                                            <constraint firstAttribute="bottom" secondItem="2789" secondAttribute="bottom" id="FZE-tZ-wEC"/>
-                                            <constraint firstItem="4671" firstAttribute="left" secondItem="mrr-Bw-co0" secondAttribute="left" id="NBv-9L-VKy"/>
-                                            <constraint firstAttribute="right" secondItem="2208" secondAttribute="right" id="OaR-t3-uqG"/>
-                                            <constraint firstItem="2208" firstAttribute="left" secondItem="2789" secondAttribute="right" id="QiU-2v-0ul"/>
-                                            <constraint firstAttribute="bottom" secondItem="4671" secondAttribute="bottom" id="Uyg-9f-Ke7"/>
-                                            <constraint firstItem="2789" firstAttribute="left" secondItem="4671" secondAttribute="right" id="pEa-Hl-83C"/>
-                                        </constraints>
-                                    </customView>
-                                    <slider hidden="YES" horizontalHuggingPriority="200" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4422" customClass="VLCSlider">
-                                        <rect key="frame" x="279" y="10" width="223" height="16"/>
-                                        <constraints>
-                                            <constraint firstAttribute="height" constant="14" id="JuE-o0-ajo"/>
-                                        </constraints>
-                                        <sliderCell key="cell" controlSize="small" continuous="YES" state="on" alignment="left" maxValue="10000" doubleValue="3204.0777439024391" tickMarkPosition="above" sliderType="linear" id="4425" customClass="VLCSliderCell">
-                                            <font key="font" size="12" name="Helvetica"/>
-                                        </sliderCell>
-                                        <connections>
-                                            <action selector="timeSliderAction:" target="5339" id="5370"/>
-                                        </connections>
-                                    </slider>
-                                    <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4423" customClass="VLCTimeField">
-                                        <rect key="frame" x="508" y="12" width="56" height="13"/>
-                                        <constraints>
-                                            <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="52" id="oTA-8E-R2c"/>
-                                        </constraints>
-                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" alignment="center" title="00:00" id="4424">
-                                            <font key="font" metaFont="label"/>
-                                            <color key="textColor" white="0.25" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
-                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                        </textFieldCell>
-                                    </textField>
-                                    <button translatesAutoresizingMaskIntoConstraints="NO" id="3653">
-                                        <rect key="frame" x="570" y="13" width="5" height="11"/>
-                                        <constraints>
-                                            <constraint firstAttribute="height" constant="11" id="fR7-Fz-iWX"/>
-                                        </constraints>
-                                        <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="volume-low" imagePosition="only" alignment="center" id="4280">
-                                            <behavior key="behavior" lightByContents="YES"/>
-                                            <font key="font" metaFont="label"/>
-                                        </buttonCell>
-                                        <connections>
-                                            <action selector="volumeAction:" target="5339" id="5361"/>
-                                        </connections>
-                                    </button>
-                                    <slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3649" customClass="VLCVolumeSlider">
-                                        <rect key="frame" x="578" y="11" width="48" height="13"/>
-                                        <constraints>
-                                            <constraint firstAttribute="width" constant="48" id="XRa-UG-wuM"/>
-                                        </constraints>
-                                        <sliderCell key="cell" controlSize="mini" continuous="YES" alignment="left" maxValue="512" doubleValue="251.95348837209303" tickMarkPosition="above" sliderType="linear" id="4276" customClass="VLCVolumeSliderCell"/>
-                                        <connections>
-                                            <action selector="volumeAction:" target="5339" id="5358"/>
-                                        </connections>
-                                    </slider>
-                                    <button translatesAutoresizingMaskIntoConstraints="NO" id="3652">
-                                        <rect key="frame" x="629" y="13" width="13" height="11"/>
-                                        <constraints>
-                                            <constraint firstAttribute="height" constant="11" id="2hO-Uc-UqJ"/>
-                                        </constraints>
-                                        <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="volume-high" imagePosition="only" alignment="center" id="4279">
-                                            <behavior key="behavior" lightByContents="YES"/>
-                                            <font key="font" metaFont="label"/>
-                                        </buttonCell>
-                                        <connections>
-                                            <action selector="volumeAction:" target="5339" id="5363"/>
-                                        </connections>
-                                    </button>
-                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="dff-fl-Mde" userLabel="Right control Buttons">
-                                        <rect key="frame" x="650" y="7" width="58" height="23"/>
-                                        <subviews>
-                                            <button translatesAutoresizingMaskIntoConstraints="NO" id="3654">
-                                                <rect key="frame" x="0.0" y="0.0" width="29" height="23"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="width" constant="29" id="cE9-ym-9VP"/>
-                                                    <constraint firstAttribute="height" constant="23" id="eNr-1j-DKO"/>
-                                                </constraints>
-                                                <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="effects-double-buttons" imagePosition="only" alignment="center" alternateImage="effects-double-buttons-pressed" id="4281">
-                                                    <behavior key="behavior" lightByContents="YES"/>
-                                                    <font key="font" metaFont="label"/>
-                                                </buttonCell>
-                                                <connections>
-                                                    <action selector="effects:" target="5339" id="5354"/>
-                                                </connections>
-                                            </button>
-                                            <button translatesAutoresizingMaskIntoConstraints="NO" id="4419">
-                                                <rect key="frame" x="29" y="0.0" width="29" height="23"/>
-                                                <constraints>
-                                                    <constraint firstAttribute="height" constant="23" id="FTh-fT-exD"/>
-                                                    <constraint firstAttribute="width" constant="29" id="b6s-NA-bQd"/>
-                                                </constraints>
-                                                <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="fullscreen-double-buttons" imagePosition="only" alignment="center" alternateImage="fullscreen-double-buttons-pressed" id="4420">
-                                                    <behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
-                                                    <font key="font" metaFont="label"/>
-                                                </buttonCell>
-                                                <connections>
-                                                    <action selector="fullscreen:" target="5339" id="5356"/>
-                                                </connections>
-                                            </button>
-                                        </subviews>
-                                        <constraints>
-                                            <constraint firstAttribute="bottom" secondItem="4419" secondAttribute="bottom" id="2MK-CC-KjY"/>
-                                            <constraint firstAttribute="height" constant="23" id="4qJ-ck-rG0"/>
-                                            <constraint firstItem="4419" firstAttribute="left" secondItem="3654" secondAttribute="right" id="9Kw-Je-A1t"/>
-                                            <constraint firstAttribute="bottom" secondItem="3654" secondAttribute="bottom" id="XlS-K9-Hjv"/>
-                                            <constraint firstItem="3654" firstAttribute="left" secondItem="dff-fl-Mde" secondAttribute="left" id="icO-e8-nXO"/>
-                                            <constraint firstAttribute="right" secondItem="4419" secondAttribute="right" id="teb-w0-7R0"/>
-                                        </constraints>
-                                    </customView>
-                                </subviews>
-                                <constraints>
-                                    <constraint firstItem="mrr-Bw-co0" firstAttribute="centerY" secondItem="5608" secondAttribute="centerY" id="5tM-K0-mjZ"/>
-                                    <constraint firstItem="3652" firstAttribute="leading" secondItem="3649" secondAttribute="trailing" constant="3" id="Apb-gM-P9J"/>
-                                    <constraint firstItem="4423" firstAttribute="centerY" secondItem="5608" secondAttribute="centerY" id="HUU-wF-duH"/>
-                                    <constraint firstItem="jlp-Z2-Qdl" firstAttribute="centerY" secondItem="5608" secondAttribute="centerY" id="Hnv-b4-wWi"/>
-                                    <constraint firstItem="dff-fl-Mde" firstAttribute="leading" secondItem="3652" secondAttribute="trailing" constant="8" symbolic="YES" id="TVP-Cr-bfO"/>
-                                    <constraint firstItem="3647" firstAttribute="centerY" secondItem="5608" secondAttribute="centerY" id="WdH-6H-Xhc"/>
-                                    <constraint firstItem="3653" firstAttribute="centerY" secondItem="5608" secondAttribute="centerY" id="WjR-sa-lQq"/>
-                                    <constraint firstItem="4423" firstAttribute="leading" secondItem="4422" secondAttribute="trailing" constant="8" id="YpP-Vj-f9b"/>
-                                    <constraint firstItem="4422" firstAttribute="centerY" secondItem="5608" secondAttribute="centerY" id="Zit-b0-8jR"/>
-                                    <constraint firstItem="3652" firstAttribute="centerY" secondItem="5608" secondAttribute="centerY" id="cci-dm-60V"/>
-                                    <constraint firstItem="dff-fl-Mde" firstAttribute="centerY" secondItem="5608" secondAttribute="centerY" id="gqZ-nc-67e"/>
-                                    <constraint firstItem="3649" firstAttribute="centerY" secondItem="5608" secondAttribute="centerY" id="ll4-Gr-Hs6"/>
-                                    <constraint firstItem="jlp-Z2-Qdl" firstAttribute="leading" secondItem="5608" secondAttribute="leading" constant="8" id="odn-Ek-4d1"/>
-                                    <constraint firstItem="4422" firstAttribute="leading" secondItem="mrr-Bw-co0" secondAttribute="trailing" constant="8" id="tg9-ZJ-h8u"/>
-                                    <constraint firstItem="3653" firstAttribute="leading" secondItem="4423" secondAttribute="trailing" constant="8" symbolic="YES" id="tn5-dP-NYa"/>
-                                    <constraint firstItem="3647" firstAttribute="leading" secondItem="jlp-Z2-Qdl" secondAttribute="trailing" constant="4" id="ucM-uq-yJA"/>
-                                    <constraint firstItem="mrr-Bw-co0" firstAttribute="leading" secondItem="3647" secondAttribute="trailing" constant="4" id="vZh-zx-o9s"/>
-                                    <constraint firstItem="3649" firstAttribute="leading" secondItem="3653" secondAttribute="trailing" constant="3" id="wz6-Z8-Pow"/>
-                                    <constraint firstAttribute="trailing" secondItem="dff-fl-Mde" secondAttribute="trailing" constant="8" id="yih-A2-DNj"/>
-                                </constraints>
-                            </customView>
-                        </subviews>
-                        <constraints>
-                            <constraint firstAttribute="height" constant="36" id="G7w-MA-T4s"/>
-                            <constraint firstAttribute="trailing" secondItem="5608" secondAttribute="trailing" id="Xer-Gt-dCZ"/>
-                            <constraint firstItem="5608" firstAttribute="leading" secondItem="4756" secondAttribute="leading" id="cEL-J9-boA"/>
-                            <constraint firstAttribute="bottom" secondItem="5608" secondAttribute="bottom" id="hG2-Df-WOU"/>
-                            <constraint firstItem="5608" firstAttribute="top" secondItem="4756" secondAttribute="top" id="xBg-2P-eC8"/>
-                        </constraints>
-                    </customView>
-                </subviews>
-                <constraints>
-                    <constraint firstItem="3Bj-Gx-5iu" firstAttribute="top" secondItem="2" secondAttribute="top" id="1tZ-Wy-sCS"/>
-                    <constraint firstItem="4756" firstAttribute="leading" secondItem="2" secondAttribute="leading" id="557-Ee-bES"/>
-                    <constraint firstAttribute="trailing" secondItem="3Bj-Gx-5iu" secondAttribute="trailing" id="7zX-eF-Vez"/>
-                    <constraint firstAttribute="bottom" secondItem="4756" secondAttribute="bottom" id="HK1-1U-ca3"/>
-                    <constraint firstAttribute="bottom" secondItem="3Bj-Gx-5iu" secondAttribute="bottom" priority="750" id="OGC-NR-LLR"/>
-                    <constraint firstItem="3Bj-Gx-5iu" firstAttribute="leading" secondItem="2" secondAttribute="leading" id="XkA-TM-ova"/>
-                    <constraint firstItem="4756" firstAttribute="top" secondItem="3Bj-Gx-5iu" secondAttribute="bottom" priority="999" id="ZVn-EJ-9CG"/>
-                    <constraint firstAttribute="trailing" secondItem="4756" secondAttribute="trailing" id="uz3-RG-aAD"/>
-                </constraints>
-            </view>
-            <connections>
-                <outlet property="categoryLabel" destination="5610" id="28H-0K-uf4"/>
-                <outlet property="controlsBar" destination="5339" id="5624"/>
-                <outlet property="dropzoneBox" destination="4739" id="3sx-Uq-aFL"/>
-                <outlet property="dropzoneButton" destination="4729" id="uUO-5x-qmU"/>
-                <outlet property="dropzoneImageView" destination="4725" id="Ck9-vp-aDM"/>
-                <outlet property="dropzoneLabel" destination="4727" id="HkS-xv-7B6"/>
-                <outlet property="dropzoneView" destination="4722" id="a41-TD-aJs"/>
-                <outlet property="podcastAddButton" destination="5263" id="Rg8-kX-6dU"/>
-                <outlet property="podcastRemoveButton" destination="5302" id="T6b-Y8-Usc"/>
-                <outlet property="podcastSubscribeCancelButton" destination="5268" id="nSd-2J-TCb"/>
-                <outlet property="podcastSubscribeOkButton" destination="5269" id="vHf-fh-21u"/>
-                <outlet property="podcastSubscribeSubtitle" destination="5274" id="wLI-Bk-rB1"/>
-                <outlet property="podcastSubscribeTitle" destination="5275" id="foW-M7-zvQ"/>
-                <outlet property="podcastSubscribeUrlField" destination="5289" id="atN-De-g9Y"/>
-                <outlet property="podcastSubscribeWindow" destination="5265" id="dbr-XL-jEV"/>
-                <outlet property="podcastUnsubscirbeTitle" destination="5311" id="XeP-LX-gv4"/>
-                <outlet property="podcastUnsubscribeCancelButton" destination="5307" id="5ns-Wt-16P"/>
-                <outlet property="podcastUnsubscribeOkButton" destination="5308" id="n0p-PI-HLp"/>
-                <outlet property="podcastUnsubscribePopUpButton" destination="5319" id="dnR-ci-Uv7"/>
-                <outlet property="podcastUnsubscribeSubtitle" destination="5310" id="oMV-ik-riY"/>
-                <outlet property="podcastUnsubscribeWindow" destination="5305" id="9yb-CN-b5O"/>
-                <outlet property="podcastView" destination="5260" id="gOv-Pi-fkF"/>
-                <outlet property="searchField" destination="5614" id="Qkl-Wo-cAe"/>
-                <outlet property="sidebarScrollView" destination="zwV-eF-2Ae" id="V0N-WI-DQY"/>
-                <outlet property="sidebarView" destination="nj2-9Y-xxN" id="jDh-EM-tbX"/>
-                <outlet property="splitView" destination="4680" id="30m-4q-XzK"/>
-                <outlet property="splitViewLeft" destination="4681" id="ryK-3z-wuu"/>
-                <outlet property="splitViewRight" destination="4682" id="REX-fd-CCP"/>
-                <outlet property="tableViewToPodcastConstraint" destination="AIy-oz-19u" id="NaG-yj-Yoh"/>
-                <outlet property="videoView" destination="4665" id="5622"/>
-                <outlet property="videoViewBottomConstraint" destination="ZVn-EJ-9CG" id="8F2-BP-yVS"/>
-            </connections>
-            <point key="canvasLocation" x="465" y="507.5"/>
-        </window>
-        <customObject id="5339" customClass="VLCMainWindowControlsBar">
-            <connections>
-                <outlet property="backwardButton" destination="3651" id="spd-Ox-yOI"/>
-                <outlet property="bottomBarView" destination="4756" id="5621"/>
-                <outlet property="dropView" destination="5608" id="zUe-aW-9EY"/>
-                <outlet property="effectsButton" destination="3654" id="VfE-Hs-5Ni"/>
-                <outlet property="effectsButtonWidthConstraint" destination="cE9-ym-9VP" id="ZQQ-m6-t7W"/>
-                <outlet property="forwardButton" destination="3648" id="0bA-YS-tkr"/>
-                <outlet property="fullscreenButton" destination="4419" id="hgS-Tk-jle"/>
-                <outlet property="fullscreenButtonWidthConstraint" destination="b6s-NA-bQd" id="zsB-tJ-zUh"/>
-                <outlet property="nextButton" destination="HBS-xq-EkN" id="MIO-Ba-jDH"/>
-                <outlet property="nextButtonWidthConstraint" destination="uPv-u5-I21" id="Lsk-Nu-vmn"/>
-                <outlet property="playButton" destination="3571" id="5Mf-48-Ga9"/>
-                <outlet property="playlistButton" destination="4671" id="AZd-5b-MrA"/>
-                <outlet property="prevButton" destination="qfh-30-nky" id="uN2-nC-7Mt"/>
-                <outlet property="prevButtonWidthConstraint" destination="bP7-Ec-OLG" id="qs4-ok-Ual"/>
-                <outlet property="repeatButton" destination="2789" id="lRj-JN-Yry"/>
-                <outlet property="repeatButtonWidthConstraint" destination="3Ww-8A-Fh7" id="i89-fY-S9w"/>
-                <outlet property="shuffleButton" destination="2208" id="kf1-mU-75T"/>
-                <outlet property="shuffleButtonWidthConstraint" destination="6Z4-L0-Wzo" id="xFz-7x-Vlz"/>
-                <outlet property="stopButton" destination="3647" id="ddx-Gq-iPV"/>
-                <outlet property="timeField" destination="4423" id="Wvo-az-Lou"/>
-                <outlet property="timeSlider" destination="4422" id="I3H-rQ-4GH"/>
-                <outlet property="volumeDownButton" destination="3653" id="brO-P5-sUM"/>
-                <outlet property="volumeSlider" destination="3649" id="NDW-el-poL"/>
-                <outlet property="volumeUpButton" destination="3652" id="vXR-KC-L2N"/>
-            </connections>
-        </customObject>
-        <window title="Subscribe to a podcast" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="5265" userLabel="Add Podcast">
-            <windowStyleMask key="styleMask" titled="YES"/>
-            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
-            <rect key="contentRect" x="265" y="520" width="612" height="157"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1177"/>
-            <value key="minSize" type="size" width="612" height="157"/>
-            <value key="maxSize" type="size" width="612" height="159"/>
-            <view key="contentView" id="5266">
-                <rect key="frame" x="0.0" y="0.0" width="612" height="157"/>
-                <autoresizingMask key="autoresizingMask"/>
-                <subviews>
-                    <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" preferredMaxLayoutWidth="572" translatesAutoresizingMaskIntoConstraints="NO" id="5275">
-                        <rect key="frame" x="18" y="120" width="576" height="17"/>
-                        <textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" title="Subscribe to a podcast" id="5276">
-                            <font key="font" metaFont="systemBold"/>
-                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
-                    <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" preferredMaxLayoutWidth="572" translatesAutoresizingMaskIntoConstraints="NO" id="5274">
-                        <rect key="frame" x="18" y="98" width="576" height="14"/>
-                        <textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" title="Enter URL of the podcast to subscribe to:" usesSingleLineMode="YES" id="5277">
-                            <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="750" translatesAutoresizingMaskIntoConstraints="NO" id="5289">
-                        <rect key="frame" x="20" y="68" width="572" height="22"/>
-                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="5290">
-                            <font key="font" metaFont="system"/>
-                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
-                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5269">
-                        <rect key="frame" x="497" y="13" width="101" height="32"/>
-                        <buttonCell key="cell" type="push" title="Subscribe" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="5284">
-                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                            <font key="font" metaFont="system"/>
-                            <string key="keyEquivalent" base64-UTF8="YES">
-DQ
-</string>
-                        </buttonCell>
-                    </button>
-                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5268">
-                        <rect key="frame" x="415" y="13" width="82" height="32"/>
-                        <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="5285">
-                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                            <font key="font" metaFont="system"/>
-                            <string key="keyEquivalent" base64-UTF8="YES">
-Gw
-</string>
-                        </buttonCell>
-                    </button>
-                </subviews>
-                <constraints>
-                    <constraint firstItem="5289" firstAttribute="top" secondItem="5274" secondAttribute="bottom" constant="8" id="1za-0q-K87"/>
-                    <constraint firstAttribute="bottom" secondItem="5269" secondAttribute="bottom" constant="20" symbolic="YES" id="3eF-Uc-ilV"/>
-                    <constraint firstItem="5269" firstAttribute="leading" secondItem="5268" secondAttribute="trailing" constant="12" symbolic="YES" id="5K2-Jv-18Q"/>
-                    <constraint firstItem="5275" firstAttribute="leading" secondItem="5266" secondAttribute="leading" constant="20" symbolic="YES" id="9La-tT-5fw"/>
-                    <constraint firstItem="5289" firstAttribute="leading" secondItem="5274" secondAttribute="leading" id="9Vx-M4-eXI"/>
-                    <constraint firstItem="5269" firstAttribute="top" secondItem="5289" secondAttribute="bottom" constant="27" id="Grp-4N-cMG"/>
-                    <constraint firstAttribute="trailing" secondItem="5269" secondAttribute="trailing" constant="20" symbolic="YES" id="Hg7-9m-md4"/>
-                    <constraint firstItem="5274" firstAttribute="leading" secondItem="5275" secondAttribute="leading" id="LVm-oc-HZO"/>
-                    <constraint firstItem="5274" firstAttribute="trailing" secondItem="5275" secondAttribute="trailing" id="Pet-sl-mWc"/>
-                    <constraint firstItem="5275" firstAttribute="top" secondItem="5266" secondAttribute="top" constant="20" id="Q5c-aC-NA7"/>
-                    <constraint firstItem="5274" firstAttribute="top" secondItem="5275" secondAttribute="bottom" constant="8" id="ZNK-fK-xXa"/>
-                    <constraint firstItem="5289" firstAttribute="trailing" secondItem="5274" secondAttribute="trailing" id="l00-Ic-bRw"/>
-                    <constraint firstAttribute="trailing" secondItem="5275" secondAttribute="trailing" constant="20" symbolic="YES" id="o0Y-9T-Ntg"/>
-                    <constraint firstItem="5268" firstAttribute="centerY" secondItem="5269" secondAttribute="centerY" id="xVB-xB-E42"/>
-                </constraints>
-            </view>
-        </window>
-        <window title="Unsubscribe from a podcast" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="5305" userLabel="Remove Podcast">
-            <windowStyleMask key="styleMask" titled="YES"/>
-            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
-            <rect key="contentRect" x="265" y="520" width="612" height="156"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1177"/>
-            <value key="minSize" type="size" width="612" height="156"/>
-            <value key="maxSize" type="size" width="612" height="159"/>
-            <view key="contentView" id="5306">
-                <rect key="frame" x="0.0" y="0.0" width="612" height="156"/>
-                <autoresizingMask key="autoresizingMask"/>
-                <subviews>
-                    <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" preferredMaxLayoutWidth="572" translatesAutoresizingMaskIntoConstraints="NO" id="5311">
-                        <rect key="frame" x="18" y="119" width="576" height="17"/>
-                        <textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" title="Unsubscribe from a podcast" id="5312">
-                            <font key="font" metaFont="systemBold"/>
-                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
-                    <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" preferredMaxLayoutWidth="572" translatesAutoresizingMaskIntoConstraints="NO" id="5310">
-                        <rect key="frame" x="18" y="97" width="576" height="14"/>
-                        <textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" title="Select the podcast you would like to unsubscribe from:" usesSingleLineMode="YES" id="5313">
-                            <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>
-                    <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5319">
-                        <rect key="frame" x="18" y="65" width="577" height="25"/>
-                        <popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="5322" id="5320">
-                            <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
-                            <font key="font" metaFont="menu"/>
-                            <menu key="menu" title="OtherViews" id="5321">
-                                <items>
-                                    <menuItem title="Item 1" state="on" id="5322"/>
-                                    <menuItem title="Item 2" id="5323"/>
-                                    <menuItem title="Item 3" id="5324"/>
-                                </items>
-                            </menu>
-                        </popUpButtonCell>
-                    </popUpButton>
-                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5308">
-                        <rect key="frame" x="481" y="13" width="117" height="32"/>
-                        <buttonCell key="cell" type="push" title="Unsubscribe" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="5315">
-                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                            <font key="font" metaFont="system"/>
-                            <string key="keyEquivalent" base64-UTF8="YES">
-DQ
-</string>
-                        </buttonCell>
-                    </button>
-                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5307">
-                        <rect key="frame" x="399" y="13" width="82" height="32"/>
-                        <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="5316">
-                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                            <font key="font" metaFont="system"/>
-                            <string key="keyEquivalent" base64-UTF8="YES">
-Gw
-</string>
-                        </buttonCell>
-                    </button>
-                </subviews>
-                <constraints>
-                    <constraint firstItem="5310" firstAttribute="top" secondItem="5311" secondAttribute="bottom" constant="8" id="006-80-vNL"/>
-                    <constraint firstAttribute="bottom" secondItem="5308" secondAttribute="bottom" constant="20" symbolic="YES" id="5i3-W3-j3J"/>
-                    <constraint firstItem="5307" firstAttribute="centerY" secondItem="5308" secondAttribute="centerY" id="8ME-Va-xMm"/>
-                    <constraint firstItem="5311" firstAttribute="leading" secondItem="5306" secondAttribute="leading" constant="20" symbolic="YES" id="9l2-yj-Vyc"/>
-                    <constraint firstItem="5319" firstAttribute="trailing" secondItem="5310" secondAttribute="trailing" id="Aes-LX-9SJ"/>
-                    <constraint firstItem="5319" firstAttribute="top" secondItem="5310" secondAttribute="bottom" constant="8" id="Jph-cy-eOW"/>
-                    <constraint firstItem="5308" firstAttribute="leading" secondItem="5307" secondAttribute="trailing" constant="12" symbolic="YES" id="KEY-Ky-xcn"/>
-                    <constraint firstItem="5310" firstAttribute="trailing" secondItem="5311" secondAttribute="trailing" id="Ugo-of-dNJ"/>
-                    <constraint firstItem="5319" firstAttribute="leading" secondItem="5310" secondAttribute="leading" id="YHw-aU-bzs"/>
-                    <constraint firstItem="5310" firstAttribute="leading" secondItem="5311" secondAttribute="leading" id="dlc-tz-X5d"/>
-                    <constraint firstItem="5308" firstAttribute="top" secondItem="5319" secondAttribute="bottom" constant="27" id="jFb-4F-Aop"/>
-                    <constraint firstAttribute="trailing" secondItem="5308" secondAttribute="trailing" constant="20" symbolic="YES" id="pWc-DY-K5v"/>
-                    <constraint firstAttribute="trailing" secondItem="5311" secondAttribute="trailing" constant="20" symbolic="YES" id="t4M-tP-BdL"/>
-                    <constraint firstItem="5311" firstAttribute="top" secondItem="5306" secondAttribute="top" constant="20" symbolic="YES" id="yGf-Jb-tLN"/>
-                </constraints>
-            </view>
-            <point key="canvasLocation" x="426" y="875"/>
-        </window>
-    </objects>
-    <resources>
-        <image name="NSActionTemplate" width="14" height="14"/>
-        <image name="backward-6btns" width="28" height="23"/>
-        <image name="backward-6btns-pressed" width="28" height="23"/>
-        <image name="dropzone" width="112" height="112"/>
-        <image name="dropzone-background" width="4" height="4"/>
-        <image name="effects-double-buttons" width="29" height="23"/>
-        <image name="effects-double-buttons-pressed" width="29" height="23"/>
-        <image name="forward-6btns" width="28" height="23"/>
-        <image name="forward-6btns-pressed" width="28" height="23"/>
-        <image name="fullscreen-double-buttons" width="29" height="23"/>
-        <image name="fullscreen-double-buttons-pressed" width="29" height="23"/>
-        <image name="next-6btns" width="29" height="23"/>
-        <image name="next-6btns-pressed" width="29" height="23"/>
-        <image name="play" width="27" height="23"/>
-        <image name="play-pressed" width="27" height="23"/>
-        <image name="playlist-btn" width="28" height="23"/>
-        <image name="playlist-btn-pressed" width="28" height="23"/>
-        <image name="previous-6btns" width="29" height="23"/>
-        <image name="previous-6btns-pressed" width="29" height="23"/>
-        <image name="repeat" width="28" height="23"/>
-        <image name="repeat-pressed" width="28" height="23"/>
-        <image name="shuffle" width="29" height="23"/>
-        <image name="shuffle-pressed" width="29" height="23"/>
-        <image name="stop" width="29" height="23"/>
-        <image name="stop-pressed" width="29" height="23"/>
-        <image name="topbar_background" width="1" height="27"/>
-        <image name="volume-high" width="13" height="11"/>
-        <image name="volume-low" width="5" height="11"/>
-    </resources>
-</document>
diff --git a/modules/gui/macosx/UI/VLCLibraryWindow.xib b/modules/gui/macosx/UI/VLCLibraryWindow.xib
index 5466363b53f6..c2f0f996b2c3 100644
--- a/modules/gui/macosx/UI/VLCLibraryWindow.xib
+++ b/modules/gui/macosx/UI/VLCLibraryWindow.xib
@@ -23,7 +23,7 @@
                 <autoresizingMask key="autoresizingMask"/>
                 <subviews>
                     <segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="W1M-0o-qYG">
-                        <rect key="frame" x="88" y="333" width="304" height="24"/>
+                        <rect key="frame" x="88" y="332" width="304" height="25"/>
                         <constraints>
                             <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="300" id="Wg7-mn-ahw"/>
                         </constraints>
@@ -36,25 +36,21 @@
                             </segments>
                         </segmentedCell>
                     </segmentedControl>
-                    <customView hidden="YES" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="12s-0J-Uvj" customClass="VLCVoutView">
-                        <rect key="frame" x="0.0" y="93" width="480" height="235"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                    </customView>
                     <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="291"/>
                         <subviews>
                             <customView id="iSp-bV-w6B">
-                                <rect key="frame" x="0.0" y="0.0" width="242" height="292"/>
+                                <rect key="frame" x="0.0" y="0.0" width="242" height="291"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <subviews>
                                     <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="292"/>
+                                        <rect key="frame" x="0.0" y="0.0" width="242" height="291"/>
                                         <clipView key="contentView" id="OKa-dt-1yY">
-                                            <rect key="frame" x="0.0" y="0.0" width="242" height="292"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="242" height="291"/>
                                             <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="292"/>
+                                                    <rect key="frame" x="0.0" y="0.0" width="242" height="291"/>
                                                     <autoresizingMask key="autoresizingMask" widthSizable="YES"/>
                                                     <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" id="Rag-cM-k1g">
                                                         <size key="itemSize" width="240" height="120"/>
@@ -69,7 +65,7 @@
                                             <autoresizingMask key="autoresizingMask"/>
                                         </scroller>
                                         <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="rUh-Qg-gUL">
-                                            <rect key="frame" x="226" y="0.0" width="16" height="185"/>
+                                            <rect key="frame" x="226" y="0.0" width="16" height="291"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                         </scroller>
                                     </scrollView>
@@ -82,17 +78,17 @@
                                 </constraints>
                             </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="291"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <subviews>
                                     <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="0.0" y="0.0" width="237" height="292"/>
+                                        <rect key="frame" x="0.0" y="0.0" width="237" height="291"/>
                                         <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Vdr-bg-tuS">
-                                            <rect key="frame" x="0.0" y="0.0" width="237" height="292"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="237" height="291"/>
                                             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                             <subviews>
                                                 <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" id="Fr1-af-8gb" customClass="VLCPlaylistTableView">
-                                                    <rect key="frame" x="0.0" y="0.0" width="237" height="292"/>
+                                                    <rect key="frame" x="0.0" y="0.0" width="237" height="291"/>
                                                     <autoresizingMask key="autoresizingMask"/>
                                                     <size key="intercellSpacing" width="3" height="2"/>
                                                     <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -115,9 +111,8 @@
                                                                     <rect key="frame" x="1" y="1" width="234" height="17"/>
                                                                     <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                                                     <subviews>
-                                                                        <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hYg-bX-voP">
+                                                                        <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="hYg-bX-voP">
                                                                             <rect key="frame" x="0.0" y="0.0" width="234" height="17"/>
-                                                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
                                                                             <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="vBe-8X-jwD">
                                                                                 <font key="font" metaFont="system"/>
                                                                                 <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -125,6 +120,11 @@
                                                                             </textFieldCell>
                                                                         </textField>
                                                                     </subviews>
+                                                                    <constraints>
+                                                                        <constraint firstItem="hYg-bX-voP" firstAttribute="centerX" secondItem="gVL-bx-hRL" secondAttribute="centerX" id="VEv-n0-OZf"/>
+                                                                        <constraint firstItem="hYg-bX-voP" firstAttribute="centerY" secondItem="gVL-bx-hRL" secondAttribute="centerY" id="aXu-4w-Vvk"/>
+                                                                        <constraint firstItem="hYg-bX-voP" firstAttribute="leading" secondItem="gVL-bx-hRL" secondAttribute="leading" constant="2" id="xcX-Wj-7dq"/>
+                                                                    </constraints>
                                                                     <connections>
                                                                         <outlet property="textField" destination="hYg-bX-voP" id="i9z-OF-vvT"/>
                                                                     </connections>
@@ -277,14 +277,22 @@
                             <constraint firstAttribute="bottom" secondItem="MQH-bI-Zdh" secondAttribute="bottom" id="lBe-S3-sJr"/>
                         </constraints>
                     </customView>
+                    <customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="12s-0J-Uvj" customClass="VLCVoutView">
+                        <rect key="frame" x="0.0" y="36" width="480" height="291"/>
+                    </customView>
                 </subviews>
                 <constraints>
                     <constraint firstItem="W1M-0o-qYG" firstAttribute="centerX" secondItem="EiT-Mj-1SZ" secondAttribute="centerX" id="4k0-zs-btE"/>
+                    <constraint firstItem="12s-0J-Uvj" firstAttribute="bottom" secondItem="u8g-jy-S4e" secondAttribute="bottom" id="8Ud-SJ-kVA"/>
+                    <constraint firstItem="12s-0J-Uvj" firstAttribute="centerY" secondItem="EiT-Mj-1SZ" secondAttribute="centerY" id="NBJ-Md-zDU"/>
                     <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="vUy-jt-gjY" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" id="Sse-bx-ewr"/>
+                    <constraint firstItem="12s-0J-Uvj" firstAttribute="leading" secondItem="u8g-jy-S4e" secondAttribute="leading" id="XsM-T2-tAm"/>
+                    <constraint firstItem="12s-0J-Uvj" firstAttribute="top" secondItem="u8g-jy-S4e" secondAttribute="top" id="Y9L-U1-u7U"/>
                     <constraint firstAttribute="trailing" secondItem="vUy-jt-gjY" secondAttribute="trailing" id="amK-mR-Fvr"/>
                     <constraint firstAttribute="trailing" secondItem="u8g-jy-S4e" secondAttribute="trailing" id="lEc-Vr-8M9"/>
+                    <constraint firstItem="12s-0J-Uvj" firstAttribute="trailing" secondItem="u8g-jy-S4e" secondAttribute="trailing" id="ool-G0-oZB"/>
                     <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="W1M-0o-qYG" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" constant="7" id="y9h-yj-Ufq"/>
diff --git a/modules/gui/macosx/extensions/NSScreen+VLCAdditions.m b/modules/gui/macosx/extensions/NSScreen+VLCAdditions.m
index 86ce02de9261..4b6ed4c727aa 100644
--- a/modules/gui/macosx/extensions/NSScreen+VLCAdditions.m
+++ b/modules/gui/macosx/extensions/NSScreen+VLCAdditions.m
@@ -23,7 +23,7 @@
 
 #import "NSScreen+VLCAdditions.h"
 #import "main/CompatibilityFixes.h"
-#import "windows/mainwindow/VLCMainWindow.h"
+#import "windows/video/VLCWindow.h"
 
 @implementation NSScreen (VLCAdditions)
 
diff --git a/modules/gui/macosx/extensions/misc.m b/modules/gui/macosx/extensions/misc.m
index 616ff944c179..24abc60fec68 100644
--- a/modules/gui/macosx/extensions/misc.m
+++ b/modules/gui/macosx/extensions/misc.m
@@ -30,7 +30,6 @@
 #import "main/CompatibilityFixes.h"
 #import "main/VLCMain.h"
 #import "menus/VLCMainMenu.h"
-#import "windows/mainwindow/VLCMainWindow.h"
 #import "windows/mainwindow/VLCControlsBarCommon.h"
 
 /*****************************************************************************
diff --git a/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListDelegateDataSourceProxy.h b/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListDelegateDataSourceProxy.h
deleted file mode 100755
index 2bf8930597fb..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListDelegateDataSourceProxy.h
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-//  PXSourceListDelegateDataSourceProxy.h
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 25/12/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import <Foundation/Foundation.h>
-#import "../PXSourceList.h"
-
-@interface PXSourceListDelegateDataSourceProxy : NSProxy <NSOutlineViewDelegate, NSOutlineViewDataSource, PXSourceListDelegate, PXSourceListDataSource>
-
-@property (weak, nonatomic) PXSourceList *sourceList;
-@property (weak, nonatomic) id <PXSourceListDelegate> delegate;
-@property (weak, nonatomic) id <PXSourceListDataSource> dataSource;
-
-- (id)initWithSourceList:(PXSourceList *)sourceList;
-
-@end
diff --git a/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListDelegateDataSourceProxy.m b/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListDelegateDataSourceProxy.m
deleted file mode 100755
index 004725a179b9..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListDelegateDataSourceProxy.m
+++ /dev/null
@@ -1,470 +0,0 @@
-//
-//  PXSourceListDelegateDataSourceProxy.m
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 25/12/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import "PXSourceListDelegateDataSourceProxy.h"
-
-#import <objc/runtime.h>
-#import "PXSourceListPrivateConstants.h"
-#import "PXSourceListRuntimeAdditions.h"
-
-// Internal constants.
-static NSString * const forwardingMapForwardingMethodNameKey = @"methodName";
-static NSString * const forwardingMapForwardedArgumentIndexesKey = @"forwardedArgumentIndexes";
-
-static NSArray * __outlineViewDelegateMethods = nil;
-static NSArray * __outlineViewDataSourceMethods = nil;
-static NSArray * __requiredOutlineViewDataSourceMethods = nil;
-
-// Cache the PXSourceListDelegate and PXSourceListDataSource method names so that if these methods are invoked on
-// us, we can quickly forward them to the delegate and dataSource using -forwardingTargetForSelector: without going
-// through -forwardInvocation:.
-static NSArray * __fastPathForwardingDelegateMethods = nil;
-static NSArray * __fastPathForwardingDataSourceMethods = nil;
-
-// We want to suppress the warnings for protocol methods not being implemented. As a proxy we will forward these
-// messages to the actual delegate and data source.
-#pragma clang diagnostic ignored "-Wprotocol"
-@implementation PXSourceListDelegateDataSourceProxy
-
-+ (void)initialize
-{
-    __outlineViewDelegateMethods = px_methodNamesForProtocol(@protocol(NSOutlineViewDelegate));
-    __outlineViewDataSourceMethods = px_methodNamesForProtocol(@protocol(NSOutlineViewDataSource));
-    __fastPathForwardingDelegateMethods = [self fastPathForwardingDelegateMethods];
-    __fastPathForwardingDataSourceMethods = px_methodNamesForProtocol(@protocol(PXSourceListDataSource));
-
-    __requiredOutlineViewDataSourceMethods = @[NSStringFromSelector(@selector(outlineView:numberOfChildrenOfItem:)),
-                                               NSStringFromSelector(@selector(outlineView:child:ofItem:)),
-                                               NSStringFromSelector(@selector(outlineView:isItemExpandable:)),
-                                               NSStringFromSelector(@selector(outlineView:objectValueForTableColumn:byItem:))];
-
-    // Add the custom mappings first before we add the 'regular' mappings.
-    [self addCustomMethodNameMappings];
-
-    // Now add the 'regular' mappings.
-    [self addEntriesToMethodForwardingMap:[self methodNameMappingsForProtocol:@protocol(NSOutlineViewDelegate)]];
-    [self addEntriesToMethodForwardingMap:[self methodNameMappingsForProtocol:@protocol(NSOutlineViewDataSource)]];
-}
-
-- (id)initWithSourceList:(PXSourceList *)sourceList
-{
-    _sourceList = sourceList;
-
-    return self;
-}
-
-- (void)dealloc
-{
-    //Unregister the delegate from receiving notifications
-	[[NSNotificationCenter defaultCenter] removeObserver:self.delegate name:nil object:self.sourceList];
-}
-
-#pragma mark - Accessors
-
-- (void)setDelegate:(id<PXSourceListDelegate>)delegate
-{
-    if (self.delegate)
-        [[NSNotificationCenter defaultCenter] removeObserver:self.delegate name:nil object:self.sourceList];
-
-    _delegate = delegate;
-
-    //Register the new delegate to receive notifications
-	[self registerDelegateToReceiveNotification:PXSLSelectionIsChangingNotification
-								   withSelector:@selector(sourceListSelectionIsChanging:)];
-	[self registerDelegateToReceiveNotification:PXSLSelectionDidChangeNotification
-								   withSelector:@selector(sourceListSelectionDidChange:)];
-	[self registerDelegateToReceiveNotification:PXSLItemWillExpandNotification
-								   withSelector:@selector(sourceListItemWillExpand:)];
-	[self registerDelegateToReceiveNotification:PXSLItemDidExpandNotification
-								   withSelector:@selector(sourceListItemDidExpand:)];
-	[self registerDelegateToReceiveNotification:PXSLItemWillCollapseNotification
-								   withSelector:@selector(sourceListItemWillCollapse:)];
-	[self registerDelegateToReceiveNotification:PXSLItemDidCollapseNotification
-								   withSelector:@selector(sourceListItemDidCollapse:)];
-	[self registerDelegateToReceiveNotification:PXSLDeleteKeyPressedOnRowsNotification
-								   withSelector:@selector(sourceListDeleteKeyPressedOnRows:)];
-}
-
-- (void)setDataSource:(id<PXSourceListDataSource>)dataSource
-{
-    _dataSource = dataSource;
-}
-
-#pragma mark - NSObject Overrides
-
-- (BOOL)respondsToSelector:(SEL)aSelector
-{
-    NSString *methodName = NSStringFromSelector(aSelector);
-
-    // Only let the source list override NSOutlineView delegate and data source methods.
-    if ([self.sourceList respondsToSelector:aSelector] && ([__outlineViewDataSourceMethods containsObject:methodName] || [__outlineViewDelegateMethods containsObject:methodName]))
-        return YES;
-
-    if ([__requiredOutlineViewDataSourceMethods containsObject:methodName])
-        return YES;
-
-    if ([__fastPathForwardingDelegateMethods containsObject:methodName])
-        return [self.delegate respondsToSelector:aSelector];
-    if ([__fastPathForwardingDataSourceMethods containsObject:methodName])
-        return [self.dataSource respondsToSelector:aSelector];
-
-    id forwardingObject = [self forwardingObjectForSelector:aSelector];
-    NSDictionary *forwardingInformation = [[self class] forwardingInformationForSelector:aSelector];
-
-    if(!forwardingObject || !forwardingInformation)
-        return NO;
-
-    return [forwardingObject respondsToSelector:NSSelectorFromString(forwardingInformation[forwardingMapForwardingMethodNameKey])];
-}
-
-- (BOOL)conformsToProtocol:(Protocol *)protocol
-{
-    return class_conformsToProtocol(object_getClass(self), protocol);
-}
-
-// Fast-path delegate and data source methods aren't handled here; they are taken care of in -forwardingTargetForSelector:.
-- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
-{
-    NSString *methodName = NSStringFromSelector(aSelector);
-
-    struct objc_method_description description = {NULL, NULL};
-
-    if ([__outlineViewDelegateMethods containsObject:methodName])
-        description = px_methodDescriptionForProtocolMethod(@protocol(NSOutlineViewDelegate), aSelector);
-    else if ([__outlineViewDataSourceMethods containsObject:methodName])
-        description = px_methodDescriptionForProtocolMethod(@protocol(NSOutlineViewDataSource), aSelector);
-
-    if (description.name == NULL && description.types == NULL)
-        return nil;
-
-    return [NSMethodSignature signatureWithObjCTypes:description.types];
-}
-
-- (BOOL) isKindOfClass:(Class)aClass
-{
-    return NO;
-}
-
-- (void)forwardInvocation:(NSInvocation *)anInvocation
-{
-    SEL sourceSelector = anInvocation.selector;
-
-    // Give the Source List a chance to handle the selector first (this is a bit of a hack for the time being
-    // and should be changed).
-    if ([self.sourceList respondsToSelector:sourceSelector]) {
-        [anInvocation invokeWithTarget:self.sourceList];
-        return;
-    }
-
-    id forwardingObject = [self forwardingObjectForSelector:sourceSelector];
-    NSDictionary *forwardingInformation = [[self class] forwardingInformationForSelector:sourceSelector];
-
-    if(!forwardingObject || !forwardingInformation) {
-        [super forwardInvocation:anInvocation];
-        return;
-    }
-
-    SEL forwardingSelector = NSSelectorFromString(forwardingInformation[forwardingMapForwardingMethodNameKey]);
-
-    NSArray *forwardedArgumentIndexes = forwardingInformation[forwardingMapForwardedArgumentIndexesKey];
-    anInvocation.selector = forwardingSelector;
-
-    NSMethodSignature *methodSignature = [forwardingObject methodSignatureForSelector:forwardingSelector];
-
-    /* Catch the case where we have advertised ourselves as responding to a selector required by NSOutlineView
-       for a valid dataSource but the corresponding PXSourceListDataSource method isn't implemented by the dataSource.
-     */
-    if ([__requiredOutlineViewDataSourceMethods containsObject:NSStringFromSelector(sourceSelector)]
-        && ![self.dataSource respondsToSelector:forwardingSelector]) {
-        return;
-    }
-
-    /* Modify the arguments in the invocation if the source and target selector arguments are different.
-
-       The forwardedArgumentIndexes array contains the indexes of arguments in the original invocation that we want
-       to use in our modified invocation. E.g. @[@0, @2] means take the first and third arguments and only use them
-       when forwarding. We want to do this when the forwarded selector has a different number of arguments to the
-       source selector (see +addCustomMethodNameMappings).
-     
-       Note that this implementation only works if the arguments in `forwardedArgumentIndexes` are monotonically
-       increasing (which is good enough for now).
-
-     */
-    if (forwardedArgumentIndexes) {
-        // self and _cmd are arguments 0 and 1.
-        NSUInteger invocationArgumentIndex = 2;
-        for (NSNumber *newArgumentIndex in forwardedArgumentIndexes) {
-            NSInteger forwardedArgumentIndex = newArgumentIndex.integerValue;
-
-            // Handle the case where we want to use (for example) the third argument from the original invocation
-            // as the second argument of our modified invocation.
-            if (invocationArgumentIndex != forwardedArgumentIndex) {
-                NSUInteger argumentSize = 0;
-                NSGetSizeAndAlignment([methodSignature getArgumentTypeAtIndex:invocationArgumentIndex], &argumentSize, NULL);
-
-                void *argument = malloc(argumentSize);
-                [anInvocation getArgument:argument atIndex:forwardedArgumentIndex + 2]; // Take self and _cmd into account again.
-                [anInvocation setArgument:argument atIndex:invocationArgumentIndex];
-                free(argument);
-            }
-
-            invocationArgumentIndex++;
-        }
-    }
-
-    [anInvocation invokeWithTarget:forwardingObject];
-}
-
-- (id)forwardingTargetForSelector:(SEL)aSelector
-{
-    NSString *methodName = NSStringFromSelector(aSelector);
-
-    if ([__fastPathForwardingDelegateMethods containsObject:methodName])
-        return self.delegate;
-
-    if ([__fastPathForwardingDataSourceMethods containsObject:methodName])
-        return self.dataSource;
-
-    return nil;
-}
-
-#pragma mark - Method Forwarding
-
-+ (NSMutableDictionary *)methodForwardingMap
-{
-    static NSMutableDictionary *_methodForwardingMap = nil;
-    if (!_methodForwardingMap)
-        _methodForwardingMap = [[NSMutableDictionary alloc] init];
-
-    return _methodForwardingMap;
-}
-
-+ (void)addEntriesToMethodForwardingMap:(NSDictionary *)entries
-{
-    NSArray *methodForwardingBlacklist = [self methodForwardingBlacklist];
-    NSMutableDictionary *methodForwardingMap = [self methodForwardingMap];
-
-    for (NSString *key in entries) {
-        if (![methodForwardingBlacklist containsObject:key] && !methodForwardingMap[key])
-            methodForwardingMap[key] = entries[key];
-    }
-}
-
-+ (NSDictionary *)methodNameMappingsForProtocol:(Protocol *)protocol
-{
-    NSMutableDictionary *methodNameMappings = [[NSMutableDictionary alloc] init];
-    NSArray *protocolMethods = px_allProtocolMethods(protocol);
-    NSString *protocolName = NSStringFromProtocol(protocol);
-
-    for (NSDictionary *methodInfo in protocolMethods) {
-        NSString *methodName = methodInfo[px_protocolMethodNameKey];
-        NSString *mappedMethodName = [self mappedMethodNameForMethodName:methodName];
-        if (!mappedMethodName) {
-            NSLog(@"PXSourceList: couldn't map method %@ from %@", methodName, protocolName);
-            continue;
-        }
-
-        [methodNameMappings setObject:@{forwardingMapForwardingMethodNameKey: mappedMethodName}
-                               forKey:methodName];
-    }
-
-    return methodNameMappings;
-}
-
-+ (NSString *)mappedMethodNameForMethodName:(NSString *)methodName
-{
-    NSString *outlineViewSearchString = @"outlineView";
-    NSUInteger letterVOffset = [outlineViewSearchString rangeOfString:@"V"].location;
-    NSCharacterSet *uppercaseLetterCharacterSet = [NSCharacterSet uppercaseLetterCharacterSet];
-
-    NSRange outlineViewStringRange = [methodName rangeOfString:outlineViewSearchString options:NSCaseInsensitiveSearch];
-
-    // If for some reason we can't map the method name, try to fail gracefully.
-    if (outlineViewStringRange.location == NSNotFound)
-        return nil;
-
-    BOOL isOCapitalized = [uppercaseLetterCharacterSet characterIsMember:[methodName characterAtIndex:outlineViewStringRange.location]];
-    BOOL isVCapitalized = [uppercaseLetterCharacterSet characterIsMember:[methodName characterAtIndex:outlineViewStringRange.location + letterVOffset]];
-    return [methodName stringByReplacingCharactersInRange:outlineViewStringRange
-                                               withString:[NSString stringWithFormat:@"%@ource%@ist", isOCapitalized ? @"S" : @"s", isVCapitalized ? @"L" : @"l"]];
-
-}
-
-- (id)forwardingObjectForSelector:(SEL)selector
-{
-    if ([__outlineViewDataSourceMethods containsObject:NSStringFromSelector(selector)])
-        return self.dataSource;
-
-    if ([__outlineViewDelegateMethods containsObject:NSStringFromSelector(selector)])
-        return self.delegate;
-
-    return nil;
-}
-
-+ (NSDictionary *)forwardingInformationForSelector:(SEL)selector
-{
-    return [[self methodForwardingMap] objectForKey:NSStringFromSelector(selector)];
-}
-
-// These methods won't have mappings created for them.
-+ (NSArray *)methodForwardingBlacklist
-{
-    return @[NSStringFromSelector(@selector(outlineView:shouldSelectTableColumn:)),
-             NSStringFromSelector(@selector(outlineView:shouldReorderColumn:toColumn:)),
-             NSStringFromSelector(@selector(outlineView:mouseDownInHeaderOfTableColumn:)),
-             NSStringFromSelector(@selector(outlineView:didClickTableColumn:)),
-             NSStringFromSelector(@selector(outlineView:didDragTableColumn:)),
-             NSStringFromSelector(@selector(outlineView:sizeToFitWidthOfColumn:)),
-             NSStringFromSelector(@selector(outlineView:shouldReorderColumn:toColumn:)),
-             NSStringFromSelector(@selector(outlineViewColumnDidMove:)),
-             NSStringFromSelector(@selector(outlineViewColumnDidResize:)),
-             NSStringFromSelector(@selector(outlineView:isGroupItem:))];
-}
-
-/* Add custom mappings for method names which can't have "outlineView" simply replaced with "sourceList".
- 
-   For example, -outlineView:objectValueForTableColumn:byItem: should be forwarded to -sourceList:objectValueForItem:. We also only want to
-   forward the 1st and 3rd arguments when invoking this second selector.
-
- */
-+ (void)addCustomMethodNameMappings
-{
-    [self addCustomMethodNameMappingFromSelector:@selector(outlineView:objectValueForTableColumn:byItem:)
-                                      toSelector:@selector(sourceList:objectValueForItem:)
-                        forwardedArgumentIndexes:@[@0, @2]];
-    [self addCustomMethodNameMappingFromSelector:@selector(outlineView:setObjectValue:forTableColumn:byItem:)
-                                      toSelector:@selector(sourceList:setObjectValue:forItem:)
-                        forwardedArgumentIndexes:@[@0, @1, @3]];
-    [self addCustomMethodNameMappingFromSelector:@selector(outlineView:viewForTableColumn:item:)
-                                      toSelector:@selector(sourceList:viewForItem:)
-                        forwardedArgumentIndexes:@[@0, @2]];
-    [self addCustomMethodNameMappingFromSelector:@selector(outlineView:willDisplayCell:forTableColumn:item:)
-                                      toSelector:@selector(sourceList:willDisplayCell:forItem:)
-                        forwardedArgumentIndexes:@[@0, @1, @3]];
-    [self addCustomMethodNameMappingFromSelector:@selector(outlineView:shouldEditTableColumn:item:)
-                                      toSelector:@selector(sourceList:shouldEditItem:)
-                        forwardedArgumentIndexes:@[@0, @2]];
-    [self addCustomMethodNameMappingFromSelector:@selector(outlineView:toolTipForCell:rect:tableColumn:item:mouseLocation:)
-                                      toSelector:@selector(sourceList:toolTipForCell:rect:item:mouseLocation:)
-                        forwardedArgumentIndexes:@[@0, @1, @2, @4, @5]];
-    [self addCustomMethodNameMappingFromSelector:@selector(outlineView:typeSelectStringForTableColumn:item:)
-                                      toSelector:@selector(sourceList:typeSelectStringForItem:)
-                        forwardedArgumentIndexes:@[@0, @2]];
-    [self addCustomMethodNameMappingFromSelector:@selector(outlineView:shouldShowCellExpansionForTableColumn:item:)
-                                      toSelector:@selector(sourceList:shouldShowCellExpansionForItem:)
-                        forwardedArgumentIndexes:@[@0, @2]];
-    [self addCustomMethodNameMappingFromSelector:@selector(outlineView:shouldTrackCell:forTableColumn:item:)
-                                      toSelector:@selector(sourceList:shouldTrackCell:forItem:)
-                        forwardedArgumentIndexes:@[@0, @1, @3]];
-    [self addCustomMethodNameMappingFromSelector:@selector(outlineView:dataCellForTableColumn:item:)
-                                      toSelector:@selector(sourceList:dataCellForItem:)
-                        forwardedArgumentIndexes:@[@0, @2]];
-}
-
-+ (void)addCustomMethodNameMappingFromSelector:(SEL)fromSelector toSelector:(SEL)toSelector forwardedArgumentIndexes:(NSArray *)argumentIndexes
-{
-    [[self methodForwardingMap] setObject:@{forwardingMapForwardingMethodNameKey: NSStringFromSelector(toSelector),
-                                            forwardingMapForwardedArgumentIndexesKey: argumentIndexes}
-                                   forKey:NSStringFromSelector(fromSelector)];
-}
-
-- (BOOL)getForwardingObject:(id*)outObject andForwardingSelector:(SEL*)outSelector forSelector:(SEL)selector
-{
-    NSDictionary *methodForwardingMap = [[self class] methodForwardingMap];
-    NSString *originalMethodName = NSStringFromSelector(selector);
-    NSDictionary *forwardingInfo = methodForwardingMap[originalMethodName];
-    if (!forwardingInfo)
-        return NO;
-
-    id forwardingObject;
-    if ([__outlineViewDelegateMethods containsObject:originalMethodName])
-        forwardingObject = self.delegate;
-    else if ([__outlineViewDataSourceMethods containsObject:originalMethodName])
-        forwardingObject = self.dataSource;
-
-    if (!forwardingObject)
-        return NO;
-
-    if (outObject)
-        *outObject = forwardingObject;
-
-    if (outSelector)
-        *outSelector = NSSelectorFromString(forwardingInfo[forwardingMapForwardingMethodNameKey]);
-    
-    return YES;
-}
-
-+ (NSArray *)fastPathForwardingDelegateMethods
-{
-    NSMutableArray *methods = [px_methodNamesForProtocol(@protocol(PXSourceListDelegate)) mutableCopy];
-
-    // Add the NSControl delegate methods manually (unfortunately these aren't part of a formal protocol).
-    [methods addObject:px_methodNameForSelector(@selector(controlTextDidEndEditing:))];
-    [methods addObject:px_methodNameForSelector(@selector(controlTextDidBeginEditing:))];
-    [methods addObject:px_methodNameForSelector(@selector(controlTextDidChange:))];
-
-    return methods;
-}
-
-#pragma mark - Notifications
-
-- (void)registerDelegateToReceiveNotification:(NSString*)notification withSelector:(SEL)selector
-{
-	NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
-
-	//Set the delegate as a receiver of the notification if it implements the notification method
-	if([self.delegate respondsToSelector:selector]) {
-		[defaultCenter addObserver:self.delegate
-						  selector:selector
-							  name:notification
-							object:self.sourceList];
-	}
-}
-
-/* Notification wrappers */
-- (void)outlineViewSelectionIsChanging:(NSNotification *)notification
-{
-	[[NSNotificationCenter defaultCenter] postNotificationName:PXSLSelectionIsChangingNotification object:self.sourceList];
-}
-
-
-- (void)outlineViewSelectionDidChange:(NSNotification *)notification
-{
-	[[NSNotificationCenter defaultCenter] postNotificationName:PXSLSelectionDidChangeNotification object:self.sourceList];
-}
-
-- (void)outlineViewItemWillExpand:(NSNotification *)notification
-{
-	[[NSNotificationCenter defaultCenter] postNotificationName:PXSLItemWillExpandNotification
-														object:self.sourceList
-													  userInfo:[notification userInfo]];
-}
-
-- (void)outlineViewItemDidExpand:(NSNotification *)notification
-{
-	[[NSNotificationCenter defaultCenter] postNotificationName:PXSLItemDidExpandNotification
-														object:self.sourceList
-													  userInfo:[notification userInfo]];
-}
-
-- (void)outlineViewItemWillCollapse:(NSNotification *)notification
-{
-	[[NSNotificationCenter defaultCenter] postNotificationName:PXSLItemWillCollapseNotification
-														object:self.sourceList
-													  userInfo:[notification userInfo]];
-}
-
-- (void)outlineViewItemDidCollapse:(NSNotification *)notification
-{
-	[[NSNotificationCenter defaultCenter] postNotificationName:PXSLItemDidCollapseNotification
-														object:self.sourceList
-													  userInfo:[notification userInfo]];
-}
-
-@end
\ No newline at end of file
diff --git a/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListPrivateConstants.h b/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListPrivateConstants.h
deleted file mode 100755
index 1860126632ad..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListPrivateConstants.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-//  PXSourceListPrivateConstants.h
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 25/12/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import <Foundation/Foundation.h>
-
-extern NSString * const PXSLSelectionIsChangingNotification;
-extern NSString * const PXSLSelectionDidChangeNotification;
-extern NSString * const PXSLItemWillExpandNotification;
-extern NSString * const PXSLItemDidExpandNotification;
-extern NSString * const PXSLItemWillCollapseNotification;
-extern NSString * const PXSLItemDidCollapseNotification;
-extern NSString * const PXSLDeleteKeyPressedOnRowsNotification;
diff --git a/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListRuntimeAdditions.h b/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListRuntimeAdditions.h
deleted file mode 100755
index 11b40d17b273..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListRuntimeAdditions.h
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-//  PXSourceListRuntimeAdditions.h
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 25/12/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import <Foundation/Foundation.h>
-#import <objc/runtime.h>
-
-extern NSString * const px_protocolMethodNameKey;
-extern NSString * const px_protocolMethodArgumentTypesKey;
-extern NSString * const px_protocolIsRequiredMethodKey;
-
-NSArray *px_allProtocolMethods(Protocol *protocol);
-NSArray *px_methodNamesForProtocol(Protocol *protocol);
-id px_methodNameForSelector(SEL selector);
-
-struct objc_method_description px_methodDescriptionForProtocolMethod(Protocol *protocol, SEL selector);
\ No newline at end of file
diff --git a/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListRuntimeAdditions.m b/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListRuntimeAdditions.m
deleted file mode 100755
index d28212896201..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/Internal/PXSourceListRuntimeAdditions.m
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-//  PXSourceListRuntimeAdditions.m
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 25/12/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import "PXSourceListRuntimeAdditions.h"
-
-NSString * const px_protocolMethodNameKey = @"methodName";
-NSString * const px_protocolMethodArgumentTypesKey = @"types";
-NSString * const px_protocolIsRequiredMethodKey = @"isRequired";
-
-NSArray *px_allProtocolMethods(Protocol *protocol)
-{
-    NSMutableArray *methodList = [[NSMutableArray alloc] init];
-
-    // We have 4 permutations as protocol_copyMethodDescriptionList() takes two BOOL arguments for the types of methods to return.
-    for (NSUInteger i = 0; i < 4; ++i) {
-        BOOL isRequiredMethod = (i / 2) % 2;
-
-        unsigned int numberOfMethodDescriptions = 0;
-        struct objc_method_description *methodDescriptions = protocol_copyMethodDescriptionList(protocol, isRequiredMethod, i % 2, &numberOfMethodDescriptions);
-
-        for (unsigned int j = 0; j < numberOfMethodDescriptions; ++j) {
-            struct objc_method_description methodDescription = methodDescriptions[j];
-            [methodList addObject:@{px_protocolMethodNameKey: px_methodNameForSelector(methodDescription.name),
-                                    px_protocolMethodArgumentTypesKey: [NSString stringWithUTF8String:methodDescription.types],
-                                    px_protocolIsRequiredMethodKey: @(isRequiredMethod)}];
-        }
-
-        free(methodDescriptions);
-    }
-
-    return methodList;
-}
-
-NSArray *px_methodNamesForProtocol(Protocol *protocol)
-{
-    NSMutableArray *methodNames = [[NSMutableArray alloc] init];
-
-    for (NSDictionary *methodInfo in px_allProtocolMethods(protocol))
-        [methodNames addObject:methodInfo[px_protocolMethodNameKey]];
-
-    return methodNames;
-}
-
-id px_methodNameForSelector(SEL selector)
-{
-    return NSStringFromSelector(selector);
-}
-
-struct objc_method_description px_methodDescriptionForProtocolMethod(Protocol *protocol, SEL selector)
-{
-    struct objc_method_description description = {NULL, NULL};
-
-    // We have 4 permutations to check for.
-    for (NSUInteger i = 0; i < 4; ++i) {
-        description = protocol_getMethodDescription(protocol, selector, (i / 2) % 2, i % 2);
-        if (description.types != NULL && description.name != NULL)
-            break;
-    }
-
-    return description;
-}
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceList.h b/modules/gui/macosx/imported/PXSourceList/PXSourceList.h
deleted file mode 100755
index f5d278ac562c..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceList.h
+++ /dev/null
@@ -1,206 +0,0 @@
-//
-//  PXSourceList.h
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 05/09/2009.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import <Cocoa/Cocoa.h>
-
-#import "PXSourceListDelegate.h"
-#import "PXSourceListDataSource.h"
-#import "PXSourceListItem.h"
-#import "PXSourceListBadgeView.h"
-#import "PXSourceListTableCellView.h"
-
-/**
-
- `PXSourceList` is an `NSOutlineView` subclass that makes using a source list (the sidebar
- seen in applications such as iTunes and Mail.app) easier by providing common styling and idiomatic
- behaviour of source lists for you through a clean and simple API. Notable features of PXSourceList include:
-
-   - All root-level, "group" items are displayed using `NSOutlineView`'s group styling by default and requires no additional setup.
-   - Source List items often display an *icon* and *badge* (for information such as unread counts). This is built into
- the API to make configuring these quick and easy, and a badge `NSControl` subclass is included which can be added to
- `NSTableCellView` objects when using `PXSourceList` in *view-based* mode to display badges (see the next section for details).
-   - `PXSourceList` implements support for showing groups as "always expanded" -- where their child items are always shown
- and no 'Show'/'Hide' button is displayed when hovering over the group. This is often useful for listing the main
- contexts your application can be in at any given time, which the user can select to change views. As it is paramount to
- your application's navigation, these groups are often displayed with their child items always shown.
-   - `PXSourceList` objects operate with only one column and do not display a header, something
- which is reflected in the API and makes the control easier to use.
-
- Like `NSOutlineView` and `NSTableView`, a `PXSourceList` object does not store its own data, but retrieves
- values from a weakly-referenced data source (see the `PXSourceListDataSource` protocol). A `PXSourceList`
- object can also have a delegate, to which it sends messages when certain events occur (see the
- `PXSourceListDelegate` protocol for more information).
- 
- ### Cell-based vs. view-based mode
- 
- Like `NSTableView` and `NSOutlineView`, PXSourceList can operate in both cell-based and view-based mode in
- relation to how you provide content to be displayed.
- 
- When using PXSourceList in cell-based mode, it can manage drawing of icons and badges for you through custom
- drawing and `PXSourceListDataSource` methods. However, when using PXSourceList in view-based mode, it can't
- do this directly, because cell views are configured independently in Interface Builder (or programmatically)
- and configured in the `PXSourceListDataSource` method, `-sourceList:viewForItem:`.
- 
- Instead, in view-based mode, you should set up the icon for each item in `-sourceList:viewForItem:` using the
- `imageView` property of `NSTableCellView`, and the `badgeView` property if using `PXSourceListTableCellView`
- objects to display your content. Additionally, there are several classes provided alongside `PXSourceList`
- which make this set up a lot easier:
-
- - `PXSourceListTableCellView`: an `NSTableCellView` subclass which exposes a `badgeView` outlet that can be
-   hooked up to a `PXSourceListBadgeView` instance (see below) in Interface Builder. Along with `NSTableCellView`
-   and its `textField` and `imageView` properties, `PXSourceListTableCellView` is an `NSTableCellView` subclass which
-   allows you to easily display an icon, title and a badge for each item in the Source List without subclassing.
- - `PXSourceListBadgeView`: a view class for displaying badges, which can be used in your table cell views and
-   configured to display a particular badge number. Additionally, instances can be configured to use custom text and
-   background colours, although it will use the regular Source List styling of light text on a grey-blue background
-   by default.
- 
- ### Creating a data source model with `PXSourceListItem`
- 
- Like `NSOutlineView`, PXSourceList queries its data source to build up a tree-like structure of content using
- `-sourceList:numberOfChildrenOfItem:` and `-sourceList:child:ofItem:`. Often it is practical to store the structure
- of your Source List content in a tree structure which can then be easily returned the the Source List using
- these two data source methods.
- 
- To help with this, the generic `PXSourceListItem` class has been included with PXSourceList which can be
- used to build this tree structure. It declares properties such as `title` and `icon` which are useful in
- storing display information which can then be used in `-sourceList:viewForItem:` or `-sourceList:objectValueForItem:`,
- as well as a `children` property with convenience methods for mutating its list of children. Take a look at the
- `PXSourceListItem` documentation for more information, as well as the cell-based and view-based example
- projects included for examples of how to use this class in your own projects.
-
- */
-@interface PXSourceList: NSOutlineView <NSOutlineViewDelegate, NSOutlineViewDataSource>
-
-///---------------------------------------------------------------------------------------
-/// @name Delegate and Data Source
-///---------------------------------------------------------------------------------------
-
-/** Used to set the Source List's data source.
- 
- @warning Unfortunately, due to the way that `PXSourceList` is implemented, sending `-dataSource` to the Source List
- will return a proxy object which is used internally. As such you should only use this setter and not invoke `-dataSource`
- to retrieve the data source object.
- 
- @param dataSource An object to use for the data source.
- 
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)setDataSource:(id<PXSourceListDataSource>)dataSource;
-
-/** Used to set the Source List's delegate.
- 
- @warning Unfortunately, due to the way that `PXSourceList` is implemented, sending `-delegate` to the Source List
- will return a proxy object which is used internally. As such you should only use this setter and not invoke `-delegate`
- to retrieve the data source object.
- 
- @param delegate An object to use for the delegate.
- 
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)setDelegate:(id<PXSourceListDelegate>)delegate;
-
-///---------------------------------------------------------------------------------------
-/// @name Setting Display Attributes
-///---------------------------------------------------------------------------------------
-
-/** Returns the size of icons in points to display in items in the Source List.
- 
- @discussion The default value is 16 x 16.
-
- @warning This property only applies when using `PXSourceList` in cell-based mode. If set on a Source List
- operating in view-based mode, this value is not used.
- 
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-
-@property (nonatomic, assign) NSSize iconSize;
-
-///---------------------------------------------------------------------------------------
-/// @name Working with Groups
-///---------------------------------------------------------------------------------------
-
-@property (readonly) NSUInteger numberOfGroups;
-
-/** Returns a Boolean value that indicates whether a given item in the Source List is a group item.
-
- @param item The item to query about.
- 
- @return `YES` if *item* exists in the Source List and is a group item, otherwise `NO`.
- 
- @discussion "Group" items are defined as root items in the Source List tree hierarchy.
- 
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)isGroupItem:(id)item;
-
-/** Returns a Boolean value that indicates whether a given group item in the Source List is always expanded.
- 
- @param group The given group item.
- 
- @return `YES` if *group* is a group item in the Source List which is displayed as always expanded, or `NO` otherwise.
- 
- @discussion "Group" items are defined as root items in the Source List tree hierarchy. A group item that is displayed
- as always expanded doesn't show a 'Show'/'Hide' button on hover as with regular group items. It is automatically expanded
- when the Source List's data is reloaded and cannot be collapsed.
- 
- This method calls the `-sourceList:isGroupAlwaysExpanded:` method on the Source List's delegate to determine
- whether the particular group item is displayed as always expanded or not.
- 
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)isGroupAlwaysExpanded:(id)group;
-
-///---------------------------------------------------------------------------------------
-/// @name Working with Badges
-///---------------------------------------------------------------------------------------
-
-/** Returns a Boolean value that indicates whether a given item in the Source List displays a badge.
-
- @param item The given item.
-
- @return `YES` if the Source List is operating in cell-based mode and *item* displays a badge, or `NO` otherwise.
-
- @discussion This method calls the `-sourceList:itemHasBadge:` method on the Source List's delegate to determine
- whether the item displays a badge or not.
- 
- @warning This method only applies when using a Source List in cell-based mode. If sent to a Source List in view-based mode, this
- method returns `NO`.
- 
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)itemHasBadge:(id)item;
-
-/** Returns the integer value of the badge for a given item.
-
- @param item The given item.
-
- @return The integer value of the badge for *item* if the Source List is operating in cell-based mode and *item* displays a badge, or `NSNotFound` otherwise.
-
- @discussion This method calls the `-sourceList:badgeValueForItem:` method on the Source List's data source to determine
- the item's badge value.
-
- @warning This method only applies when using a Source List in cell-based mode. If sent to a Source List in view-based mode, this
- method returns `NSNotFound`.
- 
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (NSInteger)badgeValueForItem:(id)item;
-
-/* === Unavailable methods ===
- 
-   As a side-effect of PXSourceList's internal implementation, these methods shouldn't be used to query the delegate or data
-   source. I am *always* looking for a way to remove this limitation. Please file an issue at https://github.com/Perspx/PXSourceList if you
-   have any ideas!
- */
-- (id <NSOutlineViewDelegate>)delegate __attribute__((unavailable("-delegate shouldn't be called on PXSourceList. See the documentation for more information.")));
-- (id <NSOutlineViewDataSource>)dataSource __attribute__((unavailable("-dataSource shouldn't be called on PXSourceList. See the documentation for more information.")));
-
-@end
-
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceList.m b/modules/gui/macosx/imported/PXSourceList/PXSourceList.m
deleted file mode 100755
index fd7f74b419de..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceList.m
+++ /dev/null
@@ -1,578 +0,0 @@
-//
-//  PXSourceList.m
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 05/09/2009.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import "PXSourceList.h"
-#import "PXSourceListBadgeCell.h"
-#import "Internal/PXSourceListDelegateDataSourceProxy.h"
-#import "Internal/PXSourceListPrivateConstants.h"
-
-//Layout constants
-static const CGFloat minBadgeWidth = 22.0;              // The minimum badge width for each item (default 22.0).
-static const CGFloat badgeHeight = 14.0;                // The badge height for each item (default 14.0).
-static const CGFloat rowRightMargin = 5.0;              // The spacing between the right edge of the badge and the edge of the table column.
-static const CGFloat iconSpacing = 2.0;                 // The spacing between the icon and it's adjacent cell.
-static const CGFloat disclosureTriangleSpace = 18.0;    // The indentation reserved for disclosure triangles for non-group items.
-
-//Delegate notification constants
-NSString * const PXSLSelectionIsChangingNotification = @"PXSourceListSelectionIsChanging";
-NSString * const PXSLSelectionDidChangeNotification = @"PXSourceListSelectionDidChange";
-NSString * const PXSLItemWillExpandNotification = @"PXSourceListItemWillExpand";
-NSString * const PXSLItemDidExpandNotification = @"PXSourceListItemDidExpand";
-NSString * const PXSLItemWillCollapseNotification = @"PXSourceListItemWillCollapse";
-NSString * const PXSLItemDidCollapseNotification = @"PXSourceListItemDidCollapse";
-NSString * const PXSLDeleteKeyPressedOnRowsNotification = @"PXSourceListDeleteKeyPressedOnRows";
-
-#pragma mark -
-@interface PXSourceList ()
-
-@property (strong, nonatomic) PXSourceListDelegateDataSourceProxy *delegateDataSourceProxy;
-@property (strong, readonly) PXSourceListBadgeCell *reusableBadgeCell;
-
-@end
-
-#pragma mark -
-@implementation PXSourceList
-
-@synthesize reusableBadgeCell = _reusableBadgeCell;
-
-#pragma mark - Setup/Teardown
-
-- (id)initWithCoder:(NSCoder*)decoder
-{
-    if(self=[super initWithCoder:decoder]) {
-        [self PXSL_setup];
-    }
-
-    return self;
-}
-
-- (id)initWithFrame:(NSRect)frameRect
-{
-    if((self = [super initWithFrame:frameRect])) {
-        [self PXSL_setup];
-    }
-
-    return self;
-}
-
-- (void)PXSL_setup
-{
-    _iconSize = NSMakeSize(16,16);
-    _delegateDataSourceProxy = [[PXSourceListDelegateDataSourceProxy alloc] initWithSourceList:self];
-}
-
-- (void)dealloc
-{
-    _delegateDataSourceProxy = nil;
-    //Remove ourselves as the delegate and data source to be safe
-    [super setDataSource:nil];
-    [super setDelegate:nil];
-}
-
-
-#pragma mark -
-#pragma mark Custom Accessors
-
-- (void)setDelegate:(id<PXSourceListDelegate>)aDelegate
-{
-    self.delegateDataSourceProxy.delegate = aDelegate;
-
-    [super setDelegate:nil];
-    if (aDelegate)
-        [super setDelegate:self.delegateDataSourceProxy];
-}
-
-
-- (void)setDataSource:(id<PXSourceListDataSource>)aDataSource
-{
-    self.delegateDataSourceProxy.dataSource = aDataSource;
-
-    [super setDataSource:nil];
-    if (aDataSource)
-        [super setDataSource:self.delegateDataSourceProxy];
-
-    [self reloadData];
-}
-
-- (void)setIconSize:(NSSize)newIconSize
-{
-    _iconSize = newIconSize;
-
-    CGFloat rowHeight = [self rowHeight];
-
-    //Make sure icon height does not exceed row height; if so constrain, keeping width and height in proportion
-    if(_iconSize.height>rowHeight)
-    {
-        _iconSize.width = _iconSize.width * (rowHeight/_iconSize.height);
-        _iconSize.height = rowHeight;
-    }
-}
-
-- (PXSourceListBadgeCell *)reusableBadgeCell
-{
-    if (!_reusableBadgeCell)
-        _reusableBadgeCell = [[PXSourceListBadgeCell alloc] init];
-
-    return _reusableBadgeCell;
-}
-
-- (BOOL)floatsGroupRows
-{
-    return NO;
-}
-
-- (void)setFloatsGroupRows:(BOOL)value
-{
-    [super setFloatsGroupRows:NO];
-}
-
-#pragma mark -
-#pragma mark Data Management
-
-- (BOOL)isViewBasedSourceList
-{
-    return [self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:viewForItem:)];
-}
-
-- (void)reloadData
-{
-    [super reloadData];
-
-    //Expand items that are displayed as always expanded
-    if([self.delegateDataSourceProxy conformsToProtocol:@protocol(PXSourceListDataSource)] &&
-       [self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:isGroupAlwaysExpanded:)])
-    {
-        for(NSUInteger i=0;i<[self numberOfGroups];i++)
-        {
-            id item = [self.delegateDataSourceProxy sourceList:self child:i ofItem:nil];
-
-            if([self isGroupAlwaysExpanded:item]) {
-                [self expandItem:item expandChildren:NO];
-            }
-        }
-
-    }
-
-    //If there are selected rows and the item hierarchy has changed, make sure a Group row isn't
-    //selected
-    if([self numberOfSelectedRows]>0) {
-        NSIndexSet *selectedIndexes = [self selectedRowIndexes];
-        NSUInteger firstSelectedRow = [selectedIndexes firstIndex];
-
-        //Is a group item selected?
-        if([self isGroupItem:[self itemAtRow:firstSelectedRow]]) {
-            //Work backwards to find the first non-group row
-            BOOL foundRow = NO;
-            for(NSUInteger i=firstSelectedRow;i>0;i--)
-            {
-                if(![self isGroupItem:[self itemAtRow:i]]) {
-                    [self selectRowIndexes:[NSIndexSet indexSetWithIndex:i] byExtendingSelection:NO];
-                    foundRow = YES;
-                    break;
-                }
-            }
-
-            //If there is no non-group row preceding the currently selected group item, remove the selection
-            //from the Source List
-            if(!foundRow) {
-                [self deselectAll:self];
-            }
-        }
-    }
-    else if(![self allowsEmptySelection]&&[self numberOfSelectedRows]==0)
-    {
-        //Select the first non-group row if no rows are selected, and empty selection is disallowed
-        for(NSUInteger i=0;i<[self numberOfRows];i++)
-        {
-            if(![self isGroupItem:[self itemAtRow:i]]) {
-                [self selectRowIndexes:[NSIndexSet indexSetWithIndex:i] byExtendingSelection:NO];
-                break;
-            }
-        }
-    }
-}
-
-- (NSUInteger)numberOfGroups
-{
-    if([self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:numberOfChildrenOfItem:)]) {
-        return [self.delegateDataSourceProxy sourceList:self numberOfChildrenOfItem:nil];
-    }
-
-    return 0;
-}
-
-
-- (BOOL)isGroupItem:(id)item
-{
-    //Groups are defined as root items (at level 0)
-    return 0==[self levelForItem:item];
-}
-
-
-- (BOOL)isGroupAlwaysExpanded:(id)group
-{
-    //Make sure that the item IS a group to prevent unwanted queries sent to the data source
-    if([self isGroupItem:group]) {
-        //Query the data source
-        if([self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:isGroupAlwaysExpanded:)]) {
-            return [self.delegateDataSourceProxy sourceList:self isGroupAlwaysExpanded:group];
-        }
-    }
-
-    return NO;
-}
-
-
-- (BOOL)itemHasBadge:(id)item
-{
-    // Since badges are managed by custom views and logic in view-based mode, we can't determine this.
-    if (self.isViewBasedSourceList)
-        return NO;
-
-    if([self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:itemHasBadge:)]) {
-        return [self.delegateDataSourceProxy sourceList:self itemHasBadge:item];
-    }
-
-    return NO;
-}
-
-- (NSInteger)badgeValueForItem:(id)item
-{
-    // Since badges are managed by custom views and logic in view-based mode, we can't determine this.
-    if (self.isViewBasedSourceList || ![self itemHasBadge:item])
-        return NSNotFound;
-
-    if([self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:badgeValueForItem:)]) {
-        return [self.delegateDataSourceProxy sourceList:self badgeValueForItem:item];
-    }
-
-    return NSNotFound;
-}
-
-#pragma mark -
-#pragma mark Selection Handling
-
-- (void)selectRowIndexes:(NSIndexSet*)indexes byExtendingSelection:(BOOL)extend
-{
-    NSUInteger numberOfIndexes = [indexes count];
-
-    //Prevent empty selection if we don't want it
-    if(![self allowsEmptySelection]&&0==numberOfIndexes) {
-        return;
-    }
-
-    //Would use blocks but we're also targeting 10.5...
-    //Get the selected indexes
-    NSUInteger *selectedIndexes = malloc(sizeof(NSUInteger)*numberOfIndexes);
-    [indexes getIndexes:selectedIndexes maxCount:numberOfIndexes inIndexRange:nil];
-
-    //Loop through the indexes and only add non-group row indexes
-    //Allows selection across groups without selecting the group rows
-    NSMutableIndexSet *newSelectionIndexes = [NSMutableIndexSet indexSet];
-    for(NSInteger i=0;i<numberOfIndexes;i++)
-    {
-        if(![self isGroupItem:[self itemAtRow:selectedIndexes[i]]]) {
-            [newSelectionIndexes addIndex:selectedIndexes[i]];
-        }
-    }
-
-    //If there are any non-group rows selected
-    if([newSelectionIndexes count]>0) {
-        [super selectRowIndexes:newSelectionIndexes byExtendingSelection:extend];
-    }
-
-    //C memory management... *sigh*
-    free(selectedIndexes);
-}
-
-#pragma mark -
-#pragma mark Layout
-
-- (NSRect)frameOfOutlineCellAtRow:(NSInteger)row
-{
-    //Return a zero-rect if the item is always expanded (a disclosure triangle will not be drawn)
-    if([self isGroupAlwaysExpanded:[self itemAtRow:row]]) {
-        return NSZeroRect;
-    }
-
-    NSRect frame = [super frameOfOutlineCellAtRow:row];
-
-    if([self levelForRow:row] > 0) {
-        frame.origin.x = [self levelForRow:row] * [self indentationPerLevel];
-    }
-
-    return frame;
-}
-
-
-- (NSRect)frameOfCellAtColumn:(NSInteger)column row:(NSInteger)row
-{
-    if (self.isViewBasedSourceList)
-        return [super frameOfCellAtColumn:column row:row];
-
-    id item = [self itemAtRow:row];
-
-    NSCell *cell = [self preparedCellAtColumn:column row:row];
-    NSSize cellSize = [cell cellSize];
-    if (!([cell type] == NSImageCellType) && !([cell type] == NSTextCellType))
-        cellSize = [cell cellSizeForBounds:[super frameOfCellAtColumn:column row:row]];
-    NSRect cellFrame = [super frameOfCellAtColumn:column row:row];
-
-    NSRect rowRect = [self rectOfRow:row];
-
-    if([self isGroupItem:item])
-    {
-        CGFloat minX = NSMinX(cellFrame);
-
-        //Set the origin x-coord; if there are no children of the group at current, there will still be a
-        //margin to the left of the cell (in cellFrame), which we don't want
-        if([self isGroupAlwaysExpanded:[self itemAtRow:row]]) {
-            minX = 7;
-        }
-
-        return NSMakeRect(minX,
-                          NSMidY(cellFrame)-(cellSize.height/2.0),
-                          NSWidth(rowRect)-minX,
-                          cellSize.height);
-    }
-    else
-    {
-        CGFloat leftIndent = [self levelForRow:row]*[self indentationPerLevel]+disclosureTriangleSpace;
-
-        //Calculate space left for a badge if need be
-        CGFloat rightIndent = [self sizeOfBadgeAtRow:row].width+rowRightMargin;
-
-        //Allow space for an icon if need be
-        if(![self isGroupItem:item] && [self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:itemHasIcon:)])
-        {
-            if([self.delegateDataSourceProxy sourceList:self itemHasIcon:item]) {
-                leftIndent += [self iconSize].width+(iconSpacing*2);
-            }
-        }
-
-        return NSMakeRect(leftIndent,
-                          NSMidY(rowRect)-(cellSize.height/2.0),
-                          NSWidth(rowRect)-rightIndent-leftIndent,
-                          cellSize.height);
-    }
-}
-
-
-//This method calculates and returns the size of the badge for the row index passed to the method. If the
-//row for the row index passed to the method does not have a badge, then NSZeroSize is returned.
-- (NSSize)sizeOfBadgeAtRow:(NSInteger)rowIndex
-{
-    id rowItem = [self itemAtRow:rowIndex];
-
-    if (![self itemHasBadge:rowItem])
-        return NSZeroSize;
-
-    self.reusableBadgeCell.integerValue = [self badgeValueForItem:rowItem];
-
-    return NSMakeSize(fmax(self.reusableBadgeCell.cellSize.width, minBadgeWidth), badgeHeight);
-}
-
-- (void)viewDidMoveToSuperview
-{
-    //If set to YES, this will cause display issues in Lion where the right part of the outline view is cut off
-    [self setAutoresizesOutlineColumn:NO];
-}
-
-#pragma mark -
-#pragma mark Drawing
-
-- (void)drawRow:(NSInteger)rowIndex clipRect:(NSRect)clipRect
-{
-    [super drawRow:rowIndex clipRect:clipRect];
-
-    // We only do drawing here if the Source List is cell-based.
-    if (self.isViewBasedSourceList)
-        return;
-
-    id item = [self itemAtRow:rowIndex];
-
-    //Draw an icon if the item has one
-    if(![self isGroupItem:item] && [self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:itemHasIcon:)])
-    {
-        if([self.delegateDataSourceProxy sourceList:self itemHasIcon:item])
-        {
-            NSRect cellFrame = [self frameOfCellAtColumn:0 row:rowIndex];
-            NSSize iconSize = [self iconSize];
-            NSRect iconRect = NSMakeRect(NSMinX(cellFrame)-iconSize.width-iconSpacing,
-                                         NSMidY(cellFrame)-(iconSize.height/2.0f),
-                                         iconSize.width,
-                                         iconSize.height);
-
-            if([self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:iconForItem:)])
-            {
-                NSImage *icon = [self.delegateDataSourceProxy sourceList:self iconForItem:item];
-
-                if(icon!=nil)
-                {
-                    NSSize actualIconSize = [icon size];
-
-                    //If the icon is *smaller* than the size retrieved from the -iconSize property, make sure we
-                    //reduce the size of the rectangle to draw the icon in, so that it is not stretched.
-                    if((actualIconSize.width<iconSize.width)||(actualIconSize.height<iconSize.height))
-                    {
-                        iconRect = NSMakeRect(NSMidX(iconRect)-(actualIconSize.width/2.0f),
-                                              NSMidY(iconRect)-(actualIconSize.height/2.0f),
-                                              actualIconSize.width,
-                                              actualIconSize.height);
-                    }
-
-                    [icon drawInRect:iconRect
-                            fromRect:NSZeroRect
-                           operation:NSCompositeSourceOver
-                            fraction:1
-                      respectFlipped:YES hints:nil];
-                }
-            }
-        }
-    }
-
-    //Draw the badge if the item has one
-    if([self itemHasBadge:item])
-    {
-        NSRect rowRect = [self rectOfRow:rowIndex];
-        NSSize badgeSize = [self sizeOfBadgeAtRow:rowIndex];
-
-        NSRect badgeFrame = NSMakeRect(NSMaxX(rowRect)-badgeSize.width-rowRightMargin,
-                                       NSMidY(rowRect)-(badgeSize.height/2.0),
-                                       badgeSize.width,
-                                       badgeSize.height);
-
-        [self drawBadgeForRow:rowIndex inRect:badgeFrame];
-    }
-}
-
-- (void)drawBadgeForRow:(NSInteger)rowIndex inRect:(NSRect)badgeFrame
-{
-    id rowItem = [self itemAtRow:rowIndex];
-
-    self.reusableBadgeCell.badgeValue = [self badgeValueForItem:rowItem];
-    if ([self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:badgeTextColorForItem:)])
-        self.reusableBadgeCell.textColor = [self.delegateDataSourceProxy sourceList:self badgeTextColorForItem:rowItem];
-    if ([self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:badgeBackgroundColorForItem:)])
-        self.reusableBadgeCell.textColor = [self.delegateDataSourceProxy sourceList:self badgeBackgroundColorForItem:rowItem];
-    self.reusableBadgeCell.highlighted = [self.selectedRowIndexes containsIndex:rowIndex];
-
-    [self.reusableBadgeCell drawWithFrame:badgeFrame inView:self];
-}
-
-#pragma mark -
-#pragma mark Keyboard Handling
-
-- (void)keyDown:(NSEvent *)theEvent
-{
-    NSIndexSet *selectedIndexes = [self selectedRowIndexes];
-
-    NSString *keyCharacters = [theEvent characters];
-
-    //Make sure we have a selection
-    if([selectedIndexes count]>0)
-    {
-        if([keyCharacters length]>0)
-        {
-            unichar firstKey = [keyCharacters characterAtIndex:0];
-
-            if(firstKey==NSUpArrowFunctionKey||firstKey==NSDownArrowFunctionKey)
-            {
-                //Handle keyboard navigation across groups
-                if([selectedIndexes count]==1&&!([theEvent modifierFlags] & NSShiftKeyMask))
-                {
-                    int delta = firstKey==NSDownArrowFunctionKey?1:-1;  //Search "backwards" if up arrow, "forwards" if down
-                    NSInteger newRow = [selectedIndexes firstIndex];
-
-                    //Keep incrementing/decrementing the row until a non-header row is reached
-                    do {
-                        newRow+=delta;
-
-                        //If out of bounds of the number of rows..
-                        if(newRow<0||newRow==[self numberOfRows])
-                            break;
-                    } while([self isGroupItem:[self itemAtRow:newRow]]);
-
-
-                    [self selectRowIndexes:[NSIndexSet indexSetWithIndex:newRow] byExtendingSelection:NO];
-                    return;
-                }
-            }
-            else if(firstKey==NSDeleteCharacter||firstKey==NSBackspaceCharacter||firstKey==0xf728)
-            {
-                //Post the notification
-                [[NSNotificationCenter defaultCenter] postNotificationName:PXSLDeleteKeyPressedOnRowsNotification
-                                                                    object:self
-                                                                  userInfo:[NSDictionary dictionaryWithObject:selectedIndexes forKey:@"rows"]];
-
-                return;
-            }
-        }
-    }
-
-    //We don't care about it
-    [super keyDown:theEvent];
-}
-
-#pragma mark -
-#pragma mark Menu Handling
-
-
-- (NSMenu *)menuForEvent:(NSEvent *)theEvent
-{
-    NSMenu * m = nil;
-    if([self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:menuForEvent:item:)]) {
-        NSPoint clickPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
-        NSInteger row = [self rowAtPoint:clickPoint];
-        id clickedItem = [self itemAtRow:row];
-        m = [self.delegateDataSourceProxy sourceList:self menuForEvent:theEvent item:clickedItem];
-    }
-    if (m == nil) {
-        m = [super menuForEvent:theEvent];
-    }
-    return m;
-}
-
-#pragma mark - Custom NSOutlineView Delegate Method Implementations
-
-- (BOOL)outlineView:(NSOutlineView *)outlineView shouldCollapseItem:(id)item
-{
-    // Make sure the item isn't displayed as always expanded
-    if([self isGroupItem:item] && [self isGroupAlwaysExpanded:item])
-        return NO;
-
-    if([self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:shouldCollapseItem:)])
-        return [self.delegateDataSourceProxy sourceList:self shouldCollapseItem:item];
-
-    return YES;
-}
-
-- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item
-{
-    // Make sure that the item isn't a group as they can't be selected
-    if(![self isGroupItem:item] && [self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:shouldSelectItem:)])
-        return [self.delegateDataSourceProxy sourceList:self shouldSelectItem:item];
-
-    return ![self isGroupItem:item];
-}
-
-- (BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item
-{
-    if(![self isGroupItem:item] && [self.delegateDataSourceProxy respondsToSelector:@selector(sourceList:shouldEditItem:)])
-        return [self.delegateDataSourceProxy sourceList:self shouldEditItem:item];
-
-    return ![self isGroupItem:item];
-}
-
-- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item
-{
-    return [self isGroupItem:item];
-}
-
-@end
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeCell.h b/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeCell.h
deleted file mode 100755
index e08e6a970fa9..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeCell.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-//  PXSourceListBadgeCell.h
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 15/11/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import <Cocoa/Cocoa.h>
-
-/* This is the cell which backs drawing done by PXSourceListBadgeView, and is used internally for
-   drawing badges when PXSourceList is used in cell-based mode.
- 
-   You shouldn't need to interact with this class directly.
- */
-@interface PXSourceListBadgeCell : NSCell
-
-@property (strong, nonatomic) NSColor *textColor;
-@property (strong, nonatomic) NSColor *backgroundColor;
-@property (assign, nonatomic) NSUInteger badgeValue;
-
-@end
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeCell.m b/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeCell.m
deleted file mode 100755
index a1f07868981a..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeCell.m
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-//  PXSourceListBadgeCell.m
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 15/11/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import "PXSourceListBadgeCell.h"
-
-#import "PXSourceList.h"
-
-//Drawing constants
-static inline NSColor *badgeBackgroundColor() { return [NSColor colorWithCalibratedRed:(152/255.0) green:(168/255.0) blue:(202/255.0) alpha:1]; }
-static inline NSColor *badgeHiddenBackgroundColor() { return [NSColor colorWithDeviceWhite:(180/255.0) alpha:1]; }
-static inline NSColor *badgeSelectedTextColor() { return [NSColor keyboardFocusIndicatorColor]; }
-static inline NSColor *badgeSelectedUnfocusedTextColor() { return [NSColor colorWithCalibratedRed:(153/255.0) green:(169/255.0) blue:(203/255.0) alpha:1]; }
-static inline NSColor *badgeSelectedHiddenTextColor() { return [NSColor colorWithCalibratedWhite:(170/255.0) alpha:1]; }
-static inline NSFont *badgeFont() { return [NSFont boldSystemFontOfSize:11]; }
-
-// Sizing constants.
-static const CGFloat badgeLeftAndRightPadding = 5.0;
-
-@implementation PXSourceListBadgeCell
-
-- (id)init
-{
-    if (!(self = [super initTextCell:@""]))
-        return nil;
-
-    return self;
-}
-
-- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
-{
-    CGFloat borderRadius = NSHeight(cellFrame)/2.0f;
-	NSBezierPath *badgePath = [NSBezierPath bezierPathWithRoundedRect:cellFrame xRadius:borderRadius yRadius:borderRadius];
-
-	// Get the window and control state to determine the badge colours used.
-	BOOL isMainWindowVisible = [[NSApp mainWindow] isVisible];
-	NSDictionary *attributes;
-	NSColor *backgroundColor;
-
-	if(self.isHighlighted || self.backgroundStyle == NSBackgroundStyleDark) {
-		backgroundColor = [NSColor whiteColor];
-
-        NSResponder *firstResponder = controlView.window.firstResponder;
-        BOOL isFocused = NO;
-
-        // Starting with the closest ancestor of the control view and the first responder (to make sure both views are in the
-        // same subtree of the view hierarchy), keep going up the view hierarchy until we hit a PXSourceList instance to tell
-        // if the source list is focused.
-        // This covers both the cell-based and view-based cases as well as if a child view of the NSTableCellView (such as
-        // a text field) is focused.
-        if ([firstResponder isKindOfClass:[NSView class]]) {
-            NSView *view = [(NSView*)firstResponder ancestorSharedWithView:controlView];
-            do {
-                if ([view isKindOfClass:[PXSourceList class]]) {
-                    isFocused = YES;
-                    break;
-                }
-            } while ((view = [view superview]));
-        }
-
-        NSColor *textColor;
-
-		if (isMainWindowVisible && isFocused)
-			textColor = badgeSelectedTextColor();
-		else if (isMainWindowVisible && !isFocused)
-			textColor = badgeSelectedUnfocusedTextColor();
-		else
-			textColor = badgeSelectedHiddenTextColor();
-
-		attributes = @{NSForegroundColorAttributeName: textColor};
-	} else {
-		NSColor *textColor = textColor = self.textColor ? self.textColor : [NSColor whiteColor];;
-
-		if(isMainWindowVisible)
-            backgroundColor = self.backgroundColor ? self.backgroundColor : badgeBackgroundColor();
-		else
-			backgroundColor = badgeHiddenBackgroundColor();
-
-		attributes = @{NSForegroundColorAttributeName: textColor};
-	}
-
-	[backgroundColor set];
-	[badgePath fill];
-
-	//Draw the badge text
-    NSMutableAttributedString *badgeString = [self.badgeString mutableCopy];
-    [badgeString addAttributes:attributes range:NSMakeRange(0, badgeString.length)];
-
-	NSSize stringSize = badgeString.size;
-	NSPoint badgeTextPoint = NSMakePoint(NSMidX(cellFrame) - (stringSize.width/2.0),
-										 NSMidY(cellFrame) - (stringSize.height/2.0));
-	[badgeString drawAtPoint:badgeTextPoint];
-}
-
-- (NSSize)cellSize
-{
-    NSSize size = self.badgeString.size;
-    size.width += 2 * badgeLeftAndRightPadding;
-
-    return size;
-}
-
-- (NSAttributedString *)badgeString
-{
-	return [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%ld", self.badgeValue]
-                                           attributes:@{NSFontAttributeName: badgeFont()}];
-}
-
-- (id)accessibilityAttributeValue:(NSString *)attribute
-{
-    if ([attribute isEqualToString:NSAccessibilityValueAttribute])
-        return @(_badgeValue).description;
-    else
-        return [super accessibilityAttributeValue:attribute];
-}
-
-@end
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeView.h b/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeView.h
deleted file mode 100755
index 6083dcaf6311..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeView.h
+++ /dev/null
@@ -1,72 +0,0 @@
-//
-//  PXSourceListBadgeView.h
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 15/11/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import <Cocoa/Cocoa.h>
-
-/**
- `PXSourceListBadgeView` is an `NSControl` subclass which can be used for displaying Source List badges.
- 
- @discussion Instances of this class can be used by table cell views which are used to display content when
- using `PXSourceList` in view-based mode. These table cell views have to be set up to display badges in the
- `PXSourceListDataSource` method `-sourceList:viewForItem:` unlike when using `PXSourceList` in cell-based mode,
- where this is done automatically behind-the-scenes.
- 
- `PXSourceListTableCellView` has an outlet for a `PXSourceListBadgeView` instance which can be hooked up in Interface
- Builder or set in code.
- 
- ### Display customisation
- 
- `PXSourceListBadgeView` displays badges like a 'system default' Source List such as in Mail.app with a grey-blue
- background and light text. However, the colours used for the badge value and the background colour of the badge can be
- changed by using the `textColor` and `backgroundColor` properties.
- 
- @warning Note that the `textColor` and `backgroundColor` properties are only respected when the row displaying the badge
- isn't highlighted. When the row is highlighted, the badge is displayed with a white background and a blue text colour.
-
- */
-@interface PXSourceListBadgeView : NSControl
-
-///---------------------------------------------------------------------------------------
-/// @name Reading and setting the badge value
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns the numeric value displayed by the receiver.
- 
- @since Requires the Mac OS X 10.7 SDK or above.
- */
-@property (assign, nonatomic) NSUInteger badgeValue;
-
-///---------------------------------------------------------------------------------------
-/// @name Customising the badge appearance
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns the custom text colour used to display the receiver.
- @discussion The default value for this property is `nil`. Set this property to `nil` to use the default light badge text colour.
- 
- @see backgroundColor
- 
- @warning Note that this property is only respected when the row displaying the badge isn't highlighted. When the row is highlighted, the badge is displayed with a blue text colour.
-
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-@property (strong, nonatomic) NSColor *textColor;
-
-/**
- @brief Returns the custom background colour used to display the receiver.
- @discussion The default value for this property is `nil`. Set this property to `nil` to use the default grey-blue badge background colour.
- 
- @see textColor
- 
- @warning Note that this property is only respected when the row displaying the badge isn't highlighted. When the row is highlighted, the badge is displayed with a white background colour.
-
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-@property (strong, nonatomic) NSColor *backgroundColor;
-
-@end
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeView.m b/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeView.m
deleted file mode 100755
index 8d13ab9d5011..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceListBadgeView.m
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-//  PXSourceListBadgeView.m
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 15/11/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import "PXSourceListBadgeView.h"
-#import "PXSourceListBadgeCell.h"
-
-@implementation PXSourceListBadgeView
-
-+ (Class)cellClass
-{
-    return [PXSourceListBadgeCell class];
-}
-
-#pragma mark - Custom Accessors
-
-- (void)setBadgeValue:(NSUInteger)badgeValue
-{
-    [self.cell setBadgeValue:badgeValue];
-}
-
-- (NSUInteger)badgeValue
-{
-    return [self.cell badgeValue];
-}
-
-- (NSColor *)textColor
-{
-    return [self.cell textColor];
-}
-
-- (void)setTextColor:(NSColor *)textColor
-{
-    [self.cell setTextColor:textColor];
-}
-
-- (NSColor *)backgroundColor
-{
-    return [self.cell backgroundColor];
-}
-
-- (void)setBackgroundColor:(NSColor *)backgroundColor
-{
-    [self.cell setBackgroundColor:backgroundColor];
-}
-
-@end
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceListDataSource.h b/modules/gui/macosx/imported/PXSourceList/PXSourceListDataSource.h
deleted file mode 100755
index 4152adc431af..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceListDataSource.h
+++ /dev/null
@@ -1,396 +0,0 @@
-//
-//  PXSourceListDataSource.h
-//  PXViewKit
-//
-//  Created by Alex Rozanski on 17/10/2009.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import <Cocoa/Cocoa.h>
-
-@class PXSourceList;
-
-/**
- The `PXSourceListDataSource` protocol defines methods that can be implemented by data sources of `PXSourceList` objects.
- 
- Despite many of these methods being optional in their implementation, several methods **must** be implemented by a data source of a `PXSourceList` object. These are:
-
-   - `sourceList:numberOfChildrenOfItem:`
-   - `sourceList:child:ofItem:`
-   - `sourceList:isItemExpandable:`
-   - `sourceList:objectValueForItem:` (although this is optional if the Source List is operating in view-based mode).
- 
- ### PXSourceList in View-based mode
- 
- As with `NSOutlineView`, `PXSourceList` can operate in cell-based or view-based mode. Of particular note, the
- following `PXSourceListDataSource` methods are *not* used by `PXSourceList` when operating in view-based mode.
-
-   - `-sourceList:itemHasBadge:`
-   - `-sourceList:badgeValueForItem:`
-   - `-sourceList:badgeTextColorForItem:`
-   - `-sourceList:badgeBackgroundColorForItem:`
-   - `-sourceList:itemHasIcon:`
-   - `-sourceList:iconForItem:`
- 
- These properties can be configured in the `PXSourceListDelegate` protocol method, `-sourceList:viewForItem:`.
-
- @warning Most of the methods defined by this protocol are analagous to those declared by `NSOutlineViewDataSource` (and are marked as such in the member's documentation), but are prefixed by "sourceList:" instead of "outlineView:". Only the most basic information about these methods is included here, and you should refer to the `NSOutlineViewDataSource` protocol documentation for more information.
- */
-@protocol PXSourceListDataSource <NSObject>
-
-@required
-///---------------------------------------------------------------------------------------
-/// @name Working with Items in a Source List
-///---------------------------------------------------------------------------------------
-/** 
- @brief Returns the number of child items of a given item.
-
- @param sourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return The number of immediate child items of *item*. If *item* is `nil` then you should return the number of top-level items in the Source List item hierarchy.
- 
- @since Requires PXSourceList 0.8 and above and the OS X v10.5 SDK or above.
- 
- @see sourceList:child:ofItem:
- */
-- (NSUInteger)sourceList:(PXSourceList*)sourceList numberOfChildrenOfItem:(id)item;
-
-/**
- @brief Returns the direct child of a given item at the specified index.
-
- @param aSourceList The Source List that sent the message.
- @param index The index of the child item of *item* to return.
- @param item An item in the data source.
-
- @return The immediate child of *item* at the specified *index*. If *item* is `nil`, then return the top-level item with index of *index*.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
-
- @see sourceList:numberOfChildrenOfItem:
- */
-- (id)sourceList:(PXSourceList*)aSourceList child:(NSUInteger)index ofItem:(id)item;
-
-/**
- @brief Returns a Boolean value indicating whether a given item in the Source List is expandable.
- @discussion An expandable item is one which contains child items, and can be expanded to display these. Additionally, if a group item is always displayed as expanded (denoted by `-sourceList:isGroupAlwaysExpanded:` from the `PXSourceListDelegate` protocol) then you must return `YES` from this method for the given group item.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return `YES` if *item* can be expanded, or `NO` otherwise.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList isItemExpandable:(id)item;
-
-@optional
-/**
- @brief Returns the data object associated with a given item.
- @discussion When using the Source List in cell-based mode, returning the text to be displayed for cells representing Group items, the Source List will *not* transform the titles to uppercase so that they display like in iTunes or iCal, such as "LIBRARY". This is to account for edge cases such as words like "iTunes" which should be capitalized as "iTUNES" and so to do this you must pass uppercase titles yourself. It is strongly recommended that text displayed for group items is uppercased in this way, to fit the conventional style of Source List Group headers.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return The data object associated with `item`.
-
- @warning This is a required method when using the Source List in cell-based mode.
-
- @see sourceList:setObjectValue:forItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (id)sourceList:(PXSourceList*)aSourceList objectValueForItem:(id)item;
-
-/**
- @brief Sets the associated object value of a specified item.
- @discussion This method must be implemented if the Source List is operating in cell-based mode and any items in the Source List are editable.
-
- @param aSourceList The Source List that sent the message.
- @param object The new object value for the given item.
- @param item An item in the data source.
-
- @see sourceList:objectValueForItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)sourceList:(PXSourceList*)aSourceList setObjectValue:(id)object forItem:(id)item;
-
-///---------------------------------------------------------------------------------------
-/// @name Working with Badges
-///---------------------------------------------------------------------------------------
-
-/**
- @brief Returns a Boolean specifying whether a given item shows a badge or not.
- @discussion This method can be implemented by the data source to specify whether a given item displays a badge or not. A badge is a rounded rectangle containing a number (the badge value), displayed to the right of a row's cell.
-
- This method must be implemented for the other badge-related data source methods – sourceList:badgeValueForItem:, sourceList:badgeTextColorForItem: and sourceList:badgeBackgroundColorForItem: – to be called.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return `YES` if *item* should display a badge, or `NO` otherwise.
- 
- @warning This method is only used by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, the view for each cell is responsible for managing a badge, if applicable.
-
- @see sourceList:badgeValueForItem:
- @see sourceList:badgeTextColorForItem:
- @see sourceList:badgeBackgroundColorForItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList itemHasBadge:(id)item;
-
-/**
- @brief Returns an integer specifying the badge value for a particular item.
- @discussion This method can be implemented by the data source to specify a badge value for any particular item. If you want an item to display a badge, you must also implement sourceList:itemHasBadge: and return `YES` for that item. Returning `NO` for items in sourceList:itemHasBadge: means that this method will not be called for that item.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return The badge value for *item*.
- 
- @warning This method is only used by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, the view for each cell is responsible for managing a badge, if applicable.
-
- @see sourceList:itemHasBadge:
- @see sourceList:badgeTextColorForItem:
- @see sourceList:badgeBackgroundColorForItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (NSInteger)sourceList:(PXSourceList*)aSourceList badgeValueForItem:(id)item;
-
-/**
- @brief Returns a color that is used for the badge text color of an item in the Source List.
- @discussion This method can be implemented by the data source to specify a custom badge color for a particular item.
-
- This method is only called for *item* if you return `YES` for *item* in sourceList:itemHasBadge:.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
- 
- @return An `NSColor` object to use for the text color of *item*'s badge or `nil` to use the default badge text color.
- 
- @warning This method is only used by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, the view for each cell is responsible for managing a badge, if applicable.
-
- @see sourceList:itemHasBadge:
- @see sourceList:badgeValueForItem:
- @see sourceList:badgeBackgroundColorForItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (NSColor*)sourceList:(PXSourceList*)aSourceList badgeTextColorForItem:(id)item;
-
-/**
- @brief Returns a color that is used for the badge background color of an item in the Source List.
- @discussion This method can be implemented by the data source to specify a custom badge background color for a particular item.
-
- This method is only called for *item* if you return `YES` for *item* in sourceList:itemHasBadge:.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return An `NSColor` object to use for the background color of *item*'s badge or `nil` to use the default badge background color.
- 
- @warning This method is only used by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, the view for each cell is responsible for managing a badge, if applicable.
-
- @see sourceList:itemHasBadge:
- @see sourceList:badgeValueForItem:
- @see sourceList:badgeTextColorForItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (NSColor*)sourceList:(PXSourceList*)aSourceList badgeBackgroundColorForItem:(id)item;
-
-///---------------------------------------------------------------------------------------
-/// @name Working with Icons
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns a Boolean value that indicates whether a given item shows an icon or not.
- @discussion This method can be implemented by the data source to specify whether items contain icons or not. Icons are images which are shown to the left of the row's cell, and provide a visual which accompanies the cell.
-
- This method must be implemented if you want to return an icon with `sourceList:iconForItem:`.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return `YES` if *item* displays an icon, or `NO` otherwise.
-
- @warning This method is only used and invoked by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, the view for each cell is responsible for managing its icon, if applicable.
-
- @see sourceList:iconForItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList itemHasIcon:(id)item;
-
-/**
- @brief Returns the icon for a given item in the Source List.
- @discussion This method must be implemented by the data source if you return `YES` in `sourceList:itemHasIcon:` for any item in the Source List.
-
- The maximum size of each icon is specified with the Source List's `iconSize` property. If the returned image is larger than the icon size property on the Source List, then it is proportionally resized down to fit this size.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return An `NSImage` that is to be used for the icon for *item*.
-
- @warning This method is only used and invoked by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, the view for each cell is responsible for managing its icon, if applicable.
-
- @see sourceList:itemHasIcon:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (NSImage*)sourceList:(PXSourceList*)aSourceList iconForItem:(id)item;
-
-//The rest of these methods are basically "wrappers" for the NSOutlineViewDataSource methods
-///---------------------------------------------------------------------------------------
-/// @name Supporting Object Persistence
-///---------------------------------------------------------------------------------------
-/**
- @brief Invoked by *aSourceList* to return the item for the archived *object*.
- @discussion This method is analagous to `-outlineView:itemForPersistentObject:` declared on `NSOutlineViewDataSource`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message
- @param object The archived representation of the item in the Source List's data source
-
- @return The unarchived item corresponding to *object*.
-
- @see sourceList:persistentObjectForItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (id)sourceList:(PXSourceList*)aSourceList itemForPersistentObject:(id)object;
-
-/**
- @brief Invoked by *aSourceList* to return an archived object for *item*.
- @discussion This method is analagous to `-outlineView:persistentObjectForItem:` declared on `NSOutlineViewDataSource`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return The unarchived item corresponding to *object*.
-
- @see sourceList:persistentObjectForItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (id)sourceList:(PXSourceList*)aSourceList persistentObjectForItem:(id)item;
-
-///---------------------------------------------------------------------------------------
-/// @name Supporting Drag and Drop
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns a Boolean value indicating whether a drag operation is allowed.
- @discussion This method is analagous to `-outlineView:writeItems:toPasteboard:` declared on `NSOutlineViewDataSource`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param items An array of items that are participating in the drag.
- @param pboard The pasteboard to which to write the drag data.
-
- @return `YES` if the drag should be allowed and the items were successfully written to the pasteboard, or `NO` otherwise.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pboard;
-
-/**
- @brief Used by a Source List to determine a valid drop target.
- @discussion This method is analagous to `-outlineView:validateDrop:proposedItem:proposedChildIndex:` declared on `NSOutlineViewDataSource`. See the documentation for this method for more information.
-
- @param sourceList The Source List that sent the message.
- @param info An object which contains more information about the dragging operation.
- @param item The proposed parent item.
- @param index The proposed child index of the parent.
-
- @return An `NSDragOperation` value that indicates which dragging operation the Source List should perform.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (NSDragOperation)sourceList:(PXSourceList*)sourceList validateDrop:(id < NSDraggingInfo >)info proposedItem:(id)item proposedChildIndex:(NSInteger)index;
-
-/**
- @brief Returns a Boolean value specifying whether a drag operation was successful.
- @discussion This method is analagous to `-outlineView:acceptDrop:item:childIndex:` declared on `NSOutlineViewDataSource`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param info An object that contains more information about the dragging operation.
- @param item The parent of the item which the cursor was over when the mouse button was released.
- @param index The index of the child of `item` which the cursor was over when the mouse button was released.
-
- @return `YES` if the drop was successful, or `NO` otherwise.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList acceptDrop:(id < NSDraggingInfo >)info item:(id)item childIndex:(NSInteger)index;
-
-/**
- @brief Returns an array of filenames (not file paths) for the created files that the receiver promises to create.
- @discussion This method is analagous to `-outlineView:namesOfPromisedFilesDroppedAtDestination:forDraggedItems:` declared on `NSOutlineViewDataSource`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param dropDestination The drop location where the files are created.
- @param items The items that are being dragged.
-
- @return An array of filenames (not file paths) for the created files that the receiver promises to create.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (NSArray *)sourceList:(PXSourceList*)aSourceList namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedItems:(NSArray *)items;
-
-///---------------------------------------------------------------------------------------
-/// @name Drag and drop methods for 10.7+
-///---------------------------------------------------------------------------------------
-
-/**
- @brief Invoked to allow the Source List to support multiple item dragging.
- @discussion This method is analagous to `-outlineView:pasteboardWriterForItem:` declared on `NSOutlineViewDataSource`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return Returns an instance of `NSPasteboardItem` or a custom object that implements the `NSPasteboardWriting` protocol. Returning `nil` excludes the item from being dragged.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.7 SDK or above.
- */
-- (id <NSPasteboardWriting>)sourceList:(PXSourceList *)aSourceList pasteboardWriterForItem:(id)item;
-
-/**
- @brief Implement this method know when the given dragging session is about to begin and potentially modify the dragging session.
- @discussion This method is analagous to `-outlineView:draggingSession:willBeginAtPoint:forItems:` declared on `NSOutlineViewDataSource`. See the documentation for this method for more information.
-
- @param aSourceList The Source List in which the drag is about to begin.
- @param session The dragging session that is about to begin.
- @param screenPoint The point onscreen at which the drag is to begin.
- @param draggedItems An array of items to be dragged, excluding items for which `sourceList:pasteboardWriterForItem:` returns `nil`.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.7 SDK or above.
- */
-- (void)sourceList:(PXSourceList *)aSourceList draggingSession:(NSDraggingSession *)session willBeginAtPoint:(NSPoint)screenPoint forItems:(NSArray *)draggedItems;
-
-/**
- @brief Implement this method to know when the given dragging session has ended.
- @discussion This method is analagous to `-outlineView:draggingSession:endedAtPoint:operation:` declared on `NSOutlineViewDataSource`. See the documentation for this method for more information.
-
- @param aSourceList The Source List in which the drag ended.
- @param session The dragging session that ended.
- @param screenPoint The point onscreen at which the drag ended.
- @param operation A mask specifying the types of drag operations permitted by the dragging source.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.7 SDK or above.
- */
-- (void)sourceList:(PXSourceList *)aSourceList draggingSession:(NSDraggingSession *)session endedAtPoint:(NSPoint)screenPoint operation:(NSDragOperation)operation;
-
-/**
- @brief Implement this method to enable the Source List to update dragging items as they are dragged over the view.
- @discussion This method is analagous to `-outlineView:updateDraggingItemsForDrag:` declared on `NSOutlineViewDataSource`. See the documentation for this method for more information.
-
- @param aSourceList The Source List in which the drag occurs.
- @param draggingInfo The dragging info object.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.7 SDK or above.
- */
-- (void)sourceList:(PXSourceList *)aSourceList updateDraggingItemsForDrag:(id <NSDraggingInfo>)draggingInfo;
-
-@end
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceListDelegate.h b/modules/gui/macosx/imported/PXSourceList/PXSourceListDelegate.h
deleted file mode 100755
index 7a3b8113e853..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceListDelegate.h
+++ /dev/null
@@ -1,522 +0,0 @@
-//
-//  PXSourceListDelegate.h
-//  PXViewKit
-//
-//  Created by Alex Rozanski on 17/10/2009.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import <Cocoa/Cocoa.h>
-
-@class PXSourceList;
-
-/**
- The `PXSourceListDelegate` protocol defines methods that can be implemented by delegates of `PXSourceList` objects.
- 
- Note that additional documentation for the `PXSourceList` delegate notification constants is included in `PXSourceListDelegate.h`. This includes documentation for:
- 
-   - `PXSLSelectionIsChangingNotification`
-   - `PXSLSelectionDidChangeNotification`
-   - `PXSLItemWillExpandNotification`
-   - `PXSLItemDidExpandNotification`
-   - `PXSLItemWillCollapseNotification`
-   - `PXSLItemDidCollapseNotification`
-   - `PXSLDeleteKeyPressedOnRowsNotification`
-
- @warning Most of the methods defined by this protocol are analagous to those declared by `NSOutlineViewDelegate` (and are marked as such in the member's documentation), but are prefixed by "sourceList:" instead of "outlineView:". Only the most basic information about these methods is included here, and you should refer to the `NSOutlineViewDelegate` protocol documentation for more information. Several methods differ to those declared on `NSOutlineViewDelegate` in that they don't have an `NSTableColumn` parameter since `PXSourceList` works implicitly with only one table column.
- */
-@protocol PXSourceListDelegate <NSObject>
-
-@optional
-///---------------------------------------------------------------------------------------
-/// @name Working with Groups
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns a Boolean value that indicates whether a particular group item is displayed as always expanded.
- @discussion A group that is displayed as *always expanded* displays no 'Show'/'Hide' button to the right on hover, and its direct children are always expanded.
-
- @param aSourceList The Source List that sent the message.
- @param group A group item in the data source.
-
- @return `YES` to specify that the group should be displayed as always expanded, or `NO` if not.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList isGroupAlwaysExpanded:(id)group;
-
-///---------------------------------------------------------------------------------------
-/// @name Handling Mouse and Keyboard Input
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns a context menu which is to be displayed for a given mouse-down event.
- @discussion See `-menuForEvent:` declared on `NSView` for more information.
-
- @param aSourceList The Source List that sent the message.
- @param theEvent A mouse event.
- @param item An item in the data source.
-
- @return An instantiated `NSMenu` object to be displayed by the Source List for *event*, or `nil` if no menu is to be shown for the given event.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (NSMenu*)sourceList:(PXSourceList*)aSourceList menuForEvent:(NSEvent*)theEvent item:(id)item;
-
-/**
- @brief Invoked when *notification* is posted (when a deletion key is pressed and a row in the Source List is selected).
- @discussion This method is invoked when the `PXSLDeleteKeyPressedOnRowsNotification` notification is posted. See `PXSourceListDelegate.h` for documentation for this notification constant.
-
- @param notification The posted notification.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)sourceListDeleteKeyPressedOnRows:(NSNotification *)notification;
-
-// The following methods are basically wrappers around NSOutlineViewDelegate methods.
-
-///---------------------------------------------------------------------------------------
-/// @name View-based Source List Delegate Methods
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns the view used to display the given item.
- @discussion This method is analagous to `-outlineView:viewForTableColumn:item:` declared on `NSOutlineViewDelegate`, although it doesn't pass an `NSTableColumn` parameter as `PXSourceList` implicitly only uses one table column. See the documentation for `-outlineView:viewForTableColumn:item:` for more information.
- 
- Unlike when using `PXSourceList` in cell-based mode where the icon and badge value for each item can be set up using `PXSourceListDataSource` methods, it is in this method that you should set up the icon and badge for the view (if applicable) when using `PXSourceList` in view-based mode. You can make use of the `PXSourceListTableCellView` class which exposes an outlet for a `PXSourceListBadgeView` (the class included with the project used to display badges), and the `textField` and `imageView` outlets (which are inherited from its superclass, `NSTableCellView`) for the item's label and icon, respectively.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return The view to display for the specified item, or `nil` if you don't want to display a view for the item.
- 
- @warning This is a required method when using the Source List in view-based mode.
- 
- @see sourceList:rowViewForItem:
-
- @since Requires PXSourceList 2.0.0 or above and the OS X v10.7 SDK or above.
- */
-- (NSView *)sourceList:(PXSourceList *)aSourceList viewForItem:(id)item;
-
-/**
- @brief Returns the view used to display the given row.
- @discussion This method is analagous to `-outlineView:rowViewForItem:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return An `NSTableRowView` instance, or `nil` if the Source List should create one and use that instead.
- 
- @see sourceList:viewForItem:
-
- @since Requires PXSourceList 2.0.0 or above and the OS X v10.7 SDK or above.
- */
-- (NSTableRowView *)sourceList:(PXSourceList *)aSourceList rowViewForItem:(id)item;
-
-/**
- @brief Sent when a row view has been added to the Source List.
- @discussion This method is analagous to `-outlineView:didAddRowView:forRow:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param rowView The view that was added to the Source List.
- @param row The row index.
- 
- @see sourceList:didRemoveRowView:forRow:
-
- @since Requires PXSourceList 2.0.0 or above and the OS X v10.7 SDK or above.
- */
-- (void)sourceList:(PXSourceList *)aSourceList didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row;
-
-/**
- @brief Sent when a row view has been removed from the Source List.
- @discussion This method is analagous to `-outlineView:didRemoveRowView:forRow:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param rowView The row view that was removed from the Source List.
- @param row The row index.
- 
- @see sourceList:didAddRowView:forRow:
-
- @since Requires PXSourceList 2.0.0 or above and the OS X v10.7 SDK or above.
- */
-- (void)sourceList:(PXSourceList *)aSourceList didRemoveRowView:(NSTableRowView *)rowView forRow:(NSInteger)row;
-
-///---------------------------------------------------------------------------------------
-/// @name Handling Selection
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns a Boolean value indicating whether a given item should be selected.
- @discussion This method is analagous to `-outlineView:shouldSelectItem:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
- 
- @return `YES` to allow the Source List to select *item*, or `NO` otherwise.
- 
- @see sourceList:selectionIndexesForProposedSelection:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList shouldSelectItem:(id)item;
-
-/**
- @brief Returns the indexes that should be selected for a user-initiated selection.
- @discussion This method is analagous to `-outlineView:selectionIndexesForProposedSelection:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param proposedSelectionIndexes The proposed indexes of rows that should be selected.
- 
- @return An `NSIndexSet` object containing the rows that should be selected in the proposed selection.
- 
- @see sourceList:shouldSelectItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (NSIndexSet*)sourceList:(PXSourceList*)aSourceList selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes;
-
-/**
- @brief Invoked when *notification* is posted (when the Source List's selection changes).
- @discussion This method is invoked when the `PXSLSelectionIsChangingNotification` notification is posted. See `PXSourceListDelegate.h` for documentation for this notification constant.
-
- This method is analagous to `-outlineViewSelectionIsChanging:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param notification The posted notification.
- 
- @see sourceListSelectionDidChange:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)sourceListSelectionIsChanging:(NSNotification *)notification;
-
-/**
- @brief Invoked when *notification* is posted (when the Source List's selection has finished changing).
- @discussion This method is invoked when the `PXSLSelectionDidChangeNotification` notification is posted. See `PXSourceListDelegate.h` for documentation for this notification constant.
-
- This method is analagous to `-outlineViewSelectionDidChange:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param notification The posted notification.
- 
- @see sourceListSelectionIsChanging:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)sourceListSelectionDidChange:(NSNotification *)notification;
-
-///---------------------------------------------------------------------------------------
-/// @name Working with Type Selection
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns the string that is used for type selection for a given item.
- @discussion This method is analagous to `-outlineView:typeSelectStringForTableColumn:item:` declared on `NSOutlineViewDelegate`, although it doesn't pass an `NSTableColumn` parameter as `PXSourceList` implicitly only uses one table column. See the documentation for `-outlineView:typeSelectStringForTableColumn:item:` for more information.
-
- @param sourceList The Source List that sent the message.
- @param item The item to generate the type selection string for.
-
- @return The string value used for type selection of *item*.
- 
- @see sourceList:nextTypeSelectMatchFromItem:toItem:forString:
- @see sourceList:shouldTypeSelectForEvent:withCurrentSearchString:
-
- @since Requires PXSourceList 2.0.0 or above and the OS X v10.7 SDK or above.
- */
-- (NSString *)sourceList:(PXSourceList *)sourceList typeSelectStringForItem:(id)item;
-
-/**
- @brief Returns the first item that matches the given search string from within the given range.
- @discussion This method is analagous to `-outlineView:nextTypeSelectMatchFromItem:toItem:forString:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param sourceList The Source List that sent the message.
- @param startItem The first item to search.
- @param endItem The item before which to stop searching.
- @param searchString The string to search.
- 
- @return The first item in the *startItem*--*endItem* range which matches *searchString*, or `nil` if there is no match.
- 
- @see sourceList:typeSelectStringForItem:
- @see sourceList:shouldTypeSelectForEvent:withCurrentSearchString:
-
- @since Requires PXSourceList 2.0.0 or above and the OS X v10.7 SDK or above.
- */
-- (id)sourceList:(PXSourceList *)sourceList nextTypeSelectMatchFromItem:(id)startItem toItem:(id)endItem forString:(NSString *)searchString;
-
-/**
- @brief Returns a Boolean value which indicates whether type select should proceed for a given event and search string.
- @discussion This method is analagous to `-outlineView:shouldTypeSelectForEvent:withCurrentSearchString:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param sourceList The Source List that sent the message.
- @param event The event that caused this message to be sent.
- @param searchString The search string for which searching is to proceed from.
-
- @return `YES` if type select should proceed, or `NO` otherwise.
- 
- @see sourceList:typeSelectStringForItem:
- @see sourceList:nextTypeSelectMatchFromItem:toItem:forString:
-
- @since Requires PXSourceList 2.0.0 or above and the OS X v10.7 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList *)sourceList shouldTypeSelectForEvent:(NSEvent *)event withCurrentSearchString:(NSString *)searchString;
-
-/**
- @brief Returns a Boolean value which indicates whether a cell expansion tooltip should be displayed for a given item.
- @discussion This method is analagous to `-outlineView:shouldShowCellExpansionForTableColumn:item:` declared on `NSOutlineViewDelegate`, although it doesn't pass an `NSTableColumn` parameter as `PXSourceList` implicitly only uses one table column. See the documentation for `-outlineView:shouldShowCellExpansionForItem:` for more information.
-
- @param sourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return `YES` to allow an expansion tooltip to be displayed for *item*, otherwise `NO`.
- 
- @warning This method is only used by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, this method is not called.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList *)sourceList shouldShowCellExpansionForItem:(id)item;
-
-///---------------------------------------------------------------------------------------
-/// @name Providing Tooltips
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns the tooltip string that should be displayed for a given cell.
- @discussion This method is analagous to `-outlineView:toolTipForCell:rect:tableColumn:item:mouseLocation:` declared on `NSOutlineViewDelegate`, although it doesn't pass an `NSTableColumn` parameter as `PXSourceList` implicitly only uses one table column. See the documentation for `-outlineView:toolTipForCell:rect:tableColumn:item:mouseLocation:` for more information.
-
- @param sourceList The Source List that sent the message.
- @param cell The cell to return the tooltip for.
- @param rect The proposed active area of the tooltip.
- @param item The item in the data source to display the tooltip for.
- @param mouseLocation The current mouse location in view coordinates.
- 
- @return The tooltip string to be displayed for *cell*, or `nil` if no tooltip is to be shown.
- 
- @warning This method is only used by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, this method is not called.
-
- @since Requires PXSourceList 2.0.0 or above and the OS X v10.7 SDK or above.
- */
-- (NSString *)sourceList:(PXSourceList *)sourceList toolTipForCell:(NSCell *)cell rect:(NSRectPointer)rect item:(id)item mouseLocation:(NSPoint)mouseLocation;
-
-///---------------------------------------------------------------------------------------
-/// @name Editing Items
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns a Boolean value which indicates whether the Source List should allow editing of a given item.
- @discussion This method is analagous to `-outlineView:shouldEditTableColumn:item:` declared on `NSOutlineViewDelegate`, although it doesn't pass an `NSTableColumn` parameter as `PXSourceList` implicitly only uses one table column. See the documentation for `-outlineView:shouldEditTableColumn:item:` for more information.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return `YES` to allow editing of *item*, or `NO` otherwise.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList shouldEditItem:(id)item;
-
-///---------------------------------------------------------------------------------------
-/// @name Customising Tracking Support
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns a Boolean value that indicates whether a given cell should be tracked
- @discussion This method is analagous to `-outlineView:shouldTrackCell:forTableColumn:item:` declared on `NSOutlineViewDelegate`, although it doesn't pass an `NSTableColumn` parameter as `PXSourceList` implicitly only uses one table column. See the documentation for `-outlineView:shouldTrackCell:forTableColumn:item:` for more information.
-
- @param aSourceList The Source List that sent the message.
- @param cell The cell used to display *item*.
- @param item An item in the data source.
-
- @return `YES` if the cell should be tracked for *item*, otherwise `NO`.
- 
- @warning This method is only used by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, this method is not called.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList shouldTrackCell:(NSCell *)cell forItem:(id)item;
-
-///---------------------------------------------------------------------------------------
-/// @name Expanding and Collapsing the Outline
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns a Boolean value that indicates whether a given item should be expanded.
- @discussion This method is analagous to `-outlineView:shouldExpandItem:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return `YES` to allow expansion of *item*, otherwise `NO`.
- 
- @see sourceListItemWillExpand:
- @see sourceListItemDidExpand:
- @see sourceList:shouldCollapseItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList shouldExpandItem:(id)item;
-
-/**
- @brief Returns a Boolean value that indicates whether a given item should be collapsed.
- @discussion This method is analagous to `-outlineView:shouldCollapseItem:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return `YES` to allow *item* to be collapsed, otherwise `NO`.
- 
- @see sourceListItemWillCollapse:
- @see sourceListItemDidCollapse:
- @see sourceList:shouldExpandItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (BOOL)sourceList:(PXSourceList*)aSourceList shouldCollapseItem:(id)item;
-
-/**
- @brief Invoked when *notification* is posted (when an item in the Source List is about to expand in response to user input).
- @discussion This method is invoked when the `PXSLItemWillExpandNotification` notification is posted. See `PXSourceListDelegate.h` for documentation for this notification constant.
-
- This method is analagous to `-outlineViewItemWillExpand:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param notification The posted notification.
- 
- @see sourceListItemDidExpand:
- @see sourceList:shouldExpandItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)sourceListItemWillExpand:(NSNotification *)notification;
-
-/**
- @brief Invoked when *notification* is posted (when an item in the Source List was expanded in response to user input).
- @discussion This method is invoked when the `PXSLItemDidExpandNotification` notification is posted. See `PXSourceListDelegate.h` for documentation for this notification constant.
-
- This method is analagous to `-outlineViewItemDidExpand:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param notification The posted notification.
- 
- @see sourceListItemWillExpand:
- @see sourceList:shouldExpandItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)sourceListItemDidExpand:(NSNotification *)notification;
-
-/**
- @brief Invoked when *notification* is posted (when an item in the Source List is about to collapse in response to user input).
- @discussion This method is invoked when the `PXSLItemWillCollapseNotification` notification is posted. See `PXSourceListDelegate.h` for documentation for this notification constant.
-
- This method is analagous to `-outlineViewItemWillCollapse:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param notification The posted notification.
- 
- @see sourceListItemDidCollapse:
- @see sourceList:shouldCollapseItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)sourceListItemWillCollapse:(NSNotification *)notification;
-
-/**
- @brief Invoked when *notification* is posted (when an item in the Source List was collapsed in response to user input).
- @discussion This method is invoked when the `PXSLItemDidCollapseNotification` notification is posted. See `PXSourceListDelegate.h` for documentation for this notification constant.
-
- This method is analagous to `-outlineViewItemDidCollapse:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param notification The posted notification.
- 
- @see sourceListItemWillCollapse:
- @see sourceList:shouldCollapseItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)sourceListItemDidCollapse:(NSNotification *)notification;
-
-///---------------------------------------------------------------------------------------
-/// @name Customising Row Sizes
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns the height in points of the row for the given item.
- @discussion This method is analagous to `-outlineView:heightOfRowByItem:` declared on `NSOutlineViewDelegate`. See the documentation for this method for more information.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
-
- @return The height of the row used to display *item* in points.
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (CGFloat)sourceList:(PXSourceList*)aSourceList heightOfRowByItem:(id)item;
-
-///---------------------------------------------------------------------------------------
-/// @name Displaying Cells
-///---------------------------------------------------------------------------------------
-
-/**
- @brief Informs the delegate that the Source List is about to display the cell associated with the given item.
- @discussion This method is analagous to `-outlineView:willDisplayCell:forTableColumn:item:` declared on `NSOutlineViewDelegate`, although it doesn't pass an `NSTableColumn` parameter as `PXSourceList` implicitly only uses one table column. See the documentation for `-outlineView:willDisplayCell:forTableColumn:item:` for more information.
-
- @param aSourceList The Source List that sent the message.
- @param cell The cell about to be displayed.
- @param item An item in the data source.
- 
- @warning This method is only used by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, this method is not called.
- 
- @see sourceList:dataCellForItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (void)sourceList:(PXSourceList*)aSourceList willDisplayCell:(id)cell forItem:(id)item;
-
-/**
- @brief Returns the cell for use with a given item in the Source List.
- @discussion This method is analagous to `-outlineView:dataCellForTableColumn:item:` declared on `NSOutlineViewDelegate`, although it doesn't pass an `NSTableColumn` parameter as `PXSourceList` implicitly only uses one table column. See the documentation for `-outlineView:dataCellForTableColumn:item:` for more information.
-
- @param aSourceList The Source List that sent the message.
- @param item An item in the data source.
- 
- @return The cell used to display *item*.
- 
- @warning This method is only used by the Source List when operating in cell-based mode. When the Source List is operating in view-based mode, this method is not called.
- 
- @see sourceList:willDisplayCell:forItem:
-
- @since Requires PXSourceList 0.8 or above and the OS X v10.5 SDK or above.
- */
-- (NSCell*)sourceList:(PXSourceList*)aSourceList dataCellForItem:(id)item;
-
-@end
-
-//PXSourceList delegate notifications
-/**
- @brief This is analagous to the `NSOutlineViewSelectionIsChangingNotification` notification. Take a look at the `NSOutlineView` documentation for more information.
- @since Requires PXSourceList 0.8 or above.
- */
-extern NSString * const PXSLSelectionIsChangingNotification;
-
-/**
- @brief This is analagous to the `NSOutlineViewSelectionDidChangeNotification` notification. Take a look at the `NSOutlineView` documentation for more information.
- @since Requires PXSourceList 0.8 or above.
- */
-extern NSString * const PXSLSelectionDidChangeNotification;
-
-/**
- @brief This is analagous to the `NSOutlineViewItemWillExpandNotification` notification. Take a look at the `NSOutlineView` documentation for more information.
- @since Requires PXSourceList 0.8 or above.
- */
-extern NSString * const PXSLItemWillExpandNotification;
-
-/**
- @brief This is analagous to the `NSOutlineViewItemDidExpandNotification` notification. Take a look at the `NSOutlineView` documentation for more information.
- @since Requires PXSourceList 0.8 or above.
- */
-extern NSString * const PXSLItemDidExpandNotification;
-
-/**
- @brief This is analagous to the `NSOutlineViewItemWillCollapseNotification` notification. Take a look at the `NSOutlineView` documentation for more information.
- @since Requires PXSourceList 0.8 or above.
- */
-extern NSString * const PXSLItemWillCollapseNotification;
-
-/**
- @brief This is analagous to the `NSOutlineViewItemDidCollapseNotification` notification. Take a look at the `NSOutlineView` documentation for more information.
- @since Requires PXSourceList 0.8 or above.
- */
-extern NSString * const PXSLItemDidCollapseNotification;
-
-/**
- @brief Posted whenever a "deletion key" (backspace, cmd-backspace or fn-backspace) is pressed and handled by the Source List and a row is selected.
- @discussion The notification *object* is the `PXSourceList` object which the notification was posted by. The *userInfo* dictionary contains a `@"rows"` key which maps to an `NSIndexSet` object which contains the selected row indexes that were selected when the notification was posted.
- @since Requires PXSourceList 0.8 or above.
- */
-extern NSString * const PXSLDeleteKeyPressedOnRowsNotification;
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceListItem.h b/modules/gui/macosx/imported/PXSourceList/PXSourceListItem.h
deleted file mode 100755
index fc55a392b46d..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceListItem.h
+++ /dev/null
@@ -1,228 +0,0 @@
-//
-//  PXSourceListItem.h
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 08/01/2014.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import <Foundation/Foundation.h>
-
-/**
- 
- `PXSourceListItem` is a generic `NSObject` subclass which can be used to build a hierarchical model for use by
- a `PXSourceList` data source.
- 
- @warning While it is not mandatory to use `PXSourceListItem` objects in a `PXSourceList` data source, this
- class is generic enough that it should serve most use cases.
- 
- @discussion ### Basic properties
- 
- `PXSourceListItem` has been designed to contain properties for the frequently-used information which you need
- from a Source List data source item when implementing the `PXSourceListDataSource` (and possibly
- `PXSourceListDelegate`) methods, namely:
- 
-   * The title displayed in the Source List for the given item.
-   * The icon displayed to the left of the given item in the Source List.
-   * The badge value displayed to the right of the given item in the Source List.
-   * Child items of the given item.
- 
- The existence of these core properties means that it is unlikely that you should have to create your own
- `PXSourceListItem` subclass.
- 
- ### Identifying objects
- 
- `PXSourceListItem`s are often backed by data model objects that are used in other parts of your application, and
- the API has been designed to be able to easily identify a given model object from any part of your code
- given an arbitrary `PXSourceListItem`. This is useful when you obtain an item using one of `PXSourceList`'s methods
- or are given one as an argument to a `PXSourceListDelegate` or `PXSourceListDataSource` protocol method and you
- need to find its backing data model object to be able to use in application logic.
- 
- There are two (often distinct) patterns used to identify a given backing model object in a `PXSourceListItem`
- object:
-
-   * Using the `identifier` property. This is probably the easiest way of identifying items, and these identifiers
-     are best defined as string constants which you can reference from multiple places in your code.
-   * Using the `representedObject` property. Using `representedObject` can be useful if the underlying model
-     object has identifying information about it which you can use when determining which object you're
-     working with given a `PXSourceListItem` instance.
-
- */
-@interface PXSourceListItem : NSObject
-
-@property (strong, nonatomic) NSString *title;
-@property (strong, nonatomic) NSImage *icon;
-@property (weak, nonatomic) id representedObject;
-@property (strong, nonatomic) NSString *identifier;
-@property (strong, nonatomic) NSNumber *badgeValue;
-
-///---------------------------------------------------------------------------------------
-/// @name Convenience initialisers
-///---------------------------------------------------------------------------------------
-/** Creates and returns an item with the given parameters.
-
- @param title A title.
- @param identifier An identifier.
-
- @return An item initialised with the given parameters.
- 
- @see itemWithTitle:identifier:icon:
- @see itemWithRepresentedObject:icon:
- 
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-+ (instancetype)itemWithTitle:(NSString *)title identifier:(NSString *)identifier;
-
-/** Creates and returns an item with the given parameters.
-
- @param title A title.
- @param identifier An identifier.
- @param icon An icon.
-
- @return An item initialised with the given parameters.
- 
- @see itemWithTitle:identifier:
- @see itemWithRepresentedObject:icon:
- 
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-+ (instancetype)itemWithTitle:(NSString *)title identifier:(NSString *)identifier icon:(NSImage *)icon;
-
-/** Creates and returns an item with the given parameters.
-
- @param object An object.
- @param icon An icon.
-
- @return An item initialised with the given parameters.
- 
- @see itemWithTitle:identifier:
- @see itemWithTitle:identifier:icon:
- 
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-+ (instancetype)itemWithRepresentedObject:(id)object icon:(NSImage *)icon;
-
-///---------------------------------------------------------------------------------------
-/// @name Working with child items
-///---------------------------------------------------------------------------------------
-/**
- @brief Returns the receiver's children.
-
- @warning This property is backed by an `NSMutableArray` since an item's children *are* mutable. The getter for
- this property returns a copied array for safety, so this getter should not be called excessively.
-
- @see hasChildren
-
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-@property (strong, nonatomic) NSArray *children;
-
-/**
- @brief Returns whether the receiver has any child items.
- @discussion This is faster than calling `-children` on the receiver then checking the number of items in the array
- because of how this getter is implemented. See `-children` for more information.
-
- @see children
-
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-- (BOOL)hasChildren;
-
-/**
- @brief Adds an item to the receiver's array of child items.
- @discussion Adds *item* to the end of the receiver's array of child items.
- 
- This is a convenience method rather than having to call `-children` on the receiver, create a mutable copy
- and then mutate this array before setting it back on the receiver.
- 
- @param childItem An item
-
- @see insertChildItem:atIndex:
-
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-- (void)addChildItem:(PXSourceListItem *)childItem;
-
-/**
- @brief Inserts an item to the receiver's array of child items at a given index.
- @discussion Inserts *item* at *index* in the receiver's array of child items.
- 
- This is a convenience method rather than having to call `-children` on the receiver, create a mutable copy
- and then mutate this array before setting it back on the receiver.
- 
- @param childItem An item
- @param index An index
-
- @see addChildItem:
- @see insertChildItems:atIndexes:
-
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-- (void)insertChildItem:(PXSourceListItem *)childItem atIndex:(NSUInteger)index;
-
-/**
- @brief Removes an item from the receiver's array of child items.
- @discussion Removes *item* from the receiver's array of child items.
- 
- This is a convenience method rather than having to call `-children` on the receiver, create a mutable copy
- and then mutate this array before setting it back on the receiver.
- 
- @param childItem An item
-
- @see removeChildItemAtIndex:
- @see removeChildItems:
-
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-- (void)removeChildItem:(PXSourceListItem *)childItem;
-
-/**
- @brief Removes the item at the given index from the receiver's array of child items.
- @discussion Removes the item at the given *index* from the receiver's array of child items.
- 
- This is a convenience method rather than having to call `-children` on the receiver, create a mutable copy
- and then mutate this array before setting it back on the receiver.
- 
- @param index An integer representing an index in the receiver's array of children
-
- @see removeChildItem:
- @see removeChildItems:
-
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-- (void)removeChildItemAtIndex:(NSUInteger)index;
-
-/**
- @brief Removes the items in the given array from the receiver's array of child items.
- @discussion Removes all of the items in *items* from the receiver's array of children.
- 
- This is a convenience method rather than having to call `-children` on the receiver, create a mutable copy
- and then mutate this array before setting it back on the receiver.
- 
- @param items An array of `PXSourceListItem` objects
-
- @see removeChildItem:
- @see removeChildItemAtIndex:
-
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-- (void)removeChildItems:(NSArray *)items;
-
-/**
- @brief Inserts the given items into the receiver's array of child items at the given indexes.
- @discussion Inserts all of the items in *items* to the receiver's array of children at the given *indexes*.
- 
- This is a convenience method rather than having to call `-children` on the receiver, create a mutable copy
- and then mutate this array before setting it back on the receiver.
- 
- @param items An array of `PXSourceListItem` objects
- @param indexes The indexes to insert the child items at
-
- @see insertChildItem:atIndex:
-
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-- (void)insertChildItems:(NSArray *)items atIndexes:(NSIndexSet *)indexes;
-
-@end
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceListItem.m b/modules/gui/macosx/imported/PXSourceList/PXSourceListItem.m
deleted file mode 100755
index 5841e149237f..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceListItem.m
+++ /dev/null
@@ -1,101 +0,0 @@
-//
-//  PXSourceListItem.m
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 08/01/2014.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import "PXSourceListItem.h"
-
-@implementation PXSourceListItem {
-    NSMutableArray *_children;
-}
-
-+ (instancetype)itemWithTitle:(NSString *)title identifier:(NSString *)identifier
-{
-    return [self itemWithTitle:title identifier:identifier icon:nil];
-}
-
-+ (instancetype)itemWithTitle:(NSString *)title identifier:(NSString *)identifier icon:(NSImage *)icon
-{
-    PXSourceListItem *item = [[self alloc] init];
-
-    item.title = title;
-    item.identifier = identifier;
-    item.icon = icon;
-
-    return item;
-}
-
-+ (instancetype)itemWithRepresentedObject:(id)object icon:(NSImage *)icon
-{
-    PXSourceListItem *item = [[self alloc] init];
-
-    item.representedObject = object;
-    item.icon = icon;
-
-    return item;
-}
-
-- (id)init
-{
-    if (!(self = [super init]))
-        return nil;
-
-    _children = [[NSMutableArray alloc] init];
-
-    return self;
-}
-
-#pragma mark - Custom Accessors
-
-- (NSArray *)children
-{
-    return [_children copy];
-}
-
-- (void)setChildren:(NSArray *)children
-{
-    _children = [children mutableCopy];
-}
-
-#pragma mark - Child Convenience Methods
-
-- (BOOL)hasChildren
-{
-    return _children.count > 0;
-}
-
-- (void)addChildItem:(PXSourceListItem *)childItem
-{
-    [_children addObject:childItem];
-}
-
-- (void)insertChildItem:(PXSourceListItem *)childItem atIndex:(NSUInteger)index
-{
-    [_children insertObject:childItem atIndex:index];
-}
-
-- (void)removeChildItem:(PXSourceListItem *)childItem
-{
-    [_children removeObject:childItem];
-}
-
-- (void)removeChildItemAtIndex:(NSUInteger)index
-{
-    [_children removeObjectAtIndex:index];
-}
-
-- (void)removeChildItems:(NSArray *)items
-{
-    [_children removeObjectsInArray:items];
-}
-
-- (void)insertChildItems:(NSArray *)items atIndexes:(NSIndexSet *)indexes
-{
-    [_children insertObjects:items atIndexes:indexes];
-}
-
-@end
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceListTableCellView.h b/modules/gui/macosx/imported/PXSourceList/PXSourceListTableCellView.h
deleted file mode 100755
index 50023d6203a3..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceListTableCellView.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-//  PXSourceListTableCellView.h
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 31/12/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import <Cocoa/Cocoa.h>
-
-@class PXSourceListBadgeView;
-
-/**
- `PXSourceListTableCellView` is an `NSTableCellView` subclass which can be used when using `PXSourceList`
- in view-based mode.
- 
- Similar to `NSTableCellView` and its `textField` and `imageView` outlets, `PXSourceListTableCellView`
- provides a `badgeView` outlet which can be hooked up to a `PXSourceListBadgeView` in Interface Builder
- and then configured in `sourceList:viewForItem:`.
- 
- `PXSourceListTableCellView` positions its `badgeView` automatically (as `NSTableCellView` does for the `textField`
- and `imageView` outlets) to be positioned centred (vertically) and rightmost (horizontally) within the table cell's
- bounds. If you want to change this positioning you can do so by creating a `PXSourceListTableCellView` subclass and
- overriding `-layout`, but note that idiomatically, source lists display badges to the right of each row.
- */
-@interface PXSourceListTableCellView : NSTableCellView
-
-/**
- @brief The badge view displayed by the cell.
- @discussion When a `PXSourceListTableCellView` instance is created, a `PXSourceListTableCellView` instance
- is *not* automatically created and set to this property (just like with `NSTableCellView` and its
- `textField` and `imageView` properties). This property is purely declared on this class to make creating
- table cell views for a `PXSourceList` in Interface Builder easier without having to declare your own
- `NSTableCellView` subclass.
- 
- This property is typically configured in the `PXSourceListDelegate` method `sourceList:viewForItem:`.
- 
- @since Requires PXSourceList 2.0.0 and above and the Mac OS X 10.7 SDK or above.
- */
-@property (weak, nonatomic) IBOutlet PXSourceListBadgeView *badgeView;
-
-@end
diff --git a/modules/gui/macosx/imported/PXSourceList/PXSourceListTableCellView.m b/modules/gui/macosx/imported/PXSourceList/PXSourceListTableCellView.m
deleted file mode 100755
index e887d0bb5f8d..000000000000
--- a/modules/gui/macosx/imported/PXSourceList/PXSourceListTableCellView.m
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-//  PXSourceListTableCellView.m
-//  PXSourceList
-//
-//  Created by Alex Rozanski on 31/12/2013.
-//  Copyright 2009-14 Alex Rozanski http://alexrozanski.com and other contributors.
-//  This software is licensed under the New BSD License. Full details can be found in the README.
-//
-
-#import "PXSourceListTableCellView.h"
-#import "PXSourceListBadgeView.h"
-
-@implementation PXSourceListTableCellView
-
-- (void)layout
-{
-    [super layout];
-
-    if (!self.badgeView)
-        return;
-
-    [self.badgeView sizeToFit];
-
-    NSRect bounds = self.bounds;
-    NSSize badgeSize = self.badgeView.frame.size;
-    self.badgeView.frame = NSMakeRect(NSMaxX(bounds) - badgeSize.width,
-                                      NSMidY(bounds) - round(badgeSize.height / 2.0f),
-                                      badgeSize.width, badgeSize.height);
-}
-
-@end
diff --git a/modules/gui/macosx/library/VLCLibraryWindow.h b/modules/gui/macosx/library/VLCLibraryWindow.h
index 31cddaae1a9e..6667a6fa0653 100644
--- a/modules/gui/macosx/library/VLCLibraryWindow.h
+++ b/modules/gui/macosx/library/VLCLibraryWindow.h
@@ -24,6 +24,8 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
+@class VLCFSPanelController;
+
 @interface VLCLibraryWindowController : NSWindowController
 
 - (instancetype)initWithLibraryWindow;
@@ -36,6 +38,15 @@ NS_ASSUME_NONNULL_BEGIN
 @property (readwrite, weak) IBOutlet NSCollectionView *libraryCollectionView;
 @property (readwrite, weak) IBOutlet NSTableView *playlistTableView;
 
+@property (readonly) BOOL nativeFullscreenMode;
+@property (readwrite) BOOL nonembedded;
+@property (readonly) VLCFSPanelController* fspanel;
+
+- (void)showFullscreenController;
+- (void)changePlaylistState:(int)event;
+- (void)videoplayWillBeStarted;
+- (void)setVideoplayEnabled;
+
 - (IBAction)playlistDoubleClickAction:(id)sender;
 
 @end
diff --git a/modules/gui/macosx/library/VLCLibraryWindow.m b/modules/gui/macosx/library/VLCLibraryWindow.m
index 7aa877a0c6b0..9ad5953fec1e 100644
--- a/modules/gui/macosx/library/VLCLibraryWindow.m
+++ b/modules/gui/macosx/library/VLCLibraryWindow.m
@@ -24,10 +24,15 @@
 #import "extensions/NSString+Helpers.h"
 #import "library/VLCLibraryCollectionViewItem.h"
 #import "main/VLCMain.h"
+
 #import "playlist/VLCPlaylistTableCellView.h"
 #import "playlist/VLCPlaylistController.h"
 #import "playlist/VLCPlaylistDataSource.h"
 
+#import "windows/mainwindow/VLCControlsBarCommon.h"
+#import "windows/video/VLCFSPanelController.h"
+#import "windows/video/VLCVoutView.h"
+
 static const float f_min_window_width = 604.;
 static const float f_min_window_height = 307.;
 static const float f_playlist_row_height = 72.;
@@ -38,6 +43,8 @@ static NSString *VLCLibraryCellIdentifier = @"VLCLibraryCellIdentifier";
 {
     VLCPlaylistDataSource *_playlistDataSource;
     VLCLibraryDataSource *_libraryDataSource;
+
+    NSRect _windowFrameBeforePlayback;
 }
 @end
 
@@ -45,6 +52,9 @@ static NSString *VLCLibraryCellIdentifier = @"VLCLibraryCellIdentifier";
 
 - (void)awakeFromNib
 {
+    _fspanel = [[VLCFSPanelController alloc] init];
+    [_fspanel showWindow:self];
+
     _segmentedTitleControl.segmentCount = 3;
     [_segmentedTitleControl setTarget:self];
     [_segmentedTitleControl setAction:@selector(segmentedControlAction)];
@@ -84,6 +94,73 @@ static NSString *VLCLibraryCellIdentifier = @"VLCLibraryCellIdentifier";
     [[[VLCMain sharedInstance] playlistController] playItemAtIndex:selectedRow];
 }
 
+- (void)changePlaylistState:(int)event
+{
+}
+
+- (void)videoplayWillBeStarted
+{
+    if (!self.fullscreen)
+        _windowFrameBeforePlayback = [self frame];
+}
+
+- (void)setVideoplayEnabled
+{
+    BOOL b_videoPlayback = [[VLCMain sharedInstance] activeVideoPlayback];
+
+    if (!b_videoPlayback) {
+        if (!self.nonembedded && (!self.nativeFullscreenMode || (self.nativeFullscreenMode && !self.fullscreen)) && _windowFrameBeforePlayback.size.width > 0 && _windowFrameBeforePlayback.size.height > 0) {
+
+            // only resize back to minimum view of this is still desired final state
+            CGFloat f_threshold_height = f_min_video_height + [self.controlsBar height];
+            if (_windowFrameBeforePlayback.size.height > f_threshold_height) {
+                if ([[VLCMain sharedInstance] isTerminating])
+                    [self setFrame:_windowFrameBeforePlayback display:YES];
+                else
+                    [[self animator] setFrame:_windowFrameBeforePlayback display:YES];
+
+            }
+        }
+
+        _windowFrameBeforePlayback = NSMakeRect(0, 0, 0, 0);
+
+        [self makeFirstResponder: _playlistTableView];
+        [[[VLCMain sharedInstance] voutProvider] updateWindowLevelForHelperWindows: NSNormalWindowLevel];
+
+        // restore alpha value to 1 for the case that macosx-opaqueness is set to < 1
+        [self setAlphaValue:1.0];
+        [self.videoView setHidden:YES];
+    } else {
+        [self.videoView setHidden:NO];
+    }
+
+    if (self.nativeFullscreenMode) {
+        if ([self hasActiveVideo] && [self fullscreen] && b_videoPlayback) {
+            [self hideControlsBar];
+            [self.fspanel setActive];
+        } else {
+            [self showControlsBar];
+            [self.fspanel setNonActive];
+        }
+    }
+}
+
+#pragma mark -
+#pragma mark Fullscreen support
+
+- (void)showFullscreenController
+{
+    id currentWindow = [NSApp keyWindow];
+    if ([currentWindow respondsToSelector:@selector(hasActiveVideo)] && [currentWindow hasActiveVideo]) {
+        if ([currentWindow respondsToSelector:@selector(fullscreen)] && [currentWindow fullscreen] && ![[currentWindow videoView] isHidden]) {
+
+            if ([[VLCMain sharedInstance] activeVideoPlayback])
+                [self.fspanel fadeIn];
+        }
+    }
+
+}
+
 @end
 
 @implementation VLCLibraryDataSource
diff --git a/modules/gui/macosx/main/VLCMain.h b/modules/gui/macosx/main/VLCMain.h
index 5a7ad20e559a..8a1378b14498 100644
--- a/modules/gui/macosx/main/VLCMain.h
+++ b/modules/gui/macosx/main/VLCMain.h
@@ -40,7 +40,6 @@
 #import "extensions/misc.h"
 #import "extensions/NSString+Helpers.h"
 #import "menus/VLCStatusBarIcon.h"
-#import "windows/mainwindow/VLCMainWindow.h"
 #import "windows/video/VLCVideoOutputProvider.h"
 
 /*****************************************************************************
@@ -67,6 +66,7 @@ static NSString * VLCAppleRemoteSettingChangedNotification = @"VLCAppleRemoteSet
 @class VLCBookmarksWindowController;
 @class VLCOpenWindowController;
 @class VLCLogWindowController;
+@class VLCLibraryWindow;
 @class VLCLibraryWindowController;
 @class VLCTrackSynchronizationWindowController;
 @class VLCAudioEffectsWindowController;
@@ -88,7 +88,7 @@ static NSString * VLCAppleRemoteSettingChangedNotification = @"VLCAppleRemoteSet
 + (void)killInstance;
 
 - (VLCMainMenu *)mainMenu;
-- (VLCMainWindow *)mainWindow;
+- (VLCLibraryWindow *)libraryWindow;
 - (VLCBookmarksWindowController *)bookmarks;
 - (VLCOpenWindowController *)open;
 - (VLCSimplePrefsController *)simplePreferences;
diff --git a/modules/gui/macosx/main/VLCMain.m b/modules/gui/macosx/main/VLCMain.m
index 86635dfe77cd..7c9e57bb1597 100644
--- a/modules/gui/macosx/main/VLCMain.m
+++ b/modules/gui/macosx/main/VLCMain.m
@@ -105,7 +105,7 @@ int OpenIntf (vlc_object_t *p_this)
             [VLCMain sharedInstance];
 
             [[NSBundle mainBundle] loadNibNamed:@"MainMenu" owner:[[VLCMain sharedInstance] mainMenu] topLevelObjects:nil];
-            [[[VLCMain sharedInstance] mainWindow] makeKeyAndOrderFront:nil];
+            [[[VLCMain sharedInstance] libraryWindow] makeKeyAndOrderFront:nil];
 
             msg_Dbg(p_intf, "Finished loading macosx interface");
             return VLC_SUCCESS;
@@ -148,7 +148,7 @@ static int ShowController(vlc_object_t *p_this, const char *psz_variable,
                     [mainInstance showFullscreenController];
 
                 else if (!strcmp(psz_variable, "intf-show"))
-                    [[mainInstance mainWindow] makeKeyAndOrderFront:nil];
+                    [[mainInstance libraryWindow] makeKeyAndOrderFront:nil];
             }
 
         });
@@ -183,7 +183,6 @@ static int BossCallback(vlc_object_t *p_this, const char *psz_var,
 
     BOOL b_active_videoplayback;
 
-    NSWindowController *_mainWindowController;
     VLCMainMenu *_mainmenu;
     VLCPrefs *_prefs;
     VLCSimplePrefsController *_sprefs;
@@ -254,7 +253,6 @@ static VLCMain *sharedInstance = nil;
 
         _voutProvider = [[VLCVideoOutputProvider alloc] init];
 
-        _mainWindowController = [[NSWindowController alloc] initWithWindowNibName:@"MainWindow"];
         _libraryWindowController = [[VLCLibraryWindowController alloc] initWithLibraryWindow];
 
         libvlc_int_t *libvlc = vlc_object_instance(p_intf);
@@ -437,7 +435,7 @@ static VLCMain *sharedInstance = nil;
 - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)hasVisibleWindows
 {
     if (!hasVisibleWindows)
-        [[self mainWindow] makeKeyAndOrderFront:self];
+        [[self libraryWindow] makeKeyAndOrderFront:self];
 
     return YES;
 }
@@ -446,7 +444,7 @@ static VLCMain *sharedInstance = nil;
 {
     // defer selector here (possibly another time) to ensure that keyWindow is set properly
     // (needed for NSApplicationDidBecomeActiveNotification)
-    [[self mainWindow] performSelectorOnMainThread:@selector(showFullscreenController) withObject:nil waitUntilDone:NO];
+    [[self libraryWindow] performSelectorOnMainThread:@selector(showFullscreenController) withObject:nil waitUntilDone:NO];
 }
 
 - (void)setActiveVideoPlayback:(BOOL)b_value
@@ -454,8 +452,8 @@ static VLCMain *sharedInstance = nil;
     assert([NSThread isMainThread]);
 
     b_active_videoplayback = b_value;
-    if ([self mainWindow]) {
-        [[self mainWindow] setVideoplayEnabled];
+    if ([self libraryWindow]) {
+        [[self libraryWindow] setVideoplayEnabled];
     }
 }
 
@@ -472,14 +470,14 @@ static VLCMain *sharedInstance = nil;
     return _statusBarIcon;
 }
 
-- (VLCMainWindow *)mainWindow
+- (VLCLibraryWindowController *)libraryWindowController
 {
-    return (VLCMainWindow *)[_mainWindowController window];
+    return _libraryWindowController;
 }
 
-- (VLCLibraryWindowController *)libraryWindowController
+- (VLCLibraryWindow *)libraryWindow
 {
-    return _libraryWindowController;
+    return (VLCLibraryWindow *)_libraryWindowController.window;
 }
 
 - (VLCExtensionsManager *)extensionsManager
diff --git a/modules/gui/macosx/menus/VLCMainMenu.m b/modules/gui/macosx/menus/VLCMainMenu.m
index f04c7e35a07b..fd60e48dfd35 100644
--- a/modules/gui/macosx/menus/VLCMainMenu.m
+++ b/modules/gui/macosx/menus/VLCMainMenu.m
@@ -46,7 +46,6 @@
 #import "windows/VLCOpenWindowController.h"
 #import "windows/VLCErrorWindowController.h"
 #import "windows/VLCHelpWindowController.h"
-#import "windows/mainwindow/VLCMainWindow.h"
 #import "windows/mainwindow/VLCMainWindowControlsBar.h"
 #import "windows/extensions/VLCExtensionsManager.h"
 #import "windows/video/VLCVoutView.h"
@@ -691,7 +690,7 @@
 {
     BOOL b_value = !var_InheritBool(getIntf(), "macosx-show-effects-button");
     config_PutInt("macosx-show-effects-button", b_value);
-    [(VLCMainWindowControlsBar *)[[[VLCMain sharedInstance] mainWindow] controlsBar] toggleEffectsButton];
+    [(VLCMainWindowControlsBar *)[[[VLCMain sharedInstance] libraryWindow] controlsBar] toggleEffectsButton];
     [_toggleEffectsButton setState: b_value];
 }
 
@@ -700,7 +699,7 @@
     BOOL b_value = !var_InheritBool(getIntf(), "macosx-show-playback-buttons");
     config_PutInt("macosx-show-playback-buttons", b_value);
 
-    [(VLCMainWindowControlsBar *)[[[VLCMain sharedInstance] mainWindow] controlsBar] toggleJumpButtons];
+    [(VLCMainWindowControlsBar *)[[[VLCMain sharedInstance] libraryWindow] controlsBar] toggleJumpButtons];
     [[[VLCMain sharedInstance] voutProvider] updateWindowsUsingBlock:^(VLCVideoWindowCommon *window) {
         [[window controlsBar] toggleForwardBackwardMode: b_value];
     }];
@@ -712,13 +711,13 @@
 {
     BOOL b_value = !var_InheritBool(getIntf(), "macosx-show-playmode-buttons");
     config_PutInt("macosx-show-playmode-buttons", b_value);
-    [(VLCMainWindowControlsBar *)[[[VLCMain sharedInstance] mainWindow] controlsBar] togglePlaymodeButtons];
+    [(VLCMainWindowControlsBar *)[[[VLCMain sharedInstance] libraryWindow] controlsBar] togglePlaymodeButtons];
     [_togglePlaymodeButtons setState: b_value];
 }
 
 - (IBAction)toggleSidebar:(id)sender
 {
-    [[[VLCMain sharedInstance] mainWindow] toggleLeftSubSplitView];
+    // FIXME: remove this method as it is no longer needed
 }
 
 - (void)updateSidebarMenuItem:(BOOL)show;
@@ -1345,7 +1344,7 @@
 
 - (IBAction)showMainWindow:(id)sender
 {
-    [[[VLCMain sharedInstance] mainWindow] makeKeyAndOrderFront:sender];
+    [[[VLCMain sharedInstance] libraryWindow] makeKeyAndOrderFront:sender];
 }
 
 - (IBAction)showPlaylist:(id)sender
diff --git a/modules/gui/macosx/menus/VLCStatusBarIcon.m b/modules/gui/macosx/menus/VLCStatusBarIcon.m
index 52f537db7296..ad325a0da881 100644
--- a/modules/gui/macosx/menus/VLCStatusBarIcon.m
+++ b/modules/gui/macosx/menus/VLCStatusBarIcon.m
@@ -489,7 +489,7 @@
 - (IBAction)restoreMainWindow:(id)sender
 {
     [[NSApp sharedApplication] activateIgnoringOtherApps:YES];
-    [[[VLCMain sharedInstance] mainWindow] makeKeyAndOrderFront:sender];
+    [(NSWindow *)[[VLCMain sharedInstance] libraryWindow] makeKeyAndOrderFront:sender];
 }
 
 // Action: Toggle Play / Pause
diff --git a/modules/gui/macosx/playlist/VLCPlayerController.m b/modules/gui/macosx/playlist/VLCPlayerController.m
index 4f980ec536cb..9ad93370b1d7 100644
--- a/modules/gui/macosx/playlist/VLCPlayerController.m
+++ b/modules/gui/macosx/playlist/VLCPlayerController.m
@@ -28,7 +28,9 @@
 #import "os-integration/VLCRemoteControlService.h"
 #import "os-integration/iTunes.h"
 #import "os-integration/Spotify.h"
+
 #import "windows/video/VLCVoutView.h"
+#import "windows/video/VLCVideoWindowCommon.h"
 
 #import <MediaPlayer/MediaPlayer.h>
 
@@ -1570,7 +1572,7 @@ static const struct vlc_player_aout_cbs player_aout_callbacks = {
 
     id currentWindow = [NSApp keyWindow];
     if ([currentWindow respondsToSelector:@selector(videoView)]) {
-        VLCVoutView *videoView = [currentWindow videoView];
+        VLCVoutView *videoView = [(VLCVideoWindowCommon *)currentWindow videoView];
         if (videoView) {
             p_vout = [videoView voutThread];
         }
diff --git a/modules/gui/macosx/windows/addons/VLCAddonsWindowController.m b/modules/gui/macosx/windows/addons/VLCAddonsWindowController.m
index e635c9a678e2..9ab94609cc4e 100644
--- a/modules/gui/macosx/windows/addons/VLCAddonsWindowController.m
+++ b/modules/gui/macosx/windows/addons/VLCAddonsWindowController.m
@@ -25,7 +25,6 @@
 #import <vlc_addons.h>
 
 #import "main/VLCMain.h"
-#import "windows/mainwindow/VLCMainWindow.h"
 #import "windows/addons/VLCAddonListItem.h"
 
 @interface VLCAddonsWindowController() <NSTableViewDataSource, NSTableViewDelegate>
diff --git a/modules/gui/macosx/windows/mainwindow/VLCMainWindow.h b/modules/gui/macosx/windows/mainwindow/VLCMainWindow.h
deleted file mode 100644
index bf281a5e1cc7..000000000000
--- a/modules/gui/macosx/windows/mainwindow/VLCMainWindow.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*****************************************************************************
- * VLCMainWindow.h: MacOS X interface module
- *****************************************************************************
- * Copyright (C) 2002-2014 VLC authors and VideoLAN
- *
- * Authors: Felix Paul Kühne <fkuehne -at- videolan -dot- org>
- *          Jon Lech Johansen <jon-vl@nanocrew.net>
- *          Christophe Massiot <massiot@via.ecp.fr>
- *          Derk-Jan Hartman <hartman at videolan.org>
- *          David Fuhrmann <david dot fuhrmann at googlemail dot 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>
-
-#import <vlc_input.h>
-#import <vlc_vout_window.h>
-
-#import "extensions/misc.h"
-#import "windows/video/VLCVideoWindowCommon.h"
-
-@class VLCMainWindowControlsBar;
-@class VLCVoutView;
-@class PXSourceList;
-@class VLCFSPanelController;
-
-typedef enum {
-    psUserEvent,
-    psUserMenuEvent,
-    psVideoStartedOrStoppedEvent,
-    psPlaylistItemChangedEvent
-} VLCPlaylistStateEvent;
-
-@interface VLCMainWindow : VLCVideoWindowCommon
-
-// General MainWindow outlets
-@property (readwrite, weak) IBOutlet NSTextField        *searchField;
-@property (readwrite, weak) IBOutlet NSScrollView       *playlistScrollView;
-@property (readwrite, weak) IBOutlet NSOutlineView      *outlineView;
-@property (readwrite, weak) IBOutlet NSSplitView        *splitView;
-@property (readwrite, weak) IBOutlet NSView             *splitViewLeft;
-@property (readwrite, weak) IBOutlet NSView             *splitViewRight;
-@property (readwrite, weak) IBOutlet PXSourceList       *sidebarView;
-@property (readwrite, weak) IBOutlet NSScrollView       *sidebarScrollView;
-@property (readwrite, weak) IBOutlet NSTextField        *categoryLabel;
-
-// Dropzone outlets
-@property (readwrite, weak) IBOutlet NSView             *dropzoneView;
-@property (readwrite, weak) IBOutlet NSButton           *dropzoneButton;
-@property (readwrite, weak) IBOutlet NSTextField        *dropzoneLabel;
-@property (readwrite, weak) IBOutlet NSBox              *dropzoneBox;
-@property (readwrite, weak) IBOutlet NSImageView        *dropzoneImageView;
-
-// Podcast View outlets
-@property (readwrite, weak) IBOutlet NSView             *podcastView;
-@property (readwrite, weak) IBOutlet NSButton           *podcastAddButton;
-@property (readwrite, weak) IBOutlet NSButton           *podcastRemoveButton;
-@property (weak) IBOutlet NSLayoutConstraint *tableViewToPodcastConstraint;
-
-// Podcast Subscribe Window outlets
-@property (readwrite)       IBOutlet NSWindow           *podcastSubscribeWindow;
-@property (readwrite, weak) IBOutlet NSTextField        *podcastSubscribeTitle;
-@property (readwrite, weak) IBOutlet NSTextField        *podcastSubscribeSubtitle;
-@property (readwrite, weak) IBOutlet NSTextField        *podcastSubscribeUrlField;
-@property (readwrite, weak) IBOutlet NSButton           *podcastSubscribeOkButton;
-@property (readwrite, weak) IBOutlet NSButton           *podcastSubscribeCancelButton;
-
-// Podcast Unsubscribe Window outlets
-@property (readwrite)       IBOutlet NSWindow           *podcastUnsubscribeWindow;
-@property (readwrite, weak) IBOutlet NSTextField        *podcastUnsubscirbeTitle;
-@property (readwrite, weak) IBOutlet NSTextField        *podcastUnsubscribeSubtitle;
-@property (readwrite, weak) IBOutlet NSPopUpButton      *podcastUnsubscribePopUpButton;
-@property (readwrite, weak) IBOutlet NSButton           *podcastUnsubscribeOkButton;
-@property (readwrite, weak) IBOutlet NSButton           *podcastUnsubscribeCancelButton;
-
-@property (readonly) BOOL nativeFullscreenMode;
-@property (readwrite) BOOL nonembedded;
-
-@property (readonly) VLCFSPanelController* fspanel;
-
-- (void)changePlaylistState:(VLCPlaylistStateEvent)event;
-
-- (IBAction)dropzoneButtonAction:(id)sender;
-
-- (void)windowResizedOrMoved:(NSNotification *)notification;
-
-- (void)toggleLeftSubSplitView;
-- (void)showDropZone;
-- (void)hideDropZone;
-
-- (void)showFullscreenController;
-
-- (void)videoplayWillBeStarted;
-- (void)setVideoplayEnabled;
-
-@end
diff --git a/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m b/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m
deleted file mode 100644
index 9c9e98ac7ba2..000000000000
--- a/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m
+++ /dev/null
@@ -1,685 +0,0 @@
-/*****************************************************************************
- * VLCMainWindow.m: MacOS X interface module
- *****************************************************************************
- * Copyright (C) 2002-2019 VLC authors and VideoLAN
- *
- * Authors: Felix Paul Kühne <fkuehne -at- videolan -dot- org>
- *          Jon Lech Johansen <jon-vl@nanocrew.net>
- *          Christophe Massiot <massiot@via.ecp.fr>
- *          Derk-Jan Hartman <hartman at videolan.org>
- *          David Fuhrmann <david dot fuhrmann at googlemail dot 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 "VLCMainWindow.h"
-
-#import <math.h>
-
-#import <vlc_url.h>
-#import <vlc_strings.h>
-#import <vlc_services_discovery.h>
-#import <vlc_actions.h>
-#import <vlc_plugin.h>
-#import <vlc_modules.h>
-
-#import "main/VLCMain.h"
-#import "main/CompatibilityFixes.h"
-#import "menus/VLCMainMenu.h"
-#import "panels/VLCAudioEffectsWindowController.h"
-#import "windows/VLCOpenWindowController.h"
-#import "windows/mainwindow/VLCSourceListItem.h"
-#import "windows/mainwindow/VLCSourceListTableCellView.h"
-#import "windows/mainwindow/VLCMainWindowControlsBar.h"
-#import "windows/video/VLCDetachedVideoWindow.h"
-#import "windows/video/VLCVoutView.h"
-#import "windows/video/VLCVideoOutputProvider.h"
-#import "windows/video/VLCFSPanelController.h"
-#import "playlist/VLCPlaylistController.h"
-#import "playlist/VLCPlayerController.h"
-
-@interface VLCMainWindow() <NSOutlineViewDataSource, NSOutlineViewDelegate, NSWindowDelegate, NSAnimationDelegate, NSSplitViewDelegate>
-{
-    BOOL videoPlaybackEnabled;
-    BOOL dropzoneActive;
-    BOOL splitViewRemoved;
-    BOOL minimizedView;
-
-    BOOL b_video_playback_enabled;
-    BOOL b_dropzone_active;
-    BOOL b_splitview_removed;
-    BOOL b_minimized_view;
-
-    CGFloat f_lastSplitViewHeight;
-    CGFloat f_lastLeftSplitViewWidth;
-
-    NSRect frameBeforePlayback;
-    NSArray *_usedHotkeys;
-}
-- (void)makeSplitViewVisible;
-- (void)makeSplitViewHidden;
-@end
-
-static const float f_min_window_height = 307.;
-
-@implementation VLCMainWindow
-
-#pragma mark -
-#pragma mark Initialization
-
-- (BOOL)isEvent:(NSEvent *)anEvent forKey:(const char *)keyString
-{
-    char *key = config_GetPsz(keyString);
-    unsigned int keyModifiers = VLCModifiersToCocoa(key);
-    NSString *vlcKeyString = VLCKeyToString(key);
-    FREENULL(key);
-
-    NSString *characters = [anEvent charactersIgnoringModifiers];
-    if ([characters length] > 0) {
-        return [[characters lowercaseString] isEqualToString: vlcKeyString] &&
-        (keyModifiers & NSShiftKeyMask)     == ([anEvent modifierFlags] & NSShiftKeyMask) &&
-        (keyModifiers & NSControlKeyMask)   == ([anEvent modifierFlags] & NSControlKeyMask) &&
-        (keyModifiers & NSAlternateKeyMask) == ([anEvent modifierFlags] & NSAlternateKeyMask) &&
-        (keyModifiers & NSCommandKeyMask)   == ([anEvent modifierFlags] & NSCommandKeyMask);
-    }
-    return NO;
-}
-
-- (BOOL)performKeyEquivalent:(NSEvent *)anEvent
-{
-    BOOL b_force = NO;
-    // these are key events which should be handled by vlc core, but are attached to a main menu item
-    if (![self isEvent: anEvent forKey: "key-vol-up"] &&
-        ![self isEvent: anEvent forKey: "key-vol-down"] &&
-        ![self isEvent: anEvent forKey: "key-vol-mute"] &&
-        ![self isEvent: anEvent forKey: "key-prev"] &&
-        ![self isEvent: anEvent forKey: "key-next"] &&
-        ![self isEvent: anEvent forKey: "key-jump+short"] &&
-        ![self isEvent: anEvent forKey: "key-jump-short"]) {
-        /* We indeed want to prioritize some Cocoa key equivalent against libvlc,
-         so we perform the menu equivalent now. */
-        if ([[NSApp mainMenu] performKeyEquivalent:anEvent])
-            return TRUE;
-    } else {
-        b_force = YES;
-    }
-
-    return [self hasDefinedShortcutKey:anEvent force:b_force] ||
-           [self keyEvent:anEvent];
-}
-
-- (BOOL)keyEvent:(NSEvent *)o_event
-{
-    BOOL eventHandled = NO;
-    NSString * characters = [o_event charactersIgnoringModifiers];
-    if ([characters length] > 0) {
-        unichar key = [characters characterAtIndex: 0];
-
-        if (key) {
-            VLCPlayerController *playerController = [[[VLCMain sharedInstance] playlistController] playerController];
-            vout_thread_t *p_vout = [playerController mainVideoOutputThread];
-            if (p_vout != NULL) {
-                /* Escape */
-                if (key == (unichar) 0x1b) {
-                    if (var_GetBool(p_vout, "fullscreen")) {
-                        [playerController toggleFullscreen];
-                        eventHandled = YES;
-                    }
-                }
-                vout_Release(p_vout);
-            }
-        }
-    }
-    return eventHandled;
-}
-
-- (BOOL)hasDefinedShortcutKey:(NSEvent *)o_event force:(BOOL)b_force
-{
-    intf_thread_t *p_intf = getIntf();
-    if (!p_intf)
-        return NO;
-
-    unichar key = 0;
-    vlc_value_t val;
-    unsigned int i_pressed_modifiers = 0;
-
-    val.i_int = 0;
-    i_pressed_modifiers = [o_event modifierFlags];
-
-    if (i_pressed_modifiers & NSControlKeyMask)
-        val.i_int |= KEY_MODIFIER_CTRL;
-
-    if (i_pressed_modifiers & NSAlternateKeyMask)
-        val.i_int |= KEY_MODIFIER_ALT;
-
-    if (i_pressed_modifiers & NSShiftKeyMask)
-        val.i_int |= KEY_MODIFIER_SHIFT;
-
-    if (i_pressed_modifiers & NSCommandKeyMask)
-        val.i_int |= KEY_MODIFIER_COMMAND;
-
-    NSString * characters = [o_event charactersIgnoringModifiers];
-    if ([characters length] > 0) {
-        key = [[characters lowercaseString] characterAtIndex: 0];
-
-        /* handle Lion's default key combo for fullscreen-toggle in addition to our own hotkeys */
-        if (key == 'f' && i_pressed_modifiers & NSControlKeyMask && i_pressed_modifiers & NSCommandKeyMask) {
-            [[[[VLCMain sharedInstance] playlistController] playerController] toggleFullscreen];
-            return YES;
-        }
-
-        if (!b_force) {
-            switch(key) {
-                case NSDeleteCharacter:
-                case NSDeleteFunctionKey:
-                case NSDeleteCharFunctionKey:
-                case NSBackspaceCharacter:
-                case NSUpArrowFunctionKey:
-                case NSDownArrowFunctionKey:
-                case NSEnterCharacter:
-                case NSCarriageReturnCharacter:
-                    return NO;
-            }
-        }
-
-        val.i_int |= CocoaKeyToVLC(key);
-
-        BOOL b_found_key = NO;
-        NSUInteger numberOfUsedHotkeys = [_usedHotkeys count];
-        for (NSUInteger i = 0; i < numberOfUsedHotkeys; i++) {
-            const char *str = [[_usedHotkeys objectAtIndex:i] UTF8String];
-            unsigned int i_keyModifiers = VLCModifiersToCocoa((char *)str);
-
-            if ([[characters lowercaseString] isEqualToString:VLCKeyToString((char *)str)] &&
-                (i_keyModifiers & NSShiftKeyMask)     == (i_pressed_modifiers & NSShiftKeyMask) &&
-                (i_keyModifiers & NSControlKeyMask)   == (i_pressed_modifiers & NSControlKeyMask) &&
-                (i_keyModifiers & NSAlternateKeyMask) == (i_pressed_modifiers & NSAlternateKeyMask) &&
-                (i_keyModifiers & NSCommandKeyMask)   == (i_pressed_modifiers & NSCommandKeyMask)) {
-                b_found_key = YES;
-                break;
-            }
-        }
-
-        if (b_found_key) {
-            var_SetInteger(vlc_object_instance(p_intf), "key-pressed", val.i_int);
-            return YES;
-        }
-    }
-
-    return NO;
-}
-
-- (void)updateCurrentlyUsedHotkeys
-{
-    NSMutableArray *mutArray = [[NSMutableArray alloc] init];
-    /* Get the main Module */
-    module_t *p_main = module_get_main();
-    assert(p_main);
-    unsigned confsize;
-    module_config_t *p_config;
-
-    p_config = module_config_get (p_main, &confsize);
-
-    for (size_t i = 0; i < confsize; i++) {
-        module_config_t *p_item = p_config + i;
-
-        if (CONFIG_ITEM(p_item->i_type) && p_item->psz_name != NULL
-            && !strncmp(p_item->psz_name , "key-", 4)
-            && !EMPTY_STR(p_item->psz_text)) {
-            if (p_item->value.psz)
-                [mutArray addObject:toNSStr(p_item->value.psz)];
-        }
-    }
-    module_config_free (p_config);
-
-    _usedHotkeys = [[NSArray alloc] initWithArray:mutArray copyItems:YES];
-}
-
-- (void)dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver: self];
-}
-
-- (void)awakeFromNib
-{
-    [super awakeFromNib];
-
-    /*
-     * General setup
-     */
-
-    BOOL splitViewShouldBeHidden = NO;
-
-    [self setDelegate:self];
-    [self setRestorable:NO];
-    [self setExcludedFromWindowsMenu:YES];
-    [self setAcceptsMouseMovedEvents:YES];
-    [self setFrameAutosaveName:@"mainwindow"];
-
-    _nativeFullscreenMode = var_InheritBool(getIntf(), "macosx-nativefullscreenmode");
-    b_dropzone_active = YES;
-
-    /*
-     * Set up translatable strings for the UI elements
-     */
-
-    // Window title
-    [self setTitle:_NS("VLC media player")];
-
-    // Search Field
-    [_searchField setToolTip:_NS("Search in Playlist")];
-    [_searchField.cell setPlaceholderString:_NS("Search")];
-    _searchField.accessibilityLabel = _NS("Search the playlist. Results will be selected in the table.");
-
-    // Dropzone
-    [_dropzoneLabel setStringValue:_NS("Drop media here")];
-    [_dropzoneImageView setImage:imageFromRes(@"dropzone")];
-    [_dropzoneButton setTitle:_NS("Open media...")];
-    _dropzoneButton.accessibilityLabel = _NS("Open a dialog to select the media to play");
-
-    // Podcast view
-    [_podcastAddButton setTitle:_NS("Subscribe")];
-    [_podcastRemoveButton setTitle:_NS("Unsubscribe")];
-
-    // Podcast subscribe window
-    [_podcastSubscribeTitle setStringValue:_NS("Subscribe to a podcast")];
-    [_podcastSubscribeSubtitle setStringValue:_NS("Enter URL of the podcast to subscribe to:")];
-    [_podcastSubscribeOkButton setTitle:_NS("Subscribe")];
-    [_podcastSubscribeCancelButton setTitle:_NS("Cancel")];
-
-    // Podcast unsubscribe window
-    [_podcastUnsubscirbeTitle setStringValue:_NS("Unsubscribe from a podcast")];
-    [_podcastUnsubscribeSubtitle setStringValue:_NS("Select the podcast you would like to unsubscribe from:")];
-    [_podcastUnsubscribeOkButton setTitle:_NS("Unsubscribe")];
-    [_podcastUnsubscribeCancelButton setTitle:_NS("Cancel")];
-
-    /* interface builder action */
-    CGFloat f_threshold_height = f_min_video_height + [self.controlsBar height];
-
-    if ([[self contentView] frame].size.height < f_threshold_height)
-        splitViewShouldBeHidden = YES;
-
-    // Set that here as IB seems to be buggy
-    [self setContentMinSize:NSMakeSize(604., f_min_window_height)];
-
-    _fspanel = [[VLCFSPanelController alloc] init];
-    [_fspanel showWindow:self];
-
-    // Check for first run and show metadata network access question
-    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
-    if (![defaults objectForKey:@"VLCFirstRun"]) {
-        [defaults setObject:[NSDate date] forKey:@"VLCFirstRun"];
-
-        NSAlert *albumArtAlert = [[NSAlert alloc] init];
-        [albumArtAlert setMessageText:_NS("Check for album art and metadata?")];
-        [albumArtAlert setInformativeText:_NS("VLC can check online for album art and metadata to enrich your playback experience, e.g. by providing track information when playing Audio CDs. To provide this functionality, VLC will send information about your contents to trusted services in an anonymized form.")];
-        [albumArtAlert addButtonWithTitle:_NS("Enable Metadata Retrieval")];
-        [albumArtAlert addButtonWithTitle:_NS("No, Thanks")];
-
-        NSInteger returnValue = [albumArtAlert runModal];
-        config_PutInt("metadata-network-access", returnValue == NSAlertFirstButtonReturn);
-    }
-
-    [_playlistScrollView setBorderType:NSNoBorder];
-    [_sidebarScrollView setBorderType:NSNoBorder];
-
-    // Register for NSNotifications about Window and SplitView changes
-    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
-    [defaultCenter addObserver:self
-                      selector:@selector(someWindowWillClose:)
-                          name:NSWindowWillCloseNotification
-                        object:nil];
-    [defaultCenter addObserver:self
-                      selector:@selector(someWindowWillMiniaturize:)
-                          name:NSWindowWillMiniaturizeNotification
-                        object:nil];
-    [defaultCenter addObserver:self
-                      selector:@selector(applicationWillTerminate:)
-                          name:NSApplicationWillTerminateNotification
-                        object:nil];
-    [defaultCenter addObserver:self
-                      selector:@selector(mainSplitViewDidResizeSubviews:)
-                          name:NSSplitViewDidResizeSubviewsNotification
-                        object:_splitView];
-
-    if (splitViewShouldBeHidden) {
-        [self hideSplitView:YES];
-        f_lastSplitViewHeight = 300;
-    }
-
-    // Resize MainWindow to the screen size, if it exceeds the screens size
-    NSSize windowSize = self.frame.size;
-    NSSize screenSize = self.screen.frame.size;
-    if (screenSize.width <= windowSize.width || screenSize.height <= windowSize.height) {
-        self.nativeVideoSize = screenSize;
-        [self resizeWindow];
-    }
-
-    /* restore split view */
-    f_lastLeftSplitViewWidth = 200;
-    [[[VLCMain sharedInstance] mainMenu] updateSidebarMenuItem: ![_splitView isSubviewCollapsed:_splitViewLeft]];
-
-    [self updateCurrentlyUsedHotkeys];
-}
-
-#pragma mark -
-#pragma mark appearance management
-
-// Show split view and hide the video view
-- (void)makeSplitViewVisible
-{
-    [self setContentMinSize: NSMakeSize(604., f_min_window_height)];
-
-    NSRect old_frame = [self frame];
-    CGFloat newHeight = [self minSize].height;
-    if (old_frame.size.height < newHeight) {
-        NSRect new_frame = old_frame;
-        new_frame.origin.y = old_frame.origin.y + old_frame.size.height - newHeight;
-        new_frame.size.height = newHeight;
-
-        [[self animator] setFrame:new_frame display:YES animate:YES];
-    }
-
-    [self.videoView setHidden:YES];
-    [_splitView setHidden:NO];
-    if (self.nativeFullscreenMode && [self fullscreen]) {
-        [self showControlsBar];
-        [self.fspanel setNonActive];
-    }
-
-    [self makeFirstResponder:_playlistScrollView];
-}
-
-// Hides the split view and makes the vout view in foreground
-- (void)makeSplitViewHidden
-{
-    [self setContentMinSize: NSMakeSize(604., f_min_video_height)];
-
-    [_splitView setHidden:YES];
-    [self.videoView setHidden:NO];
-    if (self.nativeFullscreenMode && [self fullscreen]) {
-        [self hideControlsBar];
-        [self.fspanel setActive];
-    }
-
-    if ([[self.videoView subviews] count] > 0)
-        [self makeFirstResponder: [[self.videoView subviews] firstObject]];
-}
-
-- (void)changePlaylistState:(VLCPlaylistStateEvent)event
-{
-    // Beware, this code is really ugly
-
-    msg_Dbg(getIntf(), "toggle playlist from state: removed splitview %i, minimized view %i. Event %i", b_splitview_removed, b_minimized_view, event);
-    if (![self isVisible] && event == psUserMenuEvent) {
-        [self makeKeyAndOrderFront: nil];
-        return;
-    }
-
-    BOOL b_activeVideo = [[VLCMain sharedInstance] activeVideoPlayback];
-    BOOL b_restored = NO;
-
-    // ignore alt if triggered through main menu shortcut
-    BOOL b_have_alt_key = ([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask) != 0;
-    if (event == psUserMenuEvent)
-        b_have_alt_key = NO;
-
-    // eUserMenuEvent is now handled same as eUserEvent
-    if(event == psUserMenuEvent)
-        event = psUserEvent;
-
-    if (b_dropzone_active && b_have_alt_key) {
-        [self hideDropZone];
-        return;
-    }
-
-    if (!(self.nativeFullscreenMode && self.fullscreen) && !b_splitview_removed && ((b_have_alt_key && b_activeVideo)
-                                                                              || (self.nonembedded && event == psUserEvent)
-                                                                              || (!b_activeVideo && event == psUserEvent)
-                                                                              || (b_minimized_view && event == psVideoStartedOrStoppedEvent))) {
-        // for starting playback, window is resized through resized events
-        // for stopping playback, resize through reset to previous frame
-        [self hideSplitView: event != psVideoStartedOrStoppedEvent];
-        b_minimized_view = NO;
-    } else {
-        if (b_splitview_removed) {
-            if (!self.nonembedded || (event == psUserEvent && self.nonembedded))
-                [self showSplitView: event != psVideoStartedOrStoppedEvent];
-
-            if (event != psUserEvent)
-                b_minimized_view = YES;
-            else
-                b_minimized_view = NO;
-
-            if (b_activeVideo)
-                b_restored = YES;
-        }
-
-        if (!self.nonembedded) {
-            if (([self.videoView isHidden] && b_activeVideo) || b_restored || (b_activeVideo && event != psUserEvent))
-                [self makeSplitViewHidden];
-            else
-                [self makeSplitViewVisible];
-        } else {
-            [_splitView setHidden: NO];
-            [_playlistScrollView setHidden: NO];
-            [self.videoView setHidden: YES];
-            [self showControlsBar];
-        }
-    }
-
-    msg_Dbg(getIntf(), "toggle playlist to state: removed splitview %i, minimized view %i", b_splitview_removed, b_minimized_view);
-}
-
-- (IBAction)dropzoneButtonAction:(id)sender
-{
-    [[[VLCMain sharedInstance] open] openFileGeneric];
-}
-
-#pragma mark -
-#pragma mark overwritten default functionality
-
-- (void)windowResizedOrMoved:(NSNotification *)notification
-{
-    [self saveFrameUsingName:[self frameAutosaveName]];
-}
-
-- (void)applicationWillTerminate:(NSNotification *)notification
-{
-    [self saveFrameUsingName:[self frameAutosaveName]];
-}
-
-
-- (void)someWindowWillClose:(NSNotification *)notification
-{
-    id obj = [notification object];
-
-    // hasActiveVideo is defined for VLCVideoWindowCommon and subclasses
-    if ([obj respondsToSelector:@selector(hasActiveVideo)] && [obj hasActiveVideo]) {
-        if ([[VLCMain sharedInstance] activeVideoPlayback])
-            [[[VLCMain sharedInstance] playlistController] stopPlayback];
-    }
-}
-
-- (void)someWindowWillMiniaturize:(NSNotification *)notification
-{
-    if (config_GetInt("macosx-pause-minimized")) {
-        id obj = [notification object];
-
-        if ([obj class] == [VLCVideoWindowCommon class] || [obj class] == [VLCDetachedVideoWindow class] || ([obj class] == [VLCMainWindow class] && !self.nonembedded)) {
-            if ([[VLCMain sharedInstance] activeVideoPlayback])
-                [[[VLCMain sharedInstance] playlistController] pausePlayback];
-        }
-    }
-}
-
-#pragma mark -
-#pragma mark Update interface and respond to foreign events
-- (void)showDropZone
-{
-    b_dropzone_active = YES;
-    [_dropzoneView setHidden:NO];
-    [_playlistScrollView setHidden:YES];
-}
-
-- (void)hideDropZone
-{
-    b_dropzone_active = NO;
-    [_dropzoneView setHidden:YES];
-    [_playlistScrollView setHidden:NO];
-}
-
-- (void)hideSplitView:(BOOL)resize
-{
-    if (resize) {
-        NSRect winrect = [self frame];
-        f_lastSplitViewHeight = [_splitView frame].size.height;
-        winrect.size.height = winrect.size.height - f_lastSplitViewHeight;
-        winrect.origin.y = winrect.origin.y + f_lastSplitViewHeight;
-        [self setFrame:winrect display:YES animate:YES];
-    }
-
-    [self setContentMinSize: NSMakeSize(604., [self.controlsBar height])];
-    [self setContentMaxSize: NSMakeSize(FLT_MAX, [self.controlsBar height])];
-
-    b_splitview_removed = YES;
-}
-
-- (void)showSplitView:(BOOL)resize
-{
-    [self setContentMinSize:NSMakeSize(604., f_min_window_height)];
-    [self setContentMaxSize: NSMakeSize(FLT_MAX, FLT_MAX)];
-
-    if (resize) {
-        NSRect winrect;
-        winrect = [self frame];
-        winrect.size.height = winrect.size.height + f_lastSplitViewHeight;
-        winrect.origin.y = winrect.origin.y - f_lastSplitViewHeight;
-        [self setFrame:winrect display:YES animate:YES];
-    }
-
-    b_splitview_removed = NO;
-}
-
-#pragma mark -
-#pragma mark Video Output handling
-
-- (void)videoplayWillBeStarted
-{
-    if (!self.fullscreen)
-        frameBeforePlayback = [self frame];
-}
-
-- (void)setVideoplayEnabled
-{
-    BOOL b_videoPlayback = [[VLCMain sharedInstance] activeVideoPlayback];
-
-    if (!b_videoPlayback) {
-        if (!self.nonembedded && (!self.nativeFullscreenMode || (self.nativeFullscreenMode && !self.fullscreen)) && frameBeforePlayback.size.width > 0 && frameBeforePlayback.size.height > 0) {
-
-            // only resize back to minimum view of this is still desired final state
-            CGFloat f_threshold_height = f_min_video_height + [self.controlsBar height];
-            if(frameBeforePlayback.size.height > f_threshold_height || b_minimized_view) {
-
-                if ([[VLCMain sharedInstance] isTerminating])
-                    [self setFrame:frameBeforePlayback display:YES];
-                else
-                    [[self animator] setFrame:frameBeforePlayback display:YES];
-
-            }
-        }
-
-        frameBeforePlayback = NSMakeRect(0, 0, 0, 0);
-
-        [self makeFirstResponder: _playlistScrollView];
-        [[[VLCMain sharedInstance] voutProvider] updateWindowLevelForHelperWindows: NSNormalWindowLevel];
-
-        // restore alpha value to 1 for the case that macosx-opaqueness is set to < 1
-        [self setAlphaValue:1.0];
-    }
-
-    if (self.nativeFullscreenMode) {
-        if ([self hasActiveVideo] && [self fullscreen] && b_videoPlayback) {
-            [self hideControlsBar];
-            [self.fspanel setActive];
-        } else {
-            [self showControlsBar];
-            [self.fspanel setNonActive];
-        }
-    }
-}
-
-#pragma mark -
-#pragma mark Fullscreen support
-
-- (void)showFullscreenController
-{
-    id currentWindow = [NSApp keyWindow];
-    if ([currentWindow respondsToSelector:@selector(hasActiveVideo)] && [currentWindow hasActiveVideo]) {
-        if ([currentWindow respondsToSelector:@selector(fullscreen)] && [currentWindow fullscreen] && ![[currentWindow videoView] isHidden]) {
-
-            if ([[VLCMain sharedInstance] activeVideoPlayback])
-                [self.fspanel fadeIn];
-        }
-    }
-
-}
-
-#pragma mark -
-#pragma mark split view delegate
-- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMax ofSubviewAt:(NSInteger)dividerIndex
-{
-    if (dividerIndex == 0)
-        return 300.;
-    else
-        return proposedMax;
-}
-
-- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMin ofSubviewAt:(NSInteger)dividerIndex
-{
-    if (dividerIndex == 0)
-        return 100.;
-    else
-        return proposedMin;
-}
-
-- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview
-{
-    return ([subview isEqual:_splitViewLeft]);
-}
-
-- (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)subview
-{
-    return (![subview isEqual:_splitViewLeft]);
-}
-
-- (void)mainSplitViewDidResizeSubviews:(id)object
-{
-    f_lastLeftSplitViewWidth = [_splitViewLeft frame].size.width;
-    [[[VLCMain sharedInstance] mainMenu] updateSidebarMenuItem: ![_splitView isSubviewCollapsed:_splitViewLeft]];
-}
-
-- (void)toggleLeftSubSplitView
-{
-    [_splitView adjustSubviews];
-    if ([_splitView isSubviewCollapsed:_splitViewLeft])
-        [_splitView setPosition:f_lastLeftSplitViewWidth ofDividerAtIndex:0];
-    else
-        [_splitView setPosition:[_splitView minPossiblePositionOfDividerAtIndex:0] ofDividerAtIndex:0];
-
-    [[[VLCMain sharedInstance] mainMenu] updateSidebarMenuItem: ![_splitView isSubviewCollapsed:_splitViewLeft]];
-}
-
-@end
diff --git a/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m b/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m
index 7c6181984be7..22e39b5aa372 100644
--- a/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m
+++ b/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m
@@ -31,6 +31,7 @@
 #import "windows/mainwindow/VLCMainWindowControlsBar.h"
 #import "playlist/VLCPlaylistController.h"
 #import "playlist/VLCPlayerController.h"
+#import "library/VLCLibraryWindow.h"
 
 /*****************************************************************************
  * VLCMainWindowControlsBar
@@ -383,7 +384,8 @@
 
 - (IBAction)togglePlaylist:(id)sender
 {
-    [[[VLCMain sharedInstance] mainWindow] changePlaylistState: psUserEvent];
+    // FIXME: this is a NO-OP
+    [[[VLCMain sharedInstance] libraryWindow] changePlaylistState: 0];
 }
 
 - (IBAction)volumeAction:(id)sender
diff --git a/modules/gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.h b/modules/gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.h
deleted file mode 100644
index 9cd0b9d3e6cc..000000000000
--- a/modules/gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*****************************************************************************
- * VLCSourceListBadgeButton.h: MacOS X interface module
- *****************************************************************************
- * Copyright (C) 2018 VLC authors and VideoLAN
- *
- * Authors: Marvin Scholz <epirat07 at gmail dot 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 VLCSourceListBadgeButton : NSButton
-
-@property IBInspectable BOOL hideWhenZero;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/modules/gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.m b/modules/gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.m
deleted file mode 100644
index 6ecea9346c03..000000000000
--- a/modules/gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.m
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************************
- * VLCSourceListBadgeButton.m: MacOS X interface module
- *****************************************************************************
- * Copyright (C) 2018 VLC authors and VideoLAN
- *
- * Authors: Marvin Scholz <epirat07 at gmail dot 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 "VLCSourceListBadgeButton.h"
-
-@implementation VLCSourceListBadgeButton
-
-/* Ignore clicks on this button as we use it as badge so we want clicks to
- * pass-through us and not handle them.
- */
-- (NSView *)hitTest:(NSPoint)point
-{
-    return nil;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)coder
-{
-    self = [super initWithCoder:coder];
-    if (self) {
-        [(NSButtonCell*)[self cell] setShowsStateBy:0];
-        [(NSButtonCell*)[self cell] setHighlightsBy:0];
-    }
-
-    return self;
-}
-
-/* Our badges show integer values so make it easier to set those by setting
- * the title depending on the integer value.
- */
-- (void)setIntegerValue:(NSInteger)integerValue
-{
-    [super setIntegerValue:integerValue];
-
-    self.title = [@(integerValue) stringValue];
-
-    if (_hideWhenZero)
-        [self setHidden:(integerValue == 0)];
-}
-
-/* "Alias" for setIntegerValue for normal int vs NSInteger
- */
-- (void)setIntValue:(int)intValue
-{
-    [self setIntegerValue:intValue];
-}
-
-/* Return zero size when hidden
- */
-- (NSSize)intrinsicContentSize
-{
-    if (_hideWhenZero && self.hidden)
-        return CGSizeZero;
-    return [super intrinsicContentSize];
-}
-
-@end
diff --git a/modules/gui/macosx/windows/mainwindow/VLCSourceListItem.h b/modules/gui/macosx/windows/mainwindow/VLCSourceListItem.h
deleted file mode 100644
index f538dbd154d5..000000000000
--- a/modules/gui/macosx/windows/mainwindow/VLCSourceListItem.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*****************************************************************************
- * VLCSourceListItem.h: MacOS X interface module
- *****************************************************************************
- * Copyright (C) 2018 VLC authors and VideoLAN
- *
- * Authors: Marvin Scholz <epirat07 at gmail dot 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 "imported/PXSourceList/PXSourceListItem.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface VLCSourceListItem : PXSourceListItem
-
-@property NSInteger sdtype;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/modules/gui/macosx/windows/mainwindow/VLCSourceListItem.m b/modules/gui/macosx/windows/mainwindow/VLCSourceListItem.m
deleted file mode 100644
index 744b84d7f982..000000000000
--- a/modules/gui/macosx/windows/mainwindow/VLCSourceListItem.m
+++ /dev/null
@@ -1,37 +0,0 @@
-/*****************************************************************************
- * VLCSourceListItem.m: MacOS X interface module
- *****************************************************************************
- * Copyright (C) 2018 VLC authors and VideoLAN
- *
- * Authors: Marvin Scholz <epirat07 at gmail dot 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 "VLCSourceListItem.h"
-
-@implementation VLCSourceListItem
-
-- (id)init
-{
-    self = [super init];
-    if (self) {
-        _sdtype = -1; // No SD type set
-    }
-
-    return self;
-}
-
-@end
diff --git a/modules/gui/macosx/windows/mainwindow/VLCSourceListTableCellView.h b/modules/gui/macosx/windows/mainwindow/VLCSourceListTableCellView.h
deleted file mode 100644
index 155e7b4e5745..000000000000
--- a/modules/gui/macosx/windows/mainwindow/VLCSourceListTableCellView.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*****************************************************************************
- * VLCSourceListTableCellView.h: MacOS X interface module
- *****************************************************************************
- * Copyright (C) 2018 VLC authors and VideoLAN
- *
- * Authors: Marvin Scholz <epirat07 at gmail dot 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>
-
-#import "windows/mainwindow/VLCSourceListBadgeButton.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface VLCSourceListTableCellView : NSTableCellView
-
-@property (weak, nonatomic) IBOutlet VLCSourceListBadgeButton *badgeView;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/modules/gui/macosx/windows/mainwindow/VLCSourceListTableCellView.m b/modules/gui/macosx/windows/mainwindow/VLCSourceListTableCellView.m
deleted file mode 100644
index f62f45e55864..000000000000
--- a/modules/gui/macosx/windows/mainwindow/VLCSourceListTableCellView.m
+++ /dev/null
@@ -1,27 +0,0 @@
-/*****************************************************************************
- * VLCSourceListTableCellView.m: MacOS X interface module
- *****************************************************************************
- * Copyright (C) 2018 VLC authors and VideoLAN
- *
- * Authors: Marvin Scholz <epirat07 at gmail dot 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 "VLCSourceListTableCellView.h"
-
-@implementation VLCSourceListTableCellView
-
-@end
diff --git a/modules/gui/macosx/windows/video/VLCVideoOutputProvider.m b/modules/gui/macosx/windows/video/VLCVideoOutputProvider.m
index ccfe51ba7f0e..a31489b7c423 100644
--- a/modules/gui/macosx/windows/video/VLCVideoOutputProvider.m
+++ b/modules/gui/macosx/windows/video/VLCVideoOutputProvider.m
@@ -29,11 +29,11 @@
 
 #import "main/CompatibilityFixes.h"
 #import "main/VLCMain.h"
-#import "windows/mainwindow/VLCMainWindow.h"
 #import "windows/video/VLCDetachedVideoWindow.h"
 #import "windows/video/VLCVoutView.h"
 #import "playlist/VLCPlaylistController.h"
 #import "playlist/VLCPlayerController.h"
+#import "library/VLCLibraryWindow.h"
 
 #import "panels/dialogs/VLCResumeDialogController.h"
 #import "panels/VLCVideoEffectsWindowController.h"
@@ -227,7 +227,7 @@ int WindowOpen(vout_window_t *p_wnd)
 
     // should be called before any window resizing occurs
     if (!multipleVoutWindows)
-        [[mainInstance mainWindow] videoplayWillBeStarted];
+        [[mainInstance libraryWindow] videoplayWillBeStarted];
 
     if (multipleVoutWindows && videoWallpaper)
         videoWallpaper = false;
@@ -239,13 +239,13 @@ int WindowOpen(vout_window_t *p_wnd)
         msg_Dbg(getIntf(), "Creating background / blank window");
         NSScreen *screen = [NSScreen screenWithDisplayID:(CGDirectDisplayID)var_InheritInteger(getIntf(), "macosx-vdev")];
         if (!screen)
-            screen = [[mainInstance mainWindow] screen];
+            screen = [[mainInstance libraryWindow] screen];
 
         NSRect window_rect;
         if (videoWallpaper)
             window_rect = [screen frame];
         else
-            window_rect = [[mainInstance mainWindow] frame];
+            window_rect = [[mainInstance libraryWindow] frame];
 
         NSUInteger mask = NSBorderlessWindowMask;
         if (!windowDecorations)
@@ -287,7 +287,7 @@ int WindowOpen(vout_window_t *p_wnd)
     } else {
         if ((var_InheritBool(getIntf(), "embedded-video") && !b_mainWindowHasVideo)) {
             // setup embedded video
-            newVideoWindow = [mainInstance mainWindow] ;
+            newVideoWindow = [mainInstance libraryWindow] ;
             voutView = [newVideoWindow videoView];
             b_mainWindowHasVideo = YES;
             isEmbedded = YES;
@@ -351,11 +351,11 @@ int WindowOpen(vout_window_t *p_wnd)
     [_voutWindows setObject:newVideoWindow forKey:[NSValue valueWithPointer:p_wnd]];
 
     [mainInstance setActiveVideoPlayback: YES];
-    [[mainInstance mainWindow] setNonembedded:!b_mainWindowHasVideo];
+    [[mainInstance libraryWindow] setNonembedded:!b_mainWindowHasVideo];
 
     // beware of order, setActiveVideoPlayback:, setHasActiveVideo: and setNonembedded: must be called before
-    if ([newVideoWindow class] == [VLCMainWindow class])
-        [[mainInstance mainWindow] changePlaylistState: psVideoStartedOrStoppedEvent];
+    if ([newVideoWindow class] == [VLCLibraryWindow class])
+        [[mainInstance libraryWindow] changePlaylistState: 0]; // FIXME: this is a NO-OP
 
     // TODO: find a cleaner way for "start in fullscreen"
     // Start in fs, because either prefs settings, or fullscreen button was pressed before
@@ -396,7 +396,7 @@ int WindowOpen(vout_window_t *p_wnd)
 
     // prevent visible extra window if in fullscreen
     NSDisableScreenUpdates();
-    BOOL b_native = [[mainInstance mainWindow] nativeFullscreenMode];
+    BOOL b_native = [[mainInstance libraryWindow] nativeFullscreenMode];
 
     // close fullscreen, without changing fullscreen vars
     if (!b_native && ([o_window fullscreen] || [o_window inFullscreenTransition]))
@@ -404,11 +404,11 @@ int WindowOpen(vout_window_t *p_wnd)
 
     // native fullscreen window will not be closed if
     // fullscreen was triggered without video
-    if ((b_native && [o_window class] == [VLCMainWindow class] && [o_window fullscreen] && [o_window windowShouldExitFullscreenWhenFinished])) {
+    if ((b_native && [o_window class] == [VLCLibraryWindow class] && [o_window fullscreen] && [o_window windowShouldExitFullscreenWhenFinished])) {
         [o_window toggleFullScreen:self];
     }
 
-    if ([o_window class] != [VLCMainWindow class]) {
+    if ([o_window class] != [VLCLibraryWindow class]) {
         [o_window close];
     }
     NSEnableScreenUpdates();
@@ -419,15 +419,15 @@ int WindowOpen(vout_window_t *p_wnd)
         _statusLevelWindowCounter = 0;
     }
 
-    if ([o_window class] == [VLCMainWindow class]) {
+    if ([o_window class] == [VLCLibraryWindow class]) {
         b_mainWindowHasVideo = NO;
 
         // video in main window might get stopped while another vout is open
         if ([_voutWindows count] > 0)
-            [[mainInstance mainWindow] setNonembedded:YES];
+            [[mainInstance libraryWindow] setNonembedded:YES];
 
         // beware of order, setActiveVideoPlayback:, setHasActiveVideo: and setNonembedded: must be called before
-        [[mainInstance mainWindow] changePlaylistState: psVideoStartedOrStoppedEvent];
+        [[mainInstance libraryWindow] changePlaylistState: 0]; // FIXME: this is a NO-OP
     }
 }
 
@@ -492,7 +492,7 @@ int WindowOpen(vout_window_t *p_wnd)
 
     if (b_nativeFullscreenMode) {
         if(!o_current_window)
-            o_current_window = [[VLCMain sharedInstance] mainWindow] ;
+            o_current_window = [[VLCMain sharedInstance] libraryWindow] ;
         assert(o_current_window);
 
         // fullscreen might be triggered twice (vout event)
@@ -556,7 +556,7 @@ int WindowOpen(vout_window_t *p_wnd)
     NSInteger currentStatusWindowLevel = self.currentStatusWindowLevel;
 
     VLCMain *main = [VLCMain sharedInstance];
-    [[main mainWindow] setWindowLevel:i_level];
+    [[main libraryWindow] setWindowLevel:i_level];
     [[main videoEffectsPanel] updateCocoaWindowLevel:currentStatusWindowLevel];
     [[main audioEffectsPanel] updateCocoaWindowLevel:currentStatusWindowLevel];
     [[main currentMediaInfoPanel] updateCocoaWindowLevel:currentStatusWindowLevel];
diff --git a/modules/gui/macosx/windows/video/VLCVideoWindowCommon.m b/modules/gui/macosx/windows/video/VLCVideoWindowCommon.m
index f27da4e9174d..7cd7a83c690e 100644
--- a/modules/gui/macosx/windows/video/VLCVideoWindowCommon.m
+++ b/modules/gui/macosx/windows/video/VLCVideoWindowCommon.m
@@ -31,6 +31,7 @@
 #import "windows/video/VLCFSPanelController.h"
 #import "playlist/VLCPlaylistController.h"
 #import "playlist/VLCPlayerController.h"
+#import "library/VLCLibraryWindow.h"
 
 /*****************************************************************************
  * VLCVideoWindowCommon
@@ -436,16 +437,16 @@
 
     // change fspanel state for the case when multiple windows are in fullscreen
     if ([self hasActiveVideo] && [self fullscreen])
-        [[[[VLCMain sharedInstance] mainWindow] fspanel] setActive];
+        [[[[VLCMain sharedInstance] libraryWindow] fspanel] setActive];
     else
-        [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive];
+        [[[[VLCMain sharedInstance] libraryWindow] fspanel] setNonActive];
 }
 
 - (void)resignKeyWindow
 {
     [super resignKeyWindow];
 
-    [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive];
+    [[[[VLCMain sharedInstance] libraryWindow] fspanel] setNonActive];
 }
 
 -(NSArray*)customWindowsToEnterFullScreenForWindow:(NSWindow *)window
@@ -532,9 +533,9 @@
     _inFullscreenTransition = NO;
 
     if ([self hasActiveVideo]) {
-        [[[[VLCMain sharedInstance] mainWindow] fspanel] setVoutWasUpdated:self];
+        [[[[VLCMain sharedInstance] libraryWindow] fspanel] setVoutWasUpdated:self];
         if (![_videoView isHidden])
-            [[[[VLCMain sharedInstance] mainWindow] fspanel] setActive];
+            [[[[VLCMain sharedInstance] libraryWindow] fspanel] setActive];
     }
 
     NSArray *subviews = [[self videoView] subviews];
@@ -563,7 +564,7 @@
     }
 
     [NSCursor setHiddenUntilMouseMoves: NO];
-    [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive];
+    [[[[VLCMain sharedInstance] libraryWindow] fspanel] setNonActive];
 
     if (![_videoView isHidden]) {
         [self showControlsBar];
@@ -741,8 +742,8 @@
     [o_fullscreen_window setAcceptsMouseMovedEvents: YES];
 
     /* tell the fspanel to move itself to front next time it's triggered */
-    [[[[VLCMain sharedInstance] mainWindow] fspanel] setVoutWasUpdated:o_fullscreen_window];
-    [[[[VLCMain sharedInstance] mainWindow] fspanel] setActive];
+    [[[[VLCMain sharedInstance] libraryWindow] fspanel] setVoutWasUpdated:o_fullscreen_window];
+    [[[[VLCMain sharedInstance] libraryWindow] fspanel] setActive];
 
     if ([self isVisible])
         [self orderOut: self];
@@ -767,7 +768,7 @@
         return;
     }
 
-    [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive];
+    [[[[VLCMain sharedInstance] libraryWindow] fspanel] setNonActive];
     [[o_fullscreen_window screen] setNonFullscreenPresentationOptions];
 
     if (o_fullscreen_anim1) {
diff --git a/modules/gui/macosx/windows/video/VLCVoutView.m b/modules/gui/macosx/windows/video/VLCVoutView.m
index 13804c433acd..bd2c702c5cc5 100644
--- a/modules/gui/macosx/windows/video/VLCVoutView.m
+++ b/modules/gui/macosx/windows/video/VLCVoutView.m
@@ -39,6 +39,7 @@
 #import "menus/VLCMainMenu.h"
 #import "playlist/VLCPlaylistController.h"
 #import "playlist/VLCPlayerController.h"
+#import "windows/video/VLCVideoWindowCommon.h"
 
 /*****************************************************************************
  * VLCVoutView implementation
@@ -193,7 +194,8 @@
 
 - (BOOL)performKeyEquivalent:(NSEvent *)o_event
 {
-    return [[[VLCMain sharedInstance] mainWindow] performKeyEquivalent: o_event];
+    // FIXME: this hack is gross and wrong on many levels
+    return NO; //[[[VLCMain sharedInstance] mainWindow] performKeyEquivalent: o_event];
 }
 
 - (void)mouseDown:(NSEvent *)o_event
diff --git a/po/POTFILES.in b/po/POTFILES.in
index eb1c31471e96..39dab6bc1e26 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -601,16 +601,8 @@ modules/gui/macosx/windows/logging/VLCLogWindowController.h
 modules/gui/macosx/windows/logging/VLCLogWindowController.m
 modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.h
 modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m
-modules/gui/macosx/windows/mainwindow/VLCMainWindow.h
-modules/gui/macosx/windows/mainwindow/VLCMainWindow.m
 modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.h
 modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m
-modules/gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.h
-modules/gui/macosx/windows/mainwindow/VLCSourceListBadgeButton.m
-modules/gui/macosx/windows/mainwindow/VLCSourceListItem.h
-modules/gui/macosx/windows/mainwindow/VLCSourceListItem.m
-modules/gui/macosx/windows/mainwindow/VLCSourceListTableCellView.h
-modules/gui/macosx/windows/mainwindow/VLCSourceListTableCellView.m
 modules/gui/macosx/windows/video/VLCDetachedVideoWindow.h
 modules/gui/macosx/windows/video/VLCDetachedVideoWindow.m
 modules/gui/macosx/windows/video/VLCFSPanelController.h
-- 
GitLab