def __init__(self, is_fwd, pre_xover_item):
     """
     Args:
         is_fwd (bool): True if forward strand base, False if reverse.
         pre_xover_item (TYPE): Description
     """
     super(Triangle, self).__init__(pre_xover_item)
     color = pre_xover_item.color
     self.adapter = PropertyWrapperObject(self)
     self.setAcceptHoverEvents(True)
     self.setFiltersChildEvents(True)
     self._click_area = click_area = QGraphicsRectItem(PXI_RECT, self)
     click_area.setAcceptHoverEvents(True)
     click_area.setPen(getNoPen())
     click_area.hoverMoveEvent = self.hoverMoveEvent
     if is_fwd:
         # grad = QLinearGradient(0., 0., 0., 1.)
         # grad.setColorAt(0, getColorObj(color))
         # grad.setColorAt(1, Qt.black)
         # self.setBrush(grad)
         self.setBrush(getBrushObj(color, alpha=128))
         self.setPath(FWDPXI_PP)
         self.setPen(getNoPen())
         self._click_area.setPos(-0.5 * IW, -0.75 * IW)
     else:
         self.setPath(REVPXI_PP)
         self.setPen(getPenObj(color, 0.25, alpha=128))
         # grad = QLinearGradient(0., 0., 0., -1.)
         # grad.setColorAt(1, getColorObj(color))
         # grad.setColorAt(0, Qt.black)
         # self.setPen(getNoPen())
         # self.setBrush(grad)
         self._click_area.setPos(-0.5 * IW, -0.25 * IW)
Beispiel #2
0
 def __init__(self, is_fwd, pre_xover_item):
     """
     Args:
         is_fwd (bool): True if forward strand base, False if reverse.
         pre_xover_item (TYPE): Description
     """
     super(Triangle, self).__init__(pre_xover_item)
     color = pre_xover_item.color
     self.adapter = PropertyWrapperObject(self)
     self.setAcceptHoverEvents(True)
     self.setFiltersChildEvents(True)
     self._click_area = click_area = QGraphicsRectItem(PXI_RECT, self)
     click_area.setAcceptHoverEvents(True)
     click_area.setPen(getNoPen())
     click_area.hoverMoveEvent = self.hoverMoveEvent
     if is_fwd:
         # grad = QLinearGradient(0., 0., 0., 1.)
         # grad.setColorAt(0, getColorObj(color))
         # grad.setColorAt(1, Qt.black)
         # self.setBrush(grad)
         self.setBrush(getBrushObj(color, alpha=128))
         self.setPath(FWDPXI_PP)
         self.setPen(getNoPen())
         self._click_area.setPos(-0.5*IW, -0.75*IW)
     else:
         self.setPath(REVPXI_PP)
         self.setPen(getPenObj(color, 0.25, alpha=128))
         # grad = QLinearGradient(0., 0., 0., -1.)
         # grad.setColorAt(1, getColorObj(color))
         # grad.setColorAt(0, Qt.black)
         # self.setPen(getNoPen())
         # self.setBrush(grad)
         self._click_area.setPos(-0.5*IW, -0.25*IW)
Beispiel #3
0
    def __init__(self, rect, parent=None):
        super(QGraphicsEllipseItem, self).__init__(rect, parent)
        self._parent = parent
        self.setPen(getNoPen())

        iw = _ITEM_WIDTH = 3
        x = _RECT.width() - 2*rect_gain - 2*styles.SLICE_HELIX_STROKE_WIDTH - 1
        y = _RECT.center().y()
        prexo_items = {}
        fwd_angles = [0, 240, 120]
        fwd_colors = ['#cc0000', '#00cc00', '#0000cc']
        for i in range(len(fwd_angles)):
            item = QGraphicsEllipseItem(x, y, iw, iw, self)
            item.setPen(getNoPen())
            item.setBrush(getBrushObj(fwd_colors[i]))
            item.setTransformOriginPoint(_RECT.center())
            item.setRotation(fwd_angles[i])
            prexo_items[i] = item

        rev_angles = [150, 30, 270]
        rev_colors = ['#800000cc', '#80cc0000', '#8000cc00']
        # rev_colors = ['#ff00ff', '#3399ff', '#ff6600']
        for i in range(len(fwd_angles)):
            item = QGraphicsEllipseItem(x, y, iw, iw, self)
            item.setPen(getPenObj(rev_colors[i],0.5))
            item.setBrush(getNoBrush())
            item.setTransformOriginPoint(_RECT.center())
            item.setRotation(rev_angles[i])
            prexo_items[i] = item
Beispiel #4
0
    def __init__(self, model_part, part_item):
        super(QGraphicsRectItem, self).__init__(BASE_RECT, part_item)
        # self.setAcceptHoverEvents(True)
        # self.setBrush(getNoBrush())
        self.setBrush(getBrushObj(styles.BLUE_FILL, alpha=12))
        self.setPen(getNoPen())
        self.setZValue(styles.ZWORKPLANE)

        self._model_part = model_part
        self._part_item = part_item
        self._idx_low, self._idx_high = model_part.getProperty('workplane_idxs')
        self._low_drag_bound = 0  # idx, not pos
        self._high_drag_bound = model_part.getProperty('max_vhelix_length')  # idx, not pos

        self.outline = PathWorkplaneOutline(self)
        self.resize_handle_group = ResizeHandleGroup(self.rect(),
                                                     self._HANDLE_SIZE,
                                                     styles.BLUE_STROKE,
                                                     True,
                                                     HandleType.LEFT | HandleType.RIGHT,
                                                     self,
                                                     translates_in=Axis.X)

        # Minimum size hint (darker internal rect, visible during resizing)
        self.model_bounds_hint = m_b_h = QGraphicsRectItem(self)
        m_b_h.setBrush(getBrushObj(styles.BLUE_FILL, alpha=64))
        m_b_h.setPen(getNoPen())
        m_b_h.hide()

        # Low and high idx labels
        self.resize_handle_group.updateText(HandleType.LEFT, self._idx_low)
        self.resize_handle_group.updateText(HandleType.RIGHT, self._idx_high)
    def __init__(self, model_part_instance, viewroot, parent):
        """parent should always be pathrootitem

        Args:
            model_part_instance (TYPE): Description
            viewroot (TYPE): Description
            parent (TYPE): Description
        """
        super(PathNucleicAcidPartItem, self).__init__(model_part_instance,
                                                      viewroot, parent)
        self.setAcceptHoverEvents(True)

        self._getActiveTool = viewroot.manager.activeToolGetter
        self.active_virtual_helix_item = None
        m_p = self._model_part
        self._controller = NucleicAcidPartItemController(self, m_p)
        self.prexover_manager = PreXoverManager(self)
        self._virtual_helix_item_list = []
        self._initModifierRect()
        self._proxy_parent = ProxyParentItem(self)
        self._proxy_parent.setFlag(QGraphicsItem.ItemHasNoContents)
        self._scale_2_model = m_p.baseWidth() / _BASE_WIDTH
        self._scale_2_Qt = _BASE_WIDTH / m_p.baseWidth()

        # self._rect = QRectF()
        self._vh_rect = QRectF()
        # self.setPen(getPenObj(styles.ORANGE_STROKE, 0))
        self.setPen(getNoPen())
        # self.setRect(self._rect)

        self.outline = outline = PathRectItem(self)
        outline.setFlag(QGraphicsItem.ItemStacksBehindParent)
        self.setZValue(styles.ZPART)
        self._proxy_parent.setZValue(styles.ZPART)
        outline.setZValue(styles.ZDESELECTOR)
        self.outline.setPen(getPenObj(m_p.getColor(), _DEFAULT_WIDTH))
        o_rect = self._configureOutline(outline)
        model_color = m_p.getColor()

        self.resize_handle_group = ResizeHandleGroup(
            o_rect,
            _HANDLE_SIZE,
            model_color,
            True,
            # HandleType.LEFT |
            HandleType.RIGHT,
            self)

        self.model_bounds_hint = m_b_h = QGraphicsRectItem(self)
        m_b_h.setBrush(getBrushObj(styles.BLUE_FILL, alpha=32))
        m_b_h.setPen(getNoPen())
        m_b_h.hide()

        self.workplane = PathWorkplaneItem(m_p, self)
        self.hide()  # show on adding first vh
    def __init__(self, part_instance: ObjectInstance, viewroot: PathRootItemT):
        """parent should always be ``PathRootItem``

        Args:
            part_instance:  ``ObjectInstance`` of the ``Part``
            viewroot: ``PathRootItem`` and parent object
        """
        super(PathNucleicAcidPartItem, self).__init__(part_instance, viewroot)
        self.setAcceptHoverEvents(True)

        self._getActiveTool = viewroot.manager.activeToolGetter
        self.active_virtual_helix_item: PathVirtualHelixItem = None
        m_p = self._model_part
        self._controller = NucleicAcidPartItemController(self, m_p)
        self.prexover_manager: PreXoverManager = PreXoverManager(self)
        self._virtual_helix_item_list = []
        self._initModifierRect()
        self._proxy_parent = ProxyParentItem(self)
        self._proxy_parent.setFlag(QGraphicsItem.ItemHasNoContents)
        self._scale_2_model: float = m_p.baseWidth() / _BASE_WIDTH
        self._scale_2_Qt: float = _BASE_WIDTH / m_p.baseWidth()

        self._vh_rect: QRectF = QRectF()
        self.setPen(getNoPen())

        self.outline: PathRectItem = PathRectItem(self)
        outline = self.outline
        outline.setFlag(QGraphicsItem.ItemStacksBehindParent)
        self.setZValue(styles.ZPART)
        self._proxy_parent.setZValue(styles.ZPART)
        outline.setZValue(styles.ZDESELECTOR)
        self.outline.setPen(getPenObj(m_p.getColor(), _DEFAULT_WIDTH))
        o_rect = self._configureOutline(outline)
        model_color = m_p.getColor()

        self.resize_handle_group: ResizeHandleGroup = ResizeHandleGroup(
            o_rect,
            _HANDLE_SIZE,
            model_color,
            True,
            # HandleEnum.LEFT |
            HandleEnum.RIGHT,
            self)

        self.model_bounds_hint = m_b_h = QGraphicsRectItem(self)
        m_b_h.setBrush(getBrushObj(styles.BLUE_FILL, alpha=32))
        m_b_h.setPen(getNoPen())
        m_b_h.hide()

        self.hide()  # show on adding first vh
    def __init__(self,  part_instance: ObjectInstance,
                        viewroot: PathRootItemT):
        """parent should always be ``PathRootItem``

        Args:
            part_instance:  ``ObjectInstance`` of the ``Part``
            viewroot: ``PathRootItem`` and parent object
        """
        super(PathNucleicAcidPartItem, self).__init__(part_instance, viewroot)
        self.setAcceptHoverEvents(True)

        self._getActiveTool = viewroot.manager.activeToolGetter
        self.active_virtual_helix_item: PathVirtualHelixItem = None
        m_p = self._model_part
        self._controller = NucleicAcidPartItemController(self, m_p)
        self.prexover_manager: PreXoverManager = PreXoverManager(self)
        self._virtual_helix_item_list = []
        self._initModifierRect()
        self._proxy_parent = ProxyParentItem(self)
        self._proxy_parent.setFlag(QGraphicsItem.ItemHasNoContents)
        self._scale_2_model: float = m_p.baseWidth()/_BASE_WIDTH
        self._scale_2_Qt: float = _BASE_WIDTH / m_p.baseWidth()

        self._vh_rect: QRectF = QRectF()
        self.setPen(getNoPen())

        self.outline: PathRectItem = PathRectItem(self)
        outline = self.outline
        outline.setFlag(QGraphicsItem.ItemStacksBehindParent)
        self.setZValue(styles.ZPART)
        self._proxy_parent.setZValue(styles.ZPART)
        outline.setZValue(styles.ZDESELECTOR)
        self.outline.setPen(getPenObj(m_p.getColor(), _DEFAULT_WIDTH))
        o_rect = self._configureOutline(outline)
        model_color = m_p.getColor()

        self.resize_handle_group: ResizeHandleGroup = ResizeHandleGroup(
                                                        o_rect, _HANDLE_SIZE,
                                                        model_color, True,
                                                        # HandleEnum.LEFT |
                                                        HandleEnum.RIGHT,
                                                        self)

        self.model_bounds_hint = m_b_h = QGraphicsRectItem(self)
        m_b_h.setBrush(getBrushObj(styles.BLUE_FILL, alpha=32))
        m_b_h.setPen(getNoPen())
        m_b_h.hide()

        self.hide()  # show on adding first vh
Beispiel #8
0
    def __init__(self,  from_virtual_helix_item: PathVirtualHelixItemT,
                        is_fwd: bool,
                        from_index: int,
                        nearby_idxs: List[int],
                        to_vh_id_num: int,
                        prexoveritem_manager: PreXoverManagerT):
        """Summary

        Args:
            from_virtual_helix_item: Description
            is_fwd: is this a forward strand?
            from_index: index of the Virtual Helix this xover is coming from
            nearby_idxs:
            to_vh_id_num: Virtual Helix number this Xover point might connect to
            prexoveritem_manager: Manager of the PreXoverItems
        """
        super(QGraphicsRectItem, self).__init__(BASE_RECT, from_virtual_helix_item)
        self.adapter = PropertyWrapperObject(self)
        self._tick_marks = QGraphicsPathItem(self)
        self._tick_marks.setAcceptHoverEvents(True)
        self._bond_item = QGraphicsPathItem(self)
        self._bond_item.hide()
        self._label = PreXoverLabel(is_fwd, self)
        self._path = QGraphicsPathItem()
        self.setZValue(styles.ZPREXOVERITEM)
        self.setPen(getNoPen())
        self.resetItem(from_virtual_helix_item, is_fwd, from_index, nearby_idxs, to_vh_id_num, prexoveritem_manager)

        self._getActiveTool = from_virtual_helix_item.viewroot().manager.activeToolGetter
    def __init__(self, from_virtual_helix_item: PathVirtualHelixItemT,
                 is_fwd: bool, from_index: int, nearby_idxs: List[int],
                 to_vh_id_num: int, prexoveritem_manager: PreXoverManagerT):
        """Summary

        Args:
            from_virtual_helix_item: Description
            is_fwd: is this a forward strand?
            from_index: index of the Virtual Helix this xover is coming from
            nearby_idxs:
            to_vh_id_num: Virtual Helix number this Xover point might connect to
            prexoveritem_manager: Manager of the PreXoverItems
        """
        super(QGraphicsRectItem, self).__init__(BASE_RECT,
                                                from_virtual_helix_item)
        self.adapter = PropertyWrapperObject(self)
        self._tick_marks = QGraphicsPathItem(self)
        self._tick_marks.setAcceptHoverEvents(True)
        self._bond_item = QGraphicsPathItem(self)
        self._bond_item.hide()
        self._label = PreXoverLabel(is_fwd, self)
        self._path = QGraphicsPathItem()
        self.setZValue(styles.ZPREXOVERITEM)
        self.setPen(getNoPen())
        self.resetItem(from_virtual_helix_item, is_fwd, from_index,
                       nearby_idxs, to_vh_id_num, prexoveritem_manager)

        self._getActiveTool = from_virtual_helix_item.viewroot(
        ).manager.activeToolGetter
Beispiel #10
0
    def __init__(self, step_idx, twist_per_base, bases_per_repeat,
                 color, pre_xover_item_group, is_fwd=True):
        """Summary

        Args:
            step_idx (int): the base index within the virtual helix
            twist_per_base (float): (turns per repeat)*360/(base per repeat)
            bases_per_repeat (int): number of bases that will be displayed
            color (str): hexadecimal color code in the form: `#RRGGBB`
            pre_xover_item_group (TYPE): Description
            is_fwd (bool, optional): Description
        """
        super(PreXoverItem, self).__init__(pre_xover_item_group)
        self.step_idx = step_idx
        self.color = color
        self.is_fwd = is_fwd
        self.pre_xover_item_group = pre_xover_item_group
        self.phos_item = Triangle(is_fwd, self)
        self.phos_item.setScale((bases_per_repeat - step_idx)/(2*bases_per_repeat) + 0.5)
        self.theta0 = rot = twist_per_base/2 if is_fwd else -twist_per_base/2
        self.phos_item.setRotation(rot)
        self.is_active5p = self.is_active3p = False
        self.item_5p = None
        self.item_3p = None
        self._default_bond_3p = QLineF()
        self._default_p2_3p = QPointF(0, 0)
        self.bond_3p = PhosBond(is_fwd, self)
        self.setAcceptHoverEvents(True)
        self.setFiltersChildEvents(True)
        self.setRect(self.phos_item.boundingRect())
        self.setPen(getNoPen())
Beispiel #11
0
 def __init__(self, diameter, parent):
     nd = 2*self._RADIUS
     offset = -0.5*nd + diameter/2
     super(ClickArea, self).__init__(offset, offset, nd, nd, parent=parent)
     self.parent_obj = parent
     self.setAcceptHoverEvents(True)
     self.setPen(getNoPen())
Beispiel #12
0
    def __init__(self, step_idx, twist_per_base, bases_per_repeat,
                 color, pre_xover_item_group, is_fwd=True):
        """Summary

        Args:
            step_idx (int): the base index within the virtual helix
            twist_per_base (float): (turns per repeat)*360/(base per repeat)
            bases_per_repeat (int): number of bases that will be displayed
            color (str): hexadecimal color code in the form: `#RRGGBB`
            pre_xover_item_group (TYPE): Description
            is_fwd (bool, optional): Description
        """
        super(PreXoverItem, self).__init__(pre_xover_item_group)
        self.step_idx = step_idx
        self.color = color
        self.is_fwd = is_fwd
        self.pre_xover_item_group = pre_xover_item_group
        self.phos_item = Triangle(is_fwd, self)
        self.phos_item.setScale((bases_per_repeat - step_idx)/(2*bases_per_repeat) + 0.5)
        self.theta0 = rot = twist_per_base/2 if is_fwd else -twist_per_base/2
        self.phos_item.setRotation(rot)
        self.is_active5p = self.is_active3p = False
        self.item_5p = None
        self.item_3p = None
        self._default_bond_3p = QLineF()
        self._default_p2_3p = QPointF(0, 0)
        self.bond_3p = PhosBond(is_fwd, self)
        self.setAcceptHoverEvents(True)
        self.setFiltersChildEvents(True)
        self.setRect(self.phos_item.boundingRect())
        self.setPen(getNoPen())
Beispiel #13
0
 def __init__(self, diameter, parent):
     nd = 2 * self._RADIUS
     offset = -0.5 * nd + diameter / 2
     super(ClickArea, self).__init__(offset, offset, nd, nd, parent=parent)
     self.parent_obj = parent
     self.setAcceptHoverEvents(True)
     self.setPen(getNoPen())
Beispiel #14
0
    def __init__(self, strand_item, virtual_helix_item):
        """
        strand_item is a the model representation of the 5prime most strand
        of a Xover

        Args:
            strand_item (TYPE): Description
            virtual_helix_item (cadnano.views.pathview.virtualhelixitem.VirtualHelixItem): Description
        """
        super(XoverItem, self).__init__(virtual_helix_item.partItem())
        self._strand_item = strand_item
        self._virtual_helix_item = virtual_helix_item
        self._strand5p = None
        self._node5 = None
        self._node3 = None
        self.hide()

        # for easier mouseclick
        self._click_area = c_a = QGraphicsRectItem(self)
        # self._click_area.setAcceptHoverEvents(True)
        # c_a.hoverMoveEvent = self.hoverMoveEvent
        c_a.mousePressEvent = self.mousePressEvent
        c_a.mouseMoveEvent = self.mouseMoveEvent
        c_a.setPen(getNoPen())

        self._getActiveTool = strand_item._getActiveTool
    def __init__(self, part_instance: ObjectInstance, viewroot: GridRootItemT):
        """Summary

        Args:
            part_instance: ``ObjectInstance`` of the ``Part``
            viewroot: ``GridRootItem``
            parent: Default is ``None``
        """
        super(GridNucleicAcidPartItem, self).__init__(part_instance, viewroot)

        self._getActiveTool = viewroot.manager.activeToolGetter
        m_p = self._model_part
        self._controller = NucleicAcidPartItemController(self, m_p)
        self.scale_factor: float = self._RADIUS / m_p.radius()
        self.active_virtual_helix_item: GridVirtualHelixItem = None
        self.prexover_manager = PreXoverManager(self)
        self.hide()  # hide while until after attemptResize() to avoid flicker

        # set this to a token value
        self._rect: QRectF = QRectF(0., 0., 1000., 1000.)
        self.boundRectToModel()
        self.setPen(getNoPen())
        self.setRect(self._rect)

        self.setAcceptHoverEvents(True)

        # Cache of VHs that were active as of last call to activeGridChanged
        # If None, all grids will be redrawn and the cache will be filled.
        # Connect destructor. This is for removing a part from scenes.

        # initialize the NucleicAcidPartItem with an empty set of old coords
        self.setZValue(styles.ZPARTITEM)
        outline = QGraphicsRectItem(self)
        self.outline: QGraphicsRectItem = outline
        o_rect = self._configureOutline(outline)
        outline.setFlag(QGraphicsItem.ItemStacksBehindParent)
        outline.setZValue(styles.ZDESELECTOR)
        model_color = m_p.getColor()
        outline.setPen(getPenObj(model_color, _DEFAULT_WIDTH))

        GC_SIZE = 10
        self.grab_cornerTL: GrabCornerItem = GrabCornerItem(
            GC_SIZE, model_color, True, self)
        self.grab_cornerTL.setTopLeft(o_rect.topLeft())
        self.grab_cornerBR: GrabCornerItem = GrabCornerItem(
            GC_SIZE, model_color, True, self)
        self.grab_cornerBR.setBottomRight(o_rect.bottomRight())
        self.griditem: GridItem = GridItem(self,
                                           self._model_props['grid_type'])
        self.griditem.setZValue(1)
        self.grab_cornerTL.setZValue(2)
        self.grab_cornerBR.setZValue(2)

        # select upon creation
        for part in m_p.document().children():
            if part is m_p:
                part.setSelected(True)
            else:
                part.setSelected(False)
        self.show()
Beispiel #16
0
    def resetItem(self, from_virtual_helix_item, is_fwd, from_index,
                  to_vh_id_num, prexoveritemgroup, color):
        """Summary

        Args:
            from_virtual_helix_item (cadnano.gui.views.pathview.virtualhelixitem.VirtualHelixItem): Description
            is_fwd (TYPE): Description
            from_index (TYPE): Description
            to_vh_id_num (TYPE): Description
            prexoveritemgroup (TYPE): Description
            color (TYPE): Description

        Returns:
            TYPE: Description
        """
        self.setParentItem(from_virtual_helix_item)
        self.resetTransform()
        self._id_num = from_virtual_helix_item.idNum()
        self.idx = from_index
        self.is_fwd = is_fwd
        self.to_vh_id_num = to_vh_id_num
        self._color = color
        self.prexoveritemgroup = prexoveritemgroup
        self._bond_item.hide()
        self._label_txt = lbt = None if to_vh_id_num is None else str(
            to_vh_id_num)
        self.setLabel(text=lbt)
        self._label.resetItem(is_fwd, color)

        phos = self._phos_item
        bonditem = self._bond_item

        if is_fwd:
            phos.setPath(FWDPHOS_PP)
            phos.setTransformOriginPoint(0, phos.boundingRect().center().y())
            phos.setPos(0.5 * BASE_WIDTH, BASE_WIDTH)
            phos.setPen(getNoPen())
            phos.setBrush(getBrushObj(color))
            bonditem.setPen(getPenObj(color, styles.PREXOVER_STROKE_WIDTH))
            self.setPos(from_index * BASE_WIDTH, -BASE_WIDTH)
        else:
            phos.setPath(REVPHOS_PP)
            phos.setTransformOriginPoint(0, phos.boundingRect().center().y())
            phos.setPos(0.5 * BASE_WIDTH, 0)
            phos.setPen(getPenObj(color, 0.25))
            phos.setBrush(getNoBrush())
            bonditem.setPen(
                getPenObj(color,
                          styles.PREXOVER_STROKE_WIDTH,
                          penstyle=Qt.DotLine,
                          capstyle=Qt.RoundCap))
            self.setPos(from_index * BASE_WIDTH, 2 * BASE_WIDTH)

        if to_vh_id_num is not None:
            inactive_alpha = PROX_ALPHA
            self.setBrush(getBrushObj(color, alpha=inactive_alpha))
        else:
            self.setBrush(getBrushObj(color, alpha=0))
        self.show()
Beispiel #17
0
 def __init__(self, parent: QGraphicsItem = None):
     """
     Args:
         parent: default is ``None``
     """
     super(PathWorkplaneOutline, self).__init__(parent)
     self.setPen(getNoPen())
     self._path = QGraphicsPathItem(self)
     self._path.setBrush(getNoBrush())
     self._path.setPen(newPenObj(styles.BLUE_STROKE, 0))
Beispiel #18
0
 def __init__(self, parent: QGraphicsItem = None):
     """
     Args:
         parent: default is ``None``
     """
     super(PathWorkplaneOutline, self).__init__(parent)
     self.setPen(getNoPen())
     self._path = QGraphicsPathItem(self)
     self._path.setBrush(getNoBrush())
     self._path.setPen(newPenObj(styles.BLUE_STROKE, 0))
Beispiel #19
0
    def resetItem(self, from_virtual_helix_item, is_fwd, from_index,
                  to_vh_id_num, prexoveritemgroup, color):
        """Summary

        Args:
            from_virtual_helix_item (cadnano.gui.views.pathview.virtualhelixitem.VirtualHelixItem): Description
            is_fwd (TYPE): Description
            from_index (TYPE): Description
            to_vh_id_num (TYPE): Description
            prexoveritemgroup (TYPE): Description
            color (TYPE): Description

        Returns:
            TYPE: Description
        """
        self.setParentItem(from_virtual_helix_item)
        self.resetTransform()
        self._id_num = from_virtual_helix_item.idNum()
        self.idx = from_index
        self.is_fwd = is_fwd
        self.to_vh_id_num = to_vh_id_num
        self._color = color
        self.prexoveritemgroup = prexoveritemgroup
        self._bond_item.hide()
        self._label_txt = lbt = None if to_vh_id_num is None else str(to_vh_id_num)
        self.setLabel(text=lbt)
        self._label.resetItem(is_fwd, color)

        phos = self._phos_item
        bonditem = self._bond_item

        if is_fwd:
            phos.setPath(FWDPHOS_PP)
            phos.setTransformOriginPoint(0, phos.boundingRect().center().y())
            phos.setPos(0.5*BASE_WIDTH, BASE_WIDTH)
            phos.setPen(getNoPen())
            phos.setBrush(getBrushObj(color))
            bonditem.setPen(getPenObj(color, styles.PREXOVER_STROKE_WIDTH))
            self.setPos(from_index*BASE_WIDTH, -BASE_WIDTH)
        else:
            phos.setPath(REVPHOS_PP)
            phos.setTransformOriginPoint(0, phos.boundingRect().center().y())
            phos.setPos(0.5*BASE_WIDTH, 0)
            phos.setPen(getPenObj(color, 0.25))
            phos.setBrush(getNoBrush())
            bonditem.setPen(getPenObj(color, styles.PREXOVER_STROKE_WIDTH,
                                      penstyle=Qt.DotLine, capstyle=Qt.RoundCap))
            self.setPos(from_index*BASE_WIDTH, 2*BASE_WIDTH)

        if to_vh_id_num is not None:
            inactive_alpha = PROX_ALPHA
            self.setBrush(getBrushObj(color, alpha=inactive_alpha))
        else:
            self.setBrush(getBrushObj(color, alpha=0))
        self.show()
Beispiel #20
0
 def __init__(self, diameter: float, parent: GridPoint):
     """
     Args:
         diameter: defines the size of the clickarea.
         parent: the item.
     """
     nd = 2 * self._RADIUS
     offset = -0.5 * nd + diameter / 2
     super(ClickArea, self).__init__(offset, offset, nd, nd, parent=parent)
     self.parent_obj = parent
     self.setAcceptHoverEvents(True)
     self.setPen(getNoPen())
Beispiel #21
0
 def __init__(self, diameter: float, parent: GridPoint):
     """
     Args:
         diameter: defines the size of the clickarea.
         parent: the item.
     """
     nd = 2*self._RADIUS
     offset = -0.5*nd + diameter/2
     super(ClickArea, self).__init__(offset, offset, nd, nd, parent=parent)
     self.parent_obj = parent
     self.setAcceptHoverEvents(True)
     self.setPen(getNoPen())
Beispiel #22
0
    def __init__(self,  model_part: NucleicAcidPartT,
                        part_item: PathNucleicAcidPartItemT):
        """
        Args:
            model_part:
            part_item:
        """
        super(QGraphicsRectItem, self).__init__(BASE_RECT, part_item.proxy())
        self.setAcceptHoverEvents(True)
        self.setBrush(getBrushObj(styles.BLUE_FILL, alpha=12))
        self.setPen(getNoPen())
        self.setZValue(styles.ZWORKPLANE)

        self._model_part = model_part
        self._part_item = part_item

        self._low_drag_bound = 0  # idx, not pos
        self._high_drag_bound = model_part.getProperty('max_vhelix_length')  # idx, not pos
        self._moving_via_handle = False

        self.outline = PathWorkplaneOutline(self)
        self.resize_handle_group = ResizeHandleGroup(self.rect(),
                                                     self._HANDLE_SIZE,
                                                     styles.BLUE_STROKE,
                                                     True,
                                                     HandleEnum.LEFT | HandleEnum.RIGHT,
                                                     self,
                                                     translates_in=AxisEnum.X)

        # Minimum size hint (darker internal rect, visible during resizing)
        self.model_bounds_hint = m_b_h = QGraphicsRectItem(self)
        m_b_h.setBrush(getBrushObj(styles.BLUE_FILL, alpha=64))
        m_b_h.setPen(getNoPen())
        m_b_h.hide()

        # Low and high idx labels
        self.resize_handle_group.updateText(HandleEnum.LEFT, self._idx_low)
        self.resize_handle_group.updateText(HandleEnum.RIGHT, self._idx_high)
    def __init__(self, radius, rect, pre_xover_item_group):
        """parent could be a PreXoverItemGroup or a VirtualHelixItem

        Args:
            radius (TYPE): Description
            rect (TYPE): Description
            pre_xover_item_group (TYPE): Description
        """
        super(WedgeGizmo, self).__init__(pre_xover_item_group)
        self._radius = radius
        self._rect = rect
        self.pre_xover_item_group = pre_xover_item_group
        self.setPen(getNoPen())
        self.setZValue(styles.ZWEDGEGIZMO - 10)
        self._last_params = None
Beispiel #24
0
    def __init__(self, radius, rect, pre_xover_item_group):
        """parent could be a PreXoverItemGroup or a VirtualHelixItem

        Args:
            radius (TYPE): Description
            rect (TYPE): Description
            pre_xover_item_group (TYPE): Description
        """
        super(WedgeGizmo, self).__init__(pre_xover_item_group)
        self._radius = radius
        self._rect = rect
        self.pre_xover_item_group = pre_xover_item_group
        self.setPen(getNoPen())
        self.setZValue(styles.ZWEDGEGIZMO - 10)
        self._last_params = None
Beispiel #25
0
 def paint(self, painter: QPainter,
                 option: QStyleOptionGraphicsItem,
                 widget: QWidget = None):
     """
     Args:
         painter: Description
         option: Description
         widget: Default is ``None``
     """
     AbstractPathTool.paint(self, painter, option, widget)
     painter.setPen(getNoPen())
     painter.setBrush(_BRUSH)
     if self._is_top_strand:
         painter.drawPath(_FWD_A)
     else:
         painter.drawPath(_REV_A)
Beispiel #26
0
    def __init__(self, radius, rect, virtual_helix_item, is_active):
        """Summary

        Args:
            radius (TYPE): Description
            rect (TYPE): Description
            virtual_helix_item (VirtualHelixItem): Description
            is_active (TYPE): Description
        """
        super(PreXoverItemGroup, self).__init__(rect, virtual_helix_item)

        self._radius = radius
        self._rect = rect
        self.virtual_helix_item = virtual_helix_item
        self.model_part = virtual_helix_item.part()
        self.id_num = virtual_helix_item.idNum()
        self.is_active = is_active
        self.active_wedge_gizmo = WedgeGizmo(radius, rect, self)
        self.fwd_prexover_items = fwd_pxis = {}
        self.rev_prexover_items = rev_pxis = {}
        self._colors = self._getColors()
        self.addItems()
        self.setPen(getNoPen())
        z = styles.ZPXIGROUP + 10 if is_active else styles.ZPXIGROUP
        self.setZValue(z)
        self.setTransformOriginPoint(rect.center())

        bpr, tpr, eulerZ = virtual_helix_item.getProperty(['bases_per_repeat',
                                                           'turns_per_repeat',
                                                           'eulerZ'])

        self.setRotation(-eulerZ)  # add 180

        # for baseNearestPoint
        fwd_pos, rev_pos = [], []
        step_size = self.virtual_helix_item.getProperty('bases_per_repeat')
        for i in range(int(step_size)):
            fwd_pos.append((fwd_pxis[i].scenePos().x(),
                            fwd_pxis[i].scenePos().y()))
            rev_pos.append((rev_pxis[i].scenePos().x(),
                            rev_pxis[i].scenePos().y()))
        self.fwd_pos_array = np.asarray(fwd_pos)
        self.rev_pos_array = np.asarray(rev_pos)
        self.baseNearLine = QGraphicsLineItem(self)
        self.baseNearLine.setPen(getPenObj("#000000", 0.25, capstyle=Qt.RoundCap))
    def __init__(self, radius, rect, virtual_helix_item, is_active):
        """Summary

        Args:
            radius (TYPE): Description
            rect (TYPE): Description
            virtual_helix_item (VirtualHelixItem): Description
            is_active (TYPE): Description
        """
        super(PreXoverItemGroup, self).__init__(rect, virtual_helix_item)

        self._radius = radius
        self._rect = rect
        self.virtual_helix_item = virtual_helix_item
        self.model_part = virtual_helix_item.part()
        self.id_num = virtual_helix_item.idNum()
        self.is_active = is_active
        self.active_wedge_gizmo = WedgeGizmo(radius, rect, self)
        self.fwd_prexover_items = fwd_pxis = {}
        self.rev_prexover_items = rev_pxis = {}
        self._colors = self._getColors()
        self.addItems()
        self.setPen(getNoPen())
        z = styles.ZPXIGROUP + 10 if is_active else styles.ZPXIGROUP
        self.setZValue(z)
        self.setTransformOriginPoint(rect.center())

        bpr, tpr, eulerZ = virtual_helix_item.getProperty(
            ['bases_per_repeat', 'turns_per_repeat', 'eulerZ'])

        self.setRotation(-eulerZ)  # add 180

        # for baseNearestPoint
        fwd_pos, rev_pos = [], []
        step_size = self.virtual_helix_item.getProperty('bases_per_repeat')
        for i in range(int(step_size)):
            fwd_pos.append(
                (fwd_pxis[i].scenePos().x(), fwd_pxis[i].scenePos().y()))
            rev_pos.append(
                (rev_pxis[i].scenePos().x(), rev_pxis[i].scenePos().y()))
        self.fwd_pos_array = np.asarray(fwd_pos)
        self.rev_pos_array = np.asarray(rev_pos)
        self.baseNearLine = QGraphicsLineItem(self)
        self.baseNearLine.setPen(
            getPenObj("#000000", 0.25, capstyle=Qt.RoundCap))
Beispiel #28
0
    def paint(self, painter, option, widget=None):
        """Summary

        Args:
            painter (TYPE): Description
            option (TYPE): Description
            widget (None, optional): Description

        Returns:
            TYPE: Description
        """
        AbstractPathTool.paint(self, painter, option, widget)
        painter.setPen(getNoPen())
        painter.setBrush(_BRUSH)
        if self._is_top_strand:
            painter.drawPath(_FWD_A)
        else:
            painter.drawPath(_REV_A)
Beispiel #29
0
    def __init__(self, from_virtual_helix_item, is_fwd, from_index,
                 to_vh_id_num, prexoveritemgroup, color):
        """Summary

        Args:
            from_virtual_helix_item (cadnano.gui.views.pathview.virtualhelixitem.VirtualHelixItem): Description
            is_fwd (TYPE): Description
            from_index (TYPE): Description
            to_vh_id_num (TYPE): Description
            prexoveritemgroup (TYPE): Description
            color (TYPE): Description
        """
        super(QGraphicsRectItem, self).__init__(BASE_RECT, from_virtual_helix_item)
        self.adapter = PropertyWrapperObject(self)
        self._bond_item = QGraphicsPathItem(self)
        self._bond_item.hide()
        self._label = PreXoverLabel(is_fwd, color, self)
        self._phos_item = Triangle(FWDPHOS_PP, self)
        self.setPen(getNoPen())
        self.resetItem(from_virtual_helix_item, is_fwd, from_index,
                       to_vh_id_num, prexoveritemgroup, color)
Beispiel #30
0
    def __init__(self, part_item: PathNucleicAcidPartItemT):
        """
        Args:
            part_item: Description
        """
        super(QGraphicsRectItem, self).__init__(part_item)
        self.part_item = part_item
        self.virtual_helix_item = None
        self.setPen(getNoPen())
        self._colors = []

        # dictionary of tuple of a (PreXoverItem, List[PreXoverItem])
        # for activating on hover events
        self.prexover_item_map = {}

        self.neighbor_prexover_items = {}   # just a dictionary of neighbors
        self.hovered_items = []
        self._key_press_dict = {}

        # for reuse of PreXoverItem objects
        self.pxi_pool = deque()
        self.active_pxis = {}
Beispiel #31
0
    def __init__(self, from_virtual_helix_item, is_fwd, from_index, nearby_idxs,
                 to_vh_id_num, prexoveritem_manager):
        """Summary

        Args:
            from_virtual_helix_item (cadnano.views.pathview.virtualhelixitem.VirtualHelixItem): Description
            is_fwd (TYPE): Description
            from_index (TYPE): Description
            to_vh_id_num (TYPE): Description
            prexoveritem_manager (TYPE): Description
        """
        super(QGraphicsRectItem, self).__init__(BASE_RECT, from_virtual_helix_item)
        self.adapter = PropertyWrapperObject(self)
        self._tick_marks = QGraphicsPathItem(self)
        self._tick_marks.setAcceptHoverEvents(True)
        self._bond_item = QGraphicsPathItem(self)
        self._bond_item.hide()
        self._label = PreXoverLabel(is_fwd, self)
        self._path = QGraphicsPathItem()
        self.setZValue(styles.ZPREXOVERITEM)
        self.setPen(getNoPen())
        self.resetItem(from_virtual_helix_item, is_fwd, from_index, nearby_idxs, to_vh_id_num, prexoveritem_manager)
Beispiel #32
0
    def __init__(self, from_virtual_helix_item, is_fwd, from_index,
                 to_vh_id_num, prexoveritemgroup, color):
        """Summary

        Args:
            from_virtual_helix_item (cadnano.gui.views.pathview.virtualhelixitem.VirtualHelixItem): Description
            is_fwd (TYPE): Description
            from_index (TYPE): Description
            to_vh_id_num (TYPE): Description
            prexoveritemgroup (TYPE): Description
            color (TYPE): Description
        """
        super(QGraphicsRectItem, self).__init__(BASE_RECT,
                                                from_virtual_helix_item)
        self.adapter = PropertyWrapperObject(self)
        self._bond_item = QGraphicsPathItem(self)
        self._bond_item.hide()
        self._label = PreXoverLabel(is_fwd, color, self)
        self._phos_item = Triangle(FWDPHOS_PP, self)
        self.setPen(getNoPen())
        self.resetItem(from_virtual_helix_item, is_fwd, from_index,
                       to_vh_id_num, prexoveritemgroup, color)
Beispiel #33
0
    def __init__(self, part_item: PathNucleicAcidPartItemT):
        """
        Args:
            part_item: Description
        """
        super(QGraphicsRectItem, self).__init__(part_item)
        self.part_item = part_item
        self.virtual_helix_item = None
        self.setPen(getNoPen())
        self._colors = []

        # dictionary of tuple of a (PreXoverItem, List[PreXoverItem])
        # for activating on hover events
        self.prexover_item_map = {}

        self.neighbor_prexover_items = {}  # just a dictionary of neighbors
        self.hovered_items = []
        self._key_press_dict = {}

        # for reuse of PreXoverItem objects
        self.pxi_pool = deque()
        self.active_pxis = {}
Beispiel #34
0
    def __init__(self, virtual_helix_item, xover_item, strand3p, idx):
        """Summary

        Args:
            virtual_helix_item (VirtualHelixItem): Description
            xover_item (TYPE): Description
            strand3p (Strand): reference to the 3' strand
            idx (int): the base index within the virtual helix
        """
        super(XoverNode3, self).__init__(virtual_helix_item)
        self._vhi = virtual_helix_item
        self._xover_item = xover_item
        self._idx = idx
        self.is_forward = strand3p.strandSet().isForward()

        self.setPartnerVirtualHelix(strand3p)

        self.setPen(getNoPen())
        self._label = None
        self.setBrush(_NO_BRUSH)
        self.setRect(_RECT)
        self.setZValue(styles.ZXOVERITEM)
    def __init__(self,  part_instance: ObjectInstance,
                        viewroot: GridRootItemT):
        """Summary

        Args:
            part_instance: ``ObjectInstance`` of the ``Part``
            viewroot: ``GridRootItem``
            parent: Default is ``None``
        """
        super(GridNucleicAcidPartItem, self).__init__(  part_instance,
                                                        viewroot)

        self._getActiveTool = viewroot.manager.activeToolGetter
        m_p = self._model_part
        self._controller = NucleicAcidPartItemController(self, m_p)
        self.scale_factor: float = self._RADIUS / m_p.radius()
        self.active_virtual_helix_item: GridVirtualHelixItem = None
        self.prexover_manager = PreXoverManager(self)
        self.hide()  # hide while until after attemptResize() to avoid flicker

        # set this to a token value
        self._rect: QRectF = QRectF(0., 0., 1000., 1000.)
        self.boundRectToModel()
        self.setPen(getNoPen())
        self.setRect(self._rect)

        self.setAcceptHoverEvents(True)

        # Cache of VHs that were active as of last call to activeGridChanged
        # If None, all grids will be redrawn and the cache will be filled.
        # Connect destructor. This is for removing a part from scenes.

        # initialize the NucleicAcidPartItem with an empty set of old coords
        self.setZValue(styles.ZPARTITEM)
        outline = QGraphicsRectItem(self)
        self.outline: QGraphicsRectItem = outline
        o_rect = self._configureOutline(outline)
        outline.setFlag(QGraphicsItem.ItemStacksBehindParent)
        outline.setZValue(styles.ZDESELECTOR)
        model_color = m_p.getColor()
        outline.setPen(getPenObj(model_color, _DEFAULT_WIDTH))

        GC_SIZE = 10
        self.grab_cornerTL: GrabCornerItem = GrabCornerItem(GC_SIZE,
                                                            model_color,
                                                            True,
                                                            self)
        self.grab_cornerTL.setTopLeft(o_rect.topLeft())
        self.grab_cornerBR: GrabCornerItem = GrabCornerItem(GC_SIZE,
                                                            model_color,
                                                            True,
                                                            self)
        self.grab_cornerBR.setBottomRight(o_rect.bottomRight())
        self.griditem: GridItem = GridItem(self, self._model_props['grid_type'])
        self.griditem.setZValue(1)
        self.grab_cornerTL.setZValue(2)
        self.grab_cornerBR.setZValue(2)

        # select upon creation
        for part in m_p.document().children():
            if part is m_p:
                part.setSelected(True)
            else:
                part.setSelected(False)
        self.show()
Beispiel #36
0
from cadnano.gui.palette import getPenObj, getBrushObj, getNoPen

from PyQt5.QtCore import QRectF, Qt, QPointF, QEvent

from PyQt5.QtGui import QBrush, QPen, QFont, QColor, QFontMetricsF, QPainterPath
from PyQt5.QtGui import QTransform, QTextCursor
from PyQt5.QtWidgets  import QGraphicsItem, QGraphicsPathItem, QGraphicsRectItem
from PyQt5.QtWidgets  import QGraphicsTextItem, QLabel

_BASE_WIDTH = _BW = styles.PATH_BASE_WIDTH
_HALF_BASE_WIDTH = _HBW = _BASE_WIDTH / 2
_OFFSET1 = _BASE_WIDTH / 4
_DEFAULT_RECT = QRectF(0, 0, _BW, _BW)
_B_PEN = getPenObj(styles.BLUE_STROKE, styles.INSERTWIDTH)
_R_PEN = getPenObj(styles.RED_STROKE, styles.SKIPWIDTH)
_NO_PEN = getNoPen()

def _insertGen(path, start, c1, p1, c2):
    path.moveTo(start)
    path.quadTo(c1, p1)
    path.quadTo(c2, start)
# end def


_PATH_START = QPointF(_HBW, _HBW)
_PATH_MID_UP = QPointF(_HBW, -_BW)
_PATH_UP_UP_CTRL_PT = QPointF(-_HBW, -_BW)
_PATH_UP_DOWN_CTRL_PT = QPointF(1.5 * _BW, -_BW)
_PATH_MID_DOWN = QPointF(_HBW, 2 * _BW)
_PATH_DOWN_DOWN_CTRL_PT = QPointF(-_HBW, 2 * _BW)
_PATH_DOWN_UP_CTRL_PT = QPointF(1.5 * _BW, 2 * _BW)
Beispiel #37
0
 def __init__(self, diameter: float, parent: GridPoint):
     nd = 2 * self._RADIUS
     offset = -0.5 * nd + diameter / 2
     super(ClickArea, self).__init__(offset, offset, nd, nd, parent=parent)
     self.parent_obj = parent
     self.setPen(getNoPen())
    def __init__(self, model_part_instance, viewroot, parent=None):
        """Summary

        Args:
            model_part_instance (TYPE): Description
            viewroot (TYPE): Description
            parent (None, optional): Description
        """
        super(SliceNucleicAcidPartItem, self).__init__(model_part_instance, viewroot, parent)

        self._getActiveTool = viewroot.manager.activeToolGetter
        m_p = self._model_part
        self._controller = NucleicAcidPartItemController(self, m_p)
        self.scale_factor = self._RADIUS / m_p.radius()

        self.active_virtual_helix_item = None

        self.prexover_manager = PreXoverManager(self)

        self.hide()  # hide while until after attemptResize() to avoid flicker

        self._rect = QRectF(0., 0., 1000., 1000.)   # set this to a token value
        self.boundRectToModel()

        self.setPen(getNoPen())

        self.setRect(self._rect)
        self.setAcceptHoverEvents(True)

        # Cache of VHs that were active as of last call to activeSliceChanged
        # If None, all slices will be redrawn and the cache will be filled.
        # Connect destructor. This is for removing a part from scenes.

        # initialize the NucleicAcidPartItem with an empty set of old coords
        self.setZValue(styles.ZPARTITEM)

        self.outline = outline = QGraphicsRectItem(self)
        o_rect = self.configureOutline(outline)
        outline.setFlag(QGraphicsItem.ItemStacksBehindParent)
        outline.setZValue(styles.ZDESELECTOR)
        model_color = m_p.getColor()
        self.outline.setPen(getPenObj(model_color, _DEFAULT_WIDTH))

        GC_SIZE = 20
        self.grab_cornerTL = GrabCornerItem(GC_SIZE, model_color, True, self)
        self.grab_cornerTL.setTopLeft(o_rect.topLeft())
        self.grab_cornerBR = GrabCornerItem(GC_SIZE, model_color, True, self)
        self.grab_cornerBR.setBottomRight(o_rect.bottomRight())

        self.griditem = GridItem(self, self._model_props['grid_type'])

        self.griditem.setZValue(1)
        self.grab_cornerTL.setZValue(2)
        self.grab_cornerBR.setZValue(2)

        self.vhi_hint_item = QGraphicsEllipseItem(_DEFAULT_RECT, self)
        self.vhi_hint_item.setPen(_MOD_PEN)
        self.vhi_hint_item.setZValue(styles.ZPARTITEM)

        # select upon creation
        for part in m_p.document().children():
            if part is m_p:
                part.setSelected(True)
            else:
                part.setSelected(False)
        self.show()
Beispiel #39
0
 def __init__(self, parent=None):
     super(PathWorkplaneOutline, self).__init__(parent)
     self.setPen(getNoPen())
     self._path = QGraphicsPathItem(self)
     self._path.setBrush(getNoBrush())
     self._path.setPen(newPenObj(styles.BLUE_STROKE, 0))
    def __init__(self, model_part_instance, viewroot, parent=None):
        """Summary

        Args:
            model_part_instance (TYPE): Description
            viewroot (TYPE): Description
            parent (None, optional): Description
        """
        super(SliceNucleicAcidPartItem, self).__init__(model_part_instance,
                                                       viewroot, parent)

        self.shortest_path_start = None
        self.neighbor_map = dict()
        self.coordinates_to_vhid = dict()
        self.coordinates_to_xy = dict()
        self._last_hovered_item = None
        self._highlighted_path = []
        self.spa_start_vhi = None
        self.last_mouse_position = None

        self._translated_x = 0.0
        self._translated_y = 0.0

        self._getActiveTool = viewroot.manager.activeToolGetter
        m_p = self._model_part
        self._controller = NucleicAcidPartItemController(self, m_p)
        self.scale_factor = self._RADIUS / m_p.radius()
        self.inverse_scale_factor = m_p.radius() / self._RADIUS
        self.active_virtual_helix_item = None
        self.prexover_manager = PreXoverManager(self)
        self.hide()  # hide while until after attemptResize() to avoid flicker
        self._rect = QRectF(0., 0., 1000., 1000.)  # set this to a token value
        self.boundRectToModel()
        self.setPen(getNoPen())
        self.setRect(self._rect)
        self.setAcceptHoverEvents(True)

        self.shortest_path_add_mode = False

        # Cache of VHs that were active as of last call to activeSliceChanged
        # If None, all slices will be redrawn and the cache will be filled.
        # Connect destructor. This is for removing a part from scenes.

        # initialize the NucleicAcidPartItem with an empty set of old coords
        self.setZValue(styles.ZPARTITEM)
        self.outline = outline = QGraphicsRectItem(self)
        o_rect = self._configureOutline(outline)
        outline.setFlag(QGraphicsItem.ItemStacksBehindParent)
        outline.setZValue(styles.ZDESELECTOR)
        model_color = m_p.getColor()
        self.outline.setPen(getPenObj(model_color, _DEFAULT_WIDTH))

        self.model_bounds_hint = QGraphicsRectItem(self)
        self.model_bounds_hint.setBrush(getBrushObj(model_color, alpha=12))
        self.model_bounds_hint.setPen(getNoPen())

        self.resize_handle_group = ResizeHandleGroup(
            o_rect,
            _HANDLE_SIZE,
            model_color,
            True,
            HandleType.TOP | HandleType.BOTTOM | HandleType.LEFT
            | HandleType.RIGHT | HandleType.TOP_LEFT | HandleType.TOP_RIGHT
            | HandleType.BOTTOM_LEFT | HandleType.BOTTOM_RIGHT,
            self,
            show_coords=True)

        self.griditem = GridItem(self, self._model_props['grid_type'])
        self.griditem.setZValue(1)
        self.resize_handle_group.setZValue(2)

        self.x_axis_line = QGraphicsLineItem(0, 0, self._RADIUS, 0, self)
        self.x_axis_line.setPen(getPenObj('#cc0000', _DEFAULT_WIDTH))
        self.x_axis_line.setZValue(styles.ZAXIS)
        self.y_axis_line = QGraphicsLineItem(0, 0, 0, -self._RADIUS, self)
        self.y_axis_line.setPen(getPenObj('#007200', _DEFAULT_WIDTH))
        self.y_axis_line.setZValue(styles.ZAXIS)

        # select upon creation
        for part in m_p.document().children():
            if part is m_p:
                part.setSelected(True)
            else:
                part.setSelected(False)
        self.show()
Beispiel #41
0
from PyQt5.QtWidgets import QGraphicsLineItem, QGraphicsSimpleTextItem

from cadnano import getBatch
from cadnano.controllers.stranditemcontroller import StrandItemController
from cadnano.gui.palette import getColorObj, getPenObj, getBrushObj, getNoPen
from cadnano.views.pathview import pathstyles as styles
from .decorators.insertionitem import InsertionItem
from .endpointitem import EndpointItem
from .xoveritem import XoverItem

# import logging
# logger = logging.getLogger(__name__)

_BASE_WIDTH = styles.PATH_BASE_WIDTH
_DEFAULT_RECT = QRectF(0, 0, _BASE_WIDTH, _BASE_WIDTH)
_NO_PEN = getNoPen()
SELECT_COLOR = "#ff3333"


class StrandItem(QGraphicsLineItem):
    FILTER_NAME = "strand"

    __slots__ = ('_model_strand', '_virtual_helix_item', '_viewroot',
                 '_getActiveTool', '_controller', 'is_forward',
                 '_strand_filter', '_insertion_items', '_low_cap', '_high_cap',
                 '_dual_cap', '_seq_label', '_click_area', 'xover_3p_end')

    def __init__(self, model_strand, virtual_helix_item, viewroot):
        """The parent should be a VirtualHelixItem."""
        super(StrandItem, self).__init__(virtual_helix_item)
        self._model_strand = model_strand
Beispiel #42
0
 def __init__(self, diameter: float, parent: GridPoint):
     nd = 2*self._RADIUS
     offset = -0.5*nd + diameter/2
     super(ClickArea, self).__init__(offset, offset, nd, nd, parent=parent)
     self.parent_obj = parent
     self.setPen(getNoPen())