Misc cleanups
This commit is contained in:
@@ -7,6 +7,7 @@ from PyQt6.QtWidgets import QWidget
|
||||
|
||||
class Fragment:
|
||||
"""A fragment of text to be displayed"""
|
||||
_indentAmount = 35
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
@@ -50,7 +51,7 @@ class Fragment:
|
||||
return self.__repr__()
|
||||
|
||||
def size(self, width: int) -> QSize:
|
||||
return self.repaintEvent(width)
|
||||
return self.paintEvent(width)
|
||||
|
||||
def height(self, width: int) -> int:
|
||||
return self.size(width).height()
|
||||
@@ -62,13 +63,13 @@ class Fragment:
|
||||
return f"({self._position.x()}, {self._position.y()}): {self._text}"
|
||||
|
||||
@overload
|
||||
def repaintEvent(self, widthSrc:int) -> QSize:
|
||||
def paintEvent(self, widthSrc:int) -> QSize:
|
||||
...
|
||||
@overload
|
||||
def repaintEvent(self, widthSrc: QPainter) -> int:
|
||||
def paintEvent(self, widthSrc: QPainter) -> int:
|
||||
...
|
||||
|
||||
def repaintEvent(self, widthSrc) -> int|QSize:
|
||||
def paintEvent(self, widthSrc) -> int|QSize:
|
||||
if isinstance(widthSrc, QPainter):
|
||||
viewportWidth = widthSrc.viewport().width()
|
||||
painter = widthSrc
|
||||
@@ -85,7 +86,7 @@ class Fragment:
|
||||
width = viewportWidth - left
|
||||
height = 2000
|
||||
rect = QRect(left, top, width, height)
|
||||
indent = self._indent * 30
|
||||
indent = self._indent * self._indentAmount
|
||||
flags = (
|
||||
Qt.AlignmentFlag.AlignLeft
|
||||
| Qt.AlignmentFlag.AlignBaseline
|
||||
@@ -93,11 +94,6 @@ class Fragment:
|
||||
boundingNoWrap = fm.boundingRect(
|
||||
rect, flags|Qt.TextFlag.TextSingleLine, self._text
|
||||
)
|
||||
flags = (
|
||||
Qt.AlignmentFlag.AlignLeft
|
||||
| Qt.AlignmentFlag.AlignBaseline
|
||||
| Qt.TextFlag.TextWordWrap
|
||||
)
|
||||
bounding = fm.boundingRect(
|
||||
rect, flags|Qt.TextFlag.TextWordWrap, self._text
|
||||
)
|
||||
@@ -117,25 +113,34 @@ class Fragment:
|
||||
text[char]
|
||||
)
|
||||
char += 1
|
||||
remainingText = text[lastSpace:]
|
||||
if lastSpace > 0:
|
||||
remainingText = text[lastSpace+1:]
|
||||
text = text[:lastSpace]
|
||||
|
||||
size = boundingNoWrap.size()
|
||||
|
||||
boundingNoWrap = fm.boundingRect(
|
||||
rect, flags|Qt.TextFlag.TextSingleLine, text
|
||||
)
|
||||
rect.setSize(boundingNoWrap.size())
|
||||
|
||||
|
||||
if remainingText != '':
|
||||
top += size.height()
|
||||
remainingRect = QRect(
|
||||
indent, top,
|
||||
viewportWidth - indent, height
|
||||
)
|
||||
boundingRemaingRect = fm.boundingRect(
|
||||
remainingRect, flags | Qt.TextFlag.TextWordWrap, remainingText
|
||||
)
|
||||
|
||||
size = size.grownBy(
|
||||
QMargins(
|
||||
0,0,0,
|
||||
fm.boundingRect(
|
||||
remainingRect, flags | Qt.TextFlag.TextWordWrap, remainingText
|
||||
).height()
|
||||
0,0,0, boundingRemaingRect.height()
|
||||
)
|
||||
)
|
||||
remainingRect.setSize(boundingRemaingRect.size())
|
||||
size = size.grownBy(self._margin)
|
||||
size = size.grownBy(self._border)
|
||||
size = size.grownBy(self._padding)
|
||||
@@ -151,9 +156,18 @@ class Fragment:
|
||||
start = bounding.bottomLeft()
|
||||
end = bounding.bottomRight()
|
||||
painter.drawLine(start, end)
|
||||
|
||||
painter.setPen(self._color)
|
||||
if self._background.isValid():
|
||||
brush = painter.brush()
|
||||
brush.setColor(self._background)
|
||||
brush.setStyle(Qt.BrushStyle.SolidPattern)
|
||||
painter.setBrush(brush)
|
||||
painter.fillRect(rect,brush)
|
||||
painter.drawText(rect, flags, text)
|
||||
if remainingText:
|
||||
if self._background.isValid():
|
||||
painter.fillRect(remainingRect, brush)
|
||||
painter.drawText(remainingRect, flags|Qt.TextFlag.TextWordWrap, remainingText)
|
||||
painter.restore()
|
||||
return size.height()
|
||||
@@ -348,6 +362,9 @@ class Fragment:
|
||||
def indent(self) -> int:
|
||||
return self._indent
|
||||
|
||||
def pixelIndent(self) -> int:
|
||||
return self._indent * self._indentAmount
|
||||
|
||||
class Line:
|
||||
parseText = None
|
||||
def __init__(self) -> None:
|
||||
@@ -364,17 +381,16 @@ class Line:
|
||||
)
|
||||
@classmethod
|
||||
def setParseText(cls, call) -> None:
|
||||
print(call)
|
||||
cls.parseText = call
|
||||
return
|
||||
|
||||
def repaintEvent(self, painter: QPainter) -> int:
|
||||
def paintEvent(self, painter: QPainter) -> int:
|
||||
#
|
||||
# we do not have an event field because we are not a true widget
|
||||
#
|
||||
lineSpacing = 0
|
||||
for frag in self._fragments:
|
||||
ls = frag.repaintEvent(painter)
|
||||
ls = frag.paintEvent(painter)
|
||||
if ls > lineSpacing:
|
||||
lineSpacing = ls
|
||||
return lineSpacing
|
||||
@@ -428,7 +444,7 @@ class Line:
|
||||
self._leading = leading
|
||||
x = 0
|
||||
for frag in self._fragments:
|
||||
left = frag.indent() * 30
|
||||
left = frag.pixelIndent()
|
||||
if x < left:
|
||||
x = left
|
||||
#
|
||||
@@ -483,7 +499,7 @@ class Definition(QWidget):
|
||||
|
||||
def setWord(self, word: Any) -> None:
|
||||
self._word = word
|
||||
lines = word.get_def()
|
||||
lines:list[Line] = word.get_def()
|
||||
assert lines is not None
|
||||
self._lines = lines
|
||||
self._buttons: list[Fragment] = []
|
||||
@@ -558,6 +574,6 @@ class Definition(QWidget):
|
||||
transform = QTransform()
|
||||
transform.translate(0, base)
|
||||
painter.setTransform(transform)
|
||||
base += line.repaintEvent(painter)
|
||||
base += line.paintEvent(painter)
|
||||
painter.restore()
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user