diff options
Diffstat (limited to 'kscd/kscd.h')
-rw-r--r-- | kscd/kscd.h | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/kscd/kscd.h b/kscd/kscd.h new file mode 100644 index 00000000..6c94c09d --- /dev/null +++ b/kscd/kscd.h @@ -0,0 +1,258 @@ +/* + Kscd - A simple cd player for the KDE Project + + $Id$ + + Copyright (c) 1997 Bernd Johannes Wuebben math.cornell.edu + Copyright (c) 2002 Aaron J. Seigo <aseigo@kde.org> + Copyright (c) 2004 Alexander Kern <alex.kern@gmx.de> + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __KSCD__ +#define __KSCD__ + +#include "bwlednum.h" + +// CD support. +class KCompactDisc; + +// CDDB support via libkcddb +#include <libkcddb/cddb.h> +#include <libkcddb/client.h> + + +#include <qpushbutton.h> +#include <qlabel.h> +#include <qdialog.h> +#include <qapplication.h> +#include <qtimer.h> +#include <qcombobox.h> +#include <qscrollbar.h> +#include <qslider.h> +#include <qtabdialog.h> +#include <qtooltip.h> +#include <qpopupmenu.h> +#include <qvaluelist.h> + +#include "ledlamp.h" +#include "panel.h" +#include "prefs.h" +#include "configWidget.h" +#include <kapplication.h> +#include <kconfigdialog.h> +#include <kprocess.h> +#include <krandomsequence.h> +#include <dcopobject.h> +#include <kglobalaccel.h> + +class CDDBDlg; +class DockWidget; +class QGridLayout; +class KActionCollection; +class KToggleAction; + +using namespace KCDDB; + +typedef QValueList<int> RandomList; + +class KSCD : public kscdPanelDlg, public KSessionManaged, virtual public DCOPObject { + + Q_OBJECT + K_DCOP + + // time display modes + enum time_display { TRACK_SEC = 0, TRACK_REM = 1, TOTAL_SEC = 2, TOTAL_REM = 3 }; + + +k_dcop: + bool playing(); + void play() { playClicked(); } + void stop() { stopClicked(); } + void previous() { prevClicked(); } + void next() { nextClicked(); } + void jumpTo(int seconds) { jumpToTime(seconds); } + void eject() { ejectClicked(); } + void quit() { quitClicked(); } + void toggleLoop() { loopClicked(); } + void toggleShuffle() { randomSelected(); } + void toggleTimeDisplay() { cycleplaytimemode(); } + void cddbDialog() { CDDialogSelected(); } + void optionDialog() { showConfig(); } + void setTrack(int t) { trackSelected(t > 0 ? t - 1 : 0); } + void volumeDown() { decVolume(); } + void volumeUp() { incVolume(); } + void setVolume(int v); + void setDevice(const QString& dev); + int getVolume() { return Prefs::volume(); } + int currentTrack(); + int currentTrackLength(); + int currentPosition(); + int getStatus(); + QString currentTrackTitle(); + QString currentAlbum(); + QString currentArtist(); + QStringList trackList(); + +public: + KSCD( QWidget *parent = 0, const char *name = 0 ); + ~KSCD(); + virtual bool saveState(QSessionManager& sm); + + void setDocking(bool dock); + bool digitalPlayback(); + void setDevicePaths(); + QStringList audioSystems() { return audio_systems_list; } + + KActionCollection* actionCollection() { return m_actions; } + +signals: + void trackChanged(const QString&); + +public slots: + void setColors(); + void togglequeryled(); + void randomSelected(); + void setShuffle(int shuffle); /* 0 -off, 1 - on, 2 - remake random list */ + void writeSettings(); + void playClicked(); + bool nextClicked(); + void prevClicked(); + void stopClicked(); + void ejectClicked(); + void jumpToTime(int seconds, bool forcePlay = false); + void quitClicked(); + void loopOn(); + void loopOff(); + void loopClicked(); + void trackSelected(int); + void showConfig(); + void incVolume(); + void decVolume(); + void volChanged(int); + void led_on(); + void led_off(); + void titlelabeltimeout(); + void cycleplaytimemode(); + void cycletimeout(); + + void information(int); + void jumpTracks(); + + void make_random_list(); /* koz: 15/01/00 */ + +protected: + // mostly start up stuff + void readSettings(); + void initFont(); + void drawPanel(); + void setupPopups(); + void setLEDs(int milliseconds); + void resetTimeSlider(bool enabled); + + void dragTime(int sec); + + void closeEvent(QCloseEvent *e); + void keyPressEvent( QKeyEvent* e ); + bool event( QEvent *e ); + // void focusOutEvent(QFocusEvent *e); + void playtime(); + void playtime(int seconds); + void calculateDisplayedTime(); + void calculateDisplayedTime(int sec); + void setSongListTo(int whichTrack); + void populateSongList(QString infoStatus); + void updatePlayPB(bool playing); + + void updateConfigDialog(configWidget* widget); + +private: + KConfigDialog *configDialog; + CDDBDlg *cddialog; + QPopupMenu *mainPopup; + QPopupMenu *infoPopup; + + BW_LED_Number *trackTimeLED[6]; + + KCompactDisc *m_cd; + QTimer titlelabeltimer; + QTimer queryledtimer; + QTimer cycletimer; + QTimer jumpTrackTimer; + + // random playlists + KRandomSequence randSequence; + RandomList random_list; + RandomList::iterator random_current; + + + int jumpToTrack; + LedLamp *queryled; + LedLamp *loopled; + bool randomplay_pending; + bool updateTime; + QStringList audio_systems_list; + + /** + * select a random track from the current disc. + * + */ + int next_randomtrack(); + int prev_randomtrack(); + int real_randomtrack(); + + void setTitle(int track); + + /** + * Info from CDDB, and exploded versions thereof. + */ + KCDDB::CDInfo cddbInfo; + QStringList playlist; + KCDDB::Client* cddb; + KActionCollection* m_actions; + KGlobalAccel* m_globalAccel; + KToggleAction* m_togglePopupsAction; + DockWidget* m_dockWidget; + void lookupDevice(); + void initGlobalShortcuts(); +public slots: + void lookupCDDB(); + +private slots: + void CDDialogSelected(); + void CDDialogDone(); + void setCDInfo(KCDDB::CDInfo); + void lookupCDDBDone(CDDB::Result); + void discStopped(); + void trackUpdate(unsigned track, unsigned trackPosition); + void trackChanged(unsigned track, unsigned trackLength); + void discChanged(unsigned discId); +// void trayClosing(); + void trayOpening(); + void configDone(); + void configureKeys(); + void configureGlobalKeys(); + void setIcons(); + + void timeSliderPressed(); + void timeSliderReleased(); + void timeSliderMoved(int milliseconds); +}; + + + +#endif + |