summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/audiodevice.cpp4
-rw-r--r--core/multimedia/opieplayer/playlistwidget.cpp25
-rw-r--r--core/multimedia/opieplayer/playlistwidget.h2
3 files changed, 14 insertions, 17 deletions
diff --git a/core/multimedia/opieplayer/audiodevice.cpp b/core/multimedia/opieplayer/audiodevice.cpp
index e0989d0..3262e38 100644
--- a/core/multimedia/opieplayer/audiodevice.cpp
+++ b/core/multimedia/opieplayer/audiodevice.cpp
@@ -1,363 +1,363 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20// L.J.Potter added better error code Fri 02-15-2002 14:37:47 20// L.J.Potter added better error code Fri 02-15-2002 14:37:47
21 21
22
22#include <stdlib.h> 23#include <stdlib.h>
23#include <stdio.h> 24#include <stdio.h>
24#include <qpe/qpeapplication.h> 25#include <qpe/qpeapplication.h>
25#include <qpe/config.h> 26#include <qpe/config.h>
26#include "audiodevice.h" 27#include "audiodevice.h"
27 28
28#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP) 29#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
29#include "qpe/qcopenvelope_qws.h" 30#include "qpe/qcopenvelope_qws.h"
30#endif 31#endif
31 32
32#ifdef Q_WS_WIN 33#ifdef Q_WS_WIN
33#include <windows.h> 34#include <windows.h>
34#include <mmsystem.h> 35#include <mmsystem.h>
35#include <mmreg.h> 36#include <mmreg.h>
36#endif 37#endif
37 38
38#if defined(Q_WS_X11) || defined(Q_WS_QWS) 39#if defined(Q_WS_X11) || defined(Q_WS_QWS)
39#include <fcntl.h> 40#include <fcntl.h>
40#include <sys/ioctl.h> 41#include <sys/ioctl.h>
41#include <sys/soundcard.h> 42#include <sys/soundcard.h>
42#include <sys/stat.h> 43#include <sys/stat.h>
43#include <sys/time.h> 44#include <sys/time.h>
44#include <sys/types.h> 45#include <sys/types.h>
45#include <unistd.h> 46#include <unistd.h>
46#endif 47#endif
47 48
48#if defined(Q_OS_WIN32) 49#if defined(Q_OS_WIN32)
49static const int expectedBytesPerMilliSecond = 2 * 2 * 44000 / 1000; 50static const int expectedBytesPerMilliSecond = 2 * 2 * 44000 / 1000;
50static const int timerResolutionMilliSeconds = 30; 51static const int timerResolutionMilliSeconds = 30;
51static const int sound_fragment_bytes = timerResolutionMilliSeconds * expectedBytesPerMilliSecond; 52static const int sound_fragment_bytes = timerResolutionMilliSeconds * expectedBytesPerMilliSecond;
52#else 53#else
53# if defined(QT_QWS_IPAQ) 54# if defined(QT_QWS_IPAQ)
54static const int sound_fragment_shift = 14; 55static const int sound_fragment_shift = 14;
55# else 56# else
56static const int sound_fragment_shift = 16; 57static const int sound_fragment_shift = 16;
57# endif 58# endif
58static const int sound_fragment_bytes = (1<<sound_fragment_shift); 59static const int sound_fragment_bytes = (1<<sound_fragment_shift);
59#endif 60#endif
60 61
61 62
62class AudioDevicePrivate { 63class AudioDevicePrivate {
63public: 64public:
64 int handle; 65 int handle;
65 unsigned int frequency; 66 unsigned int frequency;
66 unsigned int channels; 67 unsigned int channels;
67 unsigned int bytesPerSample; 68 unsigned int bytesPerSample;
68 unsigned int bufferSize; 69 unsigned int bufferSize;
69#ifndef Q_OS_WIN32 70#ifndef Q_OS_WIN32
70 bool can_GETOSPACE; 71 bool can_GETOSPACE;
71 char* unwrittenBuffer; 72 char* unwrittenBuffer;
72 unsigned int unwritten; 73 unsigned int unwritten;
73#endif 74#endif
74 75
75 static int dspFd; 76 static int dspFd;
76 static bool muted; 77 static bool muted;
77 static unsigned int leftVolume; 78 static unsigned int leftVolume;
78 static unsigned int rightVolume; 79 static unsigned int rightVolume;
79}; 80};
80 81
81 82
82#ifdef Q_WS_QWS 83#ifdef Q_WS_QWS
83// This is for keeping the device open in-between playing files when 84// This is for keeping the device open in-between playing files when
84// the device makes clicks and it starts to drive you insane! :) 85// the device makes clicks and it starts to drive you insane! :)
85// Best to have the device not open when not using it though 86// Best to have the device not open when not using it though
86//#define KEEP_DEVICE_OPEN 87//#define KEEP_DEVICE_OPEN
87#endif 88#endif
88 89
89 90
90int AudioDevicePrivate::dspFd = 0; 91int AudioDevicePrivate::dspFd = 0;
91bool AudioDevicePrivate::muted = FALSE; 92bool AudioDevicePrivate::muted = FALSE;
92unsigned int AudioDevicePrivate::leftVolume = 0; 93unsigned int AudioDevicePrivate::leftVolume = 0;
93unsigned int AudioDevicePrivate::rightVolume = 0; 94unsigned int AudioDevicePrivate::rightVolume = 0;
94 95
95 96
96void AudioDevice::getVolume( unsigned int& leftVolume, unsigned int& rightVolume, bool &muted ) { 97void AudioDevice::getVolume( unsigned int& leftVolume, unsigned int& rightVolume, bool &muted ) {
97 muted = AudioDevicePrivate::muted; 98 muted = AudioDevicePrivate::muted;
98 unsigned int volume; 99 unsigned int volume;
99#ifdef Q_OS_WIN32 100#ifdef Q_OS_WIN32
100 HWAVEOUT handle; 101 HWAVEOUT handle;
101 WAVEFORMATEX formatData; 102 WAVEFORMATEX formatData;
102 formatData.cbSize = sizeof(WAVEFORMATEX); 103 formatData.cbSize = sizeof(WAVEFORMATEX);
103 formatData.wFormatTag = WAVE_FORMAT_PCM; 104 formatData.wFormatTag = WAVE_FORMAT_PCM;
104 formatData.nAvgBytesPerSec = 4 * 44000; 105 formatData.nAvgBytesPerSec = 4 * 44000;
105 formatData.nBlockAlign = 4; 106 formatData.nBlockAlign = 4;
106 formatData.nChannels = 2; 107 formatData.nChannels = 2;
107 formatData.nSamplesPerSec = 44000; 108 formatData.nSamplesPerSec = 44000;
108 formatData.wBitsPerSample = 16; 109 formatData.wBitsPerSample = 16;
109 waveOutOpen(&handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL); 110 waveOutOpen(&handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL);
110 if ( waveOutGetVolume( handle, (LPDWORD)&volume ) ) 111 if ( waveOutGetVolume( handle, (LPDWORD)&volume ) )
111// qDebug( "get volume of audio device failed" ); 112// qDebug( "get volume of audio device failed" );
112 waveOutClose( handle ); 113 waveOutClose( handle );
113 leftVolume = volume & 0xFFFF; 114 leftVolume = volume & 0xFFFF;
114 rightVolume = volume >> 16; 115 rightVolume = volume >> 16;
115#else 116#else
116 int mixerHandle = open( "/dev/mixer", O_RDWR ); 117 int mixerHandle = open( "/dev/mixer", O_RDWR );
117 if ( mixerHandle >= 0 ) { 118 if ( mixerHandle >= 0 ) {
118 if(ioctl( mixerHandle, MIXER_READ(0), &volume )==-1) 119 if(ioctl( mixerHandle, MIXER_READ(0), &volume )==-1)
119 perror("ioctl(\"MIXER_READ\")"); 120 perror("ioctl(\"MIXER_READ\")");
120 close( mixerHandle ); 121 close( mixerHandle );
121 } else 122 } else
122 perror("open(\"/dev/mixer\")"); 123 perror("open(\"/dev/mixer\")");
123 leftVolume = ((volume & 0x00FF) << 16) / 101; 124 leftVolume = ((volume & 0x00FF) << 16) / 101;
124 rightVolume = ((volume & 0xFF00) << 8) / 101; 125 rightVolume = ((volume & 0xFF00) << 8) / 101;
125#endif 126#endif
126} 127}
127 128
128 129
129void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume, bool muted ) { 130void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume, bool muted ) {
130 AudioDevicePrivate::muted = muted; 131 AudioDevicePrivate::muted = muted;
131 if ( muted ) { 132 if ( muted ) {
132 AudioDevicePrivate::leftVolume = leftVolume; 133 AudioDevicePrivate::leftVolume = leftVolume;
133 AudioDevicePrivate::rightVolume = rightVolume; 134 AudioDevicePrivate::rightVolume = rightVolume;
134 leftVolume = 0; 135 leftVolume = 0;
135 rightVolume = 0; 136 rightVolume = 0;
136 } else { 137 } else {
137 leftVolume = ( (int) leftVolume < 0 ) ? 0 : (( leftVolume > 0xFFFF ) ? 0xFFFF : leftVolume ); 138 leftVolume = ( (int) leftVolume < 0 ) ? 0 : (( leftVolume > 0xFFFF ) ? 0xFFFF : leftVolume );
138 rightVolume = ( (int)rightVolume < 0 ) ? 0 : (( rightVolume > 0xFFFF ) ? 0xFFFF : rightVolume ); 139 rightVolume = ( (int)rightVolume < 0 ) ? 0 : (( rightVolume > 0xFFFF ) ? 0xFFFF : rightVolume );
139 } 140 }
140#ifdef Q_OS_WIN32 141#ifdef Q_OS_WIN32
141 HWAVEOUT handle; 142 HWAVEOUT handle;
142 WAVEFORMATEX formatData; 143 WAVEFORMATEX formatData;
143 formatData.cbSize = sizeof(WAVEFORMATEX); 144 formatData.cbSize = sizeof(WAVEFORMATEX);
144 formatData.wFormatTag = WAVE_FORMAT_PCM; 145 formatData.wFormatTag = WAVE_FORMAT_PCM;
145 formatData.nAvgBytesPerSec = 4 * 44000; 146 formatData.nAvgBytesPerSec = 4 * 44000;
146 formatData.nBlockAlign = 4; 147 formatData.nBlockAlign = 4;
147 formatData.nChannels = 2; 148 formatData.nChannels = 2;
148 formatData.nSamplesPerSec = 44000; 149 formatData.nSamplesPerSec = 44000;
149 formatData.wBitsPerSample = 16; 150 formatData.wBitsPerSample = 16;
150 waveOutOpen(&handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL); 151 waveOutOpen(&handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL);
151 unsigned int volume = (rightVolume << 16) | leftVolume; 152 unsigned int volume = (rightVolume << 16) | leftVolume;
152 if ( waveOutSetVolume( handle, volume ) ) 153 if ( waveOutSetVolume( handle, volume ) )
153// qDebug( "set volume of audio device failed" ); 154// qDebug( "set volume of audio device failed" );
154 waveOutClose( handle ); 155 waveOutClose( handle );
155#else 156#else
156 // Volume can be from 0 to 100 which is 101 distinct values 157 // Volume can be from 0 to 100 which is 101 distinct values
157 unsigned int rV = (rightVolume * 101) >> 16; 158 unsigned int rV = (rightVolume * 101) >> 16;
158 159
159# if 0 160# if 0
160 unsigned int lV = (leftVolume * 101) >> 16; 161 unsigned int lV = (leftVolume * 101) >> 16;
161 unsigned int volume = ((rV << 8) & 0xFF00) | (lV & 0x00FF); 162 unsigned int volume = ((rV << 8) & 0xFF00) | (lV & 0x00FF);
162 int mixerHandle = 0; 163 int mixerHandle = 0;
163 if ( ( mixerHandle = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 164 if ( ( mixerHandle = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
164 if(ioctl( mixerHandle, MIXER_WRITE(0), &volume ) ==-1) 165 if(ioctl( mixerHandle, MIXER_WRITE(0), &volume ) ==-1)
165 perror("ioctl(\"MIXER_WRITE\")"); 166 perror("ioctl(\"MIXER_WRITE\")");
166 close( mixerHandle ); 167 close( mixerHandle );
167 } else 168 } else
168 perror("open(\"/dev/mixer\")"); 169 perror("open(\"/dev/mixer\")");
169 170
170# else 171# else
171 // This is the way this has to be done now I guess, doesn't allow for 172 // This is the way this has to be done now I guess, doesn't allow for
172 // independant right and left channel setting, or setting for different outputs 173 // independant right and left channel setting, or setting for different outputs
173 Config cfg("Sound"); 174 Config cfg("Sound");
174 cfg.setGroup("System"); 175 cfg.setGroup("System");
175 cfg.writeEntry("Volume",(int)rV); 176 cfg.writeEntry("Volume",(int)rV);
176# endif 177# endif
177 178
178#endif 179#endif
179// qDebug( "setting volume to: 0x%x", volume ); 180// qDebug( "setting volume to: 0x%x", volume );
180#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP) 181#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
181 // Send notification that the volume has changed 182 // Send notification that the volume has changed
182 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << muted; 183 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << muted;
183#endif 184#endif
184} 185}
185 186
186 187
187 188
188 189
189AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) { 190AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) {
190 qDebug("creating new audio device"); 191 qDebug("creating new audio device");
192 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << TRUE;
191 d = new AudioDevicePrivate; 193 d = new AudioDevicePrivate;
192 d->frequency = f; 194 d->frequency = f;
193 d->channels = chs; 195 d->channels = chs;
194 d->bytesPerSample = bps; 196 d->bytesPerSample = bps;
195 qDebug("%d",bps); 197 qDebug("%d",bps);
196 int format=0; 198 int format=0;
197 if( bps == 8) format = AFMT_U8; 199 if( bps == 8) format = AFMT_U8;
198 else if( bps <= 0) format = AFMT_S16_LE; 200 else if( bps <= 0) format = AFMT_S16_LE;
199 else format = AFMT_S16_LE; 201 else format = AFMT_S16_LE;
200 qDebug("AD- freq %d, channels %d, b/sample %d, bitrate %d",f,chs,bps,format); 202 qDebug("AD- freq %d, channels %d, b/sample %d, bitrate %d",f,chs,bps,format);
201 connect( qApp, SIGNAL( volumeChanged(bool) ), this, SLOT( volumeChanged(bool) ) ); 203 connect( qApp, SIGNAL( volumeChanged(bool) ), this, SLOT( volumeChanged(bool) ) );
202 204
203 int fragments = 0x10000 * 8 + sound_fragment_shift; 205 int fragments = 0x10000 * 8 + sound_fragment_shift;
204 int capabilities = 0; 206 int capabilities = 0;
205 207
206 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << TRUE;
207 208
208#ifdef KEEP_DEVICE_OPEN 209#ifdef KEEP_DEVICE_OPEN
209 if ( AudioDevicePrivate::dspFd == 0 ) { 210 if ( AudioDevicePrivate::dspFd == 0 ) {
210#endif 211#endif
211 if ( ( d->handle = ::open( "/dev/dsp", O_WRONLY ) ) < 0 ) { 212 if ( ( d->handle = ::open( "/dev/dsp", O_WRONLY ) ) < 0 ) {
212 perror("open(\"/dev/dsp\") sending to /dev/null instead"); 213 perror("open(\"/dev/dsp\") sending to /dev/null instead");
213 d->handle = ::open( "/dev/null", O_WRONLY ); 214 d->handle = ::open( "/dev/null", O_WRONLY );
214 } 215 }
215#ifdef KEEP_DEVICE_OPEN 216#ifdef KEEP_DEVICE_OPEN
216 AudioDevicePrivate::dspFd = d->handle; 217 AudioDevicePrivate::dspFd = d->handle;
217 } else { 218 } else {
218 d->handle = AudioDevicePrivate::dspFd; 219 d->handle = AudioDevicePrivate::dspFd;
219 } 220 }
220#endif 221#endif
221 222
222 if(ioctl( d->handle, SNDCTL_DSP_GETCAPS, &capabilities )==-1) 223 if(ioctl( d->handle, SNDCTL_DSP_GETCAPS, &capabilities )==-1)
223 perror("ioctl(\"SNDCTL_DSP_GETCAPS\")"); 224 perror("ioctl(\"SNDCTL_DSP_GETCAPS\")");
224 if(ioctl( d->handle, SNDCTL_DSP_SETFRAGMENT, &fragments )==-1) 225 if(ioctl( d->handle, SNDCTL_DSP_SETFRAGMENT, &fragments )==-1)
225 perror("ioctl(\"SNDCTL_DSP_SETFRAGMENT\")"); 226 perror("ioctl(\"SNDCTL_DSP_SETFRAGMENT\")");
226 if(ioctl( d->handle, SNDCTL_DSP_SETFMT, & format )==-1) 227 if(ioctl( d->handle, SNDCTL_DSP_SETFMT, & format )==-1)
227 perror("ioctl(\"SNDCTL_DSP_SETFMT\")"); 228 perror("ioctl(\"SNDCTL_DSP_SETFMT\")");
228 qDebug("freq %d", d->frequency); 229 qDebug("freq %d", d->frequency);
229 if(ioctl( d->handle, SNDCTL_DSP_SPEED, &d->frequency )==-1) 230 if(ioctl( d->handle, SNDCTL_DSP_SPEED, &d->frequency )==-1)
230 perror("ioctl(\"SNDCTL_DSP_SPEED\")"); 231 perror("ioctl(\"SNDCTL_DSP_SPEED\")");
231 qDebug("channels %d",d->channels); 232 qDebug("channels %d",d->channels);
232 if ( ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels ) == -1 ) { 233 if ( ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels ) == -1 ) {
233 d->channels = ( d->channels == 1 ) ? 2 : d->channels; 234 d->channels = ( d->channels == 1 ) ? 2 : d->channels;
234 if(ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels )==-1) 235 if(ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels )==-1)
235 perror("ioctl(\"SNDCTL_DSP_CHANNELS\")"); 236 perror("ioctl(\"SNDCTL_DSP_CHANNELS\")");
236 } 237 }
237 238
238 d->bufferSize = sound_fragment_bytes; 239 d->bufferSize = sound_fragment_bytes;
239 d->unwrittenBuffer = new char[d->bufferSize]; 240 d->unwrittenBuffer = new char[d->bufferSize];
240 d->unwritten = 0; 241 d->unwritten = 0;
241 d->can_GETOSPACE = TRUE; // until we find otherwise 242 d->can_GETOSPACE = TRUE; // until we find otherwise
242 243
243 //if ( chs != d->channels ) qDebug( "Wanted %d, got %d channels", chs, d->channels ); 244 //if ( chs != d->channels ) qDebug( "Wanted %d, got %d channels", chs, d->channels );
244 //if ( f != d->frequency ) qDebug( "wanted %dHz, got %dHz", f, d->frequency ); 245 //if ( f != d->frequency ) qDebug( "wanted %dHz, got %dHz", f, d->frequency );
245 //if ( capabilities & DSP_CAP_BATCH ) qDebug( "Sound card has local buffer" ); 246 //if ( capabilities & DSP_CAP_BATCH ) qDebug( "Sound card has local buffer" );
246 //if ( capabilities & DSP_CAP_REALTIME )qDebug( "Sound card has realtime sync" ); 247 //if ( capabilities & DSP_CAP_REALTIME )qDebug( "Sound card has realtime sync" );
247 //if ( capabilities & DSP_CAP_TRIGGER ) qDebug( "Sound card has precise trigger" ); 248 //if ( capabilities & DSP_CAP_TRIGGER ) qDebug( "Sound card has precise trigger" );
248 //if ( capabilities & DSP_CAP_MMAP ) qDebug( "Sound card can mmap" ); 249 //if ( capabilities & DSP_CAP_MMAP ) qDebug( "Sound card can mmap" );
249 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << FALSE; 250 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << FALSE;
250 251
251} 252}
252 253
253 254
254AudioDevice::~AudioDevice() { 255AudioDevice::~AudioDevice() {
255 qDebug("destryo audiodevice"); 256 qDebug("destryo audiodevice");
256 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << TRUE; 257 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << TRUE;
257 258
258#ifdef Q_OS_WIN32 259#ifdef Q_OS_WIN32
259 waveOutClose( (HWAVEOUT)d->handle ); 260 waveOutClose( (HWAVEOUT)d->handle );
260#else 261#else
261# ifndef KEEP_DEVICE_OPEN 262# ifndef KEEP_DEVICE_OPEN
262 close( d->handle ); // Now it should be safe to shut the handle 263 close( d->handle ); // Now it should be safe to shut the handle
263# endif 264# endif
264 delete d->unwrittenBuffer; 265 delete d->unwrittenBuffer;
265 delete d; 266 delete d;
266#endif 267#endif
267 QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << FALSE;
268 268
269} 269}
270 270
271 271
272void AudioDevice::volumeChanged( bool muted ) 272void AudioDevice::volumeChanged( bool muted )
273{ 273{
274 AudioDevicePrivate::muted = muted; 274 AudioDevicePrivate::muted = muted;
275} 275}
276 276
277 277
278void AudioDevice::write( char *buffer, unsigned int length ) 278void AudioDevice::write( char *buffer, unsigned int length )
279{ 279{
280#ifdef Q_OS_WIN32 280#ifdef Q_OS_WIN32
281 // returns immediately and (to be implemented) emits completedIO() when finished writing 281 // returns immediately and (to be implemented) emits completedIO() when finished writing
282 WAVEHDR *lpWaveHdr = (WAVEHDR *)malloc( sizeof(WAVEHDR) ); 282 WAVEHDR *lpWaveHdr = (WAVEHDR *)malloc( sizeof(WAVEHDR) );
283 // maybe the buffer should be copied so that this fool proof, but its a performance hit 283 // maybe the buffer should be copied so that this fool proof, but its a performance hit
284 lpWaveHdr->lpData = buffer; 284 lpWaveHdr->lpData = buffer;
285 lpWaveHdr->dwBufferLength = length; 285 lpWaveHdr->dwBufferLength = length;
286 lpWaveHdr->dwFlags = 0L; 286 lpWaveHdr->dwFlags = 0L;
287 lpWaveHdr->dwLoops = 0L; 287 lpWaveHdr->dwLoops = 0L;
288 waveOutPrepareHeader( (HWAVEOUT)d->handle, lpWaveHdr, sizeof(WAVEHDR) ); 288 waveOutPrepareHeader( (HWAVEOUT)d->handle, lpWaveHdr, sizeof(WAVEHDR) );
289 // waveOutWrite returns immediately. the data is sent in the background. 289 // waveOutWrite returns immediately. the data is sent in the background.
290 if ( waveOutWrite( (HWAVEOUT)d->handle, lpWaveHdr, sizeof(WAVEHDR) ) ) 290 if ( waveOutWrite( (HWAVEOUT)d->handle, lpWaveHdr, sizeof(WAVEHDR) ) )
291 qDebug( "failed to write block to audio device" ); 291 qDebug( "failed to write block to audio device" );
292 // emit completedIO(); 292 // emit completedIO();
293#else 293#else
294 int t = ::write( d->handle, buffer, length ); 294 int t = ::write( d->handle, buffer, length );
295 if ( t<0 ) t = 0; 295 if ( t<0 ) t = 0;
296 if ( t != (int)length) { 296 if ( t != (int)length) {
297 qDebug("Ahhh!! memcpys 1"); 297 qDebug("Ahhh!! memcpys 1");
298 memcpy(d->unwrittenBuffer,buffer+t,length-t); 298 memcpy(d->unwrittenBuffer,buffer+t,length-t);
299 d->unwritten = length-t; 299 d->unwritten = length-t;
300 } 300 }
301#endif 301#endif
302} 302}
303 303
304 304
305unsigned int AudioDevice::channels() const 305unsigned int AudioDevice::channels() const
306{ 306{
307 return d->channels; 307 return d->channels;
308} 308}
309 309
310 310
311unsigned int AudioDevice::frequency() const 311unsigned int AudioDevice::frequency() const
312{ 312{
313 return d->frequency; 313 return d->frequency;
314} 314}
315 315
316 316
317unsigned int AudioDevice::bytesPerSample() const 317unsigned int AudioDevice::bytesPerSample() const
318{ 318{
319 return d->bytesPerSample; 319 return d->bytesPerSample;
320} 320}
321 321
322 322
323unsigned int AudioDevice::bufferSize() const 323unsigned int AudioDevice::bufferSize() const
324{ 324{
325 return d->bufferSize; 325 return d->bufferSize;
326} 326}
327 327
328unsigned int AudioDevice::canWrite() const 328unsigned int AudioDevice::canWrite() const
329{ 329{
330#ifdef Q_OS_WIN32 330#ifdef Q_OS_WIN32
331 return bufferSize(); // Any better? 331 return bufferSize(); // Any better?
332#else 332#else
333 audio_buf_info info; 333 audio_buf_info info;
334 if ( d->can_GETOSPACE && ioctl(d->handle,SNDCTL_DSP_GETOSPACE,&info) ) { 334 if ( d->can_GETOSPACE && ioctl(d->handle,SNDCTL_DSP_GETOSPACE,&info) ) {
335 d->can_GETOSPACE = FALSE; 335 d->can_GETOSPACE = FALSE;
336 fcntl( d->handle, F_SETFL, O_NONBLOCK ); 336 fcntl( d->handle, F_SETFL, O_NONBLOCK );
337 } 337 }
338 if ( d->can_GETOSPACE ) { 338 if ( d->can_GETOSPACE ) {
339 int t = info.fragments * sound_fragment_bytes; 339 int t = info.fragments * sound_fragment_bytes;
340 return QMIN(t,(int)bufferSize()); 340 return QMIN(t,(int)bufferSize());
341 } else { 341 } else {
342 if ( d->unwritten ) { 342 if ( d->unwritten ) {
343 int t = ::write( d->handle, d->unwrittenBuffer, d->unwritten ); 343 int t = ::write( d->handle, d->unwrittenBuffer, d->unwritten );
344 if ( t<0 ) t = 0; 344 if ( t<0 ) t = 0;
345 if ( (unsigned)t!=d->unwritten ) { 345 if ( (unsigned)t!=d->unwritten ) {
346 memcpy(d->unwrittenBuffer,d->unwrittenBuffer+t,d->unwritten-t); 346 memcpy(d->unwrittenBuffer,d->unwrittenBuffer+t,d->unwritten-t);
347 d->unwritten -= t; 347 d->unwritten -= t;
348 } else { 348 } else {
349 d->unwritten = 0; 349 d->unwritten = 0;
350 } 350 }
351 } 351 }
352 if ( d->unwritten ) 352 if ( d->unwritten )
353 return 0; 353 return 0;
354 else 354 else
355 return d->bufferSize; 355 return d->bufferSize;
356 } 356 }
357#endif 357#endif
358} 358}
359 359
360 360
361int AudioDevice::bytesWritten() { 361int AudioDevice::bytesWritten() {
362#ifdef Q_OS_WIN32 362#ifdef Q_OS_WIN32
363 MMTIME pmmt = { TIME_BYTES, 0 }; 363 MMTIME pmmt = { TIME_BYTES, 0 };
diff --git a/core/multimedia/opieplayer/playlistwidget.cpp b/core/multimedia/opieplayer/playlistwidget.cpp
index 930560e..d7447b7 100644
--- a/core/multimedia/opieplayer/playlistwidget.cpp
+++ b/core/multimedia/opieplayer/playlistwidget.cpp
@@ -747,250 +747,247 @@ void PlayListWidget::addSelected() {
747} 747}
748 748
749void PlayListWidget::removeSelected() { 749void PlayListWidget::removeSelected() {
750 d->selectedFiles->removeSelected( ); 750 d->selectedFiles->removeSelected( );
751} 751}
752 752
753void PlayListWidget::playIt( QListViewItem *it) { 753void PlayListWidget::playIt( QListViewItem *it) {
754// d->setDocumentUsed = FALSE; 754// d->setDocumentUsed = FALSE;
755 mediaPlayerState->setPlaying(FALSE); 755 mediaPlayerState->setPlaying(FALSE);
756 mediaPlayerState->setPlaying(TRUE); 756 mediaPlayerState->setPlaying(TRUE);
757 d->selectedFiles->unSelect(); 757 d->selectedFiles->unSelect();
758} 758}
759 759
760void PlayListWidget::addToSelection( QListViewItem *it) { 760void PlayListWidget::addToSelection( QListViewItem *it) {
761 d->setDocumentUsed = FALSE; 761 d->setDocumentUsed = FALSE;
762 762
763 if(it) { 763 if(it) {
764 switch (tabWidget->currentPageIndex()) { 764 switch (tabWidget->currentPageIndex()) {
765 case 1: { 765 case 1: {
766 QListIterator<DocLnk> dit( files.children() ); 766 QListIterator<DocLnk> dit( files.children() );
767 for ( ; dit.current(); ++dit ) { 767 for ( ; dit.current(); ++dit ) {
768 if( dit.current()->name() == it->text(0)) { 768 if( dit.current()->name() == it->text(0)) {
769 d->selectedFiles->addToSelection( **dit ); 769 d->selectedFiles->addToSelection( **dit );
770 } 770 }
771 } 771 }
772 } 772 }
773 break; 773 break;
774 case 2: { 774 case 2: {
775 QListIterator<DocLnk> dit( vFiles.children() ); 775 QListIterator<DocLnk> dit( vFiles.children() );
776 for ( ; dit.current(); ++dit ) { 776 for ( ; dit.current(); ++dit ) {
777 if( dit.current()->name() == it->text(0)) { 777 if( dit.current()->name() == it->text(0)) {
778 d->selectedFiles->addToSelection( **dit ); 778 d->selectedFiles->addToSelection( **dit );
779 } 779 }
780 } 780 }
781 } 781 }
782 break; 782 break;
783 case 0: 783 case 0:
784 break; 784 break;
785 }; 785 };
786 tabWidget->setCurrentPage(0); 786 tabWidget->setCurrentPage(0);
787 } 787 }
788} 788}
789 789
790void PlayListWidget::tabChanged(QWidget *widg) { 790void PlayListWidget::tabChanged(QWidget *widg) {
791 791
792 switch ( tabWidget->currentPageIndex()) { 792 switch ( tabWidget->currentPageIndex()) {
793 case 0: 793 case 0:
794 { 794 {
795 if( !tbDeletePlaylist->isHidden()) 795 if( !tbDeletePlaylist->isHidden())
796 tbDeletePlaylist->hide(); 796 tbDeletePlaylist->hide();
797 d->tbRemoveFromList->setEnabled(TRUE); 797 d->tbRemoveFromList->setEnabled(TRUE);
798 d->tbAddToList->setEnabled(FALSE); 798 d->tbAddToList->setEnabled(FALSE);
799 } 799 }
800 break; 800 break;
801 case 1: 801 case 1:
802 { 802 {
803 audioView->clear(); 803 audioView->clear();
804 populateAudioView(); 804 populateAudioView();
805 805
806 if( !tbDeletePlaylist->isHidden()) 806 if( !tbDeletePlaylist->isHidden())
807 tbDeletePlaylist->hide(); 807 tbDeletePlaylist->hide();
808 d->tbRemoveFromList->setEnabled(FALSE); 808 d->tbRemoveFromList->setEnabled(FALSE);
809 d->tbAddToList->setEnabled(TRUE); 809 d->tbAddToList->setEnabled(TRUE);
810 } 810 }
811 break; 811 break;
812 case 2: 812 case 2:
813 { 813 {
814 videoView->clear(); 814 videoView->clear();
815 populateVideoView(); 815 populateVideoView();
816 if( !tbDeletePlaylist->isHidden()) 816 if( !tbDeletePlaylist->isHidden())
817 tbDeletePlaylist->hide(); 817 tbDeletePlaylist->hide();
818 d->tbRemoveFromList->setEnabled(FALSE); 818 d->tbRemoveFromList->setEnabled(FALSE);
819 d->tbAddToList->setEnabled(TRUE); 819 d->tbAddToList->setEnabled(TRUE);
820 } 820 }
821 break; 821 break;
822 case 3: 822 case 3:
823 { 823 {
824 if( tbDeletePlaylist->isHidden()) 824 if( tbDeletePlaylist->isHidden())
825 tbDeletePlaylist->show(); 825 tbDeletePlaylist->show();
826 playLists->reread(); 826 playLists->reread();
827 } 827 }
828 break; 828 break;
829 }; 829 };
830} 830}
831 831
832void PlayListWidget::btnPlay(bool b) { 832void PlayListWidget::btnPlay(bool b) {
833 833
834// mediaPlayerState->setPlaying(b); 834// mediaPlayerState->setPlaying(b);
835 switch ( tabWidget->currentPageIndex()) { 835 switch ( tabWidget->currentPageIndex()) {
836 case 0: 836 case 0:
837 { 837 {
838 mediaPlayerState->setPlaying(b); 838 mediaPlayerState->setPlaying(b);
839 } 839 }
840 break; 840 break;
841 case 1: 841 case 1:
842 { 842 {
843// if(audioView->selectedItem()) { 843 addToSelection( audioView->currentItem() );
844 addToSelection( audioView->selectedItem() );
845 mediaPlayerState->setPlaying(b); 844 mediaPlayerState->setPlaying(b);
846 d->selectedFiles->removeSelected( ); 845 d->selectedFiles->removeSelected( );
847 tabWidget->setCurrentPage(1); 846 tabWidget->setCurrentPage(1);
848 d->selectedFiles->unSelect(); 847 d->selectedFiles->unSelect();
849 insanityBool=FALSE; 848 insanityBool=FALSE;
850// audioView->clearSelection(); 849// audioView->clearSelection();
851// }
852 } 850 }
853 break; 851 break;
854 case 2: 852 case 2:
855 { 853 {
856// if(videoView->selectedItem() ) { 854 addToSelection( videoView->currentItem() );
857 addToSelection( videoView->selectedItem() );
858 mediaPlayerState->setPlaying(b); 855 mediaPlayerState->setPlaying(b);
859 qApp->processEvents(); 856 qApp->processEvents();
860 d->selectedFiles->removeSelected( ); 857 d->selectedFiles->removeSelected( );
861 tabWidget->setCurrentPage(2); 858 tabWidget->setCurrentPage(2);
862 d->selectedFiles->unSelect(); 859 d->selectedFiles->unSelect();
863 insanityBool=FALSE; 860 insanityBool=FALSE;
864// videoView->clearSelection(); 861// videoView->clearSelection();
865// }
866 } 862 }
867 break; 863 break;
868 }; 864 };
869} 865}
870 866
871void PlayListWidget::deletePlaylist() { 867void PlayListWidget::deletePlaylist() {
872 switch( QMessageBox::information( this, (tr("Remove Playlist?")), 868 switch( QMessageBox::information( this, (tr("Remove Playlist?")),
873 (tr("You really want to delete\nthis playlist?")), 869 (tr("You really want to delete\nthis playlist?")),
874 (tr("Yes")), (tr("No")), 0 )){ 870 (tr("Yes")), (tr("No")), 0 )){
875 case 0: // Yes clicked, 871 case 0: // Yes clicked,
876 QFile().remove(playLists->selected()->file()); 872 QFile().remove(playLists->selected()->file());
877 QFile().remove(playLists->selected()->linkFile()); 873 QFile().remove(playLists->selected()->linkFile());
878 playLists->reread(); 874 playLists->reread();
879 break; 875 break;
880 case 1: // Cancel 876 case 1: // Cancel
881 break; 877 break;
882 }; 878 };
883} 879}
884 880
885void PlayListWidget::viewPressed( int mouse, QListViewItem *item, const QPoint& point, int i) 881void PlayListWidget::viewPressed( int mouse, QListViewItem *item, const QPoint& point, int i)
886{ 882{
887 switch (mouse) { 883 switch (mouse) {
888 case 1: 884 case 1:
889 break; 885 break;
890 case 2:{ 886 case 2:{
891 QPopupMenu m; 887
892 m.insertItem( tr( "Play" ), this, SLOT( playSelected() )); 888 QPopupMenu m;
893 m.insertItem( tr( "Add to Playlist" ), this, SLOT( addSelected() )); 889 m.insertItem( tr( "Play" ), this, SLOT( playSelected() ));
894 m.insertSeparator(); 890 m.insertItem( tr( "Add to Playlist" ), this, SLOT( addSelected() ));
895 if( QFile(QPEApplication::qpeDir()+"lib/libopie.so").exists() ) 891 m.insertSeparator();
896 m.insertItem( tr( "Properties" ), this, SLOT( listDelete() )); 892 if( QFile(QPEApplication::qpeDir()+"lib/libopie.so").exists() )
893 m.insertItem( tr( "Properties" ), this, SLOT( listDelete() ));
897 894
898 m.exec( QCursor::pos() ); 895 m.exec( QCursor::pos() );
899 } 896 }
900 break; 897 break;
901 }; 898 };
902} 899}
903 900
904void PlayListWidget::playSelected() 901void PlayListWidget::playSelected()
905{ 902{
906 btnPlay( TRUE); 903 btnPlay( TRUE);
907// d->selectedFiles->unSelect(); 904// d->selectedFiles->unSelect();
908} 905}
909 906
910void PlayListWidget::playlistViewPressed( int mouse, QListViewItem *item, const QPoint& point, int i) 907void PlayListWidget::playlistViewPressed( int mouse, QListViewItem *item, const QPoint& point, int i)
911{ 908{
912 switch (mouse) { 909 switch (mouse) {
913 case 1: 910 case 1:
914 911
915 break; 912 break;
916 case 2:{ 913 case 2:{
917 QPopupMenu m; 914 QPopupMenu m;
918 m.insertItem( tr( "Play Selected" ), this, SLOT( playSelected() )); 915 m.insertItem( tr( "Play Selected" ), this, SLOT( playSelected() ));
919 m.insertItem( tr( "Remove" ), this, SLOT( removeSelected() )); 916 m.insertItem( tr( "Remove" ), this, SLOT( removeSelected() ));
920// m.insertSeparator(); 917// m.insertSeparator();
921// m.insertItem( tr( "Properties" ), this, SLOT( listDelete() )); 918// m.insertItem( tr( "Properties" ), this, SLOT( listDelete() ));
922 m.exec( QCursor::pos() ); 919 m.exec( QCursor::pos() );
923 } 920 }
924 break; 921 break;
925 }; 922 };
926 923
927} 924}
928 925
929void PlayListWidget::listDelete() { 926void PlayListWidget::listDelete() {
930 Config cfg( "OpiePlayer" ); 927 Config cfg( "OpiePlayer" );
931 cfg.setGroup("PlayList"); 928 cfg.setGroup("PlayList");
932 QString currentPlaylist = cfg.readEntry("CurrentPlaylist",""); 929 QString currentPlaylist = cfg.readEntry("CurrentPlaylist","");
933 QString file; 930 QString file;
934 int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); 931 int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 );
935 switch ( tabWidget->currentPageIndex()) { 932 switch ( tabWidget->currentPageIndex()) {
936 case 0: 933 case 0:
937 break; 934 break;
938 case 1: 935 case 1:
939 { 936 {
940 file = audioView->selectedItem()->text(0); 937 file = audioView->selectedItem()->text(0);
941// Global::findDocuments(&files, "audio/*"); 938// Global::findDocuments(&files, "audio/*");
942// AppLnkSet appFiles; 939// AppLnkSet appFiles;
943 QListIterator<DocLnk> dit( files.children() ); 940 QListIterator<DocLnk> dit( files.children() );
944 for ( ; dit.current(); ++dit ) { 941 for ( ; dit.current(); ++dit ) {
945 if( dit.current()->name() == file) { 942 if( dit.current()->name() == file) {
946// qDebug(file); 943// qDebug(file);
947 LnkProperties prop( dit.current() ); 944 LnkProperties prop( dit.current() );
948// connect(&prop, SIGNAL(select(const AppLnk *)), this, SLOT(externalSelected(const AppLnk *))); 945// connect(&prop, SIGNAL(select(const AppLnk *)), this, SLOT(externalSelected(const AppLnk *)));
949 prop.showMaximized(); 946 prop.showMaximized();
950 prop.exec(); 947 prop.exec();
951 } 948 }
952 } 949 }
953 populateAudioView(); 950 populateAudioView();
954 } 951 }
955 break; 952 break;
956 case 2: 953 case 2:
957 { 954 {
958// file = videoView->selectedItem()->text(0); 955// file = videoView->selectedItem()->text(0);
959// for ( int i = 0; i < noOfFiles; i++ ) { 956// for ( int i = 0; i < noOfFiles; i++ ) {
960// QString entryName; 957// QString entryName;
961// entryName.sprintf( "File%i", i + 1 ); 958// entryName.sprintf( "File%i", i + 1 );
962// QString linkFile = cfg.readEntry( entryName ); 959// QString linkFile = cfg.readEntry( entryName );
963// AppLnk lnk( AppLnk(linkFile)); 960// AppLnk lnk( AppLnk(linkFile));
964// if( lnk.name() == file ) { 961// if( lnk.name() == file ) {
965// LnkProperties prop( &lnk); 962// LnkProperties prop( &lnk);
966// // connect(&prop, SIGNAL(select(const AppLnk *)), this, SLOT(externalSelected(const AppLnk *))); 963// // connect(&prop, SIGNAL(select(const AppLnk *)), this, SLOT(externalSelected(const AppLnk *)));
967// prop.showMaximized(); 964// prop.showMaximized();
968// prop.exec(); 965// prop.exec();
969// } 966// }
970// } 967// }
971 } 968 }
972 break; 969 break;
973 }; 970 };
974} 971}
975 972
976void PlayListWidget::scanForAudio() { 973void PlayListWidget::scanForAudio() {
977 qDebug("scan for audio"); 974 qDebug("scan for audio");
978 files.detachChildren(); 975 files.detachChildren();
979 QListIterator<DocLnk> sdit( files.children() ); 976 QListIterator<DocLnk> sdit( files.children() );
980 for ( ; sdit.current(); ++sdit ) { 977 for ( ; sdit.current(); ++sdit ) {
981 delete sdit.current(); 978 delete sdit.current();
982 } 979 }
983 Global::findDocuments(&files, "audio/*"); 980 Global::findDocuments(&files, "audio/*");
984 audioScan = TRUE; 981 audioScan = TRUE;
985} 982}
986void PlayListWidget::scanForVideo() { 983void PlayListWidget::scanForVideo() {
987 qDebug("scan for video"); 984 qDebug("scan for video");
988 vFiles.detachChildren(); 985 vFiles.detachChildren();
989 QListIterator<DocLnk> sdit( vFiles.children() ); 986 QListIterator<DocLnk> sdit( vFiles.children() );
990 for ( ; sdit.current(); ++sdit ) { 987 for ( ; sdit.current(); ++sdit ) {
991 delete sdit.current(); 988 delete sdit.current();
992 } 989 }
993 Global::findDocuments(&vFiles, "video/*"); 990 Global::findDocuments(&vFiles, "video/*");
994 videoScan = TRUE; 991 videoScan = TRUE;
995} 992}
996 993
diff --git a/core/multimedia/opieplayer/playlistwidget.h b/core/multimedia/opieplayer/playlistwidget.h
index 6569f35..5837ed3 100644
--- a/core/multimedia/opieplayer/playlistwidget.h
+++ b/core/multimedia/opieplayer/playlistwidget.h
@@ -1,125 +1,125 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef PLAY_LIST_WIDGET_H 20#ifndef PLAY_LIST_WIDGET_H
21#define PLAY_LIST_WIDGET_H 21#define PLAY_LIST_WIDGET_H
22 22
23#include <qmainwindow.h> 23#include <qmainwindow.h>
24#include <qpe/applnk.h> 24#include <qpe/applnk.h>
25#include <qtabwidget.h> 25#include <qtabwidget.h>
26#include <qpe/fileselector.h> 26#include <qpe/fileselector.h>
27#include <qpushbutton.h> 27#include <qpushbutton.h>
28 28
29/* #include <qtimer.h> */ 29/* #include <qtimer.h> */
30 30
31 31
32class PlayListWidgetPrivate; 32class PlayListWidgetPrivate;
33class Config; 33class Config;
34class QListViewItem; 34class QListViewItem;
35class QListView; 35class QListView;
36class QPoint; 36class QPoint;
37class QAction; 37class QAction;
38class QLabel; 38class QLabel;
39 39
40class PlayListWidget : public QMainWindow { 40class PlayListWidget : public QMainWindow {
41 Q_OBJECT 41 Q_OBJECT
42public: 42public:
43 PlayListWidget( QWidget* parent=0, const char* name=0, WFlags fl=0 ); 43 PlayListWidget( QWidget* parent=0, const char* name=0, WFlags fl=0 );
44 ~PlayListWidget(); 44 ~PlayListWidget();
45 QTabWidget * tabWidget; 45 QTabWidget * tabWidget;
46 QAction *fullScreenButton, *scaleButton; 46 QAction *fullScreenButton, *scaleButton;
47 DocLnkSet files; 47 DocLnkSet files;
48 DocLnkSet vFiles; 48 DocLnkSet vFiles;
49 QListView *audioView, *videoView, *playlistView; 49 QListView *audioView, *videoView, *playlistView;
50 QLabel *libString; 50 QLabel *libString;
51 bool fromSetDocument; 51 bool fromSetDocument;
52 bool insanityBool; 52 bool insanityBool;
53 QString setDocFileRef; 53 QString setDocFileRef;
54 // retrieve the current playlist entry (media file link) 54 // retrieve the current playlist entry (media file link)
55 const DocLnk *current(); 55 const DocLnk *current();
56 void useSelectedDocument(); 56 void useSelectedDocument();
57/* QTimer * menuTimer; */ 57/* QTimer * menuTimer; */
58 FileSelector* playLists; 58 FileSelector* playLists;
59 QPushButton *tbDeletePlaylist; 59 QPushButton *tbDeletePlaylist;
60 int fd; 60 int fd, selected;
61public slots: 61public slots:
62 bool first(); 62 bool first();
63 bool last(); 63 bool last();
64 bool next(); 64 bool next();
65 bool prev(); 65 bool prev();
66/* void setFullScreen(); */ 66/* void setFullScreen(); */
67/* void setScaled(); */ 67/* void setScaled(); */
68protected: 68protected:
69/* void contentsMousePressEvent( QMouseEvent * e ); */ 69/* void contentsMousePressEvent( QMouseEvent * e ); */
70/* void contentsMouseReleaseEvent( QMouseEvent * e ); */ 70/* void contentsMouseReleaseEvent( QMouseEvent * e ); */
71void keyReleaseEvent( QKeyEvent *e); 71void keyReleaseEvent( QKeyEvent *e);
72void keyPressEvent( QKeyEvent *e); 72void keyPressEvent( QKeyEvent *e);
73private: 73private:
74 bool audioScan, videoScan; 74 bool audioScan, videoScan;
75 void doBlank(); 75 void doBlank();
76 void doUnblank(); 76 void doUnblank();
77 void readm3u(const QString &); 77 void readm3u(const QString &);
78 void writem3u(const QString &); 78 void writem3u(const QString &);
79 void readPls(const QString &); 79 void readPls(const QString &);
80 80
81 81
82 void initializeStates(); 82 void initializeStates();
83 void readConfig( Config& cfg ); 83 void readConfig( Config& cfg );
84 void writeConfig( Config& cfg ) const; 84 void writeConfig( Config& cfg ) const;
85 PlayListWidgetPrivate *d; // Private implementation data 85 PlayListWidgetPrivate *d; // Private implementation data
86 void populateAudioView(); 86 void populateAudioView();
87 void populateVideoView(); 87 void populateVideoView();
88private slots: 88private slots:
89 void scanForAudio(); 89 void scanForAudio();
90 void scanForVideo(); 90 void scanForVideo();
91 void openFile(); 91 void openFile();
92 void setDocument( const QString& fileref ); 92 void setDocument( const QString& fileref );
93 void addToSelection( const DocLnk& ); // Add a media file to the playlist 93 void addToSelection( const DocLnk& ); // Add a media file to the playlist
94 void addToSelection( QListViewItem* ); // Add a media file to the playlist 94 void addToSelection( QListViewItem* ); // Add a media file to the playlist
95 void setActiveWindow(); // need to handle this to show the right view 95 void setActiveWindow(); // need to handle this to show the right view
96 void setPlaylist( bool ); // Show/Hide the playlist 96 void setPlaylist( bool ); // Show/Hide the playlist
97 void setView( char ); 97 void setView( char );
98 void clearList(); 98 void clearList();
99 void addAllToList(); 99 void addAllToList();
100 void addAllMusicToList(); 100 void addAllMusicToList();
101 void addAllVideoToList(); 101 void addAllVideoToList();
102 void saveList(); // Save the playlist 102 void saveList(); // Save the playlist
103 void loadList( const DocLnk &); // Load a playlist 103 void loadList( const DocLnk &); // Load a playlist
104 void playIt( QListViewItem *); 104 void playIt( QListViewItem *);
105 105
106 void btnPlay(bool); 106 void btnPlay(bool);
107 void deletePlaylist(); 107 void deletePlaylist();
108 void addSelected(); 108 void addSelected();
109 void removeSelected(); 109 void removeSelected();
110 void tabChanged(QWidget*); 110 void tabChanged(QWidget*);
111 void viewPressed( int, QListViewItem *, const QPoint&, int); 111 void viewPressed( int, QListViewItem *, const QPoint&, int);
112 void playlistViewPressed( int, QListViewItem *, const QPoint&, int); 112 void playlistViewPressed( int, QListViewItem *, const QPoint&, int);
113 void playSelected(); 113 void playSelected();
114 void listDelete(); 114 void listDelete();
115 115
116protected slots: 116protected slots:
117/* void cancelMenuTimer(); */ 117/* void cancelMenuTimer(); */
118/* void showFileMenu(); */ 118/* void showFileMenu(); */
119 119
120 120
121}; 121};
122 122
123 123
124#endif // PLAY_LIST_WIDGET_H 124#endif // PLAY_LIST_WIDGET_H
125 125