QtGui.QWidget.paintEvent(self, paintEvent)
def selectAt(self, index):
+ oldIndex = self._selectionIndex
self._selectionIndex = index
- self.update()
+ if self.isVisible():
+ self.update()
class QPieButton(QtGui.QWidget):
aboutToHide = QtCore.pyqtSignal()
BUTTON_RADIUS = 24
+ DELAY = 250
def __init__(self, buttonSlice, parent = None):
QtGui.QWidget.__init__(self, parent)
self._buttonArtist = PieArtist(self._buttonFiling)
self._poppedUp = False
+ self._delayPopupTimer = QtCore.QTimer()
+ self._delayPopupTimer.setInterval(self.DELAY)
+ self._delayPopupTimer.setSingleShot(True)
+ self._delayPopupTimer.timeout.connect(self._on_delayed_popup)
+ self._popupLocation = None
+
self._mousePosition = None
self.setFocusPolicy(QtCore.Qt.StrongFocus)
@misc_utils.log_exception(_moduleLogger)
def mousePressEvent(self, mouseEvent):
- self._popup_child(mouseEvent.globalPos())
lastSelection = self._selectionIndex
lastMousePos = mouseEvent.pos()
self._mousePosition = lastMousePos
self._update_selection(self._cachedCenterPosition)
- if lastSelection != self._selectionIndex:
- self.highlighted.emit(self._selectionIndex)
- self._display.selectAt(self._selectionIndex)
+ self.highlighted.emit(self._selectionIndex)
+
+ self._display.selectAt(self._selectionIndex)
+ self._popupLocation = mouseEvent.globalPos()
+ self._delayPopupTimer.start()
+
+ @misc_utils.log_exception(_moduleLogger)
+ def _on_delayed_popup(self):
+ assert self._popupLocation is not None
+ self._popup_child(self._popupLocation)
@misc_utils.log_exception(_moduleLogger)
def mouseMoveEvent(self, mouseEvent):
self.highlighted.emit(self._selectionIndex)
self._display.selectAt(self._selectionIndex)
+ if self._selectionIndex != PieFiling.SELECTION_CENTER and self._delayPopupTimer.isActive():
+ self._on_delayed_popup()
+
@misc_utils.log_exception(_moduleLogger)
def mouseReleaseEvent(self, mouseEvent):
+ self._delayPopupTimer.stop()
+ self._popupLocation = None
+
lastSelection = self._selectionIndex
lastMousePos = mouseEvent.pos()
self._select_at(PieFiling.SELECTION_CENTER)
self._display.selectAt(self._selectionIndex)
elif keyEvent.key() in [QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter, QtCore.Qt.Key_Space]:
+ self._delayPopupTimer.stop()
+ self._popupLocation = None
self._activate_at(self._selectionIndex)
self._hide_child()
elif keyEvent.key() in [QtCore.Qt.Key_Escape, QtCore.Qt.Key_Backspace]:
+ self._delayPopupTimer.stop()
+ self._popupLocation = None
self._activate_at(PieFiling.SELECTION_NONE)
self._hide_child()
else:
self._poppedUp = True
self.aboutToShow.emit()
+ self._delayPopupTimer.stop()
+ self._popupLocation = None
+
position = position - QtCore.QPoint(self._filing.outerRadius(), self._filing.outerRadius())
self._display.move(position)
self._display.show()