X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fbeos%2FInterfaceWindow.cpp;h=03b304651f32d60cbdb157e14c227b0f50114885;hb=7ca4e3eb624251feb1f97cfc25104cce473e04a0;hp=f44b5eab25115ba71ea69a3ea7c803a7143b2e3d;hpb=68a7c7253d5aaf4e54767c30745ee246e5183b37;p=vlc diff --git a/modules/gui/beos/InterfaceWindow.cpp b/modules/gui/beos/InterfaceWindow.cpp index f44b5eab25..03b304651f 100644 --- a/modules/gui/beos/InterfaceWindow.cpp +++ b/modules/gui/beos/InterfaceWindow.cpp @@ -1,7 +1,7 @@ /***************************************************************************** * InterfaceWindow.cpp: beos interface ***************************************************************************** - * Copyright (C) 1999, 2000, 2001 VideoLAN + * Copyright (C) 1999, 2000, 2001 the VideoLAN team * $Id$ * * Authors: Jean-Marc Dressler @@ -22,7 +22,7 @@ * * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /* System headers */ @@ -35,13 +35,15 @@ #include #include #include -#include /* VLC headers */ -#include -#include -#include -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include /* BeOS interface headers */ #include "MsgVals.h" @@ -174,6 +176,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 +203,14 @@ InterfaceWindow::InterfaceWindow( intf_thread_t * _p_intf, BRect frame, fLastUpdateTime( system_time() ), fSettings( new BMessage( 'sett' ) ) { + p_playlist = pl_Yield( p_intf ); + + 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 ); \ @@ -210,11 +228,13 @@ InterfaceWindow::InterfaceWindow( intf_thread_t * _p_intf, BRect frame, screen_rect.top + 50, screen_rect.right - 150, screen_rect.top + 250 ); +#if 0 fPlaylistWindow = new PlayListWindow( window_rect, _("Playlist"), this, p_intf ); window_rect.Set( screen_rect.right - 550, screen_rect.top + 300, screen_rect.right - 150, screen_rect.top + 500 ); +#endif fMessagesWindow = new MessagesWindow( p_intf, window_rect, _("Messages") ); // the media control view @@ -302,8 +322,10 @@ InterfaceWindow::InterfaceWindow( intf_thread_t * _p_intf, BRect frame, /* Add the Show menu */ fShowMenu = new BMenu( _("Window") ); +#if 0 ADD_ELLIPSIS( _("Playlist") ); fShowMenu->AddItem( new BMenuItem( psz_tmp, new BMessage( OPEN_PLAYLIST ), 'P') ); +#endif ADD_ELLIPSIS( _("Messages") ); fShowMenu->AddItem( new BMenuItem( psz_tmp, new BMessage( OPEN_MESSAGES ), 'M' ) ); ADD_ELLIPSIS( _("Preferences") ); @@ -334,10 +356,12 @@ InterfaceWindow::~InterfaceWindow() { vlc_object_release( p_playlist ); } +#if 0 if( fPlaylistWindow ) { fPlaylistWindow->ReallyQuit(); } +#endif if( fMessagesWindow ) { fMessagesWindow->ReallyQuit(); @@ -392,7 +416,7 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) case LOAD_SUBFILE: _ShowFilePanel( SUBFILE_RECEIVED, _("VLC media player: Open Subtitle File") ); break; - +#if 0 case OPEN_PLAYLIST: if (fPlaylistWindow->Lock()) { @@ -403,7 +427,7 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) fPlaylistWindow->Unlock(); } break; - +#endif case OPEN_DVD: { const char * psz_device; @@ -414,9 +438,9 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) memset( psz_uri, 0, 1024 ); snprintf( psz_uri, 1024, "dvdnav:%s", psz_device ); playlist_Add( p_playlist, psz_uri, psz_device, - PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END ); + PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END, true ); } - _UpdatePlaylist(); + UpdatePlaylist(); } break; @@ -709,12 +733,12 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) break; } - vlc_bool_t b_remove = ( p_message->WasDropped() && + bool b_remove = ( p_message->WasDropped() && !( modifiers() & B_SHIFT_KEY ) ); if( b_remove && p_playlist ) { - playlist_Clear( p_playlist ); + playlist_Clear( p_playlist, true ); } entry_ref ref; @@ -726,12 +750,12 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) if( p_playlist ) { - playlist_Add( p_playlist, path.Path(), path.Path(), - PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END ); + playlist_Add( p_playlist, path.Path(), NULL, + PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END, true ); } } - _UpdatePlaylist(); + UpdatePlaylist(); break; } @@ -782,7 +806,7 @@ bool InterfaceWindow::QuitRequested() _StoreSettings(); - p_intf->b_die = 1; + vlc_object_kill( p_intf ); return( true ); } @@ -792,12 +816,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 +833,19 @@ void InterfaceWindow::UpdateInterface() return; } + if( b_playlist_update ) + { +#if 0 + if( fPlaylistWindow->Lock() ) + { + fPlaylistWindow->UpdatePlaylist( true ); + fPlaylistWindow->Unlock(); + b_playlist_update = false; + } +#endif + p_mediaControl->SetEnabled( !playlist_IsEmpty( p_playlist ) ); + } + if( p_input ) { vlc_value_t val; @@ -840,13 +871,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 +901,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); } /***************************************************************************** @@ -1054,8 +1073,10 @@ InterfaceWindow::_RestoreSettings() BRect frame; if ( fSettings->FindRect( "main frame", &frame ) == B_OK ) set_window_pos( this, frame ); +#if 0 if (fSettings->FindRect( "playlist frame", &frame ) == B_OK ) set_window_pos( fPlaylistWindow, frame ); +#endif if (fSettings->FindRect( "messages frame", &frame ) == B_OK ) set_window_pos( fMessagesWindow, frame ); if (fSettings->FindRect( "settings frame", &frame ) == B_OK ) @@ -1067,16 +1088,19 @@ InterfaceWindow::_RestoreSettings() } bool showing; +#if 0 if ( fSettings->FindBool( "playlist showing", &showing ) == B_OK ) launch_window( fPlaylistWindow, showing ); +#endif if ( fSettings->FindBool( "messages showing", &showing ) == B_OK ) launch_window( fMessagesWindow, showing ); if ( fSettings->FindBool( "settings showing", &showing ) == B_OK ) launch_window( fPreferencesWindow, showing ); - +#if 0 uint32 displayMode; if ( fSettings->FindInt32( "playlist display mode", (int32*)&displayMode ) == B_OK ) fPlaylistWindow->SetDisplayMode( displayMode ); +#endif } } @@ -1093,6 +1117,7 @@ InterfaceWindow::_StoreSettings() /* Save the windows positions */ if ( fSettings->ReplaceRect( "main frame", Frame() ) != B_OK ) fSettings->AddRect( "main frame", Frame() ); +#if 0 if ( fPlaylistWindow->Lock() ) { if (fSettings->ReplaceRect( "playlist frame", fPlaylistWindow->Frame() ) != B_OK) @@ -1101,6 +1126,7 @@ InterfaceWindow::_StoreSettings() fSettings->AddBool( "playlist showing", !fPlaylistWindow->IsHidden() ); fPlaylistWindow->Unlock(); } +#endif if ( fMessagesWindow->Lock() ) { if (fSettings->ReplaceRect( "messages frame", fMessagesWindow->Frame() ) != B_OK) @@ -1117,10 +1143,11 @@ InterfaceWindow::_StoreSettings() fSettings->AddBool( "settings showing", !fPreferencesWindow->IsHidden() ); fPreferencesWindow->Unlock(); } +#if 0 uint32 displayMode = fPlaylistWindow->DisplayMode(); if (fSettings->ReplaceInt32( "playlist display mode", displayMode ) != B_OK ) fSettings->AddInt32( "playlist display mode", displayMode ); - +#endif save_settings( fSettings, "interface_settings", "VideoLAN Client" ); } @@ -1304,6 +1331,7 @@ void TitleMenu::AttachedToWindow() var_Change( p_input, "title", VLC_VAR_FREELIST, &val_list, &text_list ); } + vlc_object_release( p_input ); BMenu::AttachedToWindow(); } @@ -1367,6 +1395,7 @@ void ChapterMenu::AttachedToWindow() var_Change( p_input, "chapter", VLC_VAR_FREELIST, &val_list, &text_list ); } + vlc_object_release( p_input ); BMenu::AttachedToWindow(); }