📄 interfacewindow.cpp
字号:
fNavigationMenu->SetEnabled( hasFile ); if ( fLanguageMenu->IsEnabled() != hasFile ) fLanguageMenu->SetEnabled( hasFile ); if ( fSubtitlesMenu->IsEnabled() != hasFile ) fSubtitlesMenu->SetEnabled( hasFile ); if ( fSpeedMenu->IsEnabled() != hasFile ) fSpeedMenu->SetEnabled( hasFile ); // "goto menu" menu item bool hasMenu = p_wrapper->IsUsingMenus(); if ( fGotoMenuMI->IsEnabled() != hasMenu ) fGotoMenuMI->SetEnabled( hasMenu ); Unlock(); }}/***************************************************************************** * InterfaceWindow::_UpdateSpeedMenu *****************************************************************************/voidInterfaceWindow::_UpdateSpeedMenu( int rate ){ BMenuItem * toMark = NULL; switch( rate ) { case ( DEFAULT_RATE * 8 ): toMark = fHeighthMI; break; case ( DEFAULT_RATE * 4 ): toMark = fQuarterMI; break; case ( DEFAULT_RATE * 2 ): toMark = fHalfMI; break; case ( DEFAULT_RATE ): toMark = fNormalMI; break; case ( DEFAULT_RATE / 2 ): toMark = fTwiceMI; break; case ( DEFAULT_RATE / 4 ): toMark = fFourMI; break; case ( DEFAULT_RATE / 8 ): toMark = fHeightMI; break; } if ( !toMark->IsMarked() ) toMark->SetMarked( true );}/***************************************************************************** * InterfaceWindow::_ShowFilePanel *****************************************************************************/voidInterfaceWindow::_ShowFilePanel( uint32 command, const char* windowTitle ){ if( !fFilePanel ) { fFilePanel = new BFilePanel( B_OPEN_PANEL, NULL, NULL, B_FILE_NODE | B_DIRECTORY_NODE ); fFilePanel->SetTarget( this ); } fFilePanel->Window()->SetTitle( windowTitle ); BMessage message( command ); fFilePanel->SetMessage( &message ); if ( !fFilePanel->IsShowing() ) { fFilePanel->Refresh(); fFilePanel->Show(); }}// set_window_posvoidset_window_pos( BWindow* window, BRect frame ){ // sanity checks: make sure window is not too big/small // and that it's not off-screen float minWidth, maxWidth, minHeight, maxHeight; window->GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight ); make_sure_frame_is_within_limits( frame, minWidth, minHeight, maxWidth, maxHeight ); if ( make_sure_frame_is_on_screen( frame ) ) { window->MoveTo( frame.LeftTop() ); window->ResizeTo( frame.Width(), frame.Height() ); }}// set_window_posvoidlaunch_window( BWindow* window, bool showing ){ if ( window->Lock() ) { if ( showing ) { if ( window->IsHidden() ) window->Show(); } else { if ( !window->IsHidden() ) window->Hide(); } window->Unlock(); }}/***************************************************************************** * InterfaceWindow::_RestoreSettings *****************************************************************************/voidInterfaceWindow::_RestoreSettings(){ 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 ) { /* FIXME: Preferences resizing doesn't work correctly yet */ frame.right = frame.left + fPreferencesWindow->Frame().Width(); frame.bottom = frame.top + fPreferencesWindow->Frame().Height(); 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 ); }}/***************************************************************************** * InterfaceWindow::_StoreSettings *****************************************************************************/voidInterfaceWindow::_StoreSettings(){ /* Save the volume */ config_PutInt( p_intf, "volume", p_mediaControl->GetVolume() ); config_SaveConfigFile( p_intf, "main" ); /* Save the windows positions */ 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" );}/***************************************************************************** * CDMenu::CDMenu *****************************************************************************/CDMenu::CDMenu(const char *name) : BMenu(name){}/***************************************************************************** * CDMenu::~CDMenu *****************************************************************************/CDMenu::~CDMenu(){}/***************************************************************************** * CDMenu::AttachedToWindow *****************************************************************************/void CDMenu::AttachedToWindow(void){ // remove all items while ( BMenuItem* item = RemoveItem( 0L ) ) delete item; GetCD( "/dev/disk" ); BMenu::AttachedToWindow();}/***************************************************************************** * CDMenu::GetCD *****************************************************************************/int CDMenu::GetCD( const char *directory ){ BVolumeRoster volRoster; BVolume vol; BDirectory dir; status_t status = volRoster.GetNextVolume( &vol ); while ( status == B_NO_ERROR ) { BString deviceName; BString volumeName; bool isCDROM; if ( get_volume_info( vol, volumeName, isCDROM, deviceName ) && isCDROM ) { BMessage* msg = new BMessage( OPEN_DVD ); msg->AddString( "device", deviceName.String() ); BMenuItem* item = new BMenuItem( volumeName.String(), msg ); AddItem( item ); } vol.Unset(); status = volRoster.GetNextVolume( &vol ); } return 0;}/***************************************************************************** * LanguageMenu::LanguageMenu *****************************************************************************/LanguageMenu::LanguageMenu( const char *name, int menu_kind, VlcWrapper *p_wrapper ) :BMenu(name){ kind = menu_kind; this->p_wrapper = p_wrapper;}/***************************************************************************** * LanguageMenu::~LanguageMenu *****************************************************************************/LanguageMenu::~LanguageMenu(){}/***************************************************************************** * LanguageMenu::AttachedToWindow *****************************************************************************/void LanguageMenu::AttachedToWindow(){ // remove all items while ( BMenuItem* item = RemoveItem( 0L ) ) delete item; SetRadioMode( true ); if ( BList *list = p_wrapper->GetChannels( kind ) ) { for ( int32 i = 0; BMenuItem* item = (BMenuItem*)list->ItemAt( i ); i++ ) AddItem( item ); if ( list->CountItems() > 1 ) AddItem( new BSeparatorItem(), 1 ); } BMenu::AttachedToWindow();}/***************************************************************************** * TitleMenu::TitleMenu *****************************************************************************/TitleMenu::TitleMenu( const char *name, intf_thread_t *p_interface ) : BMenu(name), p_intf( p_interface ){}/***************************************************************************** * TitleMenu::~TitleMenu *****************************************************************************/TitleMenu::~TitleMenu(){}/***************************************************************************** * TitleMenu::AttachedToWindow *****************************************************************************/void TitleMenu::AttachedToWindow(){ while( BMenuItem* item = RemoveItem( 0L ) ) delete item; if ( BList *list = p_intf->p_sys->p_wrapper->GetTitles() ) { for( int i = 0; BMenuItem* item = (BMenuItem*)list->ItemAt( i ); i++ ) AddItem( item ); } BMenu::AttachedToWindow();}/***************************************************************************** * ChapterMenu::ChapterMenu *****************************************************************************/ChapterMenu::ChapterMenu( const char *name, intf_thread_t *p_interface ) : BMenu(name), p_intf( p_interface ){}/***************************************************************************** * ChapterMenu::~ChapterMenu *****************************************************************************/ChapterMenu::~ChapterMenu(){}/***************************************************************************** * ChapterMenu::AttachedToWindow *****************************************************************************/void ChapterMenu::AttachedToWindow(){ while( BMenuItem* item = RemoveItem( 0L ) ) delete item; if ( BList* list = p_intf->p_sys->p_wrapper->GetChapters() ) { for( int i = 0; BMenuItem* item = (BMenuItem*)list->ItemAt( i ); i++ ) AddItem( item ); } BMenu::AttachedToWindow();}/***************************************************************************** * load_settings *****************************************************************************/status_tload_settings( 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;}/***************************************************************************** * save_settings *****************************************************************************/status_tsave_settings( 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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -