📄 interface_widgets.cpp
字号:
ABButton->setEnabled( enable ); recordButton->setEnabled( enable ); if( enable && ( i_last_input_id != i_input_id ) ) { timeA = timeB = 0; i_last_input_id = i_input_id; emit timeChanged(); }}void AdvControlsWidget::enableVideo( bool enable ){ snapshotButton->setEnabled( enable );#if 0 frameButton->setEnabled( enable );#endif}void AdvControlsWidget::snapshot(){ vout_thread_t *p_vout = (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); if( p_vout ) { vout_Control( p_vout, VOUT_SNAPSHOT ); vlc_object_release( p_vout ); }}/* Function called when the button is clicked() */void AdvControlsWidget::fromAtoB(){ if( !timeA ) { timeA = var_GetTime( THEMIM->getInput(), "time" ); emit timeChanged(); return; } if( !timeB ) { timeB = var_GetTime( THEMIM->getInput(), "time" ); var_SetTime( THEMIM->getInput(), "time" , timeA ); emit timeChanged(); return; } timeA = 0; timeB = 0; emit timeChanged();}/* setting/synchro icons after click on main or fs controller */void AdvControlsWidget::setIcon(){ if( !timeA && !timeB) { ABButton->setIcon( QIcon( ":/atob_nob" ) ); ABButton->setToolTip( qtr( "Loop from point A to point B continuously\nClick to set point A" ) ); } else if( timeA && !timeB ) { ABButton->setIcon( QIcon( ":/atob_noa" ) ); ABButton->setToolTip( qtr( "Click to set point B" ) ); } else if( timeA && timeB ) { ABButton->setIcon( QIcon( ":/atob" ) ); ABButton->setToolTip( qtr( "Stop the A to B loop" ) ); }}/* Function called regularly when in an AtoB loop */void AdvControlsWidget::AtoBLoop( float f_pos, int i_time, int i_length ){ if( timeB ) { if( ( i_time >= (int)( timeB/1000000 ) ) || ( i_time < (int)( timeA/1000000 ) ) ) var_SetTime( THEMIM->getInput(), "time" , timeA ); }}void AdvControlsWidget::record(){ input_thread_t *p_input = THEMIM->getInput(); if( p_input ) { /* This method won't work fine if the stream can't be cut anywhere */ if( var_Type( p_input, "record-toggle" ) == VLC_VAR_VOID ) var_TriggerCallback( p_input, "record-toggle" );#if 0 else { /* 'record' access-filter is not loaded, we open Save dialog */ input_item_t *p_item = input_GetItem( p_input ); if( !p_item ) return; char *psz = input_item_GetURI( p_item ); if( psz ) THEDP->streamingDialog( NULL, psz, true ); }#endif }}#if 0//FIXME Frame by frame functionvoid AdvControlsWidget::frame(){}#endif/***************************** * DA Control Widget ! *****************************/ControlsWidget::ControlsWidget( intf_thread_t *_p_i, MainInterface *_p_mi, bool b_advControls, bool b_shiny, bool b_fsCreation) : QFrame( _p_mi ), p_intf( _p_i ){ setSizePolicy( QSizePolicy::Preferred , QSizePolicy::Maximum ); /** The main Slider **/ slider = new InputSlider( Qt::Horizontal, NULL ); /* Update the position when the IM has changed */ CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ), slider, setPosition( float, int, int ) ); /* And update the IM, when the position has changed */ CONNECT( slider, sliderDragged( float ), THEMIM->getIM(), sliderUpdate( float ) ); /** Slower and faster Buttons **/ slowerButton = new QToolButton; slowerButton->setAutoRaise( true ); slowerButton->setMaximumSize( QSize( 26, 20 ) ); BUTTON_SET_ACT( slowerButton, "-", qtr( "Slower" ), slower() ); fasterButton = new QToolButton; fasterButton->setAutoRaise( true ); fasterButton->setMaximumSize( QSize( 26, 20 ) ); BUTTON_SET_ACT( fasterButton, "+", qtr( "Faster" ), faster() ); /* advanced Controls handling */ b_advancedVisible = b_advControls; advControls = new AdvControlsWidget( p_intf, b_fsCreation ); if( !b_advancedVisible ) advControls->hide(); /** Disc and Menus handling */ discFrame = new QWidget( this ); QHBoxLayout *discLayout = new QHBoxLayout( discFrame ); discLayout->setSpacing( 0 ); discLayout->setMargin( 0 ); prevSectionButton = new QPushButton( discFrame ); setupSmallButton( prevSectionButton ); discLayout->addWidget( prevSectionButton ); menuButton = new QPushButton( discFrame ); setupSmallButton( menuButton ); discLayout->addWidget( menuButton ); nextSectionButton = new QPushButton( discFrame ); setupSmallButton( nextSectionButton ); discLayout->addWidget( nextSectionButton ); BUTTON_SET_IMG( prevSectionButton, "", dvd_prev, "" ); BUTTON_SET_IMG( nextSectionButton, "", dvd_next, "" ); BUTTON_SET_IMG( menuButton, "", dvd_menu, qtr( "Menu" ) ); discFrame->hide(); /* Change the navigation button display when the IM navigation changes */ CONNECT( THEMIM->getIM(), navigationChanged( int ), this, setNavigation( int ) ); /* Changes the IM navigation when triggered on the nav buttons */ CONNECT( prevSectionButton, clicked(), THEMIM->getIM(), sectionPrev() ); CONNECT( nextSectionButton, clicked(), THEMIM->getIM(), sectionNext() ); CONNECT( menuButton, clicked(), THEMIM->getIM(), sectionMenu() ); /** * Telextext QFrame * TODO: Merge with upper menu in a StackLayout **/ telexFrame = new QWidget( this ); QHBoxLayout *telexLayout = new QHBoxLayout( telexFrame ); telexLayout->setSpacing( 0 ); telexLayout->setMargin( 0 ); telexOn = new QPushButton; setupSmallButton( telexOn ); telexLayout->addWidget( telexOn ); telexTransparent = new QPushButton; setupSmallButton( telexTransparent ); telexLayout->addWidget( telexTransparent ); b_telexTransparent = false; telexPage = new QSpinBox; telexPage->setRange( 0, 999 ); telexPage->setValue( 100 ); telexPage->setAccelerated( true ); telexPage->setWrapping( true ); telexPage->setAlignment( Qt::AlignRight ); telexPage->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum ); telexLayout->addWidget( telexPage ); telexFrame->hide(); /* default hidden */ CONNECT( telexPage, valueChanged( int ), THEMIM->getIM(), telexGotoPage( int ) ); CONNECT( THEMIM->getIM(), setNewTelexPage( int ), telexPage, setValue( int ) ); BUTTON_SET_IMG( telexOn, "", tv, qtr( "Teletext on" ) ); CONNECT( telexOn, clicked(), THEMIM->getIM(), telexToggleButtons() ); CONNECT( telexOn, clicked( bool ), THEMIM->getIM(), telexToggle( bool ) ); CONNECT( THEMIM->getIM(), toggleTelexButtons(), this, toggleTeletext() ); b_telexEnabled = false; telexTransparent->setEnabled( false ); telexPage->setEnabled( false ); BUTTON_SET_IMG( telexTransparent, "", tvtelx, qtr( "Teletext" ) ); CONNECT( telexTransparent, clicked( bool ), THEMIM->getIM(), telexSetTransparency() ); CONNECT( THEMIM->getIM(), toggleTelexTransparency(), this, toggleTeletextTransparency() ); CONNECT( THEMIM->getIM(), teletextEnabled( bool ), this, enableTeletext( bool ) ); /** Play Buttons **/ QSizePolicy sizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); sizePolicy.setHorizontalStretch( 0 ); sizePolicy.setVerticalStretch( 0 ); /* Play */ playButton = new QPushButton; playButton->setSizePolicy( sizePolicy ); playButton->setMaximumSize( QSize( 36, 36 ) ); playButton->setMinimumSize( QSize( 36, 36 ) ); playButton->setIconSize( QSize( 30, 30 ) ); /** Prev + Stop + Next Block **/ controlButLayout = new QHBoxLayout; controlButLayout->setSpacing( 0 ); /* Don't remove that, will be useful */ /* Prev */ QPushButton *prevButton = new QPushButton; prevButton->setSizePolicy( sizePolicy ); setupSmallButton( prevButton ); controlButLayout->addWidget( prevButton ); /* Stop */ QPushButton *stopButton = new QPushButton; stopButton->setSizePolicy( sizePolicy ); setupSmallButton( stopButton ); controlButLayout->addWidget( stopButton ); /* next */ QPushButton *nextButton = new QPushButton; nextButton->setSizePolicy( sizePolicy ); setupSmallButton( nextButton ); controlButLayout->addWidget( nextButton ); /* Add this block to the main layout */ BUTTON_SET_ACT_I( playButton, "", play_b, qtr( I_PLAY_TOOLTIP ), play() ); BUTTON_SET_ACT_I( prevButton, "" , previous_b, qtr( "Previous media in the playlist" ), prev() ); BUTTON_SET_ACT_I( nextButton, "", next_b, qtr( "Next media in the playlist" ), next() ); BUTTON_SET_ACT_I( stopButton, "", stop_b, qtr( "Stop playback" ), stop() ); /* * Other first Line buttons */ /* */ CONNECT( THEMIM->getIM(), voutChanged(bool), this, enableVideo(bool) ); /** Fullscreen/Visualisation **/ fullscreenButton = new QPushButton; BUTTON_SET_ACT_I( fullscreenButton, "", fullscreen, qtr( "Toggle the video in fullscreen" ), fullscreen() ); setupSmallButton( fullscreenButton ); if( !b_fsCreation ) { /** Playlist Button **/ playlistButton = new QPushButton; setupSmallButton( playlistButton ); BUTTON_SET_IMG( playlistButton, "" , playlist, qtr( "Show playlist" ) ); CONNECT( playlistButton, clicked(), _p_mi, togglePlaylist() ); /** extended Settings **/ extSettingsButton = new QPushButton; BUTTON_SET_ACT_I( extSettingsButton, "", extended, qtr( "Show extended settings" ), extSettings() ); setupSmallButton( extSettingsButton ); } /* Volume */ hVolLabel = new VolumeClickHandler( p_intf, this ); volMuteLabel = new QLabel; volMuteLabel->setPixmap( QPixmap( ":/volume-medium" ) ); volMuteLabel->installEventFilter( hVolLabel ); if( b_shiny ) { volumeSlider = new SoundSlider( this, config_GetInt( p_intf, "volume-step" ), config_GetInt( p_intf, "qt-volume-complete" ), config_GetPsz( p_intf, "qt-slider-colours" ) ); } else { volumeSlider = new QSlider( this ); volumeSlider->setOrientation( Qt::Horizontal ); } volumeSlider->setMaximumSize( QSize( 200, 40 ) ); volumeSlider->setMinimumSize( QSize( 85, 30 ) ); volumeSlider->setFocusPolicy( Qt::NoFocus ); /* Set the volume from the config */ volumeSlider->setValue( ( config_GetInt( p_intf, "volume" ) ) * VOLUME_MAX / (AOUT_VOLUME_MAX/2) ); /* Force the update at build time in order to have a muted icon if needed */ updateVolume( volumeSlider->value() ); /* Volume control connection */ CONNECT( volumeSlider, valueChanged( int ), this, updateVolume( int ) ); CONNECT( THEMIM, volumeChanged( void ), this, updateVolume( void ) ); if( !b_fsCreation ) { controlLayout = new QGridLayout( this ); controlLayout->setSpacing( 0 ); controlLayout->setLayoutMargins( 7, 5, 7, 3, 6 ); controlLayout->addWidget( slider, 0, 1, 1, 18 ); controlLayout->addWidget( slowerButton, 0, 0 ); controlLayout->addWidget( fasterButton, 0, 19 ); controlLayout->addWidget( discFrame, 1, 8, 2, 3, Qt::AlignBottom ); controlLayout->addWidget( telexFrame, 1, 8, 2, 5, Qt::AlignBottom ); controlLayout->addWidget( playButton, 2, 0, 2, 2, Qt::AlignBottom ); controlLayout->setColumnMinimumWidth( 2, 10 ); controlLayout->setColumnStretch( 2, 0 ); controlLayout->addLayout( controlButLayout, 3, 3, 1, 3, Qt::AlignBottom ); /* Column 6 is unused */ controlLayout->setColumnStretch( 6, 0 ); controlLayout->setColumnStretch( 7, 0 ); controlLayout->setColumnMinimumWidth( 7, 10 ); controlLayout->addWidget( fullscreenButton, 3, 8, Qt::AlignBottom ); controlLayout->addWidget( playlistButton, 3, 9, Qt::AlignBottom ); controlLayout->addWidget( extSettingsButton, 3, 10, Qt::AlignBottom ); controlLayout->setColumnStretch( 11, 0 ); /* telex alignment */ controlLayout->setColumnStretch( 12, 0 ); controlLayout->setColumnMinimumWidth( 12, 10 ); controlLayout->addWidget( advControls, 3, 13, 1, 3, Qt::AlignBottom ); controlLayout->setColumnStretch( 16, 10 ); controlLayout->setColumnMinimumWidth( 16, 10 ); controlLayout->addWidget( volMuteLabel, 3, 17, Qt::AlignBottom ); controlLayout->addWidget( volumeSlider, 3, 18, 1 , 2, Qt::AlignBottom ); } updateInput();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -