summaryrefslogtreecommitdiffstats
path: root/kmix
diff options
context:
space:
mode:
Diffstat (limited to 'kmix')
-rw-r--r--kmix/dialogselectmaster.cpp63
-rw-r--r--kmix/dialogselectmaster.h6
-rw-r--r--kmix/kmix.cpp16
-rw-r--r--kmix/kmixdockwidget.cpp55
-rw-r--r--kmix/kmixdockwidget.h6
-rw-r--r--kmix/mixer.cpp11
-rw-r--r--kmix/mixer.h2
7 files changed, 109 insertions, 50 deletions
diff --git a/kmix/dialogselectmaster.cpp b/kmix/dialogselectmaster.cpp
index ec957d4b..06b8d22c 100644
--- a/kmix/dialogselectmaster.cpp
+++ b/kmix/dialogselectmaster.cpp
@@ -31,6 +31,7 @@
#include <kcombobox.h>
#include <kdebug.h>
#include <kdialogbase.h>
+#include <tdeapplication.h>
#include <tdelocale.h>
#include "dialogselectmaster.h"
@@ -43,7 +44,6 @@ DialogSelectMaster::DialogSelectMaster( Mixer *mixer )
_layout = 0;
m_vboxForScrollView = 0;
createWidgets(mixer); // Open with Mixer Hardware #0
-
}
DialogSelectMaster::~DialogSelectMaster()
@@ -60,23 +60,29 @@ void DialogSelectMaster::createWidgets(Mixer *ptr_mixer)
TQFrame *m_mainFrame = plainPage();
_layout = new TQVBoxLayout(m_mainFrame,0,-1, "_layout" );
+ // Default or user selected
+ TQButtonGroup *bgMasterSelection = new TQButtonGroup(1, Qt::Vertical, i18n("KMix master channel selection"), m_mainFrame);
+ connect(bgMasterSelection, TQT_SIGNAL(clicked(int)), this, TQT_SLOT(masterSelectionChanged(int)));
+ _layout->add(bgMasterSelection);
+ m_defaultMaster = new TQRadioButton(i18n("Default"), bgMasterSelection);
+ m_userMaster = new TQRadioButton(i18n("Custom"), bgMasterSelection);
+
+ m_vboxChannels = new TQVBox(m_mainFrame);
+ _layout->add(m_vboxChannels);
if ( Mixer::mixers().count() > 1 ) {
//kdDebug(67100) << "DialogSelectMaster::createPage count()>1" << "\n";
// More than one Mixer => show Combo-Box to select Mixer
// Mixer widget line
- TQHBoxLayout* mixerNameLayout = new TQHBoxLayout( _layout );
- //widgetsLayout->setStretchFactor( mixerNameLayout, 0 );
- //TQSizePolicy qsp( TQSizePolicy::Ignored, TQSizePolicy::Maximum);
- //mixerNameLayout->setSizePolicy(qsp);
- mixerNameLayout->setSpacing(KDialog::spacingHint());
-
- TQLabel *qlbl = new TQLabel( i18n("Current Mixer"), m_mainFrame );
- mixerNameLayout->addWidget(qlbl);
+ TQHBox *hboxMixerName = new TQHBox(m_vboxChannels);
+ hboxMixerName->setSpacing(KDialog::spacingHint());
+
+ TQLabel *qlbl = new TQLabel( i18n("Current Mixer"), hboxMixerName );
qlbl->setFixedHeight(qlbl->sizeHint().height());
- m_cMixer = new KComboBox( FALSE, m_mainFrame, "mixerCombo" );
+ m_cMixer = new KComboBox( FALSE, hboxMixerName, "mixerCombo" );
m_cMixer->setFixedHeight(m_cMixer->sizeHint().height());
- connect( m_cMixer, TQT_SIGNAL( activated( int ) ), this, TQT_SLOT( createPageByID( int ) ) );
+ TQToolTip::add(m_cMixer, i18n("Current mixer"));
+ connect(m_cMixer, TQT_SIGNAL(activated(int)), this, TQT_SLOT(createPageByID(int)));
//int id=1;
for ( Mixer *mixer = Mixer::mixers().first(); mixer !=0; mixer = Mixer::mixers().next() ) {
@@ -87,24 +93,37 @@ void DialogSelectMaster::createWidgets(Mixer *ptr_mixer)
}
//id++;
} // end for all_Mixers
-
- TQToolTip::add( m_cMixer, i18n("Current mixer" ) );
- mixerNameLayout->addWidget(m_cMixer);
-
} // end if (more_than_1_Mixer)
- TQLabel *qlbl = new TQLabel( i18n("Select the channel representing the master volume:"), m_mainFrame );
+ TQLabel *qlbl = new TQLabel( i18n("Select the channel representing the master volume:"), m_vboxChannels );
_layout->addWidget(qlbl);
- m_scrollableChannelSelector = new TQScrollView(m_mainFrame, "scrollableChannelSelector");
+ m_scrollableChannelSelector = new TQScrollView(m_vboxChannels, "scrollableChannelSelector");
m_scrollableChannelSelector->viewport()->setBackgroundMode(TQt::PaletteBackground);
- _layout->add(m_scrollableChannelSelector);
m_buttonGroupForScrollView = new TQButtonGroup(this); // invisible TQButtonGroup
m_buttonGroupForScrollView->hide();
createPage(ptr_mixer);
- connect( this, TQT_SIGNAL(okClicked()) , this, TQT_SLOT(apply()) );
+
+ kapp->config()->setGroup(0);
+ bool useDefaultMaster = kapp->config()->readBoolEntry("UseDefaultMaster", true);
+ if (useDefaultMaster)
+ {
+ m_defaultMaster->setChecked(true);
+ }
+ else
+ {
+ m_userMaster->setChecked(true);
+ }
+ masterSelectionChanged(0);
+
+ connect( this, TQT_SIGNAL(okClicked()) , this, TQT_SLOT(apply()) );
+}
+
+void DialogSelectMaster::masterSelectionChanged(int _unused)
+{
+ m_vboxChannels->setEnabled(m_userMaster->isChecked());
}
/**
@@ -180,15 +199,15 @@ void DialogSelectMaster::apply()
int channel_id = m_buttonGroupForScrollView->selectedId();
if ( channel_id != -1 ) {
// A channel was selected by the user => emit the "newMasterSelected()" signal
- //kdDebug(67100) << "DialogSelectMaster::apply(): card=" << soundcard_id << ", channel=" << channel_id << endl;
+ //kdDebug(67100) << "DialogSelectMaster::apply(): default master=" << m_defaultMaster->isChecked() << ", card=" << soundcard_id << ", channel=" << channel_id << endl;
Mixer *mixer = Mixer::mixers().at(soundcard_id);
if ( mixer == 0 ) {
kdError(67100) << "DialogSelectMaster::createPage(): Invalid Mixer (mixerID=" << soundcard_id << ")" << endl;
return; // can not happen
}
else {
- mixer->setMasterDevice( m_mixerPKs[channel_id] );
- emit newMasterSelected(soundcard_id, m_mixerPKs[channel_id] );
+ mixer->setMasterDevice(m_mixerPKs[channel_id]);
+ emit newMasterSelected(m_defaultMaster->isChecked(), soundcard_id, m_mixerPKs[channel_id]);
}
}
}
diff --git a/kmix/dialogselectmaster.h b/kmix/dialogselectmaster.h
index 8150b197..88ce89f4 100644
--- a/kmix/dialogselectmaster.h
+++ b/kmix/dialogselectmaster.h
@@ -22,7 +22,7 @@ class DialogSelectMaster : public KDialogBase
~DialogSelectMaster();
signals:
- void newMasterSelected(int, TQString& );
+ void newMasterSelected(bool defaultMaster, int soundcard_id, const TQString &channel_id);
public slots:
void apply();
@@ -33,11 +33,13 @@ class DialogSelectMaster : public KDialogBase
TQVBoxLayout* _layout;
KComboBox* m_cMixer;
TQScrollView* m_scrollableChannelSelector;
- TQVBox *m_vboxForScrollView;
+ TQVBox *m_vboxChannels, *m_vboxForScrollView;
TQButtonGroup *m_buttonGroupForScrollView;
+ TQRadioButton *m_defaultMaster, *m_userMaster;
TQStringList m_mixerPKs;
private slots:
+ void masterSelectionChanged(int _unused);
void createPageByID(int mixerId);
};
diff --git a/kmix/kmix.cpp b/kmix/kmix.cpp
index fc33d671..98548db9 100644
--- a/kmix/kmix.cpp
+++ b/kmix/kmix.cpp
@@ -155,7 +155,7 @@ KMixWindow::initWidgets()
// Mixer widget line
mixerNameLayout = new TQHBox( centralWidget(), "mixerNameLayout" );
- widgetsLayout->setStretchFactor( mixerNameLayout, 0 );
+ widgetsLayout->setStretchFactor( mixerNameLayout, 0 );
TQSizePolicy qsp( TQSizePolicy::Ignored, TQSizePolicy::Maximum);
mixerNameLayout->setSizePolicy(qsp);
mixerNameLayout->setSpacing(KDialog::spacingHint());
@@ -170,7 +170,7 @@ KMixWindow::initWidgets()
widgetsLayout->addWidget( mixerNameLayout );
m_wsMixers = new TQWidgetStack( centralWidget(), "MixerWidgetStack" );
- widgetsLayout->setStretchFactor( m_wsMixers, 10 );
+ widgetsLayout->setStretchFactor( m_wsMixers, 10 );
widgetsLayout->addWidget( m_wsMixers );
if ( m_showMenubar )
@@ -306,10 +306,14 @@ KMixWindow::loadConfig()
m_surroundView = config->readBoolEntry("Experimental-ViewSurround", false );
m_gridView = config->readBoolEntry("Experimental-ViewGrid", false );
const TQString& orientationString = config->readEntry("Orientation", "Horizontal");
- TQString mixerMasterCard = config->readEntry( "MasterMixer", "" );
- Mixer::setMasterCard(mixerMasterCard);
- TQString masterDev = config->readEntry( "MasterMixerDevice", "" );
- Mixer::setMasterCardDevice(masterDev);
+ bool useDefaultMaster = config->readBoolEntry( "UseDefaultMaster", true );
+ if (!useDefaultMaster)
+ {
+ TQString mixerMasterCard = config->readEntry( "MasterMixer", "" );
+ Mixer::setMasterCard(mixerMasterCard);
+ TQString masterDev = config->readEntry( "MasterMixerDevice", "" );
+ Mixer::setMasterCardDevice(masterDev);
+ }
if ( valueStyleString == "Absolute" )
m_valueStyle = MixDeviceWidget::NABSOLUTE;
diff --git a/kmix/kmixdockwidget.cpp b/kmix/kmixdockwidget.cpp
index 1402191c..42ccccaa 100644
--- a/kmix/kmixdockwidget.cpp
+++ b/kmix/kmixdockwidget.cpp
@@ -57,7 +57,8 @@ KMixDockWidget::KMixDockWidget( Mixer *mixer, TQWidget *parent, const char *name
_oldToolTipValue(-1),
_oldPixmapType('-'),
_volumePopup(volumePopup),
- _dockIconMuting(dockIconMuting)
+ _dockIconMuting(dockIconMuting),
+ _dsm(NULL)
{
Mixer* preferredMasterMixer = Mixer::masterCard();
if ( preferredMasterMixer != 0 ) {
@@ -74,6 +75,10 @@ KMixDockWidget::KMixDockWidget( Mixer *mixer, TQWidget *parent, const char *name
KMixDockWidget::~KMixDockWidget()
{
+ if (_dsm)
+ {
+ delete _dsm;
+ }
delete _audioPlayer;
delete _dockAreaPopup;
}
@@ -146,24 +151,52 @@ void KMixDockWidget::slotUpdatePixmap()
void KMixDockWidget::selectMaster()
{
- DialogSelectMaster* dsm = new DialogSelectMaster(m_mixer);
- connect ( dsm, TQT_SIGNAL(newMasterSelected(int, TQString&)), TQT_SLOT( handleNewMaster(int,TQString&)) );
- dsm->show();
- // !! The dialog is modal. Does it delete itself?
+ if (!_dsm)
+ {
+ _dsm = new DialogSelectMaster(m_mixer);
+ connect(_dsm, TQT_SIGNAL(newMasterSelected(bool, int, const TQString&)), TQT_SLOT( handleNewMaster(bool, int, const TQString&)));
+ }
+ _dsm->show();
}
-void KMixDockWidget::handleNewMaster(int soundcard_id, TQString& channel_id) // !! @todo rework parameters
+void KMixDockWidget::handleNewMaster(bool defaultMaster, int soundcard_id, const TQString &channel_id)
{
- //kdDebug(67100) << "KMixDockWidget::handleNewMaster() soundcard_id=" << soundcard_id << " , channel_id=" << channel_id << endl;
- Mixer *mixer = Mixer::mixers().at(soundcard_id);
- if ( mixer == 0 ) {
- kdError(67100) << "KMixDockWidget::createPage(): Invalid Mixer (soundcard_id=" << soundcard_id << ")" << endl;
+ //kdDebug(67100) << "KMixDockWidget::handleNewMaster() default master=" << defaultMaster << ", soundcard_id=" << soundcard_id << ", channel_id=" << channel_id << endl;
+ kapp->config()->setGroup(0);
+ kapp->config()->writeEntry("UseDefaultMaster", defaultMaster);
+ Mixer *mixer;
+ TQString channel = TQString::null;
+ if (defaultMaster)
+ {
+ mixer = Mixer::mixers().first();
+ if (mixer)
+ {
+ MixSet ms = mixer->getMixSet();
+ for (MixDevice *md = ms.first(); md != 0; md = ms.next())
+ {
+ if (!md->isRecordable() && !md->isSwitch() && !md->isEnum())
+ {
+ channel = md->getPK();
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ mixer = Mixer::mixers().at(soundcard_id);
+ channel = channel_id;
+ }
+
+ if (!mixer || channel.isEmpty()) {
+ kdError(67100) << "KMixDockWidget::createPage(): Invalid Mixer (default master=" << defaultMaster << ", soundcard_id="
+ << soundcard_id << ", channel_id=" << channel_id << ")" << endl;
return; // can not happen
}
m_mixer = mixer;
Mixer::setMasterCard(mixer->id()); // We must save this information "somewhere".
- Mixer::setMasterCardDevice( channel_id );
+ Mixer::setMasterCardDevice(channel);
createMasterVolWidget();
}
diff --git a/kmix/kmixdockwidget.h b/kmix/kmixdockwidget.h
index 0899d28f..6be2b4b7 100644
--- a/kmix/kmixdockwidget.h
+++ b/kmix/kmixdockwidget.h
@@ -36,11 +36,11 @@ class MixDeviceWidget;
class Mixer;
class ViewDockAreaPopup;
class Volume;
+class DialogSelectMaster;
class KMixDockWidget : public KSystemTray {
Q_OBJECT
-
friend class KMixWindow;
public:
@@ -78,10 +78,12 @@ class KMixDockWidget : public KSystemTray {
char _oldPixmapType;
bool _volumePopup;
bool _dockIconMuting;
+ DialogSelectMaster *_dsm;
+
private slots:
void dockMute();
void selectMaster();
- void handleNewMaster(int soundcard_id, TQString& channel_id);
+ void handleNewMaster(bool defaultMaster, int soundcard_id, const TQString &channel_id);
};
#endif
diff --git a/kmix/mixer.cpp b/kmix/mixer.cpp
index ba3bfee8..bda80910 100644
--- a/kmix/mixer.cpp
+++ b/kmix/mixer.cpp
@@ -383,24 +383,23 @@ void Mixer::setMasterCard(TQString& ref_id)
Mixer* Mixer::masterCard()
{
- Mixer *mixer = 0;
kdDebug(67100) << "Mixer::masterCard() searching for id=" << _masterCard << "\n";
- for (mixer=Mixer::mixers().first(); mixer!=0; mixer=Mixer::mixers().next())
+ for (Mixer *mixer = Mixer::mixers().first(); mixer; mixer = Mixer::mixers().next())
{
if ( mixer->id() == _masterCard ) {
#ifdef MIXER_MASTER_DEBUG
kdDebug(67100) << "Mixer::masterCard() found id=" << mixer->id() << "\n";
#endif
- break;
+ return mixer;
}
}
#ifdef MIXER_MASTER_DEBUG
- if ( mixer == 0) kdDebug(67100) << "Mixer::masterCard() found no Mixer* mixer \n";
+ kdDebug(67100) << "Mixer::masterCard() found no Mixer* mixer \n";
#endif
- return mixer;
+ return NULL;
}
-void Mixer::setMasterCardDevice(TQString& ref_id)
+void Mixer::setMasterCardDevice(const TQString &ref_id)
{
// The value is taken over without checking on existance. This allows the User to define
// a MasterCard that is not always available (e.g. it is an USB hotplugging device).
diff --git a/kmix/mixer.h b/kmix/mixer.h
index d9566e81..2fc44a85 100644
--- a/kmix/mixer.h
+++ b/kmix/mixer.h
@@ -100,7 +100,7 @@ class Mixer : public TQObject, virtual public MixerIface
static void setMasterCard(TQString& ref_id);
static Mixer* masterCard();
/// The global Master Device inside the current MasterCard (as returned by masterCard()).
- static void setMasterCardDevice(TQString& ref_id);
+ static void setMasterCardDevice(const TQString &ref_id);
static MixDevice* masterCardDevice();