void updateCgviewSize() {
    cgview.setWidth(getWidth());
    cgview.setHeight(getHeight());
    cgview.setBackboneRadius(Math.min(getWidth(), getHeight()) * 0.35);

    System.out.println("repainting plasmidpanel line 161 " + (count++));
    repaint();
  }
Example #2
0
  /**
   * Writes this map to a JPG file.
   *
   * @param filename the path and name of the file to create.
   */
  public void writeToJPGFile(String filename) throws IOException {

    this.prepareToDraw();

    BufferedImage buffImage =
        new BufferedImage(p.getWidth(), p.getHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics2D = buffImage.createGraphics();
    try {
      p.draw(graphics2D);
      System.out.println("Writing picture to " + filename);
      ImageIO.write(buffImage, "JPG", new File(filename));
    } finally {
      graphics2D.dispose();
    }
  }
  /**
   * Overridden paint component method. Update the size, then repaint the plasmid
   *
   * @param g graphics object
   */
  public void paintComponent(Graphics g) {

    // super.paintComponent(g);
    System.out.println("paint component called");
    // if((previousWidth == -1 && previousHeight == -1) || (homePanel.getWidth() != previousWidth)
    // || (homePanel.getHeight() != previousHeight)) {
    super.paintComponent(g);
    System.out.println("calling paint component because " + previousWidth + " " + previousHeight);
    setSize(homePanel.getWidth(), homePanel.getHeight());
    cgview.setWidth(getWidth());
    cgview.setHeight(getHeight());
    cgview.setBackboneRadius(Math.min(getWidth(), getHeight()) * 0.28);
    cgview.setTitleFont(new Font("Georgia", Font.PLAIN, 16));
    // updateCgviewSize();
    cgview.draw((Graphics2D) g);
    previousWidth = homePanel.getWidth();
    previousHeight = homePanel.getHeight();
    // }
  }
  /* Set up the CGView to display the plasmid */
  private void initCgview() {
    int length = plasmid.getSequence().length();
    cgview = new Cgview(length);

    // some optional settings
    cgview.setWidth(getWidth());
    cgview.setHeight(getHeight());
    cgview.setTitle(plasmid.getName());
    cgview.setLabelPlacementQuality(100);
    cgview.setShowWarning(true);
    cgview.setLabelLineLength(8.0d);
    cgview.setLabelLineThickness(0.5f);
    cgview.setLabelShuffle(false);

    // create a FeatureSlot to hold sequence features
    FeatureSlot featureSlot = new FeatureSlot(cgview, CgviewConstants.DIRECT_STRAND);

    // create random sequence features
    List<org.autogene.core.bio.entities.Annotation> annotations = plasmid.getAnnotations();
    HashMap<String, Integer> counts = new HashMap<String, Integer>();

    // create the feature annotations to view in the plasmid
    for (int i = 0; i < annotations.size(); i++) {

      // update the label names such as Aapl (1) and Aapl (2) in the case that
      // there is more than one of the same annotation in two different locations
      Annotation a = annotations.get(i);
      String name = a.getFeature().getName();
      int cur = 1;
      if (counts.containsKey(name)) {
        cur = counts.get(name);
        cur++;
        counts.put(name, cur);

        //   Log.addText("plasmidpanel: " + name + "," + cur);
      } else {
        counts.put(name, cur);
        //   Log.addText("plasmidpanel: " + name + "," + cur);

      }

      // simply create the feature
      System.out.println("ABCD creating feature with " + name + " " + cur);
      Feature feature = new Feature(featureSlot, (name + " (" + cur + ")"));
      feature.setColor(
          a.getScore() == 1.0
              ? ColorConstants.NEUTRAL_COLOR_PERFECT_MATCH
              : ColorConstants.NEUTRAL_COLOR_IMPERFECT_MATCH);
      FeatureRange featureRange = new FeatureRange(feature, a.getStart(), a.getEnd());
    }
  }
  /* Draws a feature called "SELECTED" when the user highlights DNA */
  void paintSelectedFeature(int start, int end) {
    // first see if a selected feature already exists
    // if it does, remove it
    removeSelectedFeature();

    // paint the new one
    Feature f = new Feature(cgview.getFeatureSlots().get(0), "SELECTED");
    f.setColor(Color.green);
    new FeatureRange(f, start, end);

    repaint();
  }
  /* 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();
  }
Example #7
0
  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);
      }
    }
  }
  @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");
    }
  }