/* Searches for the "SELECTED" feature and removes it if it exists */ void removeSelectedFeature() { boolean found = true; ArrayList<FeatureSlot> slots = cgview.getFeatureSlots(); for (int i = 0; i < slots.size(); i++) { FeatureSlot fs = slots.get(i); ArrayList<Feature> features = fs.getFeatures(); for (int j = 0; j < features.size(); j++) { Feature f = features.get(j); if (f.getLabel().equals("SELECTED")) { found = true; features.remove(j); break; } } if (found) break; } repaint(); }
private void prepareToDraw() { if (forwardSlot0 != null) { forwardSlot0.setCgview(p); forwardSlot0.setFeatureThickness(featureThickness); } if (forwardSlot1 != null) { forwardSlot1.setCgview(p); forwardSlot1.setFeatureThickness(featureThickness); } if (forwardSlot2 != null) { forwardSlot2.setCgview(p); forwardSlot2.setFeatureThickness(featureThickness); } if (forwardSlot3 != null) { forwardSlot3.setCgview(p); forwardSlot3.setFeatureThickness(featureThickness); } if (forwardSlot4 != null) { forwardSlot4.setCgview(p); forwardSlot4.setFeatureThickness(featureThickness); } if (forwardSlot5 != null) { forwardSlot5.setCgview(p); forwardSlot5.setFeatureThickness(featureThickness); } if (forwardSlot6 != null) { forwardSlot6.setCgview(p); forwardSlot6.setFeatureThickness(featureThickness); } if (forwardSlot7 != null) { forwardSlot7.setCgview(p); forwardSlot7.setFeatureThickness(featureThickness); } if (reverseSlot0 != null) { reverseSlot0.setCgview(p); reverseSlot0.setFeatureThickness(featureThickness); } if (reverseSlot1 != null) { reverseSlot1.setCgview(p); reverseSlot1.setFeatureThickness(featureThickness); } if (reverseSlot2 != null) { reverseSlot2.setCgview(p); reverseSlot2.setFeatureThickness(featureThickness); } if (reverseSlot3 != null) { reverseSlot3.setCgview(p); reverseSlot3.setFeatureThickness(featureThickness); } if (reverseSlot4 != null) { reverseSlot4.setCgview(p); reverseSlot4.setFeatureThickness(featureThickness); } if (reverseSlot5 != null) { reverseSlot5.setCgview(p); reverseSlot5.setFeatureThickness(featureThickness); } if (reverseSlot6 != null) { reverseSlot6.setCgview(p); reverseSlot6.setFeatureThickness(featureThickness); } if (reverseSlot7 != null) { reverseSlot7.setCgview(p); reverseSlot7.setFeatureThickness(featureThickness); } if (restrictionSlot != null) { restrictionSlot.setCgview(p); restrictionSlot.setFeatureThickness(featureThickness); } // send settings to p if (showTitle) { p.setTitle(title); } p.setWidth(imageWidth); p.setHeight(imageHeight); p.setLabelsToKeep(MAXLABELS); p.setDrawTickMarks(drawTickMarks); p.setTitleFont(titleFont); p.setLabelFont(labelFont); p.setFeatureThickness(featureThickness); p.setBackboneThickness(backboneThickness); p.setFeatureSlotSpacing(featureSpacing); p.setLegendFont(legendFont); p.setTickLength(tickLength); p.setLabelLineLength(labelLineLength); p.setLabelPlacementQuality(labelPlacementQuality); p.setUseColoredLabelBackgrounds(useColoredLabelBackground); p.setShowBorder(showBorder); p.setShowShading(showShading); p.setShadingProportion(shadingProportion); p.setUseInnerLabels(useInnerLabels); p.setMoveInnerLabelsToOuter(moveInnerLabelsToOuter); p.setWarningFont(rulerFont); p.setRulerFont(rulerFont); // if not drawing labels, don't show message. if (!(showLabels)) { p.setShowWarning(false); } // set backboneRadius based on smallest image dimension int smallestDimension = Math.min(imageWidth, imageHeight); if (smallestDimension <= 750) { p.setBackboneRadius(0.50d * (double) smallestDimension / 2.0d); } else { p.setBackboneRadius(0.50d * 750.0d / 2.0d); } // check coloredLabels if (!(useColoredLabels)) { if (colorScheme == REGULAR) { p.setGlobalLabelColor((Color) MAP_ITEM_COLORS.get("titleFont")); } else if (colorScheme == INVERSE) { p.setGlobalLabelColor((Color) MAP_ITEM_COLORS_INVERSE.get("titleFont")); } } // set map item colors if (colorScheme == REGULAR) { p.setLongTickColor((Color) MAP_ITEM_COLORS.get("tick")); p.setShortTickColor((Color) MAP_ITEM_COLORS.get("partialTick")); p.setZeroTickColor((Color) MAP_ITEM_COLORS.get("zeroLine")); p.setRulerFontColor((Color) MAP_ITEM_COLORS.get("rulerFont")); p.setBackboneColor((Color) MAP_ITEM_COLORS.get("backbone")); p.setTitleFontColor((Color) MAP_ITEM_COLORS.get("titleFont")); p.setWarningFontColor((Color) MAP_ITEM_COLORS.get("titleFont")); p.setBackgroundColor((Color) MAP_ITEM_COLORS.get("background")); } else if (colorScheme == INVERSE) { p.setLongTickColor((Color) MAP_ITEM_COLORS_INVERSE.get("tick")); p.setShortTickColor((Color) MAP_ITEM_COLORS_INVERSE.get("partialTick")); p.setZeroTickColor((Color) MAP_ITEM_COLORS_INVERSE.get("zeroLine")); p.setRulerFontColor((Color) MAP_ITEM_COLORS_INVERSE.get("rulerFont")); p.setBackboneColor((Color) MAP_ITEM_COLORS_INVERSE.get("backbone")); p.setTitleFontColor((Color) MAP_ITEM_COLORS_INVERSE.get("titleFont")); p.setWarningFontColor((Color) MAP_ITEM_COLORS_INVERSE.get("titleFont")); p.setBackgroundColor((Color) MAP_ITEM_COLORS_INVERSE.get("background")); } // build legend if ((showLegend) && (DRAW_LEGEND_ITEMS.size() > 0)) { // create legend legend = new Legend(p); legend.setAllowLabelClash(allowLabelClashLegend); legend.setBackgroundOpacity(0.5f); legend.setFont(legendFont); legend.setPosition(legendPosition); if (colorScheme == REGULAR) { legend.setBackgroundColor((Color) MAP_ITEM_COLORS.get("background")); legend.setFontColor((Color) MAP_ITEM_COLORS.get("titleFont")); } else if (colorScheme == INVERSE) { legend.setBackgroundColor((Color) MAP_ITEM_COLORS_INVERSE.get("background")); legend.setFontColor((Color) MAP_ITEM_COLORS_INVERSE.get("titleFont")); } LegendItem legendItem; Enumeration legendEntries = DRAW_LEGEND_ITEMS.keys(); ArrayList list = new ArrayList(); while (legendEntries.hasMoreElements()) { list.add(legendEntries.nextElement()); } Collections.sort(list); Iterator i = list.iterator(); while (i.hasNext()) { String key = (String) i.next(); legendItem = new LegendItem(legend); legendItem.setDrawSwatch(SWATCH_SHOW); legendItem.setLabel((String) LEGEND_ITEM_NAMES.get(key)); if (colorScheme == REGULAR) { legendItem.setSwatchColor((Color) FEATURE_COLORS.get(key)); } else if (colorScheme == INVERSE) { legendItem.setSwatchColor((Color) FEATURE_COLORS_INVERSE.get(key)); } } } // set message if (showMessage) { legend = new Legend(p); legend.setAllowLabelClash(false); legend.setBackgroundOpacity(0.5f); legend.setFont(messageFont); legend.setPosition(LEGEND_LOWER_RIGHT); LegendItem legendItem; if (colorScheme == REGULAR) { legend.setBackgroundColor((Color) MAP_ITEM_COLORS.get("background")); legend.setFontColor((Color) MAP_ITEM_COLORS.get("titleFont")); legendItem = new LegendItem(legend); legendItem.setLabel(message); legendItem.setDrawSwatch(SWATCH_NO_SHOW); } else if (colorScheme == INVERSE) { legend.setBackgroundColor((Color) MAP_ITEM_COLORS_INVERSE.get("background")); legend.setFontColor((Color) MAP_ITEM_COLORS_INVERSE.get("titleFont")); legendItem = new LegendItem(legend); legendItem.setLabel(message); legendItem.setDrawSwatch(SWATCH_NO_SHOW); } } }
/** * Add a feature to this map. Note that the start of the feature should be a smaller number than * the stop of the feature, regardless of the strand. The only case where start is larger than the * stop is when the feature runs across the start/stop boundary, for example 6899-10 on a 7000bp * plasmid. * * @param type one of the following: origin_of_replication, promoter, terminator, * selectable_marker, regulatory_sequence, tag, other_gene, reporter_gene, * unique_restriction_site, restriction_site. * @param name the name of the feature, such as EcoRI. * @param start the start position of the feature. Must be between 1 and the length of the * plasmid. * @param stop the end position of the feature. Must be between 1 and the length of the plasmid. * @param strand the strand of the feature. Can be Plasmid.FORWARD, Plasmid.REVERSE, or * Plasmid.NO_DIRECTION. */ public void addFeature(String type, String name, int start, int stop, int strand) { // add the feature to the plasmid. int decoration; int label; Color color; // String slot; if (start > size) { start = size; } if (start < 1) { start = 1; } if (stop > size) { stop = size; } if (stop < 1) { stop = 1; } try { color = getFeatureColor(type); decoration = getFeatureDecoration(type, strand); label = getLabelType(); addItemToLegend(type, strand); } catch (NullPointerException e) { color = new Color(0, 0, 128); // navy if (colorScheme == REGULAR) { color = new Color(0, 0, 128); // navy } else if (colorScheme == INVERSE) { color = new Color(0, 128, 128); // teal } decoration = DECORATION_STANDARD; label = LABEL; } // create a feature and a feature range // then figure out which feature slot to put the feature in. Feature feature = new Feature(showShading); FeatureRange featureRange = new FeatureRange(feature, start, stop); featureRange.setDecoration(decoration); featureRange.setColor(color); featureRange.setOpacity(opacity); featureRange.setShowLabel(label); if ((showPositions) && ((type.equalsIgnoreCase("restriction_site")) || (type.equalsIgnoreCase("unique_restriction_site")))) { featureRange.setLabel(name + " " + start); } else { if (addCategoryInfo) { try { featureRange.setLabel(name + (String) FEATURE_CATEGORIES.get(type)); } catch (NullPointerException e) { featureRange.setLabel(name); } } else { featureRange.setLabel(name); } } if ((type.equalsIgnoreCase("restriction_site")) || (type.equalsIgnoreCase("unique_restriction_site"))) { if (restrictionSlot == null) { restrictionSlot = new FeatureSlot(DIRECT_STRAND, showShading); restrictionSlot.setFeatureThickness(1f); } feature.setFeatureSlot(restrictionSlot); } else if ((strand == NO_DIRECTION) || (strand == FORWARD)) { if (forwardSlot0 == null) { forwardSlot0 = new FeatureSlot(DIRECT_STRAND, showShading); feature.setFeatureSlot(forwardSlot0); } else if (forwardSlot0.isRoom(feature)) { feature.setFeatureSlot(forwardSlot0); } else if (forwardSlot1 == null) { forwardSlot1 = new FeatureSlot(DIRECT_STRAND, showShading); feature.setFeatureSlot(forwardSlot1); } else if (forwardSlot1.isRoom(feature)) { feature.setFeatureSlot(forwardSlot1); } else if (forwardSlot2 == null) { forwardSlot2 = new FeatureSlot(DIRECT_STRAND, showShading); feature.setFeatureSlot(forwardSlot2); } else if (forwardSlot2.isRoom(feature)) { feature.setFeatureSlot(forwardSlot2); } else if (forwardSlot3 == null) { forwardSlot3 = new FeatureSlot(DIRECT_STRAND, showShading); feature.setFeatureSlot(forwardSlot3); } else if (forwardSlot3.isRoom(feature)) { feature.setFeatureSlot(forwardSlot3); } else if (forwardSlot4 == null) { forwardSlot4 = new FeatureSlot(DIRECT_STRAND, showShading); feature.setFeatureSlot(forwardSlot4); } else if (forwardSlot4.isRoom(feature)) { feature.setFeatureSlot(forwardSlot4); } else if (forwardSlot5 == null) { forwardSlot5 = new FeatureSlot(DIRECT_STRAND, showShading); feature.setFeatureSlot(forwardSlot5); } else if (forwardSlot5.isRoom(feature)) { feature.setFeatureSlot(forwardSlot5); } else if (forwardSlot6 == null) { forwardSlot6 = new FeatureSlot(DIRECT_STRAND, showShading); feature.setFeatureSlot(forwardSlot6); } else if (forwardSlot6.isRoom(feature)) { feature.setFeatureSlot(forwardSlot6); } else if (forwardSlot7 == null) { forwardSlot7 = new FeatureSlot(DIRECT_STRAND, showShading); feature.setFeatureSlot(forwardSlot7); } else { feature.setFeatureSlot(forwardSlot7); } } else if (strand == REVERSE) { if (reverseSlot0 == null) { reverseSlot0 = new FeatureSlot(REVERSE_STRAND, showShading); feature.setFeatureSlot(reverseSlot0); } else if (reverseSlot0.isRoom(feature)) { feature.setFeatureSlot(reverseSlot0); } else if (reverseSlot1 == null) { reverseSlot1 = new FeatureSlot(REVERSE_STRAND, showShading); feature.setFeatureSlot(reverseSlot1); } else if (reverseSlot1.isRoom(feature)) { feature.setFeatureSlot(reverseSlot1); } else if (reverseSlot2 == null) { reverseSlot2 = new FeatureSlot(REVERSE_STRAND, showShading); feature.setFeatureSlot(reverseSlot2); } else if (reverseSlot2.isRoom(feature)) { feature.setFeatureSlot(reverseSlot2); } else if (reverseSlot3 == null) { reverseSlot3 = new FeatureSlot(REVERSE_STRAND, showShading); feature.setFeatureSlot(reverseSlot3); } else if (reverseSlot3.isRoom(feature)) { feature.setFeatureSlot(reverseSlot3); } else if (reverseSlot4 == null) { reverseSlot4 = new FeatureSlot(REVERSE_STRAND, showShading); feature.setFeatureSlot(reverseSlot4); } else if (reverseSlot4.isRoom(feature)) { feature.setFeatureSlot(reverseSlot4); } else if (reverseSlot5 == null) { reverseSlot5 = new FeatureSlot(REVERSE_STRAND, showShading); feature.setFeatureSlot(reverseSlot5); } else if (reverseSlot5.isRoom(feature)) { feature.setFeatureSlot(reverseSlot5); } else if (reverseSlot6 == null) { reverseSlot6 = new FeatureSlot(REVERSE_STRAND, showShading); feature.setFeatureSlot(reverseSlot6); } else if (reverseSlot6.isRoom(feature)) { feature.setFeatureSlot(reverseSlot6); } else if (reverseSlot7 == null) { reverseSlot7 = new FeatureSlot(REVERSE_STRAND, showShading); feature.setFeatureSlot(reverseSlot7); } else { feature.setFeatureSlot(reverseSlot7); } } }
@Override public void mousePressed(MouseEvent me) { /* Check to see if we clicked a label */ int x = me.getX(), y = me.getY(); Feature selectedFeature = null; ArrayList<OuterLabel> outerLabels = cgview.getOuterLabels(); OuterLabel ol = null; for (int o = 0; o < outerLabels.size(); o++) { ol = outerLabels.get(o); Rectangle2D rect = ol.getBounds(); double rectX = rect.getX(), rectY = rect.getY(), rectW = rect.getWidth(), rectH = rect.getHeight(); if (x > rectX && x < (rectX + rectW) && y > rectY && y < (rectY + rectH)) { ArrayList<FeatureSlot> featureSlots = cgview.getFeatureSlots(); for (int i = 0; i < featureSlots.size(); i++) { FeatureSlot fs = featureSlots.get(i); ArrayList<Feature> features = fs.getFeatures(); for (int j = 0; j < features.size(); j++) { Feature f = features.get(j); String featureLabel = f.getLabel(); if (featureLabel.equals(ol.getLabelText())) { selectedFeature = f; break; } if (selectedFeature != null) break; } if (selectedFeature != null) break; } } if (selectedFeature != null) break; } /* If we have selected a feature, either make it appear selected or * deselected. */ if (selectedFeature != null) { // paint the feature on the cgview Annotation a = findAnnotationOfFeature(selectedFeature); Color toUse = (a.getScore() == 1.0) ? ColorConstants.NEUTRAL_COLOR_PERFECT_MATCH : ColorConstants.NEUTRAL_COLOR_IMPERFECT_MATCH; Color fColor = selectedFeature.getColor(); Color blue = (a.getScore() == 1.0) ? ColorConstants.NEUTRAL_COLOR_PERFECT_MATCH : ColorConstants.NEUTRAL_COLOR_IMPERFECT_MATCH; Color orange = ColorConstants.ROW_SELECTED_COLOR; boolean isBlue = fColor.getRed() == blue.getRed() && fColor.getGreen() == blue.getGreen() && fColor.getBlue() == blue.getBlue(); boolean isOrange = fColor.getRed() == orange.getRed() && fColor.getGreen() == orange.getGreen() && fColor.getBlue() == orange.getBlue(); Color turq = ColorConstants.CUSTOM_ANNOTATION_COLOR; boolean isTurquoise = fColor.getRed() == turq.getRed() && fColor.getGreen() == turq.getGreen() && fColor.getBlue() == turq.getBlue(); Color ye = ColorConstants.VIEW_FEATURE_FROM_PRIVATE_REGISTRY_COLOR; boolean isYellow = fColor.getRed() == ye.getRed() && fColor.getGreen() == ye.getGreen() && fColor.getBlue() == ye.getBlue(); if (isBlue || isOrange || isTurquoise || isYellow) { toUse = ColorConstants.SELECTED_COLOR; selectedFeatures.add(selectedFeature.getLabel()); } else if (((MyTableModel) home.getTable().getModel()) .isFeatureSelected(selectedFeature.getLabel())) { toUse = ColorConstants.ROW_SELECTED_COLOR; selectedFeatures.remove(selectedFeature.getLabel()); } else { toUse = (a.getScore() == 1.0) ? ColorConstants.NEUTRAL_COLOR_PERFECT_MATCH : ColorConstants.NEUTRAL_COLOR_IMPERFECT_MATCH; selectedFeatures.remove(selectedFeature.getLabel()); } selectedFeature.setColor(toUse); ArrayList<FeatureRange> f = selectedFeature.getRanges(); for (int n = 0; n < f.size(); n++) { f.get(n).setColor(toUse); } // ol.setColor(Color.red); repaint(); // highlight text in the textpane FeatureRange fr = (FeatureRange) selectedFeature.getRanges().get(0); if (home != null) home.highlightDNA(fr); } else { System.out.println("selected feature is null"); } }