X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAnnotationLabels.java;h=07c3e0af34527769886e942e9adf08384d1c4e9b;hb=b5667f39acdf309cd92881b73edfda591e0acaf4;hp=7dcd3ac96b4694f82f1c4e5c34659f91bff4da82;hpb=276594c533ac5346dab8b49d14efae9b49aac5c9;p=jalview.git diff --git a/src/jalview/appletgui/AnnotationLabels.java b/src/jalview/appletgui/AnnotationLabels.java index 7dcd3ac..07c3e0a 100755 --- a/src/jalview/appletgui/AnnotationLabels.java +++ b/src/jalview/appletgui/AnnotationLabels.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -20,19 +20,54 @@ */ package jalview.appletgui; -import java.util.*; -import java.awt.*; -import java.awt.event.*; - -import jalview.datamodel.*; +import jalview.analysis.AlignmentUtils; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.Annotation; +import jalview.datamodel.HiddenColumns; +import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; import jalview.util.MessageManager; import jalview.util.ParseHtmlBodyAndLinks; -public class AnnotationLabels extends Panel implements ActionListener, - MouseListener, MouseMotionListener +import java.awt.Checkbox; +import java.awt.CheckboxMenuItem; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.FontMetrics; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.MenuItem; +import java.awt.Panel; +import java.awt.PopupMenu; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.util.Arrays; +import java.util.Collections; + +public class AnnotationLabels extends Panel + implements ActionListener, MouseListener, MouseMotionListener { Image image; + /** + * 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; + boolean active = false; AlignmentPanel ap; @@ -68,23 +103,6 @@ public class AnnotationLabels extends Panel implements ActionListener, this.ap = ap; this.av = ap.av; setLayout(null); - - /** - * this retrieves the adjustable height glyph from resources. we don't use - * it at the moment. java.net.URL url = - * getClass().getResource("/images/idwidth.gif"); Image temp = null; - * - * if (url != null) { temp = - * java.awt.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); image = (Image) bi; - */ addMouseListener(this); addMouseMotionListener(this); } @@ -138,6 +156,7 @@ public class AnnotationLabels extends Panel implements ActionListener, return row; } + @Override public void actionPerformed(ActionEvent evt) { AlignmentAnnotation[] aa = av.getAlignment().getAlignmentAnnotation(); @@ -176,29 +195,42 @@ public class AnnotationLabels extends Panel implements ActionListener, ap.alignFrame); Frame frame = new Frame(); frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, ap.alignFrame.getTitle() - + " - " + aa[selectedRow].label, 500, 100); + jalview.bin.JalviewLite.addFrame(frame, + ap.alignFrame.getTitle() + " - " + aa[selectedRow].label, 500, + 100); cap.setText(aa[selectedRow].toString()); } else if (evt.getActionCommand().equals(COPYCONS_SEQ)) { - SequenceI cons = av.getConsensusSeq(); + SequenceGroup group = aa[selectedRow].groupRef; + SequenceI cons = group == null ? av.getConsensusSeq() + : group.getConsensusSeq(); if (cons != null) { copy_annotseqtoclipboard(cons); } } + refresh(); + } + + /** + * Adjust size and repaint + */ + protected void refresh() + { ap.annotationPanel.adjustPanelHeight(); setSize(getSize().width, ap.annotationPanel.getSize().height); ap.validate(); - ap.paintAlignment(true); + // TODO: only paint if we needed to + ap.paintAlignment(true, true); } boolean editLabelDescription(AlignmentAnnotation annotation) { - Checkbox padGaps = new Checkbox("Fill Empty Gaps With \"" - + ap.av.getGapCharacter() + "\"", annotation.padGaps); + Checkbox padGaps = new Checkbox( + "Fill Empty Gaps With \"" + ap.av.getGapCharacter() + "\"", + annotation.padGaps); EditNameDialog dialog = new EditNameDialog(annotation.label, annotation.description, " Annotation Label", @@ -221,15 +253,21 @@ public class AnnotationLabels extends Panel implements ActionListener, return true; } else + { return false; + } } boolean resizePanel = false; + @Override public void mouseMoved(MouseEvent evt) { - resizePanel = evt.getY() < 10 && evt.getX() < 14; + resizePanel = evt.getY() < HEIGHT_ADJUSTER_HEIGHT + && evt.getX() < HEIGHT_ADJUSTER_WIDTH; + setCursor(Cursor.getPredefinedCursor( + resizePanel ? Cursor.S_RESIZE_CURSOR : Cursor.DEFAULT_CURSOR)); int row = getSelectedRow(evt.getY() + scrollOffset); if (row > -1) @@ -272,6 +310,7 @@ public class AnnotationLabels extends Panel implements ActionListener, dragCancelled = true; } + @Override public void mouseDragged(MouseEvent evt) { if (dragCancelled) @@ -283,26 +322,28 @@ public class AnnotationLabels extends Panel implements ActionListener, if (resizePanel) { - Dimension d = ap.annotationPanelHolder.getSize(), e = ap.annotationSpaceFillerHolder - .getSize(), f = ap.seqPanelHolder.getSize(); + Dimension d = ap.annotationPanelHolder.getSize(), + e = ap.annotationSpaceFillerHolder.getSize(), + f = ap.seqPanelHolder.getSize(); int dif = evt.getY() - oldY; - dif /= ap.av.charHeight; - dif *= ap.av.charHeight; + dif /= ap.av.getCharHeight(); + dif *= ap.av.getCharHeight(); if ((d.height - dif) > 20 && (f.height + dif) > 20) { ap.annotationPanel.setSize(d.width, d.height - dif); setSize(new Dimension(e.width, d.height - dif)); - ap.annotationSpaceFillerHolder.setSize(new Dimension(e.width, - d.height - dif)); - ap.annotationPanelHolder.setSize(new Dimension(d.width, d.height - - dif)); + ap.annotationSpaceFillerHolder + .setSize(new Dimension(e.width, d.height - dif)); + ap.annotationPanelHolder + .setSize(new Dimension(d.width, d.height - dif)); ap.apvscroll.setValues(ap.apvscroll.getValue(), d.height - dif, 0, av.calcPanelHeight()); f.height += dif; ap.seqPanelHolder.setPreferredSize(f); - ap.setScrollValues(av.getStartRes(), av.getStartSeq()); + ap.setScrollValues(av.getRanges().getStartRes(), + av.getRanges().getStartSeq()); ap.validate(); // ap.paintAlignment(true); ap.addNotify(); @@ -331,10 +372,12 @@ public class AnnotationLabels extends Panel implements ActionListener, } } + @Override public void mouseClicked(MouseEvent evt) { } + @Override public void mouseReleased(MouseEvent evt) { if (!resizePanel && !dragCancelled) @@ -362,10 +405,12 @@ public class AnnotationLabels extends Panel implements ActionListener, resizePanel = false; dragEvent = null; dragCancelled = false; + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); repaint(); ap.annotationPanel.repaint(); } + @Override public void mouseEntered(MouseEvent evt) { if (evt.getY() < 10 && evt.getX() < 14) @@ -373,8 +418,11 @@ public class AnnotationLabels extends Panel implements ActionListener, resizePanel = true; repaint(); } + setCursor(Cursor.getPredefinedCursor( + resizePanel ? Cursor.S_RESIZE_CURSOR : Cursor.DEFAULT_CURSOR)); } + @Override public void mouseExited(MouseEvent evt) { dragCancelled = false; @@ -393,6 +441,7 @@ public class AnnotationLabels extends Panel implements ActionListener, repaint(); } + @Override public void mousePressed(MouseEvent evt) { oldY = evt.getY(); @@ -408,7 +457,8 @@ public class AnnotationLabels extends Panel implements ActionListener, .getAlignmentAnnotation(); // DETECT RIGHT MOUSE BUTTON IN AWT - if ((evt.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) + if ((evt.getModifiersEx() + & InputEvent.BUTTON3_DOWN_MASK) == InputEvent.BUTTON3_DOWN_MASK) { PopupMenu popup = new PopupMenu( @@ -437,6 +487,32 @@ public class AnnotationLabels extends Panel implements ActionListener, item = new MenuItem(HIDE); item.addActionListener(this); popup.add(item); + + /* + * Hide all