示例#1
0
    def __init__(self,  model_strand: StrandT,
                        virtual_helix_item: PathVirtualHelixItemT):
        """The parent should be a VirtualHelixItem.

        Args:
            model_strand:
            virtual_helix_item:
        """
        super(StrandItem, self).__init__(virtual_helix_item)
        self._model_strand = model_strand
        self._virtual_helix_item = virtual_helix_item
        self._viewroot: PathRootItemT = virtual_helix_item._viewroot
        self._getActiveTool = self._viewroot.manager.activeToolGetter

        self._controller = StrandItemController(self, model_strand)
        is_forward = model_strand.strandSet().isForward()

        self._strand_filter = model_strand.strandFilter()

        self._insertion_items = {}
        # caps
        self._low_cap = EndpointItem(self, 'low', is_forward)
        self._high_cap = EndpointItem(self, 'high', is_forward)
        self._dual_cap = EndpointItem(self, 'dual', is_forward)

        # orientation
        self.is_forward = is_forward
        self._seq_label = QGraphicsSimpleTextItem(self)

        self.refreshInsertionItems(model_strand)
        if not getBatch():
            self._updateSequenceText()

        # create a larger click area rect to capture mouse events
        self._click_area = c_a = QGraphicsRectItem(_DEFAULT_RECT, self)
        c_a.mousePressEvent = self.mousePressEvent
        c_a.setPen(_NO_PEN)
        self.setAcceptHoverEvents(True)
        c_a.setAcceptHoverEvents(True)
        c_a.hoverMoveEvent = self.hoverMoveEvent

        self.setZValue(styles.ZSTRANDITEM)

        # xover comming from the 3p end
        self.xover_3p_end = XoverItem(self, virtual_helix_item)
        if not getBatch():
            # initial refresh
            self._updateColor(model_strand)
            self._updateAppearance(model_strand)

        self.setZValue(styles.ZSTRANDITEM)
        self.setFlag(QGraphicsItem.ItemIsSelectable)
示例#2
0
    def __init__(self, model_strand, virtual_helix_item, viewroot):
        """The parent should be a VirtualHelixItem.

        Args:
            model_strand (:obj:`cadnano.strand.Strand`):
            virtual_helix_item (:obj:`cadnano.views.pathview.virtualhelixitem.VirtualHelixItem`):
            viewroot (:obj:`cadnano.views.pathview.pathrootitem.PathRootItem`):
        """
        super(StrandItem, self).__init__(virtual_helix_item)
        self._model_strand = model_strand
        self._virtual_helix_item = virtual_helix_item
        self._viewroot = viewroot
        self._getActiveTool = viewroot.manager.activeToolGetter

        self._controller = StrandItemController(model_strand, self)
        is_forward = model_strand.strandSet().isForward()

        self._strand_filter = model_strand.strandFilter()

        self._insertion_items = {}
        # caps
        self._low_cap = EndpointItem(self, 'low', is_forward)
        self._high_cap = EndpointItem(self, 'high', is_forward)
        self._dual_cap = EndpointItem(self, 'dual', is_forward)

        # orientation
        self.is_forward = is_forward
        self._seq_label = QGraphicsSimpleTextItem(self)

        self.refreshInsertionItems(model_strand)
        if not getBatch():
            self._updateSequenceText()

        # create a larger click area rect to capture mouse events
        self._click_area = c_a = QGraphicsRectItem(_DEFAULT_RECT, self)
        c_a.mousePressEvent = self.mousePressEvent
        c_a.setPen(_NO_PEN)
        self.setAcceptHoverEvents(True)
        c_a.setAcceptHoverEvents(True)
        c_a.hoverMoveEvent = self.hoverMoveEvent

        self.setZValue(styles.ZSTRANDITEM)

        # xover comming from the 3p end
        self.xover_3p_end = XoverItem(self, virtual_helix_item)
        if not getBatch():
            # initial refresh
            self._updateColor(model_strand)
            self._updateAppearance(model_strand)

        self.setZValue(styles.ZSTRANDITEM)
        self.setFlag(QGraphicsItem.ItemIsSelectable)
示例#3
0
    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
        self._virtual_helix_item = virtual_helix_item
        self._viewroot = viewroot
        self._getActiveTool = virtual_helix_item._getActiveTool

        self._controller = StrandItemController(self, model_strand)
        is_drawn_5to3 = model_strand.strandSet().isDrawn5to3()

        self._strand_filter = model_strand.strandFilter()

        self._insertion_items = {}
        # caps
        self._low_cap = EndpointItem(self, 'low', is_drawn_5to3)
        self._high_cap = EndpointItem(self, 'high', is_drawn_5to3)
        # self._high_cap = None
        self._dual_cap = EndpointItem(self, 'dual', is_drawn_5to3)

        # orientation
        self._is_drawn_5to3 = is_drawn_5to3
        # self._isOnTop = virtual_helix_item.isStrandOnTop(model_strand)
        # label
        self._seq_label = QGraphicsSimpleTextItem(self)
        
        self.refreshInsertionItems(model_strand)
        if not getBatch():
            self._updateSequenceText()

        # create a larger click area rect to capture mouse events
        self._click_area = c_a = QGraphicsRectItem(_DEFAULT_RECT, self)
        c_a.mousePressEvent = self.mousePressEvent
        c_a.setPen(_NO_PEN)
        self.setAcceptHoverEvents(True)
        c_a.setAcceptHoverEvents(True)
        c_a.hoverMoveEvent = self.hoverMoveEvent

        self.setZValue(styles.ZSTRANDITEM)

        # xover comming from the 3p end
        self._xover3pEnd = XoverItem(self, virtual_helix_item)
        if not getBatch():
            # initial refresh
            self._updateColor(model_strand)
            self._updateAppearance(model_strand)

        self.setZValue(styles.ZSTRANDITEM)
        self.setFlag(QGraphicsItem.ItemIsSelectable)
示例#4
0
    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
        self._virtual_helix_item = virtual_helix_item
        self._viewroot = viewroot
        self._getActiveTool = virtual_helix_item._getActiveTool

        self._controller = StrandItemController(self, model_strand)
        is_drawn_5to3 = model_strand.strandSet().isDrawn5to3()

        self._strand_filter = model_strand.strandFilter()

        self._insertion_items = {}
        # caps
        self._low_cap = EndpointItem(self, 'low', is_drawn_5to3)
        self._high_cap = EndpointItem(self, 'high', is_drawn_5to3)
        # self._high_cap = None
        self._dual_cap = EndpointItem(self, 'dual', is_drawn_5to3)

        # orientation
        self._is_drawn_5to3 = is_drawn_5to3
        # self._isOnTop = virtual_helix_item.isStrandOnTop(model_strand)
        # label
        self._seq_label = QGraphicsSimpleTextItem(self)

        self.refreshInsertionItems(model_strand)
        if not getBatch():
            self._updateSequenceText()

        # create a larger click area rect to capture mouse events
        self._click_area = c_a = QGraphicsRectItem(_DEFAULT_RECT, self)
        c_a.mousePressEvent = self.mousePressEvent
        c_a.setPen(_NO_PEN)
        self.setAcceptHoverEvents(True)
        c_a.setAcceptHoverEvents(True)
        c_a.hoverMoveEvent = self.hoverMoveEvent

        self.setZValue(styles.ZSTRANDITEM)

        # xover comming from the 3p end
        self._xover3pEnd = XoverItem(self, virtual_helix_item)
        if not getBatch():
            # initial refresh
            self._updateColor(model_strand)
            self._updateAppearance(model_strand)

        self.setZValue(styles.ZSTRANDITEM)
        self.setFlag(QGraphicsItem.ItemIsSelectable)
    def partVirtualHelixAddedSlot(self, model_part, id_num, virtual_helix,
                                  neighbors):
        """
        When a virtual helix is added to the model, this slot handles
        the instantiation of a virtualhelix item.

        Args:
            model_part (Part): The model part
            id_num (int): VirtualHelix ID number. See `NucleicAcidPart` for description and related methods.
        """
        # print("NucleicAcidPartItem.partVirtualHelixAddedSlot")
        vhi = PathVirtualHelixItem(virtual_helix, self, self._viewroot)
        self._virtual_helix_item_hash[id_num] = vhi
        vhi_list = self._virtual_helix_item_list
        # reposition when first VH is added
        if len(vhi_list) == 0:
            view = self.window().path_graphics_view
            p = view.scene_root_item.childrenBoundingRect().bottomLeft()
            _p = _BOUNDING_RECT_PADDING
            self.setPos(p.x() + _p * 6 + styles.VIRTUALHELIXHANDLEITEM_RADIUS,
                        p.y() + _p * 3)
            # self.setPos(p.x() + _VH_XOFFSET, p.y() + _p*3)

        vhi_list.append(vhi)
        ztf = not getBatch()
        self._setVirtualHelixItemList(vhi_list, zoom_to_fit=ztf)
示例#6
0
 def removeVirtualHelixItem(self, virtual_helix_item):
     vh = virtual_helix_item.virtualHelix()
     self._virtual_helix_item_list.remove(virtual_helix_item)
     del self._virtual_helix_hash[vh.coord()]
     ztf = not getBatch()
     self._setVirtualHelixItemList(self._virtual_helix_item_list, 
         zoom_to_fit=ztf)
     self._updateBoundingRect()
 def partVirtualHelixRemovedSlot(self, sender: NucleicAcidPartT, id_num: int):
     """Step 2 of removing a VHI
     """
     ztf = not getBatch()
     self._setVirtualHelixItemList(self._virtual_helix_item_list, zoom_to_fit=ztf)
     if len(self._virtual_helix_item_list) == 0:
         self.hide()
     self.reconfigureRect((), ())
示例#8
0
 def removeVirtualHelixItem(self, virtual_helix_item):
     vh = virtual_helix_item.virtualHelix()
     self._virtual_helix_item_list.remove(virtual_helix_item)
     del self._virtual_helix_hash[vh.coord()]
     ztf = not getBatch()
     self._setVirtualHelixItemList(self._virtual_helix_item_list,
                                   zoom_to_fit=ztf)
     self._updateBoundingRect()
示例#9
0
 def partVirtualHelicesReorderedSlot(self, sender, ordered_coord_list):
     """docstring for partVirtualHelicesReorderedSlot"""
     new_list = self._virtual_helix_item_list
     decorated = [(ordered_coord_list.index(vhi.coord()), vhi)\
                     for vhi in self._virtual_helix_item_list]
     decorated.sort()
     new_list = [vhi for idx, vhi in decorated]
     ztf = not getBatch()
     self._setVirtualHelixItemList(new_list, zoom_to_fit=ztf)
示例#10
0
 def partVirtualHelicesReorderedSlot(self, sender, ordered_coord_list):
     """docstring for partVirtualHelicesReorderedSlot"""
     new_list = self._virtual_helix_item_list
     decorated = [(ordered_coord_list.index(vhi.coord()), vhi)\
                     for vhi in self._virtual_helix_item_list]
     decorated.sort()
     new_list = [vhi for idx, vhi in decorated]
     ztf = not getBatch()
     self._setVirtualHelixItemList(new_list, zoom_to_fit=ztf)
示例#11
0
 def partVirtualHelixAddedSlot(self, sender, model_virtual_helix):
     """
     When a virtual helix is added to the model, this slot handles
     the instantiation of a virtualhelix item.
     """
     # print("PartItem.partVirtualHelixAddedSlot")
     vh = model_virtual_helix
     vhi = VirtualHelixItem(self, model_virtual_helix, self._viewroot)
     self._virtual_helix_hash[vh.coord()] = vhi
     self._virtual_helix_item_list.append(vhi)
     ztf = not getBatch()
     self._setVirtualHelixItemList(self._virtual_helix_item_list, zoom_to_fit=ztf)
     self._updateBoundingRect()
示例#12
0
 def partVirtualHelixAddedSlot(self, sender, model_virtual_helix):
     """
     When a virtual helix is added to the model, this slot handles
     the instantiation of a virtualhelix item.
     """
     # print("PartItem.partVirtualHelixAddedSlot")
     vh = model_virtual_helix
     vhi = VirtualHelixItem(self, model_virtual_helix, self._viewroot)
     self._virtual_helix_hash[vh.coord()] = vhi
     self._virtual_helix_item_list.append(vhi)
     ztf = not getBatch()
     self._setVirtualHelixItemList(self._virtual_helix_item_list, zoom_to_fit=ztf)
     self._updateBoundingRect()
    def partVirtualHelixAddedSlot(self, model_part, id_num, virtual_helix,
                                  neighbors):
        """
        When a virtual helix is added to the model, this slot handles
        the instantiation of a virtualhelix item.

        Args:
            model_part (Part): The model part
            id_num (int): VirtualHelix ID number. See `NucleicAcidPart` for description and related methods.
        """
        # print("NucleicAcidPartItem.partVirtualHelixAddedSlot")
        vhi = PathVirtualHelixItem(virtual_helix, self, self._viewroot)
        self._virtual_helix_item_hash[id_num] = vhi
        vhi_list = self._virtual_helix_item_list
        vhi_list.append(vhi)
        ztf = not getBatch()
        self._setVirtualHelixItemList(vhi_list, zoom_to_fit=ztf)
        if not self.isVisible():
            self.show()
    def partVirtualHelixAddedSlot(self, sender: NucleicAcidPartT, id_num: int,
                                  virtual_helix: VirtualHelixT,
                                  neighbors: List[int]):
        """When a virtual helix is added to the model, this slot handles
        the instantiation of a virtualhelix item.

        Args:
            sender: Model object that emitted the signal.
            id_num: VirtualHelix ID number. See ``NucleicAcidPart`` for
                description and related methods.
            virtual_helix:
            neighbors: Description
        """
        # print("NucleicAcidPartItem.partVirtualHelixAddedSlot")
        if self._viewroot.are_signals_on:
            vhi = PathVirtualHelixItem(id_num, self)
            self._virtual_helix_item_hash[id_num] = vhi
            vhi_list = self._virtual_helix_item_list
            vhi_list.append(vhi)
            ztf = not getBatch()
            self._setVirtualHelixItemList(vhi_list, zoom_to_fit=ztf)
            if not self.isVisible():
                self.show()
示例#15
0
    def partVirtualHelixAddedSlot(self, sender: NucleicAcidPartT,
                                        id_num: int,
                                        virtual_helix: VirtualHelixT,
                                        neighbors: List[int]):
        """When a virtual helix is added to the model, this slot handles
        the instantiation of a virtualhelix item.

        Args:
            sender: Model object that emitted the signal.
            id_num: VirtualHelix ID number. See ``NucleicAcidPart`` for
                description and related methods.
            virtual_helix:
            neighbors: Description
        """
        # print("NucleicAcidPartItem.partVirtualHelixAddedSlot")
        if self._viewroot.are_signals_on:
            vhi = PathVirtualHelixItem(id_num, self)
            self._virtual_helix_item_hash[id_num] = vhi
            vhi_list = self._virtual_helix_item_list
            vhi_list.append(vhi)
            ztf = not getBatch()
            self._setVirtualHelixItemList(vhi_list, zoom_to_fit=ztf)
            if not self.isVisible():
                self.show()
示例#16
0
 def partVirtualHelixRemovedSlot(self, sender, id_num):
     """ Step 2 of removing a VHI
     """
     ztf = not getBatch()
     self._setVirtualHelixItemList(self._virtual_helix_item_list,
         zoom_to_fit=ztf)
示例#17
0
    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
        self._virtual_helix_item = virtual_helix_item
        self._viewroot = viewroot
        self._selected = model_strand.oligo()._selected
        if self._selected:
            self.strandSelectedSlot()
        else:
            self.strandRemovedFromSelectionSlot()

        self._controller = StrandItemController(self, model_strand)
        is_drawn_5to3 = model_strand.strandSet().isDrawn5to3()

        self._strand_filter = model_strand.strandFilter()

        self._insertion_items = {}
        # end point squares and arrows
        self._low_cap = EndpointItem(self, 'low', is_drawn_5to3)
        self._high_cap = EndpointItem(self, 'high', is_drawn_5to3)
        # tick mark for connection btw two adjacent domains on the same helix
        self._tick = EndpointItem(self,'tick',is_drawn_5to3)
        # self._high_cap = None
        self._dual_cap = EndpointItem(self, 'dual', is_drawn_5to3)

        # orientation
        self._is_drawn_5to3 = is_drawn_5to3
        # self._isOnTop = virtual_helix_item.isStrandOnTop(model_strand)
        # label
        self._is_on_top = self._virtual_helix_item.isStrandOnTop(self._model_strand)
        self._seq_label = QGraphicsSimpleTextItem(self)
        
        self.refreshInsertionItems(model_strand)
        if not getBatch():
            self._updateSequenceText()

        # create a larger click area rect to capture mouse events
        self._click_area = c_a = QGraphicsRectItem(_DEFAULT_RECT, self)
        c_a.mousePressEvent = self.mousePressEvent
        c_a.setPen(_NO_PEN)
        self.setAcceptHoverEvents(True)
        c_a.setAcceptHoverEvents(True)
        c_a.hoverMoveEvent = self.hoverMoveEvent

        self.setZValue(styles.ZSTRANDITEM)

        self._toehold_item_3p = None
        self._toehold_item_5p = None
        self._toehold_cap_3p = None
        self._toehold_cap_5p = None

        if self._is_drawn_5to3:
            self._toehold_cap_3p = EndpointItem(self,'low',not self._is_drawn_5to3)
            self._toehold_cap_5p = EndpointItem(self,'low',self._is_drawn_5to3)
            self.toeholdCapHigh = self.toeholdCap3p
            self.toeholdCapLow = self.toeholdCap5p
        else:
            self._toehold_cap_3p =  EndpointItem(self,'high',not self._is_drawn_5to3)
            self._toehold_cap_5p =  EndpointItem(self,'high',self._is_drawn_5to3)
            self.toeholdCapHigh = self.toeholdCap5p
            self.toeholdCapLow = self.toeholdCap3p

        # xover comming from the 3p end
        self._xover3pEnd = XoverItem(self, virtual_helix_item)
        if not getBatch():
            # initial refresh
            self._updateColor(model_strand)
            self._updateAppearance(model_strand)

        self.setZValue(styles.ZSTRANDITEM)
        self.setFlag(QGraphicsItem.ItemIsSelectable)
        self.shown_attributes=[]
        self.refresh_toehold()