summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/audiowidget.cpp23
-rw-r--r--noncore/multimedia/opieplayer2/mediaplayer.cpp22
2 files changed, 35 insertions, 10 deletions
diff --git a/noncore/multimedia/opieplayer2/audiowidget.cpp b/noncore/multimedia/opieplayer2/audiowidget.cpp
index 300a5c8..303834a 100644
--- a/noncore/multimedia/opieplayer2/audiowidget.cpp
+++ b/noncore/multimedia/opieplayer2/audiowidget.cpp
@@ -5,387 +5,394 @@
5 5
6#include <qwidget.h> 6#include <qwidget.h>
7#include <qpixmap.h> 7#include <qpixmap.h>
8#include <qbutton.h> 8#include <qbutton.h>
9#include <qpainter.h> 9#include <qpainter.h>
10#include <qframe.h> 10#include <qframe.h>
11#include <qlayout.h> 11#include <qlayout.h>
12 12
13#include <stdlib.h> 13#include <stdlib.h>
14#include <stdio.h> 14#include <stdio.h>
15 15
16#include "audiowidget.h" 16#include "audiowidget.h"
17#include "mediaplayerstate.h" 17#include "mediaplayerstate.h"
18 18
19extern MediaPlayerState *mediaPlayerState; 19extern MediaPlayerState *mediaPlayerState;
20 20
21static const int xo = -2; // movable x offset 21static const int xo = -2; // movable x offset
22static const int yo = 22; // movable y offset 22static const int yo = 22; // movable y offset
23 23
24 24
25Ticker::Ticker( QWidget* parent=0 ) : QFrame( parent ) { 25Ticker::Ticker( QWidget* parent=0 ) : QFrame( parent ) {
26 setFrameStyle( WinPanel | Sunken ); 26 setFrameStyle( WinPanel | Sunken );
27 setText( "No Song" ); 27 setText( "No Song" );
28} 28}
29 29
30Ticker::~Ticker() { 30Ticker::~Ticker() {
31} 31}
32 32
33void Ticker::setText( const QString& text ) { 33void Ticker::setText( const QString& text ) {
34 pos = 0; // reset it everytime the text is changed 34 pos = 0; // reset it everytime the text is changed
35 scrollText = text; 35 scrollText = text;
36 pixelLen = fontMetrics().width( scrollText ); 36 pixelLen = fontMetrics().width( scrollText );
37 killTimers(); 37 killTimers();
38 if ( pixelLen > width() ) { 38 if ( pixelLen > width() ) {
39 startTimer( 50 ); 39 startTimer( 50 );
40 } 40 }
41 update(); 41 update();
42} 42}
43 43
44 44
45void Ticker::timerEvent( QTimerEvent * ) { 45void Ticker::timerEvent( QTimerEvent * ) {
46 pos = ( pos + 1 > pixelLen ) ? 0 : pos + 1; 46 pos = ( pos + 1 > pixelLen ) ? 0 : pos + 1;
47 scroll( -1, 0, contentsRect() ); 47 scroll( -1, 0, contentsRect() );
48 repaint( FALSE ); 48 repaint( FALSE );
49} 49}
50 50
51void Ticker::drawContents( QPainter *p ) { 51void Ticker::drawContents( QPainter *p ) {
52 for ( int i = 0; i - pos < width() && (i < 1 || pixelLen > width()); i += pixelLen ) 52 for ( int i = 0; i - pos < width() && (i < 1 || pixelLen > width()); i += pixelLen )
53 p->drawText( i - pos, 0, INT_MAX, height(), AlignVCenter, scrollText ); 53 p->drawText( i - pos, 0, INT_MAX, height(), AlignVCenter, scrollText );
54 QPixmap pm( width(), height() ); 54 QPixmap pm( width(), height() );
55 pm.fill( colorGroup().base() ); 55 pm.fill( colorGroup().base() );
56 QPainter pmp( &pm ); 56 QPainter pmp( &pm );
57 for ( int i = 0; i - pos < width() && (i < 1 || pixelLen > width()); i += pixelLen ) { 57 for ( int i = 0; i - pos < width() && (i < 1 || pixelLen > width()); i += pixelLen ) {
58 pmp.drawText( i - pos, 0, INT_MAX, height(), AlignVCenter, scrollText ); 58 pmp.drawText( i - pos, 0, INT_MAX, height(), AlignVCenter, scrollText );
59 } 59 }
60 p->drawPixmap( 0, 0, pm ); 60 p->drawPixmap( 0, 0, pm );
61} 61}
62 62
63struct MediaButton { 63struct MediaButton {
64 bool isToggle, isHeld, isDown; 64 bool isToggle, isHeld, isDown;
65}; 65};
66 66
67//Layout information for the audioButtons (and if it is a toggle button or not) 67//Layout information for the audioButtons (and if it is a toggle button or not)
68MediaButton audioButtons[] = { 68MediaButton audioButtons[] = {
69 { TRUE, FALSE, FALSE }, // play 69 { TRUE, FALSE, FALSE }, // play
70 { FALSE, FALSE, FALSE }, // stop 70 { FALSE, FALSE, FALSE }, // stop
71 { TRUE, FALSE, FALSE }, // pause 71 { TRUE, FALSE, FALSE }, // pause
72 { FALSE, FALSE, FALSE }, // next 72 { FALSE, FALSE, FALSE }, // next
73 { FALSE, FALSE, FALSE }, // previous 73 { FALSE, FALSE, FALSE }, // previous
74 { FALSE, FALSE, FALSE }, // volume up 74 { FALSE, FALSE, FALSE }, // volume up
75 { FALSE, FALSE, FALSE }, // volume down 75 { FALSE, FALSE, FALSE }, // volume down
76 { TRUE, FALSE, FALSE }, // repeat/loop 76 { TRUE, FALSE, FALSE }, // repeat/loop
77 { FALSE, FALSE, FALSE }, // playlist 77 { FALSE, FALSE, FALSE }, // playlist
78 { FALSE, FALSE, FALSE }, // forward 78 { FALSE, FALSE, FALSE }, // forward
79 { FALSE, FALSE, FALSE } // back 79 { FALSE, FALSE, FALSE } // back
80}; 80};
81 81
82const char *skin_mask_file_names[11] = { 82const char *skin_mask_file_names[11] = {
83 "play", "stop", "pause", "next", "prev", "up", 83 "play", "stop", "pause", "next", "prev", "up",
84 "down", "loop", "playlist", "forward", "back" 84 "down", "loop", "playlist", "forward", "back"
85}; 85};
86 86
87 87
88static void changeTextColor( QWidget *w ) { 88static void changeTextColor( QWidget *w ) {
89 QPalette p = w->palette(); 89 QPalette p = w->palette();
90 p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) ); 90 p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) );
91 p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) ); 91 p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) );
92 w->setPalette( p ); 92 w->setPalette( p );
93} 93}
94 94
95static const int numButtons = (sizeof(audioButtons)/sizeof(MediaButton)); 95static const int numButtons = (sizeof(audioButtons)/sizeof(MediaButton));
96 96
97 97
98AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) : 98AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) :
99 QWidget( parent, name, f ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ) { 99 QWidget( parent, name, f ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ) {
100 setCaption( tr("OpiePlayer") ); 100 setCaption( tr("OpiePlayer") );
101 101
102 Config cfg("OpiePlayer"); 102 Config cfg("OpiePlayer");
103 cfg.setGroup("AudioWidget"); 103 cfg.setGroup("AudioWidget");
104 skin = cfg.readEntry("Skin","default"); 104 skin = cfg.readEntry("Skin","default");
105 //skin = "scaleTest"; 105 //skin = "scaleTest";
106// color of background, frame, degree of transparency 106// color of background, frame, degree of transparency
107 107
108 QString skinPath = "opieplayer/skins/" + skin; 108 QString skinPath = "opieplayer/skins/" + skin;
109 pixBg = new QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) ); 109 pixBg = new QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) );
110 imgUp = new QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) ); 110 imgUp = new QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) );
111 imgDn = new QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) ); 111 imgDn = new QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) );
112 112
113 imgButtonMask = new QImage( imgUp->width(), imgUp->height(), 8, 255 ); 113 imgButtonMask = new QImage( imgUp->width(), imgUp->height(), 8, 255 );
114 imgButtonMask->fill( 0 ); 114 imgButtonMask->fill( 0 );
115 115
116 for ( int i = 0; i < 11; i++ ) { 116 for ( int i = 0; i < 11; i++ ) {
117 QString filename = QString(getenv("OPIEDIR")) + "/pics/" + skinPath + "/skin_mask_" + skin_mask_file_names[i] + ".png"; 117 QString filename = QString(getenv("OPIEDIR")) + "/pics/" + skinPath + "/skin_mask_" + skin_mask_file_names[i] + ".png";
118 masks[i] = new QBitmap( filename ); 118 masks[i] = new QBitmap( filename );
119 119
120 if ( !masks[i]->isNull() ) { 120 if ( !masks[i]->isNull() ) {
121 QImage imgMask = masks[i]->convertToImage(); 121 QImage imgMask = masks[i]->convertToImage();
122 uchar **dest = imgButtonMask->jumpTable(); 122 uchar **dest = imgButtonMask->jumpTable();
123 for ( int y = 0; y < imgUp->height(); y++ ) { 123 for ( int y = 0; y < imgUp->height(); y++ ) {
124 uchar *line = dest[y]; 124 uchar *line = dest[y];
125 for ( int x = 0; x < imgUp->width(); x++ ) 125 for ( int x = 0; x < imgUp->width(); x++ )
126 if ( !qRed( imgMask.pixel( x, y ) ) ) 126 if ( !qRed( imgMask.pixel( x, y ) ) )
127 line[x] = i + 1; 127 line[x] = i + 1;
128 } 128 }
129 } 129 }
130 130
131 } 131 }
132 132
133 for ( int i = 0; i < 11; i++ ) { 133 for ( int i = 0; i < 11; i++ ) {
134 buttonPixUp[i] = NULL; 134 buttonPixUp[i] = NULL;
135 buttonPixDown[i] = NULL; 135 buttonPixDown[i] = NULL;
136 } 136 }
137 137
138 setBackgroundPixmap( *pixBg ); 138 setBackgroundPixmap( *pixBg );
139 139
140 songInfo.setFocusPolicy( QWidget::NoFocus ); 140 songInfo.setFocusPolicy( QWidget::NoFocus );
141 changeTextColor( &songInfo ); 141 changeTextColor( &songInfo );
142 142
143 slider.setFixedHeight( 20 ); 143 slider.setFixedHeight( 20 );
144 slider.setMinValue( 0 ); 144 slider.setMinValue( 0 );
145 slider.setMaxValue( 1 ); 145 slider.setMaxValue( 1 );
146 slider.setFocusPolicy( QWidget::NoFocus ); 146 slider.setFocusPolicy( QWidget::NoFocus );
147 slider.setBackgroundPixmap( *pixBg ); 147 slider.setBackgroundPixmap( *pixBg );
148 148
149 time.setFocusPolicy( QWidget::NoFocus ); 149 time.setFocusPolicy( QWidget::NoFocus );
150 time.setAlignment( Qt::AlignCenter ); 150 time.setAlignment( Qt::AlignCenter );
151 time.setFrame(FALSE); 151 time.setFrame(FALSE);
152 changeTextColor( &time ); 152 changeTextColor( &time );
153 153
154 resizeEvent( NULL ); 154 resizeEvent( NULL );
155 155
156 connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 156 connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
157 connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 157 connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
158 158
159 connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) ); 159 connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) );
160 connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) ); 160 connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) );
161 connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) ); 161 connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) );
162 connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) ); 162 connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) );
163 connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) ); 163 connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) );
164 164
165 // Intialise state 165 // Intialise state
166 setLength( mediaPlayerState->length() ); 166 setLength( mediaPlayerState->length() );
167 setPosition( mediaPlayerState->position() ); 167 setPosition( mediaPlayerState->position() );
168 setLooping( mediaPlayerState->fullscreen() ); 168 setLooping( mediaPlayerState->fullscreen() );
169 setPaused( mediaPlayerState->paused() ); 169 setPaused( mediaPlayerState->paused() );
170 setPlaying( mediaPlayerState->playing() ); 170 setPlaying( mediaPlayerState->playing() );
171 171
172} 172}
173 173
174AudioWidget::~AudioWidget() { 174AudioWidget::~AudioWidget() {
175 175
176 for ( int i = 0; i < 11; i++ ) { 176 for ( int i = 0; i < 11; i++ ) {
177 delete buttonPixUp[i]; 177 delete buttonPixUp[i];
178 delete buttonPixDown[i]; 178 delete buttonPixDown[i];
179 } 179 }
180 delete pixBg; 180 delete pixBg;
181 delete imgUp; 181 delete imgUp;
182 delete imgDn; 182 delete imgDn;
183 delete imgButtonMask; 183 delete imgButtonMask;
184 for ( int i = 0; i < 11; i++ ) { 184 for ( int i = 0; i < 11; i++ ) {
185 delete masks[i]; 185 delete masks[i];
186 } 186 }
187} 187}
188 188
189QPixmap *combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { 189QPixmap *combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) {
190 QPixmap pix( img.width(), img.height() ); 190 QPixmap pix( img.width(), img.height() );
191 QPainter p( &pix ); 191 QPainter p( &pix );
192 p.drawTiledPixmap( pix.rect(), bg, offset ); 192 p.drawTiledPixmap( pix.rect(), bg, offset );
193 p.drawImage( 0, 0, img ); 193 p.drawImage( 0, 0, img );
194 return new QPixmap( pix ); 194 return new QPixmap( pix );
195} 195}
196 196
197 197
198QPixmap *maskPixToMask( QPixmap pix, QBitmap mask ) 198QPixmap *maskPixToMask( QPixmap pix, QBitmap mask )
199{ 199{
200 QPixmap *pixmap = new QPixmap( pix ); 200 QPixmap *pixmap = new QPixmap( pix );
201 pixmap->setMask( mask ); 201 pixmap->setMask( mask );
202 return pixmap; 202 return pixmap;
203} 203}
204 204
205 205
206 206
207void AudioWidget::resizeEvent( QResizeEvent * ) { 207void AudioWidget::resizeEvent( QResizeEvent * ) {
208 int h = height(); 208 int h = height();
209 int w = width(); 209 int w = width();
210 210
211 songInfo.setGeometry( QRect( 2, 10, w - 4, 20 ) ); 211 songInfo.setGeometry( QRect( 2, 10, w - 4, 20 ) );
212 slider.setFixedWidth( w - 110 ); 212 slider.setFixedWidth( w - 110 );
213 slider.setGeometry( QRect( 15, h - 30, w - 90, 20 ) ); 213 slider.setGeometry( QRect( 15, h - 30, w - 90, 20 ) );
214 slider.setBackgroundOrigin( QWidget::ParentOrigin ); 214 slider.setBackgroundOrigin( QWidget::ParentOrigin );
215 time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) ); 215 time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) );
216 216
217 xoff = ( w - imgUp->width() ) / 2; 217 xoff = ( w - imgUp->width() ) / 2;
218 yoff = (( h - imgUp->height() ) / 2) - 10; 218 yoff = (( h - imgUp->height() ) / 2) - 10;
219 QPoint p( xoff, yoff ); 219 QPoint p( xoff, yoff );
220 220
221 QPixmap *pixUp = combineImageWithBackground( *imgUp, *pixBg, p ); 221 QPixmap *pixUp = combineImageWithBackground( *imgUp, *pixBg, p );
222 QPixmap *pixDn = combineImageWithBackground( *imgDn, *pixBg, p ); 222 QPixmap *pixDn = combineImageWithBackground( *imgDn, *pixBg, p );
223 223
224 for ( int i = 0; i < 11; i++ ) { 224 for ( int i = 0; i < 11; i++ ) {
225 if ( !masks[i]->isNull() ) { 225 if ( !masks[i]->isNull() ) {
226 delete buttonPixUp[i]; 226 delete buttonPixUp[i];
227 delete buttonPixDown[i]; 227 delete buttonPixDown[i];
228 buttonPixUp[i] = maskPixToMask( *pixUp, *masks[i] ); 228 buttonPixUp[i] = maskPixToMask( *pixUp, *masks[i] );
229 buttonPixDown[i] = maskPixToMask( *pixDn, *masks[i] ); 229 buttonPixDown[i] = maskPixToMask( *pixDn, *masks[i] );
230 } 230 }
231 } 231 }
232 232
233 delete pixUp; 233 delete pixUp;
234 delete pixDn; 234 delete pixDn;
235} 235}
236 236
237static bool audioSliderBeingMoved = FALSE; 237static bool audioSliderBeingMoved = FALSE;
238 238
239 239
240void AudioWidget::sliderPressed() { 240void AudioWidget::sliderPressed() {
241 audioSliderBeingMoved = TRUE; 241 audioSliderBeingMoved = TRUE;
242} 242}
243 243
244 244
245void AudioWidget::sliderReleased() { 245void AudioWidget::sliderReleased() {
246 audioSliderBeingMoved = FALSE; 246 audioSliderBeingMoved = FALSE;
247 if ( slider.width() == 0 ) 247 if ( slider.width() == 0 )
248 return; 248 return;
249 long val = long((double)slider.value() * mediaPlayerState->length() / slider.width()); 249 long val = long((double)slider.value() * mediaPlayerState->length() / slider.width());
250 mediaPlayerState->setPosition( val ); 250 mediaPlayerState->setPosition( val );
251} 251}
252 252
253void AudioWidget::setPosition( long i ) { 253void AudioWidget::setPosition( long i ) {
254 // qDebug("set position %d",i); 254 qDebug("<<<<<<<<<<<<<<<<<<<<<<<<set position %d",i);
255 updateSlider( i, mediaPlayerState->length() ); 255 updateSlider( i, mediaPlayerState->length() );
256} 256}
257 257
258 258
259void AudioWidget::setLength( long max ) { 259void AudioWidget::setLength( long max ) {
260 updateSlider( mediaPlayerState->position(), max ); 260 updateSlider( mediaPlayerState->position(), max );
261} 261}
262 262
263 263
264void AudioWidget::setView( char view ) { 264void AudioWidget::setView( char view ) {
265 if (mediaPlayerState->streaming() ) { 265 slider.show();
266 if( !slider.isHidden()) slider.hide(); 266
267 disconnect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 267// this isnt working for some reason
268 disconnect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 268
269 } else { 269// if ( mediaPlayerState->streaming() ) {
270// qDebug("<<<<<<<<<<<<<<file is STREAMING>>>>>>>>>>>>>>>>>>>");
271// if( !slider.isHidden()) slider.hide();
272// disconnect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
273// disconnect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
274// } else {
270 // this stops the slider from being moved, thus 275 // this stops the slider from being moved, thus
271 // does not stop stream when it reaches the end 276 // does not stop stream when it reaches the end
272 slider.show(); 277 slider.show();
273 connect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 278 connect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
274 connect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 279 connect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
275 } 280// }
276 281
277 if ( view == 'a' ) { 282 if ( view == 'a' ) {
278 startTimer( 150 ); 283 startTimer( 150 );
279 showMaximized(); 284 showMaximized();
280 } else { 285 } else {
281 killTimers(); 286 killTimers();
282 hide(); 287 hide();
283 } 288 }
284} 289}
285 290
286 291
287static QString timeAsString( long length ) { 292static QString timeAsString( long length ) {
288 length /= 44100; 293 length /= 44100;
289 int minutes = length / 60; 294 int minutes = length / 60;
290 int seconds = length % 60; 295 int seconds = length % 60;
291 return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 ); 296 return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 );
292} 297}
293 298
294void AudioWidget::updateSlider( long i, long max ) { 299void AudioWidget::updateSlider( long i, long max ) {
300
295 time.setText( timeAsString( i ) + " / " + timeAsString( max ) ); 301 time.setText( timeAsString( i ) + " / " + timeAsString( max ) );
302
296 if ( max == 0 ) { 303 if ( max == 0 ) {
297 return; 304 return;
298 } 305 }
299 // Will flicker too much if we don't do this 306 // Will flicker too much if we don't do this
300 // Scale to something reasonable 307 // Scale to something reasonable
301 int width = slider.width(); 308 int width = slider.width();
302 int val = int((double)i * width / max); 309 int val = int((double)i * width / max);
303 if ( !audioSliderBeingMoved ) { 310 if ( !audioSliderBeingMoved ) {
304 if ( slider.value() != val ) { 311 if ( slider.value() != val ) {
305 slider.setValue( val ); 312 slider.setValue( val );
306 } 313 }
307 314
308 if ( slider.maxValue() != width ) { 315 if ( slider.maxValue() != width ) {
309 slider.setMaxValue( width ); 316 slider.setMaxValue( width );
310 } 317 }
311 } 318 }
312} 319}
313 320
314 321
315void AudioWidget::setToggleButton( int i, bool down ) { 322void AudioWidget::setToggleButton( int i, bool down ) {
316 if ( down != audioButtons[i].isDown ) { 323 if ( down != audioButtons[i].isDown ) {
317 toggleButton( i ); 324 toggleButton( i );
318 } 325 }
319} 326}
320 327
321 328
322void AudioWidget::toggleButton( int i ) { 329void AudioWidget::toggleButton( int i ) {
323 audioButtons[i].isDown = !audioButtons[i].isDown; 330 audioButtons[i].isDown = !audioButtons[i].isDown;
324 QPainter p(this); 331 QPainter p(this);
325 paintButton ( &p, i ); 332 paintButton ( &p, i );
326} 333}
327 334
328 335
329void AudioWidget::paintButton( QPainter *p, int i ) { 336void AudioWidget::paintButton( QPainter *p, int i ) {
330 if ( audioButtons[i].isDown ) 337 if ( audioButtons[i].isDown )
331 p->drawPixmap( xoff, yoff, *buttonPixDown[i] ); 338 p->drawPixmap( xoff, yoff, *buttonPixDown[i] );
332 else 339 else
333 p->drawPixmap( xoff, yoff, *buttonPixUp[i] ); 340 p->drawPixmap( xoff, yoff, *buttonPixUp[i] );
334} 341}
335 342
336 343
337void AudioWidget::timerEvent( QTimerEvent * ) { 344void AudioWidget::timerEvent( QTimerEvent * ) {
338// static int frame = 0; 345// static int frame = 0;
339// if ( !mediaPlayerState->paused() && audioButtons[ AudioPlay ].isDown ) { 346// if ( !mediaPlayerState->paused() && audioButtons[ AudioPlay ].isDown ) {
340// frame = frame >= 7 ? 0 : frame + 1; 347// frame = frame >= 7 ? 0 : frame + 1;
341// } 348// }
342} 349}
343 350
344 351
345void AudioWidget::mouseMoveEvent( QMouseEvent *event ) { 352void AudioWidget::mouseMoveEvent( QMouseEvent *event ) {
346 for ( int i = 0; i < numButtons; i++ ) { 353 for ( int i = 0; i < numButtons; i++ ) {
347 if ( event->state() == QMouseEvent::LeftButton ) { 354 if ( event->state() == QMouseEvent::LeftButton ) {
348 355
349 // The test to see if the mouse click is inside the button or not 356 // The test to see if the mouse click is inside the button or not
350 int x = event->pos().x() - xoff; 357 int x = event->pos().x() - xoff;
351 int y = event->pos().y() - yoff; 358 int y = event->pos().y() - yoff;
352 359
353 bool isOnButton = ( x > 0 && y > 0 && x < imgButtonMask->width() 360 bool isOnButton = ( x > 0 && y > 0 && x < imgButtonMask->width()
354 && y < imgButtonMask->height() && imgButtonMask->pixelIndex( x, y ) == i + 1 ); 361 && y < imgButtonMask->height() && imgButtonMask->pixelIndex( x, y ) == i + 1 );
355 362
356 if ( isOnButton && i == AudioVolumeUp ) 363 if ( isOnButton && i == AudioVolumeUp )
357 qDebug("on up"); 364 qDebug("on up");
358 365
359 if ( isOnButton && !audioButtons[i].isHeld ) { 366 if ( isOnButton && !audioButtons[i].isHeld ) {
360 audioButtons[i].isHeld = TRUE; 367 audioButtons[i].isHeld = TRUE;
361 toggleButton(i); 368 toggleButton(i);
362 switch (i) { 369 switch (i) {
363 case AudioVolumeUp: 370 case AudioVolumeUp:
364 qDebug("more clicked"); 371 qDebug("more clicked");
365 emit moreClicked(); 372 emit moreClicked();
366 return; 373 return;
367 case AudioVolumeDown: emit lessClicked(); return; 374 case AudioVolumeDown: emit lessClicked(); return;
368 } 375 }
369 } else if ( !isOnButton && audioButtons[i].isHeld ) { 376 } else if ( !isOnButton && audioButtons[i].isHeld ) {
370 audioButtons[i].isHeld = FALSE; 377 audioButtons[i].isHeld = FALSE;
371 toggleButton(i); 378 toggleButton(i);
372 } 379 }
373 } else { 380 } else {
374 if ( audioButtons[i].isHeld ) { 381 if ( audioButtons[i].isHeld ) {
375 audioButtons[i].isHeld = FALSE; 382 audioButtons[i].isHeld = FALSE;
376 if ( !audioButtons[i].isToggle ) 383 if ( !audioButtons[i].isToggle )
377 setToggleButton( i, FALSE ); 384 setToggleButton( i, FALSE );
378 switch (i) { 385 switch (i) {
379 case AudioPlay: mediaPlayerState->setPlaying(audioButtons[i].isDown); return; 386 case AudioPlay: mediaPlayerState->setPlaying(audioButtons[i].isDown); return;
380 case AudioStop: mediaPlayerState->setPlaying(FALSE); return; 387 case AudioStop: mediaPlayerState->setPlaying(FALSE); return;
381 case AudioPause: mediaPlayerState->setPaused(audioButtons[i].isDown); return; 388 case AudioPause: mediaPlayerState->setPaused(audioButtons[i].isDown); return;
382 case AudioNext: mediaPlayerState->setNext(); return; 389 case AudioNext: mediaPlayerState->setNext(); return;
383 case AudioPrevious: mediaPlayerState->setPrev(); return; 390 case AudioPrevious: mediaPlayerState->setPrev(); return;
384 case AudioLoop: mediaPlayerState->setLooping(audioButtons[i].isDown); return; 391 case AudioLoop: mediaPlayerState->setLooping(audioButtons[i].isDown); return;
385 case AudioVolumeUp: emit moreReleased(); return; 392 case AudioVolumeUp: emit moreReleased(); return;
386 case AudioVolumeDown: emit lessReleased(); return; 393 case AudioVolumeDown: emit lessReleased(); return;
387 case AudioPlayList: mediaPlayerState->setList(); return; 394 case AudioPlayList: mediaPlayerState->setList(); return;
388 } 395 }
389 } 396 }
390 } 397 }
391 } 398 }
diff --git a/noncore/multimedia/opieplayer2/mediaplayer.cpp b/noncore/multimedia/opieplayer2/mediaplayer.cpp
index 13cc4ed..5411a64 100644
--- a/noncore/multimedia/opieplayer2/mediaplayer.cpp
+++ b/noncore/multimedia/opieplayer2/mediaplayer.cpp
@@ -1,173 +1,191 @@
1#include <qpe/qpeapplication.h> 1#include <qpe/qpeapplication.h>
2#include <qpe/qlibrary.h> 2#include <qpe/qlibrary.h>
3#include <qpe/resource.h> 3#include <qpe/resource.h>
4#include <qpe/config.h> 4#include <qpe/config.h>
5 5
6#include <qmainwindow.h> 6#include <qmainwindow.h>
7#include <qmessagebox.h> 7#include <qmessagebox.h>
8#include <qwidgetstack.h> 8#include <qwidgetstack.h>
9#include <qfile.h> 9#include <qfile.h>
10 10
11#include "mediaplayer.h" 11#include "mediaplayer.h"
12#include "playlistwidget.h" 12#include "playlistwidget.h"
13#include "audiowidget.h" 13#include "audiowidget.h"
14 14
15#include "mediaplayerstate.h" 15#include "mediaplayerstate.h"
16 16
17 17
18 18
19extern AudioWidget *audioUI; 19extern AudioWidget *audioUI;
20extern PlayListWidget *playList; 20extern PlayListWidget *playList;
21extern MediaPlayerState *mediaPlayerState; 21extern MediaPlayerState *mediaPlayerState;
22 22
23 23
24MediaPlayer::MediaPlayer( QObject *parent, const char *name ) 24MediaPlayer::MediaPlayer( QObject *parent, const char *name )
25 : QObject( parent, name ), volumeDirection( 0 ), currentFile( NULL ) { 25 : QObject( parent, name ), volumeDirection( 0 ), currentFile( NULL ) {
26 26
27 27
28 xineControl = new XineControl(); 28 xineControl = new XineControl();
29// QPEApplication::grabKeyboard(); // EVIL 29// QPEApplication::grabKeyboard(); // EVIL
30 connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); 30 connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) );
31 31
32 connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), this, SLOT( setPlaying( bool ) ) ); 32 connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), this, SLOT( setPlaying( bool ) ) );
33 connect( mediaPlayerState, SIGNAL( pausedToggled( bool ) ), this, SLOT( pauseCheck( bool ) ) ); 33 connect( mediaPlayerState, SIGNAL( pausedToggled( bool ) ), this, SLOT( pauseCheck( bool ) ) );
34 connect( mediaPlayerState, SIGNAL( next() ), this, SLOT( next() ) ); 34 connect( mediaPlayerState, SIGNAL( next() ), this, SLOT( next() ) );
35 connect( mediaPlayerState, SIGNAL( prev() ), this, SLOT( prev() ) ); 35 connect( mediaPlayerState, SIGNAL( prev() ), this, SLOT( prev() ) );
36 36
37 connect( audioUI, SIGNAL( moreClicked() ), this, SLOT( startIncreasingVolume() ) ); 37 connect( audioUI, SIGNAL( moreClicked() ), this, SLOT( startIncreasingVolume() ) );
38 connect( audioUI, SIGNAL( lessClicked() ), this, SLOT( startDecreasingVolume() ) ); 38 connect( audioUI, SIGNAL( lessClicked() ), this, SLOT( startDecreasingVolume() ) );
39 connect( audioUI, SIGNAL( moreReleased() ), this, SLOT( stopChangingVolume() ) ); 39 connect( audioUI, SIGNAL( moreReleased() ), this, SLOT( stopChangingVolume() ) );
40 connect( audioUI, SIGNAL( lessReleased() ), this, SLOT( stopChangingVolume() ) ); 40 connect( audioUI, SIGNAL( lessReleased() ), this, SLOT( stopChangingVolume() ) );
41 41
42} 42}
43 43
44MediaPlayer::~MediaPlayer() { 44MediaPlayer::~MediaPlayer() {
45} 45}
46 46
47void MediaPlayer::pauseCheck( bool b ) { 47void MediaPlayer::pauseCheck( bool b ) {
48 // Only pause if playing 48 // Only pause if playing
49 if ( b && !mediaPlayerState->playing() ) { 49 if ( b && !mediaPlayerState->playing() ) {
50 mediaPlayerState->setPaused( FALSE ); 50 mediaPlayerState->setPaused( FALSE );
51 } 51 }
52} 52}
53 53
54void MediaPlayer::play() { 54void MediaPlayer::play() {
55 mediaPlayerState->setPlaying( FALSE ); 55 mediaPlayerState->setPlaying( FALSE );
56 mediaPlayerState->setPlaying( TRUE ); 56 mediaPlayerState->setPlaying( TRUE );
57} 57}
58 58
59void MediaPlayer::setPlaying( bool play ) { 59void MediaPlayer::setPlaying( bool play ) {
60 if ( !play ) { 60 if ( !play ) {
61 mediaPlayerState->setPaused( FALSE ); 61 mediaPlayerState->setPaused( FALSE );
62 return; 62 return;
63 } 63 }
64 64
65 if ( mediaPlayerState->paused() ) { 65 if ( mediaPlayerState->paused() ) {
66 mediaPlayerState->setPaused( FALSE ); 66 mediaPlayerState->setPaused( FALSE );
67 return; 67 return;
68 } 68 }
69 69
70 const DocLnk *playListCurrent = playList->current(); 70 const DocLnk *playListCurrent = playList->current();
71 if ( playListCurrent != NULL ) { 71 if ( playListCurrent != NULL ) {
72 currentFile = playListCurrent; 72 currentFile = playListCurrent;
73 } 73 }
74
75 xineControl->play( currentFile->file() );
74 76
75 audioUI->setTickerText( currentFile->file( ) ); 77 xineControl->length();
78 long seconds = mediaPlayerState->length();//
79 QString time; time.sprintf("%li:%02i", seconds/60, (int)seconds%60 );
80 qDebug(time);
76 81
77 xineControl->play( currentFile->file() ); 82 QString tickerText;
83 if( currentFile->file().left(4) == "http" )
84 tickerText= tr( " File: " ) + currentFile->name();
85 else
86 tickerText = tr( " File: " ) + currentFile->name() + tr(", Length: ") + time;
87
88// QString fileInfo = mediaPlayerState->curDecoder()->fileInfo();
89
90// if ( !fileInfo.isEmpty() )
91// tickerText += ", " + fileInfo;
92// audioUI->setTickerText( tickerText + "." );
93
94 audioUI->setTickerText( currentFile->file( ) );
95
78} 96}
79 97
80 98
81void MediaPlayer::prev() { 99void MediaPlayer::prev() {
82 if ( playList->prev() ) { 100 if ( playList->prev() ) {
83 play(); 101 play();
84 } else if ( mediaPlayerState->looping() ) { 102 } else if ( mediaPlayerState->looping() ) {
85 if ( playList->last() ) { 103 if ( playList->last() ) {
86 play(); 104 play();
87 } 105 }
88 } else { 106 } else {
89 mediaPlayerState->setList(); 107 mediaPlayerState->setList();
90 } 108 }
91} 109}
92 110
93 111
94void MediaPlayer::next() { 112void MediaPlayer::next() {
95 if ( playList->next() ) { 113 if ( playList->next() ) {
96 play(); 114 play();
97 } else if ( mediaPlayerState->looping() ) { 115 } else if ( mediaPlayerState->looping() ) {
98 if ( playList->first() ) { 116 if ( playList->first() ) {
99 play(); 117 play();
100 } 118 }
101 } else { 119 } else {
102 mediaPlayerState->setList(); 120 mediaPlayerState->setList();
103 } 121 }
104} 122}
105 123
106 124
107void MediaPlayer::startDecreasingVolume() { 125void MediaPlayer::startDecreasingVolume() {
108 volumeDirection = -1; 126 volumeDirection = -1;
109 startTimer( 100 ); 127 startTimer( 100 );
110 // da kommt demnächst osound denk ich mal 128 // da kommt demnächst osound denk ich mal
111 /////////////////////////// lets just move those change volume here 129 /////////////////////////// lets just move those change volume here
112 // AudioDevice::decreaseVolume(); 130 // AudioDevice::decreaseVolume();
113} 131}
114 132
115 133
116void MediaPlayer::startIncreasingVolume() { 134void MediaPlayer::startIncreasingVolume() {
117 volumeDirection = +1; 135 volumeDirection = +1;
118 startTimer( 100 ); 136 startTimer( 100 );
119 // AudioDevice::increaseVolume(); 137 // AudioDevice::increaseVolume();
120} 138}
121 139
122 140
123bool drawnOnScreenDisplay = FALSE; 141bool drawnOnScreenDisplay = FALSE;
124unsigned int onScreenDisplayVolume = 0; 142unsigned int onScreenDisplayVolume = 0;
125const int yoff = 110; 143const int yoff = 110;
126 144
127void MediaPlayer::stopChangingVolume() { 145void MediaPlayer::stopChangingVolume() {
128 killTimers(); 146 killTimers();
129 // Get rid of the on-screen display stuff 147 // Get rid of the on-screen display stuff
130 drawnOnScreenDisplay = FALSE; 148 drawnOnScreenDisplay = FALSE;
131 onScreenDisplayVolume = 0; 149 onScreenDisplayVolume = 0;
132 int w = audioUI->width(); 150 int w = audioUI->width();
133 int h = audioUI->height(); 151 int h = audioUI->height();
134 audioUI->repaint( (w - 200) / 2, h - yoff, 200 + 9, 70, FALSE ); 152 audioUI->repaint( (w - 200) / 2, h - yoff, 200 + 9, 70, FALSE );
135} 153}
136 154
137 155
138void MediaPlayer::timerEvent( QTimerEvent * ) { 156void MediaPlayer::timerEvent( QTimerEvent * ) {
139 // if ( volumeDirection == +1 ) 157 // if ( volumeDirection == +1 )
140 // AudioDevice::increaseVolume(); 158 // AudioDevice::increaseVolume();
141 // else if ( volumeDirection == -1 ) 159 // else if ( volumeDirection == -1 )
142 // AudioDevice::decreaseVolume(); 160 // AudioDevice::decreaseVolume();
143 161
144// Display an on-screen display volume 162// Display an on-screen display volume
145 unsigned int l, r, v; bool m; 163 unsigned int l, r, v; bool m;
146 164
147// TODO FIXME 165// TODO FIXME
148// AudioDevice::getVolume( l, r, m ); 166// AudioDevice::getVolume( l, r, m );
149// v = ((l + r) * 11) / (2*0xFFFF); 167// v = ((l + r) * 11) / (2*0xFFFF);
150 168
151 if ( drawnOnScreenDisplay && onScreenDisplayVolume == v ) 169 if ( drawnOnScreenDisplay && onScreenDisplayVolume == v )
152 return; 170 return;
153 171
154 int w = audioUI->width(); 172 int w = audioUI->width();
155 int h = audioUI->height(); 173 int h = audioUI->height();
156 174
157 if ( drawnOnScreenDisplay ) { 175 if ( drawnOnScreenDisplay ) {
158 if ( onScreenDisplayVolume > v ) 176 if ( onScreenDisplayVolume > v )
159 audioUI->repaint( (w - 200) / 2 + v * 20 + 0, h - yoff + 40, (onScreenDisplayVolume - v) * 20 + 9, 30, FALSE ); 177 audioUI->repaint( (w - 200) / 2 + v * 20 + 0, h - yoff + 40, (onScreenDisplayVolume - v) * 20 + 9, 30, FALSE );
160 } 178 }
161 179
162 drawnOnScreenDisplay = TRUE; 180 drawnOnScreenDisplay = TRUE;
163 onScreenDisplayVolume = v; 181 onScreenDisplayVolume = v;
164 182
165 QPainter p( audioUI ); 183 QPainter p( audioUI );
166 p.setPen( QColor( 0x10, 0xD0, 0x10 ) ); 184 p.setPen( QColor( 0x10, 0xD0, 0x10 ) );
167 p.setBrush( QColor( 0x10, 0xD0, 0x10 ) ); 185 p.setBrush( QColor( 0x10, 0xD0, 0x10 ) );
168 186
169 QFont f; 187 QFont f;
170 f.setPixelSize( 20 ); 188 f.setPixelSize( 20 );
171 f.setBold( TRUE ); 189 f.setBold( TRUE );
172 p.setFont( f ); 190 p.setFont( f );
173 p.drawText( (w - 200) / 2, h - yoff + 20, tr("Volume") ); 191 p.drawText( (w - 200) / 2, h - yoff + 20, tr("Volume") );