|
13 | 13 | import qtpy
|
14 | 14 | import superqt
|
15 | 15 | from qtpy import QtWidgets as QtW
|
16 |
| -from qtpy.QtCore import QEvent, QObject, Qt, Signal |
| 16 | +from qtpy.QtCore import QEvent, QObject, QSize, Qt, Signal |
17 | 17 | from qtpy.QtGui import (
|
18 | 18 | QFont,
|
19 | 19 | QFontMetrics,
|
@@ -1217,6 +1217,63 @@ def _mgui_get_value(self):
|
1217 | 1217 | return self._qwidget.time().toPyTime()
|
1218 | 1218 |
|
1219 | 1219 |
|
| 1220 | +class ToolBar(QBaseWidget): |
| 1221 | + _qwidget: QtW.QToolBar |
| 1222 | + |
| 1223 | + def __init__(self, **kwargs: Any) -> None: |
| 1224 | + super().__init__(QtW.QToolBar, **kwargs) |
| 1225 | + self._qwidget.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextUnderIcon) |
| 1226 | + self._event_filter.paletteChanged.connect(self._on_palette_change) |
| 1227 | + |
| 1228 | + def _on_palette_change(self): |
| 1229 | + for action in self._qwidget.actions(): |
| 1230 | + if icon := action.data(): |
| 1231 | + if qicon := _get_qicon(icon, None, palette=self._qwidget.palette()): |
| 1232 | + action.setIcon(qicon) |
| 1233 | + |
| 1234 | + def _mgui_add_button(self, text: str, icon: str, callback: Callable) -> None: |
| 1235 | + """Add an action to the toolbar.""" |
| 1236 | + act = self._qwidget.addAction(text, callback) |
| 1237 | + if qicon := _get_qicon(icon, None, palette=self._qwidget.palette()): |
| 1238 | + act.setIcon(qicon) |
| 1239 | + act.setData(icon) |
| 1240 | + |
| 1241 | + def _mgui_add_separator(self) -> None: |
| 1242 | + """Add a separator line to the toolbar.""" |
| 1243 | + self._qwidget.addSeparator() |
| 1244 | + |
| 1245 | + def _mgui_add_spacer(self) -> None: |
| 1246 | + """Add a spacer to the toolbar.""" |
| 1247 | + empty = QtW.QWidget() |
| 1248 | + empty.setSizePolicy( |
| 1249 | + QtW.QSizePolicy.Policy.Expanding, QtW.QSizePolicy.Policy.Preferred |
| 1250 | + ) |
| 1251 | + self._qwidget.addWidget(empty) |
| 1252 | + |
| 1253 | + def _mgui_add_widget(self, widget: Widget) -> None: |
| 1254 | + """Add a widget to the toolbar.""" |
| 1255 | + self._qwidget.addWidget(widget.native) |
| 1256 | + |
| 1257 | + def _mgui_get_icon_size(self) -> tuple[int, int] | None: |
| 1258 | + """Return the icon size of the toolbar.""" |
| 1259 | + sz = self._qwidget.iconSize() |
| 1260 | + return None if sz.isNull() else (sz.width(), sz.height()) |
| 1261 | + |
| 1262 | + def _mgui_set_icon_size(self, size: int | tuple[int, int] | None) -> None: |
| 1263 | + """Set the icon size of the toolbar.""" |
| 1264 | + if isinstance(size, int): |
| 1265 | + _size = QSize(size, size) |
| 1266 | + elif isinstance(size, tuple): |
| 1267 | + _size = QSize(size[0], size[1]) |
| 1268 | + else: |
| 1269 | + _size = QSize() |
| 1270 | + self._qwidget.setIconSize(_size) |
| 1271 | + |
| 1272 | + def _mgui_clear(self) -> None: |
| 1273 | + """Clear the toolbar.""" |
| 1274 | + self._qwidget.clear() |
| 1275 | + |
| 1276 | + |
1220 | 1277 | class Dialog(QBaseWidget, protocols.ContainerProtocol):
|
1221 | 1278 | def __init__(
|
1222 | 1279 | self, layout="vertical", scrollable: bool = False, **kwargs: Any
|
|
0 commit comments