mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix tooltips not being displayed for layout buttons in layout menu
This commit is contained in:
parent
a8dfb5885f
commit
f01474325e
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
from qt.core import (
|
from qt.core import (
|
||||||
QFontMetrics, QHBoxLayout, QIcon, QMenu, QStylePainter, QPushButton, QSize,
|
QFontMetrics, QHBoxLayout, QIcon, QMenu, QStylePainter, QPushButton, QSize,
|
||||||
QSizePolicy, Qt, QWidget, QStyleOption, QStyle, QEvent)
|
QSizePolicy, Qt, QWidget, QStyleOption, QStyle)
|
||||||
|
|
||||||
|
|
||||||
ICON_SZ = 64
|
ICON_SZ = 64
|
||||||
@ -12,9 +12,10 @@ ICON_SZ = 64
|
|||||||
|
|
||||||
class LayoutItem(QWidget):
|
class LayoutItem(QWidget):
|
||||||
|
|
||||||
|
mouse_over = False
|
||||||
|
|
||||||
def __init__(self, button, parent=None):
|
def __init__(self, button, parent=None):
|
||||||
QWidget.__init__(self, parent)
|
QWidget.__init__(self, parent)
|
||||||
self.mouse_over = False
|
|
||||||
self.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
|
self.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
|
||||||
self.button = button
|
self.button = button
|
||||||
self.text = button.label
|
self.text = button.label
|
||||||
@ -22,6 +23,10 @@ class LayoutItem(QWidget):
|
|||||||
self.fm = QFontMetrics(self.font())
|
self.fm = QFontMetrics(self.font())
|
||||||
self._bi = self._di = None
|
self._bi = self._di = None
|
||||||
|
|
||||||
|
def update_tips(self):
|
||||||
|
self.setToolTip(self.button.toolTip())
|
||||||
|
self.setStatusTip(self.button.statusTip())
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def bright_icon(self):
|
def bright_icon(self):
|
||||||
if self._bi is None:
|
if self._bi is None:
|
||||||
@ -34,17 +39,17 @@ class LayoutItem(QWidget):
|
|||||||
self._di = self.button.icon().pixmap(ICON_SZ, ICON_SZ, mode=QIcon.Mode.Disabled)
|
self._di = self.button.icon().pixmap(ICON_SZ, ICON_SZ, mode=QIcon.Mode.Disabled)
|
||||||
return self._di
|
return self._di
|
||||||
|
|
||||||
def event(self, ev):
|
def enterEvent(self, ev):
|
||||||
m = None
|
super().enterEvent(ev)
|
||||||
et = ev.type()
|
if not self.mouse_over:
|
||||||
if et == QEvent.Type.Enter:
|
self.mouse_over = True
|
||||||
m = True
|
self.update()
|
||||||
elif et == QEvent.Type.Leave:
|
|
||||||
m = False
|
def leaveEvent(self, ev):
|
||||||
if m is not None and m != self.mouse_over:
|
super().leaveEvent(ev)
|
||||||
self.mouse_over = m
|
if self.mouse_over:
|
||||||
|
self.mouse_over = False
|
||||||
self.update()
|
self.update()
|
||||||
return QWidget.event(self, ev)
|
|
||||||
|
|
||||||
def sizeHint(self):
|
def sizeHint(self):
|
||||||
br = self.fm.boundingRect(self.text)
|
br = self.fm.boundingRect(self.text)
|
||||||
@ -100,8 +105,13 @@ class LayoutMenu(QMenu):
|
|||||||
for b in buttons:
|
for b in buttons:
|
||||||
self.items.append(LayoutItem(b, self))
|
self.items.append(LayoutItem(b, self))
|
||||||
l.addWidget(self.items[-1])
|
l.addWidget(self.items[-1])
|
||||||
|
self.aboutToShow.connect(self.about_to_show)
|
||||||
self.current_item = None
|
self.current_item = None
|
||||||
|
|
||||||
|
def about_to_show(self):
|
||||||
|
for x in self.items:
|
||||||
|
x.update_tips()
|
||||||
|
|
||||||
def sizeHint(self):
|
def sizeHint(self):
|
||||||
return QWidget.sizeHint(self)
|
return QWidget.sizeHint(self)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user