summaryrefslogtreecommitdiff
authorsimon <simon>2002-12-09 14:06:14 (UTC)
committer simon <simon>2002-12-09 14:06:14 (UTC)
commit17f319bb44feb947a26be333a4c7e6fef7020c87 (patch) (unidiff)
treee02e34fb78ad4e4896cc07fd2a81d1a475e772a6
parent46bca195f0dacc3b596eb1537ae47bc2117ce8e4 (diff)
downloadopie-17f319bb44feb947a26be333a4c7e6fef7020c87.zip
opie-17f319bb44feb947a26be333a4c7e6fef7020c87.tar.gz
opie-17f319bb44feb947a26be333a4c7e6fef7020c87.tar.bz2
- re-organizing a bit the button storage. more to come.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/audiowidget.cpp42
-rw-r--r--noncore/multimedia/opieplayer2/mediawidget.h7
2 files changed, 28 insertions, 21 deletions
diff --git a/noncore/multimedia/opieplayer2/audiowidget.cpp b/noncore/multimedia/opieplayer2/audiowidget.cpp
index 56b75f2..3b33209 100644
--- a/noncore/multimedia/opieplayer2/audiowidget.cpp
+++ b/noncore/multimedia/opieplayer2/audiowidget.cpp
@@ -1,370 +1,370 @@
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 char * const skin_mask_file_names[10] = { 59const MediaWidget::SkinButtonInfo skinInfo[] =
60 "play", "stop", "next", "prev", "up", 60{
61 "down", "loop", "playlist", "forward", "back" 61 { MediaWidget::Play, "play", MediaWidget::ToggleButton },
62 { MediaWidget::Stop, "stop", MediaWidget::NormalButton },
63 { MediaWidget::Next, "next", MediaWidget::NormalButton },
64 { MediaWidget::Previous, "prev", MediaWidget::NormalButton },
65 { MediaWidget::VolumeUp, "up", MediaWidget::NormalButton },
66 { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton },
67 { MediaWidget::Loop, "loop", MediaWidget::ToggleButton },
68 { MediaWidget::PlayList, "playlist", MediaWidget::NormalButton },
69 { MediaWidget::Forward, "forward", MediaWidget::NormalButton },
70 { MediaWidget::Back, "back", MediaWidget::NormalButton }
62}; 71};
63 72
73const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] );
74
64void changeTextColor( QWidget * w) { 75void changeTextColor( QWidget * w) {
65 QPalette p = w->palette(); 76 QPalette p = w->palette();
66 p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) ); 77 p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) );
67 p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) ); 78 p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) );
68 w->setPalette( p ); 79 w->setPalette( p );
69} 80}
70 81
71} 82}
72 83
73AudioWidget::AudioWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name) : 84AudioWidget::AudioWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name) :
74 85
75 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 ),
76 audioSliderBeingMoved( false ) 87 audioSliderBeingMoved( false )
77{ 88{
78 Button defaultButton; 89 for ( uint i = 0; i < buttonCount; ++i ) {
79 90 Button button;
80 Button toggleButton = defaultButton; 91 button.buttonType = skinInfo[ i ].buttonType;
81 toggleButton.buttonType = ToggleButton; 92 buttons.push_back( button );
82 93 }
83 buttons.reserve( 10 );
84 buttons.push_back( toggleButton ); // play
85 buttons.push_back( defaultButton ); // stop
86 buttons.push_back( defaultButton ); // next
87 buttons.push_back( defaultButton ); // previous
88 buttons.push_back( defaultButton ); // volume up
89 buttons.push_back( defaultButton ); // volume down
90 buttons.push_back( toggleButton ); // repeat/loop
91 buttons.push_back( defaultButton ); // playlist
92 buttons.push_back( defaultButton ); // forward
93 buttons.push_back( defaultButton ); // back
94 94
95 setCaption( tr("OpiePlayer") ); 95 setCaption( tr("OpiePlayer") );
96 96
97 Config cfg("OpiePlayer"); 97 Config cfg("OpiePlayer");
98 cfg.setGroup("Options"); 98 cfg.setGroup("Options");
99 skin = cfg.readEntry("Skin","default"); 99 skin = cfg.readEntry("Skin","default");
100 //skin = "scaleTest"; 100 //skin = "scaleTest";
101 // color of background, frame, degree of transparency 101 // color of background, frame, degree of transparency
102 102
103 QString skinPath = "opieplayer2/skins/" + skin; 103 QString skinPath = "opieplayer2/skins/" + skin;
104 pixBg = QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) ); 104 pixBg = QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) );
105 imgUp = QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) ); 105 imgUp = QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) );
106 imgDn = QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) ); 106 imgDn = QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) );
107 107
108 buttonMask = QImage( imgUp.width(), imgUp.height(), 8, 255 ); 108 buttonMask = QImage( imgUp.width(), imgUp.height(), 8, 255 );
109 buttonMask.fill( 0 ); 109 buttonMask.fill( 0 );
110 110
111 masks.reserve( 10 ); 111 masks.reserve( buttonCount );
112 112
113 for ( uint i = 0; i < masks.capacity(); i++ ) { 113 for ( uint i = 0; i < masks.capacity(); i++ ) {
114 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + "/skin_mask_" + skin_mask_file_names[i] + ".png" ); 114 QString filename = QString( QPEApplication::qpeDir() + "/pics/" + skinPath + "/skin_mask_" + skinInfo[i].fileName + ".png" );
115 masks.push_back( QBitmap( filename ) ); 115 masks.push_back( QBitmap( filename ) );
116 116
117 if ( !masks[i].isNull() ) { 117 if ( !masks[i].isNull() ) {
118 QImage imgMask = masks[i].convertToImage(); 118 QImage imgMask = masks[i].convertToImage();
119 uchar **dest = buttonMask.jumpTable(); 119 uchar **dest = buttonMask.jumpTable();
120 for ( int y = 0; y < imgUp.height(); y++ ) { 120 for ( int y = 0; y < imgUp.height(); y++ ) {
121 uchar *line = dest[y]; 121 uchar *line = dest[y];
122 for ( int x = 0; x < imgUp.width(); x++ ) 122 for ( int x = 0; x < imgUp.width(); x++ )
123 if ( !qRed( imgMask.pixel( x, y ) ) ) 123 if ( !qRed( imgMask.pixel( x, y ) ) )
124 line[x] = i + 1; 124 line[x] = i + 1;
125 } 125 }
126 } 126 }
127 127
128 } 128 }
129 129
130 buttonPixUp.resize( masks.size(), QPixmap() ); 130 buttonPixUp.resize( masks.size(), QPixmap() );
131 buttonPixDown.resize( masks.size(), QPixmap() ); 131 buttonPixDown.resize( masks.size(), QPixmap() );
132 132
133 setBackgroundPixmap( pixBg ); 133 setBackgroundPixmap( pixBg );
134 134
135 songInfo.setFocusPolicy( QWidget::NoFocus ); 135 songInfo.setFocusPolicy( QWidget::NoFocus );
136// changeTextColor( &songInfo ); 136// changeTextColor( &songInfo );
137// songInfo.setBackgroundColor( QColor( 167, 212, 167 )); 137// songInfo.setBackgroundColor( QColor( 167, 212, 167 ));
138// songInfo.setFrameStyle( QFrame::NoFrame); 138// songInfo.setFrameStyle( QFrame::NoFrame);
139 songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken ); 139 songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
140// songInfo.setForegroundColor(Qt::white); 140// songInfo.setForegroundColor(Qt::white);
141 141
142 slider.setFixedHeight( 20 ); 142 slider.setFixedHeight( 20 );
143 slider.setMinValue( 0 ); 143 slider.setMinValue( 0 );
144 slider.setMaxValue( 1 ); 144 slider.setMaxValue( 1 );
145 slider.setFocusPolicy( QWidget::NoFocus ); 145 slider.setFocusPolicy( QWidget::NoFocus );
146 slider.setBackgroundPixmap( pixBg ); 146 slider.setBackgroundPixmap( pixBg );
147 147
148// Config cofg("qpe"); 148// Config cofg("qpe");
149// cofg.setGroup("Appearance"); 149// cofg.setGroup("Appearance");
150// QColor backgroundcolor = QColor( cofg.readEntry( "Background", "#E5E1D5" ) ); 150// QColor backgroundcolor = QColor( cofg.readEntry( "Background", "#E5E1D5" ) );
151 151
152 time.setFocusPolicy( QWidget::NoFocus ); 152 time.setFocusPolicy( QWidget::NoFocus );
153 time.setAlignment( Qt::AlignCenter ); 153 time.setAlignment( Qt::AlignCenter );
154 154
155// time.setFrame(FALSE); 155// time.setFrame(FALSE);
156// changeTextColor( &time ); 156// changeTextColor( &time );
157 157
158 resizeEvent( NULL ); 158 resizeEvent( NULL );
159 159
160 connect( &mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) ); 160 connect( &mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) );
161 connect( &mediaPlayerState, SIGNAL( isSeekableToggled( bool ) ), this, SLOT( setSeekable( bool ) ) ); 161 connect( &mediaPlayerState, SIGNAL( isSeekableToggled( bool ) ), this, SLOT( setSeekable( bool ) ) );
162 162
163 connect( this, SIGNAL( forwardClicked() ), this, SLOT( skipFor() ) ); 163 connect( this, SIGNAL( forwardClicked() ), this, SLOT( skipFor() ) );
164 connect( this, SIGNAL( backClicked() ), this, SLOT( skipBack() ) ); 164 connect( this, SIGNAL( backClicked() ), this, SLOT( skipBack() ) );
165 connect( this, SIGNAL( forwardReleased() ), this, SLOT( stopSkip() ) ); 165 connect( this, SIGNAL( forwardReleased() ), this, SLOT( stopSkip() ) );
166 connect( this, SIGNAL( backReleased() ), this, SLOT( stopSkip() ) ); 166 connect( this, SIGNAL( backReleased() ), this, SLOT( stopSkip() ) );
167 167
168 // Intialise state 168 // Intialise state
169 setLength( mediaPlayerState.length() ); 169 setLength( mediaPlayerState.length() );
170 setPosition( mediaPlayerState.position() ); 170 setPosition( mediaPlayerState.position() );
171 setLooping( mediaPlayerState.isFullscreen() ); 171 setLooping( mediaPlayerState.isFullscreen() );
172 // setPaused( mediaPlayerState->paused() ); 172 // setPaused( mediaPlayerState->paused() );
173 setPlaying( mediaPlayerState.isPlaying() ); 173 setPlaying( mediaPlayerState.isPlaying() );
174 174
175} 175}
176 176
177AudioWidget::~AudioWidget() { 177AudioWidget::~AudioWidget() {
178 178
179// mediaPlayerState->setPlaying(false); 179// mediaPlayerState->setPlaying(false);
180} 180}
181 181
182namespace { 182namespace {
183 183
184QPixmap combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { 184QPixmap combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) {
185 QPixmap pix( img.width(), img.height() ); 185 QPixmap pix( img.width(), img.height() );
186 QPainter p( &pix ); 186 QPainter p( &pix );
187 p.drawTiledPixmap( pix.rect(), bg, offset ); 187 p.drawTiledPixmap( pix.rect(), bg, offset );
188 p.drawImage( 0, 0, img ); 188 p.drawImage( 0, 0, img );
189 return pix; 189 return pix;
190} 190}
191 191
192 192
193QPixmap maskPixToMask( QPixmap pix, QBitmap mask ) { 193QPixmap maskPixToMask( QPixmap pix, QBitmap mask ) {
194 QPixmap pixmap( pix ); 194 QPixmap pixmap( pix );
195 pixmap.setMask( mask ); 195 pixmap.setMask( mask );
196 return pixmap; 196 return pixmap;
197} 197}
198 198
199}; 199};
200 200
201void AudioWidget::resizeEvent( QResizeEvent * ) { 201void AudioWidget::resizeEvent( QResizeEvent * ) {
202 int h = height(); 202 int h = height();
203 int w = width(); 203 int w = width();
204 204
205 songInfo.setGeometry( QRect( 2, 2, w - 4, 20 ) ); 205 songInfo.setGeometry( QRect( 2, 2, w - 4, 20 ) );
206 slider.setFixedWidth( w - 110 ); 206 slider.setFixedWidth( w - 110 );
207 slider.setGeometry( QRect( 15, h - 22, w - 90, 20 ) ); 207 slider.setGeometry( QRect( 15, h - 22, w - 90, 20 ) );
208 slider.setBackgroundOrigin( QWidget::ParentOrigin ); 208 slider.setBackgroundOrigin( QWidget::ParentOrigin );
209 time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) ); 209 time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) );
210 210
211 upperLeftOfButtonMask.rx() = ( w - imgUp.width() ) / 2; 211 upperLeftOfButtonMask.rx() = ( w - imgUp.width() ) / 2;
212 upperLeftOfButtonMask.ry() = (( h - imgUp.height() ) / 2) - 10; 212 upperLeftOfButtonMask.ry() = (( h - imgUp.height() ) / 2) - 10;
213 QPoint p = upperLeftOfButtonMask; 213 QPoint p = upperLeftOfButtonMask;
214 214
215 QPixmap pixUp = combineImageWithBackground( imgUp, pixBg, p ); 215 QPixmap pixUp = combineImageWithBackground( imgUp, pixBg, p );
216 QPixmap pixDn = combineImageWithBackground( imgDn, pixBg, p ); 216 QPixmap pixDn = combineImageWithBackground( imgDn, pixBg, p );
217 217
218 for ( uint i = 0; i < masks.size(); i++ ) { 218 for ( uint i = 0; i < masks.size(); i++ ) {
219 if ( !masks[i].isNull() ) { 219 if ( !masks[i].isNull() ) {
220 buttonPixUp[i] = maskPixToMask( pixUp, masks[i] ); 220 buttonPixUp[i] = maskPixToMask( pixUp, masks[i] );
221 buttonPixDown[i] = maskPixToMask( pixDn, masks[i] ); 221 buttonPixDown[i] = maskPixToMask( pixDn, masks[i] );
222 } 222 }
223 } 223 }
224} 224}
225 225
226void AudioWidget::sliderPressed() { 226void AudioWidget::sliderPressed() {
227 audioSliderBeingMoved = TRUE; 227 audioSliderBeingMoved = TRUE;
228} 228}
229 229
230 230
231void AudioWidget::sliderReleased() { 231void AudioWidget::sliderReleased() {
232 audioSliderBeingMoved = FALSE; 232 audioSliderBeingMoved = FALSE;
233 if ( slider.width() == 0 ) 233 if ( slider.width() == 0 )
234 return; 234 return;
235 long val = long((double)slider.value() * mediaPlayerState.length() / slider.width()); 235 long val = long((double)slider.value() * mediaPlayerState.length() / slider.width());
236 mediaPlayerState.setPosition( val ); 236 mediaPlayerState.setPosition( val );
237} 237}
238 238
239void AudioWidget::setPosition( long i ) { 239void AudioWidget::setPosition( long i ) {
240 // qDebug("<<<<<<<<<<<<<<<<<<<<<<<<set position %d",i); 240 // qDebug("<<<<<<<<<<<<<<<<<<<<<<<<set position %d",i);
241 updateSlider( i, mediaPlayerState.length() ); 241 updateSlider( i, mediaPlayerState.length() );
242} 242}
243 243
244 244
245void AudioWidget::setLength( long max ) { 245void AudioWidget::setLength( long max ) {
246 updateSlider( mediaPlayerState.position(), max ); 246 updateSlider( mediaPlayerState.position(), max );
247} 247}
248 248
249 249
250void AudioWidget::setDisplayType( MediaPlayerState::DisplayType mediaType ) { 250void AudioWidget::setDisplayType( MediaPlayerState::DisplayType mediaType ) {
251 if ( mediaType == MediaPlayerState::Audio ) { 251 if ( mediaType == MediaPlayerState::Audio ) {
252 // startTimer( 150 ); 252 // startTimer( 150 );
253 showMaximized(); 253 showMaximized();
254 return; 254 return;
255 } 255 }
256 256
257 killTimers(); 257 killTimers();
258 hide(); 258 hide();
259} 259}
260 260
261 261
262void AudioWidget::setSeekable( bool isSeekable ) { 262void AudioWidget::setSeekable( bool isSeekable ) {
263 263
264 if ( !isSeekable ) { 264 if ( !isSeekable ) {
265 qDebug("<<<<<<<<<<<<<<file is STREAMING>>>>>>>>>>>>>>>>>>>"); 265 qDebug("<<<<<<<<<<<<<<file is STREAMING>>>>>>>>>>>>>>>>>>>");
266 if( !slider.isHidden()) { 266 if( !slider.isHidden()) {
267 slider.hide(); 267 slider.hide();
268 } 268 }
269 disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 269 disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
270 disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 270 disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
271 disconnect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 271 disconnect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
272 disconnect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 272 disconnect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
273 } else { 273 } else {
274 // this stops the slider from being moved, thus 274 // this stops the slider from being moved, thus
275 // does not stop stream when it reaches the end 275 // does not stop stream when it reaches the end
276 slider.show(); 276 slider.show();
277 qDebug( " CONNECT SET POSTION " ); 277 qDebug( " CONNECT SET POSTION " );
278 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); 278 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
279 connect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); 279 connect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
280 connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); 280 connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
281 connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); 281 connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
282 } 282 }
283} 283}
284 284
285 285
286static QString timeAsString( long length ) { 286static QString timeAsString( long length ) {
287 int minutes = length / 60; 287 int minutes = length / 60;
288 int seconds = length % 60; 288 int seconds = length % 60;
289 return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 ); 289 return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 );
290} 290}
291 291
292void AudioWidget::updateSlider( long i, long max ) { 292void AudioWidget::updateSlider( long i, long max ) {
293 293
294 time.setText( timeAsString( i ) + " / " + timeAsString( max ) ); 294 time.setText( timeAsString( i ) + " / " + timeAsString( max ) );
295// qDebug( timeAsString( i ) + " / " + timeAsString( max ) ) ; 295// qDebug( timeAsString( i ) + " / " + timeAsString( max ) ) ;
296 296
297 if ( max == 0 ) { 297 if ( max == 0 ) {
298 return; 298 return;
299 } 299 }
300 // Will flicker too much if we don't do this 300 // Will flicker too much if we don't do this
301 // Scale to something reasonable 301 // Scale to something reasonable
302 int width = slider.width(); 302 int width = slider.width();
303 int val = int((double)i * width / max); 303 int val = int((double)i * width / max);
304 if ( !audioSliderBeingMoved ) { 304 if ( !audioSliderBeingMoved ) {
305 if ( slider.value() != val ) { 305 if ( slider.value() != val ) {
306 slider.setValue( val ); 306 slider.setValue( val );
307 } 307 }
308 308
309 if ( slider.maxValue() != width ) { 309 if ( slider.maxValue() != width ) {
310 slider.setMaxValue( width ); 310 slider.setMaxValue( width );
311 } 311 }
312 } 312 }
313} 313}
314 314
315 315
316void AudioWidget::setToggleButton( int i, bool down ) { 316void AudioWidget::setToggleButton( int i, bool down ) {
317 qDebug("setToggleButton %d", i); 317 qDebug("setToggleButton %d", i);
318 if ( down != buttons[i].isDown ) { 318 if ( down != buttons[i].isDown ) {
319 toggleButton( i ); 319 toggleButton( i );
320 } 320 }
321} 321}
322 322
323void AudioWidget::paintButton( QPainter &p, int i ) { 323void AudioWidget::paintButton( QPainter &p, int i ) {
324 if ( buttons[i].isDown ) { 324 if ( buttons[i].isDown ) {
325 p.drawPixmap( upperLeftOfButtonMask, buttonPixDown[i] ); 325 p.drawPixmap( upperLeftOfButtonMask, buttonPixDown[i] );
326 } else { 326 } else {
327 p.drawPixmap( upperLeftOfButtonMask, buttonPixUp[i] ); 327 p.drawPixmap( upperLeftOfButtonMask, buttonPixUp[i] );
328 } 328 }
329} 329}
330 330
331 331
332void AudioWidget::skipFor() { 332void AudioWidget::skipFor() {
333 skipDirection = +1; 333 skipDirection = +1;
334 startTimer( 50 ); 334 startTimer( 50 );
335 mediaPlayerState.setPosition( mediaPlayerState.position() + 2 ); 335 mediaPlayerState.setPosition( mediaPlayerState.position() + 2 );
336} 336}
337 337
338void AudioWidget::skipBack() { 338void AudioWidget::skipBack() {
339 skipDirection = -1; 339 skipDirection = -1;
340 startTimer( 50 ); 340 startTimer( 50 );
341 mediaPlayerState.setPosition( mediaPlayerState.position() - 2 ); 341 mediaPlayerState.setPosition( mediaPlayerState.position() - 2 );
342} 342}
343 343
344 344
345 345
346void AudioWidget::stopSkip() { 346void AudioWidget::stopSkip() {
347 killTimers(); 347 killTimers();
348} 348}
349 349
350 350
351void AudioWidget::timerEvent( QTimerEvent * ) { 351void AudioWidget::timerEvent( QTimerEvent * ) {
352 if ( skipDirection == +1 ) { 352 if ( skipDirection == +1 ) {
353 mediaPlayerState.setPosition( mediaPlayerState.position() + 2 ); 353 mediaPlayerState.setPosition( mediaPlayerState.position() + 2 );
354 } else if ( skipDirection == -1 ) { 354 } else if ( skipDirection == -1 ) {
355 mediaPlayerState.setPosition( mediaPlayerState.position() - 2 ); 355 mediaPlayerState.setPosition( mediaPlayerState.position() - 2 );
356 } 356 }
357} 357}
358 358
359 359
360void AudioWidget::mouseMoveEvent( QMouseEvent *event ) { 360void AudioWidget::mouseMoveEvent( QMouseEvent *event ) {
361 for ( unsigned int i = 0; i < buttons.size(); i++ ) { 361 for ( unsigned int i = 0; i < buttons.size(); i++ ) {
362 if ( event->state() == QMouseEvent::LeftButton ) { 362 if ( event->state() == QMouseEvent::LeftButton ) {
363 // The test to see if the mouse click is inside the button or not 363 // The test to see if the mouse click is inside the button or not
364 bool isOnButton = isOverButton( event->pos() - upperLeftOfButtonMask, i ); 364 bool isOnButton = isOverButton( event->pos() - upperLeftOfButtonMask, i );
365 365
366 if ( isOnButton && !buttons[i].isHeld ) { 366 if ( isOnButton && !buttons[i].isHeld ) {
367 buttons[i].isHeld = TRUE; 367 buttons[i].isHeld = TRUE;
368 toggleButton(i); 368 toggleButton(i);
369 switch (i) { 369 switch (i) {
370 case VolumeUp: 370 case VolumeUp:
diff --git a/noncore/multimedia/opieplayer2/mediawidget.h b/noncore/multimedia/opieplayer2/mediawidget.h
index aa8891f..e0f2cf1 100644
--- a/noncore/multimedia/opieplayer2/mediawidget.h
+++ b/noncore/multimedia/opieplayer2/mediawidget.h
@@ -1,88 +1,95 @@
1/* 1/*
2 Copyright (C) 2002 Simon Hausmann <hausmann@kde.org> 2 Copyright (C) 2002 Simon Hausmann <hausmann@kde.org>
3 (C) 2002 Max Reiss <harlekin@handhelds.org> 3 (C) 2002 Max Reiss <harlekin@handhelds.org>
4 (C) 2002 L. Potter <ljp@llornkcor.com> 4 (C) 2002 L. Potter <ljp@llornkcor.com>
5 (C) 2002 Holger Freyther <zecke@handhelds.org> 5 (C) 2002 Holger Freyther <zecke@handhelds.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#ifndef MEDIAWIDGET_H 23#ifndef MEDIAWIDGET_H
24#define MEDIAWIDGET_H 24#define MEDIAWIDGET_H
25 25
26#include <qwidget.h> 26#include <qwidget.h>
27 27
28#include "mediaplayerstate.h" 28#include "mediaplayerstate.h"
29#include "playlistwidget.h" 29#include "playlistwidget.h"
30 30
31#include <vector> 31#include <vector>
32 32
33class MediaWidget : public QWidget 33class MediaWidget : public QWidget
34{ 34{
35 Q_OBJECT 35 Q_OBJECT
36public: 36public:
37 enum Command { Play = 0, Stop, Next, Previous, VolumeUp, VolumeDown, Loop, PlayList, Forward, Back }; 37 enum Command { Play = 0, Stop, Next, Previous, VolumeUp, VolumeDown, Loop, PlayList, Forward, Back };
38 enum ButtonType { NormalButton, ToggleButton }; 38 enum ButtonType { NormalButton, ToggleButton };
39 39
40 struct Button 40 struct Button
41 { 41 {
42 Button() : buttonType( NormalButton ), isHeld( false ), isDown( false ) {} 42 Button() : buttonType( NormalButton ), isHeld( false ), isDown( false ) {}
43 43
44 ButtonType buttonType : 1; 44 ButtonType buttonType : 1;
45 bool isHeld : 1; 45 bool isHeld : 1;
46 bool isDown : 1; 46 bool isDown : 1;
47 }; 47 };
48 typedef std::vector<Button> ButtonVector; 48 typedef std::vector<Button> ButtonVector;
49 49
50 struct SkinButtonInfo
51 {
52 Command command;
53 const char *fileName;
54 ButtonType buttonType;
55 };
56
50 MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent = 0, const char *name = 0 ); 57 MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent = 0, const char *name = 0 );
51 virtual ~MediaWidget(); 58 virtual ~MediaWidget();
52 59
53public slots: 60public slots:
54 virtual void setDisplayType( MediaPlayerState::DisplayType displayType ) = 0; 61 virtual void setDisplayType( MediaPlayerState::DisplayType displayType ) = 0;
55 virtual void setLength( long length ) = 0; 62 virtual void setLength( long length ) = 0;
56 virtual void setPlaying( bool playing ) = 0; 63 virtual void setPlaying( bool playing ) = 0;
57 64
58signals: 65signals:
59 void moreReleased(); 66 void moreReleased();
60 void lessReleased(); 67 void lessReleased();
61 void forwardReleased(); 68 void forwardReleased();
62 void backReleased(); 69 void backReleased();
63 70
64protected: 71protected:
65 virtual void closeEvent( QCloseEvent * ); 72 virtual void closeEvent( QCloseEvent * );
66 73
67 void handleCommand( Command command, bool buttonDown ); 74 void handleCommand( Command command, bool buttonDown );
68 75
69 bool isOverButton( const QPoint &position, int buttonId ) const; 76 bool isOverButton( const QPoint &position, int buttonId ) const;
70 77
71 void paintButton( int buttonId ); 78 void paintButton( int buttonId );
72 virtual void paintButton( QPainter &p, int i ) = 0; 79 virtual void paintButton( QPainter &p, int i ) = 0;
73 80
74 void toggleButton( int buttonId ); 81 void toggleButton( int buttonId );
75 82
76 MediaPlayerState &mediaPlayerState; 83 MediaPlayerState &mediaPlayerState;
77 PlayListWidget &playList; 84 PlayListWidget &playList;
78 85
79 ButtonVector buttons; 86 ButtonVector buttons;
80 87
81 QImage buttonMask; 88 QImage buttonMask;
82 89
83 QPoint upperLeftOfButtonMask; 90 QPoint upperLeftOfButtonMask;
84}; 91};
85 92
86#endif // MEDIAWIDGET_H 93#endif // MEDIAWIDGET_H
87/* vim: et sw=4 ts=4 94/* vim: et sw=4 ts=4
88 */ 95 */