Commit ba02e3b2 authored by Eric Petit's avatar Eric Petit

beos/*: update the playlist properly

parent db913e1c
......@@ -174,6 +174,14 @@ collect_folder_contents( BDirectory& dir, BList& list, bool& deep, bool& asked,
}
}
static int PlaylistChanged( vlc_object_t *p_this, const char * psz_variable,
vlc_value_t old_val, vlc_value_t new_val,
void * param )
{
InterfaceWindow * w = (InterfaceWindow *) param;
w->UpdatePlaylist();
return VLC_SUCCESS;
}
/*****************************************************************************
* InterfaceWindow
......@@ -193,6 +201,15 @@ InterfaceWindow::InterfaceWindow( intf_thread_t * _p_intf, BRect frame,
fLastUpdateTime( system_time() ),
fSettings( new BMessage( 'sett' ) )
{
p_playlist = (playlist_t *)
vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
var_AddCallback( p_playlist, "intf-change", PlaylistChanged, this );
var_AddCallback( p_playlist, "item-change", PlaylistChanged, this );
var_AddCallback( p_playlist, "item-append", PlaylistChanged, this );
var_AddCallback( p_playlist, "item-deleted", PlaylistChanged, this );
var_AddCallback( p_playlist, "playlist-current", PlaylistChanged, this );
char psz_tmp[1024];
#define ADD_ELLIPSIS( a ) \
memset( psz_tmp, 0, 1024 ); \
......@@ -416,7 +433,7 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
playlist_Add( p_playlist, psz_uri, psz_device,
PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END );
}
_UpdatePlaylist();
UpdatePlaylist();
}
break;
......@@ -731,7 +748,7 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
}
}
_UpdatePlaylist();
UpdatePlaylist();
break;
}
......@@ -792,12 +809,6 @@ bool InterfaceWindow::QuitRequested()
*****************************************************************************/
void InterfaceWindow::UpdateInterface()
{
/* Manage the input part */
if( !p_playlist )
{
p_playlist = (playlist_t *)
vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
}
if( !p_input )
{
p_input = (input_thread_t *)
......@@ -815,6 +826,17 @@ void InterfaceWindow::UpdateInterface()
return;
}
if( b_playlist_update )
{
if( fPlaylistWindow->Lock() )
{
fPlaylistWindow->UpdatePlaylist( true );
fPlaylistWindow->Unlock();
b_playlist_update = false;
}
p_mediaControl->SetEnabled( p_playlist->i_size );
}
if( p_input )
{
vlc_value_t val;
......@@ -840,13 +862,6 @@ void InterfaceWindow::UpdateInterface()
aout_VolumeGet( p_intf, &i_volume );
p_mediaControl->SetAudioEnabled( true );
p_mediaControl->SetMuted( i_volume );
// update playlist as well
if( fPlaylistWindow->LockWithTimeout( INTERFACE_LOCKING_TIMEOUT ) == B_OK )
{
fPlaylistWindow->UpdatePlaylist();
fPlaylistWindow->Unlock();
}
}
else
{
......@@ -877,26 +892,21 @@ void InterfaceWindow::UpdateInterface()
}
/*****************************************************************************
* InterfaceWindow::IsStopped
* InterfaceWindow::UpdatePlaylist
*****************************************************************************/
bool
InterfaceWindow::IsStopped() const
void
InterfaceWindow::UpdatePlaylist()
{
return (system_time() - fLastUpdateTime > INTERFACE_UPDATE_TIMEOUT);
b_playlist_update = true;
}
/*****************************************************************************
* InterfaceWindow::_UpdatePlaylist
* InterfaceWindow::IsStopped
*****************************************************************************/
void
InterfaceWindow::_UpdatePlaylist()
bool
InterfaceWindow::IsStopped() const
{
if( fPlaylistWindow->Lock() )
{
fPlaylistWindow->UpdatePlaylist( true );
fPlaylistWindow->Unlock();
}
p_mediaControl->SetEnabled( p_playlist->i_size );
return (system_time() - fLastUpdateTime > INTERFACE_UPDATE_TIMEOUT);
}
/*****************************************************************************
......
......@@ -102,26 +102,28 @@ class InterfaceWindow : public BWindow
// InterfaceWindow
void UpdateInterface();
void UpdatePlaylist();
bool IsStopped() const;
MediaControlView* p_mediaControl;
MessagesWindow* fMessagesWindow;
private:
void _UpdatePlaylist();
void _SetMenusEnabled( bool hasFile,
bool hasChapters = false,
bool hasTitles = false );
void _UpdateSpeedMenu( int rate );
void _ShowFilePanel( uint32 command,
const char* windowTitle );
void _RestoreSettings();
void _StoreSettings();
void _ShowFilePanel( uint32 command,
const char* windowTitle );
void _RestoreSettings();
void _StoreSettings();
intf_thread_t * p_intf;
input_thread_t * p_input;
playlist_t * p_playlist;
es_descriptor_t * p_spu_es;
bool b_playlist_update;
BFilePanel* fFilePanel;
PlayListWindow* fPlaylistWindow;
......@@ -149,19 +151,19 @@ class InterfaceWindow : public BWindow
BMenu* fSpeedMenu;
BMenu* fShowMenu;
bigtime_t fLastUpdateTime;
BMessage* fSettings; // we keep the message arround
// for forward compatibility
BMessage* fSettings; // we keep the message arround
// for forward compatibility
};
// some global support functions
status_t load_settings( BMessage* message,
const char* fileName,
const char* folder = NULL );
const char* fileName,
const char* folder = NULL );
status_t save_settings( BMessage* message,
const char* fileName,
const char* folder = NULL );
const char* fileName,
const char* folder = NULL );
#endif // BEOS_INTERFACE_WINDOW_H
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment