def flags(self, index):
     """Override Qt method"""
     if not index.isValid():
         return Qt.ItemIsEnabled
     column = index.column()
     if column in [0, 1, 2, 3]:
         return Qt.ItemFlags(Qt.ItemIsEnabled)
     else:
         return Qt.ItemFlags(Qt.NoItemFlags)
Пример #2
0
 def flags(self, index):
     """Override Qt method"""
     if not index.isValid():
         return Qt.ItemIsEnabled
     column = index.column()
     if column in [0]:
         return Qt.ItemFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable
                             | Qt.ItemIsUserCheckable | Qt.ItemIsEditable)
     else:
         return Qt.ItemFlags(Qt.ItemIsEnabled)
Пример #3
0
    def flags(index):
        """Override Qt method."""
        column = index.column()

        if index.isValid():
            if column in [C.COL_START, C.COL_END]:
                return Qt.ItemFlags(Qt.ItemIsEnabled)
            else:
                return Qt.ItemFlags(Qt.ItemIsEnabled)
        else:
            return Qt.ItemFlags(Qt.ItemIsEnabled)
Пример #4
0
    def flags(self, index):
        """Override Qt method"""
        column = index.column()

        if index.isValid():
            if column in [C.COL_START, C.COL_END]:
                # return Qt.ItemFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable)
                return Qt.ItemFlags(Qt.ItemIsEnabled)
            else:
                # return Qt.ItemFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable)
                return Qt.ItemFlags(Qt.ItemIsEnabled)
        else:
            return Qt.ItemFlags(Qt.ItemIsEnabled)
Пример #5
0
    def movePoint(self, handle, pos, modifiers=Qt.KeyboardModifier(), finish=True, coords="parent"):
        super(BetterRectROI, self).movePoint(handle, pos, modifiers, finish, coords)

        self.width = self.handle["pos"].x() * self.size().x()
        self.height = self.handle["pos"].y() * self.size().y()

        self.handleChanged()
Пример #6
0
    def __init__(self,
                 reserved: Iterable[str] = None,
                 parent=None,
                 window_flags=Qt.WindowFlags()):
        super(MetadataDialog, self).__init__(parent, window_flags)

        self.reserved = set(reserved or [])

        self.parameter_tree = pt.ParameterTree(showHeader=False)
        self.parameter_tree.setParameters(self.parameter, showTop=False)

        calibrate_button = QPushButton("&Acquire")

        self.buttons = QDialogButtonBox(Qt.Horizontal)
        # Add calibration button that accepts the dialog (closes with 1 status)
        self.buttons.addButton(calibrate_button, QDialogButtonBox.AcceptRole)
        # Add a cancel button that will reject the dialog (closes with 0 status)
        self.buttons.addButton(QDialogButtonBox.Cancel)

        self.buttons.rejected.connect(self.reject)
        self.buttons.accepted.connect(self.accept)

        outer_layout = QVBoxLayout()
        outer_layout.addWidget(self.parameter_tree)
        outer_layout.addWidget(self.buttons)
        outer_layout.setSpacing(0)
        outer_layout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(outer_layout)
Пример #7
0
    def flags(self, index):
        """Override Qt method"""
        row = index.row()
        ui_name, name, state = self.row(row)

        if name in self.read_only:
            return Qt.NoItemFlags
        if not index.isValid():
            return Qt.ItemIsEnabled
        column = index.column()
        if column in [0]:
            return Qt.ItemFlags(int(Qt.ItemIsEnabled | Qt.ItemIsSelectable |
                                    Qt.ItemIsUserCheckable |
                                    Qt.ItemIsEditable))
        else:
            return Qt.ItemFlags(Qt.ItemIsEnabled)
Пример #8
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)
Пример #9
0
 def mouseMoveEvent(self, event):
     """Override Qt method"""
     if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \
        (event.pos() - self.__drag_start_pos).manhattanLength() > \
             QApplication.startDragDistance():
         drag = QDrag(self)
         mimeData = QMimeData()
         # Converting id's to long to avoid an OverflowError with PySide
         if PY2:
             ancestor_id = long(id(self.ancestor))
             parent_widget_id = long(id(self.parentWidget()))
             self_id = long(id(self))
         else:
             ancestor_id = id(self.ancestor)
             parent_widget_id = id(self.parentWidget())
             self_id = id(self)
         mimeData.setData("parent-id", QByteArray.number(ancestor_id))
         mimeData.setData("tabwidget-id",
                          QByteArray.number(parent_widget_id))
         mimeData.setData("tabbar-id", QByteArray.number(self_id))
         mimeData.setData(
             "source-index",
             QByteArray.number(self.tabAt(self.__drag_start_pos)))
         drag.setMimeData(mimeData)
         drag.exec_()
     QTabBar.mouseMoveEvent(self, event)
Пример #10
0
def test_construct(qtbot):
    """
    Test the construction of the widget.

    Expectations:
    Default values are correctly assigned.

    Parameters
    ----------
    qtbot : fixture
        Window for widget testing
    """
    pydm_slider = PyDMSlider()
    qtbot.addWidget(pydm_slider)

    assert pydm_slider.alarmSensitiveContent is True
    assert pydm_slider.alarmSensitiveBorder is False
    assert pydm_slider._show_limit_labels is True
    assert pydm_slider._show_value_label is True
    assert pydm_slider._user_defined_limits is False
    assert pydm_slider._needs_limit_info is True
    assert pydm_slider._minimum is None
    assert pydm_slider._maximum is None
    assert pydm_slider._user_minimum == -10.0
    assert pydm_slider._user_maximum == 10.0
    assert pydm_slider._num_steps == 101
    assert pydm_slider.orientation == Qt.Horizontal
    assert pydm_slider.isEnabled() is False

    assert type(pydm_slider.low_lim_label) == QLabel
    assert pydm_slider.low_lim_label.sizePolicy() == QSizePolicy(
        QSizePolicy.Maximum, QSizePolicy.Fixed)
    assert pydm_slider.low_lim_label.alignment() == Qt.Alignment(
        Qt.AlignLeft | Qt.AlignTrailing | Qt.AlignVCenter)

    assert type(pydm_slider.high_lim_label) == QLabel
    assert pydm_slider.high_lim_label.sizePolicy() == QSizePolicy(
        QSizePolicy.Maximum, QSizePolicy.Fixed)
    assert pydm_slider.high_lim_label.alignment() == Qt.Alignment(
        Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter)

    assert type(pydm_slider._slider) == QSlider
    assert pydm_slider._slider.orientation() == Qt.Orientation(Qt.Horizontal)

    assert pydm_slider._slider_position_to_value_map is None
    assert pydm_slider._mute_internal_slider_changes is False
    assert pydm_slider._orientation == Qt.Horizontal
Пример #11
0
    def mightRender(self, text):
        """
        Test if a string can be rendered by this text engine

        :param str text: Text to be tested
        :return: True, if it can be rendered
        """
        return PYSIDE2 or Qt.mightBeRichText(text)
Пример #12
0
 def __init__(self):
     self.isDirty = True
     self.maxColumns = 0
     self.numRows = 0
     self.numColumns = 0
     self.expanding = Qt.Orientations()
     self.itemSizeHints = []
     self.itemList = []
Пример #13
0
 def flags(self, index):
     """Override to make cells editable."""
     if not index.isValid():
         return Qt.ItemIsEnabled
     if index.column() in (2, ):
         return Qt.ItemFlags(
             QAbstractTableModel.flags(self, index) | Qt.ItemIsEditable)
     return QAbstractTableModel.flags(self, index)
Пример #14
0
 def flags(self, index):
     """Set editable flag"""
     if not index.isValid():
         return Qt.ItemIsEnabled
     flags = QAbstractTableModel.flags(self, index)
     if not self.readonly:
         flags |= Qt.ItemIsEditable
     return Qt.ItemFlags(flags)
Пример #15
0
    def movePoint(self,
                  handle,
                  pos,
                  modifiers=Qt.KeyboardModifier(),
                  finish=True,
                  coords="parent"):
        super(LineROI, self).movePoint(handle, pos, modifiers, finish, coords)

        self._update_state()
        self.handleChanged()
Пример #16
0
    def mightRender(self, text):
        """
        Test if a string can be rendered by this text engine

        :param str text: Text to be tested
        :return: True, if it can be rendered
        """
        try:
            return Qt.mightBeRichText(text)
        except AttributeError:
            return True
Пример #17
0
 def anchor(self, widget, left=True, right=True, top=True, bottom=True):
     '''anchor the widget. Depending on the anchors, widget will be left-, 
     right-, center-aligned or stretched.
     '''
     align = {
         (False, False): Qt.AlignHCenter,
         (True, False): Qt.AlignLeft,
         (False, True): Qt.AlignRight,
         (True, True): Qt.Alignment()
         }[(left, right)]
     widget.parent().layout().setAlignment(widget, align)
Пример #18
0
 def mouseDoubleClickEvent(self, event):
     """Override Qt method to trigger the tab name editor."""
     if self.rename_tabs is True and \
             event.buttons() == Qt.MouseButtons(Qt.LeftButton):
         # Tab index
         index = self.tabAt(event.pos())
         if index >= 0:
             # Tab is valid, call tab name editor
             self.tab_name_editor.edit_tab(index)
     else:
         # Event is not interesting, raise to parent
         QTabBar.mouseDoubleClickEvent(self, event)
Пример #19
0
    def flags(self, index):
        result = super(LayerArtistModel, self).flags(index)
        if index.isValid() and index.row() < len(self.artists):
            art = self.artists[index.row()]
            if art.enabled:
                result = (result | Qt.ItemIsEditable | Qt.ItemIsDragEnabled
                          | Qt.ItemIsUserCheckable)
            else:
                result = int(result & Qt.ItemIsUserCheckable) ^ int(result)
        else:  # only drop between rows, where index isn't valid
            result = result | Qt.ItemIsDropEnabled

        return Qt.ItemFlags(int(result))
Пример #20
0
    def movePoint(self, handle, pos, modifiers=Qt.KeyboardModifier(), finish=True, coords='parent'):
        super(ArcROI, self).movePoint(handle, pos, modifiers, finish, coords)

        # Set internal parameters
        if handle in [self.innerhandle, self.outerhandle]:
            self.innerradius = self.innerhandle.pos().length()
            self.outerradius = self.outerhandle.pos().length()
            self.thetacenter = self.outerhandle.pos().angle(Point(1, 0))

        elif handle is self.widthhandle:
            self.thetawidth = 2 * self.widthhandle.pos().angle(self.innerhandle.pos())

        self.handleChanged()
Пример #21
0
 def createEditor(
     self,
     parent: QWidget,
     option: QStyleOptionViewItem,
     index: QtCore.QModelIndex,
 ) -> QWidget:
     """User has double clicked on layer name."""
     # necessary for geometry, otherwise editor takes up full width.
     self.get_layer_icon(option, index)
     editor = super().createEditor(parent, option, index)
     # make sure editor has same alignment as the display name
     editor.setAlignment(Qt.Alignment(index.data(Qt.TextAlignmentRole)))
     return editor
Пример #22
0
    def editSettings(self, settingValues, mDialog):
        """
        Edit the settings window. This method will edit all the provided
        settings and set them to their correcponding value.

        Args:
            settingValues (dict(str:str)): setting name and value to be set
        """
        QTest.mouseClick(self.drill.settings, Qt.LeftButton)
        sw = self.drill.children()[-1]
        form = sw.formLayout
        widgets = dict()
        for i in range(0, sw.formLayout.rowCount()):
            label = form.itemAt(i, QFormLayout.LabelRole).widget().text()
            widget = form.itemAt(i, QFormLayout.FieldRole).widget()
            widgets[label] = widget
        for name,value in settingValues.items():
            if name in widgets:
                if isinstance(widgets[name], QLineEdit):
                    QTest.mouseClick(widgets[name], Qt.LeftButton)
                    QTest.mouseDClick(widgets[name], Qt.LeftButton)
                    widgets[name].clear()
                    QTest.keyClicks(widgets[name], value)
                    QTest.keyClick(widgets[name], Qt.Key_Tab)
                elif isinstance(widgets[name], QComboBox):
                    v = widgets[name].view()
                    m = widgets[name].model()
                    for i in range(m.rowCount()):
                        index = m.index(i, 0)
                        text = index.data(Qt.DisplayRole)
                        if text == name:
                            v.scrollTo(index)
                            pos = index.center()
                            Qt.mouseClick(v.viewport(), Qt.LeftButton, 0, pos)
                            break
        QTest.mouseClick(sw.okButton, Qt.LeftButton)
Пример #23
0
    def setRenderFlags(self, renderFlags):
        """
        Change the render flags

        The default setting is `Qt.AlignCenter`

        :param int renderFlags: Bitwise OR of the flags used like in `QPainter.drawText()`

        .. seealso::
        
            :py:meth:`renderFlags()`, 
            :py:meth:`qwt.text.QwtTextEngine.draw()`
        """
        renderFlags = Qt.AlignmentFlag(renderFlags)
        if renderFlags != self.__data.renderFlags:
            self.__data.renderFlags = renderFlags
            self.__layoutCache.invalidate()
Пример #24
0
    def initScale(self, align):
        """
        Initialize the scale
        
        :param int align: Alignment
        """
        self.__data = QwtScaleWidget_PrivateData()
        self.__data.layoutFlags = 0
        if align == QwtScaleDraw.RightScale:
            self.__data.layoutFlags |= self.TitleInverted

        self.__data.borderDist = [0, 0]
        self.__data.minBorderDist = [0, 0]
        self.__data.margin = 4
        self.__data.titleOffset = 0
        self.__data.spacing = 2

        self.__data.scaleDraw = QwtScaleDraw()
        self.__data.scaleDraw.setAlignment(align)
        self.__data.scaleDraw.setLength(10)

        self.__data.scaleDraw.setScaleDiv(QwtLinearScaleEngine().divideScale(
            0.0, 100.0, 10, 5))

        self.__data.colorBar.colorMap = QwtLinearColorMap()
        self.__data.colorBar.isEnabled = False
        self.__data.colorBar.width = 10

        flags = Qt.AlignmentFlag(Qt.AlignHCenter | Qt.TextExpandTabs
                                 | Qt.TextWordWrap)
        self.__data.title.setRenderFlags(flags)
        self.__data.title.setFont(self.font())

        policy = QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed)
        if self.__data.scaleDraw.orientation() == Qt.Vertical:
            policy.transpose()

        self.setSizePolicy(policy)

        self.setAttribute(Qt.WA_WState_OwnSizePolicy, False)
Пример #25
0
    def mouseMoveEvent(self, event):
        """Override Qt method"""
        if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \
           (event.pos() - self.__drag_start_pos).manhattanLength() > \
                QApplication.startDragDistance():
            drag = QDrag(self)
            mimeData = QMimeData()

            ancestor_id = to_text_string(id(self.ancestor))
            parent_widget_id = to_text_string(id(self.parentWidget()))
            self_id = to_text_string(id(self))
            source_index = to_text_string(self.tabAt(self.__drag_start_pos))

            mimeData.setData("parent-id", to_binary_string(ancestor_id))
            mimeData.setData("tabwidget-id",
                             to_binary_string(parent_widget_id))
            mimeData.setData("tabbar-id", to_binary_string(self_id))
            mimeData.setData("source-index", to_binary_string(source_index))

            drag.setMimeData(mimeData)
            drag.exec_()
        QTabBar.mouseMoveEvent(self, event)
Пример #26
0
 def flags(self, index):
     """Qt Override."""
     if not index.isValid():
         return Qt.ItemIsEnabled
     return Qt.ItemFlags(QAbstractTableModel.flags(self, index))
Пример #27
0
 def flags(self, index):
     """Set editable flag"""
     if not index.isValid():
         return Qt.ItemIsEnabled
     return Qt.ItemFlags(
         QAbstractTableModel.flags(self, index) | Qt.ItemIsEditable)
Пример #28
0
 def expandingDirections(self):
     return Qt.Orientations(0)
Пример #29
0
 def flags(self, index):
     """Set flags"""
     if index.column() == 0:
         return Qt.ItemIsEnabled | Qt.ItemIsSelectable
     return Qt.ItemFlags(
         QAbstractTableModel.flags(self, index) | Qt.ItemIsEditable)
Пример #30
0
 def drawLabel(self, painter, canvasRect, pos):
     """
     Align and draw the text label of the marker
     
     :param QPainter painter: Painter
     :param QRectF canvasRect: Contents rectangle of the canvas in painter coordinates
     :param QPointF pos: Position of the marker, translated into widget coordinates
     
     .. seealso::
     
         :py:meth:`drawLabel()`, 
         :py:meth:`qwt.symbol.QwtSymbol.drawSymbol()`
     """
     if self.__data.label.isEmpty():
         return
     align = Qt.Alignment(self.__data.labelAlignment)
     alignPos = QPointF(pos)
     symbolOff = QSizeF(0, 0)
     if self.__data.style == QwtPlotMarker.VLine:
         #  In VLine-style the y-position is pointless and
         #  the alignment flags are relative to the canvas
         if bool(self.__data.labelAlignment & Qt.AlignTop):
             alignPos.setY(canvasRect.top())
             align &= ~Qt.AlignTop
             align |= Qt.AlignBottom
         elif bool(self.__data.labelAlignment & Qt.AlignBottom):
             #  In HLine-style the x-position is pointless and
             #  the alignment flags are relative to the canvas
             alignPos.setY(canvasRect.bottom() - 1)
             align &= ~Qt.AlignBottom
             align |= Qt.AlignTop
         else:
             alignPos.setY(canvasRect.center().y())
     elif self.__data.style == QwtPlotMarker.HLine:
         if bool(self.__data.labelAlignment & Qt.AlignLeft):
             alignPos.setX(canvasRect.left())
             align &= ~Qt.AlignLeft
             align |= Qt.AlignRight
         elif bool(self.__data.labelAlignment & Qt.AlignRight):
             alignPos.setX(canvasRect.right() - 1)
             align &= ~Qt.AlignRight
             align |= Qt.AlignLeft
         else:
             alignPos.setX(canvasRect.center().x())
     else:
         if self.__data.symbol and self.__data.symbol.style(
         ) != QwtSymbol.NoSymbol:
             symbolOff = self.__data.symbol.size() + QSizeF(1, 1)
             symbolOff /= 2
     pw2 = self.__data.pen.widthF() / 2.0
     if pw2 == 0.0:
         pw2 = 0.5
     spacing = self.__data.spacing
     xOff = max([pw2, symbolOff.width()])
     yOff = max([pw2, symbolOff.height()])
     textSize = self.__data.label.textSize(painter.font())
     if align & Qt.AlignLeft:
         alignPos.setX(alignPos.x() - (xOff + spacing))
         if self.__data.labelOrientation == Qt.Vertical:
             alignPos.setX(alignPos.x() - textSize.height())
         else:
             alignPos.setX(alignPos.x() - textSize.width())
     elif align & Qt.AlignRight:
         alignPos.setX(alignPos.x() + xOff + spacing)
     else:
         if self.__data.labelOrientation == Qt.Vertical:
             alignPos.setX(alignPos.x() - textSize.height() / 2)
         else:
             alignPos.setX(alignPos.x() - textSize.width() / 2)
     if align & Qt.AlignTop:
         alignPos.setY(alignPos.y() - (yOff + spacing))
         if self.__data.labelOrientation != Qt.Vertical:
             alignPos.setY(alignPos.y() - textSize.height())
     elif align & Qt.AlignBottom:
         alignPos.setY(alignPos.y() + yOff + spacing)
         if self.__data.labelOrientation == Qt.Vertical:
             alignPos.setY(alignPos.y() + textSize.width())
     else:
         if self.__data.labelOrientation == Qt.Vertical:
             alignPos.setY(alignPos.y() + textSize.width() / 2)
         else:
             alignPos.setY(alignPos.y() - textSize.height() / 2)
     painter.translate(alignPos.x(), alignPos.y())
     if self.__data.labelOrientation == Qt.Vertical:
         painter.rotate(-90.0)
     textRect = QRectF(0, 0, textSize.width(), textSize.height())
     self.__data.label.draw(painter, textRect)