00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include "videowidget.h"
00035
00036
00037 #ifdef Q_WS_QWS
00038 # define USE_DIRECT_PAINTER
00039 # include <qdirectpainter_qws.h>
00040 # include <qgfxraster_qws.h>
00041 #endif
00042
00043
00044 namespace
00045 {
00046
00047 const int xo = 2;
00048 const int yo = 0;
00049
00050 const MediaWidget::SkinButtonInfo skinInfo[] =
00051 {
00052 { MediaWidget::Play, "play", MediaWidget::ToggleButton },
00053 { MediaWidget::Stop, "stop", MediaWidget::NormalButton },
00054 { MediaWidget::Next, "fwd", MediaWidget::NormalButton },
00055 { MediaWidget::Previous, "back", MediaWidget::NormalButton },
00056 { MediaWidget::VolumeUp, "up", MediaWidget::NormalButton },
00057 { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton },
00058 { MediaWidget::FullScreen, "full", MediaWidget::ToggleButton }
00059 };
00060
00061 const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] );
00062
00063 }
00064
00065 VideoWidget::VideoWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name )
00066 : MediaWidget( playList, mediaPlayerState, parent, name ), scaledWidth( 0 ), scaledHeight( 0 ), videoSliderBeingMoved( false )
00067 {
00068 setCaption( tr("OpiePlayer - Video") );
00069
00070 videoFrame = new XineVideoWidget ( this, "Video frame" );
00071
00072 connect ( videoFrame, SIGNAL( videoResized(const QSize&)), this, SIGNAL( videoResized(const QSize&)));
00073 connect ( videoFrame, SIGNAL( clicked() ), this, SLOT ( backToNormal() ) );
00074
00075 slider = 0;
00076
00077 loadSkin();
00078
00079 setLength( mediaPlayerState.length() );
00080 setPosition( mediaPlayerState.position() );
00081 setFullscreen( mediaPlayerState.isFullscreen() );
00082 setPlaying( mediaPlayerState.isPlaying() );
00083 }
00084
00085
00086 VideoWidget::~VideoWidget()
00087 {
00088 }
00089
00090 MediaWidget::GUIInfo VideoWidget::guiInfo()
00091 {
00092 return GUIInfo( "V" , ::skinInfo, ::buttonCount );
00093 }
00094
00095 void VideoWidget::resizeEvent( QResizeEvent *e ) {
00096 int h = height();
00097 int w = width();
00098
00099
00100
00101 slider->setFixedWidth( w - 20 );
00102 slider->setGeometry( QRect( 15, h - 22, w - 90, 20 ) );
00103 slider->setBackgroundOrigin( QWidget::ParentOrigin );
00104 slider->setFocusPolicy( QWidget::NoFocus );
00105 slider->setBackgroundPixmap( backgroundPixmap );
00106
00107 upperLeftOfButtonMask.rx() = 0;
00108 if(w>h)
00109 upperLeftOfButtonMask.ry() = 0;
00110 else
00111 upperLeftOfButtonMask.ry() = 185;
00112
00113 MediaWidget::resizeEvent( e );
00114 }
00115
00116 void VideoWidget::sliderPressed() {
00117 videoSliderBeingMoved = TRUE;
00118 }
00119
00120 void VideoWidget::sliderReleased() {
00121 videoSliderBeingMoved = FALSE;
00122 if ( slider->width() == 0 ) {
00123 return;
00124 }
00125 long val = long((double)slider->value() * mediaPlayerState.length() / slider->width());
00126 mediaPlayerState.setPosition( val );
00127 }
00128
00129 void VideoWidget::setPosition( long i ) {
00130 updateSlider( i, mediaPlayerState.length() );
00131 }
00132
00133
00134 void VideoWidget::setLength( long max ) {
00135 updateSlider( mediaPlayerState.position(), max );
00136 }
00137
00138 void VideoWidget::setDisplayType( MediaPlayerState::DisplayType displayType )
00139 {
00140 if ( displayType == MediaPlayerState::Video ) {
00141 makeVisible();
00142 return;
00143 }
00144
00145
00146 scaledWidth = 0;
00147 scaledHeight = 0;
00148 videoFrame->hide();
00149 hide();
00150 }
00151
00152 void VideoWidget::loadSkin()
00153 {
00154 loadDefaultSkin( guiInfo() );
00155
00156 delete slider;
00157 slider = new QSlider( Qt::Horizontal, this );
00158 slider->setMinValue( 0 );
00159 slider->setMaxValue( 1 );
00160 slider->setBackgroundPixmap( backgroundPixmap );
00161
00162
00163 resizeEvent( 0 );
00164 }
00165
00166 void VideoWidget::updateSlider( long i, long max ) {
00167
00168 if ( max == 0 ) {
00169 return;
00170 }
00171 int width = slider->width();
00172 int val = int((double)i * width / max);
00173 if ( !mediaPlayerState.isFullscreen() && !videoSliderBeingMoved ) {
00174 if ( slider->value() != val ) {
00175 slider->setValue( val );
00176 }
00177 if ( slider->maxValue() != width ) {
00178 slider->setMaxValue( width );
00179 }
00180 }
00181 }
00182
00183 void VideoWidget::mouseReleaseEvent( QMouseEvent *event ) {
00184 if ( mediaPlayerState.isFullscreen() ) {
00185 mediaPlayerState.setFullscreen( FALSE );
00186 makeVisible();
00187 }
00188 MediaWidget::mouseReleaseEvent( event );
00189 }
00190
00191 void VideoWidget::backToNormal() {
00192 mediaPlayerState.setFullscreen( FALSE );
00193 makeVisible();
00194 setToggleButton( FullScreen, false );
00195 }
00196
00197 void VideoWidget::makeVisible() {
00198 videoFrame->show();
00199 if ( mediaPlayerState.isFullscreen() ) {
00200 showFullScreen();
00201 resize( qApp->desktop()->size() );
00202 videoFrame-> setGeometry ( 0, 0, width ( ), height ( ));
00203
00204 slider->hide();
00205 disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
00206 disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
00207 disconnect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
00208 disconnect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
00209 } else {
00210 showNormal();
00211 showMaximized();
00212 QWidget *d = QApplication::desktop();
00213 int w = d->width();
00214 int h = d->height();
00215
00216 if(w>h) {
00217 int newW=(w/2)-(246/2);
00218 videoFrame->setGeometry( QRect( newW, 4, 240, 170 ) );
00219 } else {
00220 videoFrame->setGeometry( QRect( 0, 30, 240, 170 ) );
00221 }
00222
00223 if ( !mediaPlayerState.isSeekable() ) {
00224 if( !slider->isHidden()) {
00225 slider->hide();
00226 }
00227 disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
00228 disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
00229 disconnect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
00230 disconnect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
00231 } else {
00232 slider->show();
00233 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
00234 connect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
00235 connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
00236 connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
00237 }
00238 }
00239 }
00240
00241 void VideoWidget::keyReleaseEvent( QKeyEvent *e) {
00242 switch ( e->key() ) {
00244 case Key_Home:
00245 break;
00246 case Key_F9:
00247 break;
00248 case Key_F10:
00249
00250 break;
00251 case Key_F11:
00252 break;
00253 case Key_F12:
00254 break;
00255 case Key_F13:
00256 break;
00257 case Key_Space: {
00258 if(mediaPlayerState.isPlaying()) {
00259 mediaPlayerState.setPlaying(FALSE);
00260 } else {
00261 mediaPlayerState.setPlaying(TRUE);
00262 }
00263 }
00264 break;
00265 case Key_Down:
00266
00267 emit lessClicked();
00268 emit lessReleased();
00269
00270 break;
00271 case Key_Up:
00272
00273 emit moreClicked();
00274 emit moreReleased();
00275
00276 break;
00277 case Key_Right:
00278 mediaPlayerState.setNext();
00279 break;
00280 case Key_Left:
00281 mediaPlayerState.setPrev();
00282 break;
00283 case Key_Escape:
00284 break;
00285
00286 };
00287 }
00288
00289 XineVideoWidget* VideoWidget::vidWidget() {
00290 return videoFrame;
00291 }
00292
00293
00294 void VideoWidget::setFullscreen ( bool b ) {
00295 setToggleButton( FullScreen, b );
00296 }
00297
00298
00299 void VideoWidget::setPlaying( bool b) {
00300 setToggleButton( Play, b );
00301 }
00302