From c00c0bcda62480146a21294f3fce596883f45904 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Wed, 19 Apr 2017 15:10:32 +0200 Subject: [PATCH] feat(ui/views/App/Settings/SettingsVideo): supports video size --- .../src/components/settings/SettingsModel.cpp | 32 +++++++++++++ .../src/components/settings/SettingsModel.hpp | 13 +++++ .../ui/views/App/Settings/SettingsVideo.qml | 48 ++++++++++--------- 3 files changed, 71 insertions(+), 22 deletions(-) diff --git a/linphone-desktop/src/components/settings/SettingsModel.cpp b/linphone-desktop/src/components/settings/SettingsModel.cpp index e0d133163..bcfe74086 100644 --- a/linphone-desktop/src/components/settings/SettingsModel.cpp +++ b/linphone-desktop/src/components/settings/SettingsModel.cpp @@ -177,6 +177,38 @@ void SettingsModel::setVideoFramerate (int framerate) { emit videoFramerateChanged(framerate); } +// ----------------------------------------------------------------------------- + +inline QVariantMap createMapFromVideoDefinition (const shared_ptr &definition) { + QVariantMap map; + + map["name"] = ::Utils::linphoneStringToQString(definition->getName()); + map["width"] = definition->getWidth(); + map["height"] = definition->getHeight(); + map["__definition"] = QVariant::fromValue(definition); + + return map; +} + +QVariantList SettingsModel::getSupportedVideoDefinitions () const { + QVariantList list; + for (const auto &definition : linphone::Factory::get()->getSupportedVideoDefinitions()) + list << createMapFromVideoDefinition(definition); + return list; +} + +QVariantMap SettingsModel::getVideoDefinition () const { + return createMapFromVideoDefinition(CoreManager::getInstance()->getCore()->getPreferredVideoDefinition()); +} + +void SettingsModel::setVideoDefinition (const QVariantMap &definition) { + CoreManager::getInstance()->getCore()->setPreferredVideoDefinition( + definition.value("__definition").value >()->clone() + ); + + emit videoDefinitionChanged(definition); +} + // ============================================================================= // Chat & calls. // ============================================================================= diff --git a/linphone-desktop/src/components/settings/SettingsModel.hpp b/linphone-desktop/src/components/settings/SettingsModel.hpp index 021128f7b..87deb6925 100644 --- a/linphone-desktop/src/components/settings/SettingsModel.hpp +++ b/linphone-desktop/src/components/settings/SettingsModel.hpp @@ -56,6 +56,10 @@ class SettingsModel : public QObject { Q_PROPERTY(QString videoPreset READ getVideoPreset WRITE setVideoPreset NOTIFY videoPresetChanged); Q_PROPERTY(int videoFramerate READ getVideoFramerate WRITE setVideoFramerate NOTIFY videoFramerateChanged); + Q_PROPERTY(QVariantList supportedVideoDefinitions READ getSupportedVideoDefinitions CONSTANT); + + Q_PROPERTY(QVariantMap videoDefinition READ getVideoDefinition WRITE setVideoDefinition NOTIFY videoDefinitionChanged); + // Chat & calls. ------------------------------------------------------------- Q_PROPERTY(bool autoAnswerStatus READ getAutoAnswerStatus WRITE setAutoAnswerStatus NOTIFY autoAnswerStatusChanged); @@ -164,6 +168,11 @@ public: int getVideoFramerate () const; void setVideoFramerate (int framerate); + QVariantList getSupportedVideoDefinitions () const; + + QVariantMap getVideoDefinition () const; + void setVideoDefinition (const QVariantMap &definition); + // Chat & calls. ------------------------------------------------------------- bool getAutoAnswerStatus () const; @@ -271,6 +280,8 @@ signals: void videoPresetChanged (const QString &preset); void videoFramerateChanged (int framerate); + void videoDefinitionChanged (const QVariantMap &definition); + // Chat & calls. ------------------------------------------------------------- void autoAnswerStatusChanged (bool status); @@ -318,4 +329,6 @@ private: std::shared_ptr mConfig; }; +Q_DECLARE_METATYPE(std::shared_ptr ); + #endif // SETTINGS_MODEL_H_ diff --git a/linphone-desktop/ui/views/App/Settings/SettingsVideo.qml b/linphone-desktop/ui/views/App/Settings/SettingsVideo.qml index 9f9d548fd..58218cad9 100644 --- a/linphone-desktop/ui/views/App/Settings/SettingsVideo.qml +++ b/linphone-desktop/ui/views/App/Settings/SettingsVideo.qml @@ -44,33 +44,25 @@ TabContainer { currentIndex: { var preset = SettingsModel.videoPreset - return Number(Utils.findIndex([ 'default', 'high-fps', 'custom' ], function (value) { - return preset === value + return Number(Utils.findIndex(model, function (value) { + return preset === value.value })) } - model: ListModel { - id: presets - - ListElement { - key: qsTr('presetDefault') - value: 'default' - } - - ListElement { - key: qsTr('presetHighFps') - value: 'high-fps' - } - - ListElement { - key: qsTr('presetCustom') - value: 'custom' - } - } + model: [{ + key: qsTr('presetDefault'), + value: 'default' + }, { + key: qsTr('presetHighFps'), + value: 'high-fps' + }, { + key: qsTr('presetCustom'), + value: 'custom' + }] textRole: 'key' - onActivated: SettingsModel.videoPreset = presets.get(index).value + onActivated: SettingsModel.videoPreset = model[index].value } } } @@ -80,7 +72,19 @@ TabContainer { label: qsTr('videoSizeLabel') ComboBox { - // TODO + currentIndex: Utils.findIndex(model, function (definition) { + return definition.value.name === SettingsModel.videoDefinition.name + }) + model: SettingsModel.supportedVideoDefinitions.map(function (definition) { + return { + key: definition.name + ' (' + definition.width + 'x' + definition.height + ')', + value: definition + } + }) + + textRole: 'key' + + onActivated: SettingsModel.videoDefinition = model[index].value } }