* InterfaceWindow.cpp: beos interface
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: InterfaceWindow.cpp,v 1.28 2003/02/09 11:51:36 titer Exp $
+ * $Id: InterfaceWindow.cpp,v 1.32 2003/04/18 15:25:50 titer Exp $
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
#define INTERFACE_UPDATE_TIMEOUT 80000 // 2 frames if at 25 fps
#define INTERFACE_LOCKING_TIMEOUT 5000
+#define USE_VLC_CONFIG_FILE 0
// make_sure_frame_is_on_screen
bool
( screen_rect.bottom - PREFS_WINDOW_HEIGHT ) / 2,
( screen_rect.right + PREFS_WINDOW_WIDTH ) / 2,
( screen_rect.bottom + PREFS_WINDOW_HEIGHT ) / 2 );
- fPreferencesWindow = new PreferencesWindow( p_intf, window_rect, "Preferences" );
+ fPreferencesWindow = new PreferencesWindow( p_intf, window_rect, "Settings" );
window_rect.Set( screen_rect.right - 500,
screen_rect.top + 50,
screen_rect.right - 150,
// 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 ),
AddChild( p_mediaControl );
// Add the file Menu
- BMenu* fileMenu = new BMenu( "File" );
+ BMenu* fileMenu = new BMenu( _("File") );
fMenuBar->AddItem( fileMenu );
fileMenu->AddItem( new BMenuItem( "Open File" B_UTF8_ELLIPSIS,
new BMessage( OPEN_FILE ), 'O') );
fSubtitlesMenu = new LanguageMenu("Subtitles", SPU_ES, p_wrapper);
/* Add the Audio menu */
- fAudioMenu = new BMenu( "Audio" );
+ fAudioMenu = new BMenu( _("Audio") );
fMenuBar->AddItem ( fAudioMenu );
fAudioMenu->AddItem( fLanguageMenu );
fAudioMenu->AddItem( fSubtitlesMenu );
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 ) );
+ fGotoMenuMI = new BMenuItem( "Goto Menu", new BMessage( NAVIGATE_MENU ) );
/* Add the Navigation menu */
- fNavigationMenu = new BMenu( "Navigation" );
+ fNavigationMenu = new BMenu( _("Navigation") );
fMenuBar->AddItem( fNavigationMenu );
+ fNavigationMenu->AddItem( fGotoMenuMI );
+ fNavigationMenu->AddSeparatorItem();
fNavigationMenu->AddItem( fPrevTitleMI );
fNavigationMenu->AddItem( fNextTitleMI );
fNavigationMenu->AddItem( fTitleMenu = new TitleMenu( "Go to Title", p_intf ) );
fNavigationMenu->AddItem( fChapterMenu = new ChapterMenu( "Go to Chapter", p_intf ) );
/* Add the Speed menu */
- fSpeedMenu = new BMenu( "Speed" );
+ 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 ) );
fMenuBar->AddItem( fSpeedMenu );
/* Add the Show menu */
- fShowMenu = new BMenu( "Window" );
+ fShowMenu = new BMenu( _("Window") );
fShowMenu->AddItem( new BMenuItem( "Play List" B_UTF8_ELLIPSIS,
new BMessage( OPEN_PLAYLIST ), 'P') );
fShowMenu->AddItem( new BMenuItem( "Messages" B_UTF8_ELLIPSIS,
_SetMenusEnabled( false );
p_mediaControl->SetEnabled( false );
- _RestoreSettings();
-
-/* // Restore interface settings
- // main window size and position
- int i_width = config_GetInt( p_intf, "beos-intf-width" ),
- i_height = config_GetInt( p_intf, "beos-intf-height" ),
- i_xpos = config_GetInt( p_intf, "beos-intf-xpos" ),
- i_ypos = config_GetInt( p_intf, "beos-intf-ypos" );
- if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
- {
- BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
-
- float minWidth, maxWidth, minHeight, maxHeight;
- GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight );
-
- make_sure_frame_is_within_limits( r, minWidth, minHeight, maxWidth, maxHeight );
- if ( make_sure_frame_is_on_screen( r ) )
- {
- ResizeTo( r.Width(), r.Height() );
- MoveTo( r.LeftTop() );
- }
- }
- // playlist window size and position
- i_width = config_GetInt( p_intf, "beos-playlist-width" ),
- i_height = config_GetInt( p_intf, "beos-playlist-height" ),
- i_xpos = config_GetInt( p_intf, "beos-playlist-xpos" ),
- i_ypos = config_GetInt( p_intf, "beos-playlist-ypos" );
- if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
- {
- BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
-
- float minWidth, maxWidth, minHeight, maxHeight;
- fPlaylistWindow->GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight );
-
- make_sure_frame_is_within_limits( r, minWidth, minHeight, maxWidth, maxHeight );
- if ( make_sure_frame_is_on_screen( r ) )
- {
- fPlaylistWindow->ResizeTo( r.Width(), r.Height() );
- fPlaylistWindow->MoveTo( r.LeftTop() );
- }
- }
- // child windows are not running yet, that's why we aint locking them
- // playlist showing
- // messages window size and position
- i_width = config_GetInt( p_intf, "beos-messages-width" ),
- i_height = config_GetInt( p_intf, "beos-messages-height" ),
- i_xpos = config_GetInt( p_intf, "beos-messages-xpos" ),
- i_ypos = config_GetInt( p_intf, "beos-messages-ypos" );
- if( i_width && i_height && i_xpos && i_ypos )
- {
- BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
+ _RestoreSettings();
- float minWidth, maxWidth, minHeight, maxHeight;
- fMessagesWindow->GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight );
-
- make_sure_frame_is_within_limits( r, minWidth, minHeight, maxWidth, maxHeight );
- if ( make_sure_frame_is_on_screen( r ) )
- {
- fMessagesWindow->ResizeTo( r.Width(), r.Height() );
- fMessagesWindow->MoveTo( r.LeftTop() );
- }
- }
- if( config_GetInt( p_intf, "beos-playlist-show" ) )
- {
- fPlaylistWindow->Show();
- }
- else
- {
- fPlaylistWindow->Hide();
- fPlaylistWindow->Show();
- }
- // messages window size and position
- i_width = config_GetInt( p_intf, "beos-messages-width" ),
- i_height = config_GetInt( p_intf, "beos-messages-height" ),
- i_xpos = config_GetInt( p_intf, "beos-messages-xpos" ),
- i_ypos = config_GetInt( p_intf, "beos-messages-ypos" );
- if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
- {
- BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
- float minWidth, maxWidth, minHeight, maxHeight;
- fMessagesWindow->GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight );
-
- make_sure_frame_is_within_limits( r, minWidth, minHeight, maxWidth, maxHeight );
- if ( make_sure_frame_is_on_screen( r ) )
- {
- fMessagesWindow->ResizeTo( r.Width(), r.Height() );
- fMessagesWindow->MoveTo( r.LeftTop() );
- }
- }
- // messages showing
- if( config_GetInt( p_intf, "beos-messages-show" ) )
- {
- fMessagesWindow->Show();
- }
- else
- {
- fMessagesWindow->Hide();
- fMessagesWindow->Show();
- }*/
-
Show();
}
if( fMessagesWindow )
fMessagesWindow->ReallyQuit();
fMessagesWindow = NULL;
+ if( fPreferencesWindow )
+ fPreferencesWindow->ReallyQuit();
+ fPreferencesWindow = NULL;
delete fFilePanel;
delete fSettings;
}
{
case B_ABOUT_REQUESTED:
{
- BAlert* alert = new BAlert( VOUT_TITLE,
- "BeOS " VOUT_TITLE "\n\n<www.videolan.org>", "Ok");
+ BAlert* alert = new BAlert( "VLC " PACKAGE_VERSION,
+ "VLC " PACKAGE_VERSION " for BeOS\n\n"
+ "<www.videolan.org>", "OK");
alert->Go();
break;
}
p_wrapper->NextTitle();
break;
}
+ case NAVIGATE_MENU:
+ p_wrapper->ToggleTitle( 0 );
+ break;
case TOGGLE_TITLE:
if ( playback_status > UNDEF_S )
{
p_wrapper->PlaylistStop();
p_mediaControl->SetStatus(NOT_STARTED_S, DEFAULT_RATE);
- /* Save interface settings */
-/* BRect frame = Frame();
- config_PutInt( p_intf, "beos-intf-width", (int)frame.Width() );
- config_PutInt( p_intf, "beos-intf-height", (int)frame.Height() );
- config_PutInt( p_intf, "beos-intf-xpos", (int)frame.left );
- config_PutInt( p_intf, "beos-intf-ypos", (int)frame.top );
- if( fPlaylistWindow->Lock() )
- {
- frame = fPlaylistWindow->Frame();
- config_PutInt( p_intf, "beos-playlist-width", (int)frame.Width() );
- config_PutInt( p_intf, "beos-playlist-height", (int)frame.Height() );
- config_PutInt( p_intf, "beos-playlist-xpos", (int)frame.left );
- config_PutInt( p_intf, "beos-playlist-ypos", (int)frame.top );
- config_PutInt( p_intf, "beos-playlist-show", !fPlaylistWindow->IsHidden() );
- fPlaylistWindow->Unlock();
- }
- if( fMessagesWindow->Lock() )
- {
- frame = fMessagesWindow->Frame();
- config_PutInt( p_intf, "beos-messages-width", (int)frame.Width() );
- config_PutInt( p_intf, "beos-messages-height", (int)frame.Height() );
- config_PutInt( p_intf, "beos-messages-xpos", (int)frame.left );
- config_PutInt( p_intf, "beos-messages-ypos", (int)frame.top );
- config_PutInt( p_intf, "beos-messages-show", !fMessagesWindow->IsHidden() );
- fMessagesWindow->Unlock();
- }*/
- config_SaveConfigFile( p_intf, "beos" );
_StoreSettings();
p_intf->b_die = 1;
}
}
- // strangly, someone is calling this function even after the object has been destructed!
- // even more strangly, this workarround seems to work
- if (fMessagesWindow)
- fMessagesWindow->UpdateMessages();
-
fLastUpdateTime = system_time();
}
fSubtitlesMenu->SetEnabled( hasFile );
if ( fSpeedMenu->IsEnabled() != hasFile )
fSpeedMenu->SetEnabled( hasFile );
+ // "goto menu" menu item
+ bool hasMenu = p_intf->p_sys->b_dvdmenus ? hasTitles : false;
+ if ( fGotoMenuMI->IsEnabled() != hasMenu )
+ fGotoMenuMI->SetEnabled( hasMenu );
Unlock();
}
}
void
InterfaceWindow::_RestoreSettings()
{
- if ( load_settings( fSettings, "interface_settings", "VideoLAN Client" ) == B_OK )
+ if ( USE_VLC_CONFIG_FILE )
{
- BRect frame;
- if ( fSettings->FindRect( "main frame", &frame ) == B_OK )
- set_window_pos( this, frame );
- if (fSettings->FindRect( "playlist frame", &frame ) == B_OK )
- set_window_pos( fPlaylistWindow, frame );
- if (fSettings->FindRect( "messages frame", &frame ) == B_OK )
- set_window_pos( fMessagesWindow, frame );
- if (fSettings->FindRect( "settings frame", &frame ) == B_OK )
- set_window_pos( fPreferencesWindow, frame );
-
- bool showing;
- if ( fSettings->FindBool( "playlist showing", &showing ) == B_OK )
- launch_window( fPlaylistWindow, showing );
- if ( fSettings->FindBool( "messages showing", &showing ) == B_OK )
- launch_window( fMessagesWindow, showing );
- if ( fSettings->FindBool( "settings showing", &showing ) == B_OK )
- launch_window( fPreferencesWindow, showing );
-
- uint32 displayMode;
- if ( fSettings->FindInt32( "playlist display mode", (int32*)&displayMode ) == B_OK )
- fPlaylistWindow->SetDisplayMode( displayMode );
+ // main window size and position
+ int i_width = config_GetInt( p_intf, "beos-intf-width" ),
+ i_height = config_GetInt( p_intf, "beos-intf-height" ),
+ i_xpos = config_GetInt( p_intf, "beos-intf-xpos" ),
+ i_ypos = config_GetInt( p_intf, "beos-intf-ypos" );
+ if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
+ {
+ BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
+ set_window_pos( this, r );
+ }
+ // playlist window size and position
+ i_width = config_GetInt( p_intf, "beos-playlist-width" ),
+ i_height = config_GetInt( p_intf, "beos-playlist-height" ),
+ i_xpos = config_GetInt( p_intf, "beos-playlist-xpos" ),
+ i_ypos = config_GetInt( p_intf, "beos-playlist-ypos" );
+ if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
+ {
+ BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
+ set_window_pos( fPlaylistWindow, r );
+ }
+ // playlist showing
+ launch_window( fPlaylistWindow, config_GetInt( p_intf, "beos-playlist-show" ) );
+ // messages window size and position
+ i_width = config_GetInt( p_intf, "beos-messages-width" ),
+ i_height = config_GetInt( p_intf, "beos-messages-height" ),
+ i_xpos = config_GetInt( p_intf, "beos-messages-xpos" ),
+ i_ypos = config_GetInt( p_intf, "beos-messages-ypos" );
+ if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
+ {
+ BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
+ set_window_pos( fMessagesWindow, r );
+ }
+ // messages showing
+ launch_window( fMessagesWindow, config_GetInt( p_intf, "beos-messages-show" ) );
+
+ // messages window size and position
+ i_width = config_GetInt( p_intf, "beos-settings-width" ),
+ i_height = config_GetInt( p_intf, "beos-settings-height" ),
+ i_xpos = config_GetInt( p_intf, "beos-settings-xpos" ),
+ i_ypos = config_GetInt( p_intf, "beos-settings-ypos" );
+ if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
+ {
+ BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
+ set_window_pos( fPreferencesWindow, r );
+ }
+ // settings showing
+ launch_window( fPreferencesWindow, config_GetInt( p_intf, "beos-settings-show" ) );
+ }
+ else
+ {
+ if ( load_settings( fSettings, "interface_settings", "VideoLAN Client" ) == B_OK )
+ {
+ BRect frame;
+ if ( fSettings->FindRect( "main frame", &frame ) == B_OK )
+ set_window_pos( this, frame );
+ if (fSettings->FindRect( "playlist frame", &frame ) == B_OK )
+ set_window_pos( fPlaylistWindow, frame );
+ if (fSettings->FindRect( "messages frame", &frame ) == B_OK )
+ set_window_pos( fMessagesWindow, frame );
+ if (fSettings->FindRect( "settings frame", &frame ) == B_OK )
+ set_window_pos( fPreferencesWindow, frame );
+
+ bool showing;
+ if ( fSettings->FindBool( "playlist showing", &showing ) == B_OK )
+ launch_window( fPlaylistWindow, showing );
+ if ( fSettings->FindBool( "messages showing", &showing ) == B_OK )
+ launch_window( fMessagesWindow, showing );
+ if ( fSettings->FindBool( "settings showing", &showing ) == B_OK )
+ launch_window( fPreferencesWindow, showing );
+
+ uint32 displayMode;
+ if ( fSettings->FindInt32( "playlist display mode", (int32*)&displayMode ) == B_OK )
+ fPlaylistWindow->SetDisplayMode( displayMode );
+ }
}
}
void
InterfaceWindow::_StoreSettings()
{
- if ( fSettings->ReplaceRect( "main frame", Frame() ) != B_OK )
- fSettings->AddRect( "main frame", Frame() );
- if ( fPlaylistWindow->Lock() )
+ if ( USE_VLC_CONFIG_FILE )
{
- 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();
+ // save interface settings in vlc config file
+ BRect frame = Frame();
+ config_PutInt( p_intf, "beos-intf-width", (int)frame.Width() );
+ config_PutInt( p_intf, "beos-intf-height", (int)frame.Height() );
+ config_PutInt( p_intf, "beos-intf-xpos", (int)frame.left );
+ config_PutInt( p_intf, "beos-intf-ypos", (int)frame.top );
+ if( fPlaylistWindow->Lock() )
+ {
+ frame = fPlaylistWindow->Frame();
+ config_PutInt( p_intf, "beos-playlist-width", (int)frame.Width() );
+ config_PutInt( p_intf, "beos-playlist-height", (int)frame.Height() );
+ config_PutInt( p_intf, "beos-playlist-xpos", (int)frame.left );
+ config_PutInt( p_intf, "beos-playlist-ypos", (int)frame.top );
+ config_PutInt( p_intf, "beos-playlist-show", !fPlaylistWindow->IsHidden() );
+ fPlaylistWindow->Unlock();
+ }
+ if( fMessagesWindow->Lock() )
+ {
+ frame = fMessagesWindow->Frame();
+ config_PutInt( p_intf, "beos-messages-width", (int)frame.Width() );
+ config_PutInt( p_intf, "beos-messages-height", (int)frame.Height() );
+ config_PutInt( p_intf, "beos-messages-xpos", (int)frame.left );
+ config_PutInt( p_intf, "beos-messages-ypos", (int)frame.top );
+ config_PutInt( p_intf, "beos-messages-show", !fMessagesWindow->IsHidden() );
+ fMessagesWindow->Unlock();
+ }
+ if( fPreferencesWindow->Lock() )
+ {
+ frame = fPreferencesWindow->Frame();
+ config_PutInt( p_intf, "beos-messages-width", (int)frame.Width() );
+ config_PutInt( p_intf, "beos-messages-height", (int)frame.Height() );
+ config_PutInt( p_intf, "beos-messages-xpos", (int)frame.left );
+ config_PutInt( p_intf, "beos-messages-ypos", (int)frame.top );
+ config_PutInt( p_intf, "beos-messages-show", !fPreferencesWindow->IsHidden() );
+ fPreferencesWindow->Unlock();
+ }
}
- if ( fMessagesWindow->Lock() )
- {
- if (fSettings->ReplaceRect( "messages frame", fMessagesWindow->Frame() ) != B_OK)
- fSettings->AddRect( "messages frame", fMessagesWindow->Frame() );
- if (fSettings->ReplaceBool( "messages showing", !fMessagesWindow->IsHidden() ) != B_OK)
- fSettings->AddBool( "messages showing", !fMessagesWindow->IsHidden() );
- fMessagesWindow->Unlock();
- }
- if ( fPreferencesWindow->Lock() )
- {
- if (fSettings->ReplaceRect( "settings frame", fPreferencesWindow->Frame() ) != B_OK)
- fSettings->AddRect( "settings frame", fPreferencesWindow->Frame() );
- if (fSettings->ReplaceBool( "settings showing", !fPreferencesWindow->IsHidden() ) != B_OK)
- fSettings->AddBool( "settings showing", !fPreferencesWindow->IsHidden() );
- fPreferencesWindow->Unlock();
- }
-
- uint32 displayMode = fPlaylistWindow->DisplayMode();
- if (fSettings->ReplaceInt32( "playlist display mode", displayMode ) != B_OK )
- fSettings->AddInt32( "playlist display mode", displayMode );
+ else
+ {
+ 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();
+ }
+ if ( fMessagesWindow->Lock() )
+ {
+ if (fSettings->ReplaceRect( "messages frame", fMessagesWindow->Frame() ) != B_OK)
+ fSettings->AddRect( "messages frame", fMessagesWindow->Frame() );
+ if (fSettings->ReplaceBool( "messages showing", !fMessagesWindow->IsHidden() ) != B_OK)
+ fSettings->AddBool( "messages showing", !fMessagesWindow->IsHidden() );
+ fMessagesWindow->Unlock();
+ }
+ if ( fPreferencesWindow->Lock() )
+ {
+ if (fSettings->ReplaceRect( "settings frame", fPreferencesWindow->Frame() ) != B_OK)
+ fSettings->AddRect( "settings frame", fPreferencesWindow->Frame() );
+ if (fSettings->ReplaceBool( "settings showing", !fPreferencesWindow->IsHidden() ) != B_OK)
+ fSettings->AddBool( "settings showing", !fPreferencesWindow->IsHidden() );
+ fPreferencesWindow->Unlock();
+ }
+ uint32 displayMode = fPlaylistWindow->DisplayMode();
+ if (fSettings->ReplaceInt32( "playlist display mode", displayMode ) != B_OK )
+ fSettings->AddInt32( "playlist display mode", displayMode );
+
+ save_settings( fSettings, "interface_settings", "VideoLAN Client" );
+ }
- save_settings( fSettings, "interface_settings", "VideoLAN Client" );
+ // save VLC internal settings
+ config_SaveConfigFile( p_intf, "beos" );
+ config_SaveConfigFile( p_intf, "main" );
+ config_SaveConfigFile( p_intf, "adjust" );
+ config_SaveConfigFile( p_intf, "ffmpeg" );
}