# include "UBMediaPlayer.h"
# include <QtGui>
# define SLIDER_RANGE 8
MediaVideoWidget : : MediaVideoWidget ( UBMediaPlayer * player , QWidget * parent ) :
Phonon : : VideoWidget ( parent ) , m_player ( player ) /*, m_action(this)*/
{
// m_action.setCheckable(true);
// m_action.setChecked(false);
// m_action.setShortcut(QKeySequence( Qt::AltModifier + Qt::Key_Return));
// m_action.setShortcutContext(Qt::WindowShortcut);
// connect(&m_action, SIGNAL(toggled(bool)), SLOT(setFullScreen(bool)));
// addAction(&m_action);
// setAcceptDrops(true);
}
void MediaVideoWidget : : timerEvent ( QTimerEvent * e )
{
if ( e - > timerId ( ) = = m_timer . timerId ( ) ) {
//let's store the cursor shape
# ifndef QT_NO_CURSOR
setCursor ( Qt : : BlankCursor ) ;
# endif
}
Phonon : : VideoWidget : : timerEvent ( e ) ;
}
UBMediaPlayer : : UBMediaPlayer ( ) :
playButton ( 0 ) ,
m_AudioOutput ( Phonon : : VideoCategory ) ,
m_videoWidget ( new MediaVideoWidget ( this ) )
{
setContextMenuPolicy ( Qt : : CustomContextMenu ) ;
m_videoWidget - > setContextMenuPolicy ( Qt : : CustomContextMenu ) ;
QSize buttonSize ( 26 , 20 ) ;
// QPushButton *openButton = new QPushButton(this);
//// openButton->setIcon(style()->standardIcon(QStyle::SP_DialogOpenButton));
//// QPalette bpal;
//// QColor arrowcolor = bpal.buttonText().color();
//// if (arrowcolor == Qt::black)
//// arrowcolor = QColor(80, 80, 80);
//// bpal.setBrush(QPalette::ButtonText, arrowcolor);
//// openButton->setPalette(bpal);
// rewindButton = new QPushButton(this);
// rewindButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipBackward));
// forwardButton = new QPushButton(this);
// forwardButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipForward));
// forwardButton->setEnabled(false);
playButton = new QPushButton ( this ) ;
playIcon = style ( ) - > standardIcon ( QStyle : : SP_MediaPlay ) ;
pauseIcon = style ( ) - > standardIcon ( QStyle : : SP_MediaPause ) ;
playButton - > setIcon ( playIcon ) ;
slider = new Phonon : : SeekSlider ( this ) ;
slider - > setMediaObject ( & m_MediaObject ) ;
QVBoxLayout * vLayout = new QVBoxLayout ( this ) ;
vLayout - > setContentsMargins ( 1 , 1 , 1 , 1 ) ;
// QHBoxLayout *layout = new QHBoxLayout();
// info = new QLabel(this);
// info->setMinimumHeight(70);
// info->setAcceptDrops(false);
// info->setMargin(2);
// info->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
// info->setLineWidth(2);
// info->setAutoFillBackground(true);
// QPalette palette;
// palette.setBrush(QPalette::WindowText, Qt::white);
# ifndef Q_WS_MAC
// rewindButton->setMinimumSize(buttonSize);
// forwardButton->setMinimumSize(buttonSize);
playButton - > setMinimumSize ( buttonSize ) ;
# endif
// info->setStyleSheet("border-image:url(:/images/screen.png) ; border-width:3px");
// info->setPalette(palette);
// info->setText(tr("<center>No media</center>"));
// layout->addWidget(rewindButton);
// layout->addWidget(playButton);
// layout->addWidget(forwardButton);
// layout->addStretch();
// vLayout->addWidget(info);
initVideoWindow ( ) ;
vLayout - > addWidget ( & m_videoWindow ) ;
// m_videoWidget->setStyleSheet(QString("background:red;"));
QVBoxLayout * buttonPanelLayout = new QVBoxLayout ( ) ;
m_videoWindow . hide ( ) ;
// buttonPanelLayout->addLayout(layout);
// timeLabel = new QLabel(this);
progressLabel = new QLabel ( this ) ;
QWidget * sliderPanel = new QWidget ( this ) ;
// sliderPanel->setStyleSheet(QString("background:green;"));
QHBoxLayout * sliderLayout = new QHBoxLayout ( ) ;
// playButton->setStyleSheet(QString("background:yellow;"));
sliderLayout - > addWidget ( playButton ) ;
sliderLayout - > addWidget ( slider ) ;
// sliderLayout->addWidget(timeLabel);
sliderLayout - > addWidget ( progressLabel ) ;
sliderLayout - > setContentsMargins ( 0 , 0 , 0 , 0 ) ;
sliderPanel - > setLayout ( sliderLayout ) ;
buttonPanelLayout - > addWidget ( sliderPanel ) ;
buttonPanelLayout - > setContentsMargins ( 0 , 0 , 0 , 0 ) ;
# ifdef Q_OS_MAC
// layout->setSpacing(4);
buttonPanelLayout - > setSpacing ( 0 ) ;
// info->setMinimumHeight(100);
// info->setFont(QFont("verdana", 15));
// openButton->setFocusPolicy(Qt::NoFocus);
# endif
QWidget * buttonPanelWidget = new QWidget ( this ) ;
buttonPanelWidget - > setSizePolicy ( QSizePolicy : : Preferred , QSizePolicy : : Fixed ) ;
buttonPanelWidget - > setLayout ( buttonPanelLayout ) ;
vLayout - > addWidget ( buttonPanelWidget ) ;
QHBoxLayout * labelLayout = new QHBoxLayout ( ) ;
vLayout - > addLayout ( labelLayout ) ;
setLayout ( vLayout ) ;
// Setup signal connections:
// connect(rewindButton, SIGNAL(clicked()), this, SLOT(rewind()));
connect ( playButton , SIGNAL ( clicked ( ) ) , this , SLOT ( playPause ( ) ) ) ;
// connect(forwardButton, SIGNAL(clicked()), this, SLOT(forward()));
// connect(&m_MediaObject, SIGNAL(totalTimeChanged(qint64)), this, SLOT(updateTime()));
// connect(&m_MediaObject, SIGNAL(tick(qint64)), this, SLOT(updateTime()));
connect ( & m_MediaObject , SIGNAL ( finished ( ) ) , this , SLOT ( finished ( ) ) ) ;
connect ( & m_MediaObject , SIGNAL ( stateChanged ( Phonon : : State , Phonon : : State ) ) , this , SLOT ( stateChanged ( Phonon : : State , Phonon : : State ) ) ) ;
connect ( & m_MediaObject , SIGNAL ( bufferStatus ( int ) ) , this , SLOT ( bufferStatus ( int ) ) ) ;
connect ( & m_MediaObject , SIGNAL ( hasVideoChanged ( bool ) ) , this , SLOT ( hasVideoChanged ( bool ) ) ) ;
// rewindButton->setEnabled(false);
playButton - > setEnabled ( false ) ;
// setAcceptDrops(true);
m_audioOutputPath = Phonon : : createPath ( & m_MediaObject , & m_AudioOutput ) ;
Phonon : : createPath ( & m_MediaObject , m_videoWidget ) ;
resize ( minimumSizeHint ( ) ) ;
}
void UBMediaPlayer : : stateChanged ( Phonon : : State newstate , Phonon : : State oldstate )
{
if ( oldstate = = Phonon : : LoadingState ) {
QRect videoHintRect = QRect ( QPoint ( 0 , 0 ) , m_videoWindow . sizeHint ( ) ) ;
QApplication : : desktop ( ) - > screenGeometry ( ) . intersected ( videoHintRect ) ;
if ( m_MediaObject . hasVideo ( ) ) {
qApp - > processEvents ( ) ;
resize ( sizeHint ( ) ) ;
} else
resize ( minimumSize ( ) ) ;
}
switch ( newstate ) {
case Phonon : : ErrorState :
if ( m_MediaObject . errorType ( ) = = Phonon : : FatalError ) {
playButton - > setEnabled ( false ) ;
// rewindButton->setEnabled(false);
} else {
m_MediaObject . pause ( ) ;
}
QMessageBox : : warning ( this , " Phonon UBMediaPlayer " , m_MediaObject . errorString ( ) , QMessageBox : : Close ) ;
break ;
case Phonon : : StoppedState :
// m_videoWidget-> (false);
// Fall through
case Phonon : : PausedState :
playButton - > setIcon ( playIcon ) ;
if ( m_MediaObject . currentSource ( ) . type ( ) ! = Phonon : : MediaSource : : Invalid ) {
playButton - > setEnabled ( true ) ;
// rewindButton->setEnabled(true);
} else {
playButton - > setEnabled ( false ) ;
// rewindButton->setEnabled(false);
}
break ;
case Phonon : : PlayingState :
playButton - > setEnabled ( true ) ;
playButton - > setIcon ( pauseIcon ) ;
if ( m_MediaObject . hasVideo ( ) )
m_videoWindow . show ( ) ;
// Fall through
case Phonon : : BufferingState :
// rewindButton->setEnabled(true);
break ;
case Phonon : : LoadingState :
// rewindButton->setEnabled(false);
break ;
}
}
void UBMediaPlayer : : setVolume ( qreal volume )
{
m_AudioOutput . setVolume ( volume ) ;
}
void UBMediaPlayer : : initVideoWindow ( )
{
QVBoxLayout * videoLayout = new QVBoxLayout ( ) ;
videoLayout - > addWidget ( m_videoWidget ) ;
videoLayout - > setContentsMargins ( 0 , 0 , 0 , 0 ) ;
m_videoWindow . setLayout ( videoLayout ) ;
m_videoWindow . setMinimumSize ( 60 , 40 ) ;
}
void UBMediaPlayer : : playPause ( )
{
if ( m_MediaObject . state ( ) = = Phonon : : PlayingState )
m_MediaObject . pause ( ) ;
else {
if ( m_MediaObject . currentTime ( ) = = m_MediaObject . totalTime ( ) )
m_MediaObject . seek ( 0 ) ;
m_MediaObject . play ( ) ;
}
}
void UBMediaPlayer : : setFile ( const QString & fileName )
{
setWindowTitle ( fileName . right ( fileName . length ( ) - fileName . lastIndexOf ( ' / ' ) - 1 ) ) ;
m_MediaObject . setCurrentSource ( Phonon : : MediaSource ( fileName ) ) ;
}
void UBMediaPlayer : : setLocation ( const QString & location )
{
setWindowTitle ( location . right ( location . length ( ) - location . lastIndexOf ( ' / ' ) - 1 ) ) ;
m_MediaObject . setCurrentSource ( Phonon : : MediaSource ( QUrl : : fromEncoded ( location . toUtf8 ( ) ) ) ) ;
m_MediaObject . play ( ) ;
}
void UBMediaPlayer : : openFile ( )
{
QStringList fileNames = QFileDialog : : getOpenFileNames ( this , QString ( ) , QDesktopServices : : storageLocation ( QDesktopServices : : MusicLocation ) ) ;
m_MediaObject . clearQueue ( ) ;
if ( fileNames . size ( ) > 0 ) {
QString fileName = fileNames [ 0 ] ;
setFile ( fileName ) ;
for ( int i = 1 ; i < fileNames . size ( ) ; i + + )
m_MediaObject . enqueue ( Phonon : : MediaSource ( fileNames [ i ] ) ) ;
}
// forwardButton->setEnabled(m_MediaObject.queue().size() > 0);
}
void UBMediaPlayer : : bufferStatus ( int percent )
{
if ( percent = = 100 )
progressLabel - > setText ( QString ( ) ) ;
else {
QString str = QString : : fromLatin1 ( " (%1%) " ) . arg ( percent ) ;
progressLabel - > setText ( str ) ;
}
}
//void UBMediaPlayer::updateTime()
//{
// long len = m_MediaObject.totalTime();
// long pos = m_MediaObject.currentTime();
// QString timeString;
// if (pos || len)
// {
// int sec = pos/1000;
// int min = sec/60;
// int hour = min/60;
// int msec = pos;
// QTime playTime(hour%60, min%60, sec%60, msec%1000);
// sec = len / 1000;
// min = sec / 60;
// hour = min / 60;
// msec = len;
// QTime stopTime(hour%60, min%60, sec%60, msec%1000);
// QString timeFormat = "m:ss";
// if (hour > 0)
// timeFormat = "h:mm:ss";
// timeString = playTime.toString(timeFormat);
// if (len)
// timeString += " / " + stopTime.toString(timeFormat);
// }
// timeLabel->setText(timeString);
//}
void UBMediaPlayer : : rewind ( )
{
m_MediaObject . seek ( 0 ) ;
}
void UBMediaPlayer : : forward ( )
{
QList < Phonon : : MediaSource > queue = m_MediaObject . queue ( ) ;
if ( queue . size ( ) > 0 ) {
m_MediaObject . setCurrentSource ( queue [ 0 ] ) ;
// forwardButton->setEnabled(queue.size() > 1);
m_MediaObject . play ( ) ;
}
}
void UBMediaPlayer : : openUrl ( )
{
QSettings settings ;
settings . beginGroup ( QLatin1String ( " BrowserMainWindow " ) ) ;
QString sourceURL = settings . value ( " location " ) . toString ( ) ;
bool ok = false ;
sourceURL = QInputDialog : : getText ( this , tr ( " Open Location " ) , tr ( " Please enter a valid address here: " ) , QLineEdit : : Normal , sourceURL , & ok ) ;
if ( ok & & ! sourceURL . isEmpty ( ) ) {
setLocation ( sourceURL ) ;
settings . setValue ( " location " , sourceURL ) ;
}
}
void UBMediaPlayer : : finished ( )
{
}
void UBMediaPlayer : : hasVideoChanged ( bool bHasVideo )
{
// info->setVisible(!bHasVideo);
m_videoWindow . setVisible ( bHasVideo ) ;
}
//*************************************************************************
UBDraggableMediaPlayer : : UBDraggableMediaPlayer ( ) : UBMediaPlayer ( )
{
// setAcceptDrops(true);
}
void UBDraggableMediaPlayer : : setFile ( const QString & text )
{
mSourcePath = text ;
UBMediaPlayer : : setFile ( text ) ;
}
void UBDraggableMediaPlayer : : mousePressEvent ( QMouseEvent * event )
{
Q_UNUSED ( event ) ;
QMimeData * mimeData = new QMimeData ;
QList < QUrl > urls ;
urls < < QUrl : : fromLocalFile ( mSourcePath ) ;
mimeData - > setUrls ( urls ) ;
mimeData - > setText ( mSourcePath ) ;
QDrag * drag = new QDrag ( this ) ;
drag - > setMimeData ( mimeData ) ;
drag - > start ( ) ;
}