feature/AY-3430_revert_to_default_context_menu_option

This commit is contained in:
Braden Jennings 2024-03-06 17:00:51 +13:00
parent d3d359663e
commit c36121f924

View file

@ -313,7 +313,10 @@ class NumberAttrWidget(_BaseAttrDefWidget):
self.main_layout.addWidget(multisel_widget, 0)
def eventFilter(self, obj, event):
if (
if event.type() == QtCore.QEvent.Type.ContextMenu:
QtCore.QTimer.singleShot(0, self._on_menu_timeout)
super(NumberAttrWidget, self).contextMenuEvent(event)
elif (
self._multivalue
and obj is self._input_widget
and event.type() == QtCore.QEvent.FocusOut
@ -321,6 +324,18 @@ class NumberAttrWidget(_BaseAttrDefWidget):
self._set_multiselection_visible(True)
return False
def _on_menu_timeout(self):
menu = self.findChild(QtWidgets.QMenu, "qt_edit_menu")
if menu is not None:
first_action = menu.actionAt(QtCore.QPoint())
action = QtWidgets.QAction(menu)
action.setText("Reset to default")
action.triggered.connect(self.reset_to_default_requested)
menu.insertAction(first_action, action)
def reset_to_default_requested(self):
self.set_value(self.attr_def.default)
def current_value(self):
return self._input_widget.value()
@ -403,10 +418,30 @@ class TextAttrWidget(_BaseAttrDefWidget):
input_widget.textChanged.connect(self._on_value_change)
input_widget.installEventFilter(self)
self._input_widget = input_widget
self.main_layout.addWidget(input_widget, 0)
def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.Type.ContextMenu:
QtCore.QTimer.singleShot(0, self._on_menu_timeout)
super(TextAttrWidget, self).contextMenuEvent(event)
return False
def _on_menu_timeout(self):
menu = self.findChild(QtWidgets.QMenu, "qt_edit_menu")
if menu is not None:
first_action = menu.actionAt(QtCore.QPoint())
action = QtWidgets.QAction(menu)
action.setText("Reset to default")
action.triggered.connect(self.reset_to_default_requested)
menu.insertAction(first_action, action)
def reset_to_default_requested(self):
self.set_value(self.attr_def.default)
def _on_value_change(self):
if self.multiline:
new_value = self._input_widget.toPlainText()
@ -459,6 +494,24 @@ class BoolAttrWidget(_BaseAttrDefWidget):
self.main_layout.addWidget(input_widget, 0)
self.main_layout.addStretch(1)
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self._on_context_menu)
def _on_context_menu(self, pos):
print("_on_context_menu", pos)
self._menu = QtWidgets.QMenu(self)
action = QtWidgets.QAction(self._menu)
action.setText("Reset to default")
action.triggered.connect(self.reset_to_default_requested)
self._menu.addAction(action)
global_pos = self.mapToGlobal(pos)
self._menu.exec_(global_pos)
def reset_to_default_requested(self):
self.set_value(self.attr_def.default)
def _on_value_change(self):
new_value = self._input_widget.isChecked()
self.value_changed.emit(new_value, self.attr_def.id)
@ -489,6 +542,29 @@ class EnumAttrWidget(_BaseAttrDefWidget):
self._multivalue = False
super(EnumAttrWidget, self).__init__(*args, **kwargs)
self._input_widget.installEventFilter(self)
def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.Type.ContextMenu:
print("eventFilter QtCore.QEvent.Type.ContextMenu")
self._on_context_menu(event.pos())
return False
def _on_context_menu(self, pos):
print("_on_context_menu", pos)
self._menu = QtWidgets.QMenu(self)
self._action = QtWidgets.QAction(self._menu)
self._action.setText("Reset to default")
self._action.triggered.connect(self.reset_to_default_requested)
self._menu.addAction(self._action)
global_pos = self.mapToGlobal(pos)
self._menu.exec_(global_pos)
def reset_to_default_requested(self):
self.set_value(self.attr_def.default)
@property
def multiselection(self):
return self.attr_def.multiselection