Пример #1
0
    def eventFilter(self, obj: QObject, event: QEvent) -> bool:
        """Event filter to process an event for the given destination.

        In this case, this widget listens for Enter events on the application level
        (during this widget's init, this eventFilter is installed on the app instance).

        When the destination object is a QWidget,
        we can try to update this widget's help_text with the destination widget's what's this help text.
        If there is no what's this text, we set the help_text back to its placeholderText.
        """
        if event.type() == QEvent.Enter:
            if isinstance(obj, QWidget):
                help_text = obj.whatsThis()
                # When the obj has help text, let's update the help text widget
                if help_text != "":
                    self._help_display.setText(help_text)
                    # Store a ref to the entered widget so we can maintain the help text if its children don't have any
                    self._cached_entered_widget = weakref.ref(obj)

        if event.type() == QEvent.Leave:
            if isinstance(obj, QWidget):
                # When we leave a widget, if it didn't have help text,
                # we want to check if the previously cached (entered) widget is its ancestor.
                # This will maintain the ancestor's help text in the help text widget when the child has not help text.
                if obj.whatsThis() == "":
                    # Revert to placeholder text when we have left a widget and the cached widget is not its ancestor
                    # (i.e. the previously entered widget with help text is not related).
                    if not self._is_child_of_previously_entered_widget_with_help_text(
                            obj):
                        self._help_display.setText(
                            self._help_display.placeholderText())

        return super(HelpWidget, self).eventFilter(obj, event)
Пример #2
0
    def editorEvent(
        self,
        event: QtCore.QEvent,
        model: QtCore.QAbstractItemModel,
        option: QStyleOptionViewItem,
        index: QtCore.QModelIndex,
    ) -> bool:
        """Called when an event has occured in the editor.

        This can be used to customize how the delegate handles mouse/key events
        """
        if (event.type() == event.MouseButtonRelease
                and event.button() == Qt.RightButton):
            self.show_context_menu(index, model, event.globalPos(),
                                   option.widget)

        # if the user clicks quickly on the visibility checkbox, we *don't*
        # want it to be interpreted as a double-click.  We want the visibilty
        # to simply be toggled.
        if event.type() == event.MouseButtonDblClick:
            self.initStyleOption(option, index)
            style = option.widget.style()
            check_rect = style.subElementRect(
                style.SE_ItemViewItemCheckIndicator, option, option.widget)
            if check_rect.contains(event.pos()):
                cur_state = index.data(Qt.CheckStateRole)
                if model.flags(index) & Qt.ItemIsUserTristate:
                    state = Qt.CheckState((cur_state + 1) % 3)
                else:
                    state = Qt.Unchecked if cur_state else Qt.Checked
                return model.setData(index, state, Qt.CheckStateRole)
        # refer all other events to the QStyledItemDelegate
        return super().editorEvent(event, model, option, index)
Пример #3
0
    def sceneEventFilter(self, event: QtCore.QEvent) -> bool:
        # call the inherited method
        if MaskTool.sceneEventFilter(self, event):
            return True

        if self.parent.maskTypeChooser.active_draw_type is None:
            return True

        # Mouse wheel to change the cursor size
        if event.type() == QtCore.QEvent.GraphicsSceneWheel:
            try:  # PyQt 5
                angle = event.angleDelta().y()
            except AttributeError:  # PyQt 4
                angle = event.delta()
            # wheel with CTRL means changing the cursor size
            if event.modifiers() == QtCore.Qt.ControlModifier:
                if angle > 0:
                    self.parent.changeCursorSize(+1)
                else:
                    self.parent.changeCursorSize(-1)
                event.accept()
                return True

        # Mouse press starts drawing
        if event.type() == QtCore.QEvent.GraphicsSceneMousePress and event.button() == QtCore.Qt.LeftButton:
            # if no mask has been created, create one for painting
            if self.parent.MaskEmpty is True:
                self.parent.AddEmptyMask()
            # store the coordinates
            self.last_x = event.pos().x()
            self.last_y = event.pos().y()
            # add a first circle (so that even if the mouse isn't moved something is drawn)
            self.DrawLine(self.last_x, self.last_x + 0.00001, self.last_y, self.last_y)
            # set the changed flag for the database
            self.parent.data_file.setChangesMade()
            # accept the event
            return True
        if event.type() == QtCore.QEvent.GraphicsSceneMouseRelease and event.button() == QtCore.Qt.LeftButton:
            if self.parent.config.auto_mask_update:
                with self.parent.window.changeTracker("draw line in mask"):
                    self.parent.save()
        # Mouse move event to draw the stroke
        if event.type() == QtCore.QEvent.GraphicsSceneMouseMove:
            # get the new position
            self.parent.DrawCursor.setPos(event.pos())
            pos_x = event.pos().x()
            pos_y = event.pos().y()
            # draw a line and store the position
            self.DrawLine(pos_x, self.last_x, pos_y, self.last_y)
            self.last_x = pos_x
            self.last_y = pos_y
            # accept the event
            return True
        # Mouse hover updates the color_under_cursor and displays the brush cursor
        if event.type() == QtCore.QEvent.GraphicsSceneHoverMove:
            # move brush cursor
            self.parent.DrawCursor.setPos(event.pos())
        # don't accept the event, so that others can accept it
        return False
Пример #4
0
 def eventFilter(self, object: QLineEdit, event: QEvent):
     if event.type() == QEvent.FocusIn:
         object.setFrame(True)
         object.setReadOnly(False)
         return True
     if event.type() == QEvent.FocusOut:
         if object.text():
             object.setFrame(False)
         object.setReadOnly(True)
         return True
     return False
Пример #5
0
 def _handle_edit(self, event: QtCore.QEvent):
     """Handle closing edit box and redisplayin label"""
     if event.type() == QtCore.QEvent.Type.KeyPress:
         key = event.key()
         if key in (QtCore.Qt.Key.Key_Return, QtCore.Qt.Key.Key_Enter):
             if not self.edit.hasAcceptableInput():
                 self.setCurrentWidget(self.label)
                 return
             self.label.setText(self.edit.text())
             self.setCurrentWidget(self.label)
             self.valueChanged.emit(self.label.text())
         if key == QtCore.Qt.Key.Key_Escape:
             self.setCurrentWidget(self.label)
     elif event.type() == QtCore.QEvent.FocusOut:
         self.setCurrentWidget(self.label)
Пример #6
0
    def event(self, e: QEvent) -> bool:
        '''
        Event

        Parameters
        ----------
        e : QEvent

        Returns
        -------
        value : bool
        '''
        state = self.d.dragging_state
        if state == DragState.inactive:
            # Normally we would check here, if the left mouse button is pressed.
            # But from QT version 5.12.2 on the mouse events from
            # QEvent.NonClientAreaMouseButtonPress return the wrong mouse
            # button The event always returns Qt.RightButton even if the left
            # button is clicked.
            if e.type() == QEvent.NonClientAreaMouseButtonPress:
                if QT_VERSION_TUPLE >= (5, 12, 2):
                    # and QGuiApplication.mouseButtons().testFlag(Qt.LeftButton ...
                    logger.debug('FloatingWidget.event Event.NonClientAreaMouseButtonPress %s', e.type())
                    self.d.set_state(DragState.mouse_pressed)
                elif QGuiApplication.mouseButtons() == Qt.LeftButton:
                    logger.debug('FloatingWidget.event Event.NonClientAreaMouseButtonPress %s', e.type())
                    self.d.set_state(DragState.mouse_pressed)
        elif state == DragState.mouse_pressed:
            if e.type() == QEvent.NonClientAreaMouseButtonDblClick:
                logger.debug('FloatingWidget.event QEvent.NonClientAreaMouseButtonDblClick')
                self.d.set_state(DragState.inactive)
            elif e.type() == QEvent.Resize:
                # If the first event after the mouse press is a resize event, then
                # the user resizes the window instead of dragging it around.
                # But there is one exception. If the window is maximized,
                # then dragging the window via title bar will cause the widget to
                # leave the maximized state. This in turn will trigger a resize event.
                # To know, if the resize event was triggered by user via moving a
                # corner of the window frame or if it was caused by a windows state
                # change, we check, if we are not in maximized state.
                if not self.isMaximized():
                    self.d.set_state(DragState.inactive)
        elif state == DragState.floating_widget:
            if e.type() == QEvent.NonClientAreaMouseButtonRelease:
                logger.debug('FloatingWidget.event QEvent.NonClientAreaMouseButtonRelease')
                self.d.title_mouse_release_event()

        return super().event(e)
Пример #7
0
 def event(self, event: QEvent):
     if event.type() == QEvent.WindowActivate and self.isVisible():
         self.update_profile_list()
         self.update_spacing()
         self.multiple_files_chk.setChecked(
             self._settings.get("multiple_files_widget", False))
     return super().event(event)
Пример #8
0
 def _handle_label(self, event: QtCore.QEvent):
     """Display QLineEdit if label is double clicked"""
     if event.type() == QtCore.QEvent.Type.MouseButtonDblClick:
         self.edit.setText(self.label.text())
         self.setCurrentWidget(self.edit)
         self.edit.selectAll()
         self.edit.setFocus()
Пример #9
0
 def event(self, event: QEvent):
     if event.type() == QEvent.WindowActivate:
         index = self.components.currentRow()
         self.components.clear()
         self.components.addItems(list(map(str, self.get_parameters.keys())))
         self.components.setCurrentRow(index)
     return super().event(event)
Пример #10
0
    def editorEvent(self, event: QtCore.QEvent,
                    model: QtCore.QAbstractItemModel,
                    option: 'QStyleOptionViewItem',
                    index: QtCore.QModelIndex) -> bool:
        decorationRect = option.rect

        if event.type() == QEvent.MouseButtonPress:
            item = index.model().data(index, Qt.UserRole)
            if isinstance(item, QVariant):
                return QStyledItemDelegate.editorEvent(self, event, model,
                                                       option, index)

            type = item['type']
            value = item['value']
            if type == 'device_activity':
                text_rect = calculate_text_rect(
                    value['device'], font=ResourceLoader().qt_font_text_xs)
                if calculate_middle_rect(decorationRect,
                                         text_rect.width(),
                                         text_rect.height(),
                                         x=110,
                                         y=15).contains(event.pos()):
                    print('点击了设备{device}'.format(device=value['device']))

        return QStyledItemDelegate.editorEvent(self, event, model, option,
                                               index)
Пример #11
0
    def eventFilter(self, watched: QObject, event: QEvent) -> bool:
        '''
        Eventfilter

        Parameters
        ----------
        watched : QObject
            Unused
        event : QEvent

        Returns
        -------
        value : bool
        '''
        #pylint: disable=unused-argument
        if event.type() == QEvent.MouseButtonRelease:
            logger.debug('MouseButtonRelease')
            if self.d.dragging_state == DragState.floating_widget:
                qapp = QApplication.instance()
                qapp.removeEventFilter(self)
                logger.debug('FloatingWidget.eventFilter QEvent.MouseButtonRelease')
                self.finish_dragging()
                self.d.title_mouse_release_event()

        return False
Пример #12
0
    def event(self, e: QEvent) -> bool:
        '''
        Emits titleChanged signal if title change event occurs

        Parameters
        ----------
        e : QEvent

        Returns
        -------
        value : bool
        '''
        if e.type() == QEvent.WindowTitleChange:
            title = self.windowTitle()
            if self.d.tab_widget:
                self.d.tab_widget.setText(title)
            if self.d.toggle_view_action:
                self.d.toggle_view_action.setText(title)
            if self.d.dock_area:
                # update tabs menu
                self.d.dock_area.mark_title_bar_menu_outdated()

            self.title_changed.emit(title)

        return super().event(e)
Пример #13
0
 def changeEvent(self, event: QEvent):
     """Change event handler.
     Args:
         event (QEvent): Event.
     """
     if event.type() == QEvent.StyleChange:
         self.setHtml(qrainbowstyle.rainbowize(OpenStreetMapsHtml.html))
     return super().changeEvent(event)
Пример #14
0
 def event(self, event: QEvent):
     if event.type() == QEvent.WindowActivate:
         # update combobox for segmentation
         self.update_combo_box(self.choose_profile, self._settings.segmentation_profiles)
         # update combobox for pipeline
         self.update_combo_box(self.choose_pipe, self._settings.segmentation_pipelines)
         self.update_tooltips()
     return super().event(event)
Пример #15
0
    def event(self, event: QEvent) -> bool:
        if event.type() == QEvent.WindowActivate:
            if self.settings.image is not None:
                self.channel_select.change_channels_num(
                    self.settings.image.channels)
            self.refresh_measurements()

        return super().event(event)
Пример #16
0
    def changeEvent(self, event: QEvent):
        """Change event handler.

        Args:
            event (QEvent): Event.
        """
        if event.type() == QEvent.StyleChange:
            self.setColor(qrainbowstyle.getCurrentPalette().COLOR_ACCENT_4)
Пример #17
0
    def eventFilter(self, qobject: QObject, event: QEvent) -> bool:
        if event.type() == QEvent.ToolTipChange and isinstance(
                qobject, QWidget):
            tooltip = qobject.toolTip()
            if tooltip and not qt_might_be_rich_text(tooltip):
                qobject.setToolTip(f'<qt>{html.escape(tooltip)}</qt>')
                return True

        return super().eventFilter(qobject, event)
Пример #18
0
 def changeEvent(self, event: QEvent) -> None:
     if event.type(
     ) == QEvent.WindowStateChange and not qrainbowstyle.USE_DARWIN_BUTTONS:
         if self.isMaximized():
             self.__bar.showRestoreButton(True)
             self.__bar.showMaximizeButton(False)
         else:
             self.__bar.showRestoreButton(False)
             self.__bar.showMaximizeButton(True)
     return super().changeEvent(event)
Пример #19
0
 def sceneEventFilter(self, event: QtCore.QEvent) -> bool:
     if MaskTool.sceneEventFilter(self, event):
         return True
     # Mouse press starts drawing
     if event.type() == QtCore.QEvent.GraphicsSceneMousePress and event.button() == QtCore.Qt.LeftButton:
         self.PickColor()
         # accept the event
         return True
     # Mouse hover updates the color_under_cursor and displays the brush cursor
     if event.type() == QtCore.QEvent.GraphicsSceneHoverMove:
         # get color at this position
         if self.parent.MaskEmpty is True:
             self.color_under_cursor = 0
         else:
             color = self.parent.MaskDisplay.GetColor(event.pos().x(), event.pos().y())
             if color is not None:
                 self.color_under_cursor = color
     # don't accept the event, so that others can accept it
     return False
Пример #20
0
 def changeEvent(self, event: QEvent):
     """Change event handler.
     Args:
         event (QEvent): Event.
     """
     if event.type() == QEvent.StyleChange:
         self.setHtml(
             qrainbowstyle.rainbowize(
                 GoogleMapsHtml.html.replace("API_KEY_GOES_HERE",
                                             self.api_key)))
     return super().changeEvent(event)
Пример #21
0
 def event(self, event: QEvent):
     if event.type() == QEvent.ToolTip and self.components:
         # text = str(self.component)
         text_list = []
         for el in self.components:
             if self.settings.component_is_chosen(el):
                 text_list.append("☑{}".format(el))
             else:
                 text_list.append("☐{}".format(el))
         QToolTip.showText(event.globalPos(), " ".join(text_list))
     return super().event(event)
    def eventFilter(self, tab: QObject, event: QEvent) -> bool:
        '''
        Filters the tab widget events

        Parameters
        ----------
        tab : QObject
        event : QEvent

        Returns
        -------
        value : bool
        '''
        result = super().eventFilter(tab, event)
        if isinstance(tab, DockWidgetTab):
            if event.type() == QEvent.Hide:
                self.tab_closed.emit(self.d.tabs_layout.indexOf(tab))
            elif event.type() == QEvent.Show:
                self.tab_opened.emit(self.d.tabs_layout.indexOf(tab))

        return result
Пример #23
0
    def event(self, evt: QtCore.QEvent) -> bool:
        # Capture the Tab keypress
        if evt.type() in (QtCore.QEvent.KeyPress, QtCore.QEvent.KeyRelease):
            kevt = cast(QtGui.QKeyEvent, evt)
            if kevt.key() in (QtCore.Qt.Key_Tab, QtCore.Qt.Key_Up,
                              QtCore.Qt.Key_Down):
                if kevt.type() == QtCore.QEvent.KeyRelease:
                    self.keyReleaseEvent(kevt)
                kevt.accept()
                return True

        return super(ConsoleEditWidget, self).event(evt)
Пример #24
0
    def sceneEventFilter(self, event: QtCore.QEvent) -> bool:
        if MaskTool.sceneEventFilter(self, event):
            return True
        # Mouse press starts drawing
        if event.type() == QtCore.QEvent.GraphicsSceneMousePress and event.button() == QtCore.Qt.LeftButton:
            with self.parent.window.changeTracker("bucket fill in mask"):
                self.fillColor(event.pos().x(), event.pos().y())
                self.parent.save()
            # accept the event
            return True

        # don't accept the event, so that others can accept it
        return False
    def event(self, e: QEvent) -> bool:
        '''
        Handles activation events to update zOrderIndex

        Parameters
        ----------
        e : QEvent

        Returns
        -------
        value : bool
        '''
        result = super().event(e)
        global _z_order_counter  # TODO
        if e.type() == QEvent.WindowActivate:
            _z_order_counter += 1
            self.d.z_order_index = _z_order_counter
        elif e.type() == QEvent.Show and not self.d.z_order_index:
            _z_order_counter += 1
            self.d.z_order_index = _z_order_counter

        return result
Пример #26
0
    def changeEvent(self, event: QEvent):
        '''
        Changeevent

        Parameters
        ----------
        event : QEvent
        '''
        super().changeEvent(event)
        if (event.type() == QEvent.ActivationChange) and self.isActiveWindow():
            logger.debug('FloatingWidget.changeEvent QEvent.ActivationChange ')
            global _z_order_counter  # TODO
            _z_order_counter += 1
            self.d.z_order_index = _z_order_counter
Пример #27
0
    def sceneEventFilter(self, event: QtCore.QEvent) -> None:
        if event.type() == QtCore.QEvent.GraphicsSceneWheel:
            try:  # PyQt 5
                angle = event.angleDelta().y()
            except AttributeError:  # PyQt 4
                angle = event.delta()

            # wheel with SHIFT means changing the opacity
            if event.modifiers() == QtCore.Qt.ShiftModifier:
                if angle > 0:
                    self.parent.changeOpacity(+0.1)
                else:
                    self.parent.changeOpacity(-0.1)
                event.accept()
                return True
Пример #28
0
    def eventFilter(self, target: Any, qevent: QtCore.QEvent) -> bool:
        if self.interactionDelegate is None:
            return False

        if qevent.type() == QtCore.QEvent.KeyPress:
            q_key_event = cast(QtGui.QKeyEvent, qevent)
            event_id = EventID.from_key_event(q_key_event)
            modifiers = Modifier.from_qevent(qevent)

            ate_event = self.dispatchActionEvent(self.lastPoint, event_id, modifiers)
            if ate_event:
                self.update()

            return ate_event

        return False
Пример #29
0
    def event(self, e: QEvent) -> bool:
        '''
        Track event ToolTipChange and set child ToolTip

        Parameters
        ----------
        e : QEvent

        Returns
        -------
        value : bool
        '''
        if e.type() == QEvent.ToolTipChange:
            text = self.toolTip()
            self.d.title_label.setToolTip(text)

        return super().event(e)
Пример #30
0
    def event(self, e: QEvent) -> bool:
        '''
        Handle polish events

        Parameters
        ----------
        e : QEvent

        Returns
        -------
        value : bool
        '''
        result = super().event(e)
        if e.type() == QEvent.Polish:
            self.d.cross.setup_overlay_cross(self.d.mode)

        return result