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