From 3de094165f490e1cc699fc5fe8b15f04696f2d0b Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Wed, 22 Mar 2017 11:43:28 +0100 Subject: [PATCH] feat(ui/views/App/Calls/CallsWindow): handle correctly close --- linphone-desktop/assets/languages/en.ts | 4 +++ linphone-desktop/assets/languages/fr.ts | 4 +++ linphone-desktop/resources.qrc | 1 + .../src/components/calls/CallsListModel.cpp | 10 +++++++ .../src/components/calls/CallsListModel.hpp | 4 +++ .../ui/views/App/Calls/CallsWindow.js | 30 +++++++++++++++++++ .../ui/views/App/Calls/CallsWindow.qml | 8 +++++ 7 files changed, 61 insertions(+) create mode 100644 linphone-desktop/ui/views/App/Calls/CallsWindow.js diff --git a/linphone-desktop/assets/languages/en.ts b/linphone-desktop/assets/languages/en.ts index 231317ab2..e3aa1a4ce 100644 --- a/linphone-desktop/assets/languages/en.ts +++ b/linphone-desktop/assets/languages/en.ts @@ -219,6 +219,10 @@ callsTitle Calls + + acceptClosingDescription + Are you sure you want to terminate all calls? + Chat diff --git a/linphone-desktop/assets/languages/fr.ts b/linphone-desktop/assets/languages/fr.ts index deb9f1af2..074e4ba8b 100644 --- a/linphone-desktop/assets/languages/fr.ts +++ b/linphone-desktop/assets/languages/fr.ts @@ -219,6 +219,10 @@ callsTitle Appels + + acceptClosingDescription + Voulez-vous vraiment quitter tous vos appels en cours ? + Chat diff --git a/linphone-desktop/resources.qrc b/linphone-desktop/resources.qrc index 2b4a968de..dab3d93d3 100644 --- a/linphone-desktop/resources.qrc +++ b/linphone-desktop/resources.qrc @@ -311,6 +311,7 @@ ui/scripts/Utils/uri-tools.js ui/scripts/Utils/utils.js ui/views/App/Calls/AbstractStartingCall.qml + ui/views/App/Calls/CallsWindow.js ui/views/App/Calls/CallsWindow.qml ui/views/App/Calls/IncallFullscreenWindow.qml ui/views/App/Calls/Incall.js diff --git a/linphone-desktop/src/components/calls/CallsListModel.cpp b/linphone-desktop/src/components/calls/CallsListModel.cpp index 3e90d16cc..f6ba884b2 100644 --- a/linphone-desktop/src/components/calls/CallsListModel.cpp +++ b/linphone-desktop/src/components/calls/CallsListModel.cpp @@ -138,6 +138,16 @@ void CallsListModel::launchVideoCall (const QString &sip_uri) const { // ----------------------------------------------------------------------------- +int CallsListModel::getRunningCallsNumber () const { + return CoreManager::getInstance()->getCore()->getCallsNb(); +} + +void CallsListModel::terminateAllCalls () const { + CoreManager::getInstance()->getCore()->terminateAllCalls(); +} + +// ----------------------------------------------------------------------------- + bool CallsListModel::removeRow (int row, const QModelIndex &parent) { return removeRows(row, 1, parent); } diff --git a/linphone-desktop/src/components/calls/CallsListModel.hpp b/linphone-desktop/src/components/calls/CallsListModel.hpp index d5decabb3..e9126aabb 100644 --- a/linphone-desktop/src/components/calls/CallsListModel.hpp +++ b/linphone-desktop/src/components/calls/CallsListModel.hpp @@ -48,6 +48,10 @@ public: Q_INVOKABLE void launchAudioCall (const QString &sip_uri) const; Q_INVOKABLE void launchVideoCall (const QString &sip_uri) const; + Q_INVOKABLE int getRunningCallsNumber () const; + + Q_INVOKABLE void terminateAllCalls () const; + signals: void callRunning (int index, CallModel *call); diff --git a/linphone-desktop/ui/views/App/Calls/CallsWindow.js b/linphone-desktop/ui/views/App/Calls/CallsWindow.js new file mode 100644 index 000000000..7c63f9e67 --- /dev/null +++ b/linphone-desktop/ui/views/App/Calls/CallsWindow.js @@ -0,0 +1,30 @@ +// ============================================================================= +// `CallsWindow.qml` Logic. +// ============================================================================= + +.import Linphone 1.0 as Linphone + +.import 'qrc:/ui/scripts/Utils/utils.js' as Utils + +// ============================================================================= + +var forceClose = false + +function handleClosing (close) { + var callsList = Linphone.CallsListModel + if (forceClose || callsList.getRunningCallsNumber() === 0) { + callsList.terminateAllCalls() + return + } + + window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + descriptionText: qsTr('acceptClosingDescription'), + }, function (status) { + if (status) { + forceClose = true + window.close() + } + }) + + close.accepted = false +} diff --git a/linphone-desktop/ui/views/App/Calls/CallsWindow.qml b/linphone-desktop/ui/views/App/Calls/CallsWindow.qml index b08e01a4c..15ce203d7 100644 --- a/linphone-desktop/ui/views/App/Calls/CallsWindow.qml +++ b/linphone-desktop/ui/views/App/Calls/CallsWindow.qml @@ -8,6 +8,8 @@ import Linphone 1.0 import App.Styles 1.0 +import 'CallsWindow.js' as Logic + // ============================================================================= Window { @@ -36,6 +38,12 @@ Window { minimumWidth: CallsWindowStyle.minimumWidth title: qsTr('callsTitle') + // --------------------------------------------------------------------------- + + onClosing: Logic.handleClosing(close) + + // --------------------------------------------------------------------------- + Paned { anchors.fill: parent defaultChildAWidth: CallsWindowStyle.callsList.defaultWidth