diff --git a/Linphone/core/setting/SettingsCore.cpp b/Linphone/core/setting/SettingsCore.cpp index 3bceab318..3070e10d4 100644 --- a/Linphone/core/setting/SettingsCore.cpp +++ b/Linphone/core/setting/SettingsCore.cpp @@ -164,31 +164,34 @@ void SettingsCore::setSelf(QSharedPointer me) { }); // Audio device(s) - mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetCaptureDevice, [this](const QString id) { - mSettingsModelConnection->invokeToModel([this, id]() { SettingsModel::getInstance()->setCaptureDevice(id); }); + mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetCaptureDevice, [this](QVariantMap device) { + mSettingsModelConnection->invokeToModel( + [this, device]() { SettingsModel::getInstance()->setCaptureDevice(device); }); }); - mSettingsModelConnection->makeConnectToModel(&SettingsModel::captureDeviceChanged, [this](const QString device) { + mSettingsModelConnection->makeConnectToModel(&SettingsModel::captureDeviceChanged, [this](QVariantMap device) { mSettingsModelConnection->invokeToCore([this, device]() { mCaptureDevice = device; emit captureDeviceChanged(device); }); }); - mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetPlaybackDevice, [this](const QString id) { - mSettingsModelConnection->invokeToModel([this, id]() { SettingsModel::getInstance()->setPlaybackDevice(id); }); + mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetPlaybackDevice, [this](QVariantMap device) { + mSettingsModelConnection->invokeToModel( + [this, device]() { SettingsModel::getInstance()->setPlaybackDevice(device); }); }); - mSettingsModelConnection->makeConnectToModel(&SettingsModel::playbackDeviceChanged, [this](const QString device) { + mSettingsModelConnection->makeConnectToModel(&SettingsModel::playbackDeviceChanged, [this](QVariantMap device) { mSettingsModelConnection->invokeToCore([this, device]() { mPlaybackDevice = device; emit playbackDeviceChanged(device); }); }); - mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetRingerDevice, [this](const QString id) { - mSettingsModelConnection->invokeToModel([this, id]() { SettingsModel::getInstance()->setRingerDevice(id); }); + mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetRingerDevice, [this](QVariantMap device) { + mSettingsModelConnection->invokeToModel( + [this, device]() { SettingsModel::getInstance()->setRingerDevice(device); }); }); - mSettingsModelConnection->makeConnectToModel(&SettingsModel::ringerDeviceChanged, [this](const QString device) { + mSettingsModelConnection->makeConnectToModel(&SettingsModel::ringerDeviceChanged, [this](QVariantMap device) { mSettingsModelConnection->invokeToCore([this, device]() { mRingerDevice = device; emit ringerDeviceChanged(device); @@ -223,28 +226,25 @@ void SettingsCore::setSelf(QSharedPointer me) { mSettingsModelConnection->invokeToCore([this, value]() { emit micVolumeChanged(value); }); }); - mSettingsModelConnection->makeConnectToModel(&SettingsModel::captureDevicesChanged, - [this](const QStringList devices) { - mSettingsModelConnection->invokeToCore([this, devices]() { - mCaptureDevices = devices; - emit captureDevicesChanged(devices); - }); - }); + mSettingsModelConnection->makeConnectToModel(&SettingsModel::captureDevicesChanged, [this](QVariantList devices) { + mSettingsModelConnection->invokeToCore([this, devices]() { + mCaptureDevices = devices; + emit captureDevicesChanged(devices); + }); + }); - mSettingsModelConnection->makeConnectToModel(&SettingsModel::playbackDevicesChanged, - [this](const QStringList devices) { - mSettingsModelConnection->invokeToCore([this, devices]() { - mPlaybackDevices = devices; - emit playbackDevicesChanged(devices); - }); - }); - mSettingsModelConnection->makeConnectToModel(&SettingsModel::ringerDevicesChanged, - [this](const QStringList devices) { - mSettingsModelConnection->invokeToCore([this, devices]() { - mRingerDevices = devices; - emit ringerDevicesChanged(devices); - }); - }); + mSettingsModelConnection->makeConnectToModel(&SettingsModel::playbackDevicesChanged, [this](QVariantList devices) { + mSettingsModelConnection->invokeToCore([this, devices]() { + mPlaybackDevices = devices; + emit playbackDevicesChanged(devices); + }); + }); + mSettingsModelConnection->makeConnectToModel(&SettingsModel::ringerDevicesChanged, [this](QVariantList devices) { + mSettingsModelConnection->invokeToCore([this, devices]() { + mRingerDevices = devices; + emit ringerDevicesChanged(devices); + }); + }); // Video device(s) mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetVideoDevice, [this](const QString id) { @@ -379,15 +379,15 @@ QString SettingsCore::getConfigPath(const QCommandLineParser &parser) { return configPath; } -QStringList SettingsCore::getCaptureDevices() const { +QVariantList SettingsCore::getCaptureDevices() const { return mCaptureDevices; } -QStringList SettingsCore::getPlaybackDevices() const { +QVariantList SettingsCore::getPlaybackDevices() const { return mPlaybackDevices; } -QStringList SettingsCore::getRingerDevices() const { +QVariantList SettingsCore::getRingerDevices() const { return mRingerDevices; } @@ -411,15 +411,15 @@ float SettingsCore::getPlaybackGain() const { return mPlaybackGain; } -QString SettingsCore::getCaptureDevice() const { +QVariantMap SettingsCore::getCaptureDevice() const { return mCaptureDevice; } -QString SettingsCore::getPlaybackDevice() const { +QVariantMap SettingsCore::getPlaybackDevice() const { return mPlaybackDevice; } -QString SettingsCore::getRingerDevice() const { +QVariantMap SettingsCore::getRingerDevice() const { return mRingerDevice; } diff --git a/Linphone/core/setting/SettingsCore.hpp b/Linphone/core/setting/SettingsCore.hpp index 9dbb8d6a4..c38a7e198 100644 --- a/Linphone/core/setting/SettingsCore.hpp +++ b/Linphone/core/setting/SettingsCore.hpp @@ -46,16 +46,16 @@ class SettingsCore : public QObject, public AbstractObject { Q_PROPERTY(bool captureGraphRunning READ getCaptureGraphRunning NOTIFY captureGraphRunningChanged) - Q_PROPERTY(QStringList captureDevices READ getCaptureDevices NOTIFY captureDevicesChanged) - Q_PROPERTY(QStringList playbackDevices READ getPlaybackDevices NOTIFY playbackDevicesChanged) - Q_PROPERTY(QStringList ringerDevices READ getRingerDevices NOTIFY ringerDevicesChanged) + Q_PROPERTY(QVariantList captureDevices READ getCaptureDevices NOTIFY captureDevicesChanged) + Q_PROPERTY(QVariantList playbackDevices READ getPlaybackDevices NOTIFY playbackDevicesChanged) + Q_PROPERTY(QVariantList ringerDevices READ getRingerDevices NOTIFY ringerDevicesChanged) Q_PROPERTY(float playbackGain READ getPlaybackGain WRITE lSetPlaybackGain NOTIFY playbackGainChanged) Q_PROPERTY(float captureGain READ getCaptureGain WRITE lSetCaptureGain NOTIFY captureGainChanged) - Q_PROPERTY(QString captureDevice READ getCaptureDevice WRITE lSetCaptureDevice NOTIFY captureDeviceChanged) - Q_PROPERTY(QString playbackDevice READ getPlaybackDevice WRITE lSetPlaybackDevice NOTIFY playbackDeviceChanged) - Q_PROPERTY(QString ringerDevice READ getRingerDevice WRITE lSetRingerDevice NOTIFY ringerDeviceChanged) + Q_PROPERTY(QVariantMap captureDevice READ getCaptureDevice WRITE lSetCaptureDevice NOTIFY captureDeviceChanged) + Q_PROPERTY(QVariantMap playbackDevice READ getPlaybackDevice WRITE lSetPlaybackDevice NOTIFY playbackDeviceChanged) + Q_PROPERTY(QVariantMap ringerDevice READ getRingerDevice WRITE lSetRingerDevice NOTIFY ringerDeviceChanged) Q_PROPERTY(QStringList videoDevices READ getVideoDevices NOTIFY videoDevicesChanged) Q_PROPERTY(QString videoDevice READ getVideoDevice WRITE lSetVideoDevice NOTIFY videoDeviceChanged) @@ -109,14 +109,13 @@ public: float getCaptureGain() const; - QStringList getCaptureDevices() const; - QStringList getPlaybackDevices() const; - QStringList getRingerDevices() const; + QVariantList getCaptureDevices() const; + QVariantList getPlaybackDevices() const; + QVariantList getRingerDevices() const; - QString getCaptureDevice() const; - - QString getPlaybackDevice() const; - QString getRingerDevice() const; + QVariantMap getCaptureDevice() const; + QVariantMap getPlaybackDevice() const; + QVariantMap getRingerDevice() const; QString getVideoDevice() const { return mVideoDevice; @@ -191,18 +190,18 @@ signals: void playbackGainChanged(float gain); void captureGainChanged(float gain); - void captureDevicesChanged(const QStringList &devices); - void playbackDevicesChanged(const QStringList &devices); - void ringerDevicesChanged(const QStringList &devices); + void captureDevicesChanged(const QVariantList &devices); + void playbackDevicesChanged(const QVariantList &devices); + void ringerDevicesChanged(const QVariantList &devices); - void lSetCaptureDevice(const QString &device); - void captureDeviceChanged(const QString &device); + void lSetCaptureDevice(const QVariantMap &device); + void captureDeviceChanged(const QVariantMap &device); - void lSetPlaybackDevice(const QString &device); - void playbackDeviceChanged(const QString &device); + void lSetPlaybackDevice(const QVariantMap &device); + void playbackDeviceChanged(const QVariantMap &device); - void lSetRingerDevice(const QString &device); - void ringerDeviceChanged(const QString &device); + void lSetRingerDevice(const QVariantMap &device); + void ringerDeviceChanged(const QVariantMap &device); void lSetVideoDevice(const QString &device); void videoDeviceChanged(); @@ -247,12 +246,12 @@ private: bool mAutomaticallyRecordCallsEnabled; // Audio - QStringList mCaptureDevices; - QStringList mPlaybackDevices; - QStringList mRingerDevices; - QString mCaptureDevice; - QString mPlaybackDevice; - QString mRingerDevice; + QVariantList mCaptureDevices; + QVariantList mPlaybackDevices; + QVariantList mRingerDevices; + QVariantMap mCaptureDevice; + QVariantMap mPlaybackDevice; + QVariantMap mRingerDevice; // Video QStringList mVideoDevices; diff --git a/Linphone/model/setting/SettingsModel.cpp b/Linphone/model/setting/SettingsModel.cpp index 12a2df3a4..bfc0ae484 100644 --- a/Linphone/model/setting/SettingsModel.cpp +++ b/Linphone/model/setting/SettingsModel.cpp @@ -88,27 +88,6 @@ std::string SettingsModel::getEntryFullName(const std::string §ion, const st return isReadOnly(section, name) ? name + "/readonly" : name; } -QStringList SettingsModel::getVideoDevices() const { - mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); - auto core = CoreModel::getInstance()->getCore(); - QStringList result; - for (auto &device : core->getVideoDevicesList()) { - result.append(Utils::coreStringToAppString(device)); - } - return result; -} - -QString SettingsModel::getVideoDevice() const { - mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); - return Utils::coreStringToAppString(CoreModel::getInstance()->getCore()->getVideoDevice()); -} - -void SettingsModel::setVideoDevice(const QString &device) { - mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); - CoreModel::getInstance()->getCore()->setVideoDevice(Utils::appStringToCoreString(device)); - emit videoDeviceChanged(device); -} - // ============================================================================= // Audio. // ============================================================================= @@ -125,8 +104,9 @@ void SettingsModel::resetCaptureGraph() { } void SettingsModel::createCaptureGraph() { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); - mSimpleCaptureGraph = new MediastreamerUtils::SimpleCaptureGraph(Utils::appStringToCoreString(getCaptureDevice()), - Utils::appStringToCoreString(getPlaybackDevice())); + mSimpleCaptureGraph = + new MediastreamerUtils::SimpleCaptureGraph(Utils::appStringToCoreString(getCaptureDevice()["id"].toString()), + Utils::appStringToCoreString(getPlaybackDevice()["id"].toString())); mSimpleCaptureGraph->start(); emit captureGraphRunningChanged(getCaptureGraphRunning()); } @@ -245,56 +225,68 @@ void SettingsModel::setCaptureGain(float gain) { if ((int)(oldGain * 1000) != (int)(gain * 1000)) emit captureGainChanged(gain); } -QStringList SettingsModel::getCaptureDevices() const { +QVariantList SettingsModel::getCaptureDevices() const { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); shared_ptr core = CoreModel::getInstance()->getCore(); - QStringList list; + QVariantList list; for (const auto &device : core->getExtendedAudioDevices()) { - if (device->hasCapability(linphone::AudioDevice::Capabilities::CapabilityRecord)) - list << Utils::coreStringToAppString(device->getId()); + if (device->hasCapability(linphone::AudioDevice::Capabilities::CapabilityRecord)) { + list << ToolModel::createVariant(device); + } } return list; } -QStringList SettingsModel::getPlaybackDevices() const { +QVariantList SettingsModel::getPlaybackDevices() const { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); shared_ptr core = CoreModel::getInstance()->getCore(); - QStringList list; + QVariantList list; for (const auto &device : core->getExtendedAudioDevices()) { if (device->hasCapability(linphone::AudioDevice::Capabilities::CapabilityPlay)) - list << Utils::coreStringToAppString(device->getId()); + list << ToolModel::createVariant(device); } return list; } -QStringList SettingsModel::getRingerDevices() const { +QVariantList SettingsModel::getRingerDevices() const { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); shared_ptr core = CoreModel::getInstance()->getCore(); - QStringList list; + QVariantList list; for (const auto &device : core->getExtendedAudioDevices()) { if (device->hasCapability(linphone::AudioDevice::Capabilities::CapabilityPlay)) - list << Utils::coreStringToAppString(device->getId()); + list << ToolModel::createVariant(device); } return list; } +QStringList SettingsModel::getVideoDevices() const { + mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); + auto core = CoreModel::getInstance()->getCore(); + QStringList result; + for (auto &device : core->getVideoDevicesList()) { + result.append(Utils::coreStringToAppString(device)); + } + return result; +} + // ----------------------------------------------------------------------------- -QString SettingsModel::getCaptureDevice() const { +QVariantMap SettingsModel::getCaptureDevice() const { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); auto audioDevice = CoreModel::getInstance()->getCore()->getInputAudioDevice(); if (!audioDevice) audioDevice = CoreModel::getInstance()->getCore()->getDefaultInputAudioDevice(); - return Utils::coreStringToAppString(audioDevice ? audioDevice->getId() : ""); + return ToolModel::createVariant(audioDevice); } -void SettingsModel::setCaptureDevice(const QString &device) { +void SettingsModel::setCaptureDevice(const QVariantMap &device) { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); - auto audioDevice = ToolModel::findAudioDevice(device, linphone::AudioDevice::Capabilities::CapabilityRecord); + auto audioDevice = + ToolModel::findAudioDevice(device["id"].toString(), linphone::AudioDevice::Capabilities::CapabilityRecord); if (audioDevice) { CoreModel::getInstance()->getCore()->setDefaultInputAudioDevice(audioDevice); CoreModel::getInstance()->getCore()->setInputAudioDevice(audioDevice); @@ -305,16 +297,17 @@ void SettingsModel::setCaptureDevice(const QString &device) { // ----------------------------------------------------------------------------- -QString SettingsModel::getPlaybackDevice() const { +QVariantMap SettingsModel::getPlaybackDevice() const { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); auto audioDevice = CoreModel::getInstance()->getCore()->getOutputAudioDevice(); if (!audioDevice) audioDevice = CoreModel::getInstance()->getCore()->getDefaultOutputAudioDevice(); - return Utils::coreStringToAppString(audioDevice ? audioDevice->getId() : ""); + return ToolModel::createVariant(audioDevice); } -void SettingsModel::setPlaybackDevice(const QString &device) { +void SettingsModel::setPlaybackDevice(const QVariantMap &device) { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); - auto audioDevice = ToolModel::findAudioDevice(device, linphone::AudioDevice::Capabilities::CapabilityPlay); + auto audioDevice = + ToolModel::findAudioDevice(device["id"].toString(), linphone::AudioDevice::Capabilities::CapabilityPlay); if (audioDevice) { CoreModel::getInstance()->getCore()->setDefaultOutputAudioDevice(audioDevice); CoreModel::getInstance()->getCore()->setOutputAudioDevice(audioDevice); @@ -325,22 +318,32 @@ void SettingsModel::setPlaybackDevice(const QString &device) { // ----------------------------------------------------------------------------- -QString SettingsModel::getRingerDevice() const { +QVariantMap SettingsModel::getRingerDevice() const { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); - return Utils::coreStringToAppString(CoreModel::getInstance()->getCore()->getRingerDevice()); + auto id = Utils::coreStringToAppString(CoreModel::getInstance()->getCore()->getRingerDevice()); + auto audioDevice = ToolModel::findAudioDevice(id, linphone::AudioDevice::Capabilities::CapabilityPlay); + return ToolModel::createVariant(audioDevice); } -void SettingsModel::setRingerDevice(const QString &device) { +void SettingsModel::setRingerDevice(const QVariantMap &device) { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); - auto audioDevice = ToolModel::findAudioDevice(device, linphone::AudioDevice::Capabilities::CapabilityPlay); - - if (audioDevice) { - CoreModel::getInstance()->getCore()->setRingerDevice(audioDevice->getId()); - emit ringerDeviceChanged(device); - } else qWarning() << "Cannot set Ringer device. The ID cannot be matched with an existant device : " << device; + CoreModel::getInstance()->getCore()->setRingerDevice(Utils::appStringToCoreString(device["id"].toString())); + emit ringerDeviceChanged(device); } // ----------------------------------------------------------------------------- + +QString SettingsModel::getVideoDevice() const { + mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); + return Utils::coreStringToAppString(CoreModel::getInstance()->getCore()->getVideoDevice()); +} + +void SettingsModel::setVideoDevice(const QString &device) { + mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); + CoreModel::getInstance()->getCore()->setVideoDevice(Utils::appStringToCoreString(device)); + emit videoDeviceChanged(device); +} + bool SettingsModel::getVideoEnabled() const { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); return CoreModel::getInstance()->getCore()->videoEnabled(); diff --git a/Linphone/model/setting/SettingsModel.hpp b/Linphone/model/setting/SettingsModel.hpp index 6d908f54b..25d5364e0 100644 --- a/Linphone/model/setting/SettingsModel.hpp +++ b/Linphone/model/setting/SettingsModel.hpp @@ -82,27 +82,26 @@ public: float getCaptureGain() const; void setCaptureGain(float gain); - QStringList getCaptureDevices() const; - QStringList getPlaybackDevices() const; - QStringList getRingerDevices() const; + QVariantList getCaptureDevices() const; + QVariantList getPlaybackDevices() const; + QVariantList getRingerDevices() const; + QStringList getVideoDevices() const; // There is no VideoDevice API from SDK - QString getCaptureDevice() const; - void setCaptureDevice(const QString &device); + QVariantMap getCaptureDevice() const; + void setCaptureDevice(const QVariantMap &device); - QString getPlaybackDevice() const; - void setPlaybackDevice(const QString &device); + QVariantMap getPlaybackDevice() const; + void setPlaybackDevice(const QVariantMap &device); - QString getRingerDevice() const; - void setRingerDevice(const QString &device); - - void startEchoCancellerCalibration(); - int getEchoCancellationCalibration() const; - - QStringList getVideoDevices() const; + QVariantMap getRingerDevice() const; + void setRingerDevice(const QVariantMap &device); QString getVideoDevice() const; void setVideoDevice(const QString &device); + void startEchoCancellerCalibration(); + int getEchoCancellationCalibration() const; + bool getLogsEnabled() const; void setLogsEnabled(bool status); @@ -172,19 +171,18 @@ signals: void playbackGainChanged(float gain); void captureGainChanged(float gain); - void captureDevicesChanged(const QStringList &devices); - void playbackDevicesChanged(const QStringList &devices); - void ringerDevicesChanged(const QStringList &devices); + void captureDevicesChanged(QVariantList devices); + void playbackDevicesChanged(QVariantList devices); + void ringerDevicesChanged(QVariantList devices); + void videoDevicesChanged(QStringList devices); - void captureDeviceChanged(const QString &device); - void playbackDeviceChanged(const QString &device); - void ringerDeviceChanged(const QString &device); + void captureDeviceChanged(QVariantMap device); + void playbackDeviceChanged(QVariantMap device); + void ringerDeviceChanged(QVariantMap device); + void videoDeviceChanged(QString device); void showAudioCodecsChanged(bool status); - void videoDevicesChanged(const QStringList &devices); - void videoDeviceChanged(const QString &device); - void micVolumeChanged(float volume); void logsEnabledChanged(bool status); diff --git a/Linphone/model/tool/ToolModel.cpp b/Linphone/model/tool/ToolModel.cpp index a6c4ed89d..226d3cb12 100644 --- a/Linphone/model/tool/ToolModel.cpp +++ b/Linphone/model/tool/ToolModel.cpp @@ -350,3 +350,12 @@ void ToolModel::updateCodecs() { } #endif // if defined(Q_OS_LINUX) || defined(Q_OS_WIN) } + +QVariantMap ToolModel::createVariant(const std::shared_ptr &device) { + QVariantMap map; + map.insert("id", device ? Utils::coreStringToAppString(device->getId()) : ""); + map.insert("display_name", + device ? Utils::coreStringToAppString(device->getDriverName() + ": " + device->getDeviceName()) + : tr("Unknown device")); + return map; +} diff --git a/Linphone/model/tool/ToolModel.hpp b/Linphone/model/tool/ToolModel.hpp index b42d447c7..402ec32e2 100644 --- a/Linphone/model/tool/ToolModel.hpp +++ b/Linphone/model/tool/ToolModel.hpp @@ -68,6 +68,8 @@ public: static void loadDownloadedCodecs(); static void updateCodecs(); + static QVariantMap createVariant(const std::shared_ptr &device); + private: DECLARE_ABSTRACT_OBJECT }; diff --git a/Linphone/view/Control/Button/ComboBox.qml b/Linphone/view/Control/Button/ComboBox.qml index 2ebb1e015..e97c9d2d5 100644 --- a/Linphone/view/Control/Button/ComboBox.qml +++ b/Linphone/view/Control/Button/ComboBox.qml @@ -9,8 +9,6 @@ Control.ComboBox { // Usage : each item of the model list must be {text: ..., img: ...} // If string list, only text part of the delegate will be filled // readonly property string currentText: selectedItemText.text - // Layout.preferredWidth: mainItem.width - // Layout.preferredHeight: mainItem.height property alias listView: listView property string constantImageSource property int pixelSize: 14 * DefaultStyle.dp @@ -24,7 +22,9 @@ Control.ComboBox { var item = model[currentIndex] if (!item) item = model.getAt(currentIndex) if (!item) return - selectedItemText.text = item.text + selectedItemText.text = mainItem.textRole + ? item[mainItem.textRole] + : item.text ? item.text : item ? item @@ -99,19 +99,6 @@ Control.ComboBox { anchors.rightMargin: 20 * DefaultStyle.dp anchors.verticalCenter: parent.verticalCenter } - - Component.onCompleted: { - var index = mainItem.currentIndex < 0 ? 0 : mainItem.currentIndex - if (mainItem.model && mainItem.model[index]) { - if (mainItem.model[index] && mainItem.model[index].img) { - selectedItemImg.source = mainItem.model[index].img - } - else if (mainItem.model[index] && mainItem.model[index].text) - selectedItemText.text = mainItem.model[index].text - else - selectedItemText.text = mainItem.model[index] - } - } } @@ -183,11 +170,15 @@ Control.ComboBox { Text { text: typeof(modelData) != "undefined" - ? modelData.text - ? modelData.text - : modelData + ? mainItem.textRole + ? modelData[mainItem.textRole] + : modelData.text + ? modelData.text + : modelData : $modelData - ? $modelData + ? mainItem.textRole + ? $modelData[mainItem.textRole] + : $modelData : "" elide: Text.ElideRight maximumLineCount: 1 diff --git a/Linphone/view/Control/Button/Settings/ComboSetting.qml b/Linphone/view/Control/Button/Settings/ComboSetting.qml index 86c8eb7c3..a5ae8b184 100644 --- a/Linphone/view/Control/Button/Settings/ComboSetting.qml +++ b/Linphone/view/Control/Button/Settings/ComboSetting.qml @@ -5,23 +5,24 @@ import Linphone import 'qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js' as Utils ComboBox { - id: comboBox + id: mainItem Layout.preferredHeight: 49 * DefaultStyle.dp property string propertyName + property var propertyOwner - property alias entries: comboBox.model + property alias entries: mainItem.model oneLine: true currentIndex: Utils.findIndex(model, function (entry) { - return entry === propertyOwner[propertyName] + return Utils.equalObject(entry,propertyOwner[propertyName]) }) - onCurrentTextChanged: { - binding.when = currentText != propertyOwner[propertyName] + onCurrentValueChanged: { + binding.when = !Utils.equalObject(currentValue,propertyOwner[propertyName]) } Binding { id: binding target: propertyOwner property: propertyName - value: comboBox.currentText + value: mainItem.currentValue when: false } } diff --git a/Linphone/view/Control/Form/Settings/MultimediaSettings.qml b/Linphone/view/Control/Form/Settings/MultimediaSettings.qml index 599b7647b..af24c7a8e 100644 --- a/Linphone/view/Control/Form/Settings/MultimediaSettings.qml +++ b/Linphone/view/Control/Form/Settings/MultimediaSettings.qml @@ -53,6 +53,7 @@ ColumnLayout { entries: SettingsCpp.ringerDevices propertyName: "ringerDevice" propertyOwner: SettingsCpp + textRole: 'display_name' } Item { Layout.fillHeight: true @@ -84,6 +85,7 @@ ColumnLayout { entries: SettingsCpp.playbackDevices propertyName: "playbackDevice" propertyOwner: SettingsCpp + textRole: 'display_name' } Slider { id: speakerVolume @@ -123,6 +125,7 @@ ColumnLayout { entries: SettingsCpp.captureDevices propertyName: "captureDevice" propertyOwner: SettingsCpp + textRole: 'display_name' } Slider { id: microVolume diff --git a/Linphone/view/Control/Tool/Helper/utils.js b/Linphone/view/Control/Tool/Helper/utils.js index c1d5159e9..cdae2e502 100644 --- a/Linphone/view/Control/Tool/Helper/utils.js +++ b/Linphone/view/Control/Tool/Helper/utils.js @@ -728,6 +728,19 @@ function printObject(o) { return out; } +function equalObject(a, b) { + var countA = 0, countB = 0; + if(a == b) return true // operator could be performed + for (var i in a) {// Check for all members + if(a[i] != b[i]) return false + else ++countA + } + for (var j in b) {// Check count + ++countB + } + return countB == countA && countA > 0 // if count=0; then the first '==' should already worked +} + function infoDialog(window, message) { window.attachVirtualWindow(buildCommonDialogUri('ConfirmDialog'), { buttonTexts : ['',qsTr('okButton')],