package jalview.gui; import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.awt.image.*; import jalview.datamodel.*; public class AnnotationLabels extends JPanel implements MouseListener, MouseMotionListener, ActionListener { boolean active = false; Image image; AlignmentPanel ap ; boolean resizing = false; int oldY, mouseX; static String ADDNEW = "Add new row"; static String HIDE = "Hide this row"; static String DELETE = "Delete this row"; static String SHOWALL="Show all hidden rows"; int selectedRow = 0; int scrollOffset = 0; public AnnotationLabels(AlignmentPanel ap) { this.ap = ap; 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); } public void setScrollOffset(int y) { scrollOffset = y; repaint(); } public void actionPerformed(ActionEvent evt) { AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation(); if(evt.getActionCommand().equals(ADDNEW)) { String label = JOptionPane.showInputDialog(this, "Label for annotation"); if(label==null) label = ""; ap.av.alignment.addAnnotation(new AlignmentAnnotation (label, "New description", new Annotation[ap.av.alignment.getWidth()])); } else if(evt.getActionCommand().equals(HIDE)) { aa[selectedRow].visible = false; } else if(evt.getActionCommand().equals(DELETE)) { ap.av.alignment.deleteAnnotation(aa[selectedRow]); } else if(evt.getActionCommand().equals(SHOWALL)) { for(int i=0; i20) { ap.annotationScroller.setPreferredSize(new Dimension(d.width,d.height - dif)); d = ap.annotationSpaceFillerHolder.getPreferredSize(); ap.annotationSpaceFillerHolder.setPreferredSize(new Dimension(d.width,d.height - dif)); ap.repaint(); } ap.addNotify(); } public void mouseMoved(MouseEvent evt) {} public void mouseClicked(MouseEvent evt) {} public void paintComponent(Graphics g1) { Graphics2D g = (Graphics2D)g1; g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); drawComponent(g); } public void drawComponent(Graphics2D g) { FontMetrics fm = g.getFontMetrics(g.getFont()); g.setColor(Color.white); g.fillRect(0,0, getWidth(), getHeight()); g.translate(0, scrollOffset); g.setColor(Color.black); AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation(); int y = g.getFont().getSize(); int x = 0; if(aa!=null) for(int i=0; i