33
44import pyqtgraph as pg
55from bec_lib .logger import bec_logger
6- from qtpy import QtCore , QtGui , QtWidgets
76from qtpy .QtCore import QPointF , QSize , Qt
8- from qtpy .QtWidgets import QFrame , QHBoxLayout , QLabel , QVBoxLayout , QWidget
7+ from qtpy .QtWidgets import QHBoxLayout , QLabel , QVBoxLayout , QWidget
98
109from bec_widgets .utils import Colors
1110from bec_widgets .utils .bec_widget import BECWidget
1211from bec_widgets .utils .error_popups import SafeProperty
1312from bec_widgets .utils .settings_dialog import SettingsDialog
1413from bec_widgets .utils .toolbars .actions import MaterialIconAction
1514from bec_widgets .utils .toolbars .toolbar import ModularToolBar
15+ from bec_widgets .widgets .containers .main_window .addons .hover_widget import WidgetTooltip
1616from bec_widgets .widgets .progress .ring_progress_bar .ring import Ring
1717from bec_widgets .widgets .progress .ring_progress_bar .ring_progress_settings_cards import RingSettings
1818
1919logger = bec_logger .logger
2020
2121
22- class RingHoverTooltip (QFrame ):
23- def __init__ (self , parent : QWidget | None = None ):
24- super ().__init__ (parent , Qt .WindowType .ToolTip | Qt .WindowType .FramelessWindowHint )
25- self .setObjectName ("RingHoverTooltip" )
26- self .setAttribute (Qt .WidgetAttribute .WA_ShowWithoutActivating , True )
27- self .setAttribute (Qt .WidgetAttribute .WA_TransparentForMouseEvents , True )
28-
29- layout = QVBoxLayout (self )
30- layout .setContentsMargins (12 , 10 , 12 , 10 )
31-
32- self .label = QLabel (self )
33- self .label .setWordWrap (True )
34- self .label .setTextFormat (Qt .TextFormat .PlainText )
35- layout .addWidget (self .label )
36-
37- shadow = QtWidgets .QGraphicsDropShadowEffect (self )
38- shadow .setBlurRadius (18 )
39- shadow .setOffset (0 , 2 )
40- shadow .setColor (QtGui .QColor (0 , 0 , 0 , 140 ))
41- self .setGraphicsEffect (shadow )
42- self .apply_theme ()
43-
44- def apply_theme (self ):
45- palette = QtWidgets .QApplication .palette ()
46- base = palette .color (QtGui .QPalette .ColorRole .Base )
47- text = palette .color (QtGui .QPalette .ColorRole .Text )
48- border = palette .color (QtGui .QPalette .ColorRole .Mid )
49- background = QtGui .QColor (base )
50- background .setAlpha (242 )
51- self .setStyleSheet (
52- f"""
53- QFrame#RingHoverTooltip {{
54- background: { background .name (QtGui .QColor .NameFormat .HexArgb )} ;
55- border: 1px solid { border .name ()} ;
56- border-radius: 12px;
57- }}
58- QFrame#RingHoverTooltip QLabel {{
59- color: { text .name ()} ;
60- background: transparent;
61- font-size: 12px;
62- }}
63- """
64- )
65-
66- def show_tooltip (self , text : str , global_pos : QtCore .QPoint ):
67- self .label .setText (text )
68- self .label .setMaximumWidth (260 )
69- self .label .adjustSize ()
70- self .adjustSize ()
71- self .move (global_pos + QtCore .QPoint (14 , 18 ))
72- self .show ()
73- self .raise_ ()
74-
75-
7622class RingProgressContainerWidget (QWidget ):
7723 """
7824 A container widget for the Ring Progress Bar widget.
@@ -85,8 +31,13 @@ def __init__(self, parent: QWidget | None = None, **kwargs):
8531 self .gap = 20 # Gap between rings
8632 self .color_map : str = "turbo"
8733 self ._hovered_ring : Ring | None = None
88- self ._last_hover_global_pos : QtCore .QPoint | None = None
89- self ._hover_tooltip = RingHoverTooltip ()
34+ self ._last_hover_global_pos = None
35+ self ._hover_tooltip_label = QLabel ()
36+ self ._hover_tooltip_label .setWordWrap (True )
37+ self ._hover_tooltip_label .setTextFormat (Qt .TextFormat .PlainText )
38+ self ._hover_tooltip_label .setMaximumWidth (260 )
39+ self ._hover_tooltip_label .setStyleSheet ("font-size: 12px;" )
40+ self ._hover_tooltip = WidgetTooltip (self ._hover_tooltip_label )
9041 self .setLayout (QHBoxLayout ())
9142 self .setMouseTracking (True )
9243 self .initialize_bars ()
@@ -298,10 +249,12 @@ def refresh_hover_tooltip(self, ring: Ring, event=None):
298249 )
299250 if self ._last_hover_global_pos is None :
300251 return
252+ self ._hover_tooltip_label .setText (text )
301253 self ._hover_tooltip .apply_theme ()
302- self ._hover_tooltip .show_tooltip ( text , self ._last_hover_global_pos )
254+ self ._hover_tooltip .show_near ( self ._last_hover_global_pos )
303255
304- def _build_tooltip_text (self , ring : Ring ) -> str :
256+ @staticmethod
257+ def _build_tooltip_text (ring : Ring ) -> str :
305258 mode = ring .config .mode
306259 mode_label = {"manual" : "Manual" , "scan" : "Scan progress" , "device" : "Device" }.get (
307260 mode , mode
0 commit comments