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/kmix/mixdevice.h

116 lines
4.1 KiB

#ifndef MixDevice_h
#define MixDevice_h
#include "volume.h"
#include <tqstring.h>
#include <kconfig.h>
#include <tqobject.h>
#include <tqptrlist.h>
// ! @todo : CONSIDER MERGING OF MixDevice and Volume classes:
// Not easy possible, because Volume is used in the driver backends
/* !! @todo : Add 2 fields:
* bool update_from_Hardware;
* bool update_from_UI;
* They will show whether there are pending changes from both sides.
* Updates will be faster and more reliable by this.
*/
class MixDevice : public TQObject
{
Q_OBJECT
TQ_OBJECT
public:
// For each ChannelType a special icon exists
enum ChannelType {AUDIO = 1, BASS, CD, EXTERNAL, MICROPHONE,
MIDI, RECMONITOR, TREBLE, UNKNOWN, VOLUME,
VIDEO, SURROUND, HEADPHONE, DIGITAL, AC97,
SURROUND_BACK, SURROUND_LFE, SURROUND_CENTERFRONT, SURROUND_CENTERBACK
};
// The DeviceCategory tells the type of the device
// It is used in bitmasks, so you must use values of 2^n .
enum DeviceCategory { UNDEFINED= 0x00, SLIDER=0x01, SWITCH=0x02, ENUM=0x04, ALL=0xff };
MixDevice(int num, Volume &vol, bool recordable, bool mute,
TQString name, ChannelType type = UNKNOWN, DeviceCategory category =
SLIDER );
MixDevice(const MixDevice &md);
~MixDevice();
int num() { return _num; };
TQString name() { return _name; };
/**
* Returns an unique ID of this MixDevice. By default the number
* 'num' from the constructor is returned. It is recommended that
* a better ID is set directly after constructing the MixDevice using
* the setUniqueID().
*/
TQString& getPK();
/**
* Set a suitable PK for this MixDevice. It is used in looking up
* the keys in kmixrc. It is advised to set a nice name, like
* 'PCM_2', which would mean "2nd PCM device of the sound card".
*/
void setPK(TQString &id);
bool isRecordable() { return _recordable; };
bool isRecSource() { return _recSource; };
bool isSwitch() { return _switch; } // !! change to _category == MixDevice::SWITCH
bool isEnum() { return _category == MixDevice::ENUM; }
bool isMuted() { return _volume.isMuted(); };
bool hasMute() { return _mute; }
void setMuted(bool value) { _volume.setMuted( value ); };
void setVolume( int channel, int volume );
void setRecSource( bool rec ) { _recSource = rec; }
long getVolume(Volume::ChannelID chid);
Volume& getVolume();
long maxVolume();
long minVolume();
void setEnumId(int);
unsigned int enumId();
TQPtrList<TQString>& enumValues();
void read( KConfig *config, const TQString& grp );
void write( KConfig *config, const TQString& grp );
void setType( ChannelType channeltype ) { _type = channeltype; };
ChannelType type() { return _type; };
DeviceCategory category() { return _category; };
signals:
void newVolume( int num, Volume volume );
protected:
Volume _volume;
ChannelType _type;
// The DeviceCategory tells, how "important" a MixDevice is.
// The driver (e.g. mixer_oss.cpp) must set this value. It is
// used for deciding what Sliders to show and for distributing
// the sliders. It is advised to use the following categories:
// BASIC: Master, PCM
// PRIMARY: CD, Headphone, Microphone, Line
// SECONDARY: All others
// SWITCH: All devices which only have a On/Off-Switch
int _num; // ioctl() device number of mixer
bool _recordable; // Can it be recorded?
bool _switch; // On/Off switch // !! remove
bool _mute; // Available mute option
bool _recSource; // Current rec status
DeviceCategory _category; // category
TQString _name; // Ascii channel name
TQString _pk; // Primary key, used as part in config file keys
// A MixDevice, that is an ENUM, has these _enumValues
TQPtrList<TQString> _enumValues;
int _enumCurrentId;
};
#endif