diff --git a/Linphone/data/image/pdf.svg b/Linphone/data/image/pdf.svg new file mode 100644 index 000000000..adad4c5c8 --- /dev/null +++ b/Linphone/data/image/pdf.svg @@ -0,0 +1,4 @@ + + + + diff --git a/Linphone/data/image/photo.svg b/Linphone/data/image/photo.svg new file mode 100644 index 000000000..420718e4b --- /dev/null +++ b/Linphone/data/image/photo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/Linphone/data/image/search.svg b/Linphone/data/image/search.svg new file mode 100644 index 000000000..aff8d159a --- /dev/null +++ b/Linphone/data/image/search.svg @@ -0,0 +1,4 @@ + + + + diff --git a/Linphone/data/languages/de.ts b/Linphone/data/languages/de.ts index d9390284c..6d709cb2c 100644 --- a/Linphone/data/languages/de.ts +++ b/Linphone/data/languages/de.ts @@ -4501,45 +4501,9 @@ Pour les activer dans un projet commercial, merci de nous contacter. SelectedChatView - - chat_view_detail_other_actions_title - Other actions - - - - - chat_view_detail_leave_room_toast_button - "Leave Chat Room" - - - - - chat_view_detail_leave_room_toast_title - Leave Chat Room ? - - - - - chat_view_detail_leave_room_toast_message - All the messages will be removed from the chat room. Do you want to continue ? - - - - - chat_view_detail_delete_history_button - "Delete history" - - - - - chat_view_detail_delete_history_toast_title - Delete history ? - - - - - chat_view_detail_delete_history_toast_message - All the messages will be removed from the chat room. Do you want to continue ? + + chat_view_send_area_placeholder_text + Say something… : placeholder text for sending message text area @@ -6191,4 +6155,151 @@ Failed to create 1-1 conversation with %1 ! Ok + + OneOneConversationInfos + + one_one_infos_call + Call + Anrufen + + + one_one_infos_mute + Mute + Stummschalten + + + one_one_infos_search + Search + Suchen + + + one_one_infos_media_docs + Medias & documents + Medien & Dokumente + + + one_one_infos_shared_media + Shared medias + Geteilte Medien + + + one_one_infos_shared_docs + Shared documents + Geteilte Dokumente + + + one_one_infos_other_actions + Other actions + Weitere Aktionen + + + one_one_infos_enable_ephemerals + Enable ephemeral messages + Flüchtige Nachrichten aktivieren + + + one_one_infos_disable_ephemerals + Disable ephemeral messages + Flüchtige Nachrichten deaktivieren + + + one_one_infos_delete_history + Delete history + Verlauf löschen + + + one_one_infos_delete_history_toast_title + Delete history ? + Verlauf löschen? + + + one_one_infos_delete_history_toast_message + All the messages will be removed from the chat room. Do you want to continue ? + Alle Nachrichten werden aus dem Chat entfernt. Möchten Sie fortfahren? + + + one_one_infos_open_contact + Open contact + Kontakt öffnen + + + one_one_infos_create_contact + Create contact + Kontakt erstellen + + + + GroupConversationInfos + + group_infos_call + Call + Anrufen + + + group_infos_mute + Mute + Stummschalten + + + group_infos_meeting + Meeting + Meeting + + + group_infos_media_docs + Medias & documents + Medien & Dokumente + + + group_infos_shared_media + Shared medias + Geteilte Medien + + + group_infos_shared_docs + Shared documents + Geteilte Dokumente + + + group_infos_other_actions + Other actions + Weitere Aktionen + + + group_infos_enable_ephemerals + Enable ephemeral messages + Flüchtige Nachrichten aktivieren + + + group_infos_disable_ephemerals + Disable ephemeral messages + Flüchtige Nachrichten deaktivieren + + + group_infos_delete_history + Delete history + Verlauf löschen + + + group_infos_delete_history_toast_title + Delete history ? + Verlauf löschen? + + + group_infos_delete_history_toast_message + All the messages will be removed from the chat room. Do you want to continue ? + Alle Nachrichten werden aus dem Chat entfernt. Möchten Sie fortfahren? + + + group_infos_leave_room_toast_title + Leave Chat Room ? + Chatraum verlassen? + + + group_infos_leave_room_toast_message + All the messages will be removed from the chat room. Do you want to continue ? + Alle Nachrichten werden aus dem Chat entfernt. Möchten Sie fortfahren? + + + diff --git a/Linphone/data/languages/en.ts b/Linphone/data/languages/en.ts index cd71eba41..6afbe1132 100644 --- a/Linphone/data/languages/en.ts +++ b/Linphone/data/languages/en.ts @@ -4402,46 +4402,20 @@ To enable them in a commercial project, please contact us. SelectedChatView - - chat_view_detail_other_actions_title + Dites quelque chose… + Say something… : placeholder text for sending message text area + Say something… + + + Autres actions Other actions - Other actions + Other actions - - chat_view_detail_delete_history_button - "Delete history" - Delete history - - - - chat_view_detail_delete_history_toast_title - Delete history ? - Delete history ? - - - - chat_view_detail_delete_history_toast_message - All the messages will be removed from the chat room. Do you want to continue ? - All the messages will be removed from the chat room. Do you want to continue ? - - - - chat_view_detail_leave_room_toast_button - "Leave Chat Room" - Leave chat room - - - - chat_view_detail_leave_room_toast_title - Leave Chat Room ? - Leave chat room ? - - - - chat_view_detail_leave_room_toast_message - All the messages will be removed from the chat room. Do you want to continue ? - You will not be able to send or receive messages in this room anymore, leave ? + + chat_view_send_area_placeholder_text + Say something… : placeholder text for sending message text area + Say something… @@ -6092,4 +6066,248 @@ Failed to create 1-1 conversation with %1 ! Ok + + EventLogCore + + conference_created_event + 'You have joined the group' : Little message to show on the event when the user join the chat group. + You have joined the group + + + conference_created_terminated + 'You have left the group' : Little message to show on the event when the user leave the chat group. + You have left the group + + + conference_participant_added_event + '%1 has joined' : Little message to show on the event when someone join the chat group. + %1 has joined + + + conference_participant_removed_event + '%1 has left' : Little message to show on the event when someone leave the chat group + %1 has left + + + conference_participant_set_admin_event + '%1 is now an admin' : Little message to show on the event when someone get the admin status. %1 is somebody + %1 is now an admin + + + conference_participant_unset_admin_event + '%1 is no longer an admin' : Little message to show on the event when somebody lost its admin status. %1 is somebody + %1 is no longer an admin + + + conference_security_event + 'Security level degraded by %1': Little message to show on the event when a security level has been lost. + Security level degraded by %1 + + + conference_ephemeral_message_enabled_event + 'Ephemeral messages have been enabled: %1' : Little message to show on the event when ephemeral has been activated. %1 is a date time + Ephemeral messages have been enabled: %1 + + + conference_ephemeral_message_disabled_event + 'Ephemeral messages have been disabled': Little message to show on the event when ephemeral has been deactivated. + Ephemeral messages have been disabled + + + conference_subject_changed_event + 'New subject : %1' : Little message to show on the event when the subject of the chat room has been changed. %1 is the new subject. + New subject: %1 + + + conference_ephemeral_message_lifetime_changed_event + 'Ephemeral messages have been updated: %1' : Little message to show on the event when ephemeral has been updated. %1 is a date time + Ephemeral messages have been updated: %1 + + + nSeconds + + %1 second + %1 seconds + + + + nMinute + + %1 minute + %1 minutes + + + + nHour + + %1 hour + %1 hours + + + + nDay + + %1 day + %1 days + + + + nWeek + + %1 week + %1 weeks + + + + + OneOneConversationInfos + + one_one_infos_call + Call + Call + + + one_one_infos_mute + Mute + Mute + + + one_one_infos_search + Search + Search + + + one_one_infos_media_docs + Medias & documents + Medias & documents + + + one_one_infos_shared_media + Shared medias + Shared medias + + + one_one_infos_shared_docs + Shared documents + Shared documents + + + one_one_infos_other_actions + Other actions + Other actions + + + one_one_infos_enable_ephemerals + Enable ephemeral messages + Enable ephemeral messages + + + one_one_infos_disable_ephemerals + Disable ephemeral messages + Disable ephemeral messages + + + one_one_infos_delete_history + Delete history + Delete history + + + one_one_infos_delete_history_toast_title + Delete history ? + Delete history ? + + + one_one_infos_delete_history_toast_message + All the messages will be removed from the chat room. Do you want to continue ? + All the messages will be removed from the chat room. Do you want to continue ? + + + one_one_infos_open_contact + Open contact + Open contact + + + one_one_infos_create_contact + Create contact + Create contact + + + + GroupConversationInfos + + group_infos_call + Call + Call + + + group_infos_mute + Mute + Mute + + + group_infos_meeting + Meeting + Meeting + + + group_infos_media_docs + Medias & documents + Medias & documents + + + group_infos_shared_media + Shared medias + Shared medias + + + group_infos_shared_docs + Shared documents + Shared documents + + + group_infos_other_actions + Other actions + Other actions + + + group_infos_enable_ephemerals + Enable ephemeral messages + Enable ephemeral messages + + + group_infos_disable_ephemerals + Disable ephemeral messages + Disable ephemeral messages + + + group_infos_delete_history + Delete history + Delete history + + + group_infos_delete_history_toast_title + Delete history ? + Delete history ? + + + group_infos_delete_history_toast_message + All the messages will be removed from the chat room. Do you want to continue ? + All the messages will be removed from the chat room. Do you want to continue ? + + + group_infos_leave_room + Leave Chat Room + Leave Chat Room + + + group_infos_leave_room_toast_title + Leave Chat Room ? + Leave Chat Room ? + + + group_infos_leave_room_toast_message + All the messages will be removed from the chat room. Do you want to continue ? + All the messages will be removed from the chat room. Do you want to continue ? + + diff --git a/Linphone/data/languages/fr_FR.ts b/Linphone/data/languages/fr_FR.ts index 161f2aa12..0bf78806c 100644 --- a/Linphone/data/languages/fr_FR.ts +++ b/Linphone/data/languages/fr_FR.ts @@ -4402,46 +4402,10 @@ Pour les activer dans un projet commercial, merci de nous contacter. SelectedChatView - - chat_view_detail_other_actions_title - Other actions - Autres actions - - - - chat_view_detail_delete_history_button - "Delete history" - Supprimer l'historique - - - - chat_view_detail_delete_history_toast_title - Delete history ? - Supprimer l'historique ? - - - - chat_view_detail_delete_history_toast_message - All the messages will be removed from the chat room. Do you want to continue ? - Tous les messages seront supprimés. Souhaitez-vous continuer ? - - - - chat_view_detail_leave_room_toast_button - "Leave Chat Room" - Quitter la conversation - - - - chat_view_detail_leave_room_toast_title - Leave Chat Room ? - Quitter la conversation ? - - - - chat_view_detail_leave_room_toast_message - All the messages will be removed from the chat room. Do you want to continue ? - Vous ne recevrez ni pourrez envoyer des messages dans cette conversation, quitter ? + + chat_view_send_area_placeholder_text + Say something… : placeholder text for sending message text area + Dites quelque chose… @@ -6092,4 +6056,155 @@ Failed to create 1-1 conversation with %1 ! Ok + + OneOneConversationInfos + + one_one_infos_call + Call + Appel + + + one_one_infos_mute + Mute + Sourdine + + + one_one_infos_search + Search + Rechercher + + + one_one_infos_media_docs + Medias & documents + Medias & documents + + + one_one_infos_shared_media + Shared medias + Médias partagés + + + one_one_infos_shared_docs + Shared documents + Documents partagés + + + one_one_infos_other_actions + Other actions + Autres actions + + + one_one_infos_enable_ephemerals + Enable ephemeral messages + Activer les messages éphémères + + + one_one_infos_disable_ephemerals + Disable ephemeral messages + Désactiver les messages éphémères + + + one_one_infos_delete_history + Delete history + Supprimer l'historique + + + one_one_infos_delete_history_toast_title + Delete history ? + Supprimer l'historique ? + + + one_one_infos_delete_history_toast_message + All the messages will be removed from the chat room. Do you want to continue ? + Tous les messages seront supprimés. Souhaitez-vous continuer ? + + + one_one_infos_open_contact + Open contact + Voir le contact + + + one_one_infos_create_contact + Create contact + Créer un contact + + + + GroupConversationInfos + + group_infos_call + Call + Appel + + + group_infos_mute + Mute + Sourdine + + + group_infos_meeting + Meeting + Réunion + + + group_infos_media_docs + Medias & documents + Medias & documents + + + group_infos_shared_media + Shared medias + Médias partagés + + + group_infos_shared_docs + Shared documents + Documents partagés + + + group_infos_other_actions + Other actions + Autres actions + + + group_infos_enable_ephemerals + Enable ephemeral messages + Activer les messages éphémères + + + group_infos_disable_ephemerals + Disable ephemeral messages + Désactiver les messages éphémères + + + group_infos_delete_history + Delete history + Supprimer l'historique + + + group_infos_delete_history_toast_title + Delete history ? + Supprimer l'historique ? + + + group_infos_delete_history_toast_message + All the messages will be removed from the chat room. Do you want to continue ? + Tous les messages seront supprimés. Souhaitez-vous continuer ? + + + group_infos_leave_room + Leave Chat Room + Quitter la conversation + + + group_infos_leave_room_toast_title + Leave Chat Room ? + Quitter la conversation ? + + + group_infos_leave_room_toast_message + All the messages will be removed from the chat room. Do you want to continue ? + Vous ne recevrez ni pourrez envoyer des messages dans cette conversation, quitter ? + + diff --git a/Linphone/view/CMakeLists.txt b/Linphone/view/CMakeLists.txt index ea74a250d..b6bda2755 100644 --- a/Linphone/view/CMakeLists.txt +++ b/Linphone/view/CMakeLists.txt @@ -20,6 +20,7 @@ list(APPEND _LINPHONEAPP_QML_FILES view/Control/Button/Switch.qml view/Control/Button/Settings/ComboSetting.qml view/Control/Button/Settings/SwitchSetting.qml + view/Control/Button/LabelButton.qml view/Control/Container/Carousel.qml view/Control/Container/CreationFormLayout.qml @@ -150,6 +151,9 @@ list(APPEND _LINPHONEAPP_QML_FILES view/Page/Layout/Settings/SecuritySettingsLayout.qml view/Page/Layout/Settings/NetworkSettingsLayout.qml view/Page/Layout/Settings/AdvancedSettingsLayout.qml + view/Page/Layout/Chat/GroupConversationInfos.qml + view/Page/Layout/Chat/OneOneConversationInfos.qml + view/Page/Layout/Chat/ChatInfoActionsGroup.qml view/Page/Main/AbstractMainPage.qml view/Page/Main/Account/AccountListView.qml diff --git a/Linphone/view/Control/Button/LabelButton.qml b/Linphone/view/Control/Button/LabelButton.qml new file mode 100644 index 000000000..e44dd183e --- /dev/null +++ b/Linphone/view/Control/Button/LabelButton.qml @@ -0,0 +1,35 @@ +import QtQuick +import QtQuick.Controls.Basic as Control +import QtQuick.Effects +import QtQuick.Layouts +import Linphone +import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle + +ColumnLayout { + id: labelButton + // property alias image: buttonImg + property alias button: button + property string label + spacing: Math.round(8 * DefaultStyle.dp) + Button { + id: button + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: Math.round(56 * DefaultStyle.dp) + Layout.preferredHeight: Math.round(56 * DefaultStyle.dp) + topPadding: Math.round(16 * DefaultStyle.dp) + bottomPadding: Math.round(16 * DefaultStyle.dp) + leftPadding: Math.round(16 * DefaultStyle.dp) + rightPadding: Math.round(16 * DefaultStyle.dp) + contentImageColor: DefaultStyle.main2_600 + radius: Math.round(40 * DefaultStyle.dp) + style: ButtonStyle.grey + } + Text { + Layout.alignment: Qt.AlignHCenter + text: labelButton.label + font { + pixelSize: Typography.p1.pixelSize + weight: Typography.p1.weight + } + } +} diff --git a/Linphone/view/Control/Container/Call/CallHistoryLayout.qml b/Linphone/view/Control/Container/Call/CallHistoryLayout.qml index 44425b5d4..e201a1258 100644 --- a/Linphone/view/Control/Container/Call/CallHistoryLayout.qml +++ b/Linphone/view/Control/Container/Call/CallHistoryLayout.qml @@ -12,7 +12,6 @@ ColumnLayout { spacing: Math.round(30 * DefaultStyle.dp) property var callHistoryGui - property var chatGui property FriendGui contact property var conferenceInfo: callHistoryGui?.core.conferenceInfo @@ -32,37 +31,6 @@ ColumnLayout { property alias buttonContent: rightButton.data property alias detailContent: detailControl.data - - property var hideChat: false - - component LabelButton: ColumnLayout { - id: labelButton - // property alias image: buttonImg - property alias button: button - property string label - spacing: Math.round(8 * DefaultStyle.dp) - Button { - id: button - Layout.alignment: Qt.AlignHCenter - Layout.preferredWidth: Math.round(56 * DefaultStyle.dp) - Layout.preferredHeight: Math.round(56 * DefaultStyle.dp) - topPadding: Math.round(16 * DefaultStyle.dp) - bottomPadding: Math.round(16 * DefaultStyle.dp) - leftPadding: Math.round(16 * DefaultStyle.dp) - rightPadding: Math.round(16 * DefaultStyle.dp) - contentImageColor: DefaultStyle.main2_600 - radius: Math.round(40 * DefaultStyle.dp) - style: ButtonStyle.grey - } - Text { - Layout.alignment: Qt.AlignHCenter - text: labelButton.label - font { - pixelSize: Typography.p1.pixelSize - weight: Typography.p1.weight - } - } - } ColumnLayout { spacing: Math.round(13 * DefaultStyle.dp) @@ -171,7 +139,7 @@ ColumnLayout { } } LabelButton { - visible: !mainItem.isConference && !SettingsCpp.disableChatFeature && !mainItem.hideChat + visible: !mainItem.isConference && !SettingsCpp.disableChatFeature width: Math.round(56 * DefaultStyle.dp) height: Math.round(56 * DefaultStyle.dp) button.icon.width: Math.round(24 * DefaultStyle.dp) diff --git a/Linphone/view/Page/Form/Chat/SelectedChatView.qml b/Linphone/view/Page/Form/Chat/SelectedChatView.qml index 8c3cfdbd0..a01f153b4 100644 --- a/Linphone/view/Page/Form/Chat/SelectedChatView.qml +++ b/Linphone/view/Page/Form/Chat/SelectedChatView.qml @@ -253,80 +253,45 @@ RowLayout { Layout.preferredWidth: Math.round(1 * DefaultStyle.dp) Layout.fillHeight: true } - Control.Control { - id: detailsPanel - visible: false - Layout.fillHeight: true - Layout.preferredWidth: Math.round(387 * DefaultStyle.dp) - background: Rectangle { - color: DefaultStyle.grey_0 - anchors.fill: parent - } - contentItem: CallHistoryLayout { - chatGui: mainItem.chat - hideChat: mainItem.chat.core.isReadOnly - detailContent: ColumnLayout { - DetailLayout { - //: Other actions - label: qsTr("chat_view_detail_other_actions_title") - content: ColumnLayout { - // IconLabelButton { - // Layout.fillWidth: true - // Layout.preferredHeight: Math.round(50 * DefaultStyle.dp) - // icon.source: AppIcons.signOut - // //: "Quitter la conversation" - // text: qsTr("chat_view_detail_quit_chat_title") - // onClicked: { + Control.Control { + id: detailsPanel + visible: false + Layout.fillHeight: true + Layout.preferredWidth: Math.round(387 * DefaultStyle.dp) - // } - // style: ButtonStyle.noBackground - // } - IconLabelButton { - Layout.fillWidth: true - Layout.preferredHeight: Math.round(50 * DefaultStyle.dp) - icon.source: AppIcons.signOut - //: "Leave Chat Room" - text: qsTr("chat_view_detail_leave_room_toast_button") - visible: mainItem.chat.core.isGroupChat && !mainItem.chat.core.isReadOnly - onClicked: { - //: Leave Chat Room ? - mainWindow.showConfirmationLambdaPopup(qsTr("chat_view_detail_leave_room_toast_title"), - //: All the messages will be removed from the chat room. Do you want to continue ? - qsTr("chat_view_detail_leave_room_toast_message"), - "", - function(confirmed) { - if (confirmed) { - mainItem.chat.core.lLeave() - } - }) - } - style: ButtonStyle.noBackground - } - IconLabelButton { - Layout.fillWidth: true - Layout.preferredHeight: Math.round(50 * DefaultStyle.dp) - icon.source: AppIcons.trashCan - //: "Delete history" - text: qsTr("chat_view_detail_delete_history_button") - onClicked: { - //: Delete history ? - mainWindow.showConfirmationLambdaPopup(qsTr("chat_view_detail_delete_history_toast_title"), - //: All the messages will be removed from the chat room. Do you want to continue ? - qsTr("chat_view_detail_delete_history_toast_message"), - "", - function(confirmed) { - if (confirmed) { - mainItem.chat.core.lDeleteHistory() - } - }) - } - style: ButtonStyle.noBackgroundRed - } - } - } - Item {Layout.fillHeight: true} - } - } - } + background: Rectangle { + color: DefaultStyle.grey_0 + anchors.fill: parent + } + + contentItem: Loader { + id: contentLoader + anchors.top: parent.top + anchors.topMargin: Math.round(39 * DefaultStyle.dp) + active: true + property var chat: mainItem.chat + sourceComponent: chat && chat.core.isGroupChat ? groupInfoComponent : oneToOneInfoComponent + + onLoaded: { + if (item && item.hasOwnProperty("chat")) { + item.chat = chat + } + } + } + + Component { + id: oneToOneInfoComponent + OneOneConversationInfos { + chat: contentLoader.chat + } + } + + Component { + id: groupInfoComponent + GroupConversationInfos { + chat: contentLoader.chat + } + } + } } diff --git a/Linphone/view/Page/Layout/Chat/ChatInfoActionsGroup.qml b/Linphone/view/Page/Layout/Chat/ChatInfoActionsGroup.qml new file mode 100644 index 000000000..eb81dad0b --- /dev/null +++ b/Linphone/view/Page/Layout/Chat/ChatInfoActionsGroup.qml @@ -0,0 +1,102 @@ +import QtCore +import QtQuick +import QtQuick.Controls.Basic as Control +import QtQuick.Dialogs +import QtQuick.Effects +import QtQuick.Layouts +import Linphone +import UtilsCpp +import SettingsCpp +import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle + +ColumnLayout { + + property var title: String + property var entries + + Text { + font: Typography.h4 + color: DefaultStyle.main2_600 + text: title + Layout.topMargin: Math.round(5 * DefaultStyle.dp) + } + + Rectangle { + Layout.fillWidth: true + Layout.topMargin: Math.round(9 * DefaultStyle.dp) + color: DefaultStyle.grey_100 + radius: Math.round(15 * DefaultStyle.dp) + height: contentColumn.implicitHeight + + ColumnLayout { + id: contentColumn + anchors.fill: parent + spacing: 0 + + Repeater { + model: entries + + delegate: ColumnLayout { + width: parent.width + spacing: 0 + property bool hovered: false + + Item { + Layout.fillWidth: true + Layout.preferredHeight: Math.round(56 * DefaultStyle.dp) + visible: modelData.visible + + RowLayout { + anchors.fill: parent + spacing: Math.round(8 * DefaultStyle.dp) + anchors.leftMargin: Math.round(17 * DefaultStyle.dp) + anchors.rightMargin: Math.round(10 * DefaultStyle.dp) + + EffectImage { + fillMode: Image.PreserveAspectFit + imageSource: modelData.icon + colorizationColor: modelData.color + Layout.preferredHeight: Math.round(20 * DefaultStyle.dp) + Layout.preferredWidth: Math.round(20 * DefaultStyle.dp) + } + + Text { + text: modelData.text + font: hovered ? Typography.p1b : Typography.p1 + color: modelData.color + Layout.alignment: Qt.AlignVCenter + Layout.fillWidth: true + } + + EffectImage { + visible: modelData.showRightArrow + fillMode: Image.PreserveAspectFit + imageSource: AppIcons.rightArrow + colorizationColor: modelData.color + Layout.preferredHeight: Math.round(20 * DefaultStyle.dp) + Layout.preferredWidth: Math.round(20 * DefaultStyle.dp) + } + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: modelData.action() + onEntered: hovered = true + onExited: hovered = false + hoverEnabled: true + } + } + + Rectangle { + visible: index < entries.length - 1 + color: DefaultStyle.main2_200 + height: Math.round(1 * DefaultStyle.dp) + width: parent.width - Math.round(30 * DefaultStyle.dp) + Layout.leftMargin: Math.round(17 * DefaultStyle.dp) + } + } + } + } + } +} diff --git a/Linphone/view/Page/Layout/Chat/GroupConversationInfos.qml b/Linphone/view/Page/Layout/Chat/GroupConversationInfos.qml new file mode 100644 index 000000000..170228bdb --- /dev/null +++ b/Linphone/view/Page/Layout/Chat/GroupConversationInfos.qml @@ -0,0 +1,171 @@ +import QtCore +import QtQuick +import QtQuick.Controls.Basic as Control +import QtQuick.Dialogs +import QtQuick.Effects +import QtQuick.Layouts +import Linphone +import UtilsCpp +import SettingsCpp +import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle + +ColumnLayout { + id: mainItem + property var chat + spacing: 0 + + Avatar { + Layout.alignment: Qt.AlignHCenter + displayNameVal: mainItem.chat.core.avatarUri + Layout.preferredWidth: Math.round(100 * DefaultStyle.dp) + Layout.preferredHeight: Math.round(100 * DefaultStyle.dp) + } + + Text { + font: Typography.p1 + color: DefaultStyle.main2_700 + text: mainItem.chat?.core.title || "" + Layout.alignment: Qt.AlignHCenter + Layout.topMargin: Math.round(11 * DefaultStyle.dp) + } + + Text { + font: Typography.p3 + color: DefaultStyle.main2_700 + text: mainItem.chat?.core.peerAddress + Layout.alignment: Qt.AlignHCenter + Layout.topMargin: Math.round(5 * DefaultStyle.dp) + } + + RowLayout { + spacing: Math.round(55 * DefaultStyle.dp) + Layout.alignment: Qt.AlignHCenter + Layout.topMargin: Math.round(30 * DefaultStyle.dp) + LabelButton { + width: Math.round(56 * DefaultStyle.dp) + height: Math.round(56 * DefaultStyle.dp) + button.icon.width: Math.round(24 * DefaultStyle.dp) + button.icon.height: Math.round(24 * DefaultStyle.dp) + button.icon.source: chat.core.muted ? AppIcons.bell : AppIcons.bellSlash + //: "Sourdine" + label: qsTr("group_infos_mute") + button.onClicked: { + chat.core.muted = !chat.core.muted + } + } + LabelButton { + width: Math.round(56 * DefaultStyle.dp) + height: Math.round(56 * DefaultStyle.dp) + button.icon.width: Math.round(24 * DefaultStyle.dp) + button.icon.height: Math.round(24 * DefaultStyle.dp) + button.icon.source: AppIcons.phone + //: "Appel" + label: qsTr("group_infos_call") + button.onClicked: { + //TODO + } + } + LabelButton { + width: Math.round(56 * DefaultStyle.dp) + height: Math.round(56 * DefaultStyle.dp) + button.icon.width: Math.round(24 * DefaultStyle.dp) + button.icon.height: Math.round(24 * DefaultStyle.dp) + button.icon.source: AppIcons.videoconference + //: "Réunion" + label: qsTr("group_infos_meeting") + button.onClicked: { + //TODO + } + } + } + + ChatInfoActionsGroup { + Layout.leftMargin: Math.round(15 * DefaultStyle.dp) + Layout.rightMargin: Math.round(12 * DefaultStyle.dp) + Layout.topMargin: Math.round(30 * DefaultStyle.dp) + title: qsTr("group_infos_media_docs") + entries: [ + { + icon: AppIcons.photo, + visible: true, + text: qsTr("group_infos_media_docs"), + color: DefaultStyle.main2_600, + showRightArrow: true, + action: function() { + console.log("group_infos_shared_media") + } + }, + { + icon: AppIcons.pdf, + visible: true, + text: qsTr("group_infos_shared_docs"), + color: DefaultStyle.main2_600, + showRightArrow: true, + action: function() { + console.log("Opening shared documents") + } + } + ] + } + + ChatInfoActionsGroup { + Layout.leftMargin: Math.round(15 * DefaultStyle.dp) + Layout.rightMargin: Math.round(12 * DefaultStyle.dp) + Layout.topMargin: Math.round(17 * DefaultStyle.dp) + title: qsTr("group_infos_other_actions") + entries: [ + { + icon: AppIcons.clockCountDown, + visible: true, + text: mainItem.chat.core.ephemeralEnabled ? qsTr("group_infos_disable_ephemerals") : qsTr("group_infos_enable_ephemerals"), + color: DefaultStyle.main2_600, + showRightArrow: false, + action: function() { + mainItem.chat.core.ephemeralEnabled = !mainItem.chat.core.ephemeralEnabled + } + }, + { + icon: AppIcons.signOut, + visible: !mainItem.chat.core.isReadOnly, + text: qsTr("group_infos_leave_room"), + color: DefaultStyle.main2_600, + showRightArrow: false, + action: function() { + //: Leave Chat Room ? + mainWindow.showConfirmationLambdaPopup(qsTr("group_infos_leave_room_toast_title"), + //: All the messages will be removed from the chat room. Do you want to continue ? + qsTr("group_infos_leave_room_toast_message"), + "", + function(confirmed) { + if (confirmed) { + mainItem.chat.core.lLeave() + } + }) + } + }, + { + icon: AppIcons.trashCan, + visible: true, + text: qsTr("group_infos_delete_history"), + color: DefaultStyle.danger_500main, + showRightArrow: false, + action: function() { + //: Delete history ? + mainWindow.showConfirmationLambdaPopup(qsTr("group_infos_delete_history_toast_title"), + //: All the messages will be removed from the chat room. Do you want to continue ? + qsTr("group_infos_delete_history_toast_message"), + "", + function(confirmed) { + if (confirmed) { + mainItem.chat.core.lDeleteHistory() + } + }) + } + } + ] + } + + Item { + Layout.fillHeight: true + } +} diff --git a/Linphone/view/Page/Layout/Chat/OneOneConversationInfos.qml b/Linphone/view/Page/Layout/Chat/OneOneConversationInfos.qml new file mode 100644 index 000000000..a40e46993 --- /dev/null +++ b/Linphone/view/Page/Layout/Chat/OneOneConversationInfos.qml @@ -0,0 +1,178 @@ +import QtCore +import QtQuick +import QtQuick.Controls.Basic as Control +import QtQuick.Dialogs +import QtQuick.Effects +import QtQuick.Layouts +import Linphone +import UtilsCpp +import SettingsCpp +import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle + +ColumnLayout { + id: mainItem + property var chat + property var contactObj: chat ? UtilsCpp.findFriendByAddress(chat?.core.peerAddress) : null + spacing: 0 + + Avatar { + Layout.alignment: Qt.AlignHCenter + contact: contactObj?.value || null + displayNameVal: contact ? "" : mainItem.chat.core.avatarUri + Layout.preferredWidth: Math.round(100 * DefaultStyle.dp) + Layout.preferredHeight: Math.round(100 * DefaultStyle.dp) + } + + Text { + font: Typography.p1 + color: DefaultStyle.main2_700 + text: mainItem.chat?.core.title || "" + Layout.alignment: Qt.AlignHCenter + Layout.topMargin: Math.round(11 * DefaultStyle.dp) + } + + Text { + font: Typography.p3 + color: DefaultStyle.main2_700 + text: mainItem.chat?.core.peerAddress + Layout.alignment: Qt.AlignHCenter + Layout.topMargin: Math.round(5 * DefaultStyle.dp) + } + + Text { + font: Typography.p3 + color: contactObj?.value.core.presenceColor + text: contactObj?.value.core.presenceStatus + Layout.alignment: Qt.AlignHCenter + Layout.topMargin: Math.round(5 * DefaultStyle.dp) + } + + + RowLayout { + spacing: Math.round(55 * DefaultStyle.dp) + Layout.alignment: Qt.AlignHCenter + Layout.topMargin: Math.round(30 * DefaultStyle.dp) + LabelButton { + width: Math.round(56 * DefaultStyle.dp) + height: Math.round(56 * DefaultStyle.dp) + button.icon.width: Math.round(24 * DefaultStyle.dp) + button.icon.height: Math.round(24 * DefaultStyle.dp) + button.icon.source: AppIcons.phone + //: "Appel" + label: qsTr("one_one_infos_call") + button.onClicked: { + mainWindow.startCallWithContact(contactObj.value, false, mainItem) + } + } + LabelButton { + width: Math.round(56 * DefaultStyle.dp) + height: Math.round(56 * DefaultStyle.dp) + button.icon.width: Math.round(24 * DefaultStyle.dp) + button.icon.height: Math.round(24 * DefaultStyle.dp) + button.icon.source: chat.core.muted ? AppIcons.bell : AppIcons.bellSlash + //: "Sourdine" + label: qsTr("one_one_infos_mute") + button.onClicked: { + chat.core.muted = !chat.core.muted + } + } + LabelButton { + width: Math.round(56 * DefaultStyle.dp) + height: Math.round(56 * DefaultStyle.dp) + button.icon.width: Math.round(24 * DefaultStyle.dp) + button.icon.height: Math.round(24 * DefaultStyle.dp) + button.icon.source: AppIcons.search + //: "Rechercher" + label: qsTr("one_one_infos_search") + button.onClicked: { + //TODO + } + } + } + + ChatInfoActionsGroup { + Layout.leftMargin: Math.round(15 * DefaultStyle.dp) + Layout.rightMargin: Math.round(12 * DefaultStyle.dp) + Layout.topMargin: Math.round(30 * DefaultStyle.dp) + title: qsTr("one_one_infos_media_docs") + entries: [ + { + icon: AppIcons.photo, + visible: true, + text: qsTr("one_one_infos_shared_media"), + color: DefaultStyle.main2_600, + showRightArrow: true, + action: function() { + console.log("Opening shared media") + } + }, + { + icon: AppIcons.pdf, + visible: true, + text: qsTr("one_one_infos_shared_docs"), + color: DefaultStyle.main2_600, + showRightArrow: true, + action: function() { + console.log("Opening shared documents") + } + } + ] + } + + ChatInfoActionsGroup { + Layout.leftMargin: Math.round(15 * DefaultStyle.dp) + Layout.rightMargin: Math.round(12 * DefaultStyle.dp) + Layout.topMargin: Math.round(17 * DefaultStyle.dp) + title: qsTr("one_one_infos_other_actions") + entries: [ + { + icon: AppIcons.adressBook, + visible: true, + text: contactObj.value ? qsTr("one_one_infos_open_contact") : qsTr("one_one_infos_create_contact"), + color: DefaultStyle.main2_600, + showRightArrow: false, + action: function() { + // contactObj.value = friendGui + if (contactObj.value) + mainWindow.displayContactPage(contactObj.value.core.defaultAddress) + else + mainWindow.displayCreateContactPage("",chat.core.peerAddress) + //mainItem.createContactRequested(contactDetail.contactName, chat.core.peerAddress) + } + }, + { + icon: AppIcons.clockCountDown, + visible: true, + text: mainItem.chat.core.ephemeralEnabled ? qsTr("one_one_infos_disable_ephemerals") : qsTr("one_one_infos_enable_ephemerals"), + color: DefaultStyle.main2_600, + showRightArrow: false, + action: function() { + mainItem.chat.core.ephemeralEnabled = !mainItem.chat.core.ephemeralEnabled + } + }, + { + icon: AppIcons.trashCan, + visible: true, + text: qsTr("one_one_infos_delete_history"), + color: DefaultStyle.danger_500main, + showRightArrow: false, + action: function() { + //: Delete history ? + mainWindow.showConfirmationLambdaPopup(qsTr("one_one_infos_delete_history_toast_title"), + //: All the messages will be removed from the chat room. Do you want to continue ? + qsTr("one_one_infos_delete_history_toast_message"), + "", + function(confirmed) { + if (confirmed) { + mainItem.chat.core.lDeleteHistory() + } + }) + } + } + ] + } + + Item { + Layout.fillHeight: true + } +} diff --git a/Linphone/view/Page/Window/Main/MainWindow.qml b/Linphone/view/Page/Window/Main/MainWindow.qml index 8f03bbb85..5e90c5dd1 100644 --- a/Linphone/view/Page/Window/Main/MainWindow.qml +++ b/Linphone/view/Page/Window/Main/MainWindow.qml @@ -56,6 +56,10 @@ AbstractWindow { openMainPage() mainWindowStackView.currentItem.displayContactPage(contactAddress) } + function displayCreateContactPage(name, contactAddress) { + openMainPage() + mainWindowStackView.currentItem.createContact(name, contactAddress) + } function displayChatPage(contactAddress) { openMainPage() mainWindowStackView.currentItem.displayChatPage(contactAddress) diff --git a/Linphone/view/Style/AppIcons.qml b/Linphone/view/Style/AppIcons.qml index 1305cb3bc..d55d0acf9 100644 --- a/Linphone/view/Style/AppIcons.qml +++ b/Linphone/view/Style/AppIcons.qml @@ -149,6 +149,7 @@ QtObject { property string clockCountDown: "image://internal/clock-countdown.svg" property string reply: "image://internal/reply.svg" property string forward: "image://internal/forward.svg" - - + property string search: "image://internal/search.svg" + property string pdf: "image://internal/pdf.svg" + property string photo: "image://internal/photo.svg" } diff --git a/Linphone/view/Style/Typography.qml b/Linphone/view/Style/Typography.qml index 2c979b566..0bba93392 100644 --- a/Linphone/view/Style/Typography.qml +++ b/Linphone/view/Style/Typography.qml @@ -80,6 +80,13 @@ QtObject { weight: Math.min(Math.round(400 * DefaultStyle.dp), 1000) }) + // Text/P1 - Paragraph text + property font p1b: Qt.font( { + family: DefaultStyle.defaultFont, + pixelSize: Math.round(15 * DefaultStyle.dp), + weight: Math.min(Math.round(400 * DefaultStyle.dp), 1000) + }) + // Button/B1 - Big Button property font b1: Qt.font( { family: DefaultStyle.defaultFont,