Add more status icon shapes

This commit is contained in:
Veronica Berglyd Olsen
2024-04-11 11:17:03 +02:00
parent f4decae77f
commit 6cf83bb381
4 changed files with 132 additions and 40 deletions
+19 -7
View File
@@ -269,13 +269,25 @@ class nwLabels:
nwBuildFmt.J_NWD: ".json", nwBuildFmt.J_NWD: ".json",
} }
STATUS_SHAPES = { STATUS_SHAPES = {
nwStatusShape.SQUARE: QT_TRANSLATE_NOOP("Constant", "Square"), nwStatusShape.SQUARE: QT_TRANSLATE_NOOP("Constant", "Square"),
nwStatusShape.CIRCLE: QT_TRANSLATE_NOOP("Constant", "Circle"), nwStatusShape.CIRCLE_Q: QT_TRANSLATE_NOOP("Constant", "Circle, 1/4"),
nwStatusShape.TRIANGLE: QT_TRANSLATE_NOOP("Constant", "Triangle"), nwStatusShape.CIRCLE_H: QT_TRANSLATE_NOOP("Constant", "Circle, Half"),
nwStatusShape.DIAMOND: QT_TRANSLATE_NOOP("Constant", "Diamond"), nwStatusShape.CIRCLE_T: QT_TRANSLATE_NOOP("Constant", "Circle, 3/4"),
nwStatusShape.PENTAGON: QT_TRANSLATE_NOOP("Constant", "Pentagon"), nwStatusShape.CIRCLE: QT_TRANSLATE_NOOP("Constant", "Circle, Full"),
nwStatusShape.STAR: QT_TRANSLATE_NOOP("Constant", "Star"), nwStatusShape.TRIANGLE: QT_TRANSLATE_NOOP("Constant", "Triangle"),
nwStatusShape.PACMAN: QT_TRANSLATE_NOOP("Constant", "Pacman"), nwStatusShape.NABLA: QT_TRANSLATE_NOOP("Constant", "Nabla"),
nwStatusShape.DIAMOND: QT_TRANSLATE_NOOP("Constant", "Diamond"),
nwStatusShape.PENTAGON: QT_TRANSLATE_NOOP("Constant", "Pentagon"),
nwStatusShape.STAR: QT_TRANSLATE_NOOP("Constant", "Star"),
nwStatusShape.PACMAN: QT_TRANSLATE_NOOP("Constant", "Pacman"),
nwStatusShape.BARS_1: QT_TRANSLATE_NOOP("Constant", "1 Bar"),
nwStatusShape.BARS_2: QT_TRANSLATE_NOOP("Constant", "2 Bars"),
nwStatusShape.BARS_3: QT_TRANSLATE_NOOP("Constant", "3 Bars"),
nwStatusShape.BARS_4: QT_TRANSLATE_NOOP("Constant", "4 Bars"),
nwStatusShape.BLOCK_1: QT_TRANSLATE_NOOP("Constant", "1 Block"),
nwStatusShape.BLOCK_2: QT_TRANSLATE_NOOP("Constant", "2 Blocks"),
nwStatusShape.BLOCK_3: QT_TRANSLATE_NOOP("Constant", "3 Blocks"),
nwStatusShape.BLOCK_4: QT_TRANSLATE_NOOP("Constant", "4 Blocks"),
} }
FILE_FILTERS = { FILE_FILTERS = {
"*.txt": QT_TRANSLATE_NOOP("Constant", "Text files"), "*.txt": QT_TRANSLATE_NOOP("Constant", "Text files"),
+63 -19
View File
@@ -244,48 +244,92 @@ class _ShapeCache:
if shape in self._cache: if shape in self._cache:
return self._cache[shape] return self._cache[shape]
def circ(r: float, a: float, x: float, y: float) -> QPointF: def polar(r: float, a: float, x: float, y: float) -> QPointF:
# Converts polar coordinates to cartesian
# print(round(x+r*sin(pi*a/180), 2), round(y-r*cos(pi*a/180), 2)) # print(round(x+r*sin(pi*a/180), 2), round(y-r*cos(pi*a/180), 2))
return QPointF(round(x+r*sin(pi*a/180), 2), round(y-r*cos(pi*a/180), 2)) return QPointF(x+r*sin(pi*a/180), y-r*cos(pi*a/180))
path = QPainterPath() path = QPainterPath()
if shape == nwStatusShape.SQUARE: if shape == nwStatusShape.SQUARE:
path.addRoundedRect(2.0, 2.0, 44.0, 44.0, 4.0, 4.0) path.addRoundedRect(2.0, 2.0, 44.0, 44.0, 4.0, 4.0)
elif shape == nwStatusShape.CIRCLE_Q:
path.moveTo(24.0, 24.0)
path.arcTo(2.0, 2.0, 44.0, 44.0, 0.0, 90.0)
elif shape == nwStatusShape.CIRCLE_H:
path.moveTo(24.0, 24.0)
path.arcTo(2.0, 2.0, 44.0, 44.0, -90.0, 180.0)
elif shape == nwStatusShape.CIRCLE_T:
path.moveTo(24.0, 24.0)
path.arcTo(2.0, 2.0, 44.0, 44.0, -180.0, 270.0)
elif shape == nwStatusShape.CIRCLE: elif shape == nwStatusShape.CIRCLE:
path.addEllipse(2.0, 2.0, 44.0, 44.0) path.addEllipse(2.0, 2.0, 44.0, 44.0)
elif shape == nwStatusShape.TRIANGLE: elif shape == nwStatusShape.TRIANGLE:
path.addPolygon(QPolygonF([ path.addPolygon(QPolygonF([
circ(23.0, 0.0, 24.0, 26.0), polar(23.0, 0.0, 24.0, 26.0),
circ(23.0, 120.0, 24.0, 26.0), polar(23.0, 120.0, 24.0, 26.0),
circ(23.0, 240.0, 24.0, 26.0), polar(23.0, 240.0, 24.0, 26.0),
]))
elif shape == nwStatusShape.NABLA:
path.addPolygon(QPolygonF([
polar(23.0, 180.0, 24.0, 26.0),
polar(23.0, 300.0, 24.0, 26.0),
polar(23.0, 60.0, 24.0, 26.0),
])) ]))
elif shape == nwStatusShape.DIAMOND: elif shape == nwStatusShape.DIAMOND:
path.addPolygon(QPolygonF([ path.addPolygon(QPolygonF([
circ(22.0, 0.0, 24.0, 24.0), polar(22.0, 0.0, 24.0, 24.0),
circ(20.0, 90.0, 24.0, 24.0), polar(20.0, 90.0, 24.0, 24.0),
circ(22.0, 180.0, 24.0, 24.0), polar(22.0, 180.0, 24.0, 24.0),
circ(20.0, 270.0, 24.0, 24.0), polar(20.0, 270.0, 24.0, 24.0),
])) ]))
elif shape == nwStatusShape.PENTAGON: elif shape == nwStatusShape.PENTAGON:
path.addPolygon(QPolygonF([ path.addPolygon(QPolygonF([
circ(23.0, 0.0, 24.0, 24.5), polar(23.0, 0.0, 24.0, 24.5),
circ(23.0, 72.0, 24.0, 24.5), polar(23.0, 72.0, 24.0, 24.5),
circ(23.0, 144.0, 24.0, 24.5), polar(23.0, 144.0, 24.0, 24.5),
circ(23.0, 216.0, 24.0, 24.5), polar(23.0, 216.0, 24.0, 24.5),
circ(23.0, 288.0, 24.0, 24.5), polar(23.0, 288.0, 24.0, 24.5),
])) ]))
elif shape == nwStatusShape.STAR: elif shape == nwStatusShape.STAR:
path.addPolygon(QPolygonF([ path.addPolygon(QPolygonF([
circ(24.0, 0.0, 24.0, 24.5), polar(24.0, 0.0, 24.0, 24.5), polar(12.0, 36.0, 24.0, 24.5),
circ(24.0, 144.0, 24.0, 24.5), polar(24.0, 72.0, 24.0, 24.5), polar(12.0, 108.0, 24.0, 24.5),
circ(24.0, 288.0, 24.0, 24.5), polar(24.0, 144.0, 24.0, 24.5), polar(12.0, 180.0, 24.0, 24.5),
circ(24.0, 72.0, 24.0, 24.5), polar(24.0, 216.0, 24.0, 24.5), polar(12.0, 252.0, 24.0, 24.5),
circ(24.0, 216.0, 24.0, 24.5), polar(24.0, 288.0, 24.0, 24.5), polar(12.0, 314.0, 24.0, 24.5),
])) ]))
path.setFillRule(Qt.FillRule.WindingFill) path.setFillRule(Qt.FillRule.WindingFill)
elif shape == nwStatusShape.PACMAN: elif shape == nwStatusShape.PACMAN:
path.moveTo(24.0, 24.0) path.moveTo(24.0, 24.0)
path.arcTo(2.0, 2.0, 44.0, 44.0, 40.0, 280.0) path.arcTo(2.0, 2.0, 44.0, 44.0, 40.0, 280.0)
elif shape == nwStatusShape.BARS_1:
path.addRoundedRect(2.0, 2.0, 8.0, 44.0, 4.0, 4.0)
elif shape == nwStatusShape.BARS_2:
path.addRoundedRect(2.0, 2.0, 8.0, 44.0, 4.0, 4.0)
path.addRoundedRect(14.0, 2.0, 8.0, 44.0, 4.0, 4.0)
elif shape == nwStatusShape.BARS_3:
path.addRoundedRect(2.0, 2.0, 8.0, 44.0, 4.0, 4.0)
path.addRoundedRect(14.0, 2.0, 8.0, 44.0, 4.0, 4.0)
path.addRoundedRect(26.0, 2.0, 8.0, 44.0, 4.0, 4.0)
elif shape == nwStatusShape.BARS_4:
path.addRoundedRect(2.0, 2.0, 8.0, 44.0, 4.0, 4.0)
path.addRoundedRect(14.0, 2.0, 8.0, 44.0, 4.0, 4.0)
path.addRoundedRect(26.0, 2.0, 8.0, 44.0, 4.0, 4.0)
path.addRoundedRect(38.0, 2.0, 8.0, 44.0, 4.0, 4.0)
elif shape == nwStatusShape.BLOCK_1:
path.addRoundedRect(2.0, 2.0, 20.0, 20.0, 4.0, 4.0)
elif shape == nwStatusShape.BLOCK_2:
path.addRoundedRect(2.0, 2.0, 20.0, 20.0, 4.0, 4.0)
path.addRoundedRect(24.0, 2.0, 20.0, 20.0, 4.0, 4.0)
elif shape == nwStatusShape.BLOCK_3:
path.addRoundedRect(2.0, 2.0, 20.0, 20.0, 4.0, 4.0)
path.addRoundedRect(2.0, 24.0, 20.0, 20.0, 4.0, 4.0)
path.addRoundedRect(24.0, 2.0, 20.0, 20.0, 4.0, 4.0)
elif shape == nwStatusShape.BLOCK_4:
path.addRoundedRect(2.0, 2.0, 20.0, 20.0, 4.0, 4.0)
path.addRoundedRect(2.0, 24.0, 20.0, 20.0, 4.0, 4.0)
path.addRoundedRect(24.0, 2.0, 20.0, 20.0, 4.0, 4.0)
path.addRoundedRect(24.0, 24.0, 20.0, 20.0, 4.0, 4.0)
self._cache[shape] = path self._cache[shape] = path
+19 -7
View File
@@ -209,12 +209,24 @@ class nwBuildFmt(Enum):
class nwStatusShape(Enum): class nwStatusShape(Enum):
SQUARE = 0 SQUARE = 0
CIRCLE = 1 CIRCLE_Q = 1
TRIANGLE = 2 CIRCLE_H = 2
DIAMOND = 3 CIRCLE_T = 3
PENTAGON = 4 CIRCLE = 4
STAR = 5 TRIANGLE = 5
PACMAN = 6 NABLA = 6
DIAMOND = 7
PENTAGON = 8
STAR = 9
PACMAN = 10
BARS_1 = 11
BARS_2 = 12
BARS_3 = 13
BARS_4 = 14
BLOCK_1 = 15
BLOCK_2 = 16
BLOCK_3 = 17
BLOCK_4 = 18
# END Enum nwStatusShape # END Enum nwStatusShape
+31 -7
View File
@@ -374,21 +374,45 @@ def testCoreStatus_ShapeCache():
shapes = _ShapeCache() shapes = _ShapeCache()
# Generate all shapes # Generate all shapes
square = shapes.getShape(nwStatusShape.SQUARE) square = shapes.getShape(nwStatusShape.SQUARE)
circle = shapes.getShape(nwStatusShape.CIRCLE) circleQ = shapes.getShape(nwStatusShape.CIRCLE_Q)
triangle = shapes.getShape(nwStatusShape.TRIANGLE) circleH = shapes.getShape(nwStatusShape.CIRCLE_H)
diamond = shapes.getShape(nwStatusShape.DIAMOND) circleT = shapes.getShape(nwStatusShape.CIRCLE_T)
pentagon = shapes.getShape(nwStatusShape.PENTAGON) circle = shapes.getShape(nwStatusShape.CIRCLE)
star = shapes.getShape(nwStatusShape.STAR) triangle = shapes.getShape(nwStatusShape.TRIANGLE)
pacman = shapes.getShape(nwStatusShape.PACMAN) nabla = shapes.getShape(nwStatusShape.NABLA)
diamond = shapes.getShape(nwStatusShape.DIAMOND)
pentagon = shapes.getShape(nwStatusShape.PENTAGON)
star = shapes.getShape(nwStatusShape.STAR)
pacman = shapes.getShape(nwStatusShape.PACMAN)
bars1 = shapes.getShape(nwStatusShape.BARS_1)
bars2 = shapes.getShape(nwStatusShape.BARS_2)
bars3 = shapes.getShape(nwStatusShape.BARS_3)
bars4 = shapes.getShape(nwStatusShape.BARS_4)
block1 = shapes.getShape(nwStatusShape.BLOCK_1)
block2 = shapes.getShape(nwStatusShape.BLOCK_2)
block3 = shapes.getShape(nwStatusShape.BLOCK_3)
block4 = shapes.getShape(nwStatusShape.BLOCK_4)
# Request again should return from cache # Request again should return from cache
assert shapes.getShape(nwStatusShape.SQUARE) is square assert shapes.getShape(nwStatusShape.SQUARE) is square
assert shapes.getShape(nwStatusShape.CIRCLE_Q) is circleQ
assert shapes.getShape(nwStatusShape.CIRCLE_H) is circleH
assert shapes.getShape(nwStatusShape.CIRCLE_T) is circleT
assert shapes.getShape(nwStatusShape.CIRCLE) is circle assert shapes.getShape(nwStatusShape.CIRCLE) is circle
assert shapes.getShape(nwStatusShape.TRIANGLE) is triangle assert shapes.getShape(nwStatusShape.TRIANGLE) is triangle
assert shapes.getShape(nwStatusShape.NABLA) is nabla
assert shapes.getShape(nwStatusShape.DIAMOND) is diamond assert shapes.getShape(nwStatusShape.DIAMOND) is diamond
assert shapes.getShape(nwStatusShape.PENTAGON) is pentagon assert shapes.getShape(nwStatusShape.PENTAGON) is pentagon
assert shapes.getShape(nwStatusShape.STAR) is star assert shapes.getShape(nwStatusShape.STAR) is star
assert shapes.getShape(nwStatusShape.PACMAN) is pacman assert shapes.getShape(nwStatusShape.PACMAN) is pacman
assert shapes.getShape(nwStatusShape.BARS_1) is bars1
assert shapes.getShape(nwStatusShape.BARS_2) is bars2
assert shapes.getShape(nwStatusShape.BARS_3) is bars3
assert shapes.getShape(nwStatusShape.BARS_4) is bars4
assert shapes.getShape(nwStatusShape.BLOCK_1) is block1
assert shapes.getShape(nwStatusShape.BLOCK_2) is block2
assert shapes.getShape(nwStatusShape.BLOCK_3) is block3
assert shapes.getShape(nwStatusShape.BLOCK_4) is block4
# END Test testCoreStatus_ShapeCache # END Test testCoreStatus_ShapeCache