Index: kmix/gui/mdwslider.h =================================================================== --- kmix/gui/mdwslider.h (revision 1270927) +++ kmix/gui/mdwslider.h (revision 1270928) @@ -56,7 +56,7 @@ bool includePlayback, bool includeCapture, bool small, Qt::Orientation, QWidget* parent, ViewBase* view, ProfControl *pctl); - ~MDWSlider() { } + virtual ~MDWSlider(); enum LabelType { LT_ALL, LT_FIRST_CAPTURE, LT_NONE }; void addActionToPopup( KAction *action ); Index: kmix/gui/viewbase.cpp =================================================================== --- kmix/gui/viewbase.cpp (revision 1270927) +++ kmix/gui/viewbase.cpp (revision 1270928) @@ -128,13 +128,14 @@ // allow view to "polish" itself constructionFinished(); - kDebug() << "CONNECT ViewBase count " << _mixers.size(); - foreach ( Mixer* mixer, _mixers ) - { - kDebug(67100) << "CONNECT ViewBase controlschanged" << mixer->id(); - connect ( mixer, SIGNAL(controlChanged()), this, SLOT(refreshVolumeLevels()) ); - connect ( mixer, SIGNAL(controlsReconfigured(QString)), this, SLOT(controlsReconfigured(QString)) ); - } +// Moved the following up one Level to KMixerWidget +// kDebug() << "CONNECT ViewBase count " << _mixers.size(); +// foreach ( Mixer* mixer, _mixers ) +// { +// kDebug(67100) << "CONNECT ViewBase controlschanged" << mixer->id(); +// connect ( mixer, SIGNAL(controlChanged()), this, SLOT(refreshVolumeLevels()) ); +// connect ( mixer, SIGNAL(controlsReconfigured(QString)), this, SLOT(controlsReconfigured(QString)) ); +// } } @@ -217,10 +218,6 @@ setMixSet(); kDebug(67100) << "ViewBase::controlsReconfigured() " << mixer_ID << ": Recreating widgets (mixset contains: " << _mixSet->count() << ")"; createDeviceWidgets(); - - // We've done the low level stuff our selves but let elements - // above know what has happened so they can reload config etc. - emit redrawMixer(mixer_ID); } } Index: kmix/gui/kmixerwidget.h =================================================================== --- kmix/gui/kmixerwidget.h (revision 1270927) +++ kmix/gui/kmixerwidget.h (revision 1270928) @@ -75,6 +75,10 @@ void saveConfig( KConfig *config ); void loadConfig( KConfig *config ); + private slots: + void controlsReconfiguredToplevel(QString mixerId); + void refreshVolumeLevelsToplevel(); + private: Mixer *_mixer; QVBoxLayout *m_topLayout; // contains TabWidget @@ -82,6 +86,7 @@ ProfTab* _tab; std::vector _views; KActionCollection* _actionCollection; // -<- applciations wide action collection + QWidget* _mainWindow; void createLayout(ViewBase::ViewFlags vflags); Index: kmix/gui/mixdevicewidget.h =================================================================== --- kmix/gui/mixdevicewidget.h (revision 1270927) +++ kmix/gui/mixdevicewidget.h (revision 1270928) @@ -47,7 +47,7 @@ MixDeviceWidget( MixDevice* md, bool small, Qt::Orientation orientation, QWidget* parent, ViewBase*, ProfControl * ); - ~MixDeviceWidget(); + virtual ~MixDeviceWidget(); void addActionToPopup( KAction *action ); Index: kmix/gui/mdwslider.cpp =================================================================== --- kmix/gui/mdwslider.cpp (revision 1270927) +++ kmix/gui/mdwslider.cpp (revision 1270928) @@ -81,6 +81,17 @@ update(); } +MDWSlider::~MDWSlider() +{ + foreach( QAbstractSlider* slider, m_slidersPlayback) + { + delete slider; + } + foreach( QAbstractSlider* slider, m_slidersCapture) + { + delete slider; + } +} void MDWSlider::createActions() { Index: kmix/gui/kmixerwidget.cpp =================================================================== --- kmix/gui/kmixerwidget.cpp (revision 1270927) +++ kmix/gui/kmixerwidget.cpp (revision 1270928) @@ -37,6 +37,7 @@ #include // KMix +#include "apps/kmix.h" #include "gui/guiprofile.h" #include "gui/kmixerwidget.h" #include "gui/kmixtoolbox.h" @@ -58,6 +59,8 @@ m_topLayout(0), _guiprof(guiprof), _actionCollection(actionCollection) { + _mainWindow = parent; + //kDebug() << "kmixWindow created: parent=" << parent << ", parentWidget()=" << parentWidget(); if ( _mixer ) { createLayout(vflags); @@ -169,13 +172,42 @@ connect( vbase, SIGNAL(toggleMenuBar()), parentWidget(), SLOT(toggleMenuBar()) ); // *this will be deleted on rebuildGUI(), so lets queue the signal connect( vbase, SIGNAL(rebuildGUI()) , parentWidget(), SLOT(recreateGUIwithSavingView()), Qt::QueuedConnection ); - connect( vbase, SIGNAL(redrawMixer(QString)), parentWidget(), SLOT(redrawMixer(QString)), Qt::QueuedConnection ); + //connect( vbase, SIGNAL(redrawMixer(QString)), parentWidget(), SLOT(redrawMixer(QString)), Qt::QueuedConnection ); + + kDebug() << "CONNECT ViewBase count " << vbase->getMixers().size(); + foreach ( Mixer* mixer, vbase->getMixers() ) + { + kDebug(67100) << "CONNECT ViewBase controlschanged" << mixer->id(); + connect ( mixer, SIGNAL(controlChanged()), this, SLOT(refreshVolumeLevelsToplevel()) ); + connect ( mixer, SIGNAL(controlsReconfigured(QString)), this, SLOT(controlsReconfiguredToplevel(QString)) ); + } return true; } } +void KMixerWidget::controlsReconfiguredToplevel(QString mixerId) +{ + foreach ( ViewBase* vbase, _views) + { + vbase->controlsReconfigured(mixerId); + } + KMixWindow* kmixWindow = qobject_cast(_mainWindow); + kDebug() << "kmixWindow to redraw: " << kmixWindow << ", not-casted=" << _mainWindow; + if (kmixWindow != 0) + { + kmixWindow->redrawMixer(mixerId); + } +} +void KMixerWidget::refreshVolumeLevelsToplevel() +{ + foreach ( ViewBase* vbase, _views) + { + vbase->refreshVolumeLevels(); + } +} + /** * Returns the current View. Normally we have only one View, so we always return the first view. * This method is only here for one reason: We can plug in an action in the main menu, so that Index: kmix/gui/viewbase.h =================================================================== --- kmix/gui/viewbase.h (revision 1270927) +++ kmix/gui/viewbase.h (revision 1270928) @@ -114,6 +114,8 @@ GUIProfile* guiProfile() { return _guiprof; }; KActionCollection* actionCollection() { return _actions; }; + QSet& getMixers() { return _mixers; }; + /** * Contains the widgets for the _mixSet. There is a 1:1 relationship, which means: * _mdws[i] is the Widget for the MixDevice _mixSet[i] - please see ViewBase::createDeviceWidgets(). @@ -124,7 +126,7 @@ signals: void rebuildGUI(); - void redrawMixer( const QString& mixer_ID ); + //void redrawMixer( const QString& mixer_ID ); protected: