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/kscd.h

260 lines
6.8 KiB

/*
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 <tqpushbutton.h>
#include <tqlabel.h>
#include <tqdialog.h>
#include <tqapplication.h>
#include <tqtimer.h>
#include <tqcombobox.h>
#include <tqscrollbar.h>
#include <tqslider.h>
#include <tqtabdialog.h>
#include <tqtooltip.h>
#include <tqpopupmenu.h>
#include <tqvaluelist.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 TQGridLayout;
class KActionCollection;
class KToggleAction;
using namespace KCDDB;
typedef TQValueList<int> RandomList;
class KSCD : public kscdPanelDlg, public KSessionManaged, virtual public DCOPObject {
Q_OBJECT
// TQ_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 TQString& dev);
int getVolume() { return Prefs::volume(); }
int currentTrack();
int currentTrackLength();
int currentPosition();
int getStatus();
TQString currentTrackTitle();
TQString currentAlbum();
TQString currentArtist();
TQStringList trackList();
public:
KSCD( TQWidget *parent = 0, const char *name = 0 );
~KSCD();
virtual bool saveState(TQSessionManager& sm);
void setDocking(bool dock);
bool digitalPlayback();
void setDevicePaths();
TQStringList audioSystems() { return audio_systems_list; }
KActionCollection* actionCollection() { return m_actions; }
signals:
void trackChanged(const TQString&);
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(TQCloseEvent *e);
void keyPressEvent( TQKeyEvent* e );
bool event( TQEvent *e );
// void focusOutEvent(TQFocusEvent *e);
void playtime();
void playtime(int seconds);
void calculateDisplayedTime();
void calculateDisplayedTime(int sec);
void setSongListTo(int whichTrack);
void populateSongList(TQString infoStatus);
void updatePlayPB(bool playing);
void updateConfigDialog(configWidget* widget);
private:
KConfigDialog *configDialog;
CDDBDlg *cddialog;
TQPopupMenu *mainPopup;
TQPopupMenu *infoPopup;
BW_LED_Number *trackTimeLED[6];
KCompactDisc *m_cd;
TQTimer titlelabeltimer;
TQTimer queryledtimer;
TQTimer cycletimer;
TQTimer jumpTrackTimer;
// random playlists
KRandomSequence randSequence;
RandomList random_list;
RandomList::iterator random_current;
int jumpToTrack;
LedLamp *queryled;
LedLamp *loopled;
bool randomplay_pending;
bool updateTime;
TQStringList 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;
TQStringList 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