From: Eric Petit Date: Wed, 22 Jan 2003 01:13:22 +0000 (+0000) Subject: * Fixed title / chapter menus X-Git-Tag: 0.5.0~225 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=2891094dd4909f07b274a25b0b5c9ff3311dccf6;p=vlc * Fixed title / chapter menus * Clean up --- diff --git a/modules/gui/beos/InterfaceWindow.cpp b/modules/gui/beos/InterfaceWindow.cpp index 3dd097553c..8746a42b73 100644 --- a/modules/gui/beos/InterfaceWindow.cpp +++ b/modules/gui/beos/InterfaceWindow.cpp @@ -2,7 +2,7 @@ * InterfaceWindow.cpp: beos interface ***************************************************************************** * Copyright (C) 1999, 2000, 2001 VideoLAN - * $Id: InterfaceWindow.cpp,v 1.19 2003/01/17 18:19:43 titer Exp $ + * $Id: InterfaceWindow.cpp,v 1.20 2003/01/22 01:13:22 titer Exp $ * * Authors: Jean-Marc Dressler * Samuel Hocevar @@ -64,8 +64,7 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name, p_intf( p_interface ), fFilePanel( NULL ), fSubtitlesPanel( NULL ), - fLastUpdateTime( system_time() ), - fSettings( new BMessage( 'sett' ) ) + fLastUpdateTime( system_time() ) { p_intf = p_interface; p_wrapper = p_intf->p_sys->p_wrapper; @@ -186,8 +185,6 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name, _SetMenusEnabled( false ); p_mediaControl->SetEnabled( false ); - _RestoreSettings(); - Show(); } @@ -195,7 +192,6 @@ InterfaceWindow::~InterfaceWindow() { if (fPlaylistWindow) fPlaylistWindow->ReallyQuit(); - delete fSettings; } /***************************************************************************** @@ -260,7 +256,7 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) if( p_message->FindString( "device", &psz_device ) == B_OK ) { BString device( psz_device ); - p_wrapper->openDisc( type, device, 0, 0 ); + p_wrapper->OpenDisc( type, device, 0, 0 ); } _UpdatePlaylist(); } @@ -405,8 +401,8 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) if ( playback_status > UNDEF_S ) { int32 index; - if ( p_message->FindInt32( "index", &index ) == B_OK ) - p_wrapper->toggleTitle( index ); + if( p_message->FindInt32( "index", &index ) == B_OK ) + p_wrapper->ToggleTitle( index ); } break; case PREV_CHAPTER: @@ -423,8 +419,8 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) if ( playback_status > UNDEF_S ) { int32 index; - if ( p_message->FindInt32( "index", &index ) == B_OK ) - p_wrapper->toggleChapter( index ); + if( p_message->FindInt32( "index", &index ) == B_OK ) + p_wrapper->ToggleChapter( index ); } break; case PREV_FILE: @@ -435,10 +431,10 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) break; // general next/prev functionality (skips to whatever makes most sense) case NAVIGATE_PREV: - p_wrapper->navigatePrev(); + p_wrapper->NavigatePrev(); break; case NAVIGATE_NEXT: - p_wrapper->navigateNext(); + p_wrapper->NavigateNext(); break; // drag'n'drop and system messages case B_REFS_RECEIVED: @@ -526,7 +522,7 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) } } // give the list to VLC - p_wrapper->openFiles(&files, replace); + p_wrapper->OpenFiles(&files, replace); _UpdatePlaylist(); } break; @@ -559,8 +555,6 @@ bool InterfaceWindow::QuitRequested() p_intf->b_die = 1; - _StoreSettings(); - return( true ); } @@ -573,7 +567,7 @@ void InterfaceWindow::updateInterface() { if ( acquire_sem( p_mediaControl->fScrubSem ) == B_OK ) { - p_wrapper->setTimeAsFloat(p_mediaControl->GetSeekTo()); + p_wrapper->SetTimeAsFloat(p_mediaControl->GetSeekTo()); } else if ( Lock() ) { @@ -582,7 +576,7 @@ void InterfaceWindow::updateInterface() bool hasChapters = p_wrapper->HasChapters(); p_mediaControl->SetStatus( p_wrapper->InputStatus(), p_wrapper->InputRate() ); - p_mediaControl->SetProgress( p_wrapper->getTimeAsFloat() ); + p_mediaControl->SetProgress( p_wrapper->GetTimeAsFloat() ); _SetMenusEnabled( true, hasChapters, hasTitles ); _UpdateSpeedMenu( p_wrapper->InputRate() ); @@ -590,7 +584,7 @@ void InterfaceWindow::updateInterface() // enable/disable skip buttons bool canSkipPrev; bool canSkipNext; - p_wrapper->getNavCapabilities( &canSkipPrev, &canSkipNext ); + p_wrapper->GetNavCapabilities( &canSkipPrev, &canSkipNext ); p_mediaControl->SetSkippable( canSkipPrev, canSkipNext ); if ( p_wrapper->HasAudio() ) @@ -716,99 +710,11 @@ InterfaceWindow::_UpdateSpeedMenu( int rate ) void InterfaceWindow::_InputStreamChanged() { -//printf("InterfaceWindow::_InputStreamChanged()\n"); // TODO: move more stuff from updateInterface() here! snooze( 400000 ); p_wrapper->SetVolume( p_mediaControl->GetVolume() ); } -/***************************************************************************** - * InterfaceWindow::_LoadSettings - *****************************************************************************/ -status_t -InterfaceWindow::_LoadSettings( BMessage* message, const char* fileName, const char* folder ) -{ - status_t ret = B_BAD_VALUE; - if ( message ) - { - BPath path; - if ( ( ret = find_directory( B_USER_SETTINGS_DIRECTORY, &path ) ) == B_OK ) - { - // passing folder is optional - if ( folder ) - ret = path.Append( folder ); - if ( ret == B_OK && ( ret = path.Append( fileName ) ) == B_OK ) - { - BFile file( path.Path(), B_READ_ONLY ); - if ( ( ret = file.InitCheck() ) == B_OK ) - { - ret = message->Unflatten( &file ); - file.Unset(); - } - } - } - } - return ret; -} - -/***************************************************************************** - * InterfaceWindow::_SaveSettings - *****************************************************************************/ -status_t -InterfaceWindow::_SaveSettings( BMessage* message, const char* fileName, const char* folder ) -{ - status_t ret = B_BAD_VALUE; - if ( message ) - { - BPath path; - if ( ( ret = find_directory( B_USER_SETTINGS_DIRECTORY, &path ) ) == B_OK ) - { - // passing folder is optional - if ( folder && ( ret = path.Append( folder ) ) == B_OK ) - ret = create_directory( path.Path(), 0777 ); - if ( ret == B_OK && ( ret = path.Append( fileName ) ) == B_OK ) - { - BFile file( path.Path(), B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE ); - if ( ( ret = file.InitCheck() ) == B_OK ) - { - ret = message->Flatten( &file ); - file.Unset(); - } - } - } - } - return ret; -} - -/***************************************************************************** - * InterfaceWindow::_RestoreSettings - *****************************************************************************/ -bool -make_sure_frame_is_on_screen( BRect& frame ) -{ - BScreen screen( B_MAIN_SCREEN_ID ); - if (frame.IsValid() && screen.IsValid()) { - if (!screen.Frame().Contains(frame)) { - // make sure frame fits in the screen - if (frame.Width() > screen.Frame().Width()) - frame.right -= frame.Width() - screen.Frame().Width() + 10.0; - if (frame.Height() > screen.Frame().Height()) - frame.bottom -= frame.Height() - screen.Frame().Height() + 30.0; - // frame is now at the most the size of the screen - if (frame.right > screen.Frame().right) - frame.OffsetBy(-(frame.right - screen.Frame().right), 0.0); - if (frame.bottom > screen.Frame().bottom) - frame.OffsetBy(0.0, -(frame.bottom - screen.Frame().bottom)); - if (frame.left < screen.Frame().left) - frame.OffsetBy((screen.Frame().left - frame.left), 0.0); - if (frame.top < screen.Frame().top) - frame.OffsetBy(0.0, (screen.Frame().top - frame.top)); - } - return true; - } - return false; -} - void make_sure_frame_is_within_limits( BRect& frame, float minWidth, float minHeight, float maxWidth, float maxHeight ) @@ -823,87 +729,6 @@ make_sure_frame_is_within_limits( BRect& frame, float minWidth, float minHeight, frame.bottom = frame.top + maxHeight; } -/***************************************************************************** - * InterfaceWindow::_RestoreSettings - *****************************************************************************/ -void -InterfaceWindow::_RestoreSettings() -{ - if ( _LoadSettings( fSettings, "interface_settings", "VideoLAN Client" ) == B_OK ) - { - BRect mainFrame; - if ( fSettings->FindRect( "main frame", &mainFrame ) == B_OK ) - { - // sanity checks: make sure window is not too big/small - // and that it's not off-screen - float minWidth, maxWidth, minHeight, maxHeight; - GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight ); - - make_sure_frame_is_within_limits( mainFrame, - minWidth, minHeight, maxWidth, maxHeight ); - make_sure_frame_is_on_screen( mainFrame ); - - - MoveTo( mainFrame.LeftTop() ); - ResizeTo( mainFrame.Width(), mainFrame.Height() ); - } - if ( fPlaylistWindow->Lock() ) - { - BRect playlistFrame; - if (fSettings->FindRect( "playlist frame", &playlistFrame ) == B_OK ) - { - // sanity checks: make sure window is not too big/small - // and that it's not off-screen - float minWidth, maxWidth, minHeight, maxHeight; - fPlaylistWindow->GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight ); - - make_sure_frame_is_within_limits( playlistFrame, - minWidth, minHeight, maxWidth, maxHeight ); - make_sure_frame_is_on_screen( playlistFrame ); - - fPlaylistWindow->MoveTo( playlistFrame.LeftTop() ); - fPlaylistWindow->ResizeTo( playlistFrame.Width(), playlistFrame.Height() ); - } - - bool showing; - if ( fSettings->FindBool( "playlist showing", &showing ) == B_OK ) - { - if ( showing ) - { - if ( fPlaylistWindow->IsHidden() ) - fPlaylistWindow->Show(); - } - else - { - if ( !fPlaylistWindow->IsHidden() ) - fPlaylistWindow->Hide(); - } - } - - fPlaylistWindow->Unlock(); - } - } -} - -/***************************************************************************** - * InterfaceWindow::_StoreSettings - *****************************************************************************/ -void -InterfaceWindow::_StoreSettings() -{ - if ( fSettings->ReplaceRect( "main frame", Frame() ) != B_OK ) - fSettings->AddRect( "main frame", Frame() ); - if ( fPlaylistWindow->Lock() ) - { - if (fSettings->ReplaceRect( "playlist frame", fPlaylistWindow->Frame() ) != B_OK) - fSettings->AddRect( "playlist frame", fPlaylistWindow->Frame() ); - if (fSettings->ReplaceBool( "playlist showing", !fPlaylistWindow->IsHidden() ) != B_OK) - fSettings->AddBool( "playlist showing", !fPlaylistWindow->IsHidden() ); - fPlaylistWindow->Unlock(); - } - _SaveSettings( fSettings, "interface_settings", "VideoLAN Client" ); -} - /***************************************************************************** * CDMenu::CDMenu *****************************************************************************/ @@ -1026,7 +851,7 @@ void LanguageMenu::_GetChannels() BMenuItem *item; BList *list; - if( ( list = p_wrapper->InputGetChannels( kind ) ) == NULL ) + if( ( list = p_wrapper->GetChannels( kind ) ) == NULL ) return; for( int i = 0; i < list->CountItems(); i++ ) @@ -1061,36 +886,21 @@ TitleMenu::~TitleMenu() *****************************************************************************/ void TitleMenu::AttachedToWindow() { - // make title menu empty - while ( BMenuItem* item = RemoveItem( 0L ) ) - delete item; + BMenuItem *item; + BList *list; -#if 0 - input_thread_t* input = p_intf->p_sys->p_input; - if ( input ) - { - // lock stream access - vlc_mutex_lock( &input->stream.stream_lock ); - // populate menu according to current stream - int32 numTitles = input->stream.i_area_nb; - if ( numTitles > 1 ) - { - // disallow title 0! - for ( int32 i = 1; i < numTitles; i++ ) - { - BMessage* message = new BMessage( TOGGLE_TITLE ); - message->AddInt32( "index", i ); - BString helper( "" ); - helper << i; - BMenuItem* item = new BMenuItem( helper.String(), message ); - item->SetMarked( input->stream.p_selected_area->i_id == i ); - AddItem( item ); - } - } - // done messing with stream - vlc_mutex_unlock( &input->stream.stream_lock ); - } -#endif + while( ( item = RemoveItem( 0L ) ) ) + delete item; + + if( ( list = p_intf->p_sys->p_wrapper->GetTitles() ) == NULL ) + return; + + for( int i = 0; i < list->CountItems(); i++ ) + { + item = (BMenuItem*)list->ItemAt( i ); + AddItem( item ); + } + BMenu::AttachedToWindow(); } @@ -1116,35 +926,21 @@ ChapterMenu::~ChapterMenu() *****************************************************************************/ void ChapterMenu::AttachedToWindow() { - // make title menu empty - while ( BMenuItem* item = RemoveItem( 0L ) ) - delete item; + BMenuItem *item; + BList *list; -#if 0 - input_thread_t* input = p_intf->p_sys->p_input; - if ( input ) - { - // lock stream access - vlc_mutex_lock( &input->stream.stream_lock ); - // populate menu according to current stream - int32 numChapters = input->stream.p_selected_area->i_part_nb; - if ( numChapters > 1 ) - { - for ( int32 i = 0; i < numChapters; i++ ) - { - BMessage* message = new BMessage( TOGGLE_CHAPTER ); - message->AddInt32( "index", i ); - BString helper( "" ); - helper << i + 1; - BMenuItem* item = new BMenuItem( helper.String(), message ); - item->SetMarked( input->stream.p_selected_area->i_part == i ); - AddItem( item ); - } - } - // done messing with stream - vlc_mutex_unlock( &input->stream.stream_lock ); - } + while( ( item = RemoveItem( 0L ) ) ) + delete item; + + if( ( list = p_intf->p_sys->p_wrapper->GetChapters() ) == NULL ) + return; + + for( int i = 0; i < list->CountItems(); i++ ) + { + item = (BMenuItem*)list->ItemAt( i ); + AddItem( item ); + } + BMenu::AttachedToWindow(); -#endif } diff --git a/modules/gui/beos/InterfaceWindow.h b/modules/gui/beos/InterfaceWindow.h index 69a0840321..67300fb833 100644 --- a/modules/gui/beos/InterfaceWindow.h +++ b/modules/gui/beos/InterfaceWindow.h @@ -2,7 +2,7 @@ * InterfaceWindow.h: BeOS interface window class prototype ***************************************************************************** * Copyright (C) 1999, 2000, 2001 VideoLAN - * $Id: InterfaceWindow.h,v 1.8 2003/01/14 14:48:55 titer Exp $ + * $Id: InterfaceWindow.h,v 1.9 2003/01/22 01:13:22 titer Exp $ * * Authors: Jean-Marc Dressler * Tony Castley @@ -114,14 +114,6 @@ class InterfaceWindow : public BWindow bool hasTitles = false ); void _UpdateSpeedMenu( int rate ); void _InputStreamChanged(); - status_t _LoadSettings( BMessage* message, - const char* fileName, - const char* subFolder = NULL ); - status_t _SaveSettings( BMessage* message, - const char* fileName, - const char* subFolder = NULL ); - void _RestoreSettings(); - void _StoreSettings(); intf_thread_t* p_intf; es_descriptor_t* p_spu_es; @@ -150,8 +142,6 @@ class InterfaceWindow : public BWindow BMenu* fSpeedMenu; BMenu* fSettingsMenu; bigtime_t fLastUpdateTime; - BMessage* fSettings; // we keep the message arround - // for forward compatibility VlcWrapper * p_wrapper; }; diff --git a/modules/gui/beos/ListViews.cpp b/modules/gui/beos/ListViews.cpp index 81144f971d..130cb16acc 100644 --- a/modules/gui/beos/ListViews.cpp +++ b/modules/gui/beos/ListViews.cpp @@ -2,7 +2,7 @@ * ListViews.h: BeOS interface list view class implementation ***************************************************************************** * Copyright (C) 1999, 2000, 2001 VideoLAN - * $Id: ListViews.cpp,v 1.1 2002/09/30 18:30:27 titer Exp $ + * $Id: ListViews.cpp,v 1.2 2003/01/22 01:13:22 titer Exp $ * * Authors: Stephan Aßmus * @@ -475,7 +475,8 @@ DragSortableListView::DrawItem( BListItem *item, BRect itemFrame, bool complete /***************************************************************************** * PlaylistView class *****************************************************************************/ -PlaylistView::PlaylistView( BRect frame, InterfaceWindow* mainWindow ) +PlaylistView::PlaylistView( BRect frame, InterfaceWindow* mainWindow, + VlcWrapper * p_wrapper ) : DragSortableListView( frame, "playlist listview", B_MULTIPLE_SELECTION_LIST, B_FOLLOW_ALL_SIDES, B_WILL_DRAW | B_NAVIGABLE | B_PULSE_NEEDED @@ -484,6 +485,7 @@ PlaylistView::PlaylistView( BRect frame, InterfaceWindow* mainWindow ) fPlaying( false ), fMainWindow( mainWindow ) { + this->p_wrapper = p_wrapper; } PlaylistView::~PlaylistView() @@ -516,7 +518,7 @@ PlaylistView::MouseDown( BPoint where ) { if ( clicks == 2 ) { - /* Intf_VLCWrapper::playlistJumpTo( i ); */ + p_wrapper->PlaylistJumpTo( i ); handled = true; } else if ( i == fCurrentIndex ) diff --git a/modules/gui/beos/ListViews.h b/modules/gui/beos/ListViews.h index 9e019623f4..bbe715c61d 100644 --- a/modules/gui/beos/ListViews.h +++ b/modules/gui/beos/ListViews.h @@ -2,7 +2,7 @@ * ListViews.h: BeOS interface list view class prototype ***************************************************************************** * Copyright (C) 1999, 2000, 2001 VideoLAN - * $Id: ListViews.h,v 1.1 2002/09/30 18:30:27 titer Exp $ + * $Id: ListViews.h,v 1.2 2003/01/22 01:13:22 titer Exp $ * * Authors: Stephan Aßmus * @@ -87,7 +87,8 @@ class PlaylistView : public DragSortableListView { public: PlaylistView( BRect frame, - InterfaceWindow* mainWindow ); + InterfaceWindow* mainWindow, + VlcWrapper * p_wrapper ); ~PlaylistView(); // BListView @@ -110,6 +111,8 @@ class PlaylistView : public DragSortableListView int32 fCurrentIndex; bool fPlaying; InterfaceWindow* fMainWindow; + + VlcWrapper * p_wrapper; }; #endif // LIST_VIEWS_H diff --git a/modules/gui/beos/MediaControlView.cpp b/modules/gui/beos/MediaControlView.cpp index eb11b331ec..0cdff09384 100644 --- a/modules/gui/beos/MediaControlView.cpp +++ b/modules/gui/beos/MediaControlView.cpp @@ -2,7 +2,7 @@ * MediaControlView.cpp: beos interface ***************************************************************************** * Copyright (C) 1999, 2000, 2001 VideoLAN - * $Id: MediaControlView.cpp,v 1.10 2003/01/12 02:08:38 titer Exp $ + * $Id: MediaControlView.cpp,v 1.11 2003/01/22 01:13:22 titer Exp $ * * Authors: Tony Castley * Stephan Aßmus @@ -1311,13 +1311,13 @@ PositionInfoView::Pulse() if ( now - fLastPulseUpdate > 900000 ) { int32 index, size; - p_intf->p_sys->p_wrapper->getPlaylistInfo( index, size ); + p_intf->p_sys->p_wrapper->GetPlaylistInfo( index, size ); SetFile( index, size ); p_intf->p_sys->p_wrapper->TitleInfo( index, size ); SetTitle( index, size ); p_intf->p_sys->p_wrapper->ChapterInfo( index, size ); SetChapter( index, size ); - SetTime( p_intf->p_sys->p_wrapper->getTimeAsString() ); + SetTime( p_intf->p_sys->p_wrapper->GetTimeAsString() ); fLastPulseUpdate = now; } } diff --git a/modules/gui/beos/PlayListWindow.cpp b/modules/gui/beos/PlayListWindow.cpp index da289ebd07..be8a2715ed 100644 --- a/modules/gui/beos/PlayListWindow.cpp +++ b/modules/gui/beos/PlayListWindow.cpp @@ -2,7 +2,7 @@ * PlayListWindow.cpp: beos interface ***************************************************************************** * Copyright (C) 1999, 2000, 2001 VideoLAN - * $Id: PlayListWindow.cpp,v 1.5 2002/12/09 07:57:04 titer Exp $ + * $Id: PlayListWindow.cpp,v 1.6 2003/01/22 01:13:22 titer Exp $ * * Authors: Jean-Marc Dressler * Samuel Hocevar @@ -130,7 +130,7 @@ editMenu->SetEnabled( false ); frame.top += fMenuBar->Bounds().IntegerHeight() + 1; frame.right -= B_V_SCROLL_BAR_WIDTH; - fListView = new PlaylistView( frame, fMainWindow ); + fListView = new PlaylistView( frame, fMainWindow, p_wrapper ); fBackgroundView = new BScrollView( "playlist scrollview", fListView, B_FOLLOW_ALL_SIDES, 0, false, true, diff --git a/modules/gui/beos/VlcWrapper.cpp b/modules/gui/beos/VlcWrapper.cpp index f282269ab8..9f9189dc02 100644 --- a/modules/gui/beos/VlcWrapper.cpp +++ b/modules/gui/beos/VlcWrapper.cpp @@ -2,7 +2,7 @@ * VlcWrapper.cpp: BeOS plugin for vlc (derived from MacOS X port) ***************************************************************************** * Copyright (C) 2001 VideoLAN - * $Id: VlcWrapper.cpp,v 1.20 2003/01/17 18:19:43 titer Exp $ + * $Id: VlcWrapper.cpp,v 1.21 2003/01/22 01:13:22 titer Exp $ * * Authors: Florian G. Pflug * Jon Lech Johansen @@ -106,11 +106,8 @@ bool VlcWrapper::UpdateInputAndAOut() bool VlcWrapper::HasInput() { return ( p_input != NULL ); -// return ( PlaylistSize() > 0 ); } -/* status (UNDEF_S, PLAYING_S, PAUSE_S, FORWARD_S, BACKWARD_S, - REWIND_S, NOT_STARTED_S, START_S) */ int VlcWrapper::InputStatus() { if( !p_input ) @@ -145,7 +142,7 @@ void VlcWrapper::InputFaster() } } -BList * VlcWrapper::InputGetChannels( int i_cat ) +BList * VlcWrapper::GetChannels( int i_cat ) { if( p_input ) { @@ -219,50 +216,6 @@ BList * VlcWrapper::InputGetChannels( int i_cat ) return NULL; } -void VlcWrapper::openFiles( BList* o_files, bool replace ) -{ - BString *o_file; - int size = PlaylistSize(); - bool wasEmpty = ( size < 1 ); - - /* delete current playlist */ - if( replace ) - { - for( int i = 0; i < size; i++ ) - { - playlist_Delete( p_playlist, 0 ); - } - } - - /* append files */ - while( ( o_file = (BString *)o_files->LastItem() ) ) - { - playlist_Add( p_playlist, o_file->String(), - PLAYLIST_APPEND, PLAYLIST_END ); - o_files->RemoveItem(o_files->CountItems() - 1); - } - - /* eventually restart playing */ - if( replace || wasEmpty ) - { - playlist_Stop( p_playlist ); - playlist_Play( p_playlist ); - } -} - -void VlcWrapper::openDisc(BString o_type, BString o_device, int i_title, int i_chapter) -{ - if( p_intf->p_sys->b_dvdold ) - o_device.Prepend( "dvdold:" ); - playlist_Add( p_playlist, o_device.String(), - PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END ); -} - -void VlcWrapper::LoadSubFile( char * psz_file ) -{ - config_PutPsz( p_intf, "sub-file", strdup( psz_file ) ); -} - void VlcWrapper::ToggleLanguage( int i_language ) { es_descriptor_t * p_es = NULL; @@ -331,7 +284,7 @@ void VlcWrapper::ToggleSubtitle( int i_subtitle ) } } -const char* VlcWrapper::getTimeAsString() +const char * VlcWrapper::GetTimeAsString() { static char psz_currenttime[ OFFSETTOTIME_MAX_SIZE ]; @@ -347,7 +300,7 @@ const char* VlcWrapper::getTimeAsString() return(psz_currenttime); } -float VlcWrapper::getTimeAsFloat() +float VlcWrapper::GetTimeAsFloat() { float f_time = 0.0; @@ -363,7 +316,7 @@ float VlcWrapper::getTimeAsFloat() return( f_time ); } -void VlcWrapper::setTimeAsFloat(float f_position) +void VlcWrapper::SetTimeAsFloat( float f_position ) { if( p_input != NULL ) { @@ -399,9 +352,49 @@ bool VlcWrapper::IsPlaying() } -/****************************** - * playlist infos and control * - ******************************/ +/************ + * playlist * + ************/ + +void VlcWrapper::OpenFiles( BList* o_files, bool replace ) +{ + BString *o_file; + int size = PlaylistSize(); + bool wasEmpty = ( size < 1 ); + + /* delete current playlist */ + if( replace ) + { + for( int i = 0; i < size; i++ ) + { + playlist_Delete( p_playlist, 0 ); + } + } + + /* append files */ + while( ( o_file = (BString *)o_files->LastItem() ) ) + { + playlist_Add( p_playlist, o_file->String(), + PLAYLIST_APPEND, PLAYLIST_END ); + o_files->RemoveItem(o_files->CountItems() - 1); + } + + /* eventually restart playing */ + if( replace || wasEmpty ) + { + playlist_Stop( p_playlist ); + playlist_Play( p_playlist ); + } +} + +void VlcWrapper::OpenDisc(BString o_type, BString o_device, int i_title, int i_chapter) +{ + if( p_intf->p_sys->b_dvdold ) + o_device.Prepend( "dvdold:" ); + playlist_Add( p_playlist, o_device.String(), + PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END ); +} + int VlcWrapper::PlaylistSize() { vlc_mutex_lock( &p_playlist->object_lock ); @@ -410,7 +403,7 @@ int VlcWrapper::PlaylistSize() return i_size; } -char *VlcWrapper::PlaylistItemName( int i ) +char * VlcWrapper::PlaylistItemName( int i ) { return p_playlist->pp_items[i]->psz_name; } @@ -420,11 +413,6 @@ int VlcWrapper::PlaylistCurrent() return p_playlist->i_index; } -int VlcWrapper::PlaylistStatus() -{ - return p_playlist->i_status; -} - bool VlcWrapper::PlaylistPlay() { if( PlaylistSize() ) @@ -457,48 +445,7 @@ void VlcWrapper::PlaylistPrev() playlist_Prev( p_playlist ); } -void VlcWrapper::PlaylistSkip( int i ) -{ - playlist_Skip( p_playlist, i ); -} - -void VlcWrapper::PlaylistGoto( int i ) -{ - playlist_Goto( p_playlist, i ); -} - -void VlcWrapper::PlaylistLoop() -{ - if ( p_intf->p_sys->b_loop ) - { - playlist_Delete( p_playlist, p_playlist->i_size - 1 ); - } - else - { - playlist_Add( p_playlist, "vlc:loop", - PLAYLIST_APPEND | PLAYLIST_GO, - PLAYLIST_END ); - } - p_intf->p_sys->b_loop = !p_intf->p_sys->b_loop; -} - -BList * VlcWrapper::PlaylistAsArray() -{ - int i; - BList* p_list = new BList(p_playlist->i_size); - - vlc_mutex_lock( &p_playlist->object_lock ); - - for( i = 0; i < p_playlist->i_size; i++ ) - { - p_list->AddItem(new BString(p_playlist->pp_items[i]->psz_name)); - } - - vlc_mutex_unlock( &p_playlist->object_lock ); - return( p_list ); -} - -void VlcWrapper::getPlaylistInfo( int32& currentIndex, int32& maxIndex ) +void VlcWrapper::GetPlaylistInfo( int32& currentIndex, int32& maxIndex ) { currentIndex = -1; maxIndex = -1; @@ -512,31 +459,12 @@ void VlcWrapper::getPlaylistInfo( int32& currentIndex, int32& maxIndex ) } } - void VlcWrapper::PlaylistJumpTo( int pos ) { -#if 0 - // sanity checks - if ( pos < 0 ) - pos = 0; - int size = playlistSize(); - if (pos >= size) - pos = size - 1; - // weird hack - if( p_input_bank->pp_input[0] != NULL ) - pos--; - // stop current stream - playlistStop(); - // modify current position in playlist - playlistLock(); - p_main->p_playlist->i_index = pos; - playlistUnlock(); - // start playing - playlistPlay(); -#endif -} - -void VlcWrapper::getNavCapabilities( bool *canSkipPrev, bool *canSkipNext ) + playlist_Goto( p_playlist, pos ); +} + +void VlcWrapper::GetNavCapabilities( bool *canSkipPrev, bool *canSkipNext ) { if ( canSkipPrev && canSkipNext ) { @@ -580,7 +508,7 @@ void VlcWrapper::getNavCapabilities( bool *canSkipPrev, bool *canSkipNext ) } } -void VlcWrapper::navigatePrev() +void VlcWrapper::NavigatePrev() { bool hasSkiped = false; @@ -607,7 +535,7 @@ void VlcWrapper::navigatePrev() if ( currentChapter >= 0 ) { - toggleChapter( currentChapter ); + ToggleChapter( currentChapter ); hasSkiped = true; } } @@ -619,7 +547,7 @@ void VlcWrapper::navigatePrev() // disallow area 0 since it is used for video_ts.vob if( currentTitle > 0 ) { - toggleTitle(currentTitle); + ToggleTitle(currentTitle); hasSkiped = true; } } @@ -630,7 +558,7 @@ void VlcWrapper::navigatePrev() PlaylistPrev(); } -void VlcWrapper::navigateNext() +void VlcWrapper::NavigateNext() { bool hasSkiped = false; @@ -656,7 +584,7 @@ void VlcWrapper::navigateNext() currentChapter++; if ( currentChapter < numChapters ) { - toggleChapter( currentChapter ); + ToggleChapter( currentChapter ); hasSkiped = true; } } @@ -668,7 +596,7 @@ void VlcWrapper::navigateNext() // disallow area 0 since it is used for video_ts.vob if ( currentTitle < numTitles - 1 ) { - toggleTitle(currentTitle); + ToggleTitle(currentTitle); hasSkiped = true; } } @@ -680,9 +608,14 @@ void VlcWrapper::navigateNext() } -/*************************** - * audio infos and control * - ***************************/ +/********* + * audio * + *********/ + +bool VlcWrapper::HasAudio() +{ + return( p_aout != NULL ); +} unsigned short VlcWrapper::GetVolume() { @@ -731,14 +664,10 @@ bool VlcWrapper::IsMuted() return p_intf->p_sys->b_mute; } -bool VlcWrapper::HasAudio() -{ - return( p_aout != NULL ); -} - /******* * DVD * *******/ + bool VlcWrapper::HasTitles() { if( !p_input ) @@ -748,13 +677,41 @@ bool VlcWrapper::HasTitles() return ( p_input->stream.i_area_nb > 1 ); } +BList * VlcWrapper::GetTitles() +{ + if( p_input ) + { + vlc_mutex_lock( &p_input->stream.stream_lock ); + + BList *list = new BList( p_input->stream.i_area_nb ); + BMenuItem *menuItem; + BMessage *message; + + for( unsigned int i = 1; i < p_input->stream.i_area_nb; i++ ) + { + message = new BMessage( TOGGLE_TITLE ); + message->AddInt32( "index", i ); + BString helper( "" ); + helper << i; + menuItem = new BMenuItem( helper.String(), message ); + menuItem->SetMarked( p_input->stream.p_selected_area->i_id == i ); + list->AddItem( menuItem ); + } + + vlc_mutex_unlock( &p_input->stream.stream_lock ); + + return list; + } + return NULL; +} + void VlcWrapper::PrevTitle() { int i_id; i_id = p_input->stream.p_selected_area->i_id - 1; if( i_id > 0 ) { - toggleTitle(i_id); + ToggleTitle(i_id); } } @@ -764,10 +721,41 @@ void VlcWrapper::NextTitle() i_id = p_input->stream.p_selected_area->i_id + 1; if( i_id < p_input->stream.i_area_nb ) { - toggleTitle(i_id); + ToggleTitle(i_id); + } +} + +void VlcWrapper::ToggleTitle(int i_title) +{ + if( p_input != NULL ) + { + input_ChangeArea( p_input, + p_input->stream.pp_areas[i_title] ); + + vlc_mutex_lock( &p_input->stream.stream_lock ); + + vlc_mutex_unlock( &p_input->stream.stream_lock ); } } +void VlcWrapper::TitleInfo( int32 ¤tIndex, int32 &maxIndex ) +{ + currentIndex = -1; + maxIndex = -1; + if ( p_input ) + { + vlc_mutex_lock( &p_input->stream.stream_lock ); + + maxIndex = p_input->stream.i_area_nb - 1; + if ( maxIndex > 0) + currentIndex = p_input->stream.p_selected_area->i_id; + else + maxIndex = -1; + + vlc_mutex_unlock( &p_input->stream.stream_lock ); + } +} + bool VlcWrapper::HasChapters() { if( !p_input ) @@ -777,13 +765,42 @@ bool VlcWrapper::HasChapters() return ( p_input->stream.p_selected_area->i_part_nb > 1 ); } +BList * VlcWrapper::GetChapters() +{ + if( p_input ) + { + vlc_mutex_lock( &p_input->stream.stream_lock ); + + BList *list = new BList( p_input->stream.p_selected_area->i_part_nb ); + BMenuItem *menuItem; + BMessage *message; + + for( unsigned int i = 1; + i < p_input->stream.p_selected_area->i_part_nb + 1; i++ ) + { + message = new BMessage( TOGGLE_CHAPTER ); + message->AddInt32( "index", i ); + BString helper( "" ); + helper << i; + menuItem = new BMenuItem( helper.String(), message ); + menuItem->SetMarked( p_input->stream.p_selected_area->i_part == i ); + list->AddItem( menuItem ); + } + + vlc_mutex_unlock( &p_input->stream.stream_lock ); + + return list; + } + return NULL; +} + void VlcWrapper::PrevChapter() { int i_id; i_id = p_input->stream.p_selected_area->i_part - 1; if( i_id >= 0 ) { - toggleChapter(i_id); + ToggleChapter(i_id); } } @@ -793,26 +810,21 @@ void VlcWrapper::NextChapter() i_id = p_input->stream.p_selected_area->i_part + 1; if( i_id >= 0 ) { - toggleChapter(i_id); + ToggleChapter(i_id); } } -void VlcWrapper::TitleInfo( int32 ¤tIndex, int32 &maxIndex ) +void VlcWrapper::ToggleChapter(int i_chapter) { - currentIndex = -1; - maxIndex = -1; - if ( p_input ) - { - vlc_mutex_lock( &p_input->stream.stream_lock ); - - maxIndex = p_input->stream.i_area_nb - 1; - if ( maxIndex > 0) - currentIndex = p_input->stream.p_selected_area->i_id; - else - maxIndex = -1; + if( p_input != NULL ) + { + p_input->stream.p_selected_area->i_part = i_chapter; + input_ChangeArea( p_input, + p_input->stream.p_selected_area ); - vlc_mutex_unlock( &p_input->stream.stream_lock ); - } + vlc_mutex_lock( &p_input->stream.stream_lock ); + vlc_mutex_unlock( &p_input->stream.stream_lock ); + } } void VlcWrapper::ChapterInfo( int32 ¤tIndex, int32 &maxIndex ) @@ -833,28 +845,11 @@ void VlcWrapper::ChapterInfo( int32 ¤tIndex, int32 &maxIndex ) } } -void VlcWrapper::toggleTitle(int i_title) -{ - if( p_input != NULL ) - { - input_ChangeArea( p_input, - p_input->stream.pp_areas[i_title] ); - - vlc_mutex_lock( &p_input->stream.stream_lock ); - - vlc_mutex_unlock( &p_input->stream.stream_lock ); - } -} - -void VlcWrapper::toggleChapter(int i_chapter) +/**************** + * Miscellanous * + ****************/ + +void VlcWrapper::LoadSubFile( char * psz_file ) { - if( p_input != NULL ) - { - p_input->stream.p_selected_area->i_part = i_chapter; - input_ChangeArea( p_input, - p_input->stream.p_selected_area ); - - vlc_mutex_lock( &p_input->stream.stream_lock ); - vlc_mutex_unlock( &p_input->stream.stream_lock ); - } + config_PutPsz( p_intf, "sub-file", strdup( psz_file ) ); } diff --git a/modules/gui/beos/VlcWrapper.h b/modules/gui/beos/VlcWrapper.h index 0d18aa05cb..d5596a29ef 100644 --- a/modules/gui/beos/VlcWrapper.h +++ b/modules/gui/beos/VlcWrapper.h @@ -2,7 +2,7 @@ * VlcWrapper.h: BeOS plugin for vlc (derived from MacOS X port) ***************************************************************************** * Copyright (C) 2001 VideoLAN - * $Id: VlcWrapper.h,v 1.14 2003/01/17 18:19:43 titer Exp $ + * $Id: VlcWrapper.h,v 1.15 2003/01/22 01:13:22 titer Exp $ * * Authors: Florian G. Pflug * Jon Lech Johansen @@ -62,66 +62,66 @@ public: bool UpdateInputAndAOut(); - /* input */ - bool HasInput(); - int InputStatus(); - int InputRate(); - void InputSlower(); - void InputFaster(); - BList * InputGetChannels( int i_cat ); - void openFiles( BList *o_files, bool replace = true ); - void openDisc( BString o_type, BString o_device, - int i_title, int i_chapter ); - void LoadSubFile( char * psz_file ); - void ToggleLanguage( int i_language ); - void ToggleSubtitle( int i_subtitle ); - const char* getTimeAsString(); - float getTimeAsFloat(); - void setTimeAsFloat( float i_offset ); - bool IsPlaying(); + /* Input */ + bool HasInput(); + int InputStatus(); + int InputRate(); + void InputSlower(); + void InputFaster(); + BList * GetChannels( int i_cat ); + void ToggleLanguage( int i_language ); + void ToggleSubtitle( int i_subtitle ); + const char * GetTimeAsString(); + float GetTimeAsFloat(); + void SetTimeAsFloat( float i_offset ); + bool IsPlaying(); /* Playlist */ - int PlaylistSize(); - char *PlaylistItemName( int ); - int PlaylistCurrent(); - int PlaylistStatus(); - bool PlaylistPlay(); - void PlaylistPause(); - void PlaylistStop(); - void PlaylistNext(); - void PlaylistPrev(); - void PlaylistSkip(int i); - void PlaylistGoto(int i); - void PlaylistLoop(); - BList* PlaylistAsArray(); - bool PlaylistPlaying(); - void getPlaylistInfo( int32& currentIndex, - int32& maxIndex ); - void PlaylistJumpTo( int ); - void getNavCapabilities( bool* canSkipPrev, - bool* canSkipNext ); - void navigatePrev(); - void navigateNext(); + void OpenFiles( BList *o_files, bool replace = true ); + void OpenDisc( BString o_type, BString o_device, + int i_title, int i_chapter ); + int PlaylistSize(); + char * PlaylistItemName( int ); + int PlaylistCurrent(); + bool PlaylistPlay(); + void PlaylistPause(); + void PlaylistStop(); + void PlaylistNext(); + void PlaylistPrev(); + bool PlaylistPlaying(); + void GetPlaylistInfo( int32& currentIndex, + int32& maxIndex ); + void PlaylistJumpTo( int ); + void GetNavCapabilities( bool * canSkipPrev, + bool * canSkipNext ); + void NavigatePrev(); + void NavigateNext(); - /* audio */ + /* Audio */ + bool HasAudio(); unsigned short GetVolume(); - void SetVolume( int value ); - void VolumeMute(); - void VolumeRestore(); - bool IsMuted(); - bool HasAudio(); + void SetVolume( int value ); + void VolumeMute(); + void VolumeRestore(); + bool IsMuted(); /* DVD */ - bool HasTitles(); - void PrevTitle(); - void NextTitle(); - bool HasChapters(); - void PrevChapter(); - void NextChapter(); - void TitleInfo( int32& currentIndex, int32& maxIndex ); - void ChapterInfo( int32& currentIndex, int32& maxIndex ); - void toggleTitle( int i_title ); - void toggleChapter( int i_chapter ); + bool HasTitles(); + BList * GetTitles(); + void PrevTitle(); + void NextTitle(); + void ToggleTitle( int i_title ); + void TitleInfo( int32& currentIndex, int32& maxIndex ); + + bool HasChapters(); + BList * GetChapters(); + void PrevChapter(); + void NextChapter(); + void ToggleChapter( int i_chapter ); + void ChapterInfo( int32& currentIndex, int32& maxIndex ); + + /* Miscellanous */ + void LoadSubFile( char * psz_file ); private: intf_thread_t * p_intf; @@ -129,4 +129,3 @@ private: playlist_t * p_playlist; aout_instance_t * p_aout; }; -