+++ /dev/null
-/*
- * KMix -- KDE's full featured mini mixer
- *
- *
- * Copyright (C) 1996-2004 Christian Esken <esken@kde.org>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library 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.
- */
-
-#include "gui/dialogselectmaster.h"
-
-#include <qbuttongroup.h>
-#include <QLabel>
-#include <qradiobutton.h>
-#include <qscrollarea.h>
-#include <QVBoxLayout>
-#include <QHBoxLayout>
-
-#include <kcombobox.h>
-#include <kdebug.h>
-#include <klocale.h>
-
-#include "core/ControlManager.h"
-#include "core/mixdevice.h"
-#include "core/mixer.h"
-
-DialogSelectMaster::DialogSelectMaster( Mixer *mixer, QWidget *parent )
- : KDialog( parent )
-{
- setCaption( i18n( "Select Master Channel" ) );
- if ( Mixer::mixers().count() > 0 )
- setButtons( Ok|Cancel );
- else {
- setButtons( Cancel );
- }
- setDefaultButton( Ok );
- _layout = 0;
- m_vboxForScrollView = 0;
- m_scrollableChannelSelector = 0;
- m_buttonGroupForScrollView = 0;
- createWidgets(mixer); // Open with Mixer Hardware #0
-
-}
-
-DialogSelectMaster::~DialogSelectMaster()
-{
- delete _layout;
- delete m_vboxForScrollView;
-}
-
-/**
- * Create basic widgets of the Dialog.
- */
-void DialogSelectMaster::createWidgets(Mixer *ptr_mixer)
-{
- m_mainFrame = new QFrame( this );
- setMainWidget( m_mainFrame );
- _layout = new QVBoxLayout(m_mainFrame);
- _layout->setMargin(0);
-
- if ( Mixer::mixers().count() > 1 ) {
- // More than one Mixer => show Combo-Box to select Mixer
- // Mixer widget line
- QHBoxLayout* mixerNameLayout = new QHBoxLayout();
- _layout->addItem( mixerNameLayout );
- mixerNameLayout->setSpacing(KDialog::spacingHint());
-
- QLabel *qlbl = new QLabel( i18n("Current mixer:"), m_mainFrame );
- mixerNameLayout->addWidget(qlbl);
- qlbl->setFixedHeight(qlbl->sizeHint().height());
-
- m_cMixer = new KComboBox( false, m_mainFrame);
- m_cMixer->setObjectName( QLatin1String( "mixerCombo" ) );
- m_cMixer->setFixedHeight(m_cMixer->sizeHint().height());
- connect( m_cMixer, SIGNAL(activated(int)), this, SLOT(createPageByID(int)) );
-
- for( int i =0; i<Mixer::mixers().count(); i++ )
- {
- Mixer *mixer = (Mixer::mixers())[i];
- m_cMixer->addItem( mixer->readableName(), mixer->id() );
- } // end for all_Mixers
- // Make the current Mixer the current item in the ComboBox
- int findIndex = m_cMixer->findData( ptr_mixer->id() );
- if ( findIndex != -1 ) m_cMixer->setCurrentIndex( findIndex );
-
-
- m_cMixer->setToolTip( i18n("Current mixer" ) );
- mixerNameLayout->addWidget(m_cMixer);
-
- } // end if (more_than_1_Mixer)
-
-
- if ( Mixer::mixers().count() > 0 ) {
- QLabel *qlbl = new QLabel( i18n("Select the channel representing the master volume:"), m_mainFrame );
- _layout->addWidget(qlbl);
-
- createPage(ptr_mixer);
- connect( this, SIGNAL(okClicked()) , this, SLOT(apply()) );
- }
- else {
- QLabel *qlbl = new QLabel( i18n("No sound card is installed or currently plugged in."), m_mainFrame );
- _layout->addWidget(qlbl);
- }
-}
-
-/**
- * Create RadioButton's for the Mixer with number 'mixerId'.
- * @par mixerId The Mixer, for which the RadioButton's should be created.
- */
-void DialogSelectMaster::createPageByID(int mixerId)
-{
- QString mixer_id = m_cMixer->itemData(mixerId).toString();
- Mixer * mixer = Mixer::findMixer(mixer_id);
-
- if ( mixer != NULL )
- createPage(mixer);
-}
-
-/**
- * Create RadioButton's for the Mixer with number 'mixerId'.
- * @par mixerId The Mixer, for which the RadioButton's should be created.
- */
-void DialogSelectMaster::createPage(Mixer* mixer)
-{
-
- /** --- Reset page -----------------------------------------------
- * In case the user selected a new Mixer via m_cMixer, we need
- * to remove the stuff created on the last call.
- */
- // delete the VBox. This should automatically remove all contained QRadioButton's.
- delete m_vboxForScrollView;
- delete m_scrollableChannelSelector;
- delete m_buttonGroupForScrollView;
-
- /** Reset page end -------------------------------------------------- */
-
- m_buttonGroupForScrollView = new QButtonGroup(this); // invisible QButtonGroup
- //m_buttonGroupForScrollView->hide();
-
- m_scrollableChannelSelector = new QScrollArea(m_mainFrame);
-
-// m_scrollableChannelSelector->viewport()->setBackgroundRole(QPalette::Background);
- _layout->addWidget(m_scrollableChannelSelector);
-
- m_vboxForScrollView = new KVBox(); //m_scrollableChannelSelector->viewport()
-
-
- std::shared_ptr<MixDevice> master = mixer->getLocalMasterMD();
- QString masterKey = ( master.get() != 0 ) ? master->id() : "----noMaster---"; // Use non-matching name as default
-
- const MixSet& mixset = mixer->getMixSet();
- MixSet& mset = const_cast<MixSet&>(mixset);
- for( int i=0; i< mset.count(); ++i )
- {
- std::shared_ptr<MixDevice> md = mset[i];
- // Create a RadioButton for each MixDevice (excluding Enum's)
- if ( md->playbackVolume().hasVolume() )
- {
-// kDebug(67100) << "DialogSelectMaster::createPage() mset append qrb";
- QString mdName = md->readableName();
- mdName.replace('&', "&&"); // Quoting the '&' needed, to prevent QRadioButton creating an accelerator
- QRadioButton* qrb = new QRadioButton(mdName, m_vboxForScrollView);
- qrb->setObjectName(md->id()); // The object name is used as ID here: see apply()
- m_buttonGroupForScrollView->addButton(qrb); //(qrb, md->num());
- qrb->setChecked(md->id() == masterKey); // preselect the current master
- }
- }
-
- m_scrollableChannelSelector->setWidget(m_vboxForScrollView);
- m_vboxForScrollView->show(); // show() is necessary starting with the second call to createPage()
-}
-
-
-void DialogSelectMaster::apply()
-{
- Mixer *mixer = 0;
- if ( Mixer::mixers().count() == 1 ) {
- // only one mxier => no combo box => take first entry
- mixer = (Mixer::mixers())[0];
- }
- else if ( Mixer::mixers().count() > 1 ) {
- // find mixer that is currently active in the ComboBox
- int idx = m_cMixer->currentIndex();
- QString mixer_id = m_cMixer->itemData(idx).toString();
- mixer = Mixer::findMixer(mixer_id);
- }
-
- if ( mixer == 0 )
- return; // User must have unplugged everything
-
- QAbstractButton* button = m_buttonGroupForScrollView->checkedButton();
- if ( button != 0 )
- {
- QString control_id = button->objectName();
- mixer->setLocalMasterMD( control_id );
- Mixer::setGlobalMaster(mixer->id(), control_id, true);
- ControlManager::instance().announce(mixer->id(), ControlChangeType::MasterChanged, QString("Select Master Dialog"));
- }
-}
-
-#include "moc_dialogselectmaster.cpp"
-