diff --git a/BlocksScreen/lib/panels/controlTab.py b/BlocksScreen/lib/panels/controlTab.py
index 9e81d323..8bb36df6 100644
--- a/BlocksScreen/lib/panels/controlTab.py
+++ b/BlocksScreen/lib/panels/controlTab.py
@@ -272,12 +272,6 @@ def __init__(
)
)
- self.path = {
- "fan_cage": QtGui.QPixmap(":/fan_related/media/btn_icons/fan_cage.svg"),
- "blower": QtGui.QPixmap(":/fan_related/media/btn_icons/blower.svg"),
- "fan": QtGui.QPixmap(":/fan_related/media/btn_icons/fan.svg"),
- }
-
self.panel.cp_z_tilt_btn.clicked.connect(lambda: self.handle_ztilt())
self.printcores_page.pc_accept.clicked.connect(self.handle_swapcore)
diff --git a/BlocksScreen/lib/panels/filamentTab.py b/BlocksScreen/lib/panels/filamentTab.py
index 015e7915..ecb692c3 100644
--- a/BlocksScreen/lib/panels/filamentTab.py
+++ b/BlocksScreen/lib/panels/filamentTab.py
@@ -18,6 +18,7 @@
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_frame import BlocksCustomFrame
from lib.utils.blocks_linedit import BlocksCustomLinEdit
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from lib.utils.list_model import EntryDelegate, EntryListModel, ListItem
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -175,7 +176,7 @@ def _build_form_page(self) -> QtWidgets.QWidget:
back_btn = IconButton(page)
back_btn.setFixedSize(QtCore.QSize(60, 60))
back_btn.setFlat(True)
- back_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
back_btn.clicked.connect(lambda: self.popup.hide())
hdr.addWidget(back_btn)
@@ -290,9 +291,7 @@ def _update_swatch():
skip_btn.setText("Skip")
skip_btn.setFont(font)
skip_btn.clicked.connect(self.handle_skip_button)
- skip_btn.setPixmap(
- QtGui.QPixmap(":/arrow_icons/media/btn_icons/right_arrow.svg")
- )
+ skip_btn.setPixmap(BlocksPixmap.get(Icon.RIGHT_ARROW))
btn_row.addWidget(skip_btn)
accept_btn = BlocksCustomButton(page)
@@ -300,7 +299,7 @@ def _update_swatch():
accept_btn.setText("Accept")
accept_btn.setFont(font)
accept_btn.clicked.connect(self.on_popup_accept)
- accept_btn.setPixmap(QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg"))
+ accept_btn.setPixmap(BlocksPixmap.get(Icon.YES))
btn_row.addWidget(accept_btn)
root.addLayout(btn_row)
@@ -331,7 +330,7 @@ def _build_spool_page(self) -> QtWidgets.QWidget:
back_btn = IconButton(page)
back_btn.setFixedSize(QtCore.QSize(60, 60))
back_btn.setFlat(True)
- back_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
back_btn.clicked.connect(lambda: self.popup.hide())
hdr.addWidget(back_btn)
@@ -486,15 +485,13 @@ def _add_row(title_text: str) -> QtWidgets.QLabel:
self.skip_btn.setText("Skip")
self.skip_btn.setFixedSize(QtCore.QSize(230, 80))
self.skip_btn.setFont(font)
- self.skip_btn.setPixmap(
- QtGui.QPixmap(":/arrow_icons/media/btn_icons/right_arrow.svg")
- )
+ self.skip_btn.setPixmap(BlocksPixmap.get(Icon.RIGHT_ARROW))
self.skip_btn.clicked.connect(self.handle_skip_button)
self.accept_btn = BlocksCustomButton(frame_2)
self.accept_btn.setText("Accept")
self.accept_btn.setFixedSize(QtCore.QSize(230, 80))
- self.accept_btn.setPixmap(QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg"))
+ self.accept_btn.setPixmap(BlocksPixmap.get(Icon.YES))
self.accept_btn.setFont(font)
self.accept_btn.clicked.connect(lambda: self._on_spool_selected())
@@ -958,7 +955,7 @@ def setupUi(self):
self.fp_button_1.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight)
self.fp_button_1.setProperty(
"icon_pixmap",
- QtGui.QPixmap(":/filament_related/media/btn_icons/load_filament.svg"),
+ BlocksPixmap.get(Icon.LOAD_FILAMENT),
)
self.fp_button_1.setObjectName("fp_button_1")
@@ -973,7 +970,7 @@ def setupUi(self):
self.fp_button_2.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight)
self.fp_button_2.setProperty(
"icon_pixmap",
- QtGui.QPixmap(":/filament_related/media/btn_icons/base dados spool 1.svg"),
+ BlocksPixmap.get(Icon.BASE_DADOS_SPOOL_1),
)
self.fp_button_2.setObjectName("fp_button_2")
diff --git a/BlocksScreen/lib/panels/printTab.py b/BlocksScreen/lib/panels/printTab.py
index 41e83b4c..72ea79dd 100644
--- a/BlocksScreen/lib/panels/printTab.py
+++ b/BlocksScreen/lib/panels/printTab.py
@@ -17,6 +17,7 @@
from lib.panels.widgets.tunePage import TuneWidget
from lib.printer import Printer
from lib.utils.blocks_button import BlocksCustomButton
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.display_button import DisplayButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -541,9 +542,7 @@ def setupMainPrintPage(self) -> None:
self.main_print_btn.setStyleSheet("")
self.main_print_btn.setAutoDefault(False)
self.main_print_btn.setFlat(True)
- self.main_print_btn.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/print.svg")
- )
+ self.main_print_btn.setProperty("icon_pixmap", BlocksPixmap.get(Icon.PRINT))
self.main_print_btn.setObjectName("main_print_btn")
self.save_config_btn = DisplayButton(parent=self.print_page)
self.save_config_btn.setGeometry(QtCore.QRect(540, 20, 170, 50))
@@ -555,9 +554,7 @@ def setupMainPrintPage(self) -> None:
self.save_config_btn.setContextMenuPolicy(
QtCore.Qt.ContextMenuPolicy.NoContextMenu
)
- self.save_config_btn.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/save.svg")
- )
+ self.save_config_btn.setProperty("icon_pixmap", BlocksPixmap.get(Icon.SAVE))
self.save_config_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight)
self.save_config_btn.setStyleSheet("")
self.save_config_btn.setAutoDefault(False)
diff --git a/BlocksScreen/lib/panels/utilitiesTab.py b/BlocksScreen/lib/panels/utilitiesTab.py
index eaf85855..88f341b5 100644
--- a/BlocksScreen/lib/panels/utilitiesTab.py
+++ b/BlocksScreen/lib/panels/utilitiesTab.py
@@ -12,8 +12,9 @@
from lib.printer import Printer
from lib.ui.utilitiesStackedWidget_ui import Ui_utilitiesStackedWidget
from lib.utils.blocks_button import BlocksCustomButton
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.toggleAnimatedButton import ToggleAnimatedButton
-from PyQt6 import QtCore, QtGui, QtWidgets
+from PyQt6 import QtCore, QtWidgets
@dataclass
@@ -127,7 +128,7 @@ def __init__(
self._is_timeout_timer.timeout.connect(self._on_is_timeout)
# --- PixMap ---
- self._led_pixmap = QtGui.QPixmap(":/ui/media/btn_icons/LEDs.svg")
+ self._led_pixmap = BlocksPixmap.get(Icon.LEDS)
# --- UI Setup ---
self.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight)
self.panel.update_btn.clicked.connect(
@@ -204,16 +205,14 @@ def __init__(
self.printer.printer_config.connect(self.on_printer_config_received)
self.printer.gcode_move_update.connect(self.on_gcode_move_update)
- self.panel.update_btn.setPixmap(
- QtGui.QPixmap(":/system/media/btn_icons/update-software-icon.svg")
- )
+ self.panel.update_btn.setPixmap(BlocksPixmap.get(Icon.UPDATE_SOFTWARE_ICON))
# ---- Input Shaper ----
self.automatic_is = OptionCard(
self,
"Automatic\nInput Shaper",
"Automatic Input Shaper",
- QtGui.QPixmap(":/input_shaper/media/btn_icons/input_shaper_auto.svg"),
+ BlocksPixmap.get(Icon.INPUT_SHAPER_AUTO),
) # type: ignore
self.automatic_is.setObjectName("Automatic_IS_Card")
self.panel.is_content_layout.addWidget(
@@ -227,7 +226,7 @@ def __init__(
self,
"Manual\nInput Shaper",
"Manual Input Shaper",
- QtGui.QPixmap(":/input_shaper/media/btn_icons/input_shaper_manual.svg"),
+ BlocksPixmap.get(Icon.INPUT_SHAPER_MANUAL),
) # type: ignore
self.manual_is.setObjectName("Manual_IS_Card")
self.panel.is_content_layout.addWidget(
diff --git a/BlocksScreen/lib/panels/widgets/addFilamentPage.py b/BlocksScreen/lib/panels/widgets/addFilamentPage.py
index 08e4b09a..e7122d7b 100644
--- a/BlocksScreen/lib/panels/widgets/addFilamentPage.py
+++ b/BlocksScreen/lib/panels/widgets/addFilamentPage.py
@@ -7,6 +7,7 @@
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_frame import BlocksCustomFrame
from lib.utils.blocks_linedit import BlocksCustomLinEdit
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -242,7 +243,7 @@ def _make_field(parent: QtWidgets.QWidget) -> BlocksCustomLinEdit:
back_btn = IconButton(self)
back_btn.setFixedSize(QtCore.QSize(60, 60))
back_btn.setFlat(True)
- back_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
back_btn.clicked.connect(self.cancelled)
hdr.addWidget(back_btn)
root.addLayout(hdr)
@@ -367,8 +368,6 @@ def _make_field(parent: QtWidgets.QWidget) -> BlocksCustomLinEdit:
submit_btn.setFixedSize(220, 80)
submit_btn.setFont(_f(16))
submit_btn.setText("Add\nFilament")
- submit_btn.setPixmap(
- QtGui.QPixmap(":/filament_related/media/btn_icons/add filament.svg")
- )
+ submit_btn.setPixmap(BlocksPixmap.get(Icon.ADD_FILAMENT))
submit_btn.clicked.connect(self._on_submit)
root.addWidget(submit_btn, alignment=QtCore.Qt.AlignmentFlag.AlignCenter)
diff --git a/BlocksScreen/lib/panels/widgets/addSpoolPage.py b/BlocksScreen/lib/panels/widgets/addSpoolPage.py
index 9c082991..1d1a5b16 100644
--- a/BlocksScreen/lib/panels/widgets/addSpoolPage.py
+++ b/BlocksScreen/lib/panels/widgets/addSpoolPage.py
@@ -7,6 +7,7 @@
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_frame import BlocksCustomFrame
from lib.utils.blocks_linedit import BlocksCustomLinEdit
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from lib.utils.list_model import EntryDelegate, EntryListModel, ListItem
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -286,7 +287,7 @@ def _key_lbl(text: str) -> QtWidgets.QLabel:
back_btn = IconButton(self)
back_btn.setFixedSize(QtCore.QSize(60, 60))
back_btn.setFlat(True)
- back_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
back_btn.clicked.connect(self.cancelled)
hdr.addWidget(back_btn)
root.addLayout(hdr)
@@ -383,9 +384,7 @@ def _field(label: str) -> BlocksCustomLinEdit:
self._submit_btn.setText("Add Spool")
self._submit_btn.setEnabled(False)
self._submit_btn.clicked.connect(self._on_submit)
- self._submit_btn.setPixmap(
- QtGui.QPixmap(":/filament_related/media/btn_icons/add spool.svg")
- )
+ self._submit_btn.setPixmap(BlocksPixmap.get(Icon.ADD_SPOOL))
right_lay.addWidget(self._submit_btn)
body.addWidget(right_frame, 1)
diff --git a/BlocksScreen/lib/panels/widgets/amuPage.py b/BlocksScreen/lib/panels/widgets/amuPage.py
index e11729a8..7c561e1f 100644
--- a/BlocksScreen/lib/panels/widgets/amuPage.py
+++ b/BlocksScreen/lib/panels/widgets/amuPage.py
@@ -4,6 +4,7 @@
from devices.amu.models import GateInfo
from lib.panels.widgets.amuWidgets import SpoolCarousel, SpoolInfoPanel
from lib.utils.blocks_frame import BlocksCustomFrame
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -217,9 +218,7 @@ def _build_ui(self):
self.main_back_button.setSizePolicy(sizePolicy)
self.main_back_button.setMinimumSize(QtCore.QSize(60, 60))
self.main_back_button.setMaximumSize(QtCore.QSize(60, 60))
- self.main_back_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")
- )
+ self.main_back_button.setProperty("icon_pixmap", BlocksPixmap.get(Icon.BACK))
self.main_back_button.setObjectName("main_back_button")
self.filament_page_header_layout.addWidget(self.main_back_button)
diff --git a/BlocksScreen/lib/panels/widgets/amuWidgets.py b/BlocksScreen/lib/panels/widgets/amuWidgets.py
index 81e53404..46aa40c8 100644
--- a/BlocksScreen/lib/panels/widgets/amuWidgets.py
+++ b/BlocksScreen/lib/panels/widgets/amuWidgets.py
@@ -3,6 +3,7 @@
from devices.amu.models import GateStatus
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_linedit import BlocksCustomLinEdit
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -21,12 +22,8 @@ def __init__(self, parent=None):
self.weight = 0
self.setCheckable(True)
self.setMinimumHeight(100)
- self._icon = QtGui.QPixmap(
- ":/filament_related/media/btn_icons/loaded_spool.svg"
- )
- self._unloaded_icon = QtGui.QPixmap(
- ":/filament_related/media/btn_icons/half_spoll.svg"
- )
+ self._icon = BlocksPixmap.get(Icon.LOADED_SPOOL)
+ self._unloaded_icon = BlocksPixmap.get(Icon.HALF_SPOLL)
def setColor(self, qc: QtGui.QColor):
"""sets button color
@@ -213,13 +210,9 @@ def _build_ui(self):
root = QtWidgets.QHBoxLayout(self)
self.left_arrow = IconButton(self)
- self.left_arrow.setPixmap(
- QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_left.svg")
- )
+ self.left_arrow.setPixmap(BlocksPixmap.get(Icon.ARROW_LEFT))
self.right_arrow = IconButton(self)
- self.right_arrow.setPixmap(
- QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_right.svg")
- )
+ self.right_arrow.setPixmap(BlocksPixmap.get(Icon.ARROW_RIGHT))
self.right_arrow.setFixedWidth(60)
self.left_arrow.setFixedWidth(60)
@@ -449,27 +442,19 @@ def make_val(text="—", edit: bool = True, type: str = "keypad"):
self._btn_load.setText("Load")
self._btn_load.setFixedSize(140, 60)
self._btn_load.setFont(font)
- self._btn_load.setPixmap(
- QtGui.QPixmap(":/filament_related/media/btn_icons/load_filament.svg")
- )
+ self._btn_load.setPixmap(BlocksPixmap.get(Icon.LOAD_FILAMENT))
self._btn_unload = BlocksCustomButton(self)
self._btn_unload.setText("Unload")
self._btn_unload.setFont(font)
- self._btn_unload.setPixmap(
- QtGui.QPixmap(":/filament_related/media/btn_icons/unload_filament.svg")
- )
+ self._btn_unload.setPixmap(BlocksPixmap.get(Icon.UNLOAD_FILAMENT))
self._btn_unload.setFixedSize(140, 60)
self._btn_purge = BlocksCustomButton(self)
self._btn_purge.setText("Eject")
self._btn_purge.setFont(font)
- self._btn_purge.setPixmap(
- QtGui.QPixmap(":/filament_related/media/btn_icons/eject.svg")
- )
+ self._btn_purge.setPixmap(BlocksPixmap.get(Icon.EJECT))
self._btn_purge.setFixedSize(140, 60)
self._btn_cut = BlocksCustomButton(self)
- self._btn_cut.setPixmap(
- QtGui.QPixmap(":/filament_related/media/btn_icons/check gate 1.svg")
- )
+ self._btn_cut.setPixmap(BlocksPixmap.get(Icon.CHECK_GATE_1))
self._btn_cut.setText("Check\nGates")
self._btn_cut.setFont(font)
self._btn_cut.setFixedSize(140, 60)
diff --git a/BlocksScreen/lib/panels/widgets/babystepPage.py b/BlocksScreen/lib/panels/widgets/babystepPage.py
index 000e1135..c03d0fe2 100644
--- a/BlocksScreen/lib/panels/widgets/babystepPage.py
+++ b/BlocksScreen/lib/panels/widgets/babystepPage.py
@@ -2,6 +2,7 @@
import typing
from lib.utils.blocks_label import BlocksLabel
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.check_button import BlocksCustomCheckButton
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -179,7 +180,7 @@ def _setupUI(self) -> None:
self.babystep_back_btn.setMinimumSize(QtCore.QSize(60, 60))
self.babystep_back_btn.setMaximumSize(QtCore.QSize(60, 60))
self.babystep_back_btn.setFlat(True)
- self.babystep_back_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ self.babystep_back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
header.addWidget(self.babystep_back_btn, 0)
main_vlayout.addLayout(header)
@@ -226,9 +227,7 @@ def _setupUI(self) -> None:
self.bbp_babystep_graphic.setLayoutDirection(
QtCore.Qt.LayoutDirection.RightToLeft
)
- self.bbp_babystep_graphic.setPixmap(
- QtGui.QPixmap(":/graphics/media/graphics/babystep_graphic.png")
- )
+ self.bbp_babystep_graphic.setPixmap(BlocksPixmap.source(Icon.BABYSTEP_GRAPHIC))
self.bbp_babystep_graphic.setScaledContents(False)
self.bbp_babystep_graphic.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
@@ -283,9 +282,7 @@ def _setupUI(self) -> None:
self.bbp_mvup.setMinimumSize(QtCore.QSize(80, 80))
self.bbp_mvup.setMaximumSize(QtCore.QSize(80, 80))
self.bbp_mvup.setFlat(True)
- self.bbp_mvup.setPixmap(
- QtGui.QPixmap(":/baby_step/media/btn_icons/move_nozzle_close.svg")
- )
+ self.bbp_mvup.setPixmap(BlocksPixmap.get(Icon.MOVE_NOZZLE_CLOSE))
move_layout.addWidget(self.bbp_mvup, 0, QtCore.Qt.AlignmentFlag.AlignRight)
self.bbp_mvdown = IconButton(parent=self)
@@ -293,9 +290,7 @@ def _setupUI(self) -> None:
self.bbp_mvdown.setMinimumSize(QtCore.QSize(80, 80))
self.bbp_mvdown.setMaximumSize(QtCore.QSize(80, 80))
self.bbp_mvdown.setFlat(True)
- self.bbp_mvdown.setPixmap(
- QtGui.QPixmap(":/baby_step/media/btn_icons/move_nozzle_away.svg")
- )
+ self.bbp_mvdown.setPixmap(BlocksPixmap.get(Icon.MOVE_NOZZLE_AWAY))
move_layout.addWidget(self.bbp_mvdown, 0, QtCore.Qt.AlignmentFlag.AlignRight)
content.addLayout(move_layout)
diff --git a/BlocksScreen/lib/panels/widgets/bannerPopup.py b/BlocksScreen/lib/panels/widgets/bannerPopup.py
index 7db54547..daa560d2 100644
--- a/BlocksScreen/lib/panels/widgets/bannerPopup.py
+++ b/BlocksScreen/lib/panels/widgets/bannerPopup.py
@@ -1,6 +1,7 @@
import enum
from collections import deque
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -137,7 +138,7 @@ def _add_popup(self) -> None:
message_type = message_entry.get("type")
message = "Unknown Event"
- icon = ":ui/media/btn_icons/info.svg"
+ icon = Icon.INFO
# TODO: missing usb icons
match message_type:
@@ -149,11 +150,11 @@ def _add_popup(self) -> None:
# icon = ""
case BannerPopup.MessageType.CORRUPTED:
message = "Usb Corrupted"
- icon = ":/ui/media/btn_icons/troubleshoot.svg"
+ icon = Icon.TROUBLESHOOT
end_rect = self._calculate_target_geometry()
start_rect = end_rect.translated(end_rect.width() * 2, 0)
- self.icon_label.setPixmap(QtGui.QPixmap(icon))
+ self.icon_label.setPixmap(BlocksPixmap.get(icon))
self.slide_in_animation.setStartValue(start_rect)
self.slide_in_animation.setEndValue(end_rect)
diff --git a/BlocksScreen/lib/panels/widgets/basicFilamentPanel.py b/BlocksScreen/lib/panels/widgets/basicFilamentPanel.py
index e149d76b..4618994f 100644
--- a/BlocksScreen/lib/panels/widgets/basicFilamentPanel.py
+++ b/BlocksScreen/lib/panels/widgets/basicFilamentPanel.py
@@ -7,6 +7,7 @@
from lib.printer import Printer
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_frame import BlocksCustomFrame
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -448,9 +449,7 @@ def _setupUi(self):
self.main_back_button.setSizePolicy(sizePolicy)
self.main_back_button.setMinimumSize(QtCore.QSize(60, 60))
self.main_back_button.setMaximumSize(QtCore.QSize(60, 60))
- self.main_back_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")
- )
+ self.main_back_button.setProperty("icon_pixmap", BlocksPixmap.get(Icon.BACK))
self.main_back_button.setObjectName("main_back_button")
self.filament_page_header_layout.addWidget(self.main_back_button)
@@ -527,7 +526,7 @@ def _setupUi(self):
self.filament_page_load_btn.setFont(font)
self.filament_page_load_btn.setProperty(
"icon_pixmap",
- QtGui.QPixmap(":/filament_related/media/btn_icons/load_filament.svg"),
+ BlocksPixmap.get(Icon.LOAD_FILAMENT),
)
self.filament_page_load_btn.setObjectName("filament_page_load_btn")
self.horizontalLayout.addWidget(self.filament_page_load_btn)
@@ -542,7 +541,7 @@ def _setupUi(self):
self.filament_page_unload_btn.setFont(font)
self.filament_page_unload_btn.setProperty(
"icon_pixmap",
- QtGui.QPixmap(":/filament_related/media/btn_icons/unload_filament.svg"),
+ BlocksPixmap.get(Icon.UNLOAD_FILAMENT),
)
self.filament_page_unload_btn.setObjectName("filament_page_unload_btn")
@@ -609,7 +608,7 @@ def _setupUi(self):
self.load_header_back_button.setMinimumSize(QtCore.QSize(60, 60))
self.load_header_back_button.setMaximumSize(QtCore.QSize(60, 60))
self.load_header_back_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")
+ "icon_pixmap", BlocksPixmap.get(Icon.BACK)
)
self.load_header_back_button.setObjectName("load_header_back_button")
self.load_page_header_layout.addWidget(self.load_header_back_button)
@@ -639,7 +638,7 @@ def _setupUi(self):
(
"load_pla_btn",
"PLA",
- ":/top_bar_icons/media/topbar/pla_filament_topbar.svg",
+ Icon.PLA_FILAMENT_TOPBAR,
0,
0,
FilamentTypes.PLA,
@@ -647,7 +646,7 @@ def _setupUi(self):
(
"load_petg_btn",
"PETG",
- ":/top_bar_icons/media/topbar/petg_filament_topbar.svg",
+ Icon.PETG_FILAMENT_TOPBAR,
0,
1,
FilamentTypes.PETG,
@@ -655,7 +654,7 @@ def _setupUi(self):
(
"load_abs_btn",
"ABS",
- ":/top_bar_icons/media/topbar/abs_filament_topbar.svg",
+ Icon.ABS_FILAMENT_TOPBAR,
1,
0,
FilamentTypes.ABS,
@@ -663,7 +662,7 @@ def _setupUi(self):
(
"load_PP_btn",
"PP",
- ":/top_bar_icons/media/topbar/pp_filament_topbar.svg",
+ Icon.PP_FILAMENT_TOPBAR,
1,
1,
FilamentTypes.PP,
@@ -671,7 +670,7 @@ def _setupUi(self):
(
"load_nylon_btn",
"NYLON",
- ":/top_bar_icons/media/topbar/nylon_filament_topbar.svg",
+ Icon.NYLON_FILAMENT_TOPBAR,
2,
0,
FilamentTypes.NYLON,
@@ -679,7 +678,7 @@ def _setupUi(self):
(
"load_PC_btn",
"PC",
- ":/top_bar_icons/media/topbar/pc_filament_topbar.svg",
+ Icon.PC_FILAMENT_TOPBAR,
2,
1,
FilamentTypes.PC,
@@ -691,7 +690,7 @@ def _setupUi(self):
font.setPointSize(19)
font.setStyleStrategy(QtGui.QFont.StyleStrategy.PreferAntialias)
- for obj_name, text, pixmap_path, row, col, _filament_type in filament_buttons:
+ for obj_name, text, icon, row, col, _filament_type in filament_buttons:
btn = BlocksCustomButton(parent=self.load_page)
btn.setMinimumSize(QtCore.QSize(200, 80))
btn.setMaximumSize(QtCore.QSize(200, 80))
@@ -701,7 +700,7 @@ def _setupUi(self):
btn.clicked.connect(
partial(self.change_page, self.indexOf(self.filament_control_page))
)
- btn.setProperty("icon_pixmap", QtGui.QPixmap(pixmap_path))
+ btn.setProperty("icon_pixmap", BlocksPixmap.get(icon))
btn.setObjectName(obj_name)
self.load_page_content_layout.addWidget(btn, row, col, 1, 1)
self.filament_buttons_list.append((btn, _filament_type))
diff --git a/BlocksScreen/lib/panels/widgets/cancelPage.py b/BlocksScreen/lib/panels/widgets/cancelPage.py
index dd33b52e..8188a811 100644
--- a/BlocksScreen/lib/panels/widgets/cancelPage.py
+++ b/BlocksScreen/lib/panels/widgets/cancelPage.py
@@ -1,6 +1,7 @@
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_frame import BlocksCustomFrame
from lib.utils.blocks_label import BlocksLabel
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from PyQt6 import QtCore, QtGui, QtWidgets
import typing
@@ -202,9 +203,7 @@ def _setupUI(self) -> None:
font = QtGui.QFont("Momcake", 18)
self.confirm_button.setFont(font)
self.confirm_button.setFlat(True)
- self.confirm_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg")
- )
+ self.confirm_button.setProperty("icon_pixmap", BlocksPixmap.get(Icon.YES))
self.confirm_button.setText("Reprint")
# 2. Align buttons to the right
self.cf_confirm_layout.addWidget(
@@ -216,9 +215,7 @@ def _setupUI(self) -> None:
self.refuse_button.setMaximumSize(QtCore.QSize(250, 70))
self.refuse_button.setFont(font)
self.refuse_button.setFlat(True)
- self.refuse_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg")
- )
+ self.refuse_button.setProperty("icon_pixmap", BlocksPixmap.get(Icon.NO))
self.refuse_button.setText("Ignore")
# 2. Align buttons to the right
self.cf_confirm_layout.addWidget(
diff --git a/BlocksScreen/lib/panels/widgets/colorWheelWidget.py b/BlocksScreen/lib/panels/widgets/colorWheelWidget.py
index f4a28e9e..67845189 100644
--- a/BlocksScreen/lib/panels/widgets/colorWheelWidget.py
+++ b/BlocksScreen/lib/panels/widgets/colorWheelWidget.py
@@ -3,6 +3,7 @@
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_frame import BlocksCustomFrame
from lib.utils.blocks_label import BlocksLabel
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.blocks_slider import BlocksSlider
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -225,7 +226,7 @@ def _lbl(
back_btn = IconButton(self)
back_btn.setFixedSize(60, 60)
back_btn.setFlat(True)
- back_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
back_btn.clicked.connect(self.request_back)
header.addWidget(back_btn)
root.addLayout(header)
diff --git a/BlocksScreen/lib/panels/widgets/confirmPage.py b/BlocksScreen/lib/panels/widgets/confirmPage.py
index 0f35ba39..b0ecebde 100644
--- a/BlocksScreen/lib/panels/widgets/confirmPage.py
+++ b/BlocksScreen/lib/panels/widgets/confirmPage.py
@@ -5,6 +5,7 @@
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_frame import BlocksCustomFrame
from lib.utils.blocks_label import BlocksLabel
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -194,9 +195,7 @@ def _setupUI(self) -> None:
self.back_btn.setMinimumSize(QtCore.QSize(60, 60))
self.back_btn.setMaximumSize(QtCore.QSize(60, 60))
self.back_btn.setFlat(True)
- self.back_btn.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")
- )
+ self.back_btn.setProperty("icon_pixmap", BlocksPixmap.get(Icon.BACK))
self.cf_header_title.addWidget(
self.back_btn, 0, QtCore.Qt.AlignmentFlag.AlignLeft
)
@@ -248,9 +247,7 @@ def _setupUI(self) -> None:
font = QtGui.QFont("Momcake", 18)
self.confirm_button.setFont(font)
self.confirm_button.setFlat(True)
- self.confirm_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg")
- )
+ self.confirm_button.setProperty("icon_pixmap", BlocksPixmap.get(Icon.YES))
self.confirm_button.setText("Print")
# 2. Align buttons to the right
self.cf_confirm_layout.addWidget(
@@ -263,7 +260,7 @@ def _setupUI(self) -> None:
self.delete_file_button.setFont(font)
self.delete_file_button.setFlat(True)
self.delete_file_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/garbage-icon.svg")
+ "icon_pixmap", BlocksPixmap.get(Icon.GARBAGE_ICON)
)
self.delete_file_button.setText("Delete")
# 2. Align buttons to the right
diff --git a/BlocksScreen/lib/panels/widgets/connectionPage.py b/BlocksScreen/lib/panels/widgets/connectionPage.py
index 5921446e..f0f85a39 100644
--- a/BlocksScreen/lib/panels/widgets/connectionPage.py
+++ b/BlocksScreen/lib/panels/widgets/connectionPage.py
@@ -6,6 +6,7 @@
from events import KlippyDisconnected, KlippyReady
from lib.moonrakerComm import MoonWebSocket
from lib.utils.blocks_frame import BlocksCustomFrame
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -416,7 +417,7 @@ def _setupUI(self) -> None:
)
self.reboot_system_button.setFlat(True)
self.reboot_system_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/system/media/btn_icons/reboot.svg")
+ "icon_pixmap", BlocksPixmap.get(Icon.REBOOT)
)
self.reboot_system_button.setProperty("has_text", True)
self.reboot_system_button.setProperty("text_formatting", "bottom")
@@ -441,7 +442,7 @@ def _setupUI(self) -> None:
)
self.restart_klipper_button.setFlat(True)
self.restart_klipper_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/system/media/btn_icons/restart_klipper.svg")
+ "icon_pixmap", BlocksPixmap.get(Icon.RESTART_KLIPPER)
)
self.restart_klipper_button.setProperty("has_text", True)
self.restart_klipper_button.setProperty("text_formatting", "bottom")
@@ -460,7 +461,7 @@ def _setupUI(self) -> None:
self.notification_button.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
self.notification_button.setFlat(True)
self.notification_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/notification.svg")
+ "icon_pixmap", BlocksPixmap.get(Icon.NOTIFICATION)
)
self.notification_button.setProperty("has_text", True)
self.notification_button.setProperty("text_formatting", "bottom")
@@ -486,7 +487,7 @@ def _setupUI(self) -> None:
self.update_page_button.setFlat(True)
self.update_page_button.setProperty(
"icon_pixmap",
- QtGui.QPixmap(":/system/media/btn_icons/update-software-icon.svg"),
+ BlocksPixmap.get(Icon.UPDATE_SOFTWARE_ICON),
)
self.update_page_button.setProperty("has_text", True)
self.update_page_button.setProperty("text_formatting", "bottom")
@@ -505,9 +506,7 @@ def _setupUI(self) -> None:
self.wifi_button.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
self.wifi_button.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu)
self.wifi_button.setFlat(True)
- self.wifi_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/network/media/btn_icons/wifi_config.svg")
- )
+ self.wifi_button.setProperty("icon_pixmap", BlocksPixmap.get(Icon.WIFI_CONFIG))
self.wifi_button.setProperty("has_text", True)
self.wifi_button.setProperty("text_formatting", "bottom")
self.wifi_button.setProperty("class", "system_control_btn")
diff --git a/BlocksScreen/lib/panels/widgets/inputshaperPage.py b/BlocksScreen/lib/panels/widgets/inputshaperPage.py
index addde31e..384041de 100644
--- a/BlocksScreen/lib/panels/widgets/inputshaperPage.py
+++ b/BlocksScreen/lib/panels/widgets/inputshaperPage.py
@@ -2,6 +2,7 @@
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_frame import BlocksCustomFrame
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.fonts import register_momcake
from lib.utils.icon_button import IconButton
from lib.utils.list_model import EntryDelegate, EntryListModel, ListItem
@@ -124,7 +125,7 @@ def add_type_entry(self, cli_name: str, recommended: str = "") -> None:
item = ListItem(
text=cli_name,
right_text=recommended,
- right_icon=QtGui.QPixmap(":/arrow_icons/media/btn_icons/right_arrow.svg"),
+ right_icon=BlocksPixmap.get(Icon.RIGHT_ARROW),
selected=False,
_lfontsize=17,
_rfontsize=9,
@@ -176,7 +177,7 @@ def _setupUI(self) -> None:
self.update_back_btn.setMinimumSize(QtCore.QSize(60, 60))
self.update_back_btn.setMaximumSize(QtCore.QSize(60, 60))
self.update_back_btn.setFlat(True)
- self.update_back_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ self.update_back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
self.header_content_layout.addWidget(self.update_back_btn, 0)
self.update_page_content_layout.addLayout(self.header_content_layout, 0)
@@ -431,7 +432,7 @@ def _setupUI(self) -> None:
self.action_btn.setPalette(palette)
self.action_btn.setSizePolicy(sizePolicy)
self.action_btn.setText("Confirm")
- self.action_btn.setPixmap(QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg"))
+ self.action_btn.setPixmap(BlocksPixmap.get(Icon.YES))
self.button_box.addWidget(
self.action_btn,
0,
diff --git a/BlocksScreen/lib/panels/widgets/jobStatusPage.py b/BlocksScreen/lib/panels/widgets/jobStatusPage.py
index e479df6b..e79e3b9a 100644
--- a/BlocksScreen/lib/panels/widgets/jobStatusPage.py
+++ b/BlocksScreen/lib/panels/widgets/jobStatusPage.py
@@ -10,6 +10,7 @@
from lib.panels.widgets.basePopup import BasePopup
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_label import BlocksLabel
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.blocks_progressbar import CustomProgressBar
from lib.utils.display_button import DisplayButton
from lib.utils.flowguard import FlowguardWidget
@@ -260,17 +261,13 @@ def _handle_print_state(self, state: str) -> None:
self._layer_frozen = True
self.pause_printing_btn.setEnabled(True)
self.pause_printing_btn.setText("Resume")
- self.pause_printing_btn.setPixmap(
- QtGui.QPixmap(":/ui/media/btn_icons/play.svg")
- )
+ self.pause_printing_btn.setPixmap(BlocksPixmap.get(Icon.PLAY))
self._awaiting_resume = False
event_state = "pause"
elif lstate == "printing":
self._layer_frozen = False
self.pause_printing_btn.setText("Pause")
- self.pause_printing_btn.setPixmap(
- QtGui.QPixmap(":/ui/media/btn_icons/pause.svg")
- )
+ self.pause_printing_btn.setPixmap(BlocksPixmap.get(Icon.PAUSE))
if self._internal_print_status != "printing":
self._awaiting_resume = True
self._resume_baseline = self._file_position
@@ -525,7 +522,7 @@ def _setupUI(self) -> None:
self.js_file_name_icon.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.js_file_name_icon.setProperty(
"icon_pixmap",
- QtGui.QPixmap(":/files/media/btn_icons/file_icon.svg"),
+ BlocksPixmap.get(Icon.FILE_ICON),
)
self.js_file_name_icon.setObjectName("js_file_name_icon")
self.js_file_name_label = BlocksLabel(parent=self)
@@ -545,27 +542,21 @@ def _setupUI(self) -> None:
self.pause_printing_btn.setMinimumSize(QtCore.QSize(200, 80))
self.pause_printing_btn.setMaximumSize(QtCore.QSize(200, 80))
self.pause_printing_btn.setFont(font)
- self.pause_printing_btn.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/pause.svg")
- )
+ self.pause_printing_btn.setProperty("icon_pixmap", BlocksPixmap.get(Icon.PAUSE))
self.pause_printing_btn.setObjectName("pause_printing_btn")
self.stop_printing_btn = BlocksCustomButton(self)
self.stop_printing_btn.setSizePolicy(sizePolicy)
self.stop_printing_btn.setMinimumSize(QtCore.QSize(200, 80))
self.stop_printing_btn.setMaximumSize(QtCore.QSize(200, 80))
self.stop_printing_btn.setFont(font)
- self.stop_printing_btn.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/stop.svg")
- )
+ self.stop_printing_btn.setProperty("icon_pixmap", BlocksPixmap.get(Icon.STOP))
self.stop_printing_btn.setObjectName("stop_printing_btn")
self.tune_menu_btn = BlocksCustomButton(self)
self.tune_menu_btn.setSizePolicy(sizePolicy)
self.tune_menu_btn.setMinimumSize(QtCore.QSize(200, 60))
self.tune_menu_btn.setMaximumSize(QtCore.QSize(200, 80))
self.tune_menu_btn.setFont(font)
- self.tune_menu_btn.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/tune.svg")
- )
+ self.tune_menu_btn.setProperty("icon_pixmap", BlocksPixmap.get(Icon.TUNE))
self.tune_menu_btn.setObjectName("tune_menu_btn")
self.job_status_btn_layout.addWidget(self.pause_printing_btn)
self.job_status_btn_layout.addWidget(self.stop_printing_btn)
@@ -590,7 +581,7 @@ def _setupUI(self) -> None:
self.layer_display_button.setSizePolicy(sizePolicy)
self.layer_display_button.setMinimumSize(QtCore.QSize(200, 80))
self.layer_display_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/layers.svg")
+ "icon_pixmap", BlocksPixmap.get(Icon.LAYERS)
)
self.layer_display_button.setObjectName("layer_display_button")
self.print_time_display_button = DisplayButton(self)
@@ -599,7 +590,7 @@ def _setupUI(self) -> None:
self.print_time_display_button.setSizePolicy(sizePolicy)
self.print_time_display_button.setMinimumSize(QtCore.QSize(200, 80))
self.print_time_display_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/time.svg")
+ "icon_pixmap", BlocksPixmap.get(Icon.TIME)
)
self.print_time_display_button.setObjectName("print_time_display_button")
self.job_stats_display_layout.addWidget(
diff --git a/BlocksScreen/lib/panels/widgets/keyboardPage.py b/BlocksScreen/lib/panels/widgets/keyboardPage.py
index 243302f4..f4742810 100644
--- a/BlocksScreen/lib/panels/widgets/keyboardPage.py
+++ b/BlocksScreen/lib/panels/widgets/keyboardPage.py
@@ -1,5 +1,6 @@
import typing
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -427,9 +428,7 @@ def _setup_ui(self) -> None:
self.numpad_back_btn.setMaximumSize(QtCore.QSize(60, 60))
self.numpad_back_btn.setIconSize(QtCore.QSize(16, 16))
self.numpad_back_btn.setFlat(True)
- self.numpad_back_btn.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")
- )
+ self.numpad_back_btn.setProperty("icon_pixmap", BlocksPixmap.get(Icon.BACK))
self.numpad_back_btn.setProperty("button_type", "icon")
self.numpad_back_btn.setObjectName("numpad_back_btn")
diff --git a/BlocksScreen/lib/panels/widgets/notificationPage.py b/BlocksScreen/lib/panels/widgets/notificationPage.py
index d21de8b9..749f6caa 100644
--- a/BlocksScreen/lib/panels/widgets/notificationPage.py
+++ b/BlocksScreen/lib/panels/widgets/notificationPage.py
@@ -4,6 +4,7 @@
from lib.panels.widgets.popupDialogWidget import Popup
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_frame import BlocksCustomFrame
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from lib.utils.list_model import EntryDelegate, EntryListModel, ListItem
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -21,9 +22,9 @@ class NotificationPage(QtWidgets.QWidget):
def __init__(self, parent=None) -> None:
super().__init__(parent)
- self._ICON_INFO = QtGui.QPixmap(":/ui/media/btn_icons/info.svg")
- self._ICON_WARN = QtGui.QPixmap(":/ui/media/btn_icons/troubleshoot.svg")
- self._ICON_ERROR = QtGui.QPixmap(":/ui/media/btn_icons/error.svg")
+ self._ICON_INFO = BlocksPixmap.get(Icon.INFO)
+ self._ICON_WARN = BlocksPixmap.get(Icon.TROUBLESHOOT)
+ self._ICON_ERROR = BlocksPixmap.get(Icon.ERROR)
self._setupUI()
self.cli_tracking: deque = deque()
self.selected_item: ListItem | None = None
@@ -222,7 +223,7 @@ def _setupUI(self) -> None:
self.update_back_btn.setMinimumSize(QtCore.QSize(60, 60))
self.update_back_btn.setMaximumSize(QtCore.QSize(60, 60))
self.update_back_btn.setFlat(True)
- self.update_back_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ self.update_back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
self.header_content_layout.addWidget(
self.update_back_btn
) # alignment=QtCore.Qt.AlignmentFlag.AlignCenter)
@@ -372,9 +373,7 @@ def _setupUI(self) -> None:
self.delete_btn.setSizePolicy(sizePolicy)
self.delete_btn.setText("Delete")
self.delete_btn.setEnabled(False)
- self.delete_btn.setPixmap(
- QtGui.QPixmap(":/ui/media/btn_icons/garbage-icon.svg")
- )
+ self.delete_btn.setPixmap(BlocksPixmap.get(Icon.GARBAGE_ICON))
self.button_box.addWidget(
self.delete_btn, 0, QtCore.Qt.AlignmentFlag.AlignCenter
)
@@ -387,9 +386,7 @@ def _setupUI(self) -> None:
self.delete_all_btn.setPalette(palette)
self.delete_all_btn.setSizePolicy(sizePolicy)
self.delete_all_btn.setText("Delete all")
- self.delete_all_btn.setPixmap(
- QtGui.QPixmap(":/ui/media/btn_icons/garbage-icon.svg")
- )
+ self.delete_all_btn.setPixmap(BlocksPixmap.get(Icon.GARBAGE_ICON))
self.button_box.addWidget(
self.delete_all_btn, 0, QtCore.Qt.AlignmentFlag.AlignCenter
)
diff --git a/BlocksScreen/lib/panels/widgets/numpadPage.py b/BlocksScreen/lib/panels/widgets/numpadPage.py
index b904645c..a7788b0e 100644
--- a/BlocksScreen/lib/panels/widgets/numpadPage.py
+++ b/BlocksScreen/lib/panels/widgets/numpadPage.py
@@ -1,3 +1,4 @@
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from lib.utils.blocks_label import BlocksLabel
from lib.utils.numpad_button import NumpadButton
@@ -165,7 +166,7 @@ def _setupUI(self) -> None:
self.numpad_back_btn.setSizePolicy(sizePolicy)
self.numpad_back_btn.setMinimumSize(QtCore.QSize(60, 60))
self.numpad_back_btn.setMaximumSize(QtCore.QSize(60, 60))
- self.numpad_back_btn.setPixmap(QtGui.QPixmap(":ui/media/btn_icons/back.svg"))
+ self.numpad_back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
self.numpad_back_btn.setObjectName("numpad_back_btn")
self.header_layout.addWidget(
self.numpad_back_btn,
@@ -366,7 +367,7 @@ def _setupUI(self) -> None:
self.numpad_enter.setSizePolicy(sizePolicy)
self.numpad_enter.setMinimumSize(QtCore.QSize(60, 60))
self.numpad_enter.setFlat(True)
- self.numpad_enter.setPixmap(QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg"))
+ self.numpad_enter.setPixmap(BlocksPixmap.get(Icon.YES))
self.numpad_enter.setObjectName("numpad_enter")
self.button_grid_layout.addWidget(
self.numpad_enter, 3, 0, 1, 1, QtCore.Qt.AlignmentFlag.AlignCenter
@@ -376,7 +377,7 @@ def _setupUI(self) -> None:
self.numpad_clear.setSizePolicy(sizePolicy)
self.numpad_clear.setMinimumSize(QtCore.QSize(60, 60))
self.numpad_clear.setFlat(True)
- self.numpad_clear.setPixmap(QtGui.QPixmap(":/dialog/media/btn_icons/no.svg"))
+ self.numpad_clear.setPixmap(BlocksPixmap.get(Icon.NO))
self.numpad_clear.setObjectName("numpad_clear")
self.button_grid_layout.addWidget(
self.numpad_clear, 3, 2, 1, 1, QtCore.Qt.AlignmentFlag.AlignCenter
diff --git a/BlocksScreen/lib/panels/widgets/optionCardWidget.py b/BlocksScreen/lib/panels/widgets/optionCardWidget.py
index 6fbfe20d..d501b94d 100644
--- a/BlocksScreen/lib/panels/widgets/optionCardWidget.py
+++ b/BlocksScreen/lib/panels/widgets/optionCardWidget.py
@@ -1,5 +1,6 @@
import typing
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from PyQt6 import QtCore, QtGui, QtWidgets
from lib.utils.icon_button import IconButton
@@ -268,7 +269,7 @@ def _setupUi(self, option_card):
self.continue_button.setFlat(True)
self.continue_button.setProperty(
"icon_pixmap",
- QtGui.QPixmap(":/arrow_icons/media/btn_icons/right_arrow.svg"),
+ BlocksPixmap.get(Icon.RIGHT_ARROW),
)
self.continue_button.setObjectName("continue_button")
diff --git a/BlocksScreen/lib/panels/widgets/popupDialogWidget.py b/BlocksScreen/lib/panels/widgets/popupDialogWidget.py
index 51519dcc..978558a8 100644
--- a/BlocksScreen/lib/panels/widgets/popupDialogWidget.py
+++ b/BlocksScreen/lib/panels/widgets/popupDialogWidget.py
@@ -2,6 +2,7 @@
from collections import deque
from typing import Deque
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -31,10 +32,10 @@ def __init__(self, parent) -> None:
self.persistent_notifications: Deque = deque()
self.message_type: Popup.MessageType = Popup.MessageType.INFO
self.default_background_color = QtGui.QColor(164, 164, 164)
- self.info_icon = QtGui.QPixmap(":ui/media/btn_icons/info.svg")
+ self.info_icon = BlocksPixmap.get(Icon.INFO)
# no warning asset exists yet; the yellow ColorCode carries the severity
- self.warning_icon = QtGui.QPixmap(":ui/media/btn_icons/error.svg")
- self.error_icon = QtGui.QPixmap(":ui/media/btn_icons/error.svg")
+ self.warning_icon = BlocksPixmap.get(Icon.ERROR)
+ self.error_icon = BlocksPixmap.get(Icon.ERROR)
self.setAttribute(QtCore.Qt.WidgetAttribute.WA_TranslucentBackground, True)
self.setMouseTracking(True)
self.setWindowFlags(
@@ -190,9 +191,7 @@ def _add_popup(self) -> None:
self.slide_in_animation.setEndValue(end_rect)
self.slide_out_animation.setStartValue(end_rect)
self.slide_out_animation.setEndValue(start_rect)
- self.actionbtn.setPixmap(
- QtGui.QPixmap(":/arrow_icons/media/btn_icons/right_arrow.svg")
- )
+ self.actionbtn.setPixmap(BlocksPixmap.get(Icon.RIGHT_ARROW))
self.setGeometry(end_rect)
self.text_label.setText(message)
self.text_label.setFixedHeight(
diff --git a/BlocksScreen/lib/panels/widgets/printcorePage.py b/BlocksScreen/lib/panels/widgets/printcorePage.py
index c2683cd1..10acb289 100644
--- a/BlocksScreen/lib/panels/widgets/printcorePage.py
+++ b/BlocksScreen/lib/panels/widgets/printcorePage.py
@@ -1,4 +1,5 @@
from lib.utils.blocks_button import BlocksCustomButton
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -100,9 +101,7 @@ def _setupUI(self) -> None:
self.pc_cancel = BlocksCustomButton(parent=self)
self.pc_cancel.setMinimumSize(QtCore.QSize(250, 80))
self.pc_cancel.setMaximumSize(QtCore.QSize(250, 80))
- self.pc_cancel.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/no.svg")
- )
+ self.pc_cancel.setProperty("icon_pixmap", BlocksPixmap.get(Icon.NO))
self.pc_cancel.setObjectName("pc_cancel")
self.pc_cancel.setFont(font)
self.pc_cancel.setText("Cancel")
@@ -110,9 +109,7 @@ def _setupUI(self) -> None:
self.pc_accept = BlocksCustomButton(parent=self)
self.pc_accept.setMinimumSize(QtCore.QSize(250, 80))
self.pc_accept.setMaximumSize(QtCore.QSize(250, 80))
- self.pc_accept.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg")
- )
+ self.pc_accept.setProperty("icon_pixmap", BlocksPixmap.get(Icon.YES))
self.pc_accept.setObjectName("pc_accept")
self.pc_accept.setFont(font)
self.pc_accept.setText("Continue?")
diff --git a/BlocksScreen/lib/panels/widgets/probeHelperPage.py b/BlocksScreen/lib/panels/widgets/probeHelperPage.py
index 4eaa7a5a..21ff1562 100644
--- a/BlocksScreen/lib/panels/widgets/probeHelperPage.py
+++ b/BlocksScreen/lib/panels/widgets/probeHelperPage.py
@@ -5,6 +5,7 @@
from lib.panels.widgets.optionCardWidget import OptionCard
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_label import BlocksLabel
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.check_button import BlocksCustomCheckButton
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -98,14 +99,10 @@ def __init__(self, parent: QtWidgets.QWidget) -> None:
self.setObjectName("probe_offset_page")
self._setupUi()
- self.inductive_icon = QtGui.QPixmap(
- ":/z_levelling/media/btn_icons/inductive.svg"
- )
- self.bltouch_icon = QtGui.QPixmap(":/z_levelling/media/btn_icons/bltouch.svg")
- self.endstop_icon = QtGui.QPixmap(
- ":/extruder_related/media/btn_icons/switch_zoom.svg"
- )
- self.eddy_icon = QtGui.QPixmap(":/z_levelling/media/btn_icons/eddy_mech.svg")
+ self.inductive_icon = BlocksPixmap.get(Icon.INDUCTIVE)
+ self.bltouch_icon = BlocksPixmap.get(Icon.BLTOUCH)
+ self.endstop_icon = BlocksPixmap.get(Icon.SWITCH_ZOOM)
+ self.eddy_icon = BlocksPixmap.get(Icon.EDDY_MECH)
self._toggle_tool_buttons(False)
self.mb_raise_nozzle.clicked.connect(lambda: self.handle_nozzle_move("raise"))
self.mb_lower_nozzle.clicked.connect(lambda: self.handle_nozzle_move("lower"))
@@ -788,7 +785,7 @@ def _setupUi(self) -> None:
self.accept_button.setGeometry(QtCore.QRect(480, 340, 170, 60))
self.accept_button.setText("Accept")
self.accept_button.setObjectName("accept_button")
- self.accept_button.setPixmap(QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg"))
+ self.accept_button.setPixmap(BlocksPixmap.get(Icon.YES))
self.accept_button.setVisible(False)
font = QtGui.QFont()
font.setPointSize(15)
@@ -798,7 +795,7 @@ def _setupUi(self) -> None:
self.abort_button.setGeometry(QtCore.QRect(300, 340, 170, 60))
self.abort_button.setText("Abort")
self.abort_button.setObjectName("abort_button")
- self.abort_button.setPixmap(QtGui.QPixmap(":/dialog/media/btn_icons/no.svg"))
+ self.abort_button.setPixmap(BlocksPixmap.get(Icon.NO))
self.abort_button.setVisible(False)
font = QtGui.QFont()
font.setPointSize(15)
@@ -826,7 +823,7 @@ def _setupUi(self) -> None:
self.po_back_button.setMaximumSize(QtCore.QSize(60, 60))
self.po_back_button.setText("")
self.po_back_button.setFlat(True)
- self.po_back_button.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ self.po_back_button.setPixmap(BlocksPixmap.get(Icon.BACK))
self.po_back_button.setObjectName("po_back_button")
self.bbp_header_layout.addWidget(
@@ -910,9 +907,7 @@ def _setupUi(self) -> None:
self.tool_image = QtWidgets.QLabel(parent=self.frame_2)
self.tool_image.setGeometry(QtCore.QRect(0, 30, 371, 121))
self.tool_image.setLayoutDirection(QtCore.Qt.LayoutDirection.RightToLeft)
- self.tool_image.setPixmap(
- QtGui.QPixmap(":/graphics/media/graphics/babystep_graphic.png")
- )
+ self.tool_image.setPixmap(BlocksPixmap.source(Icon.BABYSTEP_GRAPHIC))
self.tool_image.setScaledContents(False)
self.tool_image.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.tool_image.setObjectName("tool_image")
@@ -968,9 +963,7 @@ def _setupUi(self) -> None:
self.mb_lower_nozzle.setMaximumSize(QtCore.QSize(80, 80))
self.mb_lower_nozzle.setText("")
self.mb_lower_nozzle.setFlat(True)
- self.mb_lower_nozzle.setPixmap(
- QtGui.QPixmap(":/baby_step/media/btn_icons/move_nozzle_close.svg")
- )
+ self.mb_lower_nozzle.setPixmap(BlocksPixmap.get(Icon.MOVE_NOZZLE_CLOSE))
self.mb_lower_nozzle.setObjectName("bbp_away_from_bed")
self.bbp_option_button_group = QtWidgets.QButtonGroup(self)
self.bbp_option_button_group.setObjectName("bbp_option_button_group")
@@ -987,9 +980,7 @@ def _setupUi(self) -> None:
self.mb_raise_nozzle.setMaximumSize(QtCore.QSize(80, 80))
self.mb_raise_nozzle.setText("")
self.mb_raise_nozzle.setFlat(True)
- self.mb_raise_nozzle.setPixmap(
- QtGui.QPixmap(":/baby_step/media/btn_icons/move_nozzle_away.svg")
- )
+ self.mb_raise_nozzle.setPixmap(BlocksPixmap.get(Icon.MOVE_NOZZLE_AWAY))
self.mb_raise_nozzle.setObjectName("bbp_close_to_bed")
self.bbp_option_button_group.addButton(self.mb_raise_nozzle)
self.bbp_buttons_layout.addWidget(
diff --git a/BlocksScreen/lib/panels/widgets/sensorWidget.py b/BlocksScreen/lib/panels/widgets/sensorWidget.py
index c479e5dc..f3f4c734 100644
--- a/BlocksScreen/lib/panels/widgets/sensorWidget.py
+++ b/BlocksScreen/lib/panels/widgets/sensorWidget.py
@@ -2,6 +2,7 @@
import typing
from lib.utils.blocks_label import BlocksLabel
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.toggleAnimatedButton import ToggleAnimatedButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -58,12 +59,10 @@ def __init__(self, parent, sensor_name: str):
self._text_label = None
self._text = self.name
self._item_rect: QtCore.QRect = QtCore.QRect()
- self.icon_pixmap_fp: QtGui.QPixmap = QtGui.QPixmap(
- ":/filament_related/media/btn_icons/filament_sensor_turn_on.svg"
- )
- self.icon_pixmap_fnp: QtGui.QPixmap = QtGui.QPixmap(
- ":/filament_related/media/btn_icons/filament_sensor_off.svg"
+ self.icon_pixmap_fp: QtGui.QPixmap = BlocksPixmap.get(
+ Icon.FILAMENT_SENSOR_TURN_ON
)
+ self.icon_pixmap_fnp: QtGui.QPixmap = BlocksPixmap.get(Icon.FILAMENT_SENSOR_OFF)
self._setupUI()
self.toggle_button.stateChange.connect(self.toggle_sensor_state)
diff --git a/BlocksScreen/lib/panels/widgets/sensorsPanel.py b/BlocksScreen/lib/panels/widgets/sensorsPanel.py
index b1823977..4851141d 100644
--- a/BlocksScreen/lib/panels/widgets/sensorsPanel.py
+++ b/BlocksScreen/lib/panels/widgets/sensorsPanel.py
@@ -2,6 +2,7 @@
from lib.panels.widgets.sensorWidget import SensorWidget
from lib.utils.blocks_frame import BlocksCustomFrame
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.fonts import register_momcake
from lib.utils.icon_button import IconButton
from lib.utils.list_model import EntryDelegate, EntryListModel, ListItem
@@ -166,7 +167,7 @@ def _setupUi(self) -> None:
self.fs_back_button.setMinimumSize(QtCore.QSize(60, 60))
self.fs_back_button.setMaximumSize(QtCore.QSize(60, 60))
self.fs_back_button.setFlat(True)
- self.fs_back_button.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ self.fs_back_button.setPixmap(BlocksPixmap.get(Icon.BACK))
self.header_content_layout.addWidget(self.fs_back_button, 0)
self.update_page_content_layout.addLayout(self.header_content_layout, 0)
@@ -360,7 +361,7 @@ def _setupUi(self) -> None:
self.info_box_layout.addWidget(
self.no_update_placeholder, 0, QtCore.Qt.AlignmentFlag.AlignBottom
)
- self.pixmap = QtGui.QPixmap(":/ui/media/btn_icons/info.svg")
+ self.pixmap = BlocksPixmap.get(Icon.INFO)
self.no_update_placeholder.hide()
self.infobox_frame.setLayout(self.info_box_layout)
self.main_content_layout.addWidget(self.infobox_frame, 1)
diff --git a/BlocksScreen/lib/panels/widgets/slider_selector_page.py b/BlocksScreen/lib/panels/widgets/slider_selector_page.py
index da6d6b36..6cd7af2d 100644
--- a/BlocksScreen/lib/panels/widgets/slider_selector_page.py
+++ b/BlocksScreen/lib/panels/widgets/slider_selector_page.py
@@ -1,5 +1,6 @@
import typing
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.blocks_slider import BlocksSlider
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -21,13 +22,9 @@ class SliderPage(QtWidgets.QWidget):
def __init__(self, parent) -> None:
super().__init__(parent)
self.name: str = ""
- self.increase_button_icon = QtGui.QPixmap(
- ":/arrow_icons/media/btn_icons/right_arrow.svg"
- )
- self.decrease_button_icon = QtGui.QPixmap(
- ":/arrow_icons/media/btn_icons/left_arrow.svg"
- )
- self.background = QtGui.QPixmap(":/background/media/1st_background.png")
+ self.increase_button_icon = BlocksPixmap.get(Icon.RIGHT_ARROW)
+ self.decrease_button_icon = BlocksPixmap.get(Icon.LEFT_ARROW)
+ self.background = BlocksPixmap.source(Icon.BACKGROUND_1ST)
self.setStyleSheet(
"#SliderPage{background-image: url(:/background/media/1st_background.png);}\n"
)
@@ -128,7 +125,7 @@ def _setupUI(self) -> None:
)
self.back_button = IconButton(self)
- self.back_button.setPixmap(QtGui.QPixmap(":ui/media/btn_icons/back.svg"))
+ self.back_button.setPixmap(BlocksPixmap.get(Icon.BACK))
self.back_button.has_text = False
self.back_button.setMinimumSize(QtCore.QSize(60, 60))
self.back_button.setMaximumSize(QtCore.QSize(60, 60))
diff --git a/BlocksScreen/lib/panels/widgets/spoolmanPage.py b/BlocksScreen/lib/panels/widgets/spoolmanPage.py
index 0bb774bc..fd670325 100644
--- a/BlocksScreen/lib/panels/widgets/spoolmanPage.py
+++ b/BlocksScreen/lib/panels/widgets/spoolmanPage.py
@@ -5,6 +5,7 @@
from lib.panels.widgets.addSpoolPage import AddSpoolPage
from lib.panels.widgets.basePopup import BasePopup
from lib.utils.blocks_frame import BlocksCustomFrame
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.icon_button import IconButton
from lib.utils.list_model import EntryDelegate, EntryListModel, ListItem
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -337,14 +338,14 @@ def _setupUI(self) -> None: # noqa: N802
header_layout.setSpacing(0)
header_layout.setContentsMargins(0, 0, 0, 0)
- def _icon_btn(icon_path: str) -> IconButton:
+ def _icon_btn(icon: Icon) -> IconButton:
btn = IconButton(self)
btn.setFixedSize(QtCore.QSize(60, 60))
btn.setFlat(True)
- btn.setPixmap(QtGui.QPixmap(icon_path))
+ btn.setPixmap(BlocksPixmap.get(icon))
return btn
- self.reload_btn = _icon_btn(":/ui/media/btn_icons/refresh.svg")
+ self.reload_btn = _icon_btn(Icon.REFRESH)
header_layout.addWidget(self.reload_btn)
title_font = QtGui.QFont()
@@ -359,9 +360,7 @@ def _icon_btn(icon_path: str) -> IconButton:
self.main_back_button = IconButton(parent=self)
self.main_back_button.setMinimumSize(QtCore.QSize(60, 60))
self.main_back_button.setMaximumSize(QtCore.QSize(60, 60))
- self.main_back_button.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")
- )
+ self.main_back_button.setProperty("icon_pixmap", BlocksPixmap.get(Icon.BACK))
self.main_back_button.setObjectName("main_back_button")
header_layout.addWidget(self.main_back_button)
@@ -474,9 +473,7 @@ def _add_row(title_text: str) -> QtWidgets.QLabel:
self.delete_btn = IconButton(self)
self.delete_btn.setFixedSize(QtCore.QSize(60, 60))
self.delete_btn.setFlat(True)
- self.delete_btn.setPixmap(
- QtGui.QPixmap(":/ui/media/btn_icons/garbage-icon.svg")
- )
+ self.delete_btn.setPixmap(BlocksPixmap.get(Icon.GARBAGE_ICON))
normal_layout.addWidget(self.delete_btn, 0)
info_layout.addWidget(button_widget, 0, QtCore.Qt.AlignmentFlag.AlignCenter)
diff --git a/BlocksScreen/lib/panels/widgets/troubleshootPage.py b/BlocksScreen/lib/panels/widgets/troubleshootPage.py
index 0c327ac7..144b8ef2 100644
--- a/BlocksScreen/lib/panels/widgets/troubleshootPage.py
+++ b/BlocksScreen/lib/panels/widgets/troubleshootPage.py
@@ -1,3 +1,4 @@
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from PyQt6 import QtCore, QtGui, QtWidgets
from lib.utils.icon_button import IconButton
@@ -109,9 +110,7 @@ def _setupUI(self) -> None:
self.tb_back_btn.setStyleSheet("")
self.tb_back_btn.setAutoDefault(False)
self.tb_back_btn.setFlat(True)
- self.tb_back_btn.setProperty(
- "icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg")
- )
+ self.tb_back_btn.setProperty("icon_pixmap", BlocksPixmap.get(Icon.BACK))
self.tb_back_btn.setObjectName("tb_back_btn")
self.leds_slider_header_layout_2.addWidget(self.tb_back_btn)
self.verticalLayout.addLayout(self.leds_slider_header_layout_2)
diff --git a/BlocksScreen/lib/panels/widgets/tunePage.py b/BlocksScreen/lib/panels/widgets/tunePage.py
index 03997315..bf2775d7 100644
--- a/BlocksScreen/lib/panels/widgets/tunePage.py
+++ b/BlocksScreen/lib/panels/widgets/tunePage.py
@@ -3,6 +3,7 @@
import typing
from lib.utils.blocks_button import BlocksCustomButton
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.display_button import DisplayButton
from lib.utils.icon_button import IconButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -282,7 +283,7 @@ def _setupUI(self) -> None:
self.tune_back_btn.setMinimumSize(QtCore.QSize(60, 60))
self.tune_back_btn.setMaximumSize(QtCore.QSize(60, 60))
self.tune_back_btn.setFlat(True)
- self.tune_back_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ self.tune_back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
self.tune_header.addWidget(
self.tune_back_btn,
0,
@@ -311,9 +312,7 @@ def _setupUI(self) -> None:
)
self.tune_babystep_menu_btn.setAutoDefault(False)
self.tune_babystep_menu_btn.setFlat(True)
- self.tune_babystep_menu_btn.setPixmap(
- QtGui.QPixmap(":/z_levelling/media/btn_icons/baby_step_icon.svg")
- )
+ self.tune_babystep_menu_btn.setPixmap(BlocksPixmap.get(Icon.BABY_STEP_ICON))
self.tune_babystep_menu_btn.setObjectName("tune_babystep_menu_btn")
self.tune_menu_buttons.addWidget(
self.tune_babystep_menu_btn,
@@ -338,9 +337,7 @@ def _setupUI(self) -> None:
)
self.tune_change_filament_btn.setAutoDefault(False)
self.tune_change_filament_btn.setFlat(True)
- self.tune_change_filament_btn.setPixmap(
- QtGui.QPixmap(":/filament_related/media/btn_icons/change_filament.svg")
- )
+ self.tune_change_filament_btn.setPixmap(BlocksPixmap.get(Icon.CHANGE_FILAMENT))
self.tune_change_filament_btn.setObjectName("tune_change_filament_btn")
self.tune_menu_buttons.addWidget(
self.tune_change_filament_btn,
@@ -363,9 +360,7 @@ def _setupUI(self) -> None:
self.sensors_menu_btn.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight)
self.sensors_menu_btn.setAutoDefault(False)
self.sensors_menu_btn.setFlat(True)
- self.sensors_menu_btn.setPixmap(
- QtGui.QPixmap(":/filament_related/media/btn_icons/filament_sensor.svg")
- )
+ self.sensors_menu_btn.setPixmap(BlocksPixmap.get(Icon.FILAMENT_SENSOR))
self.sensors_menu_btn.setObjectName("sensors_menu_btn")
self.tune_menu_buttons.addWidget(self.sensors_menu_btn)
self.tune_content.addLayout(self.tune_menu_buttons, 0)
@@ -414,9 +409,7 @@ def _setupUI(self) -> None:
self.bed_display.setFont(font)
self.bed_display.setText("")
self.bed_display.setFlat(True)
- self.bed_display.setPixmap(
- QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature_plate.svg")
- )
+ self.bed_display.setPixmap(BlocksPixmap.get(Icon.TEMPERATURE_PLATE))
self.bed_display.setObjectName("bed_display")
self.tune_display_vertical_child_layout_1.addWidget(self.bed_display)
self.extruder_display = DisplayButton(parent=self)
@@ -429,9 +422,7 @@ def _setupUI(self) -> None:
self.extruder_display.setMaximumSize(QtCore.QSize(150, 60))
self.extruder_display.setText("")
self.extruder_display.setFlat(True)
- self.extruder_display.setPixmap(
- QtGui.QPixmap(":/temperature_related/media/btn_icons/temperature.svg")
- )
+ self.extruder_display.setPixmap(BlocksPixmap.get(Icon.TEMPERATURE))
self.extruder_display.setObjectName("extruder_display")
self.tune_display_vertical_child_layout_1.addWidget(self.extruder_display)
self.speed_display = DisplayButton(parent=self)
@@ -444,9 +435,7 @@ def _setupUI(self) -> None:
self.speed_display.setMaximumSize(QtCore.QSize(150, 60))
self.speed_display.setFont(font)
self.speed_display.setFlat(True)
- self.speed_display.setPixmap(
- QtGui.QPixmap(":/motion/media/btn_icons/speed.svg")
- )
+ self.speed_display.setPixmap(BlocksPixmap.get(Icon.SPEED))
self.speed_display.setObjectName("speed_display")
self.tune_display_vertical_child_layout_3.addWidget(self.speed_display)
self.tune_content.addLayout(self.tune_display_horizontal_parent_layout, 1)
@@ -461,9 +450,9 @@ def _setupUI(self) -> None:
self.setContentsMargins(2, 2, 2, 2)
self.path = {
- "fan_cage": QtGui.QPixmap(":/fan_related/media/btn_icons/fan_cage.svg"),
- "blower": QtGui.QPixmap(":/fan_related/media/btn_icons/blower.svg"),
- "fan": QtGui.QPixmap(":/fan_related/media/btn_icons/fan.svg"),
+ "fan_cage": BlocksPixmap.get(Icon.FAN_CAGE),
+ "blower": BlocksPixmap.get(Icon.BLOWER),
+ "fan": BlocksPixmap.get(Icon.FAN),
}
self._retranslateUI()
diff --git a/BlocksScreen/lib/panels/widgets/updatePage.py b/BlocksScreen/lib/panels/widgets/updatePage.py
index afe8e708..3d2463f9 100644
--- a/BlocksScreen/lib/panels/widgets/updatePage.py
+++ b/BlocksScreen/lib/panels/widgets/updatePage.py
@@ -5,6 +5,7 @@
import typing
from types import MappingProxyType
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.fonts import register_momcake
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -493,8 +494,7 @@ def show_loading(self, loading: bool = False) -> None:
self.disable_popups.emit(loading)
def _setupUI(self) -> None:
- # Qt files the Thin and Bold faces under one family, so both ids gave the
- # same name here; the weight is chosen per QFont, not per family.
+ # Thin and Bold share one family; weight is chosen per QFont, not per family.
self._font_family = register_momcake()
_title_family = self._font_family
@@ -520,7 +520,7 @@ def _setupUI(self) -> None:
self.update_back_btn = IconButton(self)
self.update_back_btn.setFixedSize(QtCore.QSize(66, 66))
self.update_back_btn.setFlat(True)
- self.update_back_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ self.update_back_btn.setPixmap(BlocksPixmap.get(Icon.BACK))
header.addWidget(self.update_back_btn)
title = QtWidgets.QLabel("Update Manager", self)
@@ -544,7 +544,7 @@ def _setupUI(self) -> None:
self.reload_btn = IconButton(self)
self.reload_btn.setFixedSize(QtCore.QSize(66, 66))
self.reload_btn.setFlat(True)
- self.reload_btn.setPixmap(QtGui.QPixmap(":/ui/media/btn_icons/refresh.svg"))
+ self.reload_btn.setPixmap(BlocksPixmap.get(Icon.REFRESH))
header.addWidget(self.reload_btn)
content.addLayout(header, 0)
@@ -608,9 +608,7 @@ def _setupUI(self) -> None:
self.update_all_btn.setMaximumSize(QtCore.QSize(360, 70))
self.update_all_btn.setFont(QtGui.QFont(self._font_family, 22))
self.update_all_btn.setText("Update")
- self.update_all_btn.setPixmap(
- QtGui.QPixmap(":/system/media/btn_icons/update-software-icon.svg")
- )
+ self.update_all_btn.setPixmap(BlocksPixmap.get(Icon.UPDATE_SOFTWARE_ICON))
content.addWidget(self.update_all_btn, 0, QtCore.Qt.AlignmentFlag.AlignCenter)
self.update_all_btn.hide()
@@ -626,7 +624,7 @@ def _setupUI(self) -> None:
self._toast_timer.setInterval(12000)
self._toast_timer.timeout.connect(self._toast.hide)
- _arrow = QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_right.svg")
+ _arrow = BlocksPixmap.get(Icon.ARROW_RIGHT)
self._chevron_right: QtGui.QPixmap = _arrow
self._chevron_down: QtGui.QPixmap = _arrow.transformed(
QtGui.QTransform().rotate(90),
diff --git a/BlocksScreen/lib/utils/blocks_pixmap.py b/BlocksScreen/lib/utils/blocks_pixmap.py
index 419f0c11..f4e2ba28 100644
--- a/BlocksScreen/lib/utils/blocks_pixmap.py
+++ b/BlocksScreen/lib/utils/blocks_pixmap.py
@@ -1,23 +1,11 @@
-"""One load-once registry for every Qt resource pixmap the panel draws.
-
-Loading an icon by path yields its intrinsic buffer, which for most of the
-btn_icons is a 600x600 RGBA surface costing 1.37 MiB even when it is painted at
-32px. Going through QIcon instead makes QSvgIconEngine rasterize at the
-requested size: measured on the RF50, the whole set costs 16.1 MiB at 64px
-against 273.0 MiB intrinsic, and loads in 278 ms against 848 ms.
-
-Every path lives in the Icon enum so a typo is a NameError rather than Qt's
-silent null pixmap, and tests/util/test_blocks_pixmap_unit.py proves each member
-still resolves.
-"""
+"""Load-once pixmap registry: 16.1 MiB at 64px against 273.0 MiB intrinsic on the RF50."""
from enum import StrEnum
from typing import ClassVar
from PyQt6 import QtCore, QtGui
-# Setup-time callers cannot know their paint size, and the widgets rescale anyway;
-# 128 clears the tallest button (90px hole, 0.8 fill) at 64 KiB a surface.
+# Widgets rescale anyway; 128 clears the tallest button at 64 KiB a surface.
ICON_SIZE = QtCore.QSize(128, 128)
@@ -124,7 +112,8 @@ class BlocksPixmap:
_icons: ClassVar[dict[str, QtGui.QIcon]] = {}
_pixmaps: ClassVar[dict[tuple[str, int, int], QtGui.QPixmap]] = {}
- _MAX_PIXMAPS = 64
+ # An evicted entry a widget still holds only mints a duplicate.
+ _MAX_PIXMAPS = len(Icon) * 2
@classmethod
def icon(cls, icon: Icon | str) -> QtGui.QIcon:
diff --git a/BlocksScreen/lib/utils/blocks_togglebutton.py b/BlocksScreen/lib/utils/blocks_togglebutton.py
index c97e8f1f..60b004c1 100644
--- a/BlocksScreen/lib/utils/blocks_togglebutton.py
+++ b/BlocksScreen/lib/utils/blocks_togglebutton.py
@@ -1,4 +1,5 @@
from lib.utils.blocks_label import BlocksLabel
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from lib.utils.toggleAnimatedButton import ToggleAnimatedButton
from PyQt6 import QtCore, QtGui, QtWidgets
@@ -13,8 +14,8 @@ def __init__(self, parent):
self._icon_label = None
self._text_label = None
self._text: str = "la test"
- self.icon_pixmap_fp: QtGui.QPixmap = QtGui.QPixmap(
- ":/filament_related/media/btn_icons/filament_sensor_turn_on.svg"
+ self.icon_pixmap_fp: QtGui.QPixmap = BlocksPixmap.get(
+ Icon.FILAMENT_SENSOR_TURN_ON
)
self._setupUI()
diff --git a/BlocksScreen/lib/utils/fonts.py b/BlocksScreen/lib/utils/fonts.py
index f092ab39..2e0867cd 100644
--- a/BlocksScreen/lib/utils/fonts.py
+++ b/BlocksScreen/lib/utils/fonts.py
@@ -1,12 +1,4 @@
-"""Single registration point for the bundled Momcake faces.
-
-Qt files both Momcake-Thin.ttf and Momcake-Bold.ttf under one family whose real
-name matches neither file: "Momcake Pro". Asking for "Momcake-Thin" or "Momcake"
-silently resolves to the system default, which is how every topbar filament icon
-ended up rendering in a fallback face. Registration is also process-global and
-permanent, so doing it once here removes the ordering race that came from three
-page constructors each registering on first visit.
-"""
+"""Registers the bundled Momcake faces once; Qt files both .ttf under 'Momcake Pro'."""
import functools
import logging
@@ -15,8 +7,7 @@
_logger = logging.getLogger(__name__)
-# Must stay in sync with the font-family the topbar .svg assets declare;
-# tests/ui/test_resource_keys_unit.py fails if the two ever drift apart.
+# Must match the topbar .svg font-family; test_resource_keys_unit.py guards the drift.
MOMCAKE_FAMILY = "Momcake Pro"
_FONT_PATHS = (
diff --git a/BlocksScreen/lib/utils/list_model.py b/BlocksScreen/lib/utils/list_model.py
index a1a6377c..470766fb 100644
--- a/BlocksScreen/lib/utils/list_model.py
+++ b/BlocksScreen/lib/utils/list_model.py
@@ -1,6 +1,7 @@
import typing
from dataclasses import dataclass, field
+from lib.utils.blocks_pixmap import BlocksPixmap, Icon
from PyQt6 import QtCore, QtGui, QtWidgets # pylint: disable=import-error
@@ -423,9 +424,9 @@ def paint(
return
if item.allow_expand and item.needs_expansion:
item.right_icon = (
- QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_down.svg")
+ BlocksPixmap.get(Icon.ARROW_DOWN)
if item.is_expanded
- else QtGui.QPixmap(":/arrow_icons/media/btn_icons/arrow_right.svg")
+ else BlocksPixmap.get(Icon.ARROW_RIGHT)
)
# Background Color
diff --git a/tests/network/conftest.py b/tests/network/conftest.py
index e37d84df..05650e0c 100644
--- a/tests/network/conftest.py
+++ b/tests/network/conftest.py
@@ -281,8 +281,7 @@ def set_value(self, val):
sys.modules[_mod_name] = _stub
sys.modules["BlocksScreen." + _mod_name] = _stub
-# blocks_pixmap is a pure-PyQt6 leaf: alias the real module so the identity
-# assertions in test_network_ui.py compare real cache entries, not mock children.
+# Pure-PyQt6 leaf: alias the real module so identity assertions see real cache entries.
sys.modules["lib.utils.blocks_pixmap"] = importlib.import_module(
"BlocksScreen.lib.utils.blocks_pixmap"
)
diff --git a/tests/network/test_network_ui.py b/tests/network/test_network_ui.py
index b0dbf3aa..801978d9 100644
--- a/tests/network/test_network_ui.py
+++ b/tests/network/test_network_ui.py
@@ -973,11 +973,11 @@ def _stub_init(self, *_a, **_kw):
@pytest.mark.unit
class TestHelperClasses:
def test_wifi_icon_provider_picks_the_asset_for_the_signal(self, qapp):
+ """75% signal picks the 4-bar protected asset."""
from BlocksScreen.lib.panels.networkWindow import WifiIconProvider
from BlocksScreen.lib.utils.blocks_pixmap import BlocksPixmap, Icon
- # Identity, not isNull: this suite never imports the _rc blobs, so every
- # pixmap here is null and only the cache key tells the assets apart.
+ # Identity not isNull: no _rc blob is imported here, so every pixmap is null.
px = WifiIconProvider.get_pixmap(75, is_protected=True)
assert px is BlocksPixmap.get(Icon.WIFI_4BAR_PROTECTED)
diff --git a/tests/ui/test_resource_keys_unit.py b/tests/ui/test_resource_keys_unit.py
index b3db8b08..4cb23d95 100644
--- a/tests/ui/test_resource_keys_unit.py
+++ b/tests/ui/test_resource_keys_unit.py
@@ -1,14 +1,4 @@
-"""Guards Qt resource keys: no broken ':/' literal, no stale blob, no font fallback.
-
-Qt resolves an unknown ':/' key to a null QPixmap with no exception, no warning
-and no log line, and it substitutes the system face for an unknown font-family
-just as quietly. The only feedback is a blank rectangle or the wrong typeface on
-the panel, which is how the keys in XFAIL_KEYS survived for months and how all 10
-topbar filament icons shipped in a fallback font. These tests turn that silent
-failure into a red test.
-
-Scans .py and .ui: Designer stores keys as bare element text, 56 such sites.
-"""
+"""Guards Qt resource keys: no broken ':/' literal, no stale blob, no font fallback."""
import importlib
import re
@@ -20,9 +10,7 @@
RESOURCES = PKG_ROOT / "lib" / "ui" / "resources"
RC_PACKAGE = "BlocksScreen.lib.ui.resources"
-# Known-broken keys. This dict may only ever shrink: test_xfail_keys_are_still_broken
-# fails once an entry stops being broken. Emptied 2026-09-01 when Icon replaced the
-# last f-string key template.
+# Known-broken keys, may only shrink; emptied 2026-09-01 when Icon replaced the templates.
XFAIL_KEYS: dict[str, str] = {}
# Text scan not AST (misses .ui XML); '/' drops ": %s", spaces admit Momcake keys.
@@ -31,8 +19,10 @@
# .ui keys are unquoted element text: :/x/y.svg.
_UI_LITERAL = re.compile(r">(:/?[^<\s][^<]*/[^<]*)<")
-# Matches the CSS in an .svg