You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdemultimedia/kscd/kcompactdisc.h

305 lines
7.4 KiB

/*
* TDECompactDisc - A CD drive interface for the KDE Project.
*
* Copyright (c) 2005 Shaheedur R. Haque <srhaque@iee.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef KCOMPACTDISC_H
#define KCOMPACTDISC_H
#include <tqobject.h>
#include <tqtimer.h>
#include <tqvaluelist.h>
/**
* TDECompactDisc - A CD drive interface for the KDE Project.
*
* The disc lifecycle is modelled by these signals:
*
* @see #trayClosing(): A disc is being inserted.
* @see #discChanged(): A disc was inserted or removed.
* @see #trayOpening(): A disc is being removed.
*
* The progress of playout is modelled by these signals:
*
* @see #trackPlaying(): A track started playing, or is still playing.
* @see #trackPaused(): A track was paused.
* @see #discStopped(): The disc stopped.
*
* All times in this interface are in milliseconds. Valid track numbers are
* positive numbers; zero is not a valid track number.
*/
class TDECompactDisc :
public TQObject
{
Q_OBJECT
public:
enum InformationMode
{
Synchronous, // Return and emit signal when cdrom and cddb information arrives.
Asynchronous // Block until cdrom and cddb infromation has been obtained
};
TDECompactDisc(InformationMode=Synchronous);
virtual ~TDECompactDisc();
/**
* Open/close tray.
*/
void eject();
/**
* Start playout at given position of track.
*/
void play(unsigned startTrack = 0, unsigned startTrackPosition = 0, unsigned endTrack = 0);
/**
* Pause/resume playout.
*/
void pause();
/**
* If the url is a media:/ or system:/ URL returns
* the device it represents, otherwise returns device
*/
static TQString urlToDevice(const TQString& device);
/**
* @param device Name of CD device, e.g. /dev/cdrom.
* @param digitalPlayback Select digial or analogue playback.
* @param audioSystem For analogue playback, system to use, e.g. "arts".
* @param audioDevice For analogue playback, device to use.
* @return true if the device seemed usable.
*/
bool setDevice(
const TQString &device = defaultDevice,
unsigned volume = 50,
bool digitalPlayback = true,
const TQString &audioSystem = TQString(),
const TQString &audioDevice = TQString());
void setVolume(unsigned volume);
/**
* Stop playout.
*/
void stop();
/**
* The default CD for this system.
*/
static const TQString defaultDevice;
/**
* Current device.
*
* @return Null string if no usable device set.
*/
const TQString &device() const;
/**
* The discId for a missing disc.
*/
static const unsigned missingDisc;
/**
* Current disc, missingDisc if no disc.
*/
unsigned discId() const { return m_discId; }
/**
* CDDB signature of disc.
*/
const TQValueList<unsigned> &discSignature() const { return m_trackStartFrames; }
/**
* Artist for whole disc.
*
* @return Disc artist or null string.
*/
const TQString &discArtist() const { return m_artist; }
/**
* Title of disc.
*
* @return Disc title or null string.
*/
const TQString &discTitle() const { return m_title; }
/**
* Length of disc.
*
* @return Disc length in milliseconds.
*/
unsigned discLength() const;
/**
* Position in disc.
*
* @return Position in milliseconds.
*/
unsigned discPosition() const;
/**
* Artist of current track.
*
* @return Track artist or null string.
*/
const TQString &trackArtist() const;
/**
* Artist of given track.
*
* @return Track artist or null string.
*/
const TQString &trackArtist(unsigned track) const;
/**
* Title of current track.
*
* @return Track title or null string.
*/
const TQString &trackTitle() const;
/**
* Title of given track.
*
* @return Track title or null string.
*/
const TQString &trackTitle(unsigned track) const;
/**
* Current track.
*
* @return Track number.
*/
unsigned track() const;
/**
* Number of tracks.
*/
unsigned tracks() const;
/**
* @return if the track is actually an audio track.
*/
bool isAudio(unsigned track) const;
/**
* Length of current track.
*
* @return Track length in milliseconds.
*/
unsigned trackLength() const;
/**
* Length of given track.
*
* @param track Track number.
* @return Track length in milliseconds.
*/
unsigned trackLength(unsigned track) const;
/**
* Position in current track.
*
* @return Position in milliseconds.
*/
unsigned trackPosition() const;
bool isPaused() const;
bool isPlaying() const;
signals:
/**
* A disc is being inserted.
*/
void trayClosing();
/**
* A disc is being removed.
*/
void trayOpening();
/**
* A disc was inserted or removed.
*
* @param discId Current disc, missingDisc if no disc.
*/
void discChanged(unsigned discId);
/**
* Disc stopped. See @see #trackPaused.
*/
void discStopped();
/**
* The current track changed.
*
* @param track Track number.
* @param trackLength Length within track in milliseconds.
*/
void trackChanged(unsigned track, unsigned trackLength);
/**
* A track started playing, or is still playing. This signal is delivered at
* approximately 1 second intervals while a track is playing. At first sight,
* this might seem overzealous, but its likely that any CD player UI will use
* this to track the second-by-second position, so we may as well do it for
* them.
*
* @param track Track number.
* @param trackPosition Position within track in milliseconds.
*/
void trackPlaying(unsigned track, unsigned trackPosition);
/**
* A track paused playing.
*
* @param track Track number.
* @param trackPosition Position within track in milliseconds.
*/
void trackPaused(unsigned track, unsigned trackPosition);
private:
TQTimer timer;
TQString m_device;
int m_status;
int m_previousStatus;
unsigned m_discId;
unsigned m_previousDiscId;
TQString m_artist;
TQString m_title;
unsigned m_tracks;
TQValueList<unsigned> m_trackStartFrames;
TQStringList m_trackArtists;
TQStringList m_trackTitles;
unsigned m_track;
unsigned m_previousTrack;
void checkDeviceStatus();
TQString discStatus(int status);
class TDECompactDiscPrivate *d;
InformationMode m_infoMode;
private slots:
void timerExpired();
};
#endif