Skip to content

Commit e4a9a1a

Browse files
committed
WIP hover widget implemented to the ring
1 parent 98db9a1 commit e4a9a1a

1 file changed

Lines changed: 13 additions & 60 deletions

File tree

bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py

Lines changed: 13 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -3,76 +3,22 @@
33

44
import pyqtgraph as pg
55
from bec_lib.logger import bec_logger
6-
from qtpy import QtCore, QtGui, QtWidgets
76
from 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

109
from bec_widgets.utils import Colors
1110
from bec_widgets.utils.bec_widget import BECWidget
1211
from bec_widgets.utils.error_popups import SafeProperty
1312
from bec_widgets.utils.settings_dialog import SettingsDialog
1413
from bec_widgets.utils.toolbars.actions import MaterialIconAction
1514
from bec_widgets.utils.toolbars.toolbar import ModularToolBar
15+
from bec_widgets.widgets.containers.main_window.addons.hover_widget import WidgetTooltip
1616
from bec_widgets.widgets.progress.ring_progress_bar.ring import Ring
1717
from bec_widgets.widgets.progress.ring_progress_bar.ring_progress_settings_cards import RingSettings
1818

1919
logger = 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-
7622
class 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

Comments
 (0)