From: Eric Petit Date: Sat, 25 Jan 2003 20:15:41 +0000 (+0000) Subject: Added a window to see vlc messages. X-Git-Tag: 0.5.0~162 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=02d360bd15f8c8e8ba4fd844229682d6e5f24d88;p=vlc Added a window to see vlc messages. --- diff --git a/modules/gui/beos/BeOS.cpp b/modules/gui/beos/BeOS.cpp index 5fab6b6e46..2cec485864 100644 --- a/modules/gui/beos/BeOS.cpp +++ b/modules/gui/beos/BeOS.cpp @@ -2,7 +2,7 @@ * beos.cpp : BeOS plugin for vlc ***************************************************************************** * Copyright (C) 2000, 2001 VideoLAN - * $Id: BeOS.cpp,v 1.3 2003/01/25 01:03:44 titer Exp $ + * $Id: BeOS.cpp,v 1.4 2003/01/25 20:15:41 titer Exp $ * * Authors: Jean-Marc Dressler * Samuel Hocevar @@ -59,6 +59,7 @@ vlc_module_begin(); add_integer( "beos-playlist-xpos", 0, NULL, "", "" ); add_integer( "beos-playlist-ypos", 0, NULL, "", "" ); add_bool( "beos-playlist-show", 0, NULL, "", "" ); + add_bool( "beos-messages-show", 0, NULL, "", "" ); add_submodule(); set_capability( "video output", 100 ); set_callbacks( E_(OpenVideo), E_(CloseVideo) ); diff --git a/modules/gui/beos/Interface.cpp b/modules/gui/beos/Interface.cpp index 90bce24cf3..413d49e282 100644 --- a/modules/gui/beos/Interface.cpp +++ b/modules/gui/beos/Interface.cpp @@ -2,7 +2,7 @@ * intf_beos.cpp: beos interface ***************************************************************************** * Copyright (C) 1999, 2000, 2001 VideoLAN - * $Id: Interface.cpp,v 1.7 2002/12/09 13:37:38 titer Exp $ + * $Id: Interface.cpp,v 1.8 2003/01/25 20:15:41 titer Exp $ * * Authors: Jean-Marc Dressler * Samuel Hocevar @@ -55,15 +55,7 @@ static void Run ( intf_thread_t *p_intf ); *****************************************************************************/ int E_(OpenIntf) ( vlc_object_t *p_this ) { - intf_thread_t *p_intf = (intf_thread_t*) p_this; - BScreen *screen; - screen = new BScreen(); - BRect rect = screen->Frame(); - rect.top = rect.bottom-100; - rect.bottom -= 50; - rect.left += 50; - rect.right = rect.left + 350; - delete screen; + intf_thread_t * p_intf = (intf_thread_t*) p_this; /* Allocate instance and initialize some members */ p_intf->p_sys = (intf_sys_t*) malloc( sizeof( intf_sys_t ) ); @@ -73,11 +65,19 @@ int E_(OpenIntf) ( vlc_object_t *p_this ) return( 1 ); } + p_intf->p_sys->p_sub = msg_Subscribe( p_intf ); p_intf->p_sys->p_wrapper = new VlcWrapper( p_intf ); - p_intf->pf_run = Run; /* Create the interface window */ + BScreen *screen; + screen = new BScreen(); + BRect rect = screen->Frame(); + rect.top = rect.bottom-100; + rect.bottom -= 50; + rect.left += 50; + rect.right = rect.left + 350; + delete screen; p_intf->p_sys->p_window = new InterfaceWindow( rect, VOUT_TITLE " (BeOS interface)", p_intf ); @@ -87,9 +87,9 @@ int E_(OpenIntf) ( vlc_object_t *p_this ) msg_Err( p_intf, "cannot allocate InterfaceWindow" ); return( 1 ); } else { - BMessage message(INTERFACE_CREATED); - message.AddPointer("window", p_intf->p_sys->p_window); - be_app->PostMessage(&message); + BMessage message(INTERFACE_CREATED); + message.AddPointer("window", p_intf->p_sys->p_window); + be_app->PostMessage(&message); } p_intf->p_sys->i_saved_volume = AOUT_VOLUME_DEFAULT; p_intf->p_sys->b_loop = 0; @@ -104,6 +104,8 @@ int E_(OpenIntf) ( vlc_object_t *p_this ) void E_(CloseIntf) ( vlc_object_t *p_this ) { intf_thread_t *p_intf = (intf_thread_t*) p_this; + + msg_Unsubscribe( p_intf, p_intf->p_sys->p_sub ); /* Destroy the interface window */ p_intf->p_sys->p_window->Lock(); @@ -125,7 +127,7 @@ static void Run( intf_thread_t *p_intf ) if( p_intf->p_sys->p_wrapper->UpdateInputAndAOut() ) { /* Manage the slider */ - p_intf->p_sys->p_window->updateInterface(); + p_intf->p_sys->p_window->UpdateInterface(); } /* Wait a bit */ diff --git a/modules/gui/beos/InterfaceWindow.cpp b/modules/gui/beos/InterfaceWindow.cpp index 780740337c..5d7e3b2a56 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.21 2003/01/25 01:03:44 titer Exp $ + * $Id: InterfaceWindow.cpp,v 1.22 2003/01/25 20:15:41 titer Exp $ * * Authors: Jean-Marc Dressler * Samuel Hocevar @@ -48,6 +48,7 @@ #include "MediaControlView.h" #include "PlayListWindow.h" #include "PreferencesWindow.h" +#include "MessagesWindow.h" #include "InterfaceWindow.h" #define INTERFACE_UPDATE_TIMEOUT 80000 // 2 frames if at 25 fps @@ -58,13 +59,13 @@ *****************************************************************************/ InterfaceWindow::InterfaceWindow( BRect frame, const char *name, - intf_thread_t *p_interface ) - : BWindow( frame, name, B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, - B_NOT_ZOOMABLE | B_WILL_ACCEPT_FIRST_CLICK | B_ASYNCHRONOUS_CONTROLS ), - p_intf( p_interface ), - fFilePanel( NULL ), - fSubtitlesPanel( NULL ), - fLastUpdateTime( system_time() ) + intf_thread_t *p_interface ) + : BWindow( frame, name, B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, + B_NOT_ZOOMABLE | B_WILL_ACCEPT_FIRST_CLICK | B_ASYNCHRONOUS_CONTROLS ), + p_intf( p_interface ), + fFilePanel( NULL ), + fSubtitlesPanel( NULL ), + fLastUpdateTime( system_time() ) { p_intf = p_interface; p_wrapper = p_intf->p_sys->p_wrapper; @@ -72,10 +73,6 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name, fPlaylistIsEmpty = !( p_wrapper->PlaylistSize() > 0 ); - fPlaylistWindow = new PlayListWindow( BRect( 100.0, 100.0, 400.0, 350.0 ), - "Playlist", - this, - p_intf ); BScreen *p_screen = new BScreen(); BRect screen_rect = p_screen->Frame(); delete p_screen; @@ -84,106 +81,114 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name, ( screen_rect.bottom - PREFS_WINDOW_HEIGHT ) / 2, ( screen_rect.right + PREFS_WINDOW_WIDTH ) / 2, ( screen_rect.bottom + PREFS_WINDOW_HEIGHT ) / 2 ); - fPreferencesWindow = new PreferencesWindow( window_rect, - "Preferences", - p_intf ); + fPreferencesWindow = new PreferencesWindow( p_intf, window_rect, "Preferences" ); + window_rect.Set( screen_rect.right - 500, + screen_rect.top + 50, + screen_rect.right - 150, + screen_rect.top + 250 ); + fPlaylistWindow = new PlayListWindow( window_rect, "Playlist", this, p_intf ); + window_rect.Set( screen_rect.right - 500, + screen_rect.top + 300, + screen_rect.right - 150, + screen_rect.top + 600 ); + fMessagesWindow = new MessagesWindow( p_intf, window_rect, "Messages" ); + + // set the title bar + SetName( "interface" ); + SetTitle( VOUT_TITLE ); + + // the media control view + p_mediaControl = new MediaControlView( BRect( 0.0, 0.0, 250.0, 50.0 ), + p_intf ); + p_mediaControl->SetViewColor( ui_color( B_PANEL_BACKGROUND_COLOR ) ); + + float width, height; + p_mediaControl->GetPreferredSize( &width, &height ); + + // set up the main menu + fMenuBar = new BMenuBar( BRect(0.0, 0.0, width, 15.0), "main menu", + B_FOLLOW_NONE, B_ITEMS_IN_ROW, false ); + + // make menu bar resize to correct height + float menuWidth, menuHeight; + fMenuBar->GetPreferredSize( &menuWidth, &menuHeight ); + fMenuBar->ResizeTo( width, menuHeight ); // don't change! it's a workarround! + // take care of proper size for ourself + height += fMenuBar->Bounds().Height(); + ResizeTo( width, height ); + + p_mediaControl->MoveTo( fMenuBar->Bounds().LeftBottom() + BPoint(0.0, 1.0) ); + AddChild( fMenuBar ); + AddChild( p_mediaControl ); + + // Add the file Menu + BMenu* fileMenu = new BMenu( "File" ); + fMenuBar->AddItem( fileMenu ); + fileMenu->AddItem( new BMenuItem( "Open File" B_UTF8_ELLIPSIS, + new BMessage( OPEN_FILE ), 'O') ); + + fileMenu->AddItem( new CDMenu( "Open Disc" ) ); + + fileMenu->AddItem( new BMenuItem( "Load a subtitle file" B_UTF8_ELLIPSIS, + new BMessage( LOAD_SUBFILE ) ) ); + + fileMenu->AddSeparatorItem(); + BMenuItem* item = new BMenuItem( "About" B_UTF8_ELLIPSIS, + new BMessage( B_ABOUT_REQUESTED ), 'A'); + item->SetTarget( be_app ); + fileMenu->AddItem( item ); + fileMenu->AddItem( new BMenuItem( "Quit", new BMessage( B_QUIT_REQUESTED ), 'Q') ); + + fLanguageMenu = new LanguageMenu("Language", AUDIO_ES, p_wrapper); + fSubtitlesMenu = new LanguageMenu("Subtitles", SPU_ES, p_wrapper); + + /* Add the Audio menu */ + fAudioMenu = new BMenu( "Audio" ); + fMenuBar->AddItem ( fAudioMenu ); + fAudioMenu->AddItem( fLanguageMenu ); + fAudioMenu->AddItem( fSubtitlesMenu ); + + fPrevTitleMI = new BMenuItem( "Prev Title", new BMessage( PREV_TITLE ) ); + fNextTitleMI = new BMenuItem( "Next Title", new BMessage( NEXT_TITLE ) ); + fPrevChapterMI = new BMenuItem( "Prev Chapter", new BMessage( PREV_CHAPTER ) ); + fNextChapterMI = new BMenuItem( "Next Chapter", new BMessage( NEXT_CHAPTER ) ); + + /* Add the Navigation menu */ + fNavigationMenu = new BMenu( "Navigation" ); + fMenuBar->AddItem( fNavigationMenu ); + fNavigationMenu->AddItem( fPrevTitleMI ); + fNavigationMenu->AddItem( fNextTitleMI ); + fNavigationMenu->AddItem( fTitleMenu = new TitleMenu( "Go to Title", p_intf ) ); + fNavigationMenu->AddSeparatorItem(); + fNavigationMenu->AddItem( fPrevChapterMI ); + fNavigationMenu->AddItem( fNextChapterMI ); + fNavigationMenu->AddItem( fChapterMenu = new ChapterMenu( "Go to Chapter", p_intf ) ); + + /* Add the Speed menu */ + fSpeedMenu = new BMenu( "Speed" ); + fSpeedMenu->SetRadioMode( true ); + fSpeedMenu->AddItem( fSlowerMI = new BMenuItem( "Slower", new BMessage( SLOWER_PLAY ) ) ); + fNormalMI = new BMenuItem( "Normal", new BMessage( NORMAL_PLAY ) ); + fNormalMI->SetMarked(true); // default to normal speed + fSpeedMenu->AddItem( fNormalMI ); + fSpeedMenu->AddItem( fFasterMI = new BMenuItem( "Faster", new BMessage( FASTER_PLAY) ) ); + fSpeedMenu->SetTargetForItems( this ); + fMenuBar->AddItem( fSpeedMenu ); + + /* Add the Show menu */ + fShowMenu = new BMenu( "Show" ); + fShowMenu->AddItem( new BMenuItem( "Play List" B_UTF8_ELLIPSIS, + new BMessage( OPEN_PLAYLIST ), 'P') ); + fShowMenu->AddItem( new BMenuItem( "Messages" B_UTF8_ELLIPSIS, + new BMessage( OPEN_MESSAGES ), 'M' ) ); + fShowMenu->AddItem( new BMenuItem( "Settings" B_UTF8_ELLIPSIS, + new BMessage( OPEN_PREFERENCES ), 'S' ) ); + fMenuBar->AddItem( fShowMenu ); + + /* Prepare fow showing */ + _SetMenusEnabled( false ); + p_mediaControl->SetEnabled( false ); - // set the title bar - SetName( "interface" ); - SetTitle( VOUT_TITLE ); - - // the media control view - p_mediaControl = new MediaControlView( BRect( 0.0, 0.0, 250.0, 50.0 ), - p_intf ); - p_mediaControl->SetViewColor( ui_color( B_PANEL_BACKGROUND_COLOR ) ); - - float width, height; - p_mediaControl->GetPreferredSize( &width, &height ); - - // set up the main menu - fMenuBar = new BMenuBar( BRect(0.0, 0.0, width, 15.0), "main menu", - B_FOLLOW_NONE, B_ITEMS_IN_ROW, false ); - - // make menu bar resize to correct height - float menuWidth, menuHeight; - fMenuBar->GetPreferredSize( &menuWidth, &menuHeight ); - fMenuBar->ResizeTo( width, menuHeight ); // don't change! it's a workarround! - // take care of proper size for ourself - height += fMenuBar->Bounds().Height(); - ResizeTo( width, height ); - - p_mediaControl->MoveTo( fMenuBar->Bounds().LeftBottom() + BPoint(0.0, 1.0) ); - AddChild( fMenuBar ); - AddChild( p_mediaControl ); - - // Add the file Menu - BMenu* fileMenu = new BMenu( "File" ); - fMenuBar->AddItem( fileMenu ); - fileMenu->AddItem( new BMenuItem( "Open File" B_UTF8_ELLIPSIS, - new BMessage( OPEN_FILE ), 'O') ); - - fileMenu->AddItem( new CDMenu( "Open Disc" ) ); - - fileMenu->AddItem( new BMenuItem( "Load a subtitle file" B_UTF8_ELLIPSIS, - new BMessage( LOAD_SUBFILE ) ) ); - - fileMenu->AddSeparatorItem(); - fileMenu->AddItem( new BMenuItem( "Play List" B_UTF8_ELLIPSIS, - new BMessage( OPEN_PLAYLIST ), 'P') ); - - fileMenu->AddSeparatorItem(); - BMenuItem* item = new BMenuItem( "About" B_UTF8_ELLIPSIS, - new BMessage( B_ABOUT_REQUESTED ), 'A'); - item->SetTarget( be_app ); - fileMenu->AddItem( item ); - fileMenu->AddItem( new BMenuItem( "Quit", new BMessage( B_QUIT_REQUESTED ), 'Q') ); - - fLanguageMenu = new LanguageMenu("Language", AUDIO_ES, p_wrapper); - fSubtitlesMenu = new LanguageMenu("Subtitles", SPU_ES, p_wrapper); - - /* Add the Audio menu */ - fAudioMenu = new BMenu( "Audio" ); - fMenuBar->AddItem ( fAudioMenu ); - fAudioMenu->AddItem( fLanguageMenu ); - fAudioMenu->AddItem( fSubtitlesMenu ); - - fPrevTitleMI = new BMenuItem( "Prev Title", new BMessage( PREV_TITLE ) ); - fNextTitleMI = new BMenuItem( "Next Title", new BMessage( NEXT_TITLE ) ); - fPrevChapterMI = new BMenuItem( "Prev Chapter", new BMessage( PREV_CHAPTER ) ); - fNextChapterMI = new BMenuItem( "Next Chapter", new BMessage( NEXT_CHAPTER ) ); - - /* Add the Navigation menu */ - fNavigationMenu = new BMenu( "Navigation" ); - fMenuBar->AddItem( fNavigationMenu ); - fNavigationMenu->AddItem( fPrevTitleMI ); - fNavigationMenu->AddItem( fNextTitleMI ); - fNavigationMenu->AddItem( fTitleMenu = new TitleMenu( "Go to Title", p_intf ) ); - fNavigationMenu->AddSeparatorItem(); - fNavigationMenu->AddItem( fPrevChapterMI ); - fNavigationMenu->AddItem( fNextChapterMI ); - fNavigationMenu->AddItem( fChapterMenu = new ChapterMenu( "Go to Chapter", p_intf ) ); - - /* Add the Speed menu */ - fSpeedMenu = new BMenu( "Speed" ); - fSpeedMenu->SetRadioMode( true ); - fSpeedMenu->AddItem( fSlowerMI = new BMenuItem( "Slower", new BMessage( SLOWER_PLAY ) ) ); - fNormalMI = new BMenuItem( "Normal", new BMessage( NORMAL_PLAY ) ); - fNormalMI->SetMarked(true); // default to normal speed - fSpeedMenu->AddItem( fNormalMI ); - fSpeedMenu->AddItem( fFasterMI = new BMenuItem( "Faster", new BMessage( FASTER_PLAY) ) ); - fSpeedMenu->SetTargetForItems( this ); - fMenuBar->AddItem( fSpeedMenu ); - - /* Add the Settings menu */ - fSettingsMenu = new BMenu( "Settings" ); - fSettingsMenu->AddItem( fPreferencesMI = - new BMenuItem( "Preferences", new BMessage( OPEN_PREFERENCES ) ) ); - fMenuBar->AddItem( fSettingsMenu ); - - /* Prepare fow showing */ - _SetMenusEnabled( false ); - p_mediaControl->SetEnabled( false ); - /* Restore interface settings */ int i_width = config_GetInt( p_intf, "beos-intf-width" ), i_height = config_GetInt( p_intf, "beos-intf-height" ), @@ -214,14 +219,23 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name, fPlaylistWindow->Unlock(); } } - - Show(); + if( config_GetInt( p_intf, "beos-messages-show" ) ) + { + /* messages showing */ + if( fMessagesWindow->Lock() ) + { + fMessagesWindow->Show(); + fMessagesWindow->Unlock(); + } + } + + Show(); } InterfaceWindow::~InterfaceWindow() { - if (fPlaylistWindow) - fPlaylistWindow->ReallyQuit(); + if (fPlaylistWindow) + fPlaylistWindow->ReallyQuit(); } /***************************************************************************** @@ -230,12 +244,12 @@ InterfaceWindow::~InterfaceWindow() void InterfaceWindow::FrameResized(float width, float height) { - BRect r(Bounds()); - fMenuBar->MoveTo(r.LeftTop()); - fMenuBar->ResizeTo(r.Width(), fMenuBar->Bounds().Height()); - r.top += fMenuBar->Bounds().Height() + 1.0; - p_mediaControl->MoveTo(r.LeftTop()); - p_mediaControl->ResizeTo(r.Width(), r.Height()); + BRect r(Bounds()); + fMenuBar->MoveTo(r.LeftTop()); + fMenuBar->ResizeTo(r.Width(), fMenuBar->Bounds().Height()); + r.top += fMenuBar->Bounds().Height() + 1.0; + p_mediaControl->MoveTo(r.LeftTop()); + p_mediaControl->ResizeTo(r.Width(), r.Height()); } /***************************************************************************** @@ -243,335 +257,350 @@ InterfaceWindow::FrameResized(float width, float height) *****************************************************************************/ void InterfaceWindow::MessageReceived( BMessage * p_message ) { - int playback_status; // remember playback state - playback_status = p_wrapper->InputStatus(); - - switch( p_message->what ) - { - case B_ABOUT_REQUESTED: - { - BAlert* alert = new BAlert( VOUT_TITLE, - "BeOS " VOUT_TITLE "\n\n", "Ok"); - alert->Go(); - break; - } - case TOGGLE_ON_TOP: - break; - - case OPEN_FILE: - if( fFilePanel ) - { - fFilePanel->Show(); - break; - } - fFilePanel = new BFilePanel(); - fFilePanel->SetTarget( this ); - fFilePanel->Show(); - break; - - case OPEN_PLAYLIST: - if (fPlaylistWindow->Lock()) - { - if (fPlaylistWindow->IsHidden()) - fPlaylistWindow->Show(); - else - fPlaylistWindow->Activate(); - fPlaylistWindow->Unlock(); - } - break; - case OPEN_DVD: - { - const char *psz_device; - BString type( "dvd" ); - if( p_message->FindString( "device", &psz_device ) == B_OK ) - { - BString device( psz_device ); - p_wrapper->OpenDisc( type, device, 0, 0 ); - } - _UpdatePlaylist(); - } - break; - - case LOAD_SUBFILE: - if( fSubtitlesPanel ) - { - fSubtitlesPanel->Show(); - break; - } - fSubtitlesPanel = new BFilePanel(); - fSubtitlesPanel->SetTarget( this ); - fSubtitlesPanel->SetMessage( new BMessage( SUBFILE_RECEIVED ) ); - fSubtitlesPanel->Show(); - break; - - case SUBFILE_RECEIVED: - { - entry_ref ref; - if( p_message->FindRef( "refs", 0, &ref ) == B_OK ) - { - BPath path( &ref ); - if ( path.InitCheck() == B_OK ) - p_wrapper->LoadSubFile( (char*)path.Path() ); - } - break; - } - - case STOP_PLAYBACK: - // this currently stops playback not nicely - if (playback_status > UNDEF_S) - { - snooze( 400000 ); - p_wrapper->PlaylistStop(); - p_mediaControl->SetStatus(NOT_STARTED_S, DEFAULT_RATE); - } - break; - - case START_PLAYBACK: - /* starts playing in normal mode */ - - case PAUSE_PLAYBACK: - /* toggle between pause and play */ - if (playback_status > UNDEF_S) - { - /* pause if currently playing */ - if ( playback_status == PLAYING_S ) - { - p_wrapper->PlaylistPause(); - } - else - { - p_wrapper->PlaylistPlay(); - } - } - else - { - /* Play a new file */ - p_wrapper->PlaylistPlay(); - } - break; - - case FASTER_PLAY: - /* cycle the fast playback modes */ - if (playback_status > UNDEF_S) - { - p_wrapper->InputFaster(); - } - break; - - case SLOWER_PLAY: - /* cycle the slow playback modes */ - if (playback_status > UNDEF_S) - { - p_wrapper->InputSlower(); - } - break; - - case NORMAL_PLAY: - /* restore speed to normal if already playing */ - if (playback_status > UNDEF_S) - { - p_wrapper->PlaylistPlay(); - } - break; - - case SEEK_PLAYBACK: - /* handled by semaphores */ - break; - // volume related messages - case VOLUME_CHG: - /* adjust the volume */ - if (playback_status > UNDEF_S) - { - p_wrapper->SetVolume( p_mediaControl->GetVolume() ); - p_mediaControl->SetMuted( p_wrapper->IsMuted() ); - } - break; - - case VOLUME_MUTE: - // toggle muting - if( p_wrapper->IsMuted() ) - p_wrapper->VolumeRestore(); - else - p_wrapper->VolumeMute(); - p_mediaControl->SetMuted( p_wrapper->IsMuted() ); - break; - - case SELECT_CHANNEL: - if ( playback_status > UNDEF_S ) - { - int32 channel; - if ( p_message->FindInt32( "channel", &channel ) == B_OK ) - { - p_wrapper->ToggleLanguage( channel ); - } - } - break; - - case SELECT_SUBTITLE: - if ( playback_status > UNDEF_S ) - { - int32 subtitle; - if ( p_message->FindInt32( "subtitle", &subtitle ) == B_OK ) - p_wrapper->ToggleSubtitle( subtitle ); - } - break; - - // specific navigation messages - case PREV_TITLE: - { - p_wrapper->PrevTitle(); - break; - } - case NEXT_TITLE: - { + int playback_status; // remember playback state + playback_status = p_wrapper->InputStatus(); + + switch( p_message->what ) + { + case B_ABOUT_REQUESTED: + { + BAlert* alert = new BAlert( VOUT_TITLE, + "BeOS " VOUT_TITLE "\n\n", "Ok"); + alert->Go(); + break; + } + case TOGGLE_ON_TOP: + break; + + case OPEN_FILE: + if( fFilePanel ) + { + fFilePanel->Show(); + break; + } + fFilePanel = new BFilePanel(); + fFilePanel->SetTarget( this ); + fFilePanel->Show(); + break; + + case OPEN_PLAYLIST: + if (fPlaylistWindow->Lock()) + { + if (fPlaylistWindow->IsHidden()) + fPlaylistWindow->Show(); + else + fPlaylistWindow->Activate(); + fPlaylistWindow->Unlock(); + } + break; + case OPEN_DVD: + { + const char *psz_device; + BString type( "dvd" ); + if( p_message->FindString( "device", &psz_device ) == B_OK ) + { + BString device( psz_device ); + p_wrapper->OpenDisc( type, device, 0, 0 ); + } + _UpdatePlaylist(); + } + break; + + case LOAD_SUBFILE: + if( fSubtitlesPanel ) + { + fSubtitlesPanel->Show(); + break; + } + fSubtitlesPanel = new BFilePanel(); + fSubtitlesPanel->SetTarget( this ); + fSubtitlesPanel->SetMessage( new BMessage( SUBFILE_RECEIVED ) ); + fSubtitlesPanel->Show(); + break; + + case SUBFILE_RECEIVED: + { + entry_ref ref; + if( p_message->FindRef( "refs", 0, &ref ) == B_OK ) + { + BPath path( &ref ); + if ( path.InitCheck() == B_OK ) + p_wrapper->LoadSubFile( (char*)path.Path() ); + } + break; + } + + case STOP_PLAYBACK: + // this currently stops playback not nicely + if (playback_status > UNDEF_S) + { + snooze( 400000 ); + p_wrapper->PlaylistStop(); + p_mediaControl->SetStatus(NOT_STARTED_S, DEFAULT_RATE); + } + break; + + case START_PLAYBACK: + /* starts playing in normal mode */ + + case PAUSE_PLAYBACK: + /* toggle between pause and play */ + if (playback_status > UNDEF_S) + { + /* pause if currently playing */ + if ( playback_status == PLAYING_S ) + { + p_wrapper->PlaylistPause(); + } + else + { + p_wrapper->PlaylistPlay(); + } + } + else + { + /* Play a new file */ + p_wrapper->PlaylistPlay(); + } + break; + + case FASTER_PLAY: + /* cycle the fast playback modes */ + if (playback_status > UNDEF_S) + { + p_wrapper->InputFaster(); + } + break; + + case SLOWER_PLAY: + /* cycle the slow playback modes */ + if (playback_status > UNDEF_S) + { + p_wrapper->InputSlower(); + } + break; + + case NORMAL_PLAY: + /* restore speed to normal if already playing */ + if (playback_status > UNDEF_S) + { + p_wrapper->PlaylistPlay(); + } + break; + + case SEEK_PLAYBACK: + /* handled by semaphores */ + break; + // volume related messages + case VOLUME_CHG: + /* adjust the volume */ + if (playback_status > UNDEF_S) + { + p_wrapper->SetVolume( p_mediaControl->GetVolume() ); + p_mediaControl->SetMuted( p_wrapper->IsMuted() ); + } + break; + + case VOLUME_MUTE: + // toggle muting + if( p_wrapper->IsMuted() ) + p_wrapper->VolumeRestore(); + else + p_wrapper->VolumeMute(); + p_mediaControl->SetMuted( p_wrapper->IsMuted() ); + break; + + case SELECT_CHANNEL: + if ( playback_status > UNDEF_S ) + { + int32 channel; + if ( p_message->FindInt32( "channel", &channel ) == B_OK ) + { + p_wrapper->ToggleLanguage( channel ); + } + } + break; + + case SELECT_SUBTITLE: + if ( playback_status > UNDEF_S ) + { + int32 subtitle; + if ( p_message->FindInt32( "subtitle", &subtitle ) == B_OK ) + p_wrapper->ToggleSubtitle( subtitle ); + } + break; + + // specific navigation messages + case PREV_TITLE: + { + p_wrapper->PrevTitle(); + break; + } + case NEXT_TITLE: + { p_wrapper->NextTitle(); - break; - } - case TOGGLE_TITLE: - if ( playback_status > UNDEF_S ) - { - int32 index; - if( p_message->FindInt32( "index", &index ) == B_OK ) - p_wrapper->ToggleTitle( index ); - } - break; - case PREV_CHAPTER: - { + break; + } + case TOGGLE_TITLE: + if ( playback_status > UNDEF_S ) + { + int32 index; + if( p_message->FindInt32( "index", &index ) == B_OK ) + p_wrapper->ToggleTitle( index ); + } + break; + case PREV_CHAPTER: + { p_wrapper->PrevChapter(); - break; - } - case NEXT_CHAPTER: - { + break; + } + case NEXT_CHAPTER: + { p_wrapper->NextChapter(); - break; - } - case TOGGLE_CHAPTER: - if ( playback_status > UNDEF_S ) - { - int32 index; - if( p_message->FindInt32( "index", &index ) == B_OK ) + break; + } + case TOGGLE_CHAPTER: + if ( playback_status > UNDEF_S ) + { + int32 index; + if( p_message->FindInt32( "index", &index ) == B_OK ) p_wrapper->ToggleChapter( index ); - } - break; - case PREV_FILE: - p_wrapper->PlaylistPrev(); - break; - case NEXT_FILE: - p_wrapper->PlaylistNext(); - break; - // general next/prev functionality (skips to whatever makes most sense) - case NAVIGATE_PREV: - p_wrapper->NavigatePrev(); - break; - case NAVIGATE_NEXT: - p_wrapper->NavigateNext(); - break; - // drag'n'drop and system messages - case B_REFS_RECEIVED: - case B_SIMPLE_DATA: - { - /* file(s) opened by the File menu -> append to the playlist; - * file(s) opened by drag & drop -> replace playlist; - * file(s) opened by 'shift' + drag & drop -> append */ - bool replace = false; - if ( p_message->WasDropped() ) - replace = !( modifiers() & B_SHIFT_KEY ); - - // build list of files to be played from message contents - entry_ref ref; - BList files; - for ( int i = 0; p_message->FindRef( "refs", i, &ref ) == B_OK; i++ ) - { - BPath path( &ref ); - if ( path.InitCheck() == B_OK ) - { - bool add = true; - // has the user dropped a dvd disk icon? - BDirectory dir( &ref ); - if ( dir.InitCheck() == B_OK && dir.IsRootDirectory() ) - { - BVolumeRoster volRoster; - BVolume vol; - BDirectory volumeRoot; - status_t status = volRoster.GetNextVolume( &vol ); - while( status == B_NO_ERROR ) - { - if( vol.GetRootDirectory( &volumeRoot ) == B_OK - && dir == volumeRoot ) - { - BString volumeName; - BString deviceName; - bool isCDROM = false; - bool success = false; - deviceName = ""; - volumeName = ""; - char name[B_FILE_NAME_LENGTH]; - if ( vol.GetName( name ) >= B_OK ) // disk is currently mounted - { - volumeName = name; - dev_t dev = vol.Device(); - fs_info info; - if ( fs_stat_dev( dev, &info ) == B_OK ) - { - success = true; - deviceName = info.device_name; - if ( vol.IsReadOnly() ) - { - int i_dev = open( info.device_name, O_RDONLY ); - if ( i_dev >= 0 ) - { - device_geometry g; - if ( ioctl( i_dev, B_GET_GEOMETRY, &g, sizeof( g ) ) >= 0 ) - isCDROM = ( g.device_type == B_CD ); - close( i_dev ); - } - } - } - } - - if( success && isCDROM ) - { - BMessage msg( OPEN_DVD ); - msg.AddString( "device", deviceName.String() ); - PostMessage( &msg ); - add = false; - } - break; - } - else - { - vol.Unset(); - status = volRoster.GetNextVolume( &vol ); - } - } - } - if( add ) - { - files.AddItem( new BString( (char*)path.Path() ) ); - } - } - } - // give the list to VLC - p_wrapper->OpenFiles(&files, replace); - _UpdatePlaylist(); - } - break; - - case OPEN_PREFERENCES: - if( fPreferencesWindow->Lock() ) - { - if (fPreferencesWindow->IsHidden()) - fPreferencesWindow->Show(); - else - fPreferencesWindow->Activate(); - fPreferencesWindow->Unlock(); - } - break; - - default: - BWindow::MessageReceived( p_message ); - break; - } + } + break; + case PREV_FILE: + p_wrapper->PlaylistPrev(); + break; + case NEXT_FILE: + p_wrapper->PlaylistNext(); + break; + // general next/prev functionality (skips to whatever makes most sense) + case NAVIGATE_PREV: + p_wrapper->NavigatePrev(); + break; + case NAVIGATE_NEXT: + p_wrapper->NavigateNext(); + break; + // drag'n'drop and system messages + case B_REFS_RECEIVED: + case B_SIMPLE_DATA: + { + /* file(s) opened by the File menu -> append to the playlist; + * file(s) opened by drag & drop -> replace playlist; + * file(s) opened by 'shift' + drag & drop -> append */ + bool replace = false; + if ( p_message->WasDropped() ) + replace = !( modifiers() & B_SHIFT_KEY ); + + // build list of files to be played from message contents + entry_ref ref; + BList files; + for ( int i = 0; p_message->FindRef( "refs", i, &ref ) == B_OK; i++ ) + { + BPath path( &ref ); + if ( path.InitCheck() == B_OK ) + { + bool add = true; + // has the user dropped a dvd disk icon? + BDirectory dir( &ref ); + if ( dir.InitCheck() == B_OK && dir.IsRootDirectory() ) + { + BVolumeRoster volRoster; + BVolume vol; + BDirectory volumeRoot; + status_t status = volRoster.GetNextVolume( &vol ); + while( status == B_NO_ERROR ) + { + if( vol.GetRootDirectory( &volumeRoot ) == B_OK + && dir == volumeRoot ) + { + BString volumeName; + BString deviceName; + bool isCDROM = false; + bool success = false; + deviceName = ""; + volumeName = ""; + char name[B_FILE_NAME_LENGTH]; + if ( vol.GetName( name ) >= B_OK ) // disk is currently mounted + { + volumeName = name; + dev_t dev = vol.Device(); + fs_info info; + if ( fs_stat_dev( dev, &info ) == B_OK ) + { + success = true; + deviceName = info.device_name; + if ( vol.IsReadOnly() ) + { + int i_dev = open( info.device_name, O_RDONLY ); + if ( i_dev >= 0 ) + { + device_geometry g; + if ( ioctl( i_dev, B_GET_GEOMETRY, &g, sizeof( g ) ) >= 0 ) + isCDROM = ( g.device_type == B_CD ); + close( i_dev ); + } + } + } + } + + if( success && isCDROM ) + { + BMessage msg( OPEN_DVD ); + msg.AddString( "device", deviceName.String() ); + PostMessage( &msg ); + add = false; + } + break; + } + else + { + vol.Unset(); + status = volRoster.GetNextVolume( &vol ); + } + } + } + if( add ) + { + files.AddItem( new BString( (char*)path.Path() ) ); + } + } + } + // give the list to VLC + p_wrapper->OpenFiles(&files, replace); + _UpdatePlaylist(); + } + break; + + case OPEN_PREFERENCES: + { + if( fPreferencesWindow->Lock() ) + { + if (fPreferencesWindow->IsHidden()) + fPreferencesWindow->Show(); + else + fPreferencesWindow->Activate(); + fPreferencesWindow->Unlock(); + } + break; + } + + case OPEN_MESSAGES: + { + if( fMessagesWindow->Lock() ) + { + if (fMessagesWindow->IsHidden()) + fMessagesWindow->Show(); + else + fMessagesWindow->Activate(); + fMessagesWindow->Unlock(); + } + break; + } + + default: + BWindow::MessageReceived( p_message ); + break; + } } @@ -580,8 +609,8 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) *****************************************************************************/ bool InterfaceWindow::QuitRequested() { - p_wrapper->PlaylistStop(); - p_mediaControl->SetStatus(NOT_STARTED_S, DEFAULT_RATE); + p_wrapper->PlaylistStop(); + p_mediaControl->SetStatus(NOT_STARTED_S, DEFAULT_RATE); /* Save interface settings */ BRect frame = Frame(); @@ -599,65 +628,70 @@ bool InterfaceWindow::QuitRequested() config_PutInt( p_intf, "beos-playlist-show", !fPlaylistWindow->IsHidden() ); fPlaylistWindow->Unlock(); } + if( fMessagesWindow->Lock() ) + { + config_PutInt( p_intf, "beos-messages-show", !fMessagesWindow->IsHidden() ); + fMessagesWindow->Unlock(); + } config_SaveConfigFile( p_intf, "beos" ); - p_intf->b_die = 1; + p_intf->b_die = 1; - return( true ); + return( true ); } /***************************************************************************** - * InterfaceWindow::updateInterface + * InterfaceWindow::UpdateInterface *****************************************************************************/ -void InterfaceWindow::updateInterface() +void InterfaceWindow::UpdateInterface() { if( p_wrapper->HasInput() ) { - if ( acquire_sem( p_mediaControl->fScrubSem ) == B_OK ) - { - p_wrapper->SetTimeAsFloat(p_mediaControl->GetSeekTo()); - } - else if ( Lock() ) - { - p_mediaControl->SetEnabled( true ); - bool hasTitles = p_wrapper->HasTitles(); - bool hasChapters = p_wrapper->HasChapters(); - p_mediaControl->SetStatus( p_wrapper->InputStatus(), - p_wrapper->InputRate() ); - 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_mediaControl->SetSkippable( canSkipPrev, canSkipNext ); - - if ( p_wrapper->HasAudio() ) - { - p_mediaControl->SetAudioEnabled( true ); - p_mediaControl->SetMuted( p_wrapper->IsMuted() ); - } else - p_mediaControl->SetAudioEnabled( false ); - - Unlock(); - } - // update playlist as well - if ( fPlaylistWindow->Lock() ) - { - fPlaylistWindow->UpdatePlaylist(); - fPlaylistWindow->Unlock(); - } - } + if ( acquire_sem( p_mediaControl->fScrubSem ) == B_OK ) + { + p_wrapper->SetTimeAsFloat(p_mediaControl->GetSeekTo()); + } + else if ( Lock() ) + { + p_mediaControl->SetEnabled( true ); + bool hasTitles = p_wrapper->HasTitles(); + bool hasChapters = p_wrapper->HasChapters(); + p_mediaControl->SetStatus( p_wrapper->InputStatus(), + p_wrapper->InputRate() ); + 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_mediaControl->SetSkippable( canSkipPrev, canSkipNext ); + + if ( p_wrapper->HasAudio() ) + { + p_mediaControl->SetAudioEnabled( true ); + p_mediaControl->SetMuted( p_wrapper->IsMuted() ); + } else + p_mediaControl->SetAudioEnabled( false ); + + Unlock(); + } + // update playlist as well + if ( fPlaylistWindow->Lock() ) + { + fPlaylistWindow->UpdatePlaylist(); + fPlaylistWindow->Unlock(); + } + } else { - _SetMenusEnabled( false ); - if( !( p_wrapper->PlaylistSize() > 0 ) ) - p_mediaControl->SetEnabled( false ); - else - p_mediaControl->SetProgress( 0 ); + _SetMenusEnabled( false ); + if( !( p_wrapper->PlaylistSize() > 0 ) ) + p_mediaControl->SetEnabled( false ); + else + p_mediaControl->SetProgress( 0 ); } /* always force the user-specified volume */ @@ -667,8 +701,10 @@ void InterfaceWindow::updateInterface() { p_wrapper->SetVolume( i_volume ); } + + fMessagesWindow->UpdateMessages(); - fLastUpdateTime = system_time(); + fLastUpdateTime = system_time(); } /***************************************************************************** @@ -677,7 +713,7 @@ void InterfaceWindow::updateInterface() bool InterfaceWindow::IsStopped() const { - return (system_time() - fLastUpdateTime > INTERFACE_UPDATE_TIMEOUT); + return (system_time() - fLastUpdateTime > INTERFACE_UPDATE_TIMEOUT); } /***************************************************************************** @@ -686,12 +722,12 @@ InterfaceWindow::IsStopped() const void InterfaceWindow::_UpdatePlaylist() { - if ( fPlaylistWindow->Lock() ) - { - fPlaylistWindow->UpdatePlaylist( true ); - fPlaylistWindow->Unlock(); - p_mediaControl->SetEnabled( p_wrapper->PlaylistSize() ); - } + if ( fPlaylistWindow->Lock() ) + { + fPlaylistWindow->UpdatePlaylist( true ); + fPlaylistWindow->Unlock(); + p_mediaControl->SetEnabled( p_wrapper->PlaylistSize() ); + } } /***************************************************************************** @@ -700,37 +736,37 @@ InterfaceWindow::_UpdatePlaylist() void InterfaceWindow::_SetMenusEnabled(bool hasFile, bool hasChapters, bool hasTitles) { - if (!hasFile) - { - hasChapters = false; - hasTitles = false; - } - if (Lock()) - { - if (fNextChapterMI->IsEnabled() != hasChapters) - fNextChapterMI->SetEnabled(hasChapters); - if (fPrevChapterMI->IsEnabled() != hasChapters) - fPrevChapterMI->SetEnabled(hasChapters); - if (fChapterMenu->IsEnabled() != hasChapters) - fChapterMenu->SetEnabled(hasChapters); - if (fNextTitleMI->IsEnabled() != hasTitles) - fNextTitleMI->SetEnabled(hasTitles); - if (fPrevTitleMI->IsEnabled() != hasTitles) - fPrevTitleMI->SetEnabled(hasTitles); - if (fTitleMenu->IsEnabled() != hasTitles) - fTitleMenu->SetEnabled(hasTitles); - if (fAudioMenu->IsEnabled() != hasFile) - fAudioMenu->SetEnabled(hasFile); - if (fNavigationMenu->IsEnabled() != hasFile) - fNavigationMenu->SetEnabled(hasFile); - if (fLanguageMenu->IsEnabled() != hasFile) - fLanguageMenu->SetEnabled(hasFile); - if (fSubtitlesMenu->IsEnabled() != hasFile) - fSubtitlesMenu->SetEnabled(hasFile); - if (fSpeedMenu->IsEnabled() != hasFile) - fSpeedMenu->SetEnabled(hasFile); - Unlock(); - } + if (!hasFile) + { + hasChapters = false; + hasTitles = false; + } + if (Lock()) + { + if (fNextChapterMI->IsEnabled() != hasChapters) + fNextChapterMI->SetEnabled(hasChapters); + if (fPrevChapterMI->IsEnabled() != hasChapters) + fPrevChapterMI->SetEnabled(hasChapters); + if (fChapterMenu->IsEnabled() != hasChapters) + fChapterMenu->SetEnabled(hasChapters); + if (fNextTitleMI->IsEnabled() != hasTitles) + fNextTitleMI->SetEnabled(hasTitles); + if (fPrevTitleMI->IsEnabled() != hasTitles) + fPrevTitleMI->SetEnabled(hasTitles); + if (fTitleMenu->IsEnabled() != hasTitles) + fTitleMenu->SetEnabled(hasTitles); + if (fAudioMenu->IsEnabled() != hasFile) + fAudioMenu->SetEnabled(hasFile); + if (fNavigationMenu->IsEnabled() != hasFile) + fNavigationMenu->SetEnabled(hasFile); + if (fLanguageMenu->IsEnabled() != hasFile) + fLanguageMenu->SetEnabled(hasFile); + if (fSubtitlesMenu->IsEnabled() != hasFile) + fSubtitlesMenu->SetEnabled(hasFile); + if (fSpeedMenu->IsEnabled() != hasFile) + fSpeedMenu->SetEnabled(hasFile); + Unlock(); + } } /***************************************************************************** @@ -739,21 +775,21 @@ InterfaceWindow::_SetMenusEnabled(bool hasFile, bool hasChapters, bool hasTitles void InterfaceWindow::_UpdateSpeedMenu( int rate ) { - if ( rate == DEFAULT_RATE ) - { - if ( !fNormalMI->IsMarked() ) - fNormalMI->SetMarked( true ); - } - else if ( rate < DEFAULT_RATE ) - { - if ( !fFasterMI->IsMarked() ) - fFasterMI->SetMarked( true ); - } - else - { - if ( !fSlowerMI->IsMarked() ) - fSlowerMI->SetMarked( true ); - } + if ( rate == DEFAULT_RATE ) + { + if ( !fNormalMI->IsMarked() ) + fNormalMI->SetMarked( true ); + } + else if ( rate < DEFAULT_RATE ) + { + if ( !fFasterMI->IsMarked() ) + fFasterMI->SetMarked( true ); + } + else + { + if ( !fSlowerMI->IsMarked() ) + fSlowerMI->SetMarked( true ); + } } /***************************************************************************** @@ -762,30 +798,30 @@ InterfaceWindow::_UpdateSpeedMenu( int rate ) void InterfaceWindow::_InputStreamChanged() { - // TODO: move more stuff from updateInterface() here! - snooze( 400000 ); - p_wrapper->SetVolume( p_mediaControl->GetVolume() ); + // TODO: move more stuff from updateInterface() here! + snooze( 400000 ); + p_wrapper->SetVolume( p_mediaControl->GetVolume() ); } void make_sure_frame_is_within_limits( BRect& frame, float minWidth, float minHeight, - float maxWidth, float maxHeight ) + float maxWidth, float maxHeight ) { - if ( frame.Width() < minWidth ) - frame.right = frame.left + minWidth; - if ( frame.Height() < minHeight ) - frame.bottom = frame.top + minHeight; - if ( frame.Width() > maxWidth ) - frame.right = frame.left + maxWidth; - if ( frame.Height() > maxHeight ) - frame.bottom = frame.top + maxHeight; + if ( frame.Width() < minWidth ) + frame.right = frame.left + minWidth; + if ( frame.Height() < minHeight ) + frame.bottom = frame.top + minHeight; + if ( frame.Width() > maxWidth ) + frame.right = frame.left + maxWidth; + if ( frame.Height() > maxHeight ) + frame.bottom = frame.top + maxHeight; } /***************************************************************************** * CDMenu::CDMenu *****************************************************************************/ CDMenu::CDMenu(const char *name) - : BMenu(name) + : BMenu(name) { } @@ -801,11 +837,11 @@ CDMenu::~CDMenu() *****************************************************************************/ void CDMenu::AttachedToWindow(void) { - // remove all items - while (BMenuItem* item = RemoveItem(0L)) - delete item; - GetCD("/dev/disk"); - BMenu::AttachedToWindow(); + // remove all items + while (BMenuItem* item = RemoveItem(0L)) + delete item; + GetCD("/dev/disk"); + BMenu::AttachedToWindow(); } /***************************************************************************** @@ -813,65 +849,65 @@ void CDMenu::AttachedToWindow(void) *****************************************************************************/ int CDMenu::GetCD( const char *directory ) { - BVolumeRoster *volRoster; - BVolume *vol; - BDirectory *dir; - int status; - int mounted; - char name[B_FILE_NAME_LENGTH]; - fs_info info; - dev_t dev; - - volRoster = new BVolumeRoster(); - vol = new BVolume(); - dir = new BDirectory(); - status = volRoster->GetNextVolume(vol); - status = vol->GetRootDirectory(dir); - while (status == B_NO_ERROR) - { - mounted = vol->GetName(name); - if ((mounted == B_OK) && /* Disk is currently Mounted */ - (vol->IsReadOnly()) ) /* Disk is read-only */ - { - dev = vol->Device(); - fs_stat_dev(dev, &info); - - device_geometry g; - int i_dev; - i_dev = open( info.device_name, O_RDONLY ); - - if( i_dev >= 0 ) - { - if( ioctl(i_dev, B_GET_GEOMETRY, &g, sizeof(g)) >= 0 ) - { - if( g.device_type == B_CD ) //ensure the drive is a CD-ROM - { - BMessage *msg; - msg = new BMessage( OPEN_DVD ); - msg->AddString( "device", info.device_name ); - BMenuItem *menu_item; - menu_item = new BMenuItem( name, msg ); - AddItem( menu_item ); - } - close(i_dev); - } - } - } - vol->Unset(); - status = volRoster->GetNextVolume(vol); - } - return 0; + BVolumeRoster *volRoster; + BVolume *vol; + BDirectory *dir; + int status; + int mounted; + char name[B_FILE_NAME_LENGTH]; + fs_info info; + dev_t dev; + + volRoster = new BVolumeRoster(); + vol = new BVolume(); + dir = new BDirectory(); + status = volRoster->GetNextVolume(vol); + status = vol->GetRootDirectory(dir); + while (status == B_NO_ERROR) + { + mounted = vol->GetName(name); + if ((mounted == B_OK) && /* Disk is currently Mounted */ + (vol->IsReadOnly()) ) /* Disk is read-only */ + { + dev = vol->Device(); + fs_stat_dev(dev, &info); + + device_geometry g; + int i_dev; + i_dev = open( info.device_name, O_RDONLY ); + + if( i_dev >= 0 ) + { + if( ioctl(i_dev, B_GET_GEOMETRY, &g, sizeof(g)) >= 0 ) + { + if( g.device_type == B_CD ) //ensure the drive is a CD-ROM + { + BMessage *msg; + msg = new BMessage( OPEN_DVD ); + msg->AddString( "device", info.device_name ); + BMenuItem *menu_item; + menu_item = new BMenuItem( name, msg ); + AddItem( menu_item ); + } + close(i_dev); + } + } + } + vol->Unset(); + status = volRoster->GetNextVolume(vol); + } + return 0; } /***************************************************************************** * LanguageMenu::LanguageMenu *****************************************************************************/ LanguageMenu::LanguageMenu( const char *name, int menu_kind, - VlcWrapper *p_wrapper ) - :BMenu(name) + VlcWrapper *p_wrapper ) + :BMenu(name) { - kind = menu_kind; - this->p_wrapper = p_wrapper; + kind = menu_kind; + this->p_wrapper = p_wrapper; } /***************************************************************************** @@ -886,13 +922,13 @@ LanguageMenu::~LanguageMenu() *****************************************************************************/ void LanguageMenu::AttachedToWindow() { - // remove all items - while ( BMenuItem* item = RemoveItem( 0L ) ) - delete item; + // remove all items + while ( BMenuItem* item = RemoveItem( 0L ) ) + delete item; - SetRadioMode( true ); - _GetChannels(); - BMenu::AttachedToWindow(); + SetRadioMode( true ); + _GetChannels(); + BMenu::AttachedToWindow(); } /***************************************************************************** @@ -921,8 +957,8 @@ void LanguageMenu::_GetChannels() * TitleMenu::TitleMenu *****************************************************************************/ TitleMenu::TitleMenu( const char *name, intf_thread_t *p_interface ) - : BMenu(name), - p_intf( p_interface ) + : BMenu(name), + p_intf( p_interface ) { } @@ -941,8 +977,8 @@ void TitleMenu::AttachedToWindow() BMenuItem *item; BList *list; - while( ( item = RemoveItem( 0L ) ) ) - delete item; + while( ( item = RemoveItem( 0L ) ) ) + delete item; if( ( list = p_intf->p_sys->p_wrapper->GetTitles() ) == NULL ) return; @@ -953,7 +989,7 @@ void TitleMenu::AttachedToWindow() AddItem( item ); } - BMenu::AttachedToWindow(); + BMenu::AttachedToWindow(); } @@ -961,8 +997,8 @@ void TitleMenu::AttachedToWindow() * ChapterMenu::ChapterMenu *****************************************************************************/ ChapterMenu::ChapterMenu( const char *name, intf_thread_t *p_interface ) - : BMenu(name), - p_intf( p_interface ) + : BMenu(name), + p_intf( p_interface ) { } @@ -981,8 +1017,8 @@ void ChapterMenu::AttachedToWindow() BMenuItem *item; BList *list; - while( ( item = RemoveItem( 0L ) ) ) - delete item; + while( ( item = RemoveItem( 0L ) ) ) + delete item; if( ( list = p_intf->p_sys->p_wrapper->GetChapters() ) == NULL ) return; @@ -993,6 +1029,6 @@ void ChapterMenu::AttachedToWindow() AddItem( item ); } - BMenu::AttachedToWindow(); + BMenu::AttachedToWindow(); } diff --git a/modules/gui/beos/InterfaceWindow.h b/modules/gui/beos/InterfaceWindow.h index 67300fb833..53af47bc7a 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.9 2003/01/22 01:13:22 titer Exp $ + * $Id: InterfaceWindow.h,v 1.10 2003/01/25 20:15:41 titer Exp $ * * Authors: Jean-Marc Dressler * Tony Castley @@ -35,115 +35,116 @@ class MediaControlView; class PlayListWindow; class BFilePanel; class PreferencesWindow; +class MessagesWindow; class CDMenu : public BMenu { public: - CDMenu( const char* name ); - virtual ~CDMenu(); + CDMenu( const char* name ); + virtual ~CDMenu(); - virtual void AttachedToWindow(); + virtual void AttachedToWindow(); private: - int GetCD( const char* directory ); + int GetCD( const char* directory ); }; class LanguageMenu : public BMenu { public: - LanguageMenu( const char* name, - int menu_kind, - VlcWrapper *p_wrapper ); - virtual ~LanguageMenu(); + LanguageMenu( const char* name, + int menu_kind, + VlcWrapper *p_wrapper ); + virtual ~LanguageMenu(); - virtual void AttachedToWindow(); + virtual void AttachedToWindow(); private: - void _GetChannels(); + void _GetChannels(); - VlcWrapper * p_wrapper; - int kind; + VlcWrapper * p_wrapper; + int kind; }; class TitleMenu : public BMenu { public: - TitleMenu( const char* name, intf_thread_t *p_interface ); - virtual ~TitleMenu(); + TitleMenu( const char* name, intf_thread_t *p_interface ); + virtual ~TitleMenu(); - virtual void AttachedToWindow(); - - intf_thread_t *p_intf; + virtual void AttachedToWindow(); + + intf_thread_t *p_intf; }; class ChapterMenu : public BMenu { public: - ChapterMenu( const char* name, intf_thread_t *p_interface ); - virtual ~ChapterMenu(); + ChapterMenu( const char* name, intf_thread_t *p_interface ); + virtual ~ChapterMenu(); - virtual void AttachedToWindow(); + virtual void AttachedToWindow(); - intf_thread_t *p_intf; + intf_thread_t *p_intf; }; class InterfaceWindow : public BWindow { public: - InterfaceWindow( BRect frame, - const char* name, - intf_thread_t* p_interface ); - virtual ~InterfaceWindow(); - - // BWindow - virtual void FrameResized( float width, float height ); - virtual void MessageReceived( BMessage* message ); - virtual bool QuitRequested(); - - // InterfaceWindow - void updateInterface(); - bool IsStopped() const; - - MediaControlView* p_mediaControl; - - private: - void _UpdatePlaylist(); - void _SetMenusEnabled( bool hasFile, - bool hasChapters = false, - bool hasTitles = false ); - void _UpdateSpeedMenu( int rate ); - void _InputStreamChanged(); - - intf_thread_t* p_intf; - es_descriptor_t* p_spu_es; - - bool fPlaylistIsEmpty; - BFilePanel* fFilePanel; - BFilePanel* fSubtitlesPanel; - PlayListWindow* fPlaylistWindow; - PreferencesWindow* fPreferencesWindow; - BMenuBar* fMenuBar; - BMenuItem* fNextTitleMI; - BMenuItem* fPrevTitleMI; - BMenuItem* fNextChapterMI; - BMenuItem* fPrevChapterMI; - BMenuItem* fOnTopMI; - BMenuItem* fSlowerMI; - BMenuItem* fNormalMI; - BMenuItem* fFasterMI; - BMenuItem* fPreferencesMI; - BMenu* fAudioMenu; - BMenu* fNavigationMenu; - BMenu* fTitleMenu; - BMenu* fChapterMenu; - BMenu* fLanguageMenu; - BMenu* fSubtitlesMenu; - BMenu* fSpeedMenu; - BMenu* fSettingsMenu; - bigtime_t fLastUpdateTime; - - VlcWrapper * p_wrapper; + InterfaceWindow( BRect frame, + const char* name, + intf_thread_t* p_interface ); + virtual ~InterfaceWindow(); + + // BWindow + virtual void FrameResized( float width, float height ); + virtual void MessageReceived( BMessage* message ); + virtual bool QuitRequested(); + + // InterfaceWindow + void UpdateInterface(); + bool IsStopped() const; + + MediaControlView* p_mediaControl; + + private: + void _UpdatePlaylist(); + void _SetMenusEnabled( bool hasFile, + bool hasChapters = false, + bool hasTitles = false ); + void _UpdateSpeedMenu( int rate ); + void _InputStreamChanged(); + + intf_thread_t* p_intf; + es_descriptor_t* p_spu_es; + + bool fPlaylistIsEmpty; + BFilePanel* fFilePanel; + BFilePanel* fSubtitlesPanel; + PlayListWindow* fPlaylistWindow; + PreferencesWindow* fPreferencesWindow; + MessagesWindow* fMessagesWindow; + BMenuBar* fMenuBar; + BMenuItem* fNextTitleMI; + BMenuItem* fPrevTitleMI; + BMenuItem* fNextChapterMI; + BMenuItem* fPrevChapterMI; + BMenuItem* fOnTopMI; + BMenuItem* fSlowerMI; + BMenuItem* fNormalMI; + BMenuItem* fFasterMI; + BMenu* fAudioMenu; + BMenu* fNavigationMenu; + BMenu* fTitleMenu; + BMenu* fChapterMenu; + BMenu* fLanguageMenu; + BMenu* fSubtitlesMenu; + BMenu* fSpeedMenu; + BMenu* fShowMenu; + bigtime_t fLastUpdateTime; + + VlcWrapper * p_wrapper; }; -#endif // BEOS_INTERFACE_WINDOW_H +#endif // BEOS_INTERFACE_WINDOW_H diff --git a/modules/gui/beos/MessagesWindow.cpp b/modules/gui/beos/MessagesWindow.cpp new file mode 100644 index 0000000000..2fbb786a50 --- /dev/null +++ b/modules/gui/beos/MessagesWindow.cpp @@ -0,0 +1,150 @@ +/***************************************************************************** + * MessagesWindow.cpp: beos interface + ***************************************************************************** + * Copyright (C) 1999, 2000, 2001 VideoLAN + * $Id: MessagesWindow.cpp,v 1.1 2003/01/25 20:15:41 titer Exp $ + * + * Authors: Eric Petit + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +/* BeOS headers */ +#include + +/* VLC headers */ +#include +#include + +/* BeOS module headers */ +#include "VlcWrapper.h" +#include "MessagesWindow.h" + +/***************************************************************************** + * MessagesWindow::MessagesWindow + *****************************************************************************/ +MessagesWindow::MessagesWindow( intf_thread_t * p_intf, + BRect frame, const char * name ) + : BWindow( frame, name, B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, + B_NOT_ZOOMABLE ) +{ + this->p_intf = p_intf; + p_sub = p_intf->p_sys->p_sub; + + BRect rect, rect2; + + rect = Bounds(); + rect.right -= B_V_SCROLL_BAR_WIDTH; + rect.bottom -= B_H_SCROLL_BAR_HEIGHT; + rect2 = rect; + rect2.InsetBy( 5, 5 ); + fMessagesView = new BTextView( rect, "messages", rect2, + B_FOLLOW_ALL, B_WILL_DRAW ); + fMessagesView->MakeEditable( false ); + fScrollView = new BScrollView( "scrollview", fMessagesView, B_WILL_DRAW, + B_FOLLOW_ALL, true, true ); + fScrollBar = fScrollView->ScrollBar( B_VERTICAL ); + AddChild( fScrollView ); + + /* start window thread in hidden state */ + Hide(); + Show(); +} + +/***************************************************************************** + * MessagesWindow::~MessagesWindow + *****************************************************************************/ +MessagesWindow::~MessagesWindow() +{ +} + +/***************************************************************************** + * MessagesWindow::QuitRequested + *****************************************************************************/ +bool MessagesWindow::QuitRequested() +{ + Hide(); + return false; +} + +/***************************************************************************** + * MessagesWindow::ReallyQuit + *****************************************************************************/ +void MessagesWindow::ReallyQuit() +{ + Hide(); + Quit(); +} + +/***************************************************************************** + * MessagesWindow::UpdateMessages + *****************************************************************************/ +void MessagesWindow::UpdateMessages() +{ + int i_start; + + vlc_mutex_lock( p_sub->p_lock ); + int i_stop = *p_sub->pi_stop; + vlc_mutex_unlock( p_sub->p_lock ); + + if( p_sub->i_start != i_stop ) + { + for( i_start = p_sub->i_start; + i_start != i_stop; + i_start = (i_start+1) % VLC_MSG_QSIZE ) + { + /* Append all messages to log window */ + /* textctrl->SetDefaultStyle( *dbg_attr ); + (*textctrl) << p_sub->p_msg[i_start].psz_module; */ + + /* switch( p_sub->p_msg[i_start].i_type ) + { + case VLC_MSG_INFO: + (*textctrl) << ": "; + textctrl->SetDefaultStyle( *info_attr ); + break; + case VLC_MSG_ERR: + (*textctrl) << " error: "; + textctrl->SetDefaultStyle( *err_attr ); + break; + case VLC_MSG_WARN: + (*textctrl) << " warning: "; + textctrl->SetDefaultStyle( *warn_attr ); + break; + case VLC_MSG_DBG: + default: + (*textctrl) << " debug: "; + break; + } */ + + /* Add message */ + fMessagesView->LockLooper(); + fMessagesView->Insert( p_sub->p_msg[i_start].psz_msg ); + fMessagesView->Insert( "\n" ); + fMessagesView->UnlockLooper(); + + /* Scroll at the end */ + fScrollBar->LockLooper(); + float min, max; + fScrollBar->GetRange( &min, &max ); + fScrollBar->SetValue( max ); + fScrollBar->UnlockLooper(); + } + + vlc_mutex_lock( p_sub->p_lock ); + p_sub->i_start = i_start; + vlc_mutex_unlock( p_sub->p_lock ); + } +} diff --git a/modules/gui/beos/MessagesWindow.h b/modules/gui/beos/MessagesWindow.h new file mode 100644 index 0000000000..66693b96e9 --- /dev/null +++ b/modules/gui/beos/MessagesWindow.h @@ -0,0 +1,51 @@ +/***************************************************************************** + * MessagesWindow.h + ***************************************************************************** + * Copyright (C) 1999, 2000, 2001 VideoLAN + * $Id: MessagesWindow.h,v 1.1 2003/01/25 20:15:41 titer Exp $ + * + * Authors: Eric Petit + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +#ifndef BEOS_MESSAGES_WINDOW_H +#define BEOS_MESSAGES_WINDOW_H + +#include + +class MessagesWindow : public BWindow +{ + public: + MessagesWindow( intf_thread_t * p_intf, + BRect frame, const char * name ); + virtual ~MessagesWindow(); + virtual bool QuitRequested(); + + void ReallyQuit(); + void UpdateMessages(); + + private: + intf_thread_t * p_intf; + msg_subscription_t * p_sub; + + BView * fBackgroundView; + BTextView * fMessagesView; + BScrollView * fScrollView; + BScrollBar * fScrollBar; +}; + +#endif // BEOS_PREFERENCES_WINDOW_H + diff --git a/modules/gui/beos/Modules.am b/modules/gui/beos/Modules.am index e4cd1da08f..72902af872 100644 --- a/modules/gui/beos/Modules.am +++ b/modules/gui/beos/Modules.am @@ -15,6 +15,8 @@ SOURCES_beos = \ modules/gui/beos/PlayListWindow.h \ modules/gui/beos/PreferencesWindow.cpp \ modules/gui/beos/PreferencesWindow.h \ + modules/gui/beos/MessagesWindow.cpp \ + modules/gui/beos/MessagesWindow.h \ modules/gui/beos/MediaControlView.cpp \ modules/gui/beos/MediaControlView.h \ modules/gui/beos/VlcWrapper.cpp \ diff --git a/modules/gui/beos/MsgVals.h b/modules/gui/beos/MsgVals.h index 227d0714ce..c62b87948f 100644 --- a/modules/gui/beos/MsgVals.h +++ b/modules/gui/beos/MsgVals.h @@ -2,7 +2,7 @@ * MsgVals.h ***************************************************************************** * Copyright (C) 2001 VideoLAN - * $Id: MsgVals.h,v 1.4 2003/01/14 14:48:55 titer Exp $ + * $Id: MsgVals.h,v 1.5 2003/01/25 20:15:41 titer Exp $ * * Authors: Tony Castley * Stephan Aßmus @@ -25,47 +25,48 @@ #ifndef BEOS_MESSAGE_VALUES_H #define BEOS_MESSAGE_VALUES_H -#define PLAYING 0 -#define PAUSED 1 +#define PLAYING 0 +#define PAUSED 1 -const uint32 OPEN_FILE = 'opfl'; -const uint32 OPEN_DVD = 'opdv'; +const uint32 OPEN_FILE = 'opfl'; +const uint32 OPEN_DVD = 'opdv'; const uint32 LOAD_SUBFILE = 'losu'; const uint32 SUBFILE_RECEIVED = 'sure'; -const uint32 OPEN_PLAYLIST = 'oppl'; -const uint32 STOP_PLAYBACK = 'stpl'; -const uint32 START_PLAYBACK = 'play'; -const uint32 PAUSE_PLAYBACK = 'papl'; -const uint32 FASTER_PLAY = 'fapl'; -const uint32 SLOWER_PLAY = 'slpl'; -const uint32 NORMAL_PLAY = 'nrpl'; -const uint32 SEEK_PLAYBACK = 'seek'; -const uint32 VOLUME_CHG = 'voch'; -const uint32 VOLUME_MUTE = 'mute'; -const uint32 SELECT_CHANNEL = 'chan'; -const uint32 SELECT_SUBTITLE = 'subt'; -const uint32 PREV_TITLE = 'prti'; -const uint32 NEXT_TITLE = 'nxti'; -const uint32 TOGGLE_TITLE = 'tgti'; -const uint32 PREV_CHAPTER = 'prch'; -const uint32 NEXT_CHAPTER = 'nxch'; -const uint32 TOGGLE_CHAPTER = 'tgch'; -const uint32 PREV_FILE = 'prfl'; -const uint32 NEXT_FILE = 'nxfl'; -const uint32 NAVIGATE_PREV = 'navp'; // could be chapter, title or file -const uint32 NAVIGATE_NEXT = 'navn'; // could be chapter, title or file -const uint32 OPEN_PREFERENCES = 'pref'; -const uint32 TOGGLE_ON_TOP = 'ontp'; -const uint32 TOGGLE_FULL_SCREEN = 'tgfs'; -const uint32 RESIZE_50 = 'rshl'; -const uint32 RESIZE_100 = 'rsor'; -const uint32 RESIZE_200 = 'rsdb'; -const uint32 RESIZE_TRUE = 'rstr'; -const uint32 ASPECT_CORRECT = 'asco'; -const uint32 VERT_SYNC = 'vsyn'; -const uint32 WINDOW_FEEL = 'wfel'; -const uint32 SCREEN_SHOT = 'scrn'; -const uint32 INTERFACE_CREATED = 'ifcr'; /* see VlcApplication::MessageReceived() +const uint32 OPEN_PLAYLIST = 'oppl'; +const uint32 STOP_PLAYBACK = 'stpl'; +const uint32 START_PLAYBACK = 'play'; +const uint32 PAUSE_PLAYBACK = 'papl'; +const uint32 FASTER_PLAY = 'fapl'; +const uint32 SLOWER_PLAY = 'slpl'; +const uint32 NORMAL_PLAY = 'nrpl'; +const uint32 SEEK_PLAYBACK = 'seek'; +const uint32 VOLUME_CHG = 'voch'; +const uint32 VOLUME_MUTE = 'mute'; +const uint32 SELECT_CHANNEL = 'chan'; +const uint32 SELECT_SUBTITLE = 'subt'; +const uint32 PREV_TITLE = 'prti'; +const uint32 NEXT_TITLE = 'nxti'; +const uint32 TOGGLE_TITLE = 'tgti'; +const uint32 PREV_CHAPTER = 'prch'; +const uint32 NEXT_CHAPTER = 'nxch'; +const uint32 TOGGLE_CHAPTER = 'tgch'; +const uint32 PREV_FILE = 'prfl'; +const uint32 NEXT_FILE = 'nxfl'; +const uint32 NAVIGATE_PREV = 'navp'; // could be chapter, title or file +const uint32 NAVIGATE_NEXT = 'navn'; // could be chapter, title or file +const uint32 OPEN_PREFERENCES = 'pref'; +const uint32 OPEN_MESSAGES = 'mess'; +const uint32 TOGGLE_ON_TOP = 'ontp'; +const uint32 TOGGLE_FULL_SCREEN = 'tgfs'; +const uint32 RESIZE_50 = 'rshl'; +const uint32 RESIZE_100 = 'rsor'; +const uint32 RESIZE_200 = 'rsdb'; +const uint32 RESIZE_TRUE = 'rstr'; +const uint32 ASPECT_CORRECT = 'asco'; +const uint32 VERT_SYNC = 'vsyn'; +const uint32 WINDOW_FEEL = 'wfel'; +const uint32 SCREEN_SHOT = 'scrn'; +const uint32 INTERFACE_CREATED = 'ifcr'; /* see VlcApplication::MessageReceived() * in src/misc/beos_specific.cpp */ -#endif // BEOS_MESSAGE_VALUES_H +#endif // BEOS_MESSAGE_VALUES_H diff --git a/modules/gui/beos/PreferencesWindow.cpp b/modules/gui/beos/PreferencesWindow.cpp index 7705a39eba..93d0955c29 100644 --- a/modules/gui/beos/PreferencesWindow.cpp +++ b/modules/gui/beos/PreferencesWindow.cpp @@ -2,7 +2,7 @@ * PreferencesWindow.cpp: beos interface ***************************************************************************** * Copyright (C) 1999, 2000, 2001 VideoLAN - * $Id: PreferencesWindow.cpp,v 1.8 2003/01/17 18:19:43 titer Exp $ + * $Id: PreferencesWindow.cpp,v 1.9 2003/01/25 20:15:41 titer Exp $ * * Authors: Eric Petit * @@ -37,12 +37,12 @@ /***************************************************************************** * Preferences::PreferencesWindow *****************************************************************************/ -PreferencesWindow::PreferencesWindow( BRect frame, const char* name, - intf_thread_t *p_interface ) - : BWindow( frame, name, B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, - B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_NOT_CLOSABLE ) +PreferencesWindow::PreferencesWindow( intf_thread_t * p_intf, + BRect frame, const char * name ) + : BWindow( frame, name, B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, + B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_NOT_CLOSABLE ) { - p_intf = p_interface; + this->p_intf = p_intf; BRect rect; /* "background" view */ @@ -132,8 +132,6 @@ PreferencesWindow::PreferencesWindow( BRect frame, const char* name, rect.top = rect.bottom - 10; fRestartString = new BStringView( rect, NULL, "Warning: changing settings after starting playback may have no effect." ); - /*rgb_color redColor = {255, 0, 0, 255}; - fRestartString->SetHighColor(redColor);*/ fRestartString->SetAlignment( B_ALIGN_CENTER ); fPrefsView->AddChild( fRestartString ); @@ -154,9 +152,9 @@ PreferencesWindow::PreferencesWindow( BRect frame, const char* name, button = new BButton( rect, NULL, "Defaults", new BMessage( PREFS_DEFAULTS ) ); fPrefsView->AddChild( button ); - // start window thread in hidden state - Hide(); - Show(); + // start window thread in hidden state + Hide(); + Show(); } /***************************************************************************** @@ -171,36 +169,36 @@ PreferencesWindow::~PreferencesWindow() *****************************************************************************/ void PreferencesWindow::MessageReceived( BMessage * p_message ) { - switch ( p_message->what ) - { - case DVDOLD_CHECK: - case SLIDER_UPDATE: - { - ApplyChanges(); - break; - } - case PREFS_DEFAULTS: - { - SetDefaults(); + switch ( p_message->what ) + { + case DVDOLD_CHECK: + case SLIDER_UPDATE: + { + ApplyChanges(); + break; + } + case PREFS_DEFAULTS: + { + SetDefaults(); ApplyChanges(); - break; - } - case PREFS_SAVE: - { - config_SaveConfigFile( p_intf, "main" ); - config_SaveConfigFile( p_intf, "adjust" ); - config_SaveConfigFile( p_intf, "ffmpeg" ); - break; - } - case PREFS_OK: - { + break; + } + case PREFS_SAVE: + { + config_SaveConfigFile( p_intf, "main" ); + config_SaveConfigFile( p_intf, "adjust" ); + config_SaveConfigFile( p_intf, "ffmpeg" ); + break; + } + case PREFS_OK: + { Hide(); break; - } - default: - BWindow::MessageReceived( p_message ); - break; - } + } + default: + BWindow::MessageReceived( p_message ); + break; + } } /***************************************************************************** diff --git a/modules/gui/beos/PreferencesWindow.h b/modules/gui/beos/PreferencesWindow.h index e0762f875c..86c812cc06 100644 --- a/modules/gui/beos/PreferencesWindow.h +++ b/modules/gui/beos/PreferencesWindow.h @@ -2,7 +2,7 @@ * PreferencesWindow.h ***************************************************************************** * Copyright (C) 1999, 2000, 2001 VideoLAN - * $Id: PreferencesWindow.h,v 1.6 2003/01/17 18:19:43 titer Exp $ + * $Id: PreferencesWindow.h,v 1.7 2003/01/25 20:15:41 titer Exp $ * * Authors: Eric Petit * @@ -38,9 +38,9 @@ class PreferencesWindow : public BWindow { public: - PreferencesWindow( BRect frame, - const char* name, - intf_thread_t *p_interface ); + PreferencesWindow( intf_thread_t * p_intf, + BRect frame, + const char * name ); virtual ~PreferencesWindow(); virtual void MessageReceived(BMessage *message); void ReallyQuit(); @@ -65,5 +65,5 @@ class PreferencesWindow : public BWindow intf_thread_t * p_intf; }; -#endif // BEOS_PREFERENCES_WINDOW_H +#endif // BEOS_PREFERENCES_WINDOW_H diff --git a/modules/gui/beos/VlcWrapper.h b/modules/gui/beos/VlcWrapper.h index d5596a29ef..e966a15f56 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.15 2003/01/22 01:13:22 titer Exp $ + * $Id: VlcWrapper.h,v 1.16 2003/01/25 20:15:41 titer Exp $ * * Authors: Florian G. Pflug * Jon Lech Johansen @@ -35,16 +35,18 @@ class VlcWrapper; *****************************************************************************/ struct intf_sys_t { - InterfaceWindow * p_window; + msg_subscription_t * p_sub; + + InterfaceWindow * p_window; - vlc_bool_t b_loop; - vlc_bool_t b_mute; - int i_part; - audio_volume_t i_saved_volume; - int i_channel; - bool b_dvdold; + vlc_bool_t b_loop; + vlc_bool_t b_mute; + int i_part; + audio_volume_t i_saved_volume; + int i_channel; + bool b_dvdold; - VlcWrapper * p_wrapper; + VlcWrapper * p_wrapper; }; /***************************************************************************** @@ -94,8 +96,8 @@ public: void PlaylistJumpTo( int ); void GetNavCapabilities( bool * canSkipPrev, bool * canSkipNext ); - void NavigatePrev(); - void NavigateNext(); + void NavigatePrev(); + void NavigateNext(); /* Audio */ bool HasAudio(); @@ -124,8 +126,8 @@ public: void LoadSubFile( char * psz_file ); private: - intf_thread_t * p_intf; - input_thread_t * p_input; - playlist_t * p_playlist; + intf_thread_t * p_intf; + input_thread_t * p_input; + playlist_t * p_playlist; aout_instance_t * p_aout; };