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)
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)
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)
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((), ())
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)
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()
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)
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()