From b7d6fcbba6315f2969169d7792987092d6196a0f Mon Sep 17 00:00:00 2001
From: morkolai <nikolai-mork@live.no>
Date: Sat, 18 Apr 2020 08:20:43 +0200
Subject: [PATCH] =?UTF-8?q?#96=20WIP=20Pr=C3=B8vde=20=C3=A5=20bruke=20Text?=
 =?UTF-8?q?EditWithSizeOfcontent?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 soitool/modules/module_phonebook.py | 57 +++++++++++++++++++----------
 1 file changed, 38 insertions(+), 19 deletions(-)

diff --git a/soitool/modules/module_phonebook.py b/soitool/modules/module_phonebook.py
index 0675af6..67d8d08 100644
--- a/soitool/modules/module_phonebook.py
+++ b/soitool/modules/module_phonebook.py
@@ -149,6 +149,39 @@ class PhoneTable(QTableWidget):
         return QSize(width, heigth)
 
 
+class TextEditWithSizeOfContent(QTextEdit):
+    """Custom QTextEdit subclass that grows to fit it's text."""
+
+    def __init__(self, *arg, **kwargs):
+        super(TextEditWithSizeOfContent, self).__init__(*arg, **kwargs)
+
+        self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
+        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        # self.setLineWrapMode(QTextEdit.NoWrap)
+
+    def sizeHint(self, h):
+        """Give size hint using width of text."""
+        size = QSize(self.document().size().toSize())
+        # NOTE that the following is not respected for dimensions below 100,100
+        size.setWidth(max(10, self.table.get_needed_size().width()))
+        size.setHeight(max(100, size.height()))
+        return size
+
+    def resizeEvent(self, event):
+        """Update geometry before handling the resizeEvent.
+
+        See sources in module docstring.
+
+        Parameters
+        ----------
+        event : QResizeEvent
+            event sent by Qt
+        """
+        self.updateGeometry()
+        super(TextEditWithSizeOfContent, self).resizeEvent(event)
+
+
 class ComponentsPopup(QDialog):
     def __init__(self):
         super().__init__()
@@ -291,7 +324,7 @@ class PhonebookModule(ModuleBase, QWidget, metaclass=Meta):
         self.layout.addWidget(self.table)
         self.layout.addWidget(self.help_text)
         self.layout.addLayout(self.buttons)
-        self.layout.setAlignment(Qt.AlignLeft)
+        self.layout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
         self.setLayout(self.layout)
 
     def __create_usage_help_text(self):
@@ -303,26 +336,12 @@ class PhonebookModule(ModuleBase, QWidget, metaclass=Meta):
             textfield belonding to the table
         """
         txt = "Insert text here"
-        help_text = QTextEdit()
+        help_text = TextEditWithSizeOfContent()
         help_text.setPlaceholderText(txt)
 
-        def resize_help_text():
-            help_text.setFixedWidth(self.table.get_needed_size().width())
-            L = len(help_text.toPlainText())
-            We = help_text.fontWeight()
-            Wi = self.table.get_needed_size().width()
-            foo = (L * We) / Wi
-
-            if foo < 30:
-                help_text.setFixedHeight(100)
-            else:
-                help_text.setFixedHeight(foo * 3.3)
-
-        resize_help_text()
-
-        # help_text.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
-
-        help_text.cursorPositionChanged.connect(lambda: resize_help_text())
+        help_text.cursorPositionChanged.connect(
+            lambda: (help_text.sizeHint(), help_text.adjustSize())
+        )
 
         return help_text
 
-- 
GitLab