import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.Annotation;
+import jalview.datamodel.HiddenColumns;
import jalview.datamodel.Sequence;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
import jalview.util.Comparison;
import jalview.util.MessageManager;
import jalview.util.Platform;
+import jalview.util.dialogrunner.RunResponse;
import java.awt.Color;
+import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.MediaTracker;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.AffineTransform;
-import java.awt.image.BufferedImage;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.Iterator;
import java.util.regex.Pattern;
import javax.swing.JCheckBoxMenuItem;
public class AnnotationLabels extends JPanel
implements MouseListener, MouseMotionListener, ActionListener
{
- // width in pixels within which height adjuster arrows are shown and active
+ /**
+ * width in pixels within which height adjuster arrows are shown and active
+ */
private static final int HEIGHT_ADJUSTER_WIDTH = 50;
+ /**
+ * height in pixels for allowing height adjuster to be active
+ */
+ private static int HEIGHT_ADJUSTER_HEIGHT = 10;
+
private static final Pattern LEFT_ANGLE_BRACKET_PATTERN = Pattern
.compile("<");
private static final String COPYCONS_SEQ = MessageManager
.getString("label.copy_consensus_sequence");
- private static Image adjusterImage;
-
- private static int adjusterImageHeight;
-
private final boolean debugRedraw = false;
private AlignmentPanel ap;
av = ap.av;
ToolTipManager.sharedInstance().registerComponent(this);
- if (adjusterImage == null)
- {
- loadAdjusterImage();
- }
-
addMouseListener(this);
addMouseMotionListener(this);
addMouseWheelListener(ap.getAnnotationPanel());
}
/**
- * Loads the gif for the panel height adjustment
- */
- protected void loadAdjusterImage()
- {
- java.net.URL url = getClass().getResource("/images/idwidth.gif");
- Image temp = null;
-
- if (url != null)
- {
- temp = Toolkit.getDefaultToolkit().createImage(url);
- }
-
- try
- {
- MediaTracker mt = new MediaTracker(this);
- mt.addImage(temp, 0);
- mt.waitForID(0);
- } catch (Exception ex)
- {
- }
-
- BufferedImage bi = new BufferedImage(temp.getHeight(this),
- temp.getWidth(this), BufferedImage.TYPE_INT_RGB);
- Graphics2D g = (Graphics2D) bi.getGraphics();
- g.rotate(Math.toRadians(90));
- g.drawImage(temp, 0, -bi.getWidth(this), this);
- adjusterImage = bi;
- adjusterImageHeight = bi.getHeight();
- }
-
- /**
* DOCUMENT ME!
*
* @param y
AlignmentAnnotation[] aa = ap.av.getAlignment()
.getAlignmentAnnotation();
- boolean fullRepaint = false;
- if (evt.getActionCommand().equals(ADDNEW))
+ String action = evt.getActionCommand();
+ if (ADDNEW.equals(action))
{
+ /*
+ * non-returning dialog
+ */
AlignmentAnnotation newAnnotation = new AlignmentAnnotation(null,
null, new Annotation[ap.av.getAlignment().getWidth()]);
-
- if (!editLabelDescription(newAnnotation))
- {
- return;
- }
-
- ap.av.getAlignment().addAnnotation(newAnnotation);
- ap.av.getAlignment().setAnnotationIndex(newAnnotation, 0);
- fullRepaint = true;
+ editLabelDescription(newAnnotation, true);
}
- else if (evt.getActionCommand().equals(EDITNAME))
+ else if (EDITNAME.equals(action))
{
- String name = aa[selectedRow].label;
- editLabelDescription(aa[selectedRow]);
- if (!name.equalsIgnoreCase(aa[selectedRow].label))
- {
- fullRepaint = true;
- }
+ /*
+ * non-returning dialog
+ */
+ editLabelDescription(aa[selectedRow], false);
}
- else if (evt.getActionCommand().equals(HIDE))
+ else if (HIDE.equals(action))
{
aa[selectedRow].visible = false;
}
- else if (evt.getActionCommand().equals(DELETE))
+ else if (DELETE.equals(action))
{
ap.av.getAlignment().deleteAnnotation(aa[selectedRow]);
ap.av.getCalcManager().removeWorkerForAnnotation(aa[selectedRow]);
- fullRepaint = true;
}
- else if (evt.getActionCommand().equals(SHOWALL))
+ else if (SHOWALL.equals(action))
{
for (int i = 0; i < aa.length; i++)
{
aa[i].visible = true;
}
}
- fullRepaint = true;
}
- else if (evt.getActionCommand().equals(OUTPUT_TEXT))
+ else if (OUTPUT_TEXT.equals(action))
{
- new AnnotationExporter().exportAnnotations(ap,
- new AlignmentAnnotation[]
- { aa[selectedRow] });
+ new AnnotationExporter(ap).exportAnnotation(aa[selectedRow]);
}
- else if (evt.getActionCommand().equals(COPYCONS_SEQ))
+ else if (COPYCONS_SEQ.equals(action))
{
SequenceI cons = null;
if (aa[selectedRow].groupRef != null)
{
copy_annotseqtoclipboard(cons);
}
-
}
- else if (evt.getActionCommand().equals(TOGGLE_LABELSCALE))
+ else if (TOGGLE_LABELSCALE.equals(action))
{
aa[selectedRow].scaleColLabel = !aa[selectedRow].scaleColLabel;
}
- ap.refresh(fullRepaint);
-
+ ap.refresh(true);
}
/**
- * DOCUMENT ME!
+ * Shows a dialog where the annotation name and description may be edited. If
+ * parameter addNew is true, then on confirmation, a new AlignmentAnnotation
+ * is added, else an existing annotation is updated.
*
- * @param e
- * DOCUMENT ME!
+ * @param annotation
+ * @param addNew
*/
- boolean editLabelDescription(AlignmentAnnotation annotation)
+ void editLabelDescription(AlignmentAnnotation annotation, boolean addNew)
{
- // TODO i18n
+ String name = MessageManager.getString("label.annotation_name");
+ String description = MessageManager
+ .getString("label.annotation_description");
+ String title = MessageManager
+ .getString("label.edit_annotation_name_description");
EditNameDialog dialog = new EditNameDialog(annotation.label,
- annotation.description, " Annotation Name ",
- "Annotation Description ", "Edit Annotation Name/Description",
- ap.alignFrame);
+ annotation.description, name, description);
- if (!dialog.accept)
- {
- return false;
- }
-
- annotation.label = dialog.getName();
-
- String text = dialog.getDescription();
- if (text != null && text.length() == 0)
- {
- text = null;
- }
- annotation.description = text;
-
- return true;
+ dialog.showDialog(ap.alignFrame, title,
+ new RunResponse(JvOptionPane.OK_OPTION)
+ {
+ @Override
+ public void run()
+ {
+ annotation.label = dialog.getName();
+ String text = dialog.getDescription();
+ if (text != null && text.length() == 0)
+ {
+ text = null;
+ }
+ annotation.description = text;
+ if (addNew)
+ {
+ ap.av.getAlignment().addAnnotation(annotation);
+ ap.av.getAlignment().setAnnotationIndex(annotation, 0);
+ }
+ ap.refresh(true);
+ }
+ });
}
@Override
protected void showOrHideAdjuster(MouseEvent evt)
{
boolean was = resizePanel;
- resizePanel = evt.getY() < adjusterImageHeight && evt.getX() < HEIGHT_ADJUSTER_WIDTH;
+ resizePanel = evt.getY() < HEIGHT_ADJUSTER_HEIGHT
+ && evt.getX() < HEIGHT_ADJUSTER_WIDTH;
+
if (resizePanel != was)
{
+ setCursor(Cursor
+ .getPredefinedCursor(resizePanel ? Cursor.S_RESIZE_CURSOR
+ : Cursor.DEFAULT_CURSOR));
repaint();
}
}
Alignment ds = new Alignment(dseqs);
if (av.hasHiddenColumns())
{
- omitHidden = av.getAlignment().getHiddenColumns()
- .getVisibleSequenceStrings(0, sq.getLength(), seqs);
+ Iterator<int[]> it = av.getAlignment().getHiddenColumns()
+ .getVisContigsIterator(0, sq.getLength(), false);
+ omitHidden = new String[] { sq.getSequenceStringFromIterator(it) };
}
int[] alignmentStartEnd = new int[] { 0, ds.getWidth() - 1 };
Toolkit.getDefaultToolkit().getSystemClipboard()
.setContents(new StringSelection(output), Desktop.instance);
- ArrayList<int[]> hiddenColumns = null;
+ HiddenColumns hiddenColumns = null;
if (av.hasHiddenColumns())
{
- hiddenColumns = av.getAlignment().getHiddenColumns()
- .getHiddenColumnsCopy();
+ hiddenColumns = new HiddenColumns(
+ av.getAlignment().getHiddenColumns());
}
Desktop.jalviewClipboard = new Object[] { seqs, ds, // what is the dataset
}
}
- if (resizePanel)
- {
- g.drawImage(adjusterImage, 2, 0 - getScrollOffset(), this);
- }
- else if (dragEvent != null && aa != null)
+ if (!resizePanel && dragEvent != null && aa != null)
{
g.setColor(Color.lightGray);
g.drawString(aa[selectedRow].label, dragEvent.getX(),