Beispiel #1
0
 def keyPressEvent(self, event: QEvent):
     super().keyPressEvent(event)
     if event.key() in [Qt.Key_Space, Qt.Key_Escape]:
         event.accept()
         self.accept.emit()
     else:
         event.ignore()
Beispiel #2
0
 def eventFilter(self, widget: QObject, event: QEvent):
     """
     Event filter to ignore wheel events in comboboxes to prevent accidental changes to them.
     """
     if event.type(
     ) == QEvent.Wheel:  # and widget and not widget.hasFocus():
         event.ignore()
         return True
     return QObject.eventFilter(self, widget, event)
Beispiel #3
0
    def keyPressEvent(self, event: QEvent):
        key = event.key()
        logger.info("keyPressEvent: %s", key)

        if key in [Qt.Key_Q]:
            event.accept()
            self.quit.emit()
        else:
            event.ignore()
Beispiel #4
0
 def eventFilter(self, widget: QObject, event: QEvent):
     """
     Event filter to ignore wheel events in comboboxes to prevent accidental changes to them.
     """
     if event.type() == QEvent.Wheel and widget and not widget.hasFocus():
         event.ignore()
         return True
     # if event.type() == QEvent.MouseButtonPress:
     #    self.cell_clicked.emit(event.)
     return QObject.eventFilter(self, widget, event)
Beispiel #5
0
    def closeEvent(self, event: QEvent = None):
        """Overloaded, allows saving changes or canceling close

        :param event: Any QEvent

        """

        if event:
            event.ignore()
        self.workflows.file_quit()  # has @handle_changed_since_save decorator
Beispiel #6
0
 def event(self, event: QEvent) -> bool:
     if event.type() == QEvent.ToolTip:
         tt = self.isValidIndex(self._hoverIndex) and self.tabToolTip(
             self._hoverIndex)
         if tt:
             QToolTip.showText(event.globalPos(), tt, self, self._hoverRect)
         else:
             QToolTip.hideText()
             event.ignore()
         return True
     return super().event(event)
Beispiel #7
0
    def closeEvent(self, e: QtCore.QEvent) -> None:
        """
        Capture event close.
        """
        self.frameGeometry()
        if self.focusWidget():
            parent = self.focusWidget().parentWidget()
            if parent:
                fdb = cast(flfielddb.FLFieldDB, parent)
                acf_ = getattr(fdb, "autoComFrame_", None)
                if acf_ and acf_.autoComFrame_.isVisible():
                    acf_.hide()
                    return

        if self.cursor_:

            try:
                levels = self.cursor_.transactionLevel() - self.initTransLevel
                if levels > 0:
                    self.cursor_.rollbackOpened(
                        levels,
                        "Se han detectado transacciones no finalizadas en la última operación.\n"
                        "Se van a cancelar las transacciones pendientes.\n"
                        "Los últimos datos introducidos no han sido guardados, por favor\n"
                        "revise sus últimas acciones y repita las operaciones que no\n"
                        "se han guardado.\n"
                        "FLFormRecordDB::closeEvent: %s %s" %
                        (levels, self.name()),
                    )
            except Exception:
                print(
                    "ERROR: FLFormRecordDB @ closeEvent :: las transacciones aún no funcionan."
                )

            if self.accepted_:
                if not self.cursor_.commit():
                    return
                self.afterCommitTransaction()
            else:
                if not self.cursor_.rollback():
                    e.ignore()
                    return
                # else:
                #    self.cursor_.select()

            self.closed.emit()
            self.setCursor(None)
        else:
            self.closed.emit()

        super(FLFormRecordDB, self).closeEvent(e)
        self.deleteLater()
Beispiel #8
0
    def keyPressEvent(self, e: QtCore.QEvent):
        if e.key() == 16777223:  # delete
            if len(self.text()):
                self.last_text = self.text()

            self.setText("")

        elif e.key() == 90 and e.modifiers(
        ) == QtCore.Qt.ControlModifier:  # ctrl+z
            if self.last_text:
                self.setText(self.last_text)
                self.last_text = None

        else:
            e.ignore()
Beispiel #9
0
    def keyPressEvent(self, event: QtCore.QEvent):
        if event.key() == 90 and event.modifiers(
        ) == QtCore.Qt.ControlModifier:
            if self.deleted_domain:
                domain = self.deleted_domain
                self.addDomain(
                    domain[1], domain[0], domain[2]
                )  # addDomain(name, id_)  /  domain = (id_, name, indexAt)

                if hasattr(self.parent.window, "config"):
                    self.parent.window.config.write("peers",
                                                    (domain[2],
                                                     (domain[0], domain[1])))

                self.deleted_domain = None
        else:
            event.ignore()
    def keyPressEvent(self, event: QtCore.QEvent):
        if event.key() == 90 and event.modifiers(
        ) == QtCore.Qt.ControlModifier:
            if self.deleted_peer:
                peer = self.deleted_peer
                self.addPeer(
                    peer[1], peer[0], peer[2]
                )  # addPeer(name, id_)  /  peer = (id_, name, indexAt)

                if hasattr(self.parent.window, "config"):
                    self.parent.window.config.write("peers",
                                                    (peer[2],
                                                     (peer[0], peer[1])))

                self.deleted_peer = None
        else:
            event.ignore()
Beispiel #11
0
    def closeEvent(self, event: QEvent) -> None:
        if self._closing_state == ClosingState.CONFIRMED:
            self._api.gui.terminated.emit()
            event.accept()
        elif self._closing_state == ClosingState.WAITING_FOR_CONFIRMATION:
            event.ignore()
        elif self._closing_state == ClosingState.READY:

            def on_close(task: "asyncio.Future[bool]") -> None:
                if task.result():
                    self._closing_state = ClosingState.CONFIRMED
                    self.close()
                else:
                    self._closing_state = ClosingState.READY

            self._closing_state = ClosingState.WAITING_FOR_CONFIRMATION
            task = asyncio.ensure_future(
                self._api.gui.confirm_unsaved_changes())
            task.add_done_callback(on_close)
            event.ignore()
Beispiel #12
0
    def closeEvent(self, event: QtCore.QEvent) -> None:
        if self._closing_state == ClosingState.Confirmed:
            self._api.gui.terminated.emit()
            event.accept()
        elif self._closing_state == ClosingState.WaitingForConfirmation:
            event.ignore()
        elif self._closing_state == ClosingState.Ready:

            def on_close(task: "asyncio.Future[bool]") -> None:
                if task.result():
                    self._closing_state = ClosingState.Confirmed
                    self.close()
                else:
                    self._closing_state = ClosingState.Ready

            self._closing_state = ClosingState.WaitingForConfirmation
            task = asyncio.ensure_future(
                self._api.gui.confirm_unsaved_changes()
            )
            task.add_done_callback(on_close)
            event.ignore()
 def closeEvent(self, event: QEvent) -> None:
     """Trap exit."""
     quit_msg = "Are you sure you want to exit?"
     # noinspection PyCallByClass,PyTypeChecker
     reply = QMessageBox.question(self, 'Really exit?', quit_msg,
                                  QMessageBox.Yes, QMessageBox.No)
     if reply != QMessageBox.Yes:
         event.ignore()
         return
     # "Really sure?"
     if self.task_running:
         quit_msg = ("A TASK IS RUNNING! Are you <b>really</b> sure "
                     "you want to exit?")
         # noinspection PyCallByClass,PyTypeChecker
         reply = QMessageBox.question(self, 'Really exit?', quit_msg,
                                      QMessageBox.Yes, QMessageBox.No)
         if reply != QMessageBox.Yes:
             event.ignore()
             return
     # If subthreads aren't shut down, we get a segfault when we quit.
     # However, right now, signals aren't being processed because we're in
     # the GUI message loop. So we need to defer the call if subthreads are
     # running
     if not self.anything_running():
         self.exit_kill_log.emit()
         event.accept()  # actually quit
         return
     # Now stop everything
     log.warning("Waiting for threads to finish...")
     self.exit_pending = True
     if self.whisker_owner:
         self.whisker_owner.stop()
     # Will get a callback to whisker_owner_finished
     event.ignore()  # don't actually quit
 def event(self, a0: QtCore.QEvent) -> bool:
     if isinstance(a0, QtGui.QKeyEvent):
         if a0.key() == Qt.Key_Escape:
             a0.ignore()
             return True
     return super(Dlg_Compact, self).event(a0)
Beispiel #15
0
 def eventFilter(self, obj: QtCore.QObject, event: QtCore.QEvent) -> bool:
     if event.type() == QtCore.QEvent.Wheel:
         event.ignore()
         return True
     return False
Beispiel #16
0
    def eventFilter(
        self,

        source: QWidget,
        ev: QEvent,

    ) -> None:
        '''
        Qt global event filter: return `False` to pass through and `True`
        to filter event out.

        https://doc.qt.io/qt-5/qobject.html#eventFilter
        https://doc.qt.io/qtforpython/overviews/eventsandfilters.html#event-filters

        '''
        etype = ev.type()
        # TODO: turn this on and see what we can filter by default (such
        # as mouseWheelEvent).
        # print(f'ev: {ev}')

        if etype not in self._event_types:
            return False

        # XXX: we unpack here because apparently doing it
        # after pop from the mem chan isn't showing the same
        # event object? no clue wtf is going on there, likely
        # something to do with Qt internals and calling the
        # parent handler?

        if etype in {QEvent.KeyPress, QEvent.KeyRelease}:

            msg = KeyboardMsg(
                event=ev,
                etype=etype,
                key=ev.key(),
                mods=ev.modifiers(),
                txt=ev.text(),
            )

            # TODO: is there a global setting for this?
            if ev.isAutoRepeat() and self._filter_auto_repeats:
                ev.ignore()
                # filter out this event and stop it's processing
                # https://doc.qt.io/qt-5/qobject.html#installEventFilter
                return True

            # NOTE: the event object instance coming out
            # the other side is mutated since Qt resumes event
            # processing **before** running a ``trio`` guest mode
            # tick, thus special handling or copying must be done.

        elif etype in MOUSE_EVENTS:
            # print('f mouse event: {ev}')
            msg = MouseMsg(
                event=ev,
                etype=etype,
                button=ev.button(),
            )

        else:
            msg = ev

        # send event-msg to async handler
        self._send_chan.send_nowait(msg)

        # **do not** filter out this event
        # and instead forward to the source widget
        # https://doc.qt.io/qt-5/qobject.html#installEventFilter
        return False