* 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 <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
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;
_SetMenusEnabled( false );
p_mediaControl->SetEnabled( false );
- _RestoreSettings();
-
Show();
}
{
if (fPlaylistWindow)
fPlaylistWindow->ReallyQuit();
- delete fSettings;
}
/*****************************************************************************
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();
}
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:
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:
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:
}
}
// give the list to VLC
- p_wrapper->openFiles(&files, replace);
+ p_wrapper->OpenFiles(&files, replace);
_UpdatePlaylist();
}
break;
p_intf->b_die = 1;
- _StoreSettings();
-
return( true );
}
{
if ( acquire_sem( p_mediaControl->fScrubSem ) == B_OK )
{
- p_wrapper->setTimeAsFloat(p_mediaControl->GetSeekTo());
+ p_wrapper->SetTimeAsFloat(p_mediaControl->GetSeekTo());
}
else if ( Lock() )
{
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() );
// 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() )
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 )
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
*****************************************************************************/
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++ )
*****************************************************************************/
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();
}
*****************************************************************************/
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
}
* 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 <polux@via.ecp.fr>
* Tony Castley <tcastley@mail.powerup.com.au>
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;
BMenu* fSpeedMenu;
BMenu* fSettingsMenu;
bigtime_t fLastUpdateTime;
- BMessage* fSettings; // we keep the message arround
- // for forward compatibility
VlcWrapper * p_wrapper;
};
* 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 <stippi@yellowbites.com>
*
/*****************************************************************************
* 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
fPlaying( false ),
fMainWindow( mainWindow )
{
+ this->p_wrapper = p_wrapper;
}
PlaylistView::~PlaylistView()
{
if ( clicks == 2 )
{
- /* Intf_VLCWrapper::playlistJumpTo( i ); */
+ p_wrapper->PlaylistJumpTo( i );
handled = true;
}
else if ( i == fCurrentIndex )
* 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 <stippi@yellowbites.com>
*
{
public:
PlaylistView( BRect frame,
- InterfaceWindow* mainWindow );
+ InterfaceWindow* mainWindow,
+ VlcWrapper * p_wrapper );
~PlaylistView();
// BListView
int32 fCurrentIndex;
bool fPlaying;
InterfaceWindow* fMainWindow;
+
+ VlcWrapper * p_wrapper;
};
#endif // LIST_VIEWS_H
* 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 <tony@castley.net>
* Stephan Aßmus <stippi@yellowbites.com>
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;
}
}
* 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 <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
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,
* 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 <fgp@phlo.org>
* Jon Lech Johansen <jon-vl@nanocrew.net>
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 )
}
}
-BList * VlcWrapper::InputGetChannels( int i_cat )
+BList * VlcWrapper::GetChannels( int i_cat )
{
if( p_input )
{
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;
}
}
-const char* VlcWrapper::getTimeAsString()
+const char * VlcWrapper::GetTimeAsString()
{
static char psz_currenttime[ OFFSETTOTIME_MAX_SIZE ];
return(psz_currenttime);
}
-float VlcWrapper::getTimeAsFloat()
+float VlcWrapper::GetTimeAsFloat()
{
float f_time = 0.0;
return( f_time );
}
-void VlcWrapper::setTimeAsFloat(float f_position)
+void VlcWrapper::SetTimeAsFloat( float f_position )
{
if( p_input != NULL )
{
}
-/******************************
- * 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 );
return i_size;
}
-char *VlcWrapper::PlaylistItemName( int i )
+char * VlcWrapper::PlaylistItemName( int i )
{
return p_playlist->pp_items[i]->psz_name;
}
return p_playlist->i_index;
}
-int VlcWrapper::PlaylistStatus()
-{
- return p_playlist->i_status;
-}
-
bool VlcWrapper::PlaylistPlay()
{
if( PlaylistSize() )
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;
}
}
-
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 )
{
}
}
-void VlcWrapper::navigatePrev()
+void VlcWrapper::NavigatePrev()
{
bool hasSkiped = false;
if ( currentChapter >= 0 )
{
- toggleChapter( currentChapter );
+ ToggleChapter( currentChapter );
hasSkiped = true;
}
}
// disallow area 0 since it is used for video_ts.vob
if( currentTitle > 0 )
{
- toggleTitle(currentTitle);
+ ToggleTitle(currentTitle);
hasSkiped = true;
}
}
PlaylistPrev();
}
-void VlcWrapper::navigateNext()
+void VlcWrapper::NavigateNext()
{
bool hasSkiped = false;
currentChapter++;
if ( currentChapter < numChapters )
{
- toggleChapter( currentChapter );
+ ToggleChapter( currentChapter );
hasSkiped = true;
}
}
// disallow area 0 since it is used for video_ts.vob
if ( currentTitle < numTitles - 1 )
{
- toggleTitle(currentTitle);
+ ToggleTitle(currentTitle);
hasSkiped = true;
}
}
}
-/***************************
- * audio infos and control *
- ***************************/
+/*********
+ * audio *
+ *********/
+
+bool VlcWrapper::HasAudio()
+{
+ return( p_aout != NULL );
+}
unsigned short VlcWrapper::GetVolume()
{
return p_intf->p_sys->b_mute;
}
-bool VlcWrapper::HasAudio()
-{
- return( p_aout != NULL );
-}
-
/*******
* DVD *
*******/
+
bool VlcWrapper::HasTitles()
{
if( !p_input )
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);
}
}
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 )
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);
}
}
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 )
}
}
-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 ) );
}
* 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 <fgp@phlo.org>
* Jon Lech Johansen <jon-vl@nanocrew.net>
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;
playlist_t * p_playlist;
aout_instance_t * p_aout;
};
-