Misc cleanups

This commit is contained in:
Christopher T. Johnson
2024-04-16 10:48:46 -04:00
parent 3739231e65
commit 814206148a

View File

@@ -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