SVN commit 1270003 by esken: Fix missing controls. BUGS: 265733 M +9 -13 backends/mixer_alsa9.cpp M +7 -5 gui/viewsliders.cpp --- trunk/KDE/kdemultimedia/kmix/backends/mixer_alsa9.cpp #1270002:1270003 @@ -177,17 +177,15 @@ // --- Enumerated --- addEnumerated(elem, enumList); } + else + { volPlay = addVolume(elem, false); volCapture = addVolume(elem, true ); + } QString readableName; readableName = snd_mixer_selem_id_get_name( sid ); -// if ( readableName == "Front") -// { -// qDebug("Front!"); -// } - int idx = snd_mixer_selem_id_get_index( sid ); if ( idx > 0 ) { // Add a number to the control name, like "PCM 2", when the index is > 0 @@ -196,18 +194,16 @@ readableName += " "; readableName += idxString; } - MixDevice* md = new MixDevice(_mixer, mdID, readableName, ct ); - bool hasVolume = volPlay != 0 || volCapture != 0; - bool hasEnum = enumList.count() > 0; - // If we have sliders and an enum, KMix needs two MixDevice instances (a MixDevice is EITHER a VolumeControl OR an ENUM, but never both) - MixDevice* mdForEnum = ( hasVolume && hasEnum ) - ? new MixDevice(_mixer,mdID + ".enum", readableName,ct) // For identifying/saving it needs a distinct ID. We add a ".enum" - : md; // It is a simple ENUM (no volume control) + // There can be an Enum-Control with the same name as a regular control. So we append a ".enum" prefix to always create a unique ID + QString finalMixdeviceID = enumList.isEmpty() ? mdID : mdID + ".enum"; + if ( readableName == "IEC958" ) kDebug() << "IEC958! id=" << finalMixdeviceID << "readableName=" << readableName; + MixDevice* md = new MixDevice(_mixer, finalMixdeviceID, readableName, ct ); + if ( volPlay != 0 ) md->addPlaybackVolume(*volPlay); if ( volCapture != 0 ) md->addCaptureVolume (*volCapture); - if ( hasEnum ) mdForEnum->addEnums(enumList); + if ( !enumList.isEmpty() ) md->addEnums(enumList); m_mixDevices.append( md ); --- trunk/KDE/kdemultimedia/kmix/gui/viewsliders.cpp #1270002:1270003 @@ -85,7 +85,9 @@ QString driverName = _mixer->getDriverName(); - kDebug() <<" ----------- Viewme -----------:" << name; + + // Hint: This text comparison is not a clean solution, but one that will work for quite a while. + // TODO cesken Revise this "text comparison" thingy when I change the View constructor to take an "id" and a "readableName" QString viewName(name); if (viewName.contains(".Capture_Streams.")) emptyStreamHint = new QLabel(i18n("Capture Streams")); @@ -118,8 +120,6 @@ MixDeviceWidget *mdw; Qt::Orientation orientation = (_vflags & ViewBase::Vertical) ? Qt::Horizontal : Qt::Vertical; - - if ( md->isEnum() ) { mdw = new MDWEnum( md, // MixDevice (parameter) @@ -144,6 +144,7 @@ _frm->setFrameStyle(QFrame::HLine | QFrame::Sunken); _separators.insert(md->id(),_frm); _layoutSliders->addWidget(_frm); + mdw = new MDWSlider( md, // MixDevice (parameter) true, // Show Mute LED @@ -204,14 +205,15 @@ // The following for-loop could be simplified by using a std::find_if for ( int i=0; iid().contains(idRegexp) ) { // Match found (by name) if ( _mixSet->contains( md ) ) continue; // dup check // Now check whether subcontrols match - bool subcontrolPlaybackWanted = (control->useSubcontrolPlayback() && md->playbackVolume().hasVolume()); - bool subcontrolCaptureWanted = (control->useSubcontrolCapture() && md->captureVolume().hasVolume()); + bool subcontrolPlaybackWanted = (control->useSubcontrolPlayback() && ( md->playbackVolume().hasVolume() || md->playbackVolume().hasSwitch()) ); + bool subcontrolCaptureWanted = (control->useSubcontrolCapture() && ( md->captureVolume() .hasVolume() || md->captureVolume() .hasSwitch()) ); bool subcontrolEnumWanted = (control->useSubcontrolEnum() && md->isEnum()); bool subcontrolWanted = subcontrolPlaybackWanted | subcontrolCaptureWanted | subcontrolEnumWanted; bool splitWanted = control->isSplit();