Commit 2891094d authored by Eric Petit's avatar Eric Petit

* Fixed title / chapter menus

 * Clean up
parent d5fe9f34
......@@ -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 <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
......@@ -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 ) )
BMenuItem *item;
BList *list;
while( ( item = RemoveItem( 0L ) ) )
delete item;
#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++ )
if( ( list = p_intf->p_sys->p_wrapper->GetTitles() ) == NULL )
return;
for( int i = 0; i < list->CountItems(); 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 );
item = (BMenuItem*)list->ItemAt( i );
AddItem( item );
}
}
// done messing with stream
vlc_mutex_unlock( &input->stream.stream_lock );
}
#endif
BMenu::AttachedToWindow();
}
......@@ -1116,35 +926,21 @@ ChapterMenu::~ChapterMenu()
*****************************************************************************/
void ChapterMenu::AttachedToWindow()
{
// make title menu empty
while ( BMenuItem* item = RemoveItem( 0L ) )
BMenuItem *item;
BList *list;
while( ( item = RemoveItem( 0L ) ) )
delete item;
#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++ )
if( ( list = p_intf->p_sys->p_wrapper->GetChapters() ) == NULL )
return;
for( int i = 0; i < list->CountItems(); 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 );
item = (BMenuItem*)list->ItemAt( i );
AddItem( item );
}
}
// done messing with stream
vlc_mutex_unlock( &input->stream.stream_lock );
}
BMenu::AttachedToWindow();
#endif
}
......@@ -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 <polux@via.ecp.fr>
* Tony Castley <tcastley@mail.powerup.com.au>
......@@ -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;
};
......
......@@ -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 <stippi@yellowbites.com>
*
......@@ -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 )
......
......@@ -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 <stippi@yellowbites.com>
*
......@@ -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
......@@ -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 <tony@castley.net>
* Stephan Aßmus <stippi@yellowbites.com>
......@@ -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;
}
}
......
......@@ -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 <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
......@@ -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,
......
......@@ -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 <fgp@phlo.org>
* Jon Lech Johansen <jon-vl@nanocrew.net>
......@@ -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,7 +721,38 @@ 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 &currentIndex, 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 );
}
}
......@@ -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,24 +810,19 @@ 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 &currentIndex, int32 &maxIndex )
void VlcWrapper::ToggleChapter(int i_chapter)
{
currentIndex = -1;
maxIndex = -1;
if ( p_input )
if( p_input != NULL )
{
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;
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 );
}
}
......@@ -833,28 +845,11 @@ void VlcWrapper::ChapterInfo( int32 &currentIndex, 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 );
}
}
/****************
* Miscellanous *
****************/
void VlcWrapper::toggleChapter(int i_chapter)
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 ) );
}
......@@ -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 <fgp@phlo.org>
* Jon Lech Johansen <jon-vl@nanocrew.net>
......@@ -62,66 +62,66 @@ public:
bool UpdateInputAndAOut();
/* input */
/* 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 );
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 );
const char * GetTimeAsString();
float GetTimeAsFloat();
void SetTimeAsFloat( float i_offset );
bool IsPlaying();
/* Playlist */
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 );
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,
void GetPlaylistInfo( int32& currentIndex,
int32& maxIndex );
void PlaylistJumpTo( int );
void getNavCapabilities( bool* canSkipPrev,
bool* canSkipNext );
void navigatePrev();
void navigateNext();
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();
/* DVD */
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 TitleInfo( int32& currentIndex, int32& maxIndex );
void ToggleChapter( int i_chapter );
void ChapterInfo( int32& currentIndex, int32& maxIndex );
void toggleTitle( int i_title );
void toggleChapter( int i_chapter );
/* 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;
};
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