diff --git a/CHANGELOG.md b/CHANGELOG.md index a820c4cae..833cd45bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,11 +16,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Animated file in chats/notifications. - Round progress bar for transferring a file and allow to cancel it. - hide all accounts if their custom parameter 'hidden' is set to 1. +- Right-click on a timeline will show a slide menu to do actions on the timeline. ### Fixed - Crash on exit. - Crash when using no account. - Memory stability. +- Clean 3 chat behaviors : Leave chat room (in group info section of conversation menu), erase history (in conversation's menu), delete chat room (in slide menu, or if chat room is empty and left) ## 4.4.8 - 2022-07-04 diff --git a/linphone-app/assets/languages/da.ts b/linphone-app/assets/languages/da.ts index a55c0c549..e2a0d71d1 100644 --- a/linphone-app/assets/languages/da.ts +++ b/linphone-app/assets/languages/da.ts @@ -1012,7 +1012,7 @@ Server url ikke konfigureret. conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3390,6 +3390,19 @@ Klik her: <a href="%1">%1</a> + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/de.ts b/linphone-app/assets/languages/de.ts index 086d9ddb2..66722d3a3 100644 --- a/linphone-app/assets/languages/de.ts +++ b/linphone-app/assets/languages/de.ts @@ -1012,7 +1012,7 @@ Server URL ist nicht konfiguriert. conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3390,6 +3390,19 @@ Klicken Sie hier: <a href="%1">%1</a> + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/en.ts b/linphone-app/assets/languages/en.ts index 83b9147dd..f15b754f0 100644 --- a/linphone-app/assets/languages/en.ts +++ b/linphone-app/assets/languages/en.ts @@ -823,7 +823,7 @@ Server URL not configured. conferencesDeleted 'Conference has been deleted' : Message text in a banner to warn the user that the conference has been deleted. - + Conference has been deleted @@ -1012,8 +1012,8 @@ Server URL not configured. conversationMenuDelete - 'Delete' : Item menu to delete the chat - Delete + 'Delete history' : Item menu to delete the chat's history + Delete history conversationMenuViewContact @@ -3413,6 +3413,19 @@ Click here: <a href="%1">%1</a> Conferences + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + Are you sure you want to delete and leave this timeline? + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database. + + UseAppSipAccount diff --git a/linphone-app/assets/languages/es.ts b/linphone-app/assets/languages/es.ts index 46054561e..149ca8ef1 100644 --- a/linphone-app/assets/languages/es.ts +++ b/linphone-app/assets/languages/es.ts @@ -1012,7 +1012,7 @@ URL del servidor no configurada. conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3390,6 +3390,19 @@ Haga clic aquí: <a href="%1">%1 </a> + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/fr_FR.ts b/linphone-app/assets/languages/fr_FR.ts index acd4b545c..c9637bb18 100644 --- a/linphone-app/assets/languages/fr_FR.ts +++ b/linphone-app/assets/languages/fr_FR.ts @@ -1012,7 +1012,7 @@ URL du serveur non configurée. conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3390,6 +3390,19 @@ Cliquez ici : <a href="%1">%1</a> Conférences + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/hu.ts b/linphone-app/assets/languages/hu.ts index 03f161483..823bf3a92 100644 --- a/linphone-app/assets/languages/hu.ts +++ b/linphone-app/assets/languages/hu.ts @@ -1006,7 +1006,7 @@ A kiszolgáló URL-je nincs konfigurálva. conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3377,6 +3377,19 @@ Kattintson ide: <a href="%1">%1</a> + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/it.ts b/linphone-app/assets/languages/it.ts index 4a7ec1fc9..db8e3825c 100644 --- a/linphone-app/assets/languages/it.ts +++ b/linphone-app/assets/languages/it.ts @@ -1012,7 +1012,7 @@ URL del server non configurato. conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history Elimina @@ -3390,6 +3390,19 @@ Clicca: <a href="%1">%1</a> + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/ja.ts b/linphone-app/assets/languages/ja.ts index 55e98abc5..6ee61d20a 100644 --- a/linphone-app/assets/languages/ja.ts +++ b/linphone-app/assets/languages/ja.ts @@ -1006,7 +1006,7 @@ conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3377,6 +3377,19 @@ + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/lt.ts b/linphone-app/assets/languages/lt.ts index 27ea67e9a..c986cd660 100644 --- a/linphone-app/assets/languages/lt.ts +++ b/linphone-app/assets/languages/lt.ts @@ -1018,7 +1018,7 @@ Nesukonfigūruotas serverio url. conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3403,6 +3403,19 @@ Spustelėkite čia: <a href="%1">%1</a> + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/pt_BR.ts b/linphone-app/assets/languages/pt_BR.ts index 172f94417..0a2d54314 100644 --- a/linphone-app/assets/languages/pt_BR.ts +++ b/linphone-app/assets/languages/pt_BR.ts @@ -1012,7 +1012,7 @@ URL do servidor não configurado. conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3390,6 +3390,19 @@ Clique aqui: <a href="%1">%1 </a> + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/ru.ts b/linphone-app/assets/languages/ru.ts index f6a9a0a6d..93df74484 100644 --- a/linphone-app/assets/languages/ru.ts +++ b/linphone-app/assets/languages/ru.ts @@ -1018,7 +1018,7 @@ conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3403,6 +3403,19 @@ Конференции + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/sv.ts b/linphone-app/assets/languages/sv.ts index 64a50a977..8bff184ca 100644 --- a/linphone-app/assets/languages/sv.ts +++ b/linphone-app/assets/languages/sv.ts @@ -1012,7 +1012,7 @@ Serverwebbadressen är inte konfigurerad. conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3390,6 +3390,19 @@ Klicka här: <a href="%1">%1</a> + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/tr.ts b/linphone-app/assets/languages/tr.ts index 702efc2f6..218a91244 100644 --- a/linphone-app/assets/languages/tr.ts +++ b/linphone-app/assets/languages/tr.ts @@ -1006,7 +1006,7 @@ Sunucu url'si yapılandırılmadı. conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3377,6 +3377,19 @@ Buraya tıklayın: <a href="%1">%1</a> Toplantılar + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/uk.ts b/linphone-app/assets/languages/uk.ts index ba19b67fd..a085a5b1b 100644 --- a/linphone-app/assets/languages/uk.ts +++ b/linphone-app/assets/languages/uk.ts @@ -1018,7 +1018,7 @@ conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3403,6 +3403,19 @@ + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/assets/languages/zh_CN.ts b/linphone-app/assets/languages/zh_CN.ts index 5968edabc..f91605462 100644 --- a/linphone-app/assets/languages/zh_CN.ts +++ b/linphone-app/assets/languages/zh_CN.ts @@ -1006,7 +1006,7 @@ conversationMenuDelete - 'Delete' : Item menu to delete the chat + 'Delete history' : Item menu to delete the chat's history @@ -3377,6 +3377,19 @@ + + TimelineItem + + deleteTimeline + 'Are you sure you want to delete and leave this timeline?' + + + + deleteTimelineTooltip + 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + + + UseAppSipAccount diff --git a/linphone-app/resources.qrc b/linphone-app/resources.qrc index 9f8cb951d..b7109d0cc 100644 --- a/linphone-app/resources.qrc +++ b/linphone-app/resources.qrc @@ -416,6 +416,7 @@ ui/modules/Linphone/TelKeypad/TelKeypad.qml ui/modules/Linphone/Timeline/Timeline.js ui/modules/Linphone/Timeline/Timeline.qml + ui/modules/Linphone/Timeline/TimelineItem.qml ui/modules/Linphone/View/ParticipantsListView.qml ui/modules/Linphone/View/ParticipantsView.qml ui/modules/Linphone/View/SipAddressesView.qml diff --git a/linphone-app/src/components/chat-room/ChatRoomModel.cpp b/linphone-app/src/components/chat-room/ChatRoomModel.cpp index c4a01aa92..97d9cea25 100644 --- a/linphone-app/src/components/chat-room/ChatRoomModel.cpp +++ b/linphone-app/src/components/chat-room/ChatRoomModel.cpp @@ -258,7 +258,8 @@ void ChatRoomModel::removeAllEntries () { if(haveLogs) emit CoreManager::getInstance()->callLogsCountChanged(); } - deleteChatRoom(); + if( mChatRoom->isReadOnly())// = hasBeenLeft() + deleteChatRoom(); endResetModel(); emit allEntriesRemoved(mSelf.lock()); emit focused();// Removing all entries is like having focus. Don't wait asynchronous events. @@ -599,8 +600,11 @@ void ChatRoomModel::deleteChatRoom(){ } void ChatRoomModel::leaveChatRoom (){ - if(mChatRoom) + if(mChatRoom){ mChatRoom->leave(); + if( mChatRoom->getHistorySize() == 0 && mChatRoom->getHistoryEventsSize() == 0) + deleteChatRoom(); + } } diff --git a/linphone-app/src/components/other/colors/ColorListModel.hpp b/linphone-app/src/components/other/colors/ColorListModel.hpp index b9da325b4..7244ea433 100644 --- a/linphone-app/src/components/other/colors/ColorListModel.hpp +++ b/linphone-app/src/components/other/colors/ColorListModel.hpp @@ -138,7 +138,9 @@ class ColorListModel : public ProxyListModel { ADD_COLOR("progress_bg", "black", "Background of round progress bar") ADD_COLOR("progress_remaining_fg", "white", "Remaining progression color") - + + ADD_COLOR("timeline_bg_1", "#EFF0F2", "Timeline background color 1") + ADD_COLOR("timeline_bg_2", "#FFFFFF", "Timeline background color 2") // Keywords: 'mKeywordsMap' // s=standard, ma=main, l=list, sc=screen, me=menu diff --git a/linphone-app/src/components/timeline/TimelineListModel.cpp b/linphone-app/src/components/timeline/TimelineListModel.cpp index da335636b..20e6e12a7 100644 --- a/linphone-app/src/components/timeline/TimelineListModel.cpp +++ b/linphone-app/src/components/timeline/TimelineListModel.cpp @@ -309,7 +309,8 @@ void TimelineListModel::onChatRoomStateChanged(const std::shared_ptrgetChatRoomModel()) timeline->getChatRoomModel()->resetMessageCount(); - remove(timeline); + if(state == linphone::ChatRoom::State::Deleted) + remove(timeline); } } } diff --git a/linphone-app/src/components/timeline/TimelineModel.cpp b/linphone-app/src/components/timeline/TimelineModel.cpp index 533dad7f7..6433085e0 100644 --- a/linphone-app/src/components/timeline/TimelineModel.cpp +++ b/linphone-app/src/components/timeline/TimelineModel.cpp @@ -67,7 +67,7 @@ void TimelineModel::connectTo(ChatRoomListener * listener){ // ============================================================================= QSharedPointer TimelineModel::create(std::shared_ptr chatRoom, const std::list>& callLogs, QObject *parent){ - if((!chatRoom || chatRoom->getState() != linphone::ChatRoom::State::Terminated) && (!CoreManager::getInstance()->getTimelineListModel() || !CoreManager::getInstance()->getTimelineListModel()->getTimeline(chatRoom, false)) ) { + if((!chatRoom || chatRoom->getState() != linphone::ChatRoom::State::Deleted) && (!CoreManager::getInstance()->getTimelineListModel() || !CoreManager::getInstance()->getTimelineListModel()->getTimeline(chatRoom, false)) ) { QSharedPointer model = QSharedPointer::create(chatRoom, parent); if(model && model->getChatRoomModel()){ diff --git a/linphone-app/src/components/timeline/TimelineProxyModel.cpp b/linphone-app/src/components/timeline/TimelineProxyModel.cpp index a516a9a2f..694dc9c55 100644 --- a/linphone-app/src/components/timeline/TimelineProxyModel.cpp +++ b/linphone-app/src/components/timeline/TimelineProxyModel.cpp @@ -84,7 +84,7 @@ void TimelineProxyModel::setFilterText(const QString& text){ bool TimelineProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const { const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); auto timeline = sourceModel()->data(index).value(); - if(!timeline || !timeline->getChatRoomModel() || timeline->getChatRoomModel()->getState() == (int)linphone::ChatRoom::State::Terminated) + if(!timeline || !timeline->getChatRoomModel() || timeline->getChatRoomModel()->getState() == (int)linphone::ChatRoom::State::Deleted) return false; bool haveEncryption = timeline->getChatRoomModel()->haveEncryption(); if(!CoreManager::getInstance()->getSettingsModel()->getStandardChatEnabled() && !haveEncryption) diff --git a/linphone-app/ui/modules/Linphone/Styles/Timeline/TimelineStyle.qml b/linphone-app/ui/modules/Linphone/Styles/Timeline/TimelineStyle.qml index 1b7d35c47..b5e63dd63 100644 --- a/linphone-app/ui/modules/Linphone/Styles/Timeline/TimelineStyle.qml +++ b/linphone-app/ui/modules/Linphone/Styles/Timeline/TimelineStyle.qml @@ -21,8 +21,8 @@ QtObject { property int height: 60 property QtObject backgroundColor: QtObject { - property color a: ColorsList.add(sectionName+'_contact_bg_a', 'g10').color - property color b: ColorsList.add(sectionName+'_contact_bg_b', 'a').color + property color a: ColorsList.add(sectionName+'_contact_bg_a', 'timeline_bg_1').color + property color b: ColorsList.add(sectionName+'_contact_bg_b', 'timeline_bg_2').color property color selected: ColorsList.add(sectionName+'_contact_bg_c', 'i').color } @@ -64,4 +64,28 @@ QtObject { property color borderColor: ColorsList.add(sectionName+'_searchField_border', 'border').color property int pointSize: Units.dp * 9 } + + property QtObject selectedDeleteAction: QtObject { + property int iconSize: 40 + property string name : 'delete_on_selected' + property string icon : 'delete_custom' + property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'me_h_b_inv_bg').color + property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'me_n_b_inv_bg').color + property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'me_p_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 QtObject deleteAction: QtObject { + property int iconSize: 40 + property string name : 'delete' + property string icon : 'delete_custom' + property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'me_h_b_bg').color + property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'me_n_b_bg').color + property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'me_p_b_bg').color + property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'me_h_b_fg').color + property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'me_n_b_fg').color + property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'me_p_b_fg').color + } } diff --git a/linphone-app/ui/modules/Linphone/Timeline/Timeline.qml b/linphone-app/ui/modules/Linphone/Timeline/Timeline.qml index edc018b43..07a5553e8 100644 --- a/linphone-app/ui/modules/Linphone/Timeline/Timeline.qml +++ b/linphone-app/ui/modules/Linphone/Timeline/Timeline.qml @@ -3,6 +3,7 @@ import QtQuick.Layouts 1.3 import QtQuick.Controls 2.5 import Common 1.0 +import Common.Styles 1.0 import Linphone 1.0 import Linphone.Styles 1.0 import ColorsList 1.0 @@ -10,6 +11,7 @@ import ColorsList 1.0 import UtilsCpp 1.0 import 'Timeline.js' as Logic +import 'qrc:/ui/scripts/Utils/utils.js' as Utils // ============================================================================= @@ -361,66 +363,12 @@ Rectangle { Layout.fillWidth: true currentIndex: -1 - delegate: Item { - height: TimelineStyle.contact.height - width: parent ? parent.width : 0 - - Contact { - id: contactView - property bool isSelected: $modelData != undefined && $modelData.selected //view.currentIndex === index - - anchors.fill: parent - color: isSelected - ? TimelineStyle.contact.backgroundColor.selected - : ( - index % 2 == 0 - ? TimelineStyle.contact.backgroundColor.a - : TimelineStyle.contact.backgroundColor.b - ) - displayUnreadMessageCount: SettingsModel.standardChatEnabled || SettingsModel.secureChatEnabled - entry: $modelData.chatRoomModel - sipAddressColor: isSelected - ? TimelineStyle.contact.sipAddress.color.selected - : TimelineStyle.contact.sipAddress.color.normal - usernameColor: isSelected - ? TimelineStyle.contact.username.color.selected - : TimelineStyle.contact.username.color.normal - TooltipArea { - id: contactTooltip - text: UtilsCpp.toDateTimeString($modelData.chatRoomModel.lastUpdateTime) - isClickable: true - } - Icon{ - icon: TimelineStyle.ephemeralTimer.icon - iconSize: TimelineStyle.ephemeralTimer.iconSize - overwriteColor: $modelData && $modelData.selected ? TimelineStyle.ephemeralTimer.selectedTimerColor : TimelineStyle.ephemeralTimer.timerColor - anchors.right:parent.right - anchors.bottom:parent.bottom - anchors.bottomMargin: 7 - anchors.rightMargin: 7 - visible: $modelData.chatRoomModel.ephemeralEnabled - } - } - - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - propagateComposedEvents: true - preventStealing: false - onClicked: { - if(mouse.button == Qt.LeftButton){ - timeline.entryClicked($modelData) - if(view.updateSelectionModels) - $modelData.selected = true - view.currentIndex = index; - }else{ - contactTooltip.show() - } - } - } + delegate: TimelineItem{ + timelineModel: $modelData + modelIndex: index Connections{ - target:$modelData + target: $modelData onSelectedChanged:{ gc() if(view.updateSelectionModels && selected) { diff --git a/linphone-app/ui/modules/Linphone/Timeline/TimelineItem.qml b/linphone-app/ui/modules/Linphone/Timeline/TimelineItem.qml new file mode 100644 index 000000000..d158924db --- /dev/null +++ b/linphone-app/ui/modules/Linphone/Timeline/TimelineItem.qml @@ -0,0 +1,166 @@ +import QtQuick 2.7 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.5 + +import Common 1.0 +import Common.Styles 1.0 +import Linphone 1.0 +import Linphone.Styles 1.0 +import ColorsList 1.0 + +import UtilsCpp 1.0 + +import 'Timeline.js' as Logic +import 'qrc:/ui/scripts/Utils/utils.js' as Utils + +// ============================================================================= +Item { + id: mainItem + property TimelineModel timelineModel + property bool optionsToggled: false + property int modelIndex: 0 + + height: TimelineStyle.contact.height + width: parent ? parent.width : 0 + + state: optionsToggled ? 'options' : 'normal' + states: [State { + name: "normal" + }, State { + name: "options" + } + ] + + transitions: [Transition { + from: 'normal' + to: 'options' + //NumberAnimation { target: contactView; property: 'x'; to:-contactView.width; duration: 200;} + NumberAnimation { target: optionsView; property: 'x'; to:0; duration: 200;} + }, + Transition { + from: 'options' + to: 'normal' + //NumberAnimation { target: contactView; property: 'x'; to:0; duration: 200;} + NumberAnimation { target: optionsView; property: 'x'; to:optionsView.width; duration: 200;} + } + ] + + + Contact { + id: contactView + property bool isSelected: mainItem.timelineModel != undefined && mainItem.timelineModel.selected //view.currentIndex === index + + height: mainItem.height + width: mainItem.width + color: isSelected + ? TimelineStyle.contact.backgroundColor.selected + : ( + mainItem.modelIndex % 2 == 0 + ? TimelineStyle.contact.backgroundColor.a + : TimelineStyle.contact.backgroundColor.b + ) + displayUnreadMessageCount: SettingsModel.standardChatEnabled || SettingsModel.secureChatEnabled + entry: mainItem.timelineModel && mainItem.timelineModel.chatRoomModel + sipAddressColor: isSelected + ? TimelineStyle.contact.sipAddress.color.selected + : TimelineStyle.contact.sipAddress.color.normal + usernameColor: isSelected + ? TimelineStyle.contact.username.color.selected + : TimelineStyle.contact.username.color.normal + TooltipArea { + id: contactTooltip + text: mainItem.timelineModel && UtilsCpp.toDateTimeString(mainItem.timelineModel.chatRoomModel.lastUpdateTime) + isClickable: true + } + Icon{ + icon: TimelineStyle.ephemeralTimer.icon + iconSize: TimelineStyle.ephemeralTimer.iconSize + overwriteColor: mainItem.timelineModel && mainItem.timelineModel.selected ? TimelineStyle.ephemeralTimer.selectedTimerColor : TimelineStyle.ephemeralTimer.timerColor + anchors.right:parent.right + anchors.bottom:parent.bottom + anchors.bottomMargin: 7 + anchors.rightMargin: 7 + visible: mainItem.timelineModel && mainItem.timelineModel.chatRoomModel.ephemeralEnabled + } + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + propagateComposedEvents: true + preventStealing: false + onClicked: { + if(mouse.button == Qt.LeftButton){ + timeline.entryClicked(mainItem.timelineModel) + if(view.updateSelectionModels) + mainItem.timelineModel.selected = true + view.currentIndex = mainItem.modelIndex; + }else{ + mainItem.optionsToggled = !mainItem.optionsToggled + } + } + } + } + Item{ + id: optionsView + + height: mainItem.height + width: mainItem.width + + x:width + visible: x!=width + RowLayout{ + anchors.fill: parent + MouseArea { + Layout.fillHeight: true + Layout.fillWidth: true + onClicked: { + mainItem.optionsToggled = !mainItem.optionsToggled + } + } + Rectangle{ + Layout.fillHeight: true + Layout.preferredWidth: optionsLayout.width + + color: contactView.color + MouseArea {// Grabber + anchors.fill: parent + cursorShape: Qt.ArrowCursor + } + RowLayout{ + id: optionsLayout + anchors.centerIn: parent + /* TODO + CheckBoxText { + id: securedCheckBox + Layout.alignment: Qt.AlignCenter + text: '' + + onClicked: { + + } + }*/ + ActionButton{ + id: deleteButton + Layout.alignment: Qt.AlignCenter + Layout.rightMargin: 6 + + isCustom: true + colorSet: contactView.isSelected ? TimelineStyle.selectedDeleteAction : TimelineStyle.deleteAction + onClicked: window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), { + //: 'Are you sure you want to delete and leave this timeline?' + descriptionText: qsTr('deleteTimeline'), + }, function (status) { + if (status) { + mainItem.timelineModel.chatRoomModel.deleteChatRoom() + } + }) + TooltipArea { + //: 'After confirmation, it will erase all history, leave the chat room if it is a group chat and delete it in database.' + text: qsTr('deleteTimelineTooltip') + } + } + } + } + } + } + +} \ No newline at end of file diff --git a/linphone-app/ui/modules/Linphone/qmldir b/linphone-app/ui/modules/Linphone/qmldir index 70fb41e1d..768e7a5cd 100644 --- a/linphone-app/ui/modules/Linphone/qmldir +++ b/linphone-app/ui/modules/Linphone/qmldir @@ -58,6 +58,7 @@ Sticker 1.0 Sticker/Sticker.qml TelKeypad 1.0 TelKeypad/TelKeypad.qml Timeline 1.0 Timeline/Timeline.qml +TimelineItem 1.0 Timeline/TimelineItem.qml ParticipantsListView 1.0 View/ParticipantsListView.qml ParticipantsView 1.0 View/ParticipantsView.qml diff --git a/linphone-app/ui/views/App/Main/Conversation.qml b/linphone-app/ui/views/App/Main/Conversation.qml index 912fa9256..0ae8617ed 100644 --- a/linphone-app/ui/views/App/Main/Conversation.qml +++ b/linphone-app/ui/views/App/Main/Conversation.qml @@ -471,7 +471,7 @@ ColumnLayout { } MenuItem{ id: deleteMenuItem - //: 'Delete' : Item menu to delete the chat + //: 'Delete history' : Item menu to delete the chat's history text: qsTr('conversationMenuDelete') iconMenu: MenuItemStyle.deleteEntry.icon iconSizeMenu: 40