diff --git a/linphone-desktop/CMakeLists.txt b/linphone-desktop/CMakeLists.txt index 8b2fe8317..60b72a42f 100644 --- a/linphone-desktop/CMakeLists.txt +++ b/linphone-desktop/CMakeLists.txt @@ -98,6 +98,7 @@ set(SOURCES src/components/authentication/AuthenticationNotifier.cpp src/components/call/CallModel.cpp src/components/calls/CallsListModel.cpp + src/components/calls/CallsListProxyModel.cpp src/components/camera/Camera.cpp src/components/camera/CameraPreview.cpp src/components/camera/MSFunctions.cpp @@ -140,6 +141,7 @@ set(HEADERS src/components/authentication/AuthenticationNotifier.hpp src/components/call/CallModel.hpp src/components/calls/CallsListModel.hpp + src/components/calls/CallsListProxyModel.hpp src/components/camera/Camera.hpp src/components/camera/CameraPreview.hpp src/components/camera/MSFunctions.hpp diff --git a/linphone-desktop/src/app/App.cpp b/linphone-desktop/src/app/App.cpp index 8c1b6b8f4..9949193bf 100644 --- a/linphone-desktop/src/app/App.cpp +++ b/linphone-desktop/src/app/App.cpp @@ -343,6 +343,7 @@ void App::registerTypes () { registerType("AssistantModel"); registerType("AuthenticationNotifier"); + registerType("CallsListProxyModel"); registerType("Camera"); registerType("CameraPreview"); registerType("ChatModel"); diff --git a/linphone-desktop/src/components/Components.hpp b/linphone-desktop/src/components/Components.hpp index fb798cf88..99610535f 100644 --- a/linphone-desktop/src/components/Components.hpp +++ b/linphone-desktop/src/components/Components.hpp @@ -26,6 +26,7 @@ #include "assistant/AssistantModel.hpp" #include "authentication/AuthenticationNotifier.hpp" #include "calls/CallsListModel.hpp" +#include "calls/CallsListProxyModel.hpp" #include "camera/Camera.hpp" #include "camera/CameraPreview.hpp" #include "chat/ChatProxyModel.hpp" diff --git a/linphone-desktop/src/components/calls/CallsListProxyModel.cpp b/linphone-desktop/src/components/calls/CallsListProxyModel.cpp new file mode 100644 index 000000000..acbcfe0c3 --- /dev/null +++ b/linphone-desktop/src/components/calls/CallsListProxyModel.cpp @@ -0,0 +1,49 @@ +/* + * CallsListProxyModel.cpp + * Copyright (C) 2017 Belledonne Communications, Grenoble, France + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Created on: May 22, 2017 + * Author: Ronan Abhamon + */ + +#include "../core/CoreManager.hpp" + +#include "CallsListProxyModel.hpp" + +using namespace std; + +// ============================================================================= + +CallsListProxyModel::CallsListProxyModel (QObject *parent) : QSortFilterProxyModel(parent) { + CallsListModel *callsListModel = CoreManager::getInstance()->getCallsListModel(); + + QObject::connect( + callsListModel, &CallsListModel::callRunning, this, [this](int index, CallModel *callModel) { + emit callRunning(index, callModel); + } + ); + + setSourceModel(callsListModel); + sort(0); +} + +bool CallsListProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const { + const QModelIndex &index = sourceModel()->index(sourceRow, 0, sourceParent); + shared_ptr call = index.data().value()->getCall(); + + return call->getConference() != nullptr; +} diff --git a/linphone-desktop/src/components/calls/CallsListProxyModel.hpp b/linphone-desktop/src/components/calls/CallsListProxyModel.hpp new file mode 100644 index 000000000..110947d9f --- /dev/null +++ b/linphone-desktop/src/components/calls/CallsListProxyModel.hpp @@ -0,0 +1,46 @@ +/* + * CallsListProxyModel.hpp + * Copyright (C) 2017 Belledonne Communications, Grenoble, France + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Created on: May 22, 2017 + * Author: Ronan Abhamon + */ + +#ifndef CALLS_LIST_PROXY_MODEL_H_ +#define CALLS_LIST_PROXY_MODEL_H_ + +#include + +#include "../call/CallModel.hpp" + +// ============================================================================= + +class CallsListProxyModel : public QSortFilterProxyModel { + Q_OBJECT; + +public: + CallsListProxyModel (QObject *parent = Q_NULLPTR); + ~CallsListProxyModel () = default; + +signals: + void callRunning (int index, CallModel *callModel); + +private: + bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override; +}; + +#endif // CALLS_LIST_PROXY_MODEL_H_ diff --git a/linphone-desktop/ui/views/App/Calls/CallsWindow.qml b/linphone-desktop/ui/views/App/Calls/CallsWindow.qml index 90ebd92ef..c5d53c0b4 100644 --- a/linphone-desktop/ui/views/App/Calls/CallsWindow.qml +++ b/linphone-desktop/ui/views/App/Calls/CallsWindow.qml @@ -110,7 +110,7 @@ Window { Layout.fillHeight: true Layout.fillWidth: true - model: CallsListModel + model: CallsListProxyModel {} } } }