summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/audiowidget.cpp25
-rw-r--r--noncore/multimedia/opieplayer2/videowidget.cpp27
2 files changed, 29 insertions, 23 deletions
diff --git a/noncore/multimedia/opieplayer2/audiowidget.cpp b/noncore/multimedia/opieplayer2/audiowidget.cpp
index ef606ab..714509e 100644
--- a/noncore/multimedia/opieplayer2/audiowidget.cpp
+++ b/noncore/multimedia/opieplayer2/audiowidget.cpp
@@ -1,442 +1,445 @@
1/* 1/*
2                This file is part of the Opie Project 2                This file is part of the Opie Project
3 3
4              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> 4              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org>
5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com> 5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com>
6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> 6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
7 =. 7 =.
8 .=l. 8 .=l.
9           .>+-= 9           .>+-=
10 _;:,     .>    :=|. This program is free software; you can 10 _;:,     .>    :=|. This program is free software; you can
11.> <`_,   >  .   <= redistribute it and/or modify it under 11.> <`_,   >  .   <= redistribute it and/or modify it under
12:`=1 )Y*s>-.--   : the terms of the GNU General Public 12:`=1 )Y*s>-.--   : the terms of the GNU General Public
13.="- .-=="i,     .._ License as published by the Free Software 13.="- .-=="i,     .._ License as published by the Free Software
14 - .   .-<_>     .<> Foundation; either version 2 of the License, 14 - .   .-<_>     .<> Foundation; either version 2 of the License,
15     ._= =}       : or (at your option) any later version. 15     ._= =}       : or (at your option) any later version.
16    .%`+i>       _;_. 16    .%`+i>       _;_.
17    .i_,=:_.      -<s. This program is distributed in the hope that 17    .i_,=:_.      -<s. This program is distributed in the hope that
18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
19    : ..    .:,     . . . without even the implied warranty of 19    : ..    .:,     . . . without even the implied warranty of
20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.=       =       ; Library General Public License for more 22..}^=.=       =       ; Library General Public License for more
23++=   -.     .`     .: details. 23++=   -.     .`     .: details.
24 :     =  ...= . :.=- 24 :     =  ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25 -.   .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = Library General Public License along with 26  -_. . .   )=.  = Library General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34#include <qpe/qpeapplication.h> 34#include <qpe/qpeapplication.h>
35#include <qpe/resource.h> 35#include <qpe/resource.h>
36#include <qpe/config.h> 36#include <qpe/config.h>
37#include <opie/oticker.h> 37#include <opie/oticker.h>
38 38
39#include <qwidget.h> 39#include <qwidget.h>
40#include <qpixmap.h> 40#include <qpixmap.h>
41#include <qbutton.h> 41#include <qbutton.h>
42#include <qpainter.h> 42#include <qpainter.h>
43#include <qframe.h> 43#include <qframe.h>
44#include <qlayout.h> 44#include <qlayout.h>
45#include <qdir.h> 45#include <qdir.h>
46#include <stdlib.h> 46#include <stdlib.h>
47#include <stdio.h> 47#include <stdio.h>
48 48
49#include "audiowidget.h" 49#include "audiowidget.h"
50#include "mediaplayerstate.h" 50#include "mediaplayerstate.h"
51#include "playlistwidget.h" 51#include "playlistwidget.h"
52 52
53namespace 53namespace
54{ 54{
55 55
56const int xo = -2; // movable x offset 56const int xo = -2; // movable x offset
57const int yo = 22; // movable y offset 57const int yo = 22; // movable y offset
58 58
59const MediaWidget::SkinButtonInfo skinInfo[] = 59const MediaWidget::SkinButtonInfo skinInfo[] =
60{ 60{
61 { MediaWidget::Play, "play", MediaWidget::ToggleButton }, 61 { MediaWidget::Play, "play", MediaWidget::ToggleButton },
62 { MediaWidget::Stop, "stop", MediaWidget::NormalButton }, 62 { MediaWidget::Stop, "stop", MediaWidget::NormalButton },
63 { MediaWidget::Next, "next", MediaWidget::NormalButton }, 63 { MediaWidget::Next, "next", MediaWidget::NormalButton },
64 { MediaWidget::Previous, "prev", MediaWidget::NormalButton }, 64 { MediaWidget::Previous, "prev", MediaWidget::NormalButton },
65 { MediaWidget::VolumeUp, "up", MediaWidget::NormalButton }, 65 { MediaWidget::VolumeUp, "up", MediaWidget::NormalButton },
66 { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton }, 66 { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton },
67 { MediaWidget::Loop, "loop", MediaWidget::ToggleButton }, 67 { MediaWidget::Loop, "loop", MediaWidget::ToggleButton },
68 { MediaWidget::PlayList, "playlist", MediaWidget::NormalButton }, 68 { MediaWidget::PlayList, "playlist", MediaWidget::NormalButton },
69 { MediaWidget::Forward, "forward", MediaWidget::NormalButton }, 69 { MediaWidget::Forward, "forward", MediaWidget::NormalButton },
70 { MediaWidget::Back, "back", MediaWidget::NormalButton } 70 { MediaWidget::Back, "back", MediaWidget::NormalButton }
71}; 71};
72 72
73const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] ); 73const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] );
74 74
75void changeTextColor( QWidget * w) { 75void changeTextColor( QWidget * w) {
76 QPalette p = w->palette(); 76 QPalette p = w->palette();
77 p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) ); 77 p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) );
78 p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) ); 78 p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) );
79 w->setPalette( p ); 79 w->setPalette( p );
80} 80}
81 81
82} 82}
83 83
84AudioWidget::AudioWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name) : 84AudioWidget::AudioWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name) :
85 85
86 MediaWidget( playList, mediaPlayerState, parent, name ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ), 86 MediaWidget( playList, mediaPlayerState, parent, name ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ),
87 audioSliderBeingMoved( false ) 87 audioSliderBeingMoved( false )
88{ 88{
89 setCaption( tr("OpiePlayer") ); 89 setCaption( tr("OpiePlayer") );
90 90
91 Config cfg("OpiePlayer"); 91 Config cfg("OpiePlayer");
92 cfg.setGroup("Options"); 92 cfg.setGroup("Options");
93 skin = cfg.readEntry("Skin","default"); 93 skin = cfg.readEntry("Skin","default");
94 //skin = "scaleTest"; 94 //skin = "scaleTest";
95 // color of background, frame, degree of transparency 95 // color of background, frame, degree of transparency
96 96
97 QString skinPath = "opieplayer2/skins/" + skin; 97 QString skinPath = "opieplayer2/skins/" + skin;
98 backgroundPixmap = QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) ); 98 backgroundPixmap = QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) );
99 imgUp = QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) ); 99 imgUp = QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) );
100 imgDn = QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) ); 100 imgDn = QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) );
101 101
102 buttonMask = QImage( imgUp.width(), imgUp.height(), 8, 255 ); 102 buttonMask = QImage( imgUp.width(), imgUp.height(), 8, 255 );
103 buttonMask.fill( 0 ); 103 buttonMask.fill( 0 );
104 104
105 for ( uint i = 0; i < buttonCount; i++ ) { 105 for ( uint i = 0; i < buttonCount; i++ ) {
106 Button button; 106 Button button;
107 button.type = skinInfo[ i ].type; 107 button.type = skinInfo[ i ].type;
108 108
109 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + "/skin_mask_" + skinInfo[i].fileName + ".png" ); 109 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + "/skin_mask_" + skinInfo[i].fileName + ".png" );
110 button.mask =QBitmap( filename ); 110 button.mask =QBitmap( filename );
111 111
112 if ( !button.mask.isNull() ) { 112 if ( !button.mask.isNull() ) {
113 QImage imgMask = button.mask.convertToImage(); 113 QImage imgMask = button.mask.convertToImage();
114 uchar **dest = buttonMask.jumpTable(); 114 uchar **dest = buttonMask.jumpTable();
115 for ( int y = 0; y < imgUp.height(); y++ ) { 115 for ( int y = 0; y < imgUp.height(); y++ ) {
116 uchar *line = dest[y]; 116 uchar *line = dest[y];
117 for ( int x = 0; x < imgUp.width(); x++ ) 117 for ( int x = 0; x < imgUp.width(); x++ )
118 if ( !qRed( imgMask.pixel( x, y ) ) ) 118 if ( !qRed( imgMask.pixel( x, y ) ) )
119 line[x] = i + 1; 119 line[x] = i + 1;
120 } 120 }
121 } 121 }
122 122
123 buttons.insert( i, button ); 123 buttons.insert( i, button );
124 } 124 }
125 125
126 setBackgroundPixmap( backgroundPixmap ); 126 setBackgroundPixmap( backgroundPixmap );
127 127
128 songInfo.setFocusPolicy( QWidget::NoFocus ); 128 songInfo.setFocusPolicy( QWidget::NoFocus );
129// changeTextColor( &songInfo ); 129// changeTextColor( &songInfo );
130// songInfo.setBackgroundColor( QColor( 167, 212, 167 )); 130// songInfo.setBackgroundColor( QColor( 167, 212, 167 ));
131// songInfo.setFrameStyle( QFrame::NoFrame); 131// songInfo.setFrameStyle( QFrame::NoFrame);
132 songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken ); 132 songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
133// songInfo.setForegroundColor(Qt::white); 133// songInfo.setForegroundColor(Qt::white);
134 134
135 slider.setFixedHeight( 20 ); 135 slider.setFixedHeight( 20 );
136 slider.setMinValue( 0 ); 136 slider.setMinValue( 0 );
137 slider.setMaxValue( 1 ); 137 slider.setMaxValue( 1 );
138 slider.setFocusPolicy( QWidget::NoFocus ); 138 slider.setFocusPolicy( QWidget::NoFocus );
139 slider.setBackgroundPixmap( backgroundPixmap ); 139 slider.setBackgroundPixmap( backgroundPixmap );
140 140
141// Config cofg("qpe"); 141// Config cofg("qpe");
142// cofg.setGroup("Appearance"); 142// cofg.setGroup("Appearance");
143// QColor backgroundcolor = QColor( cofg.readEntry( "Background", "#E5E1D5" ) ); 143// QColor backgroundcolor = QColor( cofg.readEntry( "Background", "#E5E1D5" ) );
144 144
145 time.setFocusPolicy( QWidget::NoFocus ); 145 time.setFocusPolicy( QWidget::NoFocus );
146 time.setAlignment( Qt::AlignCenter ); 146 time.setAlignment( Qt::AlignCenter );
147 147
148// time.setFrame(FALSE); 148// time.setFrame(FALSE);
149// changeTextColor( &time ); 149// changeTextColor( &time );
150 150
151 resizeEvent( NULL ); 151 resizeEvent( NULL );
152 152
153 connect( &mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) ); 153 connect( &mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) );
154 connect( &mediaPlayerState, SIGNAL( isSeekableToggled( bool ) ), this, SLOT( setSeekable( bool ) ) ); 154 connect( &mediaPlayerState, SIGNAL( isSeekableToggled( bool ) ), this, SLOT( setSeekable( bool ) ) );
155 155
156 connect( this, SIGNAL( forwardClicked() ), this, SLOT( skipFor() ) ); 156 connect( this, SIGNAL( forwardClicked() ), this, SLOT( skipFor() ) );
157 connect( this, SIGNAL( backClicked() ), this, SLOT( skipBack() ) ); 157 connect( this, SIGNAL( backClicked() ), this, SLOT( skipBack() ) );
158 connect( this, SIGNAL( forwardReleased() ), this, SLOT( stopSkip() ) ); 158 connect( this, SIGNAL( forwardReleased() ), this, SLOT( stopSkip() ) );
159 connect( this, SIGNAL( backReleased() ), this, SLOT( stopSkip() ) ); 159 connect( this, SIGNAL( backReleased() ), this, SLOT( stopSkip() ) );
160 160
161 // Intialise state 161 // Intialise state
162 setLength( mediaPlayerState.length() ); 162 setLength( mediaPlayerState.length() );
163 setPosition( mediaPlayerState.position() ); 163 setPosition( mediaPlayerState.position() );
164 setLooping( mediaPlayerState.isFullscreen() ); 164 setLooping( mediaPlayerState.isFullscreen() );
165 // setPaused( mediaPlayerState->paused() ); 165 // setPaused( mediaPlayerState->paused() );
166 setPlaying( mediaPlayerState.isPlaying() ); 166 setPlaying( mediaPlayerState.isPlaying() );
167 167
168} 168}
169 169
170AudioWidget::~AudioWidget() { 170AudioWidget::~AudioWidget() {
171 171
172// mediaPlayerState->setPlaying(false); 172// mediaPlayerState->setPlaying(false);
173} 173}
174 174
175namespace { 175namespace {
176 176
177QPixmap combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { 177QPixmap combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) {
178 QPixmap pix( img.width(), img.height() ); 178 QPixmap pix( img.width(), img.height() );
179 QPainter p( &pix ); 179 QPainter p( &pix );
180 p.drawTiledPixmap( pix.rect(), bg, offset ); 180 p.drawTiledPixmap( pix.rect(), bg, offset );
181 p.drawImage( 0, 0, img ); 181 p.drawImage( 0, 0, img );
182 return pix; 182 return pix;
183} 183}
184 184
185 185
186QPixmap maskPixToMask( QPixmap pix, QBitmap mask ) { 186QPixmap maskPixToMask( QPixmap pix, QBitmap mask ) {
187 QPixmap pixmap( pix ); 187 QPixmap pixmap( pix );
188 pixmap.setMask( mask ); 188 pixmap.setMask( mask );
189 return pixmap; 189 return pixmap;
190} 190}
191 191
192}; 192};
193 193
194void AudioWidget::resizeEvent( QResizeEvent * ) { 194void AudioWidget::resizeEvent( QResizeEvent * ) {
195 int h = height(); 195 int h = height();
196 int w = width(); 196 int w = width();
197 197
198 songInfo.setGeometry( QRect( 2, 2, w - 4, 20 ) ); 198 songInfo.setGeometry( QRect( 2, 2, w - 4, 20 ) );
199 slider.setFixedWidth( w - 110 ); 199 slider.setFixedWidth( w - 110 );
200 slider.setGeometry( QRect( 15, h - 22, w - 90, 20 ) ); 200 slider.setGeometry( QRect( 15, h - 22, w - 90, 20 ) );
201 slider.setBackgroundOrigin( QWidget::ParentOrigin ); 201 slider.setBackgroundOrigin( QWidget::ParentOrigin );
202 time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) ); 202 time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) );
203 203
204 upperLeftOfButtonMask.rx() = ( w - imgUp.width() ) / 2; 204 upperLeftOfButtonMask.rx() = ( w - imgUp.width() ) / 2;
205 upperLeftOfButtonMask.ry() = (( h - imgUp.height() ) / 2) - 10; 205 upperLeftOfButtonMask.ry() = (( h - imgUp.height() ) / 2) - 10;
206 QPoint p = upperLeftOfButtonMask; 206 QPoint p = upperLeftOfButtonMask;
207 207
208 QPixmap pixUp = combineImageWithBackground( imgUp, backgroundPixmap, p ); 208 QPixmap pixUp = combineImageWithBackground( imgUp, backgroundPixmap, p );
209 QPixmap pixDn = combineImageWithBackground( imgDn, backgroundPixmap, p ); 209 QPixmap pixDn = combineImageWithBackground( imgDn, backgroundPixmap, p );
210 210
211 for ( uint i = 0; i < buttons.count(); i++ ) { 211 for ( uint i = 0; i < buttons.count(); i++ ) {
212 if ( !buttons[i].mask.isNull() ) { 212 if ( !buttons[i].mask.isNull() ) {
213 buttons[i].pixUp = maskPixToMask( pixUp, buttons[i].mask ); 213 buttons[i].pixUp = maskPixToMask( pixUp, buttons[i].mask );
214 buttons[i].pixDown = maskPixToMask( pixDn, buttons[i].mask ); 214 buttons[i].pixDown = maskPixToMask( pixDn, buttons[i].mask );
215 } 215 }
216 } 216 }
217} 217}
218 218
219void AudioWidget::sliderPressed() { 219void AudioWidget::sliderPressed() {
220 audioSliderBeingMoved = TRUE; 220 audioSliderBeingMoved = TRUE;
221} 221}
222 222
223 223
224void AudioWidget::sliderReleased() { 224void AudioWidget::sliderReleased() {
225 audioSliderBeingMoved = FALSE; 225 audioSliderBeingMoved = FALSE;
226 if ( slider.width() == 0 ) 226 if ( slider.width() == 0 )
227 return; 227 return;
228 long val = long((double)slider.value() * mediaPlayerState.length() / slider.width()); 228 long val = long((double)slider.value() * mediaPlayerState.length() / slider.width());
229 mediaPlayerState.setPosition( val ); 229 mediaPlayerState.setPosition( val );
230} 230}
231 231
232void AudioWidget::setPosition( long i ) { 232void AudioWidget::setPosition( long i ) {
233 // qDebug("<<<<<<<<<<<<<<<<<<<<<<<<set position %d",i); 233 // qDebug("<<<<<<<<<<<<<<<<<<<<<<<<set position %d",i);
234 updateSlider( i, mediaPlayerState.length() ); 234 updateSlider( i, mediaPlayerState.length() );
235} 235}
236 236
237 237
238void AudioWidget::setLength( long max ) { 238void AudioWidget::setLength( long max ) {
239 updateSlider( mediaPlayerState.position(), max ); 239 updateSlider( mediaPlayerState.position(), max );
240} 240}
241 241
242 242
243void AudioWidget::setDisplayType( MediaPlayerState::DisplayType mediaType ) { 243void AudioWidget::setDisplayType( MediaPlayerState::DisplayType mediaType ) {
244 if ( mediaType == MediaPlayerState::Audio ) { 244 if ( mediaType == MediaPlayerState::Audio ) {
245 // startTimer( 150 ); 245 // startTimer( 150 );
246 showMaximized(); 246 showMaximized();
247 return; 247 return;
248 } 248 }
249 249
250 killTimers(); 250 killTimers();
251 hide(); 251 hide();
252} 252}
253 253
254 254
255void AudioWidget::setSeekable( bool isSeekable ) { 255void AudioWidget::setSeekable( bool isSeekable ) {
256 256
257 if ( !isSeekable ) { 257 if ( !isSeekable ) {
258 qDebug("<<<<<<<<<<<<<<file is STREAMING>>>>>>>>>>>>>>>>>>>"); 258 qDebug("<<<<<<<<<<<<<<file is STREAMING>>>>>>>>>>>>>>>>>>>");
259 if( !slider.isHidden()) { 259 if( !slider.isHidden()) {
260 slider.hide(); 260 slider.hide();
261 } 261 }
262 disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 262 disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
263 disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 263 disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
264 disconnect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 264 disconnect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
265 disconnect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 265 disconnect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
266 } else { 266 } else {
267 // this stops the slider from being moved, thus 267 // this stops the slider from being moved, thus
268 // does not stop stream when it reaches the end 268 // does not stop stream when it reaches the end
269 slider.show(); 269 slider.show();
270 qDebug( " CONNECT SET POSTION " ); 270 qDebug( " CONNECT SET POSTION " );
271 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 271 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
272 connect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 272 connect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
273 connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 273 connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
274 connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 274 connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
275 } 275 }
276} 276}
277 277
278 278
279static QString timeAsString( long length ) { 279static QString timeAsString( long length ) {
280 int minutes = length / 60; 280 int minutes = length / 60;
281 int seconds = length % 60; 281 int seconds = length % 60;
282 return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 ); 282 return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 );
283} 283}
284 284
285void AudioWidget::updateSlider( long i, long max ) { 285void AudioWidget::updateSlider( long i, long max ) {
286 286
287 time.setText( timeAsString( i ) + " / " + timeAsString( max ) ); 287 time.setText( timeAsString( i ) + " / " + timeAsString( max ) );
288// qDebug( timeAsString( i ) + " / " + timeAsString( max ) ) ; 288// qDebug( timeAsString( i ) + " / " + timeAsString( max ) ) ;
289 289
290 if ( max == 0 ) { 290 if ( max == 0 ) {
291 return; 291 return;
292 } 292 }
293 // Will flicker too much if we don't do this 293 // Will flicker too much if we don't do this
294 // Scale to something reasonable 294 // Scale to something reasonable
295 int width = slider.width(); 295 int width = slider.width();
296 int val = int((double)i * width / max); 296 int val = int((double)i * width / max);
297 if ( !audioSliderBeingMoved ) { 297 if ( !audioSliderBeingMoved ) {
298 if ( slider.value() != val ) { 298 if ( slider.value() != val ) {
299 slider.setValue( val ); 299 slider.setValue( val );
300 } 300 }
301 301
302 if ( slider.maxValue() != width ) { 302 if ( slider.maxValue() != width ) {
303 slider.setMaxValue( width ); 303 slider.setMaxValue( width );
304 } 304 }
305 } 305 }
306} 306}
307 307
308void AudioWidget::skipFor() { 308void AudioWidget::skipFor() {
309 skipDirection = +1; 309 skipDirection = +1;
310 startTimer( 50 ); 310 startTimer( 50 );
311 mediaPlayerState.setPosition( mediaPlayerState.position() + 2 ); 311 mediaPlayerState.setPosition( mediaPlayerState.position() + 2 );
312} 312}
313 313
314void AudioWidget::skipBack() { 314void AudioWidget::skipBack() {
315 skipDirection = -1; 315 skipDirection = -1;
316 startTimer( 50 ); 316 startTimer( 50 );
317 mediaPlayerState.setPosition( mediaPlayerState.position() - 2 ); 317 mediaPlayerState.setPosition( mediaPlayerState.position() - 2 );
318} 318}
319 319
320 320
321 321
322void AudioWidget::stopSkip() { 322void AudioWidget::stopSkip() {
323 killTimers(); 323 killTimers();
324} 324}
325 325
326 326
327void AudioWidget::timerEvent( QTimerEvent * ) { 327void AudioWidget::timerEvent( QTimerEvent * ) {
328 if ( skipDirection == +1 ) { 328 if ( skipDirection == +1 ) {
329 mediaPlayerState.setPosition( mediaPlayerState.position() + 2 ); 329 mediaPlayerState.setPosition( mediaPlayerState.position() + 2 );
330 } else if ( skipDirection == -1 ) { 330 } else if ( skipDirection == -1 ) {
331 mediaPlayerState.setPosition( mediaPlayerState.position() - 2 ); 331 mediaPlayerState.setPosition( mediaPlayerState.position() - 2 );
332 } 332 }
333} 333}
334 334
335 335
336void AudioWidget::mouseMoveEvent( QMouseEvent *event ) { 336void AudioWidget::mouseMoveEvent( QMouseEvent *event ) {
337 for ( unsigned int i = 0; i < buttons.count(); i++ ) { 337 for ( unsigned int i = 0; i < buttons.count(); i++ ) {
338
339 Button &button = buttons[ i ];
340
338 if ( event->state() == QMouseEvent::LeftButton ) { 341 if ( event->state() == QMouseEvent::LeftButton ) {
339 // The test to see if the mouse click is inside the button or not 342 // The test to see if the mouse click is inside the button or not
340 bool isOnButton = isOverButton( event->pos() - upperLeftOfButtonMask, i ); 343 bool isOnButton = isOverButton( event->pos() - upperLeftOfButtonMask, i );
341 344
342 if ( isOnButton && !buttons[i].isHeld ) { 345 if ( isOnButton && !button.isHeld ) {
343 buttons[i].isHeld = TRUE; 346 button.isHeld = TRUE;
344 toggleButton( buttons[ i ] ); 347 toggleButton( button );
345 switch (i) { 348 switch (i) {
346 case VolumeUp: 349 case VolumeUp:
347 emit moreClicked(); 350 emit moreClicked();
348 return; 351 return;
349 case VolumeDown: 352 case VolumeDown:
350 emit lessClicked(); 353 emit lessClicked();
351 return; 354 return;
352 case Forward: 355 case Forward:
353 emit forwardClicked(); 356 emit forwardClicked();
354 return; 357 return;
355 case Back: 358 case Back:
356 emit backClicked(); 359 emit backClicked();
357 return; 360 return;
358 } 361 }
359 } else if ( !isOnButton && buttons[i].isHeld ) { 362 } else if ( !isOnButton && button.isHeld ) {
360 buttons[i].isHeld = FALSE; 363 button.isHeld = FALSE;
361 toggleButton( buttons[ i ] ); 364 toggleButton( button );
362 } 365 }
363 } else { 366 } else {
364 if ( buttons[i].isHeld ) { 367 if ( button.isHeld ) {
365 buttons[i].isHeld = FALSE; 368 button.isHeld = FALSE;
366 if ( buttons[i].type != ToggleButton ) { 369 if ( button.type != ToggleButton ) {
367 setToggleButton( buttons[ i ], FALSE ); 370 setToggleButton( button, FALSE );
368 } 371 }
369 qDebug("mouseEvent %d", i); 372 qDebug("mouseEvent %d", i);
370 handleCommand( static_cast<Command>( i ), buttons[ i ].isDown ); 373 handleCommand( static_cast<Command>( i ), button.isDown );
371 } 374 }
372 } 375 }
373 } 376 }
374} 377}
375 378
376 379
377void AudioWidget::mousePressEvent( QMouseEvent *event ) { 380void AudioWidget::mousePressEvent( QMouseEvent *event ) {
378 mouseMoveEvent( event ); 381 mouseMoveEvent( event );
379} 382}
380 383
381 384
382void AudioWidget::mouseReleaseEvent( QMouseEvent *event ) { 385void AudioWidget::mouseReleaseEvent( QMouseEvent *event ) {
383 mouseMoveEvent( event ); 386 mouseMoveEvent( event );
384} 387}
385 388
386 389
387void AudioWidget::showEvent( QShowEvent* ) { 390void AudioWidget::showEvent( QShowEvent* ) {
388 QMouseEvent event( QEvent::MouseMove, QPoint( 0, 0 ), 0, 0 ); 391 QMouseEvent event( QEvent::MouseMove, QPoint( 0, 0 ), 0, 0 );
389 mouseMoveEvent( &event ); 392 mouseMoveEvent( &event );
390} 393}
391 394
392void AudioWidget::keyReleaseEvent( QKeyEvent *e) { 395void AudioWidget::keyReleaseEvent( QKeyEvent *e) {
393 switch ( e->key() ) { 396 switch ( e->key() ) {
394 ////////////////////////////// Zaurus keys 397 ////////////////////////////// Zaurus keys
395 case Key_Home: 398 case Key_Home:
396 break; 399 break;
397 case Key_F9: //activity 400 case Key_F9: //activity
398 hide(); 401 hide();
399 // qDebug("Audio F9"); 402 // qDebug("Audio F9");
400 break; 403 break;
401 case Key_F10: //contacts 404 case Key_F10: //contacts
402 break; 405 break;
403 case Key_F11: //menu 406 case Key_F11: //menu
404 mediaPlayerState.toggleBlank(); 407 mediaPlayerState.toggleBlank();
405 break; 408 break;
406 case Key_F12: //home 409 case Key_F12: //home
407 break; 410 break;
408 case Key_F13: //mail 411 case Key_F13: //mail
409 mediaPlayerState.toggleBlank(); 412 mediaPlayerState.toggleBlank();
410 break; 413 break;
411 case Key_Space: { 414 case Key_Space: {
412 mediaPlayerState.togglePaused(); 415 mediaPlayerState.togglePaused();
413 } 416 }
414 break; 417 break;
415 case Key_Down: 418 case Key_Down:
416 // toggleButton(6); 419 // toggleButton(6);
417 emit lessClicked(); 420 emit lessClicked();
418 emit lessReleased(); 421 emit lessReleased();
419 // toggleButton(6); 422 // toggleButton(6);
420 break; 423 break;
421 case Key_Up: 424 case Key_Up:
422 // toggleButton(5); 425 // toggleButton(5);
423 emit moreClicked(); 426 emit moreClicked();
424 emit moreReleased(); 427 emit moreReleased();
425 // toggleButton(5); 428 // toggleButton(5);
426 break; 429 break;
427 case Key_Right: 430 case Key_Right:
428 // toggleButton(3); 431 // toggleButton(3);
429 mediaPlayerState.setNext(); 432 mediaPlayerState.setNext();
430 // toggleButton(3); 433 // toggleButton(3);
431 break; 434 break;
432 case Key_Left: 435 case Key_Left:
433 // toggleButton(4); 436 // toggleButton(4);
434 mediaPlayerState.setPrev(); 437 mediaPlayerState.setPrev();
435 // toggleButton(4); 438 // toggleButton(4);
436 break; 439 break;
437 case Key_Escape: { 440 case Key_Escape: {
438 } 441 }
439 break; 442 break;
440 443
441 }; 444 };
442} 445}
diff --git a/noncore/multimedia/opieplayer2/videowidget.cpp b/noncore/multimedia/opieplayer2/videowidget.cpp
index 673c9e8..9782b68 100644
--- a/noncore/multimedia/opieplayer2/videowidget.cpp
+++ b/noncore/multimedia/opieplayer2/videowidget.cpp
@@ -1,433 +1,436 @@
1/* 1/*
2                This file is part of the Opie Project 2                This file is part of the Opie Project
3 3
4              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> 4              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org>
5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com> 5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com>
6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> 6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
7 =. 7 =.
8 .=l. 8 .=l.
9           .>+-= 9           .>+-=
10 _;:,     .>    :=|. This program is free software; you can 10 _;:,     .>    :=|. This program is free software; you can
11.> <`_,   >  .   <= redistribute it and/or modify it under 11.> <`_,   >  .   <= redistribute it and/or modify it under
12:`=1 )Y*s>-.--   : the terms of the GNU General Public 12:`=1 )Y*s>-.--   : the terms of the GNU General Public
13.="- .-=="i,     .._ License as published by the Free Software 13.="- .-=="i,     .._ License as published by the Free Software
14 - .   .-<_>     .<> Foundation; either version 2 of the License, 14 - .   .-<_>     .<> Foundation; either version 2 of the License,
15     ._= =}       : or (at your option) any later version. 15     ._= =}       : or (at your option) any later version.
16    .%`+i>       _;_. 16    .%`+i>       _;_.
17    .i_,=:_.      -<s. This program is distributed in the hope that 17    .i_,=:_.      -<s. This program is distributed in the hope that
18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
19    : ..    .:,     . . . without even the implied warranty of 19    : ..    .:,     . . . without even the implied warranty of
20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.=       =       ; Library General Public License for more 22..}^=.=       =       ; Library General Public License for more
23++=   -.     .`     .: details. 23++=   -.     .`     .: details.
24 :     =  ...= . :.=- 24 :     =  ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25 -.   .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = Library General Public License along with 26  -_. . .   )=.  = Library General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34#include <qpe/qpeapplication.h> 34#include <qpe/qpeapplication.h>
35#include <qpe/resource.h> 35#include <qpe/resource.h>
36#include <qpe/config.h> 36#include <qpe/config.h>
37 37
38 38
39#include <qwidget.h> 39#include <qwidget.h>
40#include <qpainter.h> 40#include <qpainter.h>
41#include <qpixmap.h> 41#include <qpixmap.h>
42#include <qslider.h> 42#include <qslider.h>
43#include <qdrawutil.h> 43#include <qdrawutil.h>
44#include "videowidget.h" 44#include "videowidget.h"
45#include "mediaplayerstate.h" 45#include "mediaplayerstate.h"
46#include "playlistwidget.h" 46#include "playlistwidget.h"
47 47
48 48
49#ifdef Q_WS_QWS 49#ifdef Q_WS_QWS
50# define USE_DIRECT_PAINTER 50# define USE_DIRECT_PAINTER
51# include <qdirectpainter_qws.h> 51# include <qdirectpainter_qws.h>
52# include <qgfxraster_qws.h> 52# include <qgfxraster_qws.h>
53#endif 53#endif
54 54
55 55
56namespace 56namespace
57{ 57{
58 58
59const int xo = 2; // movable x offset 59const int xo = 2; // movable x offset
60const int yo = 0; // movable y offset 60const int yo = 0; // movable y offset
61 61
62const char * const skinV_mask_file_names[7] = { 62const char * const skinV_mask_file_names[7] = {
63"play","stop","fwd","back","up","down","full" 63"play","stop","fwd","back","up","down","full"
64}; 64};
65 65
66} 66}
67 67
68VideoWidget::VideoWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name ) 68VideoWidget::VideoWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name )
69 : MediaWidget( playList, mediaPlayerState, parent, name ), scaledWidth( 0 ), scaledHeight( 0 ) 69 : MediaWidget( playList, mediaPlayerState, parent, name ), scaledWidth( 0 ), scaledHeight( 0 )
70{ 70{
71 setCaption( tr("OpiePlayer - Video") ); 71 setCaption( tr("OpiePlayer - Video") );
72 72
73 Button defaultButton; 73 Button defaultButton;
74 Button toggleButton = defaultButton; 74 Button toggleButton = defaultButton;
75 toggleButton.type = ToggleButton; 75 toggleButton.type = ToggleButton;
76 76
77 buttons.insert( 0, toggleButton ); // play 77 buttons.insert( 0, toggleButton ); // play
78 buttons.insert( 1, toggleButton ); // stop 78 buttons.insert( 1, toggleButton ); // stop
79 buttons.insert( 2, toggleButton ); // next 79 buttons.insert( 2, toggleButton ); // next
80 buttons.insert( 3, toggleButton ); // previous 80 buttons.insert( 3, toggleButton ); // previous
81 buttons.insert( 4, toggleButton ); // volUp 81 buttons.insert( 4, toggleButton ); // volUp
82 buttons.insert( 5, toggleButton ); // volDown 82 buttons.insert( 5, toggleButton ); // volDown
83 buttons.insert( 6, toggleButton ); // fullscreen 83 buttons.insert( 6, toggleButton ); // fullscreen
84 84
85 videoFrame = new XineVideoWidget ( this, "Video frame" ); 85 videoFrame = new XineVideoWidget ( this, "Video frame" );
86 86
87 connect ( videoFrame, SIGNAL( videoResized ( const QSize & )), this, SIGNAL( videoResized ( const QSize & ))); 87 connect ( videoFrame, SIGNAL( videoResized ( const QSize & )), this, SIGNAL( videoResized ( const QSize & )));
88 connect ( videoFrame, SIGNAL( clicked () ), this, SLOT ( backToNormal() ) ); 88 connect ( videoFrame, SIGNAL( clicked () ), this, SLOT ( backToNormal() ) );
89 89
90 Config cfg("OpiePlayer"); 90 Config cfg("OpiePlayer");
91 cfg.setGroup("Options"); 91 cfg.setGroup("Options");
92 skin = cfg.readEntry("Skin","default"); 92 skin = cfg.readEntry("Skin","default");
93 93
94 QString skinPath = "opieplayer2/skins/" + skin; 94 QString skinPath = "opieplayer2/skins/" + skin;
95 backgroundPixmap = QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) ); 95 backgroundPixmap = QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) );
96 imgUp = QImage( Resource::loadImage( QString("%1/skinV_up").arg(skinPath) ) ); 96 imgUp = QImage( Resource::loadImage( QString("%1/skinV_up").arg(skinPath) ) );
97 imgDn = QImage( Resource::loadImage( QString("%1/skinV_down").arg(skinPath) ) ); 97 imgDn = QImage( Resource::loadImage( QString("%1/skinV_down").arg(skinPath) ) );
98 98
99 buttonMask = QImage( imgUp.width(), imgUp.height(), 8, 255 ); 99 buttonMask = QImage( imgUp.width(), imgUp.height(), 8, 255 );
100 buttonMask.fill( 0 ); 100 buttonMask.fill( 0 );
101 101
102 for ( int i = 0; i < 7; i++ ) { 102 for ( int i = 0; i < 7; i++ ) {
103 Button &button = buttons[ i ]; 103 Button &button = buttons[ i ];
104 104
105 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + "/skinV_mask_" + skinV_mask_file_names[i] + ".png" ); 105 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + "/skinV_mask_" + skinV_mask_file_names[i] + ".png" );
106 button.mask = QBitmap( filename ); 106 button.mask = QBitmap( filename );
107 107
108 if ( !button.mask.isNull() ) { 108 if ( !button.mask.isNull() ) {
109 QImage imgMask = button.mask.convertToImage(); 109 QImage imgMask = button.mask.convertToImage();
110 uchar **dest = buttonMask.jumpTable(); 110 uchar **dest = buttonMask.jumpTable();
111 for ( int y = 0; y < imgUp.height(); y++ ) { 111 for ( int y = 0; y < imgUp.height(); y++ ) {
112 uchar *line = dest[y]; 112 uchar *line = dest[y];
113 for ( int x = 0; x < imgUp.width(); x++ ) { 113 for ( int x = 0; x < imgUp.width(); x++ ) {
114 if ( !qRed( imgMask.pixel( x, y ) ) ) 114 if ( !qRed( imgMask.pixel( x, y ) ) )
115 line[x] = i + 1; 115 line[x] = i + 1;
116 } 116 }
117 } 117 }
118 } 118 }
119 } 119 }
120 120
121 setBackgroundPixmap( backgroundPixmap ); 121 setBackgroundPixmap( backgroundPixmap );
122 122
123 slider = new QSlider( Qt::Horizontal, this ); 123 slider = new QSlider( Qt::Horizontal, this );
124 slider->setMinValue( 0 ); 124 slider->setMinValue( 0 );
125 slider->setMaxValue( 1 ); 125 slider->setMaxValue( 1 );
126 slider->setBackgroundPixmap( Resource::loadPixmap( backgroundPix ) ); 126 slider->setBackgroundPixmap( Resource::loadPixmap( backgroundPix ) );
127 //slider->setFocusPolicy( QWidget::NoFocus ); 127 //slider->setFocusPolicy( QWidget::NoFocus );
128 128
129 resizeEvent( NULL ); 129 resizeEvent( NULL );
130 130
131 setLength( mediaPlayerState.length() ); 131 setLength( mediaPlayerState.length() );
132 setPosition( mediaPlayerState.position() ); 132 setPosition( mediaPlayerState.position() );
133 setFullscreen( mediaPlayerState.isFullscreen() ); 133 setFullscreen( mediaPlayerState.isFullscreen() );
134 setPlaying( mediaPlayerState.isPlaying() ); 134 setPlaying( mediaPlayerState.isPlaying() );
135} 135}
136 136
137 137
138VideoWidget::~VideoWidget() 138VideoWidget::~VideoWidget()
139{ 139{
140} 140}
141 141
142QPixmap *combineVImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { 142QPixmap *combineVImageWithBackground( QImage img, QPixmap bg, QPoint offset ) {
143 QPixmap pix( img.width(), img.height() ); 143 QPixmap pix( img.width(), img.height() );
144 QPainter p( &pix ); 144 QPainter p( &pix );
145 p.drawTiledPixmap( pix.rect(), bg, offset ); 145 p.drawTiledPixmap( pix.rect(), bg, offset );
146 p.drawImage( 0, 0, img ); 146 p.drawImage( 0, 0, img );
147 return new QPixmap( pix ); 147 return new QPixmap( pix );
148} 148}
149 149
150QPixmap maskVPixToMask( QPixmap pix, QBitmap mask ) { 150QPixmap maskVPixToMask( QPixmap pix, QBitmap mask ) {
151 QPixmap pixmap( pix ); 151 QPixmap pixmap( pix );
152 pixmap.setMask( mask ); 152 pixmap.setMask( mask );
153 return pixmap; 153 return pixmap;
154} 154}
155 155
156void VideoWidget::resizeEvent( QResizeEvent * ) { 156void VideoWidget::resizeEvent( QResizeEvent * ) {
157 int h = height(); 157 int h = height();
158 int w = width(); 158 int w = width();
159 //int Vh = 160; 159 //int Vh = 160;
160 //int Vw = 220; 160 //int Vw = 220;
161 161
162 slider->setFixedWidth( w - 20 ); 162 slider->setFixedWidth( w - 20 );
163 slider->setGeometry( QRect( 15, h - 22, w - 90, 20 ) ); 163 slider->setGeometry( QRect( 15, h - 22, w - 90, 20 ) );
164 slider->setBackgroundOrigin( QWidget::ParentOrigin ); 164 slider->setBackgroundOrigin( QWidget::ParentOrigin );
165 slider->setFocusPolicy( QWidget::NoFocus ); 165 slider->setFocusPolicy( QWidget::NoFocus );
166 slider->setBackgroundPixmap( backgroundPixmap ); 166 slider->setBackgroundPixmap( backgroundPixmap );
167 167
168 upperLeftOfButtonMask.rx() = 0;// ( imgUp->width() ) / 2; 168 upperLeftOfButtonMask.rx() = 0;// ( imgUp->width() ) / 2;
169 if(w>h) 169 if(w>h)
170 upperLeftOfButtonMask.ry() = 0; 170 upperLeftOfButtonMask.ry() = 0;
171 else 171 else
172 upperLeftOfButtonMask.ry() = 185;//(( Vh - imgUp->height() ) / 2) - 10; 172 upperLeftOfButtonMask.ry() = 185;//(( Vh - imgUp->height() ) / 2) - 10;
173 QPoint p = upperLeftOfButtonMask; 173 QPoint p = upperLeftOfButtonMask;
174 174
175 QPixmap *pixUp = combineVImageWithBackground( imgUp, backgroundPixmap, p ); 175 QPixmap *pixUp = combineVImageWithBackground( imgUp, backgroundPixmap, p );
176 QPixmap *pixDn = combineVImageWithBackground( imgDn, backgroundPixmap, p ); 176 QPixmap *pixDn = combineVImageWithBackground( imgDn, backgroundPixmap, p );
177 177
178 for ( int i = 0; i < 7; i++ ) { 178 for ( int i = 0; i < 7; i++ ) {
179 Button &button = buttons[ i ]; 179 Button &button = buttons[ i ];
180 180
181 if ( !button.mask.isNull() ) { 181 if ( !button.mask.isNull() ) {
182 button.pixUp = maskVPixToMask( *pixUp, button.mask ); 182 button.pixUp = maskVPixToMask( *pixUp, button.mask );
183 button.pixDown = maskVPixToMask( *pixDn, button.mask ); 183 button.pixDown = maskVPixToMask( *pixDn, button.mask );
184 } 184 }
185 } 185 }
186 186
187 delete pixUp; 187 delete pixUp;
188 delete pixDn; 188 delete pixDn;
189} 189}
190 190
191static bool videoSliderBeingMoved = FALSE; 191static bool videoSliderBeingMoved = FALSE;
192 192
193void VideoWidget::sliderPressed() { 193void VideoWidget::sliderPressed() {
194 videoSliderBeingMoved = TRUE; 194 videoSliderBeingMoved = TRUE;
195} 195}
196 196
197void VideoWidget::sliderReleased() { 197void VideoWidget::sliderReleased() {
198 videoSliderBeingMoved = FALSE; 198 videoSliderBeingMoved = FALSE;
199 if ( slider->width() == 0 ) { 199 if ( slider->width() == 0 ) {
200 return; 200 return;
201 } 201 }
202 long val = long((double)slider->value() * mediaPlayerState.length() / slider->width()); 202 long val = long((double)slider->value() * mediaPlayerState.length() / slider->width());
203 mediaPlayerState.setPosition( val ); 203 mediaPlayerState.setPosition( val );
204} 204}
205 205
206void VideoWidget::setPosition( long i ) { 206void VideoWidget::setPosition( long i ) {
207 updateSlider( i, mediaPlayerState.length() ); 207 updateSlider( i, mediaPlayerState.length() );
208} 208}
209 209
210 210
211void VideoWidget::setLength( long max ) { 211void VideoWidget::setLength( long max ) {
212 updateSlider( mediaPlayerState.position(), max ); 212 updateSlider( mediaPlayerState.position(), max );
213} 213}
214 214
215void VideoWidget::setDisplayType( MediaPlayerState::DisplayType displayType ) 215void VideoWidget::setDisplayType( MediaPlayerState::DisplayType displayType )
216{ 216{
217 if ( displayType == MediaPlayerState::Video ) { 217 if ( displayType == MediaPlayerState::Video ) {
218 makeVisible(); 218 makeVisible();
219 return; 219 return;
220 } 220 }
221 221
222 // Effectively blank the view next time we show it so it looks nicer 222 // Effectively blank the view next time we show it so it looks nicer
223 scaledWidth = 0; 223 scaledWidth = 0;
224 scaledHeight = 0; 224 scaledHeight = 0;
225 hide(); 225 hide();
226} 226}
227 227
228void VideoWidget::updateSlider( long i, long max ) { 228void VideoWidget::updateSlider( long i, long max ) {
229 // Will flicker too much if we don't do this 229 // Will flicker too much if we don't do this
230 if ( max == 0 ) { 230 if ( max == 0 ) {
231 return; 231 return;
232 } 232 }
233 int width = slider->width(); 233 int width = slider->width();
234 int val = int((double)i * width / max); 234 int val = int((double)i * width / max);
235 if ( !mediaPlayerState.isFullscreen() && !videoSliderBeingMoved ) { 235 if ( !mediaPlayerState.isFullscreen() && !videoSliderBeingMoved ) {
236 if ( slider->value() != val ) { 236 if ( slider->value() != val ) {
237 slider->setValue( val ); 237 slider->setValue( val );
238 } 238 }
239 if ( slider->maxValue() != width ) { 239 if ( slider->maxValue() != width ) {
240 slider->setMaxValue( width ); 240 slider->setMaxValue( width );
241 } 241 }
242 } 242 }
243} 243}
244 244
245void VideoWidget::mouseMoveEvent( QMouseEvent *event ) { 245void VideoWidget::mouseMoveEvent( QMouseEvent *event ) {
246 for ( unsigned int i = 0; i < buttons.count(); i++ ) { 246 for ( unsigned int i = 0; i < buttons.count(); i++ ) {
247
248 Button &button = buttons[ i ];
249
247 if ( event->state() == QMouseEvent::LeftButton ) { 250 if ( event->state() == QMouseEvent::LeftButton ) {
248 // The test to see if the mouse click is inside the button or not 251 // The test to see if the mouse click is inside the button or not
249 bool isOnButton = isOverButton( event->pos() - upperLeftOfButtonMask, i ); 252 bool isOnButton = isOverButton( event->pos() - upperLeftOfButtonMask, i );
250 253
251 if ( isOnButton && !buttons[i].isHeld ) { 254 if ( isOnButton && !button.isHeld ) {
252 buttons[i].isHeld = TRUE; 255 button.isHeld = TRUE;
253 toggleButton( buttons[ i ] ); 256 toggleButton( button );
254 257
255 switch (i) { 258 switch (i) {
256 case VideoVolUp: 259 case VideoVolUp:
257 emit moreClicked(); 260 emit moreClicked();
258 return; 261 return;
259 case VideoVolDown: 262 case VideoVolDown:
260 emit lessClicked(); 263 emit lessClicked();
261 return; 264 return;
262 } 265 }
263 } else if ( !isOnButton && buttons[i].isHeld ) { 266 } else if ( !isOnButton && button.isHeld ) {
264 buttons[i].isHeld = FALSE; 267 button.isHeld = FALSE;
265 toggleButton( buttons[ i ] ); 268 toggleButton( button );
266 } 269 }
267 } else { 270 } else {
268 271
269 if ( buttons[i].isHeld ) { 272 if ( button.isHeld ) {
270 buttons[i].isHeld = FALSE; 273 button.isHeld = FALSE;
271 if ( buttons[i].type != ToggleButton ) { 274 if ( button.type != ToggleButton ) {
272 setToggleButton( buttons[ i ], FALSE ); 275 setToggleButton( button, FALSE );
273 } 276 }
274 277
275 switch(i) { 278 switch(i) {
276 279
277 case VideoPlay: { 280 case VideoPlay: {
278 if( mediaPlayerState.isPaused() ) { 281 if( mediaPlayerState.isPaused() ) {
279 setToggleButton( buttons[ i ], FALSE ); 282 setToggleButton( button, FALSE );
280 mediaPlayerState.setPaused( FALSE ); 283 mediaPlayerState.setPaused( FALSE );
281 return; 284 return;
282 } else if( !mediaPlayerState.isPaused() ) { 285 } else if( !mediaPlayerState.isPaused() ) {
283 setToggleButton( buttons[ i ], TRUE ); 286 setToggleButton( button, TRUE );
284 mediaPlayerState.setPaused( TRUE ); 287 mediaPlayerState.setPaused( TRUE );
285 return; 288 return;
286 } else { 289 } else {
287 return; 290 return;
288 } 291 }
289 } 292 }
290 293
291 case VideoStop: mediaPlayerState.setPlaying( FALSE ); return; 294 case VideoStop: mediaPlayerState.setPlaying( FALSE ); return;
292 case VideoNext: if( playList.currentTab() == PlayListWidget::CurrentPlayList ) mediaPlayerState.setNext(); return; 295 case VideoNext: if( playList.currentTab() == PlayListWidget::CurrentPlayList ) mediaPlayerState.setNext(); return;
293 case VideoPrevious: if( playList.currentTab() == PlayListWidget::CurrentPlayList ) mediaPlayerState.setPrev(); return; 296 case VideoPrevious: if( playList.currentTab() == PlayListWidget::CurrentPlayList ) mediaPlayerState.setPrev(); return;
294 case VideoVolUp: emit moreReleased(); return; 297 case VideoVolUp: emit moreReleased(); return;
295 case VideoVolDown: emit lessReleased(); return; 298 case VideoVolDown: emit lessReleased(); return;
296 case VideoFullscreen: mediaPlayerState.setFullscreen( TRUE ); makeVisible(); return; 299 case VideoFullscreen: mediaPlayerState.setFullscreen( TRUE ); makeVisible(); return;
297 } 300 }
298 } 301 }
299 } 302 }
300 } 303 }
301} 304}
302 305
303void VideoWidget::mousePressEvent( QMouseEvent *event ) { 306void VideoWidget::mousePressEvent( QMouseEvent *event ) {
304 mouseMoveEvent( event ); 307 mouseMoveEvent( event );
305} 308}
306 309
307void VideoWidget::mouseReleaseEvent( QMouseEvent *event ) { 310void VideoWidget::mouseReleaseEvent( QMouseEvent *event ) {
308 if ( mediaPlayerState.isFullscreen() ) { 311 if ( mediaPlayerState.isFullscreen() ) {
309 mediaPlayerState.setFullscreen( FALSE ); 312 mediaPlayerState.setFullscreen( FALSE );
310 makeVisible(); 313 makeVisible();
311 } 314 }
312 mouseMoveEvent( event ); 315 mouseMoveEvent( event );
313} 316}
314 317
315void VideoWidget::showEvent( QShowEvent* ) { 318void VideoWidget::showEvent( QShowEvent* ) {
316 QMouseEvent event( QEvent::MouseMove, QPoint( 0, 0 ), 0, 0 ); 319 QMouseEvent event( QEvent::MouseMove, QPoint( 0, 0 ), 0, 0 );
317 mouseMoveEvent( &event ); 320 mouseMoveEvent( &event );
318} 321}
319 322
320 323
321 void VideoWidget::backToNormal() { 324 void VideoWidget::backToNormal() {
322 mediaPlayerState.setFullscreen( FALSE ); 325 mediaPlayerState.setFullscreen( FALSE );
323 makeVisible(); 326 makeVisible();
324 } 327 }
325 328
326void VideoWidget::makeVisible() { 329void VideoWidget::makeVisible() {
327 if ( mediaPlayerState.isFullscreen() ) { 330 if ( mediaPlayerState.isFullscreen() ) {
328 setBackgroundMode( QWidget::NoBackground ); 331 setBackgroundMode( QWidget::NoBackground );
329 showFullScreen(); 332 showFullScreen();
330 resize( qApp->desktop()->size() ); 333 resize( qApp->desktop()->size() );
331 videoFrame-> setGeometry ( 0, 0, width ( ), height ( )); 334 videoFrame-> setGeometry ( 0, 0, width ( ), height ( ));
332 335
333 slider->hide(); 336 slider->hide();
334 disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 337 disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
335 disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 338 disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
336 disconnect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 339 disconnect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
337 disconnect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 340 disconnect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
338 341
339 } else { 342 } else {
340 showNormal(); 343 showNormal();
341 showMaximized(); 344 showMaximized();
342 setBackgroundPixmap( backgroundPixmap ); 345 setBackgroundPixmap( backgroundPixmap );
343 QWidget *d = QApplication::desktop(); 346 QWidget *d = QApplication::desktop();
344 int w = d->width(); 347 int w = d->width();
345 int h = d->height(); 348 int h = d->height();
346 349
347 if(w>h) { 350 if(w>h) {
348 int newW=(w/2)-(246/2); //this will only work with 320x240 351 int newW=(w/2)-(246/2); //this will only work with 320x240
349 videoFrame->setGeometry( QRect( newW, 4, 240, 170 ) ); 352 videoFrame->setGeometry( QRect( newW, 4, 240, 170 ) );
350 } else { 353 } else {
351 videoFrame->setGeometry( QRect( 0, 30, 240, 170 ) ); 354 videoFrame->setGeometry( QRect( 0, 30, 240, 170 ) );
352 } 355 }
353 356
354 if ( !mediaPlayerState.isSeekable() ) { 357 if ( !mediaPlayerState.isSeekable() ) {
355 if( !slider->isHidden()) { 358 if( !slider->isHidden()) {
356 slider->hide(); 359 slider->hide();
357 } 360 }
358 disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 361 disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
359 disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 362 disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
360 disconnect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 363 disconnect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
361 disconnect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 364 disconnect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
362 } else { 365 } else {
363 slider->show(); 366 slider->show();
364 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 367 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
365 connect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 368 connect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
366 connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 369 connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
367 connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 370 connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
368 } 371 }
369 } 372 }
370} 373}
371 374
372void VideoWidget::keyReleaseEvent( QKeyEvent *e) { 375void VideoWidget::keyReleaseEvent( QKeyEvent *e) {
373 switch ( e->key() ) { 376 switch ( e->key() ) {
374////////////////////////////// Zaurus keys 377////////////////////////////// Zaurus keys
375 case Key_Home: 378 case Key_Home:
376 break; 379 break;
377 case Key_F9: //activity 380 case Key_F9: //activity
378 break; 381 break;
379 case Key_F10: //contacts 382 case Key_F10: //contacts
380// hide(); 383// hide();
381 break; 384 break;
382 case Key_F11: //menu 385 case Key_F11: //menu
383 break; 386 break;
384 case Key_F12: //home 387 case Key_F12: //home
385 break; 388 break;
386 case Key_F13: //mail 389 case Key_F13: //mail
387 break; 390 break;
388 case Key_Space: { 391 case Key_Space: {
389 if(mediaPlayerState.isPlaying()) { 392 if(mediaPlayerState.isPlaying()) {
390 mediaPlayerState.setPlaying(FALSE); 393 mediaPlayerState.setPlaying(FALSE);
391 } else { 394 } else {
392 mediaPlayerState.setPlaying(TRUE); 395 mediaPlayerState.setPlaying(TRUE);
393 } 396 }
394 } 397 }
395 break; 398 break;
396 case Key_Down: 399 case Key_Down:
397// toggleButton(6); 400// toggleButton(6);
398 emit lessClicked(); 401 emit lessClicked();
399 emit lessReleased(); 402 emit lessReleased();
400// toggleButton(6); 403// toggleButton(6);
401 break; 404 break;
402 case Key_Up: 405 case Key_Up:
403// toggleButton(5); 406// toggleButton(5);
404 emit moreClicked(); 407 emit moreClicked();
405 emit moreReleased(); 408 emit moreReleased();
406// toggleButton(5); 409// toggleButton(5);
407 break; 410 break;
408 case Key_Right: 411 case Key_Right:
409 mediaPlayerState.setNext(); 412 mediaPlayerState.setNext();
410 break; 413 break;
411 case Key_Left: 414 case Key_Left:
412 mediaPlayerState.setPrev(); 415 mediaPlayerState.setPrev();
413 break; 416 break;
414 case Key_Escape: 417 case Key_Escape:
415 break; 418 break;
416 419
417 }; 420 };
418} 421}
419 422
420XineVideoWidget* VideoWidget::vidWidget() { 423XineVideoWidget* VideoWidget::vidWidget() {
421 return videoFrame; 424 return videoFrame;
422} 425}
423 426
424 427
425void VideoWidget::setFullscreen ( bool b ) { 428void VideoWidget::setFullscreen ( bool b ) {
426 setToggleButton( buttons[ VideoFullscreen ], b ); 429 setToggleButton( buttons[ VideoFullscreen ], b );
427} 430}
428 431
429 432
430void VideoWidget::setPlaying( bool b) { 433void VideoWidget::setPlaying( bool b) {
431 setToggleButton( buttons[ VideoPlay ], b ); 434 setToggleButton( buttons[ VideoPlay ], b );
432} 435}
433 436