[vlc-commits] macosx/control bars: remove legacy playlist
Felix Paul Kühne
git at videolan.org
Wed Mar 27 17:52:57 CET 2019
vlc | branch: master | Felix Paul Kühne <felix at feepk.net> | Wed Mar 27 17:51:09 2019 +0100| [6c0c4ffe555c9822cf01a6178d1033b70dab2218] | committer: Felix Paul Kühne
macosx/control bars: remove legacy playlist
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6c0c4ffe555c9822cf01a6178d1033b70dab2218
---
.../gui/macosx/coreinteraction/VLCInputManager.m | 5 +-
modules/gui/macosx/main/VLCMain.m | 1 -
.../windows/mainwindow/VLCControlsBarCommon.h | 7 +-
.../windows/mainwindow/VLCControlsBarCommon.m | 57 ++++----
.../gui/macosx/windows/mainwindow/VLCMainWindow.h | 3 -
.../gui/macosx/windows/mainwindow/VLCMainWindow.m | 37 ------
.../windows/mainwindow/VLCMainWindowControlsBar.h | 11 +-
.../windows/mainwindow/VLCMainWindowControlsBar.m | 146 +++++++++++----------
.../macosx/windows/video/VLCVideoWindowCommon.m | 8 --
9 files changed, 106 insertions(+), 169 deletions(-)
diff --git a/modules/gui/macosx/coreinteraction/VLCInputManager.m b/modules/gui/macosx/coreinteraction/VLCInputManager.m
index 5336633011..1688ba9499 100644
--- a/modules/gui/macosx/coreinteraction/VLCInputManager.m
+++ b/modules/gui/macosx/coreinteraction/VLCInputManager.m
@@ -241,11 +241,8 @@ static int InputEvent(vlc_object_t *p_this, const char *psz_var,
state = var_GetInteger(p_current_input, "state");
}
- if (state == PLAYING_S) {
- [[o_main mainWindow] setPause];
- } else {
+ if (state != PLAYING_S) {
[[o_main mainMenu] setSubmenusEnabled: FALSE];
- [[o_main mainWindow] setPlay];
if (state == END_S || state == -1) {
/* continue playback where you left off */
diff --git a/modules/gui/macosx/main/VLCMain.m b/modules/gui/macosx/main/VLCMain.m
index cea62580a3..f4d07db9c9 100644
--- a/modules/gui/macosx/main/VLCMain.m
+++ b/modules/gui/macosx/main/VLCMain.m
@@ -307,7 +307,6 @@ static VLCMain *sharedInstance = nil;
/* update the main window */
[[self mainWindow] updateWindow];
- [[self mainWindow] updateVolumeSlider];
// respect playlist-autostart
if (var_GetBool(p_intf, "playlist-autostart")) {
diff --git a/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.h b/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.h
index a82dcafd08..a99e9d8f35 100644
--- a/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.h
+++ b/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.h
@@ -1,7 +1,7 @@
/*****************************************************************************
* VLCControlsBarCommon.h: MacOS X interface module
*****************************************************************************
- * Copyright (C) 2012-2016 VLC authors and VideoLAN
+ * Copyright (C) 2012-2019 VLC authors and VideoLAN
*
* Authors: Felix Paul Kühne <fkuehne -at- videolan -dot- org>
* David Fuhrmann <david dot fuhrmann at googlemail dot com>
@@ -63,9 +63,4 @@
- (IBAction)timeSliderAction:(id)sender;
- (IBAction)fullscreen:(id)sender;
-- (void)updateControls;
-- (void)setPause;
-- (void)setPlay;
-- (void)setFullscreenState:(BOOL)b_fullscreen;
-
@end
diff --git a/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m b/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m
index 8cb40daf69..82de0de77f 100644
--- a/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m
+++ b/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m
@@ -1,7 +1,7 @@
/*****************************************************************************
* VLCControlsBarCommon.m: MacOS X interface module
*****************************************************************************
- * Copyright (C) 2012-2016 VLC authors and VideoLAN
+ * Copyright (C) 2012-2019 VLC authors and VideoLAN
*
* Authors: Felix Paul Kühne <fkuehne -at- videolan -dot- org>
* David Fuhrmann <david dot fuhrmann at googlemail dot com>
@@ -31,8 +31,6 @@
#import "playlist/VLCPlaylistController.h"
#import "playlist/VLCPlayerController.h"
-#import <vlc_playlist_legacy.h>
-
/*****************************************************************************
* VLCControlsBarCommon
*
@@ -60,7 +58,11 @@
{
[super awakeFromNib];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateTimeSlider:) name:VLCPlayerTimeAndPositionChanged object:nil];
+ NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
+ [notificationCenter addObserver:self selector:@selector(updateTimeSlider:) name:VLCPlayerTimeAndPositionChanged object:nil];
+ [notificationCenter addObserver:self selector:@selector(playerStateUpdated:) name:VLCPlayerStateChanged object:nil];
+ [notificationCenter addObserver:self selector:@selector(updatePlaybackControls:) name:VLCPlaylistCurrentItemChanged object:nil];
+ [notificationCenter addObserver:self selector:@selector(fullscreenStateUpdated:) name:VLCPlayerFullscreenChanged object:nil];
_nativeFullscreenMode = var_InheritBool(getIntf(), "macosx-nativefullscreenmode");
@@ -321,34 +323,27 @@
input_item_Release(p_item);
}
-- (void)updateControls
+- (void)playerStateUpdated:(NSNotification *)aNotification
{
- bool b_plmul = false;
- bool b_seekable = false;
- bool b_chapters = false;
-
- playlist_t * p_playlist = pl_Get(getIntf());
-
- PL_LOCK;
- b_plmul = playlist_CurrentSize(p_playlist) > 1;
- PL_UNLOCK;
-
- input_thread_t * p_input = playlist_CurrentInput(p_playlist);
-
- if (p_input) {
- /* seekable streams */
- b_seekable = var_GetBool(p_input, "can-seek");
-
- /* chapters & titles */
- //FIXME! b_chapters = p_input->stream.i_area_nb > 1;
-
- input_Release(p_input);
+ VLCPlayerController *playerController = aNotification.object;
+ if (playerController.playerState == VLC_PLAYER_STATE_PLAYING) {
+ [self setPause];
+ } else {
+ [self setPlay];
}
+}
+
+- (void)updatePlaybackControls:(NSNotification *)aNotification
+{
+ VLCPlaylistController *playlistController = [[VLCMain sharedInstance] playlistController];
+ bool b_seekable = playlistController.playerController.seekable;
+ // FIXME: re-add chapter navigation as needed
+ bool b_chapters = false;
[self.timeSlider setEnabled: b_seekable];
- [self.forwardButton setEnabled: (b_seekable || b_plmul || b_chapters)];
- [self.backwardButton setEnabled: (b_seekable || b_plmul || b_chapters)];
+ [self.forwardButton setEnabled: (b_seekable || playlistController.hasNextPlaylistItem || b_chapters)];
+ [self.backwardButton setEnabled: (b_seekable || playlistController.hasPreviousPlaylistItem || b_chapters)];
}
- (void)setPause
@@ -367,10 +362,12 @@
self.playButton.accessibilityLabel = self.playButton.toolTip;
}
-- (void)setFullscreenState:(BOOL)b_fullscreen
+- (void)fullscreenStateUpdated:(NSNotification *)aNotification
{
- if (!self.nativeFullscreenMode)
- [self.fullscreenButton setState:b_fullscreen];
+ if (!self.nativeFullscreenMode) {
+ VLCPlayerController *playerController = aNotification.object;
+ [self.fullscreenButton setState:playerController.fullscreen];
+ }
}
@end
diff --git a/modules/gui/macosx/windows/mainwindow/VLCMainWindow.h b/modules/gui/macosx/windows/mainwindow/VLCMainWindow.h
index 21facc96b5..3c24627670 100644
--- a/modules/gui/macosx/windows/mainwindow/VLCMainWindow.h
+++ b/modules/gui/macosx/windows/mainwindow/VLCMainWindow.h
@@ -113,9 +113,6 @@ typedef enum {
- (void)updateTimeSlider;
- (void)updateWindow;
- (void)updateName;
-- (void)setPause;
-- (void)setPlay;
-- (void)updateVolumeSlider;
- (void)showFullscreenController;
diff --git a/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m b/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m
index 6085acf78c..fc6316a492 100644
--- a/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m
+++ b/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m
@@ -259,10 +259,6 @@ static const float f_min_window_height = 307.;
[self resizeWindow];
}
- /* update fs button to reflect state for next startup */
- if (var_InheritBool(pl_Get(getIntf()), "fullscreen"))
- [self.controlsBar setFullscreenState:YES];
-
/* restore split view */
f_lastLeftSplitViewWidth = 200;
[[[VLCMain sharedInstance] mainMenu] updateSidebarMenuItem: ![_splitView isSubviewCollapsed:_splitViewLeft]];
@@ -633,11 +629,6 @@ static const float f_min_window_height = 307.;
- (void)updateWindow
{
- [self.controlsBar updateControls];
- [[[VLCMain sharedInstance] voutProvider] updateControlsBarsUsingBlock:^(VLCControlsBarCommon *controlsBar) {
- [controlsBar updateControls];
- }];
-
bool b_seekable = false;
playlist_t *p_playlist = pl_Get(getIntf());
@@ -655,29 +646,6 @@ static const float f_min_window_height = 307.;
[self _updatePlaylistTitle];
}
-- (void)setPause
-{
- [self.controlsBar setPause];
-
- [[[VLCMain sharedInstance] voutProvider] updateControlsBarsUsingBlock:^(VLCControlsBarCommon *controlsBar) {
- [controlsBar setPause];
- }];
-}
-
-- (void)setPlay
-{
- [self.controlsBar setPlay];
-
- [[[VLCMain sharedInstance] voutProvider] updateControlsBarsUsingBlock:^(VLCControlsBarCommon *controlsBar) {
- [controlsBar setPlay];
- }];
-}
-
-- (void)updateVolumeSlider
-{
- [(VLCMainWindowControlsBar *)[self controlsBar] updateVolumeSlider];
-}
-
#pragma mark -
#pragma mark Video Output handling
@@ -708,11 +676,6 @@ static const float f_min_window_height = 307.;
frameBeforePlayback = NSMakeRect(0, 0, 0, 0);
- // update fs button to reflect state for next startup
- if (var_InheritBool(getIntf(), "fullscreen") || var_GetBool(pl_Get(getIntf()), "fullscreen")) {
- [self.controlsBar setFullscreenState:YES];
- }
-
[self makeFirstResponder: _playlistScrollView];
[[[VLCMain sharedInstance] voutProvider] updateWindowLevelForHelperWindows: NSNormalWindowLevel];
diff --git a/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.h b/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.h
index 8df8996757..2296e3b77f 100644
--- a/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.h
+++ b/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.h
@@ -1,7 +1,7 @@
/*****************************************************************************
* ControlsBar.h: MacOS X interface module
*****************************************************************************
- * Copyright (C) 2012-2016 VLC authors and VideoLAN
+ * Copyright (C) 2012-2019 VLC authors and VideoLAN
*
* Authors: Felix Paul Kühne <fkuehne -at- videolan -dot- org>
* David Fuhrmann <david dot fuhrmann at googlemail dot com>
@@ -62,21 +62,12 @@
- (IBAction)volumeAction:(id)sender;
- (IBAction)effects:(id)sender;
-- (void)setRepeatOne;
-- (void)setRepeatAll;
-- (void)setRepeatOff;
- (IBAction)repeat:(id)sender;
-- (void)setShuffle;
-
- (IBAction)togglePlaylist:(id)sender;
- (void)toggleEffectsButton;
- (void)toggleJumpButtons;
- (void)togglePlaymodeButtons;
-- (void)updateVolumeSlider;
-- (void)updateControls;
-
@end
-
diff --git a/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m b/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m
index 29e96eb178..28fdaff477 100644
--- a/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m
+++ b/modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m
@@ -30,8 +30,8 @@
#import "main/VLCMain.h"
#import "menus/VLCMainMenu.h"
#import "windows/mainwindow/VLCMainWindowControlsBar.h"
-
-#import <vlc_playlist_legacy.h>
+#import "playlist/VLCPlaylistController.h"
+#import "playlist/VLCPlayerController.h"
/*****************************************************************************
* VLCMainWindowControlsBar
@@ -51,6 +51,8 @@
NSImage * _pressedShuffleImage;
NSImage * _shuffleOnImage;
NSImage * _pressedShuffleOnImage;
+ VLCPlaylistController *_playlistController;
+ VLCPlayerController *_playerController;
}
@end
@@ -60,6 +62,15 @@
- (void)awakeFromNib
{
[super awakeFromNib];
+ _playlistController = [[VLCMain sharedInstance] playlistController];
+ _playerController = _playlistController.playerController;
+
+ NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
+ [notificationCenter addObserver:self selector:@selector(updatePlaybackControls:) name:VLCPlaylistCurrentItemChanged object:nil];
+ [notificationCenter addObserver:self selector:@selector(updateVolumeSlider:) name:VLCPlayerVolumeChanged object:nil];
+ [notificationCenter addObserver:self selector:@selector(updateVolumeSlider:) name:VLCPlayerMuteChanged object:nil];
+ [notificationCenter addObserver:self selector:@selector(playbackOrderUpdated:) name:VLCPlaybackOrderChanged object:nil];
+ [notificationCenter addObserver:self selector:@selector(playbackRepeatChanged:) name:VLCPlaybackRepeatChanged object:nil];
[self.stopButton setToolTip: _NS("Stop")];
self.stopButton.accessibilityLabel = self.stopButton.toolTip;
@@ -281,18 +292,18 @@
- (IBAction)stop:(id)sender
{
- [[VLCCoreInteraction sharedInstance] stop];
+ [_playlistController stopPlayback];
}
// dynamically created next / prev buttons
- (IBAction)prev:(id)sender
{
- [[VLCCoreInteraction sharedInstance] previous];
+ [_playlistController playPreviousItem];
}
- (IBAction)next:(id)sender
{
- [[VLCCoreInteraction sharedInstance] next];
+ [_playlistController playNextItem];
}
- (void)setRepeatOne
@@ -315,48 +326,60 @@
- (IBAction)repeat:(id)sender
{
- vlc_value_t looping,repeating;
- intf_thread_t * p_intf = getIntf();
- playlist_t * p_playlist = pl_Get(p_intf);
-
- var_Get(p_playlist, "repeat", &repeating);
- var_Get(p_playlist, "loop", &looping);
-
- if (!repeating.b_bool && !looping.b_bool) {
- /* was: no repeating at all, switching to Repeat One */
- [[VLCCoreInteraction sharedInstance] repeatOne];
- [self setRepeatOne];
- }
- else if (repeating.b_bool && !looping.b_bool) {
- /* was: Repeat One, switching to Repeat All */
- [[VLCCoreInteraction sharedInstance] repeatAll];
- [self setRepeatAll];
- } else {
- /* was: Repeat All or bug in VLC, switching to Repeat Off */
- [[VLCCoreInteraction sharedInstance] repeatOff];
- [self setRepeatOff];
+ enum vlc_playlist_playback_repeat repeatState = _playlistController.playbackRepeat;
+ switch (repeatState) {
+ case VLC_PLAYLIST_PLAYBACK_REPEAT_NONE:
+ /* was: no repeating at all, switching to Repeat One */
+ _playlistController.playbackRepeat = VLC_PLAYLIST_PLAYBACK_REPEAT_CURRENT;
+ break;
+ case VLC_PLAYLIST_PLAYBACK_REPEAT_CURRENT:
+ /* was: Repeat One, switching to Repeat All */
+ _playlistController.playbackRepeat = VLC_PLAYLIST_PLAYBACK_REPEAT_ALL;
+ break;
+
+ default:
+ /* was: Repeat All, switching to Repeat Off */
+ _playlistController.playbackRepeat = VLC_PLAYLIST_PLAYBACK_REPEAT_NONE;
+ break;
}
}
-- (void)setShuffle
+- (void)playbackOrderUpdated:(NSNotification *)aNotification
{
- bool b_value;
- playlist_t *p_playlist = pl_Get(getIntf());
- b_value = var_GetBool(p_playlist, "random");
-
- if (b_value) {
- [self.shuffleButton setImage: _shuffleOnImage];
- [self.shuffleButton setAlternateImage: _pressedShuffleOnImage];
- } else {
+ if (_playlistController.playbackOrder == VLC_PLAYLIST_PLAYBACK_ORDER_NORMAL) {
[self.shuffleButton setImage: _shuffleImage];
[self.shuffleButton setAlternateImage: _pressedShuffleImage];
+ } else {
+ [self.shuffleButton setImage: _shuffleOnImage];
+ [self.shuffleButton setAlternateImage: _pressedShuffleOnImage];
+ }
+}
+
+- (void)playbackRepeatChanged:(NSNotification *)aNotification
+{
+ enum vlc_playlist_playback_repeat repeatState = _playlistController.playbackRepeat;
+ switch (repeatState) {
+ case VLC_PLAYLIST_PLAYBACK_REPEAT_ALL:
+ [self setRepeatAll];
+ break;
+
+ case VLC_PLAYLIST_PLAYBACK_REPEAT_CURRENT:
+ [self setRepeatOne];
+ break;
+
+ default:
+ [self setRepeatOff];
+ break;
}
}
- (IBAction)shuffle:(id)sender
{
- [[VLCCoreInteraction sharedInstance] shuffle];
- [self setShuffle];
+ if (_playlistController.playbackOrder == VLC_PLAYLIST_PLAYBACK_ORDER_NORMAL) {
+ _playlistController.playbackOrder = VLC_PLAYLIST_PLAYBACK_ORDER_RANDOM;
+ } else {
+ _playlistController.playbackOrder = VLC_PLAYLIST_PLAYBACK_ORDER_NORMAL;
+ }
}
- (IBAction)togglePlaylist:(id)sender
@@ -382,57 +405,40 @@
#pragma mark -
#pragma mark Extra updaters
-- (void)updateVolumeSlider
+- (void)updateVolumeSlider:(NSNotification *)aNotification
{
- int i_volume = [[VLCCoreInteraction sharedInstance] volume];
- BOOL b_muted = [[VLCCoreInteraction sharedInstance] mute];
+ float f_volume = _playerController.volume;
+ BOOL b_muted = _playerController.mute;
if (b_muted)
- i_volume = 0;
-
- [self.volumeSlider setIntValue: i_volume];
+ f_volume = 0.;
- i_volume = (i_volume * 200) / AOUT_VOLUME_MAX;
- NSString *volumeTooltip = [NSString stringWithFormat:_NS("Volume: %i %%"), i_volume];
+ [self.volumeSlider setFloatValue: f_volume];
+ NSString *volumeTooltip = [NSString stringWithFormat:_NS("Volume: %i %%"), f_volume * 100];
[self.volumeSlider setToolTip:volumeTooltip];
[self.volumeSlider setEnabled: !b_muted];
[self.volumeUpButton setEnabled: !b_muted];
}
-- (void)updateControls
+- (void)updatePlaybackControls:(NSNotification *)aNotification
{
- [super updateControls];
-
bool b_input = false;
- bool b_seekable = false;
- bool b_plmul = false;
- bool b_control = false;
+ bool b_seekable = _playerController.seekable;
+ bool b_control = _playerController.rateChangable;
+ // FIXME: re-add chapter navigation as needed
bool b_chapters = false;
- playlist_t * p_playlist = pl_Get(getIntf());
-
- PL_LOCK;
- b_plmul = playlist_CurrentSize(p_playlist) > 1;
- PL_UNLOCK;
-
- input_thread_t * p_input = playlist_CurrentInput(p_playlist);
- if ((b_input = (p_input != NULL))) {
- /* seekable streams */
- b_seekable = var_GetBool(p_input, "can-seek");
-
- /* check whether slow/fast motion is possible */
- b_control = var_GetBool(p_input, "can-rate");
-
- /* chapters & titles */
- //FIXME! b_chapters = p_input->stream.i_area_nb > 1;
-
- input_Release(p_input);
+ input_item_t *p_item = _playerController.currentMedia;
+ b_input = p_item != NULL;
+ if (p_item) {
+ b_input = YES;
+ input_item_Release(p_item);
}
[self.stopButton setEnabled: b_input];
- [self.prevButton setEnabled: (b_seekable || b_plmul || b_chapters)];
- [self.nextButton setEnabled: (b_seekable || b_plmul || b_chapters)];
+ [self.prevButton setEnabled: (b_seekable || _playlistController.hasPreviousPlaylistItem || b_chapters)];
+ [self.nextButton setEnabled: (b_seekable || _playlistController.hasNextPlaylistItem || b_chapters)];
[[[VLCMain sharedInstance] mainMenu] setRateControlsEnabled: b_control];
}
diff --git a/modules/gui/macosx/windows/video/VLCVideoWindowCommon.m b/modules/gui/macosx/windows/video/VLCVideoWindowCommon.m
index 94c371d90b..d6a2d06bd2 100644
--- a/modules/gui/macosx/windows/video/VLCVideoWindowCommon.m
+++ b/modules/gui/macosx/windows/video/VLCVideoWindowCommon.m
@@ -550,10 +550,6 @@
screen_rect = [screen frame];
- if (self.controlsBar)
- [self.controlsBar setFullscreenState:YES];
- [[[[VLCMain sharedInstance] mainWindow] controlsBar] setFullscreenState:YES];
-
if (blackout_other_displays)
[screen blackoutOtherScreens];
@@ -707,10 +703,6 @@
NSRect frame;
BOOL blackout_other_displays = var_InheritBool(getIntf(), "macosx-black");
- if (self.controlsBar)
- [self.controlsBar setFullscreenState:NO];
- [[[[VLCMain sharedInstance] mainWindow] controlsBar] setFullscreenState:NO];
-
/* We always try to do so */
[NSScreen unblackoutScreens];
More information about the vlc-commits
mailing list