diff --git a/linphone-app/assets/languages/da.ts b/linphone-app/assets/languages/da.ts
index 375bbc7d6..96fe42b36 100644
--- a/linphone-app/assets/languages/da.ts
+++ b/linphone-app/assets/languages/da.ts
@@ -1454,6 +1454,13 @@ Klik her: <a href="%1">%1</a>
OK
+
+ MultimediaParametersDialog
+
+ ok
+ OK
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/de.ts b/linphone-app/assets/languages/de.ts
index 30d2db494..e4d55b0dd 100644
--- a/linphone-app/assets/languages/de.ts
+++ b/linphone-app/assets/languages/de.ts
@@ -1454,6 +1454,13 @@ Klicken Sie hier: <a href="%1">%1</a>
OK
+
+ MultimediaParametersDialog
+
+ ok
+ OK
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/en.ts b/linphone-app/assets/languages/en.ts
index d83a142a0..a12ef5d7c 100644
--- a/linphone-app/assets/languages/en.ts
+++ b/linphone-app/assets/languages/en.ts
@@ -1454,6 +1454,13 @@ Click here: <a href="%1">%1</a>
OK
+
+ MultimediaParametersDialog
+
+ ok
+ OK
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/es.ts b/linphone-app/assets/languages/es.ts
index 9e7fae26a..83e9da2de 100644
--- a/linphone-app/assets/languages/es.ts
+++ b/linphone-app/assets/languages/es.ts
@@ -1454,6 +1454,13 @@ Haga clic aquí: <a href="%1">%1 </a>
OK
+
+ MultimediaParametersDialog
+
+ ok
+ OK
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/fr_FR.ts b/linphone-app/assets/languages/fr_FR.ts
index 73e851847..64eed8f38 100644
--- a/linphone-app/assets/languages/fr_FR.ts
+++ b/linphone-app/assets/languages/fr_FR.ts
@@ -1454,6 +1454,13 @@ Cliquez ici : <a href="%1">%1</a>
OK
+
+ MultimediaParametersDialog
+
+ ok
+ OK
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/hu.ts b/linphone-app/assets/languages/hu.ts
index 1c703f6c5..cabe2e860 100644
--- a/linphone-app/assets/languages/hu.ts
+++ b/linphone-app/assets/languages/hu.ts
@@ -1445,6 +1445,13 @@ Kattintson ide: <a href="%1">%1</a>
Rendben
+
+ MultimediaParametersDialog
+
+ ok
+ Rendben
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/it.ts b/linphone-app/assets/languages/it.ts
index 0d8f5103b..e5c2dd682 100644
--- a/linphone-app/assets/languages/it.ts
+++ b/linphone-app/assets/languages/it.ts
@@ -1454,6 +1454,13 @@ Clicca: <a href="%1">%1</a>
OK
+
+ MultimediaParametersDialog
+
+ ok
+ OK
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/ja.ts b/linphone-app/assets/languages/ja.ts
index 595a5cb06..1311caf7f 100644
--- a/linphone-app/assets/languages/ja.ts
+++ b/linphone-app/assets/languages/ja.ts
@@ -1445,6 +1445,13 @@
OK
+
+ MultimediaParametersDialog
+
+ ok
+ OK
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/lt.ts b/linphone-app/assets/languages/lt.ts
index 39b5829b3..1f71b6ba0 100644
--- a/linphone-app/assets/languages/lt.ts
+++ b/linphone-app/assets/languages/lt.ts
@@ -1463,6 +1463,13 @@ Spustelėkite čia: <a href="%1">%1</a>
GERAI
+
+ MultimediaParametersDialog
+
+ ok
+ GERAI
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/pt_BR.ts b/linphone-app/assets/languages/pt_BR.ts
index 446c36e11..76a69505d 100644
--- a/linphone-app/assets/languages/pt_BR.ts
+++ b/linphone-app/assets/languages/pt_BR.ts
@@ -1454,6 +1454,13 @@ Clique aqui: <a href="%1">%1 </a>
ESTÁ BEM
+
+ MultimediaParametersDialog
+
+ ok
+
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/ru.ts b/linphone-app/assets/languages/ru.ts
index 38afc7369..c85e64b0f 100644
--- a/linphone-app/assets/languages/ru.ts
+++ b/linphone-app/assets/languages/ru.ts
@@ -1463,6 +1463,13 @@
OK
+
+ MultimediaParametersDialog
+
+ ok
+ OK
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/sv.ts b/linphone-app/assets/languages/sv.ts
index 68706bcb3..fc299a6fd 100644
--- a/linphone-app/assets/languages/sv.ts
+++ b/linphone-app/assets/languages/sv.ts
@@ -1454,6 +1454,13 @@ Klicka här: <a href="%1">%1</a>
OK
+
+ MultimediaParametersDialog
+
+ ok
+ OK
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/tr.ts b/linphone-app/assets/languages/tr.ts
index a22eab247..335c8bc0f 100644
--- a/linphone-app/assets/languages/tr.ts
+++ b/linphone-app/assets/languages/tr.ts
@@ -1450,6 +1450,13 @@ Buraya tıklayın: <a href="%1">%1</a>
TAMAM
+
+ MultimediaParametersDialog
+
+ ok
+
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/uk.ts b/linphone-app/assets/languages/uk.ts
index c41d2e99c..cb22d2445 100644
--- a/linphone-app/assets/languages/uk.ts
+++ b/linphone-app/assets/languages/uk.ts
@@ -1463,6 +1463,13 @@
Так
+
+ MultimediaParametersDialog
+
+ ok
+ Так
+
+
NewChatRoom
diff --git a/linphone-app/assets/languages/zh_CN.ts b/linphone-app/assets/languages/zh_CN.ts
index 7c3fee755..41d2ab197 100644
--- a/linphone-app/assets/languages/zh_CN.ts
+++ b/linphone-app/assets/languages/zh_CN.ts
@@ -1445,6 +1445,13 @@
好
+
+ MultimediaParametersDialog
+
+ ok
+ 好
+
+
NewChatRoom
diff --git a/linphone-app/resources.qrc b/linphone-app/resources.qrc
index a16d12d70..60600aa08 100644
--- a/linphone-app/resources.qrc
+++ b/linphone-app/resources.qrc
@@ -329,6 +329,7 @@
ui/modules/Linphone/Contact/Contact.qml
ui/modules/Linphone/Dialog/OnlineInstallerDialog.qml
ui/modules/Linphone/Dialog/SipAddressDialog.qml
+ ui/modules/Linphone/Dialog/MultimediaParametersDialog.qml
ui/modules/Linphone/File/FileView.qml
ui/modules/Linphone/History/History.qml
ui/modules/Linphone/History/History.js
@@ -366,6 +367,7 @@
ui/modules/Linphone/Styles/Contact/ContactDescriptionStyle.qml
ui/modules/Linphone/Styles/Contact/ContactMessageCounterStyle.qml
ui/modules/Linphone/Styles/Contact/ContactStyle.qml
+ ui/modules/Linphone/Styles/Dialog/MultimediaParametersDialogStyle.qml
ui/modules/Linphone/Styles/Dialog/OnlineInstallerDialogStyle.qml
ui/modules/Linphone/Styles/Dialog/SipAddressDialogStyle.qml
ui/modules/Linphone/Styles/History/HistoryStyle.qml
diff --git a/linphone-app/src/components/call/CallModel.cpp b/linphone-app/src/components/call/CallModel.cpp
index 4a1fc68ce..82dc3d4c5 100644
--- a/linphone-app/src/components/call/CallModel.cpp
+++ b/linphone-app/src/components/call/CallModel.cpp
@@ -229,10 +229,12 @@ float CallModel::getSpeakerVolumeGain () const {
void CallModel::setSpeakerVolumeGain (float volume) {
Q_ASSERT(volume >= 0.0f && volume <= 1.0f);
+ float oldGain = getSpeakerVolumeGain();
if( mCall && mCall->getSpeakerVolumeGain() >= 0)
mCall->setSpeakerVolumeGain(volume);
else
CoreManager::getInstance()->getSettingsModel()->setPlaybackGain(volume);
+ if( (int)(oldGain * 1000) != (int)(volume*1000))
emit speakerVolumeGainChanged(getSpeakerVolumeGain());
}
@@ -245,11 +247,13 @@ float CallModel::getMicroVolumeGain () const {
void CallModel::setMicroVolumeGain (float volume) {
Q_ASSERT(volume >= 0.0f && volume <= 1.0f);
+ float oldGain = getMicroVolumeGain();
if(mCall && mCall->getMicrophoneVolumeGain() >= 0)
mCall->setMicrophoneVolumeGain(volume);
else
CoreManager::getInstance()->getSettingsModel()->setCaptureGain(volume);
- emit microVolumeGainChanged(getMicroVolumeGain());
+ if( (int)(oldGain * 1000) != (int)(volume*1000))
+ emit microVolumeGainChanged(getMicroVolumeGain());
}
// -----------------------------------------------------------------------------
diff --git a/linphone-app/src/components/other/colors/ColorListModel.hpp b/linphone-app/src/components/other/colors/ColorListModel.hpp
index 2f2bd531e..c296b242f 100644
--- a/linphone-app/src/components/other/colors/ColorListModel.hpp
+++ b/linphone-app/src/components/other/colors/ColorListModel.hpp
@@ -218,11 +218,13 @@ class ColorListModel : public ProxyListModel {
ADD_COLOR("me_d_b_inv_bg", "transparent", "[M] Menu disabled button : inverse background")
ADD_COLOR("me_h_b_inv_bg", "transparent", "[M] Menu hovered button : inverse background")
ADD_COLOR("me_p_b_inv_bg", "transparent", "[M] Menu pressed button : inverse background")
+ ADD_COLOR("me_c_b_inv_bg", "#FF5E00", "[M] Menu checked button : inverse background")
ADD_COLOR("me_n_b_inv_fg", "white", "[M] Menu normal button : inverse foreground")
ADD_COLOR("me_d_b_inv_fg", "#80FFFFFF", "[M] Menu disabled button : inverse foreground")
ADD_COLOR("me_h_b_inv_fg", "#B0FFFFFF", "[M] Menu hovered button : inverse foreground")
- ADD_COLOR("me_p_b_inv_fg", "white", "[M] Menu pressed button : inverse foreground")
+ ADD_COLOR("me_p_b_inv_fg", "white", "[M] Menu pressed button : inverse foreground")
+ ADD_COLOR("me_c_b_inv_fg", "white", "[M] Menu checked button : inverse foreground")
//-------------------------------------
// Wave Play
ADD_COLOR_WITH_LINK("w_n_b_bg", "", "[M] Wave play normal button : background", "ma_n_b_bg")
diff --git a/linphone-app/src/components/settings/SettingsModel.cpp b/linphone-app/src/components/settings/SettingsModel.cpp
index 429f7e2b2..e13916464 100644
--- a/linphone-app/src/components/settings/SettingsModel.cpp
+++ b/linphone-app/src/components/settings/SettingsModel.cpp
@@ -234,19 +234,34 @@ void SettingsModel::setDeviceName(const QString& deviceName){
// Audio.
// =============================================================================
+void SettingsModel::resetCaptureGraph() {
+ deleteCaptureGraph();
+ createCaptureGraph();
+}
void SettingsModel::createCaptureGraph() {
- if (mSimpleCaptureGraph) {
- delete mSimpleCaptureGraph;
- mSimpleCaptureGraph = nullptr;
- }
- if (!mSimpleCaptureGraph) {
- mSimpleCaptureGraph =
+ mSimpleCaptureGraph =
new MediastreamerUtils::SimpleCaptureGraph(Utils::appStringToCoreString(getCaptureDevice()), Utils::appStringToCoreString(getPlaybackDevice()));
- }
mSimpleCaptureGraph->start();
emit captureGraphRunningChanged(getCaptureGraphRunning());
}
-
+void SettingsModel::startCaptureGraph(){
+ if(!mSimpleCaptureGraph)
+ createCaptureGraph();
+ ++mCaptureGraphListenerCount;
+}
+void SettingsModel::stopCaptureGraph(){
+ if(--mCaptureGraphListenerCount == 0)
+ deleteCaptureGraph();
+}
+void SettingsModel::deleteCaptureGraph(){
+ if (mSimpleCaptureGraph) {
+ if (mSimpleCaptureGraph->isRunning()) {
+ mSimpleCaptureGraph->stop();
+ }
+ delete mSimpleCaptureGraph;
+ mSimpleCaptureGraph = nullptr;
+ }
+}
//Force a call on the 'detect' method of all audio filters, updating new or removed devices
void SettingsModel::accessAudioSettings() {
CoreManager::getInstance()->getCore()->reloadSoundDevices();
@@ -256,19 +271,13 @@ void SettingsModel::accessAudioSettings() {
emit captureDeviceChanged(getCaptureDevice());
emit ringerDeviceChanged(getRingerDevice());
- if (!getIsInCall()) {
- createCaptureGraph();
- }
+ //if (!getIsInCall()) {
+ startCaptureGraph();
+ //}
}
void SettingsModel::closeAudioSettings() {
- if (mSimpleCaptureGraph) {
- if (mSimpleCaptureGraph->isRunning()) {
- mSimpleCaptureGraph->stop();
- }
- delete mSimpleCaptureGraph;
- mSimpleCaptureGraph = nullptr;
- }
+ stopCaptureGraph();
emit captureGraphRunningChanged(getCaptureGraphRunning());
}
@@ -291,10 +300,13 @@ float SettingsModel::getPlaybackGain() const {
}
void SettingsModel::setPlaybackGain(float gain) {
+ float oldGain = getPlaybackGain();
CoreManager::getInstance()->getCore()->setPlaybackGainDb(MediastreamerUtils::linearToDb(gain));
if (mSimpleCaptureGraph && mSimpleCaptureGraph->isRunning()) {
mSimpleCaptureGraph->setPlaybackGain(gain);
}
+ if((int)(oldGain*1000) != (int)(gain*1000))
+ emit playbackGainChanged(gain);
}
float SettingsModel::getCaptureGain() const {
@@ -303,10 +315,13 @@ float SettingsModel::getCaptureGain() const {
}
void SettingsModel::setCaptureGain(float gain) {
+ float oldGain = getCaptureGain();
CoreManager::getInstance()->getCore()->setMicGainDb(MediastreamerUtils::linearToDb(gain));
if (mSimpleCaptureGraph && mSimpleCaptureGraph->isRunning()) {
mSimpleCaptureGraph->setCaptureGain(gain);
}
+ if((int)(oldGain *1000) != (int)(gain *1000))
+ emit captureGainChanged(gain);
}
QStringList SettingsModel::getCaptureDevices () const {
@@ -350,7 +365,7 @@ void SettingsModel::setCaptureDevice (const QString &device) {
CoreManager::getInstance()->getCore()->setCaptureDevice(devId);
CoreManager::getInstance()->getCore()->setInputAudioDevice(*audioDevice);
emit captureDeviceChanged(device);
- createCaptureGraph();
+ resetCaptureGraph();
}else
qWarning() << "Cannot set Capture device. The ID cannot be matched with an existant device : " << device;
}
@@ -374,7 +389,7 @@ void SettingsModel::setPlaybackDevice (const QString &device) {
CoreManager::getInstance()->getCore()->setPlaybackDevice(devId);
CoreManager::getInstance()->getCore()->setOutputAudioDevice(*audioDevice);
emit playbackDeviceChanged(device);
- createCaptureGraph();
+ resetCaptureGraph();
}else
qWarning() << "Cannot set Playback device. The ID cannot be matched with an existant device : " << device;
}
diff --git a/linphone-app/src/components/settings/SettingsModel.hpp b/linphone-app/src/components/settings/SettingsModel.hpp
index c2f373cee..bc9ab3b87 100644
--- a/linphone-app/src/components/settings/SettingsModel.hpp
+++ b/linphone-app/src/components/settings/SettingsModel.hpp
@@ -269,8 +269,12 @@ public:
void setDeviceName(const QString& deviceName);
// Audio. --------------------------------------------------------------------
-
+
+ Q_INVOKABLE void startCaptureGraph();
+ Q_INVOKABLE void stopCaptureGraph();
+ Q_INVOKABLE void resetCaptureGraph();
void createCaptureGraph();
+ void deleteCaptureGraph();
bool getCaptureGraphRunning();
void accessAudioSettings();
void closeAudioSettings();
@@ -725,6 +729,7 @@ signals:
private:
int mCurrentSettingsTab = 0;
MediastreamerUtils::SimpleCaptureGraph *mSimpleCaptureGraph = nullptr;
+ int mCaptureGraphListenerCount = 0;
std::shared_ptr mConfig;
};
diff --git a/linphone-app/ui/modules/Common/Dialog/DialogPlus.qml b/linphone-app/ui/modules/Common/Dialog/DialogPlus.qml
index de5efe688..8600922f9 100644
--- a/linphone-app/ui/modules/Common/Dialog/DialogPlus.qml
+++ b/linphone-app/ui/modules/Common/Dialog/DialogPlus.qml
@@ -15,7 +15,8 @@ Rectangle {
property alias title : titleBar.text //Optionnal. Show a title bar with a close button.
property alias descriptionText: description.text // Optionnal.
property int buttonsAlignment : Qt.AlignLeft
- property bool flat : false // Remove margins
+ property bool flat : false
+ property bool showMargins: !flat
property bool expandHeight: flat
property alias showCloseCross : titleBar.showCloseCross
@@ -51,7 +52,7 @@ Rectangle {
color: DialogStyle.color
layer {
- enabled: true
+ enabled: !dialog.flat
effect: PopupShadow {}
}
@@ -71,6 +72,7 @@ Rectangle {
DialogTitle{
id:titleBar
//Layout.fillHeight: dialog.contentIsEmpty
+ flat: dialog.flat
showCloseCross:dialog.showCloseCross
Layout.fillWidth: true
onClose: exitStatus(0)
@@ -89,8 +91,8 @@ Rectangle {
Layout.fillHeight: (expandHeight ? true : !dialog.contentIsEmpty)
Layout.fillWidth: true
- Layout.leftMargin: (flat ? 0 : DialogStyle.content.leftMargin)
- Layout.rightMargin: (flat ? 0 : DialogStyle.content.rightMargin)
+ Layout.leftMargin: (showMargins ? DialogStyle.content.leftMargin : 0)
+ Layout.rightMargin: (showMargins ? DialogStyle.content.rightMargin : 0)
}
RowLayout {
diff --git a/linphone-app/ui/modules/Common/Dialog/DialogTitle.qml b/linphone-app/ui/modules/Common/Dialog/DialogTitle.qml
index 99b5c59f5..f7d253785 100644
--- a/linphone-app/ui/modules/Common/Dialog/DialogTitle.qml
+++ b/linphone-app/ui/modules/Common/Dialog/DialogTitle.qml
@@ -16,9 +16,10 @@ Item {
property alias text: title.text
property bool showBar : text != ''
property bool showCloseCross: showBar
+ property bool flat: false
signal close()
- height: 30
+ height: showBar || showCloseCross ? (flat ? 60 : 30) : 0
Rectangle{
anchors.fill:parent
@@ -26,7 +27,7 @@ Item {
GradientStop { position: 0.0; color: DialogStyle.title.lowGradient }
GradientStop { position: 1.0; color: DialogStyle.title.highGradient }
}
- visible:showBar
+ visible:showBar && !flat
}
Text {
id: title
@@ -39,7 +40,8 @@ Item {
color: DialogStyle.description.color
//font.pointSize: DialogStyle.description.pointSize
- font.pointSize: Units.dp * 10
+ font.pointSize: !flat ? Units.dp * 10 : Units.dp * 14
+ font.weight: !flat ? Font.Normal : Font.Bold
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
wrapMode: Text.WordWrap
diff --git a/linphone-app/ui/modules/Common/Form/Slider.qml b/linphone-app/ui/modules/Common/Form/Slider.qml
index 21930f1df..f188bd744 100644
--- a/linphone-app/ui/modules/Common/Form/Slider.qml
+++ b/linphone-app/ui/modules/Common/Form/Slider.qml
@@ -6,47 +6,54 @@ import Common.Styles 1.0
// =============================================================================
Controls.Slider {
- id: slider
+ id: slider
+ property alias backgroundImplicitHeight: backgroundItem.implicitHeight
+ property alias backgroundImplicitWidth: backgroundItem.implicitWidth
- background: Rectangle {
- color: SliderStyle.background.color
+ property alias handleImplicitHeight: handleItem.implicitHeight
+ property alias handleImplicitWidth: handleItem.implicitWidth
- x: slider.leftPadding
- y: slider.topPadding + slider.availableHeight / 2 - height / 2
+ background: Rectangle {
+ id: backgroundItem
+ color: SliderStyle.background.color
- implicitHeight: SliderStyle.background.height
- implicitWidth: SliderStyle.background.width
+ x: slider.leftPadding
+ y: slider.topPadding + slider.availableHeight / 2 - height / 2
- height: implicitHeight
- width: slider.availableWidth
+ implicitHeight: SliderStyle.background.height
+ implicitWidth: SliderStyle.background.width
- radius: SliderStyle.background.radius
+ height: implicitHeight
+ width: slider.availableWidth
- Rectangle {
- color: SliderStyle.background.content.color
+ radius: SliderStyle.background.radius
- height: parent.height
- width: slider.visualPosition * parent.width
+ Rectangle {
+ color: SliderStyle.background.content.color
- radius: SliderStyle.background.content.radius
- }
- }
+ height: parent.height
+ width: slider.visualPosition * parent.width
- handle: Rectangle {
- border.color: slider.pressed
- ? SliderStyle.handle.border.color.pressed
- : SliderStyle.handle.border.color.normal
+ radius: SliderStyle.background.content.radius
+ }
+ }
- color: slider.pressed
- ? SliderStyle.handle.color.pressed
- : SliderStyle.handle.color.normal
+ handle: Rectangle {
+ id: handleItem
+ border.color: slider.pressed
+ ? SliderStyle.handle.border.color.pressed
+ : SliderStyle.handle.border.color.normal
- x: slider.leftPadding + slider.visualPosition * (slider.availableWidth - width)
- y: slider.topPadding + slider.availableHeight / 2 - height / 2
+ color: slider.pressed
+ ? SliderStyle.handle.color.pressed
+ : SliderStyle.handle.color.normal
- implicitWidth: SliderStyle.handle.width
- implicitHeight: SliderStyle.handle.height
+ x: slider.leftPadding + slider.visualPosition * (slider.availableWidth - width)
+ y: slider.topPadding + slider.availableHeight / 2 - height / 2
- radius: SliderStyle.handle.radius
- }
+ implicitWidth: SliderStyle.handle.width
+ implicitHeight: SliderStyle.handle.height
+
+ radius: SliderStyle.handle.radius
+ }
}
diff --git a/linphone-app/ui/modules/Linphone/Dialog/MultimediaParametersDialog.qml b/linphone-app/ui/modules/Linphone/Dialog/MultimediaParametersDialog.qml
new file mode 100644
index 000000000..50404512e
--- /dev/null
+++ b/linphone-app/ui/modules/Linphone/Dialog/MultimediaParametersDialog.qml
@@ -0,0 +1,205 @@
+import QtQuick 2.7
+import QtQuick.Controls 2.7
+import QtQuick.Layouts 1.3
+
+import Common 1.0
+import Common.Styles 1.0
+import Linphone 1.0
+import Linphone.Styles 1.0
+import Utils 1.0
+
+import App.Styles 1.0
+
+// =============================================================================
+
+DialogPlus {
+ property var call
+ property bool fixedSize : true
+
+ property int fitHeight: MultimediaParametersDialogStyle.height+30
+ property int fitWidth: MultimediaParametersDialogStyle.width
+ // ---------------------------------------------------------------------------
+
+ buttons: [
+ TextButtonB {
+ text: qsTr('ok')
+
+ onClicked: {
+ if(call)
+ call.updateStreams()
+ exit(0)
+ }
+ }
+ ]
+
+ buttonsAlignment: Qt.AlignCenter
+ Component.onCompleted: {
+ SettingsModel.startCaptureGraph()
+ if( fixedSize){
+ height = fitHeight
+ width = fitWidth
+ }
+ }
+ Component.onDestruction: SettingsModel.stopCaptureGraph()
+ onCallChanged: !call && exit(0)
+
+ // ---------------------------------------------------------------------------
+
+ Column {
+ anchors.fill: parent
+ anchors.topMargin: MultimediaParametersDialogStyle.column.spacing
+ spacing: MultimediaParametersDialogStyle.column.spacing
+
+ RowLayout {
+ spacing: MultimediaParametersDialogStyle.column.entry.spacing
+ width: parent.width
+
+ Icon {
+ Layout.alignment: Qt.AlignTop
+ Layout.preferredHeight: ComboBoxStyle.background.height
+
+ icon: MultimediaParametersDialogStyle.column.entry.speaker.icon
+ overwriteColor: MultimediaParametersDialogStyle.column.entry.speaker.color
+ iconSize: MultimediaParametersDialogStyle.column.entry.speaker.iconSize
+ }
+
+ Column {
+ Layout.fillWidth: true
+
+ spacing: MultimediaParametersDialogStyle.column.entry.spacing2
+
+ ComboBox {
+ currentIndex: Utils.findIndex(model, function (device) {
+ return device === SettingsModel.playbackDevice
+ })
+ model: SettingsModel.playbackDevices
+ width: parent.width
+
+ onActivated: SettingsModel.playbackDevice = model[index]
+ }
+
+ Slider {
+ id: playbackSlider
+ width: parent.width
+
+ value: call ? value = call.speakerVolumeGain : value = SettingsModel.playbackGain
+ onPositionChanged: if(call)
+ call.speakerVolumeGain = position
+ else
+ SettingsModel.playbackGain = position
+
+ ToolTip {
+ parent: playbackSlider.handle
+ visible: playbackSlider.pressed
+ text: (playbackSlider.value * 100).toFixed(0) + " %"
+ }
+ }
+ }
+ }
+
+ RowLayout {
+ spacing: MultimediaParametersDialogStyle.column.entry.spacing
+ width: parent.width
+
+ Icon {
+ Layout.alignment: Qt.AlignTop
+ Layout.preferredHeight: ComboBoxStyle.background.height
+
+ icon: MultimediaParametersDialogStyle.column.entry.micro.icon
+ overwriteColor: MultimediaParametersDialogStyle.column.entry.micro.color
+ iconSize: MultimediaParametersDialogStyle.column.entry.micro.iconSize
+ }
+
+ Column {
+ Layout.fillWidth: true
+
+ spacing: MultimediaParametersDialogStyle.column.entry.spacing2
+
+ ComboBox {
+ currentIndex: Utils.findIndex(model, function (device) {
+ return device === SettingsModel.captureDevice
+ })
+ model: SettingsModel.captureDevices
+ width: parent.width
+
+ onActivated: SettingsModel.captureDevice = model[index]
+ }
+
+ Slider {
+ id: captureSlider
+ width: parent.width
+ value: call ? call.microVolumeGain : SettingsModel.captureGain
+
+ onPositionChanged: if(call)
+ call.microVolumeGain = position
+ else
+ SettingsModel.captureGain = position
+
+ ToolTip {
+ parent: captureSlider.handle
+ visible: captureSlider.pressed
+ text: "+ " + (captureSlider.value * 100).toFixed(0) + " %"
+ }
+ }
+ Slider {
+ id: audioTestSlider
+
+ enabled: false
+ width: parent.width
+ height: 8
+
+ background: Rectangle {
+ x: audioTestSlider.leftPadding
+ y: audioTestSlider.topPadding + audioTestSlider.availableHeight / 2 - height / 2
+ implicitWidth: 200
+ implicitHeight: 8
+ width: audioTestSlider.availableWidth
+ height: implicitHeight
+ radius: 2
+ color: SettingsAudioStyle.sliderBackgroundColor
+
+ Rectangle {
+ width: audioTestSlider.visualPosition * parent.width
+ height: parent.height
+ color: audioTestSlider.value > 0.8 ? SettingsAudioStyle.sliderHighColor : SettingsAudioStyle.sliderLowColor
+ radius: 2
+ }
+ }
+
+ //Empty slider handle
+ handle: Text {text: ''; visible: false }
+
+ Timer {
+ interval: 50
+ repeat: true
+ running: SettingsModel.captureGraphRunning || call
+
+ onTriggered: call ? parent.value = call.microVu : parent.value = SettingsModel.getMicVolume()
+ }
+ }
+ }
+ }
+
+ RowLayout {
+ spacing: MultimediaParametersDialogStyle.column.entry.spacing
+ width: parent.width
+
+ Icon {
+ icon: MultimediaParametersDialogStyle.column.entry.camera.icon
+ overwriteColor: MultimediaParametersDialogStyle.column.entry.camera.color
+ iconSize: MultimediaParametersDialogStyle.column.entry.speaker.iconSize
+ }
+
+ ComboBox {
+ Layout.fillWidth: true
+
+ currentIndex: Number(Utils.findIndex(model, function (device) {
+ return device === SettingsModel.videoDevice
+ }))
+ model: SettingsModel.videoDevices
+
+ onActivated: SettingsModel.videoDevice = model[index]
+ }
+ }
+ }
+}
diff --git a/linphone-app/ui/modules/Linphone/Styles/Dialog/MultimediaParametersDialogStyle.qml b/linphone-app/ui/modules/Linphone/Styles/Dialog/MultimediaParametersDialogStyle.qml
new file mode 100644
index 000000000..4a2befceb
--- /dev/null
+++ b/linphone-app/ui/modules/Linphone/Styles/Dialog/MultimediaParametersDialogStyle.qml
@@ -0,0 +1,39 @@
+pragma Singleton
+import QtQml 2.2
+import ColorsList 1.0
+// =============================================================================
+
+QtObject {
+ property string sectionName: 'MultimediaParamsDialog'
+ property int height: 312
+ property int width: 450
+
+ property QtObject column: QtObject {
+ property int spacing: 15
+
+ property QtObject entry: QtObject {
+ property int iconSize: 24
+ property int spacing: 10
+ property int spacing2: 5
+ property QtObject speaker: QtObject {
+ property int iconSize: 30
+ property string icon : 'speaker_on_custom'
+ property string name : 'speaker'
+ property color color : ColorsList.addImageColor(sectionName+'_'+name, icon, 'g').color
+ }
+ property QtObject micro: QtObject {
+ property int iconSize: 30
+ property string icon : 'micro_on_custom'
+ property string name : 'micro'
+ property color color : ColorsList.addImageColor(sectionName+'_'+name, icon, 'g').color
+ }
+ property QtObject camera: QtObject {
+ property int iconSize: 30
+ property string icon : 'camera_on_custom'
+ property string name : 'camera'
+ property color color : ColorsList.addImageColor(sectionName+'_'+name, icon, 'g').color
+ }
+ }
+ }
+
+}
diff --git a/linphone-app/ui/modules/Linphone/Styles/qmldir b/linphone-app/ui/modules/Linphone/Styles/qmldir
index 67fab4607..929a90265 100644
--- a/linphone-app/ui/modules/Linphone/Styles/qmldir
+++ b/linphone-app/ui/modules/Linphone/Styles/qmldir
@@ -31,6 +31,7 @@ singleton ContactDescriptionStyle 1.0 Contact/ContactDescriptionSty
singleton ContactMessageCounterStyle 1.0 Contact/ContactMessageCounterStyle.qml
singleton ContactStyle 1.0 Contact/ContactStyle.qml
+singleton MultimediaParametersDialogStyle 1.0 Dialog/MultimediaParametersDialogStyle.qml
singleton OnlineInstallerDialogStyle 1.0 Dialog/OnlineInstallerDialogStyle.qml
singleton SipAddressDialogStyle 1.0 Dialog/SipAddressDialogStyle.qml
diff --git a/linphone-app/ui/modules/Linphone/qmldir b/linphone-app/ui/modules/Linphone/qmldir
index 5b712677e..6de91ac0a 100644
--- a/linphone-app/ui/modules/Linphone/qmldir
+++ b/linphone-app/ui/modules/Linphone/qmldir
@@ -6,51 +6,52 @@ module Linphone
# Components -------------------------------------------------------------------
-AccountStatus 1.0 Account/AccountStatus.qml
+AccountStatus 1.0 Account/AccountStatus.qml
-CardBlock 1.0 Blocks/CardBlock.qml
-RequestBlock 1.0 Blocks/RequestBlock.qml
+CardBlock 1.0 Blocks/CardBlock.qml
+RequestBlock 1.0 Blocks/RequestBlock.qml
-Calls 1.0 Calls/Calls.qml
-CallStatistics 1.0 Calls/CallStatistics.qml
-IncallAvatar 1.0 Calls/IncallAvatar.qml
+Calls 1.0 Calls/Calls.qml
+CallStatistics 1.0 Calls/CallStatistics.qml
+IncallAvatar 1.0 Calls/IncallAvatar.qml
-CameraItem 1.0 Camera/CameraItem.qml
-CameraView 1.0 Camera/CameraView.qml
+CameraItem 1.0 Camera/CameraItem.qml
+CameraView 1.0 Camera/CameraView.qml
-Chat 1.0 Chat/Chat.qml
-ChatAudioMessage 1.0 Chat/ChatAudioMessage.qml
-ChatAudioPreview 1.0 Chat/ChatAudioPreview.qml
-ChatCalendarMessage 1.0 Chat/ChatCalendarMessage.qml
-ChatMessagePreview 1.0 Chat/ChatMessagePreview.qml
-ChatForwardMessage 1.0 Chat/ChatForwardMessage.qml
-ChatReplyMessage 1.0 Chat/ChatReplyMessage.qml
-ChatReplyPreview 1.0 Chat/ChatReplyPreview.qml
+Chat 1.0 Chat/Chat.qml
+ChatAudioMessage 1.0 Chat/ChatAudioMessage.qml
+ChatAudioPreview 1.0 Chat/ChatAudioPreview.qml
+ChatCalendarMessage 1.0 Chat/ChatCalendarMessage.qml
+ChatMessagePreview 1.0 Chat/ChatMessagePreview.qml
+ChatForwardMessage 1.0 Chat/ChatForwardMessage.qml
+ChatReplyMessage 1.0 Chat/ChatReplyMessage.qml
+ChatReplyPreview 1.0 Chat/ChatReplyPreview.qml
-CodecsViewer 1.0 Codecs/CodecsViewer.qml
+CodecsViewer 1.0 Codecs/CodecsViewer.qml
-Avatar 1.0 Contact/Avatar.qml
-Contact 1.0 Contact/Contact.qml
-ContactDescription 1.0 Contact/ContactDescription.qml
+Avatar 1.0 Contact/Avatar.qml
+Contact 1.0 Contact/Contact.qml
+ContactDescription 1.0 Contact/ContactDescription.qml
-SipAddressDialog 1.0 Dialog/SipAddressDialog.qml
+SipAddressDialog 1.0 Dialog/SipAddressDialog.qml
+MultimediaParametersDialog 1.0 Dialog/MultimediaParametersDialog.qml
-FileView 1.0 File/FileView.qml
+FileView 1.0 File/FileView.qml
-History 1.0 History/History.qml
+History 1.0 History/History.qml
-SipAddressesMenu 1.0 Menus/SipAddressesMenu.qml
+SipAddressesMenu 1.0 Menus/SipAddressesMenu.qml
-MessageCounter 1.0 Misc/MessageCounter.qml
+MessageCounter 1.0 Misc/MessageCounter.qml
-PresenceLevel 1.0 Presence/PresenceLevel.qml
+PresenceLevel 1.0 Presence/PresenceLevel.qml
-SmartSearchBar 1.0 SmartSearchBar/SmartSearchBar.qml
+SmartSearchBar 1.0 SmartSearchBar/SmartSearchBar.qml
-TelKeypad 1.0 TelKeypad/TelKeypad.qml
+TelKeypad 1.0 TelKeypad/TelKeypad.qml
-Timeline 1.0 Timeline/Timeline.qml
+Timeline 1.0 Timeline/Timeline.qml
-SipAddressesView 1.0 View/SipAddressesView.qml
+SipAddressesView 1.0 View/SipAddressesView.qml
-ParticipantsView 1.0 View/ParticipantsView.qml
+ParticipantsView 1.0 View/ParticipantsView.qml
diff --git a/linphone-app/ui/views/App/Calls/VideoConference.qml b/linphone-app/ui/views/App/Calls/VideoConference.qml
index 16e5529cc..f04eb1dd2 100644
--- a/linphone-app/ui/views/App/Calls/VideoConference.qml
+++ b/linphone-app/ui/views/App/Calls/VideoConference.qml
@@ -392,6 +392,7 @@ Rectangle {
isCustom: true
backgroundRadius: width/2
colorSet: VideoConferenceStyle.buttons.options
+ toggled: rightMenu.visible
onClicked: rightMenu.visible = !rightMenu.visible
}
}
diff --git a/linphone-app/ui/views/App/Calls/VideoConferenceFullscreen.qml b/linphone-app/ui/views/App/Calls/VideoConferenceFullscreen.qml
index 27efc5994..5b2bf80af 100644
--- a/linphone-app/ui/views/App/Calls/VideoConferenceFullscreen.qml
+++ b/linphone-app/ui/views/App/Calls/VideoConferenceFullscreen.qml
@@ -197,7 +197,7 @@ Window {
ActionButton{
isCustom: true
backgroundRadius: width/2
- colorSet: VideoConferenceStyle.buttons.fullscreen
+ colorSet: VideoConferenceStyle.buttons.stopFullscreen
onClicked: window.exit()
}
diff --git a/linphone-app/ui/views/App/Calls/VideoConferenceMenu.qml b/linphone-app/ui/views/App/Calls/VideoConferenceMenu.qml
index 20548f72b..bd0150168 100644
--- a/linphone-app/ui/views/App/Calls/VideoConferenceMenu.qml
+++ b/linphone-app/ui/views/App/Calls/VideoConferenceMenu.qml
@@ -52,7 +52,7 @@ Rectangle{
}
Text{
id: title
- text: contentsStack.currentItem.objectName == 'settingsMenu' ? 'Paramètres' : 'Modifier la mise en page'
+ text: 'Paramètres'
Layout.fillWidth: true
Layout.preferredHeight: implicitHeight
horizontalAlignment: Qt.AlignCenter
@@ -77,6 +77,7 @@ Rectangle{
initialItem: settingsMenuComponent
Layout.fillHeight: true
Layout.fillWidth: true
+ onPopEnterChanged: if(nViews <= 1 ) title.text = 'Paramètres'
}
Component{
id: settingsMenuComponent
@@ -85,7 +86,12 @@ Rectangle{
Layout.fillHeight: true
Layout.fillWidth: true
Repeater{
- model: [{text: 'Modifier la mise en page'
+ model: [
+ {text: 'Régler les périphériques'
+ , icon: VideoConferenceMenuStyle.settingsIcons.mediaIcon
+ , nextPage:mediaMenu},
+
+ {text: 'Modifier la mise en page'
, icon: (mainItem.callModel.videoEnabled ?
(mainItem.callModel.conferenceVideoLayout == LinphoneEnums.ConferenceLayoutGrid ? VideoConferenceMenuStyle.settingsIcons.gridIcon : VideoConferenceMenuStyle.settingsIcons.activeSpeakerIcon)
: VideoConferenceMenuStyle.settingsIcons.audioOnlyIcon)
@@ -131,7 +137,10 @@ Rectangle{
}
MouseArea{
anchors.fill: parent
- onClicked: contentsStack.push(modelData.nextPage)
+ onClicked: {
+ title.text = modelData.text
+ contentsStack.push(modelData.nextPage)
+ }
}
}
}
@@ -141,6 +150,28 @@ Rectangle{
}
}
}
+ Component{
+ id: mediaMenu
+ ColumnLayout{
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ MultimediaParametersDialog{
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ Layout.minimumHeight: fitHeight
+ call: conference.callModel
+ flat: true
+ showMargins: true
+ expandHeight: false
+ fixedSize: false
+ onExitStatus: contentsStack.pop()
+ }
+ Item{// Spacer
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+ }
+ }
Component{
id: layoutMenu
ColumnLayout{
diff --git a/linphone-app/ui/views/App/Calls/WaitingRoom.qml b/linphone-app/ui/views/App/Calls/WaitingRoom.qml
index e27e63040..97abc6370 100644
--- a/linphone-app/ui/views/App/Calls/WaitingRoom.qml
+++ b/linphone-app/ui/views/App/Calls/WaitingRoom.qml
@@ -35,17 +35,46 @@ Rectangle {
font.pointSize: WaitingRoomStyle.title.pointSize
horizontalAlignment: Qt.AlignCenter
}
-
- Item{
+ RowLayout{
id: loader
Layout.fillWidth: true
Layout.fillHeight: true
- CameraView{
- id: previewLoader
- showCloseButton: false
- anchors.centerIn: parent
- height: parent.height
- width : height
+ Item{
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ CameraView{
+ id: previewLoader
+ showCloseButton: false
+ anchors.centerIn: parent
+ height: Math.min( parent.height, parent.width)
+ width : height
+ ActionButton{
+ anchors.top: parent.top
+ anchors.right: parent.right
+ anchors.topMargin: 10
+ anchors.rightMargin: 10
+ isCustom: true
+ backgroundRadius: width/2
+ colorSet: WaitingRoomStyle.buttons.options
+ toggled: mediaMenu.visible
+ onClicked: mediaMenu.visible = !mediaMenu.visible
+ }
+ }
+ }
+ MultimediaParametersDialog{
+ id: mediaMenu
+ Layout.fillHeight: true
+ Layout.leftMargin: 10
+ Layout.rightMargin: 10
+ Layout.minimumHeight: fitHeight
+ Layout.minimumWidth: fitWidth
+ radius: 8
+ flat: true
+ showMargins: true
+ fixedSize: false
+ onExitStatus: visible = false
+ visible: false
+ title: 'Régler les périphériques'
}
}
// -------------------------------------------------------------------------
@@ -53,7 +82,8 @@ Rectangle {
// -------------------------------------------------------------------------
RowLayout{
Layout.fillWidth: true
- Layout.bottomMargin: 40
+ Layout.topMargin: 25
+ Layout.bottomMargin: 25
Layout.leftMargin: 25
Layout.rightMargin: 25
Item{
diff --git a/linphone-app/ui/views/App/Settings/SettingsAudio.qml b/linphone-app/ui/views/App/Settings/SettingsAudio.qml
index f659e3edc..cd1fb94c4 100644
--- a/linphone-app/ui/views/App/Settings/SettingsAudio.qml
+++ b/linphone-app/ui/views/App/Settings/SettingsAudio.qml
@@ -71,7 +71,7 @@ TabContainer {
width: parent.width
enabled: !SettingsModel.isInCall
- Component.onCompleted: value = SettingsModel.playbackGain
+ value: SettingsModel.playbackGain
onPositionChanged: SettingsModel.playbackGain = position
ToolTip {
@@ -107,7 +107,7 @@ TabContainer {
width: parent.width
enabled: !SettingsModel.isInCall
- Component.onCompleted: value = SettingsModel.captureGain
+ value: SettingsModel.captureGain
onPositionChanged: SettingsModel.captureGain = position
ToolTip {
diff --git a/linphone-app/ui/views/App/Styles/Calls/CallsWindowStyle.qml b/linphone-app/ui/views/App/Styles/Calls/CallsWindowStyle.qml
index ea7f3d963..f0bd8069e 100644
--- a/linphone-app/ui/views/App/Styles/Calls/CallsWindowStyle.qml
+++ b/linphone-app/ui/views/App/Styles/Calls/CallsWindowStyle.qml
@@ -6,7 +6,7 @@ import ColorsList 1.0
QtObject {
property string sectionName: 'CallsWindow'
- property int minimumHeight: 480
+ property int minimumHeight: 640
property int minimumWidth: 960
property QtObject call: QtObject {
diff --git a/linphone-app/ui/views/App/Styles/Calls/VideoConferenceMenuStyle.qml b/linphone-app/ui/views/App/Styles/Calls/VideoConferenceMenuStyle.qml
index 8c659da52..bf2034906 100644
--- a/linphone-app/ui/views/App/Styles/Calls/VideoConferenceMenuStyle.qml
+++ b/linphone-app/ui/views/App/Styles/Calls/VideoConferenceMenuStyle.qml
@@ -43,6 +43,7 @@ QtObject {
property string gridIcon: 'conference_layout_grid_custom'
property string activeSpeakerIcon: 'conference_layout_active_speaker_custom'
property string audioOnlyIcon: 'conference_audio_only_custom'
+ property string mediaIcon: 'micro_on_custom'
property int width: 40
property int height: 40
}
diff --git a/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml b/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml
index f2d21371e..a6599176c 100644
--- a/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml
+++ b/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml
@@ -420,9 +420,11 @@ QtObject {
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'me_n_b_inv_bg').color
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'me_h_b_inv_bg').color
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'me_p_b_inv_bg').color
+ property color backgroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_c', icon, 'me_c_b_inv_bg').color
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'me_n_b_inv_fg').color
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'me_h_b_inv_fg').color
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'me_p_b_inv_fg').color
+ property color foregroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_c', icon, 'me_c_b_inv_fg').color
}
//------------------------------------------------------------------------------
property QtObject closePreview: QtObject {
diff --git a/linphone-app/ui/views/App/Styles/Calls/WaitingRoomStyle.qml b/linphone-app/ui/views/App/Styles/Calls/WaitingRoomStyle.qml
index 77c40dc6c..3b1679a41 100644
--- a/linphone-app/ui/views/App/Styles/Calls/WaitingRoomStyle.qml
+++ b/linphone-app/ui/views/App/Styles/Calls/WaitingRoomStyle.qml
@@ -236,6 +236,19 @@ QtObject {
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color
property color foregroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_u', icon, 's_p_b_fg').color
}
+ property QtObject options: QtObject {
+ property int iconSize: 40
+ property string icon : 'options_custom'
+ property string name : 'options'
+ property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_n_b_bg').color
+ property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_h_b_bg').color
+ property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg').color
+ property color backgroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_c', icon, 's_p_b_bg').color
+ property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_n_b_fg').color
+ property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg').color
+ property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color
+ property color foregroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_c', icon, 's_p_b_fg').color
+ }
/*
property QtObject callsList: QtObject {
property int iconSize: 40