private BaseFineEditor(
      AnnotatedFeatureI editMe,
      GuiCurationState curationState,
      SeqFeatureI geneHolder,
      Set<SeqFeatureI> selectedResults) {

    super((editMe.isForwardStrand() ? "Forward" : "Reverse") + " Strand Exon Editor");
    this.curationState = curationState;
    curationState.getController().addListener(this);
    curationState.getController().addListener(new BaseEditorDataListener());
    szap = curationState.getSZAP();
    transformer = szap.getScaleView().getTransform();
    int seqStart = curationState.getCurationSet().getLow();
    int seqEnd = curationState.getCurationSet().getHigh();
    CurationSet s = curationState.getCurationSet();
    // FeatureSetI annFeatSet=((DrawableFeatureSet)view.getDrawableSet()).getFeatureSet();

    // REFACTOR BaseEditorPanel - (what allows for selection and modification of the annotations?)
    // create BaseViewPanel -> have BaseEditorPanel extend it
    // take the header outside of the editorPanel (is it really inside right now?)
    // create a new panel using BaseViewPanel

    /*
     * The viewable components of the new BaseFineEditor (should this be renamed?):
     *
     *  1) The Genomic Strand
     *  2) The Annotations (will these always be a copy of the genomic strand?)
     *         q1) Can annotations also be nucliotides? - A: Yes. Create a separate view for those.
     *         q2) Does it make sense to view both the forward and reverse strand at once?
     *         q3) How do we know what to load - A: highlight the region we want to look at?
     *         q4) Will we expect users to be able to view many annotations at once?
     *         q4) How will the user know which annotation they are looking at? - A: Display the name when hovering over?
     *  3) The Results
     *         q1) See above questions.
     *  4) Result Score information
     *  5) An overview - Right now this is at the transcript (gene model?) level
     *         q1) What should be contained in this view?
     *
     *
     */

    // I think that right now every base in the ede is a copy of the genomic, will that always be
    // the case?
    // is there ever sequence associated with an annotation.
    editorPanel =
        new BaseEditorPanel(
            curationState, this, !editMe.isForwardStrand(), seqStart, seqEnd, geneHolder);

    addResults(selectedResults);
    initGui(editMe); // cant do til after editorPanel made
    // cant do this til after initGui (editorPanel needs to know size)
    editorPanel.displayAnnot(editMe);
    attachListeners();
    showEditRegion();
    displayAnnot(getTransOrOneLevelAnn(editMe));
    translationViewer.repaint();
    setVisible(true);
    // Might just be linux, but bofe gets iconified on close
    if (getState() == Frame.ICONIFIED) setState(Frame.NORMAL);
  }
  private BaseFineEditor(
      AnnotatedFeatureI editMe, GuiCurationState curationState, SeqFeatureI geneHolder) {

    super((editMe.isForwardStrand() ? "Forward" : "Reverse") + " Strand Exon Editor");
    this.curationState = curationState;
    curationState.getController().addListener(this);
    curationState.getController().addListener(new BaseEditorDataListener());
    szap = curationState.getSZAP();
    transformer = szap.getScaleView().getTransform();
    int seqStart = curationState.getCurationSet().getLow();
    int seqEnd = curationState.getCurationSet().getHigh();

    // FeatureSetI annFeatSet=((DrawableFeatureSet)view.getDrawableSet()).getFeatureSet();
    editorPanel =
        new BaseEditorPanel(
            curationState, this, !editMe.isForwardStrand(), seqStart, seqEnd, geneHolder);

    initGui(editMe); // cant do til after editorPanel made
    // cant do this til after initGui (editorPanel needs to know size)
    editorPanel.displayAnnot(editMe);
    attachListeners();
    showEditRegion();
    displayAnnot(getTransOrOneLevelAnn(editMe));
    translationViewer.repaint();
    setVisible(true);
    // Might just be linux, but bofe gets iconified on close
    if (getState() == Frame.ICONIFIED) setState(Frame.NORMAL);
  }
  private boolean isSequencingErrorPosition(int bp, SeqFeatureI feature, SequenceType type) {
    boolean result = false;
    if (type == SequenceType.DNA) {
      result = curationState.getCurationSet().getRefSequence().isSequencingErrorPosition(bp);
    } else {
      result =
          curationState.getCurationSet().getRefSequence().isSequencingErrorPosition(bp)
              || curationState
                  .getCurationSet()
                  .getRefSequence()
                  .isSequencingErrorPosition(bp + feature.getStrand())
              || curationState
                  .getCurationSet()
                  .getRefSequence()
                  .isSequencingErrorPosition(bp + (2 * feature.getStrand()));
    }

    return result;
  }
  /** Performs the update */
  public void actionPerformed(ActionEvent e) {

    // TODO check that the basepair is within the bounds of an exon
    if (basepair < 0 || feature == null) {
      throw new IllegalArgumentException("basepair:" + basepair + " feature:" + feature);
    }

    annotationEditor.setSelections(null, null, null, null);
    annotationEditor.setTranslationStart((ExonI) feature, basepair);

    curationState.getSZAP().repaint();
    // TODO repaint all msa's

  }
 public SelectionManager getSelectionManager() {
   return curationState.getSelectionManager(); // this.selection_manager;
 }
 public Controller getController() {
   return curationState.getController();
 }
 private Controller getController() {
   return curationState.getController();
 }