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

* 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 ) )
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
}
......@@ -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 );
}
}