Source code for eye.widgets.helpers
# this project is licensed under the WTFPLv2, see COPYING.txt for details
from PyQt5.QtCore import Qt, QEvent
from eye.connector import CategoryMixin
from eye.qt import Signal, override
__all__ = (
'accept_if', 'CategoryMixin', 'WidgetMixin', 'CentralWidgetMixin',
'parent_tab_widget',
)
[docs]
def accept_if(ev, cond):
"""Accept an event if a condition is True, else ignore it.
:param ev: the event to accept or ignore
:type ev: QEvent
:param cond: the condition determining whether the event should be accepted or ignored
:returns: whether the event was accepted or not
"""
if cond:
ev.accept()
else:
ev.ignore()
return ev.isAccepted()
[docs]
class WidgetMixin(CategoryMixin):
def __init__(self, **kwargs):
super().__init__(**kwargs)
[docs]
def give_focus(self, reason=Qt.OtherFocusReason):
if not self.isActiveWindow():
self.activateWindow()
return self.setFocus(reason)
[docs]
class CentralWidgetMixin(WidgetMixin):
windowModifiedChanged = Signal(bool)
def __init__(self, **kwargs):
super().__init__(**kwargs)
[docs]
def give_focus(self, reason=Qt.OtherFocusReason):
if not self.isActiveWindow():
self.activateWindow()
tab_bar = parent_tab_widget(self)
if tab_bar:
tab_bar.setCurrentWidget(self)
return self.setFocus(reason)
[docs]
@override
def changeEvent(self, ev):
try:
super_method = super().changeEvent
except AttributeError:
pass
else:
super_method(ev)
if ev.type() == QEvent.ModifiedChange:
self.windowModifiedChanged.emit(self.isWindowModified())
[docs]
def parent_tab_widget(widget):
while widget:
if hasattr(widget, 'categories') and 'tabwidget' in widget.categories():
break
widget = widget.parent()
return widget