diff --git a/linphone-app/resources.qrc b/linphone-app/resources.qrc index 5a27ffd0b..70f03291f 100644 --- a/linphone-app/resources.qrc +++ b/linphone-app/resources.qrc @@ -229,6 +229,7 @@ ui/modules/Common/Menus/Menu.qml ui/modules/Common/Misc/Borders.qml ui/modules/Common/Misc/ForceScrollBar.qml + ui/modules/Common/Misc/MessageBanner.qml ui/modules/Common/Misc/Paned.qml ui/modules/Common/Picker/DatePicker.qml ui/modules/Common/Picker/TimePicker.qml @@ -276,6 +277,7 @@ ui/modules/Common/Styles/Menus/MenuItemStyle.qml ui/modules/Common/Styles/Menus/MenuStyle.qml ui/modules/Common/Styles/Misc/ForceScrollBarStyle.qml + ui/modules/Common/Styles/Misc/MessageBannerStyle.qml ui/modules/Common/Styles/Misc/PanedStyle.qml ui/modules/Common/Styles/Picker/DatePickerStyle.qml ui/modules/Common/Styles/Picker/TimePickerStyle.qml @@ -398,12 +400,11 @@ ui/modules/Linphone/View/ParticipantsListView.qml ui/modules/Linphone/View/ParticipantsView.qml ui/modules/Linphone/View/SipAddressesView.qml - ui/scripts/LinphoneUtils/linphone-utils.js - ui/scripts/LinphoneUtils/qmldir ui/scripts/Utils/port-tools.js ui/scripts/Utils/qmldir ui/scripts/Utils/uri-tools.js ui/scripts/Utils/utils.js + ui/views/App/qmldir ui/views/App/Calls/AbstractStartingCall.qml ui/views/App/Calls/CallsWindow.js ui/views/App/Calls/CallsWindow.qml @@ -424,6 +425,7 @@ ui/views/App/Calls/OutgoingCall.qml ui/views/App/Calls/WaitingRoom.qml ui/views/App/Calls/ZrtpTokenAuthentication.qml + ui/views/App/Dialog/NewConference.qml ui/views/App/Main/Assistant/ActivateAppSipAccountWithEmail.qml ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml ui/views/App/Main/Assistant/AssistantAbstractView.qml @@ -452,7 +454,6 @@ ui/views/App/Main/Dialogs/ManageAccount.js ui/views/App/Main/Dialogs/ManageAccounts.qml ui/views/App/Main/Dialogs/NewChatRoom.qml - ui/views/App/Main/Dialogs/NewConference.qml ui/views/App/Main/Dialogs/ParticipantsDevices.qml ui/views/App/Main/Home.qml ui/views/App/Main/HistoryView.qml @@ -490,6 +491,7 @@ ui/views/App/Styles/Calls/Dialogs/CallTransferStyle.qml ui/views/App/Styles/Calls/Dialogs/ConferenceManagerStyle.qml ui/views/App/Styles/Calls/Dialogs/MultimediaParametersStyle.qml + ui/views/App/Styles/Dialog/NewConferenceStyle.qml ui/views/App/Styles/Main/Assistant/ActivateAppSipAccountWithEmailStyle.qml ui/views/App/Styles/Main/Assistant/ActivateAppSipAccountWithPhoneNumberStyle.qml ui/views/App/Styles/Main/Assistant/AssistantAbstractViewStyle.qml @@ -507,7 +509,6 @@ ui/views/App/Styles/Main/Dialogs/InfoChatRoomStyle.qml ui/views/App/Styles/Main/Dialogs/InfoEncryptionStyle.qml ui/views/App/Styles/Main/Dialogs/NewChatRoomStyle.qml - ui/views/App/Styles/Main/Dialogs/NewConferenceStyle.qml ui/views/App/Styles/Main/Dialogs/ManageAccountsStyle.qml ui/views/App/Styles/Main/Dialogs/ParticipantsDevicesStyle.qml ui/views/App/Styles/Main/HomeStyle.qml diff --git a/linphone-app/src/app/App.cpp b/linphone-app/src/app/App.cpp index 610272fa8..69dccb9a6 100644 --- a/linphone-app/src/app/App.cpp +++ b/linphone-app/src/app/App.cpp @@ -235,14 +235,19 @@ App::App (int &argc, char *argv[]) : SingleApplication(argc, argv, true, Mode::U App::~App () { qInfo() << QStringLiteral("Destroying app..."); - if( mEngine ) +} + +void App::stop(){ + qInfo() << QStringLiteral("Stopping app..."); + if( mEngine ){ delete mEngine; + processEvents(QEventLoop::AllEvents); + } CoreManager::uninit(); processEvents(QEventLoop::AllEvents); // Process all needed events on engine deletion. if( mParser) delete mParser; } - // ----------------------------------------------------------------------------- QStringList App::cleanParserKeys(QCommandLineParser * parser, QStringList keys){ @@ -406,7 +411,6 @@ void App::initContentApp () { // Enable notifications. mNotifier = new Notifier(mEngine); - // Load main view. qInfo() << QStringLiteral("Loading main view..."); mEngine->load(QUrl(Constants::QmlViewMainWindow)); diff --git a/linphone-app/src/app/App.hpp b/linphone-app/src/app/App.hpp index 66a0d0f0e..166ba9106 100644 --- a/linphone-app/src/app/App.hpp +++ b/linphone-app/src/app/App.hpp @@ -56,6 +56,7 @@ public: App (int &argc, char *argv[]); ~App (); + void stop(); void initContentApp (); QStringList cleanParserKeys(QCommandLineParser * parser, QStringList keys);// Get all options from parser and remove the selected keys. Return the result that can be passed to parser process. void processArguments(QHash args); diff --git a/linphone-app/src/app/AppController.cpp b/linphone-app/src/app/AppController.cpp index d5d374ceb..1d92bc196 100644 --- a/linphone-app/src/app/AppController.cpp +++ b/linphone-app/src/app/AppController.cpp @@ -120,6 +120,7 @@ AppController::~AppController () { void AppController::stopApp(){ try{ + mApp->stop(); delete mApp; mApp = nullptr; } diff --git a/linphone-app/src/app/proxyModel/SortFilterAbstractProxyModel.hpp b/linphone-app/src/app/proxyModel/SortFilterAbstractProxyModel.hpp index 0ac2e3af3..6e51a6326 100644 --- a/linphone-app/src/app/proxyModel/SortFilterAbstractProxyModel.hpp +++ b/linphone-app/src/app/proxyModel/SortFilterAbstractProxyModel.hpp @@ -27,6 +27,10 @@ template class SortFilterAbstractProxyModel : public SortFilterProxyModel { public: SortFilterAbstractProxyModel(T * model, QObject * parent = nullptr) : SortFilterProxyModel(parent){ + update(model); + } + + void update(T* model){ setSourceModel(model); sort(0, Qt::DescendingOrder); } diff --git a/linphone-app/src/components/chat-events/ChatMessageModel.cpp b/linphone-app/src/components/chat-events/ChatMessageModel.cpp index 43536d876..8d43df554 100644 --- a/linphone-app/src/components/chat-events/ChatMessageModel.cpp +++ b/linphone-app/src/components/chat-events/ChatMessageModel.cpp @@ -192,10 +192,6 @@ QSharedPointer ChatMessageModel::getParticipantIm return mParticipantImdnStateListModel; } -ContentProxyModel * ChatMessageModel::getContentsProxy(){ - return new ContentProxyModel(this); -} - QSharedPointer ChatMessageModel::getContents() const{ return mContentListModel; } diff --git a/linphone-app/src/components/chat-events/ChatMessageModel.hpp b/linphone-app/src/components/chat-events/ChatMessageModel.hpp index de028863f..7ef95690c 100644 --- a/linphone-app/src/components/chat-events/ChatMessageModel.hpp +++ b/linphone-app/src/components/chat-events/ChatMessageModel.hpp @@ -112,7 +112,6 @@ public: bool isOutgoing() const; Q_INVOKABLE ParticipantImdnStateProxyModel * getProxyImdnStates(); QSharedPointer getParticipantImdnStates() const; - Q_INVOKABLE ContentProxyModel * getContentsProxy(); QSharedPointer getContents() const; bool isReply() const; diff --git a/linphone-app/src/components/conferenceInfo/ConferenceInfoProxyModel.cpp b/linphone-app/src/components/conferenceInfo/ConferenceInfoProxyModel.cpp index 61c65dcf4..96e6b5946 100644 --- a/linphone-app/src/components/conferenceInfo/ConferenceInfoProxyModel.cpp +++ b/linphone-app/src/components/conferenceInfo/ConferenceInfoProxyModel.cpp @@ -22,6 +22,7 @@ #include "components/call/CallModel.hpp" #include "components/core/CoreManager.hpp" +#include "components/settings/AccountSettingsModel.hpp" #include "ConferenceInfoListModel.hpp" #include "ConferenceInfoMapModel.hpp" @@ -34,8 +35,17 @@ using namespace std; //--------------------------------------------------------------------------------------------- ConferenceInfoProxyModel::ConferenceInfoProxyModel (QObject *parent) : SortFilterAbstractProxyModel(new ConferenceInfoMapModel(parent), parent) { - setFilterType((int)Scheduled); + connect(CoreManager::getInstance()->getAccountSettingsModel(), &AccountSettingsModel::primarySipAddressChanged, this, &ConferenceInfoProxyModel::update); connect(this, &ConferenceInfoProxyModel::filterTypeChanged, qobject_cast(sourceModel()), &ConferenceInfoMapModel::filterTypeChanged); + setFilterType((int)Scheduled); +} + +void ConferenceInfoProxyModel::update(){ + int oldFilter = getFilterType(); + SortFilterAbstractProxyModel::update(new ConferenceInfoMapModel(parent())); + setFilterType(oldFilter+1); + connect(this, &ConferenceInfoProxyModel::filterTypeChanged, qobject_cast(sourceModel()), &ConferenceInfoMapModel::filterTypeChanged); + setFilterType(oldFilter); } bool ConferenceInfoProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const { diff --git a/linphone-app/src/components/conferenceInfo/ConferenceInfoProxyModel.hpp b/linphone-app/src/components/conferenceInfo/ConferenceInfoProxyModel.hpp index 9ba12aac4..4072a2a9b 100644 --- a/linphone-app/src/components/conferenceInfo/ConferenceInfoProxyModel.hpp +++ b/linphone-app/src/components/conferenceInfo/ConferenceInfoProxyModel.hpp @@ -47,6 +47,8 @@ public: Q_ENUM(ConferenceType) ConferenceInfoProxyModel (QObject *parent = Q_NULLPTR); + + Q_INVOKABLE void update(); protected: bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override; diff --git a/linphone-app/src/components/core/CoreManager.cpp b/linphone-app/src/components/core/CoreManager.cpp index 9deba3d6b..f50d7bc08 100644 --- a/linphone-app/src/components/core/CoreManager.cpp +++ b/linphone-app/src/components/core/CoreManager.cpp @@ -91,6 +91,7 @@ CoreManager::~CoreManager(){ // ----------------------------------------------------------------------------- void CoreManager::initCoreManager(){ + qInfo() << "Init CoreManager"; mCallsListModel = new CallsListModel(this); mChatModel = new ChatModel(this); mContactsListModel = new ContactsListModel(this); @@ -144,20 +145,13 @@ void CoreManager::init (QObject *parent, const QString &configPath) { void CoreManager::uninit () { if (mInstance) { - connect(mInstance, &QObject::destroyed, []()mutable{ - mInstance = nullptr; - qInfo() << "Core is correctly destroyed"; - }); - QObject::connect(mInstance->getHandlers().get(), &CoreHandlers::coreStopped, mInstance, &QObject::deleteLater); // Delete data only when the core is Off - mInstance->lockVideoRender();// Stop do iterations. We have to protect GUI. - mInstance->mCore->stop(); + mInstance->mCore->stop();// This is a synchronized stop. mInstance->unlockVideoRender(); - QTest::qWaitFor([&]() {return mInstance == nullptr;},10000); - if( mInstance){ - qWarning() << "Core couldn't destroy in time. It may lead to have multiple session of Core"; - mInstance = nullptr; - } + if( mInstance->mCore->getGlobalState() != linphone::GlobalState::Off) + qWarning() << "Core is not off after stopping it. It may result to have multiple core instance."; + delete mInstance; + mInstance = nullptr; } } diff --git a/linphone-app/src/components/participant/ParticipantProxyModel.cpp b/linphone-app/src/components/participant/ParticipantProxyModel.cpp index b6cc37171..2b01e5317 100644 --- a/linphone-app/src/components/participant/ParticipantProxyModel.cpp +++ b/linphone-app/src/components/participant/ParticipantProxyModel.cpp @@ -24,6 +24,7 @@ #include "components/settings/AccountSettingsModel.hpp" #include "components/sip-addresses/SipAddressesModel.hpp" #include "components/conference/ConferenceModel.hpp" +#include "components/conferenceInfo/ConferenceInfoModel.hpp" #include "utils/Utils.hpp" #include "ParticipantListModel.hpp" @@ -37,6 +38,7 @@ // ----------------------------------------------------------------------------- ParticipantProxyModel::ParticipantProxyModel (QObject *parent) : QSortFilterProxyModel(parent) { + setSourceModel(new ParticipantListModel((ConferenceModel*)nullptr, this)); } // ----------------------------------------------------------------------------- @@ -116,6 +118,12 @@ void ParticipantProxyModel::setConferenceModel(ConferenceModel * conferenceModel } } +void ParticipantProxyModel::setAddresses(ConferenceInfoModel * conferenceInfoModel){ + if(conferenceInfoModel && conferenceInfoModel->getConferenceInfo()) + for(auto address : conferenceInfoModel->getConferenceInfo()->getParticipants()) + addAddress(QString::fromStdString(address->asString())); +} + void ParticipantProxyModel::setShowMe(const bool& show){ if(mShowMe != show){ mShowMe = show; diff --git a/linphone-app/src/components/participant/ParticipantProxyModel.hpp b/linphone-app/src/components/participant/ParticipantProxyModel.hpp index bb176cc4a..1861717fd 100644 --- a/linphone-app/src/components/participant/ParticipantProxyModel.hpp +++ b/linphone-app/src/components/participant/ParticipantProxyModel.hpp @@ -28,57 +28,59 @@ class ParticipantModel; class ChatRoomModel; class ParticipantListModel; class ConferenceModel; +class ConferenceInfoModel; // ============================================================================= class QWindow; class ParticipantProxyModel : public QSortFilterProxyModel { - - Q_OBJECT - - + + Q_OBJECT + + public: - ParticipantProxyModel ( QObject *parent = Q_NULLPTR); - - Q_PROPERTY(ChatRoomModel* chatRoomModel READ getChatRoomModel WRITE setChatRoomModel NOTIFY chatRoomModelChanged) - Q_PROPERTY(ConferenceModel* conferenceModel READ getConferenceModel WRITE setConferenceModel NOTIFY conferenceModelChanged) - Q_PROPERTY(ParticipantListModel * participantListModel READ getParticipantListModel NOTIFY participantListModelChanged) - Q_PROPERTY(int count READ getCount NOTIFY countChanged) - Q_PROPERTY(bool showMe READ getShowMe WRITE setShowMe NOTIFY showMeChanged) - - bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override; - bool lessThan (const QModelIndex &left, const QModelIndex &right) const override; - - ChatRoomModel *getChatRoomModel() const; - ConferenceModel *getConferenceModel() const; - ParticipantListModel * getParticipantListModel() const; - Q_INVOKABLE QStringList getSipAddresses() const; - Q_INVOKABLE QVariantList getParticipants() const; - Q_INVOKABLE int getCount() const; - bool getShowMe() const; - - void setChatRoomModel(ChatRoomModel * chatRoomModel); - void setConferenceModel(ConferenceModel * conferenceModel); - void setShowMe(const bool& show); - - Q_INVOKABLE void addAddress(const QString& address); - Q_INVOKABLE void removeModel(ParticipantModel * participant); - - - + ParticipantProxyModel ( QObject *parent = Q_NULLPTR); + + Q_PROPERTY(ChatRoomModel* chatRoomModel READ getChatRoomModel WRITE setChatRoomModel NOTIFY chatRoomModelChanged) + Q_PROPERTY(ConferenceModel* conferenceModel READ getConferenceModel WRITE setConferenceModel NOTIFY conferenceModelChanged) + Q_PROPERTY(ParticipantListModel * participantListModel READ getParticipantListModel NOTIFY participantListModelChanged) + Q_PROPERTY(int count READ getCount NOTIFY countChanged) + Q_PROPERTY(bool showMe READ getShowMe WRITE setShowMe NOTIFY showMeChanged) + + bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override; + bool lessThan (const QModelIndex &left, const QModelIndex &right) const override; + + ChatRoomModel *getChatRoomModel() const; + ConferenceModel *getConferenceModel() const; + ParticipantListModel * getParticipantListModel() const; + Q_INVOKABLE QStringList getSipAddresses() const; + Q_INVOKABLE QVariantList getParticipants() const; + Q_INVOKABLE int getCount() const; + bool getShowMe() const; + + void setChatRoomModel(ChatRoomModel * chatRoomModel); + void setConferenceModel(ConferenceModel * conferenceModel); + void setShowMe(const bool& show); + + Q_INVOKABLE void addAddress(const QString& address); + Q_INVOKABLE void removeModel(ParticipantModel * participant); + Q_INVOKABLE void setAddresses(ConferenceInfoModel * conferenceInfoModel); + + + signals: - void chatRoomModelChanged(); - void conferenceModelChanged(); - void participantListModelChanged(); - void countChanged(); - void showMeChanged(); - void addressAdded(QString sipAddress); - void addressRemoved(QString sipAddress); - + void chatRoomModelChanged(); + void conferenceModelChanged(); + void participantListModelChanged(); + void countChanged(); + void showMeChanged(); + void addressAdded(QString sipAddress); + void addressRemoved(QString sipAddress); + private: - ChatRoomModel *mChatRoomModel = nullptr; - ConferenceModel *mConferenceModel = nullptr; - bool mShowMe = true; + ChatRoomModel *mChatRoomModel = nullptr; + ConferenceModel *mConferenceModel = nullptr; + bool mShowMe = true; }; #endif // PARTICIPANT_PROXY_MODEL_H_ diff --git a/linphone-app/src/components/tunnel/TunnelConfigProxyModel.cpp b/linphone-app/src/components/tunnel/TunnelConfigProxyModel.cpp index 46f0ae5d9..f136ae762 100644 --- a/linphone-app/src/components/tunnel/TunnelConfigProxyModel.cpp +++ b/linphone-app/src/components/tunnel/TunnelConfigProxyModel.cpp @@ -33,6 +33,9 @@ TunnelConfigProxyModel::TunnelConfigProxyModel (QObject *parent) : QSortFilterProxyModel(parent){ } +TunnelConfigProxyModel::~TunnelConfigProxyModel() { +} + bool TunnelConfigProxyModel::filterAcceptsRow ( int sourceRow, const QModelIndex &sourceParent diff --git a/linphone-app/src/components/tunnel/TunnelConfigProxyModel.hpp b/linphone-app/src/components/tunnel/TunnelConfigProxyModel.hpp index c725af40a..4e5ed34a6 100644 --- a/linphone-app/src/components/tunnel/TunnelConfigProxyModel.hpp +++ b/linphone-app/src/components/tunnel/TunnelConfigProxyModel.hpp @@ -37,6 +37,7 @@ class TunnelConfigProxyModel : public QSortFilterProxyModel { public: TunnelConfigProxyModel (QObject *parent = nullptr); + virtual ~TunnelConfigProxyModel(); void setTunnel(TunnelModel * tunnel); diff --git a/linphone-app/src/components/tunnel/TunnelModel.cpp b/linphone-app/src/components/tunnel/TunnelModel.cpp index a635b8582..9e79af607 100644 --- a/linphone-app/src/components/tunnel/TunnelModel.cpp +++ b/linphone-app/src/components/tunnel/TunnelModel.cpp @@ -39,6 +39,9 @@ TunnelModel::TunnelModel (shared_ptr tunnel, QObject *parent) } } +TunnelModel::~TunnelModel(){ +} + // ----------------------------------------------------------------------------- QString TunnelModel::getDomain() const{ diff --git a/linphone-app/src/components/tunnel/TunnelModel.hpp b/linphone-app/src/components/tunnel/TunnelModel.hpp index 5a3689f52..cd251070e 100644 --- a/linphone-app/src/components/tunnel/TunnelModel.hpp +++ b/linphone-app/src/components/tunnel/TunnelModel.hpp @@ -38,6 +38,7 @@ class TunnelModel : public QObject { public: TunnelModel (std::shared_ptr linphoneTunnel, QObject *parent = nullptr); + virtual ~TunnelModel(); Q_PROPERTY(QString domain READ getDomain WRITE setDomain NOTIFY domainChanged) diff --git a/linphone-app/ui/modules/Common/Dialog/DialogPlus.qml b/linphone-app/ui/modules/Common/Dialog/DialogPlus.qml index 17551010d..837f41551 100644 --- a/linphone-app/ui/modules/Common/Dialog/DialogPlus.qml +++ b/linphone-app/ui/modules/Common/Dialog/DialogPlus.qml @@ -94,6 +94,7 @@ Rectangle { Layout.fillHeight: (expandHeight ? true : !dialog.contentIsEmpty) Layout.fillWidth: true Layout.topMargin: (showMargins ? DialogStyle.content.topMargin : 0) + Layout.bottomMargin: (showMargins ? DialogStyle.content.bottomMargin : 0) Layout.leftMargin: (showMargins ? DialogStyle.content.leftMargin : 0) Layout.rightMargin: (showMargins ? DialogStyle.content.rightMargin : 0) } diff --git a/linphone-app/ui/modules/Common/Misc/MessageBanner.qml b/linphone-app/ui/modules/Common/Misc/MessageBanner.qml new file mode 100644 index 000000000..58fc4b1c0 --- /dev/null +++ b/linphone-app/ui/modules/Common/Misc/MessageBanner.qml @@ -0,0 +1,70 @@ +import QtQuick 2.7 +import QtQuick.Layouts 1.3 + +import Common 1.0 +import Common.Styles 1.0 +import Utils 1.0 + +Rectangle{ + id: mainItem + + property int fitHeight: visible && opacity > 0 ? 32 : 0 + property string noticeBannerText + property int iconMode : 1 // 0=noIcons, 1=copy + + onNoticeBannerTextChanged: if(noticeBannerText!='') mainItem.state = "showed" + + color: MessageBannerStyle.color + radius: 10 + state: "hidden" + Timer{ + id: hideNoticeBanner + interval: 4000 + repeat: false + onTriggered: mainItem.state = "hidden" + } + RowLayout{ + anchors.centerIn: parent + spacing: 5 + Icon{ + icon: if(iconMode == 1) MessageBannerStyle.copyTextIcon + overwriteColor: MessageBannerStyle.textColor + iconSize: 20 + visible: iconMode != 0 + } + Text{ + Layout.fillHeight: true + Layout.fillWidth: true + text: mainItem.noticeBannerText + font { + pointSize: MessageBannerStyle.pointSize + } + color: MessageBannerStyle.textColor + } + } + states: [ + State { + name: "hidden" + PropertyChanges { target: mainItem; opacity: 0 } + }, + State { + name: "showed" + PropertyChanges { target: mainItem; opacity: 1 } + } + ] + transitions: [ + Transition { + from: "*"; to: "showed" + SequentialAnimation{ + NumberAnimation{ properties: "opacity"; easing.type: Easing.OutBounce; duration: 500 } + ScriptAction{ script: hideNoticeBanner.start()} + } + }, + Transition { + SequentialAnimation{ + NumberAnimation{ properties: "opacity"; duration: 1000 } + ScriptAction{ script: mainItem.noticeBannerText = '' } + } + } + ] +}// mainItem \ No newline at end of file diff --git a/linphone-app/ui/modules/Common/Styles/Dialog/DialogStyle.qml b/linphone-app/ui/modules/Common/Styles/Dialog/DialogStyle.qml index 86795159e..21043f75c 100644 --- a/linphone-app/ui/modules/Common/Styles/Dialog/DialogStyle.qml +++ b/linphone-app/ui/modules/Common/Styles/Dialog/DialogStyle.qml @@ -32,6 +32,7 @@ QtObject { property int leftMargin: 25 property int rightMargin: 25 property int topMargin: 25 + property int bottomMargin: 25 } property QtObject description: QtObject { diff --git a/linphone-app/ui/modules/Common/Styles/Misc/MessageBannerStyle.qml b/linphone-app/ui/modules/Common/Styles/Misc/MessageBannerStyle.qml new file mode 100644 index 000000000..d4348e2f1 --- /dev/null +++ b/linphone-app/ui/modules/Common/Styles/Misc/MessageBannerStyle.qml @@ -0,0 +1,15 @@ +pragma Singleton +import QtQml 2.2 + +import Units 1.0 +import ColorsList 1.0 +// ============================================================================= + +QtObject { + property string sectionName: 'MessageBanner' + + property string copyTextIcon : 'copy_custom' + property color color: ColorsList.add(sectionName+'_message_banner', '', 'Background of message banner', '#9ecd1d').color + property color textColor: ColorsList.add(sectionName+'_message_banner_text', 'q', 'Text of message banner').color + property int pointSize: Units.dp * 9 +} diff --git a/linphone-app/ui/modules/Common/Styles/qmldir b/linphone-app/ui/modules/Common/Styles/qmldir index b2ac69445..d7c4a0e26 100644 --- a/linphone-app/ui/modules/Common/Styles/qmldir +++ b/linphone-app/ui/modules/Common/Styles/qmldir @@ -53,6 +53,7 @@ singleton MenuItemStyle 1.0 Menus/MenuItemStyle.qml singleton MenuStyle 1.0 Menus/MenuStyle.qml singleton ForceScrollBarStyle 1.0 Misc/ForceScrollBarStyle.qml +singleton MessageBannerStyle 1.0 Misc/MessageBannerStyle.qml singleton PanedStyle 1.0 Misc/PanedStyle.qml singleton DatePickerStyle 1.0 Picker/DatePickerStyle.qml diff --git a/linphone-app/ui/modules/Common/qmldir b/linphone-app/ui/modules/Common/qmldir index c59156153..3ee1deb84 100644 --- a/linphone-app/ui/modules/Common/qmldir +++ b/linphone-app/ui/modules/Common/qmldir @@ -82,6 +82,7 @@ MenuItem 1.0 Menus/MenuItem.qml Borders 1.0 Misc/Borders.qml ForceScrollBar 1.0 Misc/ForceScrollBar.qml +MessageBanner 1.0 Misc/MessageBanner.qml Paned 1.0 Misc/Paned.qml DatePicker 1.0 Picker/DatePicker.qml diff --git a/linphone-app/ui/modules/Linphone/Calls/IncallAvatar.qml b/linphone-app/ui/modules/Linphone/Calls/IncallAvatar.qml index d70537e69..8cbe26d55 100644 --- a/linphone-app/ui/modules/Linphone/Calls/IncallAvatar.qml +++ b/linphone-app/ui/modules/Linphone/Calls/IncallAvatar.qml @@ -1,7 +1,6 @@ import QtQuick 2.7 import Linphone 1.0 -import LinphoneUtils 1.0 import UtilsCpp 1.0 @@ -13,12 +12,14 @@ Avatar { id: mainItem property var call property var participantDeviceModel - readonly property var _sipAddressObserver: call ? SipAddressesModel.getSipAddressObserver(call.fullPeerAddress, call.fullLocalAddress) + property var _sipAddressObserver: call ? SipAddressesModel.getSipAddressObserver(call.fullPeerAddress, call.fullLocalAddress) : participantDeviceModel ? SipAddressesModel.getSipAddressObserver(participantDeviceModel.address, '') : null - readonly property var _username: _sipAddressObserver ? UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) : '' - property bool isPaused: (call && (call.status === CallModel.CallStatusPaused)) || (participantDeviceModel && participantDeviceModel.isPaused) + property var _username: _sipAddressObserver ? UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) : '' + property bool isPaused: (call && (call.status === CallModel.CallStatusPaused)) || (participantDeviceModel && participantDeviceModel.isPaused) || false + Component.onDestruction: _sipAddressObserver=null// Need to set it to null because of not calling destructor if not. + backgroundColor: CallStyle.container.avatar.backgroundColor foregroundColor: mainItem.isPaused ? CallStyle.container.pause.color : 'transparent' diff --git a/linphone-app/ui/modules/Linphone/Camera/CameraItem.qml b/linphone-app/ui/modules/Linphone/Camera/CameraItem.qml index 2bf5c854e..f5ebec2d0 100644 --- a/linphone-app/ui/modules/Linphone/Camera/CameraItem.qml +++ b/linphone-app/ui/modules/Linphone/Camera/CameraItem.qml @@ -7,7 +7,6 @@ import Common 1.0 import Common.Styles 1.0 import Linphone 1.0 import Linphone.Styles 1.0 -import LinphoneUtils 1.0 import UtilsCpp 1.0 diff --git a/linphone-app/ui/modules/Linphone/Chat/Chat.js b/linphone-app/ui/modules/Linphone/Chat/Chat.js index 15075bc2c..9a9daef2b 100644 --- a/linphone-app/ui/modules/Linphone/Chat/Chat.js +++ b/linphone-app/ui/modules/Linphone/Chat/Chat.js @@ -26,8 +26,6 @@ .import Linphone 1.0 as Linphone .import UtilsCpp 1.0 as UtilsCpp -.import 'qrc:/ui/scripts/LinphoneUtils/linphone-utils.js' as LinphoneUtils - // ============================================================================= function initView () { diff --git a/linphone-app/ui/modules/Linphone/Chat/Chat.qml b/linphone-app/ui/modules/Linphone/Chat/Chat.qml index 673805afb..e893802f8 100644 --- a/linphone-app/ui/modules/Linphone/Chat/Chat.qml +++ b/linphone-app/ui/modules/Linphone/Chat/Chat.qml @@ -21,8 +21,8 @@ Rectangle { property alias proxyModel: chat.model // ChatRoomProxyModel property alias tryingToLoadMoreEntries : chat.tryToLoadMoreEntries - property string noticeBannerText : '' // When set, show a banner with text and hide after some time - onNoticeBannerTextChanged: if(noticeBannerText!='') messageBlock.state = "showed" + property alias noticeBannerText : messageBlock.noticeBannerText // When set, show a banner with text and hide after some time + // --------------------------------------------------------------------------- @@ -380,66 +380,15 @@ Rectangle { ColumnLayout{ anchors.fill: parent spacing: 0 - Rectangle{ + MessageBanner{ id: messageBlock onHeightChanged: height = Layout.preferredHeight - Layout.preferredHeight: visible && opacity > 0 ? 32 : 0 Layout.fillWidth: true + Layout.preferredHeight: fitHeight Layout.leftMargin: ChatStyle.entry.leftMargin Layout.rightMargin: ChatStyle.entry.rightMargin - color: ChatStyle.messageBanner.color - radius: 10 - state: "hidden" - Timer{ - id: hideNoticeBanner - interval: 4000 - repeat: false - onTriggered: messageBlock.state = "hidden" - } - RowLayout{ - anchors.centerIn: parent - spacing: 5 - Icon{ - icon: ChatStyle.copyTextIcon - overwriteColor: ChatStyle.messageBanner.textColor - iconSize: 20 - } - Text{ - Layout.fillHeight: true - Layout.fillWidth: true - text: container.noticeBannerText - font { - pointSize: ChatStyle.messageBanner.pointSize - } - color: ChatStyle.messageBanner.textColor - } - } - states: [ - State { - name: "hidden" - PropertyChanges { target: messageBlock; opacity: 0 } - }, - State { - name: "showed" - PropertyChanges { target: messageBlock; opacity: 1 } - } - ] - transitions: [ - Transition { - from: "*"; to: "showed" - SequentialAnimation{ - NumberAnimation{ properties: "opacity"; easing.type: Easing.OutBounce; duration: 500 } - ScriptAction{ script: hideNoticeBanner.start()} - } - }, - Transition { - SequentialAnimation{ - NumberAnimation{ properties: "opacity"; duration: 1000 } - ScriptAction{ script: container.noticeBannerText = '' } - } - } - ] - }// MessageBlock + noticeBannerText: '' + } ChatMessagePreview{ id: chatMessagePreview Layout.fillWidth: true diff --git a/linphone-app/ui/modules/Linphone/Chat/ChatCalendarMessage.qml b/linphone-app/ui/modules/Linphone/Chat/ChatCalendarMessage.qml index ad7e1bb11..296f6d6d4 100644 --- a/linphone-app/ui/modules/Linphone/Chat/ChatCalendarMessage.qml +++ b/linphone-app/ui/modules/Linphone/Chat/ChatCalendarMessage.qml @@ -2,6 +2,7 @@ import QtQuick 2.7 import QtQuick.Layouts 1.3 import Clipboard 1.0 +import App 1.0 import Common 1.0 import Linphone 1.0 @@ -16,6 +17,7 @@ import LinphoneEnums 1.0 import ColorsList 1.0 import 'Message.js' as Logic +import 'qrc:/ui/scripts/Utils/utils.js' as Utils // ============================================================================= @@ -32,6 +34,7 @@ Loader{ property bool isExpanded : false signal expandToggle() + signal conferenceUriCopied() width: parent.width height: parent.height @@ -242,6 +245,10 @@ Loader{ isCustom: true colorSet: ChatCalendarMessageStyle.copyLinkButton backgroundRadius: width/2 + onClicked: { + Clipboard.text = uriField.text + mainItem.conferenceUriCopied() + } } } RowLayout{ @@ -254,6 +261,7 @@ Loader{ } TextButtonC{ text: 'REJOINDRE' + onClicked: CallsListModel.prepareConferenceCall(mainItem.conferenceInfoModel) } ActionButton{ isCustom: true @@ -261,7 +269,7 @@ Loader{ backgroundRadius: width/2 onClicked: { window.detachVirtualWindow() - window.attachVirtualWindow(Qt.resolvedUrl('../../../views/App/Main/Dialogs/NewConference.qml') + window.attachVirtualWindow(Utils.buildAppDialogUri('NewConference') ,{conferenceInfoModel: mainItem.conferenceInfoModel}) } } diff --git a/linphone-app/ui/modules/Linphone/Chat/ChatFileMessage.qml b/linphone-app/ui/modules/Linphone/Chat/ChatFileMessage.qml index a441239ce..a1a649142 100644 --- a/linphone-app/ui/modules/Linphone/Chat/ChatFileMessage.qml +++ b/linphone-app/ui/modules/Linphone/Chat/ChatFileMessage.qml @@ -4,7 +4,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import LinphoneEnums 1.0 import Linphone.Styles 1.0 import Utils 1.0 diff --git a/linphone-app/ui/modules/Linphone/Chat/ChatFilePreview.qml b/linphone-app/ui/modules/Linphone/Chat/ChatFilePreview.qml index 7168cf5fc..09c468362 100644 --- a/linphone-app/ui/modules/Linphone/Chat/ChatFilePreview.qml +++ b/linphone-app/ui/modules/Linphone/Chat/ChatFilePreview.qml @@ -47,7 +47,7 @@ Item{ FileView{ height:mainListView.height-ChatFilePreviewStyle.filePreview.heightMargins width: height * ChatFilePreviewStyle.filePreview.format - anchors.verticalCenter: ScrollableListView.contentItem.verticalCenter + anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: 7 //anchors.horizontalCenter: parent.horizontalCenter thumbnail: $modelData.thumbnail diff --git a/linphone-app/ui/modules/Linphone/Chat/IncomingMessage.qml b/linphone-app/ui/modules/Linphone/Chat/IncomingMessage.qml index 02ee1109e..eff6cccb6 100644 --- a/linphone-app/ui/modules/Linphone/Chat/IncomingMessage.qml +++ b/linphone-app/ui/modules/Linphone/Chat/IncomingMessage.qml @@ -4,7 +4,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Linphone 1.0 import Linphone.Styles 1.0 -import LinphoneUtils 1.0 // ============================================================================= diff --git a/linphone-app/ui/modules/Linphone/Contact/Contact.qml b/linphone-app/ui/modules/Linphone/Contact/Contact.qml index 715e90d72..9c91f63f9 100644 --- a/linphone-app/ui/modules/Linphone/Contact/Contact.qml +++ b/linphone-app/ui/modules/Linphone/Contact/Contact.qml @@ -3,7 +3,6 @@ import QtQuick.Layouts 1.3 import QtGraphicalEffects 1.12 import Linphone 1.0 -import LinphoneUtils 1.0 import Linphone.Styles 1.0 import Common 1.0 diff --git a/linphone-app/ui/modules/Linphone/File/FileView.qml b/linphone-app/ui/modules/Linphone/File/FileView.qml index 4a5e5607a..8a2424893 100644 --- a/linphone-app/ui/modules/Linphone/File/FileView.qml +++ b/linphone-app/ui/modules/Linphone/File/FileView.qml @@ -4,7 +4,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import LinphoneEnums 1.0 import Linphone.Styles 1.0 import Utils 1.0 diff --git a/linphone-app/ui/modules/Linphone/History/Event.qml b/linphone-app/ui/modules/Linphone/History/Event.qml index 068bc0752..c0ce1d86a 100644 --- a/linphone-app/ui/modules/Linphone/History/Event.qml +++ b/linphone-app/ui/modules/Linphone/History/Event.qml @@ -2,7 +2,6 @@ import QtQuick 2.7 import Common 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import LinphoneEnums 1.0 import Linphone.Styles 1.0 import Utils 1.0 @@ -14,9 +13,10 @@ Row { id: mainItem signal entryClicked(var entry) - readonly property var _sipAddressObserver: SipAddressesModel.getSipAddressObserver($historyEntry.sipAddress, '') + property var _sipAddressObserver: SipAddressesModel.getSipAddressObserver($historyEntry.sipAddress, '') property QtObject iconData property string translation + Component.onDestruction: _sipAddressObserver=null// Need to set it to null because of not calling destructor if not. Component.onCompleted: { if ($historyEntry.status == LinphoneEnums.CallStatusSuccess) { if(!$historyEntry.isStart){ @@ -166,7 +166,7 @@ Row { pointSize: HistoryStyle.entry.event.text.pointSize } height: parent.height - text: UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) + text: _sipAddressObserver ? UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) : '' verticalAlignment: Text.AlignVCenter MouseArea{ anchors.fill:parent diff --git a/linphone-app/ui/modules/Linphone/History/History.js b/linphone-app/ui/modules/Linphone/History/History.js index 6cef48676..f9091ea97 100644 --- a/linphone-app/ui/modules/Linphone/History/History.js +++ b/linphone-app/ui/modules/Linphone/History/History.js @@ -25,8 +25,6 @@ .import Linphone 1.0 as Linphone -.import 'qrc:/ui/scripts/LinphoneUtils/linphone-utils.js' as LinphoneUtils - // ============================================================================= function initView () { diff --git a/linphone-app/ui/modules/Linphone/Menus/VideoConferenceMenu.qml b/linphone-app/ui/modules/Linphone/Menus/VideoConferenceMenu.qml index bcd2943b5..0a65b9425 100644 --- a/linphone-app/ui/modules/Linphone/Menus/VideoConferenceMenu.qml +++ b/linphone-app/ui/modules/Linphone/Menus/VideoConferenceMenu.qml @@ -7,7 +7,6 @@ import Common 1.0 import Common.Styles 1.0 import Linphone 1.0 import Linphone.Styles 1.0 -import LinphoneUtils 1.0 import LinphoneEnums 1.0 @@ -24,12 +23,26 @@ Rectangle{ property ParticipantModel me: conferenceModel.localParticipant property bool isMeAdmin: me && me.adminStatus onIsMeAdminChanged: console.log("Is admin : " +isMeAdmin) + property bool isParticipantsMenu: false signal close() height: 500 width: 400 color: "white" radius: VideoConferenceMenuStyle.radius + + // List of title texts in order to allow bindings between all components + property var menuTitles: [ + 'Régler les périphériques' + , 'Modifier la mise en page' + , mainItem.isMeAdmin ? 'Inviter des participants' : 'Participants' + ] + + function showParticipantsMenu(){ + contentsStack.push(participantsMenu, {title:Qt.binding(function() { return mainItem.menuTitles[2]})}) + visible = true + } + ButtonGroup{id: modeGroup} ColumnLayout{ anchors.fill: parent @@ -87,13 +100,7 @@ Rectangle{ Layout.fillHeight: true Layout.fillWidth: true -// List of title texts in order to allow bindings between all components - property var menuTitles: [ - 'Régler les périphériques' - , 'Modifier la mise en page' - , mainItem.isMeAdmin ? 'Inviter des participants' : 'Participants' - - ] + Repeater{ model: [ @@ -136,7 +143,7 @@ Rectangle{ wrapMode: Text.WordWrap elide: Text.ElideRight - text: menuTitles[modelData.titleIndex] + text: mainItem.menuTitles[modelData.titleIndex] font.pointSize: VideoConferenceMenuStyle.list.pointSize color: VideoConferenceMenuStyle.list.color } @@ -265,6 +272,8 @@ Rectangle{ Layout.fillWidth: true Layout.fillHeight: true } + Component.onCompleted: mainItem.isParticipantsMenu = true + Component.onDestruction: mainItem.isParticipantsMenu = false } } } diff --git a/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedCall.qml b/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedCall.qml index 33f47746f..e6d6c14c0 100644 --- a/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedCall.qml +++ b/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedCall.qml @@ -38,6 +38,7 @@ Notification { entry=SipAddressesModel.getSipAddressObserver(peerAddress, notification.call ? notification.call.fullLocalAddress : '') } entry: SipAddressesModel.getSipAddressObserver(peerAddress, notification.call ? notification.call.fullLocalAddress : '') + Component.onDestruction: entry=null// Need to set it to null because of not calling destructor if not. } // --------------------------------------------------------------------- diff --git a/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedMessage.qml b/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedMessage.qml index 1cf690606..49a2f7e6d 100644 --- a/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedMessage.qml +++ b/linphone-app/ui/modules/Linphone/Notifications/NotificationReceivedMessage.qml @@ -49,6 +49,7 @@ Notification { securityLevel: chatRoomModel.securityLevel, auxDataToShow: '- ' + chatRoomModel.subject+' -' }) + Component.onDestruction: sipObserver=null// Need to set it to null because of not calling destructor if not. } Rectangle { diff --git a/linphone-app/ui/modules/Linphone/Styles/Chat/ChatStyle.qml b/linphone-app/ui/modules/Linphone/Styles/Chat/ChatStyle.qml index 7d3920c09..88f96cf02 100644 --- a/linphone-app/ui/modules/Linphone/Styles/Chat/ChatStyle.qml +++ b/linphone-app/ui/modules/Linphone/Styles/Chat/ChatStyle.qml @@ -83,11 +83,6 @@ QtObject { property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+replyPreviewObject.name+'_'+name+'_f_p', icon, 'l_p_b_fg').color } } - property QtObject messageBanner: QtObject { - property color color: ColorsList.add(sectionName+'_message_banner', '', 'Background of message banner', '#9ecd1d').color - property color textColor: ColorsList.add(sectionName+'_message_banner_text', 'q', 'Text of message banner').color - property int pointSize: Units.dp * 9 - } property QtObject ephemeralTimer: QtObject{ property string icon: 'timer_custom' property int iconSize : 25 diff --git a/linphone-app/ui/modules/Linphone/View/ParticipantsListView.qml b/linphone-app/ui/modules/Linphone/View/ParticipantsListView.qml index ad21b310d..46d961471 100644 --- a/linphone-app/ui/modules/Linphone/View/ParticipantsListView.qml +++ b/linphone-app/ui/modules/Linphone/View/ParticipantsListView.qml @@ -3,7 +3,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Linphone 1.0 -//import LinphoneUtils 1.0 import LinphoneEnums 1.0 import App.Styles 1.0 @@ -29,7 +28,6 @@ ColumnLayout { onIsAdminChanged: console.log("participantsListView is admin : "+isAdmin) onCanHandleParticipantsChanged: console.log("CanHandleParticipants:"+canHandleParticipants) spacing: ParticipantsListViewStyle.mainLayout.spacing - Component.onCompleted: console.log("participantsListView : " +isAdmin +", "+canHandleParticipants +", " +chatRoomModel+", "+conferenceModel + ", "+conferenceModel.localParticipant +", " +conferenceModel.localParticipant.adminStatus) SmartSearchBar { id: smartSearchBar diff --git a/linphone-app/ui/scripts/LinphoneUtils/linphone-utils.js b/linphone-app/ui/scripts/LinphoneUtils/linphone-utils.js deleted file mode 100644 index 53f9e0761..000000000 --- a/linphone-app/ui/scripts/LinphoneUtils/linphone-utils.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2010-2020 Belledonne Communications SARL. - * - * This file is part of linphone-desktop - * (see https://www.linphone.org). - * - * 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 3 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, see . - */ -// ============================================================================= -// Contains linphone helpers. -// ============================================================================= - -.pragma library - -.import Linphone 1.0 as Linphone -.import UtilsCpp 1.0 as UtilsCpp - -.import 'qrc:/ui/scripts/Utils/utils.js' as Utils - -// ============================================================================= -// Contact/SIP address helpers. -// ============================================================================= - -function _getDisplayNameFromQuotedString (str) { - var start = str.indexOf('"') - if (start === -1) { - return - } - - var end = str.lastIndexOf('"') - if (end === -1 || start === end) { - return - } - - return str.substring(start + 1, end) -} - -function _getDisplayNameFromString (str) { - var end = str.indexOf('<') - if (end === -1) { - return - } - - return str.substring(0, end).trim() || undefined -} - -function _getDisplayName (str) { - var name = _getDisplayNameFromQuotedString(str) - if (name != null) { - return name - } - - return _getDisplayNameFromString(str) -} - -// ----------------------------------------------------------------------------- - -function _getUsername (str) { - var start = str.indexOf('sip') - if (start === -1) { - return - } - start += 4 + Number(str.charAt(start + 4) === ':') // Deal with `sip:` and `sips:` - - var end = str.indexOf('@', start + 1) - if (end === -1) { - return Utils.decode(str.substring(start)) - } - - return Utils.decode(str.substring(start, end)) -} - -// ============================================================================= -// Codec helpers. -// ============================================================================= - -function openCodecOnlineInstallerDialog (window, codecInfo, cb) { - var VideoCodecsModel = Linphone.VideoCodecsModel - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { - descriptionText: qsTr('downloadCodecDescription') - .replace('%1', codecInfo.mime) - .replace('%2', codecInfo.encoderDescription) - }, function (status) { - if (status) { - window.attachVirtualWindow(buildDialogUri('OnlineInstallerDialog'), { - downloadUrl: codecInfo.downloadUrl, - extract: true, - installFolder: VideoCodecsModel.codecsFolder, - installName: codecInfo.installName, - mime: codecInfo.mime - }, function (status) { - if (status) { - VideoCodecsModel.reload() - } - if (cb) { - cb(window) - } - }) - } - else if (cb) { - cb(window) - } - }) -} - -// ============================================================================= -// QML helpers. -// ============================================================================= - -function buildDialogUri (component) { - return 'qrc:/ui/modules/Linphone/Dialog/' + component + '.qml' -} diff --git a/linphone-app/ui/scripts/LinphoneUtils/qmldir b/linphone-app/ui/scripts/LinphoneUtils/qmldir deleted file mode 100644 index ba14911ac..000000000 --- a/linphone-app/ui/scripts/LinphoneUtils/qmldir +++ /dev/null @@ -1,3 +0,0 @@ -module LinphoneUtils - -LinphoneUtils 1.0 linphone-utils.js diff --git a/linphone-app/ui/scripts/Utils/utils.js b/linphone-app/ui/scripts/Utils/utils.js index b404688cb..950fd6268 100644 --- a/linphone-app/ui/scripts/Utils/utils.js +++ b/linphone-app/ui/scripts/Utils/utils.js @@ -41,10 +41,18 @@ var SCHEME_REGEX = new RegExp('^[^:]+:') // QML helpers. // ============================================================================= -function buildDialogUri (component) { +function buildCommonDialogUri (component) { return 'qrc:/ui/modules/Common/Dialog/' + component + '.qml' } +function buildLinphoneDialogUri (component) { + return 'qrc:/ui/modules/Linphone/Dialog/' + component + '.qml' +} + +function buildAppDialogUri (component) { + return 'qrc:/ui/views/App/Dialog/' + component + '.qml' +} + // ----------------------------------------------------------------------------- // Destroy timeout. @@ -708,4 +716,35 @@ function computeAvatarSize (container, maxSize) { var size = height < maxSize && height > 0 ? height : maxSize return size < width ? size : width +} + +// ----------------------------------------------------------------------------- + +function openCodecOnlineInstallerDialog (window, codecInfo, cb) { + var VideoCodecsModel = Linphone.VideoCodecsModel + window.attachVirtualWindow(buildLinphoneDialogUri('ConfirmDialog'), { + descriptionText: qsTr('downloadCodecDescription') + .replace('%1', codecInfo.mime) + .replace('%2', codecInfo.encoderDescription) + }, function (status) { + if (status) { + window.attachVirtualWindow(buildCommonDialogUri('OnlineInstallerDialog'), { + downloadUrl: codecInfo.downloadUrl, + extract: true, + installFolder: VideoCodecsModel.codecsFolder, + installName: codecInfo.installName, + mime: codecInfo.mime + }, function (status) { + if (status) { + VideoCodecsModel.reload() + } + if (cb) { + cb(window) + } + }) + } + else if (cb) { + cb(window) + } + }) } \ No newline at end of file diff --git a/linphone-app/ui/views/App/Calls/AbstractStartingCall.qml b/linphone-app/ui/views/App/Calls/AbstractStartingCall.qml index ffec46621..144998bf7 100644 --- a/linphone-app/ui/views/App/Calls/AbstractStartingCall.qml +++ b/linphone-app/ui/views/App/Calls/AbstractStartingCall.qml @@ -3,7 +3,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import UtilsCpp 1.0 @@ -18,6 +17,7 @@ Rectangle { property var _sipAddressObserver: SipAddressesModel.getSipAddressObserver(call.fullPeerAddress, call.fullLocalAddress) property alias showKeypad :telKeypadButton.visible + Component.onDestruction: _sipAddressObserver=null// Need to set it to null because of not calling destructor if not. // --------------------------------------------------------------------------- color: CallStyle.backgroundColor @@ -44,7 +44,7 @@ Rectangle { height: CallStyle.header.contactDescription.height horizontalTextAlignment: Text.AlignHCenter sipAddress: call.peerAddress - username: UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) + username: _sipAddressObserver ? UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) : '' width: contentWidth } @@ -84,7 +84,7 @@ Rectangle { anchors.centerIn: parent backgroundColor: CallStyle.container.avatar.backgroundColor - image: _sipAddressObserver.contact && _sipAddressObserver.contact.vcard.avatar + image: _sipAddressObserver && _sipAddressObserver.contact && _sipAddressObserver.contact.vcard.avatar username: contactDescription.username height: _computeAvatarSize() diff --git a/linphone-app/ui/views/App/Calls/CallsWindow.js b/linphone-app/ui/views/App/Calls/CallsWindow.js index 65149e661..27955d7f0 100644 --- a/linphone-app/ui/views/App/Calls/CallsWindow.js +++ b/linphone-app/ui/views/App/Calls/CallsWindow.js @@ -36,7 +36,7 @@ function handleClosing (close) { return } - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('acceptClosingDescription') }, function (status) { if (status) { diff --git a/linphone-app/ui/views/App/Calls/Conference.qml b/linphone-app/ui/views/App/Calls/Conference.qml index 395af575a..5de957605 100644 --- a/linphone-app/ui/views/App/Calls/Conference.qml +++ b/linphone-app/ui/views/App/Calls/Conference.qml @@ -4,7 +4,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Common.Styles 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import UtilsCpp 1.0 @@ -130,6 +129,7 @@ Rectangle { spacing: ConferenceStyle.grid.cell.spacing + Component.onDestruction: _sipAddressObserver=null// Need to set it to null because of not calling destructor if not. ContactDescription { id: contactDescription @@ -138,7 +138,7 @@ Rectangle { horizontalTextAlignment: Text.AlignHCenter sipAddress: parent.sipAddress - username: UtilsCpp.getDisplayName(parent._sipAddressObserver.peerAddress) + username: parent._sipAddressObserver ? UtilsCpp.getDisplayName(parent._sipAddressObserver.peerAddress) : '' } IncallAvatar { diff --git a/linphone-app/ui/views/App/Calls/Dialogs/CallTransfer.qml b/linphone-app/ui/views/App/Calls/Dialogs/CallTransfer.qml index 83d89a6ff..0154f1c88 100644 --- a/linphone-app/ui/views/App/Calls/Dialogs/CallTransfer.qml +++ b/linphone-app/ui/views/App/Calls/Dialogs/CallTransfer.qml @@ -48,6 +48,7 @@ DialogPlus { Layout.fillWidth: true entry: SipAddressesModel.getSipAddressObserver(call ? call.fullPeerAddress : '', call ? call.fullLocalAddress : '') + Component.onDestruction: entry=null// Need to set it to null because of not calling destructor if not. } // ------------------------------------------------------------------------- diff --git a/linphone-app/ui/views/App/Calls/EndedCall.qml b/linphone-app/ui/views/App/Calls/EndedCall.qml index 46070aab0..7a557ae04 100644 --- a/linphone-app/ui/views/App/Calls/EndedCall.qml +++ b/linphone-app/ui/views/App/Calls/EndedCall.qml @@ -2,7 +2,6 @@ import QtQuick 2.7 import QtQuick.Layouts 1.3 import Linphone 1.0 -import LinphoneUtils 1.0 import Utils 1.0 import UtilsCpp 1.0 @@ -20,6 +19,8 @@ Rectangle { property var _sipAddressObserver: SipAddressesModel.getSipAddressObserver(call ? call.fullPeerAddress : '', call ? call.fullLocalAddress : '') + + Component.onDestruction: _sipAddressObserver=null// Need to set it to null because of not calling destructor if not. // --------------------------------------------------------------------------- color: CallStyle.backgroundColor @@ -39,8 +40,8 @@ Rectangle { Layout.preferredHeight: CallStyle.header.contactDescription.height horizontalTextAlignment: Text.AlignHCenter - sipAddress: _sipAddressObserver.peerAddress - username: UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) + sipAddress: _sipAddressObserver && _sipAddressObserver.peerAddress + username: _sipAddressObserver ? UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) : '' } Text { @@ -66,7 +67,7 @@ Rectangle { Avatar { anchors.centerIn: parent backgroundColor: CallStyle.container.avatar.backgroundColor - image: _sipAddressObserver.contact && _sipAddressObserver.contact.vcard.avatar + image: _sipAddressObserver && _sipAddressObserver.contact && _sipAddressObserver.contact.vcard.avatar username: contactDescription.username height: Utils.computeAvatarSize(container, CallStyle.container.avatar.maxSize) diff --git a/linphone-app/ui/views/App/Calls/Incall.js b/linphone-app/ui/views/App/Calls/Incall.js index 29143ea97..eb51323b6 100644 --- a/linphone-app/ui/views/App/Calls/Incall.js +++ b/linphone-app/ui/views/App/Calls/Incall.js @@ -90,7 +90,7 @@ function handleVideoRequested (call) { call.statusChanged.connect(endedHandler) console.log("D") // Ask video to user. - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('acceptVideoDescription'), }, function (status) { //Utils.clearTimeout(timeout) diff --git a/linphone-app/ui/views/App/Calls/Incall.qml b/linphone-app/ui/views/App/Calls/Incall.qml index 5e1838dcf..82dd20d33 100644 --- a/linphone-app/ui/views/App/Calls/Incall.qml +++ b/linphone-app/ui/views/App/Calls/Incall.qml @@ -5,7 +5,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Common.Styles 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import Utils 1.0 import UtilsCpp 1.0 @@ -34,6 +33,8 @@ Rectangle { property bool isFullScreen: false // Use this variable to test if we are in fullscreen. Do not test _fullscreen : we need to clean memory before having the window (see .js file) property var _fullscreen: null on_FullscreenChanged: if( !_fullscreen) isFullScreen = false + + Component.onDestruction: _sipAddressObserver=null// Need to set it to null because of not calling destructor if not. // --------------------------------------------------------------------------- color: CallStyle.backgroundColor @@ -143,7 +144,7 @@ Rectangle { anchors.centerIn: parent horizontalTextAlignment: Text.AlignHCenter - sipAddress: _sipAddressObserver.peerAddress + sipAddress: _sipAddressObserver && _sipAddressObserver.peerAddress username: UtilsCpp.getDisplayName(sipAddress) height: parent.height diff --git a/linphone-app/ui/views/App/Calls/IncallFullscreenWindow.qml b/linphone-app/ui/views/App/Calls/IncallFullscreenWindow.qml index 5d7fbc113..be0c35342 100644 --- a/linphone-app/ui/views/App/Calls/IncallFullscreenWindow.qml +++ b/linphone-app/ui/views/App/Calls/IncallFullscreenWindow.qml @@ -7,7 +7,6 @@ import Common 1.0 import Common.Styles 1.0 import DesktopTools 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import Utils 1.0 import App.Styles 1.0 diff --git a/linphone-app/ui/views/App/Calls/VideoConference.qml b/linphone-app/ui/views/App/Calls/VideoConference.qml index eef287da9..b01a46b0c 100644 --- a/linphone-app/ui/views/App/Calls/VideoConference.qml +++ b/linphone-app/ui/views/App/Calls/VideoConference.qml @@ -6,7 +6,6 @@ import QtGraphicalEffects 1.12 import Common 1.0 import Common.Styles 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import LinphoneEnums 1.0 import UtilsCpp 1.0 @@ -376,7 +375,13 @@ Rectangle { isCustom: true backgroundRadius: width/2 colorSet: VideoConferenceStyle.buttons.participants - visible: false // TODO + toggled: rightMenu.visible && rightMenu.isParticipantsMenu + onClicked: { + if(toggled) + rightMenu.visible = false + else + rightMenu.showParticipantsMenu() + } } ActionButton { id: callQuality diff --git a/linphone-app/ui/views/App/Calls/VideoConferenceActiveSpeaker.qml b/linphone-app/ui/views/App/Calls/VideoConferenceActiveSpeaker.qml index 06a119070..65057e9eb 100644 --- a/linphone-app/ui/views/App/Calls/VideoConferenceActiveSpeaker.qml +++ b/linphone-app/ui/views/App/Calls/VideoConferenceActiveSpeaker.qml @@ -6,7 +6,6 @@ import QtGraphicalEffects 1.12 import Common 1.0 import Common.Styles 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import UtilsCpp 1.0 diff --git a/linphone-app/ui/views/App/Calls/VideoConferenceFullscreen.qml b/linphone-app/ui/views/App/Calls/VideoConferenceFullscreen.qml index c47226601..f7df327c2 100644 --- a/linphone-app/ui/views/App/Calls/VideoConferenceFullscreen.qml +++ b/linphone-app/ui/views/App/Calls/VideoConferenceFullscreen.qml @@ -6,7 +6,6 @@ import QtGraphicalEffects 1.12 import Common 1.0 import Common.Styles 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import DesktopTools 1.0 import LinphoneEnums 1.0 diff --git a/linphone-app/ui/views/App/Calls/VideoConferenceGrid.qml b/linphone-app/ui/views/App/Calls/VideoConferenceGrid.qml index 4df23eafb..34bc7fee8 100644 --- a/linphone-app/ui/views/App/Calls/VideoConferenceGrid.qml +++ b/linphone-app/ui/views/App/Calls/VideoConferenceGrid.qml @@ -6,7 +6,6 @@ import QtGraphicalEffects 1.12 import Common 1.0 import Common.Styles 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 import UtilsCpp 1.0 diff --git a/linphone-app/ui/views/App/Main/Dialogs/NewConference.qml b/linphone-app/ui/views/App/Dialog/NewConference.qml similarity index 99% rename from linphone-app/ui/views/App/Main/Dialogs/NewConference.qml rename to linphone-app/ui/views/App/Dialog/NewConference.qml index 9262736df..855113974 100644 --- a/linphone-app/ui/views/App/Main/Dialogs/NewConference.qml +++ b/linphone-app/ui/views/App/Dialog/NewConference.qml @@ -4,7 +4,6 @@ import QtQuick.Controls 2.3 import Common 1.0 import Linphone 1.0 -//import LinphoneUtils 1.0 import LinphoneEnums 1.0 import App.Styles 1.0 @@ -21,6 +20,7 @@ DialogPlus { property ConferenceInfoModel conferenceInfoModel: ConferenceInfoModel{ property bool isNew: true } + onConferenceInfoModelChanged: if( conferenceInfoModel && !conferenceInfoModel.isNew) selectedParticipants.setAddresses(conferenceInfoModel) Connections{ target: conferenceInfoModel onConferenceCreated: { @@ -484,7 +484,7 @@ DialogPlus { anchors.fill: parent showContactAddress:false - showSwitch : true + showSwitch : conferenceInfoModel.isNew showSeparator: false isSelectable: false showInvitingIndicator: false @@ -512,7 +512,6 @@ DialogPlus { model: ParticipantProxyModel { id:selectedParticipants chatRoomModel:null - } onEntryClicked: actions[0].handler(entry) } diff --git a/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithEmail.qml b/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithEmail.qml index 07ba515cb..5adb3aed6 100644 --- a/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithEmail.qml +++ b/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithEmail.qml @@ -2,7 +2,7 @@ import QtQuick 2.7 import Common 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 +import Utils 1.0 import App.Styles 1.0 @@ -57,7 +57,7 @@ AssistantAbstractView { } var codecInfo = VideoCodecsModel.getCodecInfo('H264') if (codecInfo.downloadUrl) { - LinphoneUtils.openCodecOnlineInstallerDialog(window, codecInfo, quitToHome) + Utils.openCodecOnlineInstallerDialog(window, codecInfo, quitToHome) } else { quitToHome(window) } diff --git a/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml b/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml index 6a55d26b8..e6a7816b2 100644 --- a/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml +++ b/linphone-app/ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml @@ -2,7 +2,7 @@ import QtQuick 2.7 import Common 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 +import Utils 1.0 import App.Styles 1.0 @@ -69,7 +69,7 @@ AssistantAbstractView { } var codecInfo = VideoCodecsModel.getCodecInfo('H264') if (codecInfo.downloadUrl) { - LinphoneUtils.openCodecOnlineInstallerDialog(window, codecInfo, quitToHome) + Utils.openCodecOnlineInstallerDialog(window, codecInfo, quitToHome) } else { quitToHome(window) } diff --git a/linphone-app/ui/views/App/Main/Assistant/FetchRemoteConfiguration.qml b/linphone-app/ui/views/App/Main/Assistant/FetchRemoteConfiguration.qml index 835b39ddb..da3e97aab 100644 --- a/linphone-app/ui/views/App/Main/Assistant/FetchRemoteConfiguration.qml +++ b/linphone-app/ui/views/App/Main/Assistant/FetchRemoteConfiguration.qml @@ -25,7 +25,7 @@ Item{ onRemoteProvisioningChanged: { requestBlock.stop('') window.detachVirtualWindow() - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('remoteProvisioningUpdateDescription'), }, function (status) { if (status) { diff --git a/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccount.qml b/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccount.qml index 1006a94b8..c75b2695a 100644 --- a/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccount.qml +++ b/linphone-app/ui/views/App/Main/Assistant/UseAppSipAccount.qml @@ -2,7 +2,7 @@ import QtQuick 2.7 import Common 1.0 import Linphone 1.0 -import LinphoneUtils 1.0 +import Utils 1.0 import ConstantsCpp 1.0 import App.Styles 1.0 @@ -112,7 +112,7 @@ AssistantAbstractView { if (!error.length) { var codecInfo = VideoCodecsModel.getCodecInfo('H264') if (codecInfo.downloadUrl) { - LinphoneUtils.openCodecOnlineInstallerDialog(window, codecInfo, function cb (window) { + Utils.openCodecOnlineInstallerDialog(window, codecInfo, function cb (window) { window.setView('Home') }) } else { diff --git a/linphone-app/ui/views/App/Main/Conferences.qml b/linphone-app/ui/views/App/Main/Conferences.qml index 58b2303d3..9567d90e5 100644 --- a/linphone-app/ui/views/App/Main/Conferences.qml +++ b/linphone-app/ui/views/App/Main/Conferences.qml @@ -10,190 +10,204 @@ import LinphoneEnums 1.0 import App.Styles 1.0 // ============================================================================= +Item{ -ColumnLayout { - id: mainItem - property int filterType: -1 - spacing: 0 - Component.onCompleted: filterType = ConferenceInfoProxyModel.Scheduled - // --------------------------------------------------------------------------- - // Title - // --------------------------------------------------------------------------- - - Rectangle { - Layout.fillWidth: true - Layout.preferredHeight: ConferencesStyle.bar.height + ColumnLayout { + id: mainItem + property int filterType: -1 + spacing: 0 + Component.onCompleted: filterType = ConferenceInfoProxyModel.Scheduled + anchors.fill: parent + // --------------------------------------------------------------------------- + // Title + // --------------------------------------------------------------------------- - color: ConferencesStyle.bar.backgroundColor - Text{ - anchors.fill: parent - verticalAlignment: Qt.AlignVCenter + Rectangle { + Layout.fillWidth: true + Layout.preferredHeight: ConferencesStyle.bar.height - anchors.leftMargin: 40 - - color: ConferencesStyle.bar.text.color - font { - bold: true - pointSize: ConferencesStyle.bar.text.pointSize + color: ConferencesStyle.bar.backgroundColor + Text{ + anchors.fill: parent + verticalAlignment: Qt.AlignVCenter + + anchors.leftMargin: 40 + + color: ConferencesStyle.bar.text.color + font { + bold: true + pointSize: ConferencesStyle.bar.text.pointSize + } + + text: 'Mes conférences' } - - text: 'Mes conférences' } - } - Rectangle { - Layout.fillWidth: true - Layout.preferredHeight: ConferencesStyle.bar.height - - color: 'white' - - RowLayout { - anchors { - fill: parent - leftMargin: ConferencesStyle.bar.leftMargin - rightMargin: ConferencesStyle.bar.rightMargin - } - spacing: ConferencesStyle.spacing + Rectangle { + Layout.fillWidth: true + Layout.preferredHeight: ConferencesStyle.bar.height - ExclusiveButtons { - texts: [ - 'TERMINEES', - 'PROGRAMMEES', - 'INVITATIONS', - 'TEST' - ] - selectedButton: mainItem.filterType - onClicked: { - if(button <= 2) - mainItem.filterType = (button === 0 ? ConferenceInfoProxyModel.Ended : button === 1 ?ConferenceInfoProxyModel.Scheduled : ConferenceInfoProxyModel.Invitations); - else { - window.detachVirtualWindow() - window.attachVirtualWindow(Qt.resolvedUrl('../Calls/VideoConferenceMenu.qml')) + color: 'white' + + RowLayout { + anchors { + fill: parent + leftMargin: ConferencesStyle.bar.leftMargin + rightMargin: ConferencesStyle.bar.rightMargin + } + spacing: ConferencesStyle.spacing + + ExclusiveButtons { + texts: [ + 'TERMINEES', + 'PROGRAMMEES', + 'INVITATIONS', + 'TEST' + ] + selectedButton: mainItem.filterType + onClicked: { + if(button <= 2) + mainItem.filterType = (button === 0 ? ConferenceInfoProxyModel.Ended : button === 1 ?ConferenceInfoProxyModel.Scheduled : ConferenceInfoProxyModel.Invitations); + else { + window.detachVirtualWindow() + window.attachVirtualWindow(Qt.resolvedUrl('../Calls/VideoConferenceMenu.qml')) + } + + //mainItem.filterType = button } - - //mainItem.filterType = button } } } - } - - // --------------------------------------------------------------------------- - // Conferences list. - // --------------------------------------------------------------------------- - - Rectangle { - Layout.fillWidth: true - Layout.fillHeight: true - color: ConferencesStyle.backgroundColor - ScrollableListView { - anchors.fill: parent - spacing: 10 + // --------------------------------------------------------------------------- + // Conferences list. + // --------------------------------------------------------------------------- + + Rectangle { + Layout.fillWidth: true + Layout.fillHeight: true + color: ConferencesStyle.backgroundColor - highlightFollowsCurrentItem: false - - section { - criteria: ViewSection.FullString - delegate: sectionHeading - property: '$modelKey' - } - - model: ConferenceInfoProxyModel{ - id: conferencesProxyModel - filterType: mainItem.filterType - } - - // ----------------------------------------------------------------------- - // Heading. - // ----------------------------------------------------------------------- - - Component { - id: sectionHeading + ScrollableListView { + anchors.fill: parent + spacing: 10 - Item { - implicitHeight: container.height + ConferencesStyle.sectionHeading.bottomMargin - width: parent.width + highlightFollowsCurrentItem: false + + section { + criteria: ViewSection.FullString + delegate: sectionHeading + property: '$modelKey' + } + + model: ConferenceInfoProxyModel{ + id: conferencesProxyModel + filterType: mainItem.filterType + } + + // ----------------------------------------------------------------------- + // Heading. + // ----------------------------------------------------------------------- + + Component { + id: sectionHeading - Borders { - id: container - - borderColor: ConferencesStyle.sectionHeading.border.color - bottomWidth: ConferencesStyle.sectionHeading.border.width - implicitHeight: text.contentHeight + - ConferencesStyle.sectionHeading.padding * 2 + - ConferencesStyle.sectionHeading.border.width * 2 - topWidth: ConferencesStyle.sectionHeading.border.width + Item { + implicitHeight: container.height + ConferencesStyle.sectionHeading.bottomMargin width: parent.width - Text { - id: text + Borders { + id: container - anchors.fill: parent - color: ConferencesStyle.sectionHeading.text.color - font { - bold: true - pointSize: ConferencesStyle.sectionHeading.text.pointSize - } - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - - // Cast section to integer because Qt converts the - // sectionDate in string!!! - text: new Date(section).toLocaleDateString( - Qt.locale(App.locale) - ) - } - } - } - } - - //---------------------------------------------------------------------------------------------- - //---------------------------------------------------------------------------------------------- - //---------------------------------------------------------------------------------------------- - - delegate: Item { - implicitHeight: calendarGrid.height + ConferencesStyle.conference.bottomMargin - anchors { - left: parent ? parent.left : undefined - leftMargin: 10 - right: parent ? parent.right : undefined - rightMargin: 10 - } - GridView{ - id: calendarGrid - property bool expanded : false //anchors.fill: parent - cellWidth: width/2 - cellHeight: expanded ? 300 : 100 - model: $modelData - height: cellHeight * ( (count+1) /2) - width: mainItem.width - 20 - delegate:Rectangle { - id: entry - - width: calendarGrid.cellWidth-10 - height: calendarGrid.cellHeight-10 - radius: 6 - color: mainItem.filterType == ConferenceInfoProxyModel.Ended ? ConferencesStyle.conference.backgroundColor.ended - : ConferencesStyle.conference.backgroundColor.scheduled - border.color: calendarMessage.containsMouse || calendarMessage.isExpanded ? ConferencesStyle.conference.selectedBorder.color : 'transparent' - border.width: ConferencesStyle.conference.selectedBorder.width - ChatCalendarMessage{ - id: calendarMessage - anchors.centerIn: parent + borderColor: ConferencesStyle.sectionHeading.border.color + bottomWidth: ConferencesStyle.sectionHeading.border.width + implicitHeight: text.contentHeight + + ConferencesStyle.sectionHeading.padding * 2 + + ConferencesStyle.sectionHeading.border.width * 2 + topWidth: ConferencesStyle.sectionHeading.border.width width: parent.width - height: parent.height - conferenceInfoModel: $modelData - //width: calendarGrid.cellWidth - //maxWidth: calendarGrid.cellWidth - gotoButtonMode: mainItem.filterType == ConferenceInfoProxyModel.Scheduled ? 1 - : mainItem.filterType == ConferenceInfoProxyModel.Ended ? -1 - : 0 - onExpandToggle: calendarGrid.expanded = !calendarGrid.expanded - isExpanded: calendarGrid.expanded + + Text { + id: text + + anchors.fill: parent + color: ConferencesStyle.sectionHeading.text.color + font { + bold: true + pointSize: ConferencesStyle.sectionHeading.text.pointSize + } + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + // Cast section to integer because Qt converts the + // sectionDate in string!!! + text: new Date(section).toLocaleDateString( + Qt.locale(App.locale) + ) + } } } } + + //---------------------------------------------------------------------------------------------- + //---------------------------------------------------------------------------------------------- + //---------------------------------------------------------------------------------------------- + + delegate: Item { + implicitHeight: calendarGrid.height + ConferencesStyle.conference.bottomMargin + anchors { + left: parent ? parent.left : undefined + leftMargin: 10 + right: parent ? parent.right : undefined + rightMargin: 10 + } + GridView{ + id: calendarGrid + property bool expanded : false //anchors.fill: parent + cellWidth: width/2 + cellHeight: expanded ? 300 : 100 + model: $modelData + height: cellHeight * ( (count+1) /2) + width: mainItem.width - 20 + delegate:Rectangle { + id: entry + + width: calendarGrid.cellWidth-10 + height: calendarGrid.cellHeight-10 + radius: 6 + color: mainItem.filterType == ConferenceInfoProxyModel.Ended ? ConferencesStyle.conference.backgroundColor.ended + : ConferencesStyle.conference.backgroundColor.scheduled + border.color: calendarMessage.containsMouse || calendarMessage.isExpanded ? ConferencesStyle.conference.selectedBorder.color : 'transparent' + border.width: ConferencesStyle.conference.selectedBorder.width + ChatCalendarMessage{ + id: calendarMessage + anchors.centerIn: parent + width: parent.width + height: parent.height + conferenceInfoModel: $modelData + //width: calendarGrid.cellWidth + //maxWidth: calendarGrid.cellWidth + gotoButtonMode: mainItem.filterType == ConferenceInfoProxyModel.Scheduled ? 1 + : mainItem.filterType == ConferenceInfoProxyModel.Ended ? -1 + : 0 + onExpandToggle: calendarGrid.expanded = !calendarGrid.expanded + isExpanded: calendarGrid.expanded + onConferenceUriCopied: messageBanner.noticeBannerText = 'Conference URL has been copied' + } + } + } + } + } - } } + MessageBanner{ + id: messageBanner + + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: 25 + + height: fitHeight + } } diff --git a/linphone-app/ui/views/App/Main/ContactEdit.js b/linphone-app/ui/views/App/Main/ContactEdit.js index 9da0f7c3f..a863b8d37 100644 --- a/linphone-app/ui/views/App/Main/ContactEdit.js +++ b/linphone-app/ui/views/App/Main/ContactEdit.js @@ -25,7 +25,6 @@ .import UtilsCpp 1.0 as UtilsCpp .import 'qrc:/ui/scripts/Utils/utils.js' as Utils -.import 'qrc:/ui/scripts/LinphoneUtils/linphone-utils.js' as LinphoneUtils // ============================================================================= @@ -74,7 +73,7 @@ function editContact () { } function removeContact () { - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('removeContactDescription'), }, function (status) { if (status) { diff --git a/linphone-app/ui/views/App/Main/ContactEdit.qml b/linphone-app/ui/views/App/Main/ContactEdit.qml index 60b7c9aeb..d42dbed29 100644 --- a/linphone-app/ui/views/App/Main/ContactEdit.qml +++ b/linphone-app/ui/views/App/Main/ContactEdit.qml @@ -27,10 +27,12 @@ ColumnLayout { property var _contact property var _vcard + + // --------------------------------------------------------------------------- spacing: 0 - + Component.onDestruction: {_vcard=null}// Need to set it to null because of not calling destructor if not. Component.onCompleted:{ var sipAddress = contactEdit.sipAddress var contact = contactEdit._contact = SipAddressesModel.mapSipAddressToContact( diff --git a/linphone-app/ui/views/App/Main/Contacts.qml b/linphone-app/ui/views/App/Main/Contacts.qml index 313913666..21f8bfe05 100644 --- a/linphone-app/ui/views/App/Main/Contacts.qml +++ b/linphone-app/ui/views/App/Main/Contacts.qml @@ -13,7 +13,7 @@ import App.Styles 1.0 ColumnLayout { function _removeContact (contact) { - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('removeContactDescription'), }, function (status) { if (status) { diff --git a/linphone-app/ui/views/App/Main/Conversation.js b/linphone-app/ui/views/App/Main/Conversation.js index 2c75a9aca..26e367750 100644 --- a/linphone-app/ui/views/App/Main/Conversation.js +++ b/linphone-app/ui/views/App/Main/Conversation.js @@ -24,13 +24,12 @@ .import Linphone 1.0 as Linphone .import UtilsCpp 1.0 as UtilsCpp -.import 'qrc:/ui/scripts/LinphoneUtils/linphone-utils.js' as LinphoneUtils .import 'qrc:/ui/scripts/Utils/utils.js' as Utils // ============================================================================= function removeAllEntries () { - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('removeAllEntriesDescription'), }, function (status) { if (status) { @@ -40,12 +39,12 @@ function removeAllEntries () { } function getAvatar () { - var contact = conversation._sipAddressObserver.contact + var contact = conversation._sipAddressObserver ? conversation._sipAddressObserver.contact : null return contact ? contact.vcard.avatar : '' } function getEditTooltipText() { - return conversation._sipAddressObserver.contact ? qsTr('tooltipContactEdit') : qsTr('tooltipContactAdd') + return conversation._sipAddressObserver && conversation._sipAddressObserver.contact ? qsTr('tooltipContactEdit') : qsTr('tooltipContactAdd') } function updateChatFilter (button) { diff --git a/linphone-app/ui/views/App/Main/Conversation.qml b/linphone-app/ui/views/App/Main/Conversation.qml index 81423dd6e..f6d971ce7 100644 --- a/linphone-app/ui/views/App/Main/Conversation.qml +++ b/linphone-app/ui/views/App/Main/Conversation.qml @@ -36,7 +36,7 @@ ColumnLayout { property int securityLevel : chatRoomModel ? chatRoomModel.securityLevel : 1 - readonly property var _sipAddressObserver: SipAddressesModel.getSipAddressObserver((fullPeerAddress?fullPeerAddress:peerAddress), (fullLocalAddress?fullLocalAddress:localAddress)) + property var _sipAddressObserver: SipAddressesModel.getSipAddressObserver((fullPeerAddress?fullPeerAddress:peerAddress), (fullLocalAddress?fullLocalAddress:localAddress)) property bool haveMoreThanOneParticipants: chatRoomModel ? chatRoomModel.participants.count > 2 : false property bool haveLessThanMinParticipantsForCall: chatRoomModel ? chatRoomModel.participants.count <= 5 : false @@ -57,6 +57,7 @@ ColumnLayout { spacing: 0 clip:false + Component.onDestruction: _sipAddressObserver=null// Need to set it to null because of not calling destructor if not. // --------------------------------------------------------------------------- // Contact bar. // --------------------------------------------------------------------------- @@ -88,7 +89,7 @@ ColumnLayout { presenceLevel: chatRoomModel.presenceStatus //username: Logic.getUsername() - username: chatRoomModel?chatRoomModel.username:UtilsCpp.getDisplayName(conversation._sipAddressObserver.peerAddress) + username: chatRoomModel?chatRoomModel.username:( conversation._sipAddressObserver ? UtilsCpp.getDisplayName(conversation._sipAddressObserver.peerAddress) : '') visible: !groupChat.visible } @@ -308,7 +309,7 @@ ColumnLayout { ActionButton { isCustom: true backgroundRadius: 4 - colorSet: conversation._sipAddressObserver.contact ? ConversationStyle.bar.actions.edit.viewContact : ConversationStyle.bar.actions.edit.addContact + colorSet: conversation._sipAddressObserver && conversation._sipAddressObserver.contact ? ConversationStyle.bar.actions.edit.viewContact : ConversationStyle.bar.actions.edit.addContact visible: SettingsModel.contactsEnabled && !conversation.chatRoomModel.groupEnabled onClicked: window.setView('ContactEdit', { diff --git a/linphone-app/ui/views/App/Main/Dialogs/EphemeralChatRoom.qml b/linphone-app/ui/views/App/Main/Dialogs/EphemeralChatRoom.qml index 010e88591..bd20a6f17 100644 --- a/linphone-app/ui/views/App/Main/Dialogs/EphemeralChatRoom.qml +++ b/linphone-app/ui/views/App/Main/Dialogs/EphemeralChatRoom.qml @@ -3,7 +3,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Linphone 1.0 -//import LinphoneUtils 1.0 import LinphoneEnums 1.0 import App.Styles 1.0 diff --git a/linphone-app/ui/views/App/Main/Dialogs/InfoChatRoom.qml b/linphone-app/ui/views/App/Main/Dialogs/InfoChatRoom.qml index bdb0ded52..18741108d 100644 --- a/linphone-app/ui/views/App/Main/Dialogs/InfoChatRoom.qml +++ b/linphone-app/ui/views/App/Main/Dialogs/InfoChatRoom.qml @@ -3,7 +3,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Linphone 1.0 -//import LinphoneUtils 1.0 import LinphoneEnums 1.0 import App.Styles 1.0 diff --git a/linphone-app/ui/views/App/Main/Dialogs/InfoEncryption.qml b/linphone-app/ui/views/App/Main/Dialogs/InfoEncryption.qml index a6730cab5..295c7641d 100644 --- a/linphone-app/ui/views/App/Main/Dialogs/InfoEncryption.qml +++ b/linphone-app/ui/views/App/Main/Dialogs/InfoEncryption.qml @@ -3,7 +3,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Linphone 1.0 -//import LinphoneUtils 1.0 import LinphoneEnums 1.0 import App.Styles 1.0 diff --git a/linphone-app/ui/views/App/Main/Dialogs/NewChatRoom.qml b/linphone-app/ui/views/App/Main/Dialogs/NewChatRoom.qml index d706fda24..4e21b5b28 100644 --- a/linphone-app/ui/views/App/Main/Dialogs/NewChatRoom.qml +++ b/linphone-app/ui/views/App/Main/Dialogs/NewChatRoom.qml @@ -3,7 +3,6 @@ import QtQuick.Layouts 1.3 import Common 1.0 import Linphone 1.0 -//import LinphoneUtils 1.0 import LinphoneEnums 1.0 import App.Styles 1.0 diff --git a/linphone-app/ui/views/App/Main/Dialogs/ParticipantsDevices.qml b/linphone-app/ui/views/App/Main/Dialogs/ParticipantsDevices.qml index 35a416d06..7d37f28a7 100644 --- a/linphone-app/ui/views/App/Main/Dialogs/ParticipantsDevices.qml +++ b/linphone-app/ui/views/App/Main/Dialogs/ParticipantsDevices.qml @@ -5,7 +5,6 @@ import Common 1.0 import Linphone 1.0 import Utils 1.0 import UtilsCpp 1.0 -import LinphoneUtils 1.0 import LinphoneEnums 1.0 import App.Styles 1.0 @@ -149,6 +148,7 @@ DialogPlus { interactive: false model: $modelData.getProxyDevices() + Component.onDestruction: {model=null}// Need to set it to null because of not calling destructor if not. delegate: Rectangle{ id:mainRectangle diff --git a/linphone-app/ui/views/App/Main/HistoryView.js b/linphone-app/ui/views/App/Main/HistoryView.js index cdf9caa94..e3b0ce3b8 100644 --- a/linphone-app/ui/views/App/Main/HistoryView.js +++ b/linphone-app/ui/views/App/Main/HistoryView.js @@ -24,13 +24,12 @@ .import Linphone 1.0 as Linphone .import UtilsCpp 1.0 as UtilsCpp -.import 'qrc:/ui/scripts/LinphoneUtils/linphone-utils.js' as LinphoneUtils .import 'qrc:/ui/scripts/Utils/utils.js' as Utils // ============================================================================= function removeAllEntries () { - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('removeAllEntriesDescription'), }, function (status) { if (status) { diff --git a/linphone-app/ui/views/App/Main/HistoryView.qml b/linphone-app/ui/views/App/Main/HistoryView.qml index 27e90d4f0..316c3fa41 100644 --- a/linphone-app/ui/views/App/Main/HistoryView.qml +++ b/linphone-app/ui/views/App/Main/HistoryView.qml @@ -17,13 +17,13 @@ ColumnLayout { property string peerAddress property string fullPeerAddress - readonly property var _sipAddressObserver: peerAddress?SipAddressesModel.getSipAddressObserver((fullPeerAddress?fullPeerAddress:peerAddress), ''):null + property var _sipAddressObserver: peerAddress?SipAddressesModel.getSipAddressObserver((fullPeerAddress?fullPeerAddress:peerAddress), ''):null // --------------------------------------------------------------------------- spacing: 0 - + Component.onDestruction: _sipAddressObserver=null// Need to set it to null because of not calling destructor if not. // --------------------------------------------------------------------------- // Contact bar. // --------------------------------------------------------------------------- @@ -50,17 +50,13 @@ ColumnLayout { Layout.preferredHeight: HistoryViewStyle.bar.avatarSize Layout.preferredWidth: HistoryViewStyle.bar.avatarSize - image: peerAddress ? - (historyView._sipAddressObserver.contact - ? historyView._sipAddressObserver.contact - : null) - :null + image: peerAddress && historyView._sipAddressObserver && historyView._sipAddressObserver.contact? historyView._sipAddressObserver.contact.avatar : null presenceLevel: historyView._sipAddressObserver?Presence.getPresenceLevel( historyView._sipAddressObserver.presenceStatus ):null - username: peerAddress? UtilsCpp.getDisplayName(historyView._sipAddressObserver.peerAddress):null + username: peerAddress && historyView._sipAddressObserver? UtilsCpp.getDisplayName(historyView._sipAddressObserver.peerAddress):null visible:peerAddress } diff --git a/linphone-app/ui/views/App/Main/MainWindow.js b/linphone-app/ui/views/App/Main/MainWindow.js index 604b55be4..7477785bb 100644 --- a/linphone-app/ui/views/App/Main/MainWindow.js +++ b/linphone-app/ui/views/App/Main/MainWindow.js @@ -77,7 +77,7 @@ function setView (view, props, callback) { apply(view, props, false, callback) return } - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: lockedInfo.descriptionText, }, function (status) { if (status) { diff --git a/linphone-app/ui/views/App/Main/MainWindow.qml b/linphone-app/ui/views/App/Main/MainWindow.qml index ab9156cd8..23d668437 100644 --- a/linphone-app/ui/views/App/Main/MainWindow.qml +++ b/linphone-app/ui/views/App/Main/MainWindow.qml @@ -11,6 +11,7 @@ import App.Styles 1.0 import ColorsList 1.0 import 'MainWindow.js' as Logic +import 'qrc:/ui/scripts/Utils/utils.js' as Utils // ============================================================================= @@ -226,7 +227,7 @@ ApplicationWindow { //onClicked: Logic.openConferenceManager() onClicked: { window.detachVirtualWindow() - window.attachVirtualWindow(Qt.resolvedUrl('Dialogs/NewConference.qml') + window.attachVirtualWindow(Utils.buildAppDialogUri('NewConference') ,{}) } } diff --git a/linphone-app/ui/views/App/Settings/SettingsAdvanced.js b/linphone-app/ui/views/App/Settings/SettingsAdvanced.js index aeca0562a..280babe5b 100644 --- a/linphone-app/ui/views/App/Settings/SettingsAdvanced.js +++ b/linphone-app/ui/views/App/Settings/SettingsAdvanced.js @@ -34,7 +34,7 @@ function editLdap (ldap) { } function cleanLogs () { - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('cleanLogsDescription'), }, function (status) { if (status) { diff --git a/linphone-app/ui/views/App/Settings/SettingsSipAccounts.js b/linphone-app/ui/views/App/Settings/SettingsSipAccounts.js index 8e1139b45..e6fc51807 100644 --- a/linphone-app/ui/views/App/Settings/SettingsSipAccounts.js +++ b/linphone-app/ui/views/App/Settings/SettingsSipAccounts.js @@ -34,7 +34,7 @@ function editAccount (account) { } function deleteAccount (account) { - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('deleteAccountDescription'), }, function (status) { if (status) { @@ -44,7 +44,7 @@ function deleteAccount (account) { } function eraseAllPasswords () { - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('eraseAllPasswordsDescription'), }, function (status) { if (status) { diff --git a/linphone-app/ui/views/App/Settings/SettingsTunnel.qml b/linphone-app/ui/views/App/Settings/SettingsTunnel.qml index 773cd0c60..cd922507b 100644 --- a/linphone-app/ui/views/App/Settings/SettingsTunnel.qml +++ b/linphone-app/ui/views/App/Settings/SettingsTunnel.qml @@ -183,7 +183,7 @@ TabContainer { id: view property TunnelModel tunnelModel : SettingsModel.getTunnel() property TunnelConfigProxyModel tunnelConfigProxyModel: tunnelModel.getTunnelProxyConfigs() - + Component.onDestruction: {tunnelConfigProxyModel=null}// Need to set it to null because of not calling destructor if not. width: parent.width model: tunnelConfigProxyModel delegate: diff --git a/linphone-app/ui/views/App/Settings/SettingsUi.js b/linphone-app/ui/views/App/Settings/SettingsUi.js index 0f83a6824..ebe52c577 100644 --- a/linphone-app/ui/views/App/Settings/SettingsUi.js +++ b/linphone-app/ui/views/App/Settings/SettingsUi.js @@ -28,7 +28,7 @@ // ============================================================================= function cleanAvatars () { - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('cleanAvatarsDescription'), }, function (status) { if (status) { @@ -62,7 +62,7 @@ function setLocale (locale) { App.configLocale = locale window.detachVirtualWindow() - window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), { + window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { descriptionText: qsTr('setLocaleDescription'), }, function (status) { if (status) { diff --git a/linphone-app/ui/views/App/Settings/SettingsVideo.js b/linphone-app/ui/views/App/Settings/SettingsVideo.js index 024967490..5e6ca0ff9 100644 --- a/linphone-app/ui/views/App/Settings/SettingsVideo.js +++ b/linphone-app/ui/views/App/Settings/SettingsVideo.js @@ -23,7 +23,7 @@ .import Linphone 1.0 as Linphone -.import 'qrc:/ui/scripts/LinphoneUtils/linphone-utils.js' as LinphoneUtils +.import 'qrc:/ui/scripts/Utils/utils.js' as Utils // ============================================================================= @@ -46,5 +46,5 @@ function hideVideoPreview () { } function handleCodecDownloadRequested (codecInfo) { - LinphoneUtils.openCodecOnlineInstallerDialog(window, codecInfo) + Utils.openCodecOnlineInstallerDialog(window, codecInfo) } diff --git a/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml b/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml index a3bfb13f4..f424edb1e 100644 --- a/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml +++ b/linphone-app/ui/views/App/Styles/Calls/VideoConferenceStyle.qml @@ -378,9 +378,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 callQuality: QtObject { property int iconSize: 20 diff --git a/linphone-app/ui/views/App/Styles/Main/Dialogs/NewConferenceStyle.qml b/linphone-app/ui/views/App/Styles/Dialog/NewConferenceStyle.qml similarity index 100% rename from linphone-app/ui/views/App/Styles/Main/Dialogs/NewConferenceStyle.qml rename to linphone-app/ui/views/App/Styles/Dialog/NewConferenceStyle.qml diff --git a/linphone-app/ui/views/App/Styles/qmldir b/linphone-app/ui/views/App/Styles/qmldir index 0862d1391..3b8b357a2 100644 --- a/linphone-app/ui/views/App/Styles/qmldir +++ b/linphone-app/ui/views/App/Styles/qmldir @@ -18,6 +18,10 @@ singleton CallTransferStyle 1.0 Calls/Dialogs/CallT singleton ConferenceManagerStyle 1.0 Calls/Dialogs/ConferenceManagerStyle.qml singleton MultimediaParametersStyle 1.0 Calls/Dialogs/MultimediaParametersStyle.qml +# Dialog Window ------------------------------------------------------------------ + +singleton NewConferenceStyle 1.0 Dialog/NewConferenceStyle.qml + # Main Window ------------------------------------------------------------------ singleton ActivateAppSipAccountWithEmailStyle 1.0 Main/Assistant/ActivateAppSipAccountWithEmailStyle.qml @@ -44,7 +48,6 @@ singleton InfoChatRoomStyle 1.0 Main/Dialogs/InfoCh singleton InfoEncryptionStyle 1.0 Main/Dialogs/InfoEncryptionStyle.qml singleton ManageAccountsStyle 1.0 Main/Dialogs/ManageAccountsStyle.qml singleton NewChatRoomStyle 1.0 Main/Dialogs/NewChatRoomStyle.qml -singleton NewConferenceStyle 1.0 Main/Dialogs/NewConferenceStyle.qml singleton ParticipantsDevicesStyle 1.0 Main/Dialogs/ParticipantsDevicesStyle.qml diff --git a/linphone-app/ui/views/App/qmldir b/linphone-app/ui/views/App/qmldir new file mode 100644 index 000000000..3ae12b97e --- /dev/null +++ b/linphone-app/ui/views/App/qmldir @@ -0,0 +1,10 @@ +# ============================================================================== +# App's components to export. +# ============================================================================== + +module App + +# Components ------------------------------------------------------------------- + +NewConference 1.0 Dialog/NewConference.qml + diff --git a/linphone-sdk b/linphone-sdk index 9c69668a4..0bf934b06 160000 --- a/linphone-sdk +++ b/linphone-sdk @@ -1 +1 @@ -Subproject commit 9c69668a42189b54530a83b9263cfa2ad4149cf9 +Subproject commit 0bf934b0669e77ddecfcd8298ea615bb998aa28a