void Controller::updatePlayPauseResumeState(const Player::TrackState &state) { auto showPause = (state.state == Player::State::Playing || state.state == Player::State::Resuming || _seekPositionMs >= 0); if (showPause != _showPause) { disconnect(_playPauseResume, SIGNAL(clicked()), this, _showPause ? SIGNAL(pausePressed()) : SIGNAL(playPressed())); _showPause = showPause; connect(_playPauseResume, SIGNAL(clicked()), this, _showPause ? SIGNAL(pausePressed()) : SIGNAL(playPressed())); _playPauseResume->setIconOverride(_showPause ? &st::mediaviewPauseIcon : nullptr, _showPause ? &st::mediaviewPauseIconOver : nullptr); } }
AudioControls::AudioControls( QWidget* parent ) : QWidget( parent ) , ui( new Ui::AudioControls ) , m_repeatMode( PlaylistInterface::NoRepeat ) , m_shuffled( false ) { ui->setupUi( this ); ui->buttonAreaLayout->setSpacing( 2 ); QFont font( ui->artistTrackLabel->font() ); font.setPixelSize( 12 ); #ifdef Q_WS_MAC font.setPointSize( font.pointSize() - 2 ); #endif ui->artistTrackLabel->setFont( font ); ui->artistTrackLabel->setElideMode( Qt::ElideMiddle ); ui->artistTrackLabel->setType( QueryLabel::ArtistAndTrack ); ui->albumLabel->setFont( font ); ui->albumLabel->setType( QueryLabel::Album ); ui->timeLabel->setFont( font ); ui->timeLeftLabel->setFont( font ); font.setPixelSize( 9 ); ui->ownerLabel->setFont( font ); ui->prevButton->setPixmap( RESPATH "images/back-rest.png" ); ui->prevButton->setPixmap( RESPATH "images/back-pressed.png", QIcon::Off, QIcon::Active ); ui->playPauseButton->setPixmap( RESPATH "images/play-rest.png" ); ui->playPauseButton->setPixmap( RESPATH "images/play-pressed.png", QIcon::Off, QIcon::Active ); ui->pauseButton->setPixmap( RESPATH "images/pause-rest.png" ); ui->pauseButton->setPixmap( RESPATH "images/pause-pressed.png", QIcon::Off, QIcon::Active ); ui->nextButton->setPixmap( RESPATH "images/skip-rest.png" ); ui->nextButton->setPixmap( RESPATH "images/skip-pressed.png", QIcon::Off, QIcon::Active ); ui->shuffleButton->setPixmap( RESPATH "images/shuffle-off-rest.png" ); ui->shuffleButton->setPixmap( RESPATH "images/shuffle-off-pressed.png", QIcon::Off, QIcon::Active ); ui->repeatButton->setPixmap( RESPATH "images/repeat-off-rest.png" ); ui->repeatButton->setPixmap( RESPATH "images/repeat-off-pressed.png", QIcon::Off, QIcon::Active ); ui->volumeLowButton->setPixmap( RESPATH "images/volume-icon-muted.png" ); ui->volumeHighButton->setPixmap( RESPATH "images/volume-icon-full.png" ); ui->ownerLabel->setForegroundRole( QPalette::Dark ); ui->metaDataArea->setStyleSheet( "QWidget#metaDataArea {\nborder-width: 4px;\nborder-image: url(" RESPATH "images/now-playing-panel.png) 4 4 4 4 stretch stretch; }" ); ui->seekSlider->setFixedHeight( 20 ); ui->seekSlider->setEnabled( false ); ui->seekSlider->setStyleSheet( "QSlider::groove::horizontal {" "margin: 5px; border-width: 3px;" "border-image: url(" RESPATH "images/seek-slider-bkg.png) 3 3 3 3 stretch stretch;" "}" "QSlider::handle::horizontal {" "margin-left: 5px; margin-right: -5px; " "width: 0px;" //"margin-bottom: -7px; margin-top: -7px;" //"height: 17px; width: 16px;" //"background-image: url(" RESPATH "images/seek-and-volume-knob-rest.png);" //"background-repeat: no-repeat;" "}" "QSlider::sub-page:horizontal {" "margin: 5px; border-width: 3px;" "border-image: url(" RESPATH "images/seek-slider-level.png) 3 3 3 3 stretch stretch;" "}" ); ui->volumeSlider->setFixedHeight( 20 ); ui->volumeSlider->setRange( 0, 100 ); ui->volumeSlider->setValue( AudioEngine::instance()->volume() ); ui->volumeSlider->setStyleSheet( "QSlider::groove::horizontal {" "margin: 5px; border-width: 3px;" "border-image: url(" RESPATH "images/volume-slider-bkg.png) 3 3 3 3 stretch stretch;" "}" "QSlider::sub-page:horizontal {" "margin: 5px; border-width: 3px;" "border-image: url(" RESPATH "images/seek-slider-level.png) 3 3 3 3 stretch stretch;" "}" "QSlider::handle::horizontal {" "margin-bottom: -7px; margin-top: -7px;" "height: 17px; width: 16px;" "background-image: url(" RESPATH "images/seek-and-volume-knob-rest.png);" "background-repeat: no-repeat;" "}" ); /* m_playAction = new QAction( this ); m_pauseAction = new QAction( this ); m_prevAction = new QAction( this ); m_nextAction = new QAction( this ); connect( m_playAction, SIGNAL( triggered() ), (QObject*)APP->audioEngine(), SLOT( play() ) ); connect( m_pauseAction, SIGNAL( triggered() ), (QObject*)APP->audioEngine(), SLOT( pause() ) ); connect( m_prevAction, SIGNAL( triggered() ), (QObject*)APP->audioEngine(), SLOT( previous() ) ); connect( m_nextAction, SIGNAL( triggered() ), (QObject*)APP->audioEngine(), SLOT( next() ) ); */ connect( ui->volumeSlider, SIGNAL( valueChanged( int ) ), AudioEngine::instance(), SLOT( setVolume( int ) ) ); connect( ui->prevButton, SIGNAL( clicked() ), AudioEngine::instance(), SLOT( previous() ) ); connect( ui->playPauseButton, SIGNAL( clicked() ), AudioEngine::instance(), SLOT( play() ) ); connect( ui->pauseButton, SIGNAL( clicked() ), AudioEngine::instance(), SLOT( pause() ) ); connect( ui->nextButton, SIGNAL( clicked() ), AudioEngine::instance(), SLOT( next() ) ); connect( ui->volumeLowButton, SIGNAL( clicked() ), AudioEngine::instance(), SLOT( lowerVolume() ) ); connect( ui->volumeHighButton, SIGNAL( clicked() ), AudioEngine::instance(), SLOT( raiseVolume() ) ); connect( ui->playPauseButton, SIGNAL( clicked() ), this, SIGNAL( playPressed() ) ); connect( ui->pauseButton, SIGNAL( clicked() ), this, SIGNAL( pausePressed() ) ); connect( ui->repeatButton, SIGNAL( clicked() ), SLOT( onRepeatClicked() ) ); connect( ui->shuffleButton, SIGNAL( clicked() ), SLOT( onShuffleClicked() ) ); connect( ui->artistTrackLabel, SIGNAL( clickedArtist() ), SLOT( onArtistClicked() ) ); connect( ui->artistTrackLabel, SIGNAL( clickedTrack() ), SLOT( onTrackClicked() ) ); connect( ui->albumLabel, SIGNAL( clickedAlbum() ), SLOT( onAlbumClicked() ) ); // <From AudioEngine> connect( AudioEngine::instance(), SIGNAL( loading( Tomahawk::result_ptr ) ), SLOT( onPlaybackLoading( Tomahawk::result_ptr ) ) ); connect( AudioEngine::instance(), SIGNAL( started( Tomahawk::result_ptr ) ), SLOT( onPlaybackStarted( Tomahawk::result_ptr ) ) ); connect( AudioEngine::instance(), SIGNAL( paused() ), SLOT( onPlaybackPaused() ) ); connect( AudioEngine::instance(), SIGNAL( resumed() ), SLOT( onPlaybackResumed() ) ); connect( AudioEngine::instance(), SIGNAL( stopped() ), SLOT( onPlaybackStopped() ) ); connect( AudioEngine::instance(), SIGNAL( timerSeconds( unsigned int ) ), SLOT( onPlaybackTimer( unsigned int ) ) ); connect( AudioEngine::instance(), SIGNAL( volumeChanged( int ) ), SLOT( onVolumeChanged( int ) ) ); m_defaultCover = QPixmap( RESPATH "images/no-album-art-placeholder.png" ) .scaled( ui->coverImage->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); connect( TomahawkApp::instance()->infoSystem(), SIGNAL( info( QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash ) ), SLOT( infoSystemInfo( QString, Tomahawk::InfoSystem::InfoType, QVariant, QVariant, Tomahawk::InfoSystem::InfoCustomDataHash ) ) ); connect( TomahawkApp::instance()->infoSystem(), SIGNAL( finished( QString ) ), SLOT( infoSystemFinished( QString ) ) ); onPlaybackStopped(); // initial state }
// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- // keyboard handling // ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- void FileListView::keyPressEvent( QKeyEvent* keyEvent ) { // implementing our needs Qt::KeyboardModifiers keyboardModifier = keyEvent->modifiers(); Qt::Key pressedKey = static_cast<Qt::Key>( keyEvent->key() ); if( Qt::NoModifier == keyboardModifier ) { switch( pressedKey ) { case Qt::Key_Escape: emit escPressed(); break; case Qt::Key_Period: emit consolePressed(); break; case Qt::Key_F1 : emit f01keyPressed(); break; case Qt::Key_F2 : emit f02keyPressed(); break; case Qt::Key_F3 : emit f03keyPressed(); break; case Qt::Key_F4 : emit f04keyPressed(); break; case Qt::Key_F5 : emit f05keyPressed(); break; case Qt::Key_F6 : emit f06keyPressed(); break; case Qt::Key_F7 : emit f07keyPressed(); break; case Qt::Key_F8 : emit f08keyPressed(); break; case Qt::Key_F9 : emit f09keyPressed(); break; case Qt::Key_F10: emit f10keyPressed(); break; case Qt::Key_F11: emit f11keyPressed(); break; case Qt::Key_F12: emit f12keyPressed(); break; case Qt::Key_Print: emit printPressed(); break; case Qt::Key_Pause: emit pausePressed(); break; case Qt::Key_Tab: emit tabPressed(); break; case Qt::Key_CapsLock: emit capsLockPressed(); break; case Qt::Key_Shift: emit leftShiftPressed();break; case Qt::Key_Control: emit leftCtrlPressed(); break; case Qt::Key_Insert: emit insertPressed(); break; case Qt::Key_Delete: emit deletePressed(); break; case Qt::Key_Home: emit homePressed(); break; case Qt::Key_End: emit endPressed(); break; case Qt::Key_PageUp: emit pageUpPressed(); break; case Qt::Key_PageDown: emit pageDownPressed(); break; case Qt::Key_Backspace: emit backspacePressed();break; case Qt::Key_Return: emit enterPressed(); break; case Qt::Key_Space: emit spacePressed(); break; default: keyEvent->ignore(); break; } } else if( Qt::AltModifier == keyboardModifier ) { switch( pressedKey ) { case Qt::Key_0: emit alt0Pressed(); break; case Qt::Key_1: emit alt1Pressed(); break; case Qt::Key_2: emit alt2Pressed(); break; case Qt::Key_3: emit alt3Pressed(); break; case Qt::Key_4: emit alt4Pressed(); break; case Qt::Key_5: emit alt5Pressed(); break; case Qt::Key_6: emit alt6Pressed(); break; case Qt::Key_7: emit alt7Pressed(); break; case Qt::Key_8: emit alt8Pressed(); break; case Qt::Key_9: emit alt9Pressed(); break; default: keyEvent->ignore(); break; } } else if( Qt::ControlModifier == keyboardModifier ) { switch( pressedKey ) { case Qt::Key_0: emit ctrl0Pressed(); break; case Qt::Key_1: emit ctrl1Pressed(); break; case Qt::Key_2: emit ctrl2Pressed(); break; case Qt::Key_3: emit ctrl3Pressed(); break; case Qt::Key_4: emit ctrl4Pressed(); break; case Qt::Key_5: emit ctrl5Pressed(); break; case Qt::Key_6: emit ctrl6Pressed(); break; case Qt::Key_7: emit ctrl7Pressed(); break; case Qt::Key_8: emit ctrl8Pressed(); break; case Qt::Key_9: emit ctrl9Pressed(); break; default: keyEvent->ignore(); break; } } else if( Qt::ShiftModifier == keyboardModifier ) { switch( pressedKey ) { case Qt::Key_0: emit shift0Pressed(); break; case Qt::Key_1: emit shift1Pressed(); break; case Qt::Key_2: emit shift2Pressed(); break; case Qt::Key_3: emit shift3Pressed(); break; case Qt::Key_4: emit shift4Pressed(); break; case Qt::Key_5: emit shift5Pressed(); break; case Qt::Key_6: emit shift6Pressed(); break; case Qt::Key_7: emit shift7Pressed(); break; case Qt::Key_8: emit shift8Pressed(); break; case Qt::Key_9: emit shift9Pressed(); break; default: keyEvent->ignore(); break; } } else if( Qt::KeypadModifier == keyboardModifier ) { switch( pressedKey ) { case Qt::Key_Minus: emit numpadMinusPressed(); break; case Qt::Key_Plus: emit numpadPlusPressed(); break; case Qt::Key_Slash: emit numpadSlashPressed(); break; case Qt::Key_Asterisk: emit numpadAsteriskPressed(); break; default: keyEvent->ignore(); break; } } // allowing the default behaviour QListView::keyPressEvent( keyEvent ); }
FramelessMainWindow::FramelessMainWindow( QWidget *parent ) : QMainWindow( parent ), m_scene( new QGraphicsScene( this ) ), m_browser( new GraphicsBrowser( m_scene, *this ) ), m_mouseFilter( *this, *qApp ), m_video( new EventfulVidgetVideo( this ) ), m_intro( new QGraphicsScene ), m_control( new VideoControl( this ) ), m_closeControl( new QFrame( this ) ), m_hostApp( new HostApp( m_browser->webView(), this ) ) { m_video->hide(); m_control->hide(); m_browser->webView()->page()->settings()->setAttribute( QWebSettings::JavascriptCanOpenWindows, true ); m_control->setVolume( m_hostApp->getVolume() ); m_closeControl->hide(); m_closeControl->setStyleSheet( "QFrame{background-color:black; } " "QPushButton { background-image: url(':/close-styled'); width:31;} " "QWidget{border:none; padding:0; spacing:0; height:30;}" ); QHBoxLayout *hl = new QHBoxLayout( m_closeControl ); hl->setContentsMargins( QMargins() ); hl->addSpacerItem( new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum ) ); m_closeButton = new QPushButton(); m_closeButton->setCursor( Qt::PointingHandCursor ); // btn->setFlat( true ); hl->addWidget( m_closeButton ); connect( m_control, SIGNAL( uiShow() ), m_closeButton, SLOT( show() ) ); connect( m_control, SIGNAL( uiHide() ), m_closeButton, SLOT( hide() ) ); setWindowTitle( "Popcorn Time" ); m_intro->addPixmap( QPixmap( ":/intro" ).scaled( DEFAULT_WIDTH, DEFAULT_HEIGHT, Qt::IgnoreAspectRatio ) ); m_browser->setScene( m_intro ); new QShortcut( QKeySequence( "Ctrl+M" ), this, SLOT( minimize() ) ); QObject::connect( m_hostApp->thread(), SIGNAL( torrentUrlAvailable( QString ) ), this, SLOT( playMedia( QString ) ) ); QObject::connect( m_browser->webView(), SIGNAL( loadFinished( bool ) ), this, SLOT( removeIntro() ) ); QObject::connect( m_hostApp, SIGNAL( commandedClose() ), this, SLOT( close() ) ); QObject::connect( m_hostApp, SIGNAL( commandedMinimize() ), this, SLOT( minimize() ) ); QObject::connect( m_hostApp, SIGNAL( toggledMaximize() ), this, SLOT( toggleMaximize() ) ); QObject::connect( m_hostApp, SIGNAL( haveSubtitles( SubtitleItem ) ), m_control, SLOT( addSubtitle( SubtitleItem ) ) ); QObject::connect( m_hostApp, SIGNAL( downloadInfoChanged( DownloadInfo ) ), m_control, SLOT( updateDownloadStatus( DownloadInfo ) ) ); QObject::connect( m_control, SIGNAL( volumeChanged( int ) ), m_hostApp, SLOT( setVolume( int ) ) ); QObject::connect( m_control, SIGNAL( newImage( QString ) ), m_video, SLOT( setImage( QString ) ) ); QObject::connect( m_control->fullscreenButton(), SIGNAL( clicked() ), this, SLOT( toggleMaximize() ) ); QObject::connect( &m_mouseFilter, SIGNAL( enterPressed() ), this, SLOT( toggleMaximize() ) ); QObject::connect( &m_mouseFilter, SIGNAL( upPressed() ), m_control, SLOT( volumeUp() ) ); QObject::connect( &m_mouseFilter, SIGNAL( downPressed() ), m_control, SLOT( volumeDown() ) ); QObject::connect( &m_mouseFilter, SIGNAL( pausePressed() ), m_control, SLOT( pauseToggleReq() ) ); connect( m_video, SIGNAL( mouseEnter() ), m_control, SLOT( showForDefaultPeriod() ) ); this->setWindowFlags( Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint ); #ifdef Q_OS_MAC fixNativeWindow( this ); #endif this->setMinimumSize( 800, 330 ); this->setMouseTracking( true ); this->setCentralWidget( m_browser ); qApp->installEventFilter( this ); reconnectMediaPlayer(); QObject::connect( VLC::VLCObject(), SIGNAL( mediaPlayerReplaced() ), this, SLOT( reconnectMediaPlayer() ) ); }