00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef WAVE_WIDGET_HH
00022 #define WAVE_WIDGET_HH
00023
00026 #include <alsa/asoundlib.h>
00027
00028 #include <qdatetime.h>
00029 #include <qwidget.h>
00030
00043 #define PAINT_FREQ 100
00044
00045 class WaveFile;
00046 class PlayThread;
00047 class QMutex;
00048 class QTimer;
00049
00076 class WaveWidget : public QWidget
00077 {
00078 Q_OBJECT
00079
00080 public:
00091 WaveWidget(QWidget* parent=0, const char *name=0);
00092 ~WaveWidget();
00093
00120 bool loadFile(QString const fname);
00121
00136 bool isVisible(QTime const t) const;
00137
00150 QTime startTime() const;
00151
00164 QTime endTime() const;
00165
00178 void setStartTime(QTime t);
00179
00192 void setEndTime(QTime t);
00193
00194 public slots:
00195
00226 void playSelected();
00227
00242 void stopPlayback();
00243
00262 void setXZoom(int zoom);
00263
00276 void setYZoom(int zoom);
00277
00296 void scrollTo(int start);
00297
00298 signals:
00311 void startTimeChanged(QTime *start);
00312
00325 void endTimeChanged(QTime *end);
00326
00345 void lengthChanged(int length);
00346
00359 void positionChanged(int pos);
00360
00361 protected:
00374 void customEvent(QCustomEvent *e);
00375
00398 void mousePressEvent(QMouseEvent *e);
00399
00416 void paintEvent(QPaintEvent *);
00417
00418 private:
00419 int timeToPos(QTime t);
00420
00421 WaveFile *wave_file;
00422 PlayThread *pthread;
00423 snd_pcm_t *playback_handle;
00424 QTime left, right, start_time, end_time;
00425 int xzoom, yzoom;
00426 char *playdata;
00427 size_t playsize;
00428 bool playing;
00429 double play_position;
00430 QTime play_start, play_end;
00431 QMutex *paint_lock;
00432 QTimer *paint_timer;
00433 };
00434
00435 #endif // WAVE_WIDGET_HH