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