From 7084f6dda0e105885256352d19ea97c2b43938d7 Mon Sep 17 00:00:00 2001
From: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
Date: Fri, 4 Jun 2021 13:34:03 -0400
Subject: [PATCH] generalMenuItem: refinement on long text solution for
 menuItems

This will make sure that texts are aligned when
some of the texts grow longer (translations)

Change-Id: I28300c3eea01d539ca62c6532daf7d802931b425
---
 .../contextmenu/GeneralMenuItem.qml           | 48 ++++++++++++-------
 src/constant/JamiTheme.qml                    |  2 +-
 2 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/src/commoncomponents/contextmenu/GeneralMenuItem.qml b/src/commoncomponents/contextmenu/GeneralMenuItem.qml
index e72dd6160..d1069e991 100644
--- a/src/commoncomponents/contextmenu/GeneralMenuItem.qml
+++ b/src/commoncomponents/contextmenu/GeneralMenuItem.qml
@@ -45,6 +45,9 @@ MenuItem {
     property int leftBorderWidth: JamiTheme.menuItemsCommonBorderWidth
     property int rightBorderWidth: JamiTheme.menuItemsCommonBorderWidth
 
+    property int itemImageLeftMargin: 24
+    property int itemTextMargin: 20
+
     signal clicked
 
     contentItem: AbstractButton {
@@ -69,7 +72,7 @@ MenuItem {
                 id: contextMenuItemImage
 
                 Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
-                Layout.leftMargin: status === Image.Ready ? 24 : 0
+                Layout.leftMargin: status === Image.Ready ? itemImageLeftMargin : 0
 
                 visible: status === Image.Ready
 
@@ -81,28 +84,41 @@ MenuItem {
                 id: contextMenuItemText
 
                 Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
-                Layout.leftMargin: contextMenuItemImage.status === Image.Ready ? 20 : 10
-                Layout.rightMargin: contextMenuItemImage.status === Image.Ready ? 20 : 10
+                Layout.leftMargin: contextMenuItemImage.status === Image.Ready ?
+                                       itemTextMargin : itemTextMargin / 2
+                Layout.rightMargin: contextMenuItemImage.status === Image.Ready ?
+                                        itemTextMargin : itemTextMargin / 2
                 Layout.preferredHeight: itemPreferredHeight
-                Layout.preferredWidth: JamiTheme.contextMenuItemTextPreferredWidth
+                Layout.fillWidth: true
 
                 text: itemName
                 color: JamiTheme.textColor
                 font.pointSize: JamiTheme.textFontSize
                 horizontalAlignment: Text.AlignLeft
                 verticalAlignment: Text.AlignVCenter
-                elide: Text.ElideRight
-
-                onWidthChanged: {
-                    if (autoTextSizeAdjustment
-                            && width > contextMenuItemText.Layout.preferredWidth) {
-                        if (width > JamiTheme.contextMenuItemTextMaxWidth)
-                            contextMenuItemText.Layout.preferredWidth
-                                    = JamiTheme.contextMenuItemTextMaxWidth
-                        else
-                            contextMenuItemText.Layout.preferredWidth = width
-                        itemPreferredWidth += contextMenuItemText.Layout.preferredWidth
-                                - JamiTheme.contextMenuItemTextPreferredWidth
+
+                TextMetrics {
+                    id: contextMenuItemTextMetrics
+
+                    font: contextMenuItemText.font
+                    text: contextMenuItemText.text
+
+                    onBoundingRectChanged: {
+                        var sizeToCompare = itemPreferredWidth -
+                                (contextMenuItemImage.source.toString().length > 0 ?
+                                     itemTextMargin + itemImageLeftMargin + contextMenuItemImage.width :
+                                     itemTextMargin / 2)
+                        if (autoTextSizeAdjustment
+                                && boundingRect.width > sizeToCompare) {
+                            if (boundingRect.width > JamiTheme.contextMenuItemTextMaxWidth) {
+                                itemPreferredWidth += JamiTheme.contextMenuItemTextMaxWidth
+                                        - JamiTheme.contextMenuItemTextPreferredWidth
+                                        + itemTextMargin
+                                contextMenuItemText.elide = Text.ElideRight
+                            } else
+                                itemPreferredWidth += boundingRect.width + itemTextMargin
+                                        - sizeToCompare
+                        }
                     }
                 }
             }
diff --git a/src/constant/JamiTheme.qml b/src/constant/JamiTheme.qml
index 345fa04a1..d39931aec 100644
--- a/src/constant/JamiTheme.qml
+++ b/src/constant/JamiTheme.qml
@@ -198,7 +198,7 @@ Item {
     property real avatarSizeInCall: 130
     property real aboutButtonPreferredWidth: 150
     property real callButtonPreferredSize: 50
-    property real contextMenuItemTextPreferredWidth: 142
+    property real contextMenuItemTextPreferredWidth: 152
     property real contextMenuItemTextMaxWidth: 182
     property int participantCallInStatusViewWidth: 175
     property int participantCallInStatusViewHeight: 300
-- 
GitLab