X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationLabels.java;h=10689809707174975adbdca8da7defa39146734c;hb=cc4553c3b742463f2b325b2219480b304ce662cb;hp=2a972eaacc08205318c8e4c135eed541589054e3;hpb=efc31b4a8d5cee63555586804a2b79c06bdb5a14;p=jalview.git diff --git a/src/jalview/gui/AnnotationLabels.java b/src/jalview/gui/AnnotationLabels.java index 2a972ea..1068980 100755 --- a/src/jalview/gui/AnnotationLabels.java +++ b/src/jalview/gui/AnnotationLabels.java @@ -44,11 +44,14 @@ public class AnnotationLabels extends JPanel implements MouseListener, boolean active = false; Image image; AlignmentPanel ap; + AlignViewport av; boolean resizing = false; int oldY; int mouseX; int selectedRow = 0; int scrollOffset = 0; + Font font = new Font("Arial", Font.PLAIN, 11); + /** * Creates a new AnnotationLabels object. @@ -58,6 +61,7 @@ public class AnnotationLabels extends JPanel implements MouseListener, public AnnotationLabels(AlignmentPanel ap) { this.ap = ap; + av = ap.av; java.net.URL url = getClass().getResource("/images/idwidth.gif"); Image temp = null; @@ -88,6 +92,11 @@ public class AnnotationLabels extends JPanel implements MouseListener, addMouseMotionListener(this); } + public AnnotationLabels(AlignViewport av) + { + this.av = av; + } + /** * DOCUMENT ME! * @@ -119,10 +128,12 @@ public class AnnotationLabels extends JPanel implements MouseListener, label = ""; } - ap.av.alignment.addAnnotation(new AlignmentAnnotation(label, + AlignmentAnnotation newAnnotation = new AlignmentAnnotation(label, "New description", - new Annotation[ap.av.alignment.getWidth()])); + new Annotation[ap.av.alignment.getWidth()]); + ap.av.alignment.addAnnotation(newAnnotation); + ap.av.alignment.setAnnotationIndex(newAnnotation, 0); dif = aa[aa.length - 1].height; } else if (evt.getActionCommand().equals(HIDE)) @@ -171,16 +182,10 @@ public class AnnotationLabels extends JPanel implements MouseListener, cap.setText(aa[selectedRow].toString()); } - ap.annotationPanel.adjustPanelHeight(); - - Dimension d = ap.annotationScroller.getPreferredSize(); - 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.addNotify(); + ap.annotationPanel.adjustPanelHeight(); + ap.annotationScroller.validate(); + ap.repaint(); } /** @@ -319,6 +324,24 @@ public class AnnotationLabels extends JPanel implements MouseListener, item = new JMenuItem(OUTPUT_TEXT); item.addActionListener(this); pop.add(item); + + if (aa[selectedRow].label.equals("Consensus")) + { + pop.addSeparator(); + final JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem( + "Ignore Gaps In Consensus", + ap.av.getIgnoreGapsConsensus()); + cbmi.addActionListener(new ActionListener() + {public void actionPerformed(ActionEvent e) + { + ap.av.setIgnoreGapsConsensus(cbmi.getState()); + ap.repaint(); + } + }); + pop.add(cbmi); + + } + pop.show(this, evt.getX(), evt.getY()); } @@ -327,13 +350,20 @@ public class AnnotationLabels extends JPanel implements MouseListener, * * @param g1 DOCUMENT ME! */ - public void paintComponent(Graphics g1) + public void paintComponent(Graphics g) { - Graphics2D g = (Graphics2D) g1; - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + + int width = getWidth(); + if(width==0) + width = ap.calculateIdWidth().width + 4; + + Graphics2D g2 = (Graphics2D) g; + if(av.antiAlias) + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - drawComponent(g); + drawComponent(g2, width); + } /** @@ -341,8 +371,13 @@ public class AnnotationLabels extends JPanel implements MouseListener, * * @param g DOCUMENT ME! */ - public void drawComponent(Graphics2D g) + public void drawComponent(Graphics g, int width) { + if(av.getFont().getSize()<10) + g.setFont(new Font("Arial", Font.PLAIN, av.getFont().getSize()-1)); + else + g.setFont(font); + FontMetrics fm = g.getFontMetrics(g.getFont()); g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); @@ -350,12 +385,13 @@ public class AnnotationLabels extends JPanel implements MouseListener, g.translate(0, scrollOffset); g.setColor(Color.black); - AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation(); - int y = g.getFont().getSize(); + AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation(); + int fontHeight = g.getFont().getSize(); + int y = fontHeight; int x = 0; - int width = getWidth(); - if(width==0) - width = ap.calculateIdWidth().width + 4; + int graphExtras = 0; + + if (aa != null) { @@ -368,15 +404,73 @@ public class AnnotationLabels extends JPanel implements MouseListener, x = width - fm.stringWidth(aa[i].label) - 3; - if (aa[i].isGraph) + if (aa[i].graph>0) { + graphExtras = y; + y += (aa[i].height / 3); + + if(aa[i].graphGroup<0) + graphExtras = y + fontHeight; } - g.drawString(aa[i].label, x, y); + if(aa[i].graphGroup>-1) + { + int groupSize = 0; + for (int gg = 0; gg < aa.length; gg++) + { + if (aa[gg].graphGroup == aa[i].graphGroup) + groupSize++; + } + + if(groupSize * (fontHeight+8) < aa[i].height) + graphExtras += (aa[i].height -( groupSize * (fontHeight+8)) )/2; + + for(int gg=0; gg0) { + if (aa[i].graphLines != null) + { + for (int gl = 0; gl < aa[i].graphLines.size(); gl++) + { + x = width - fm.stringWidth(aa[i].getGraphLine(gl).label) - 3; + g.drawString(aa[i].getGraphLine(gl).label, x, graphExtras); + g.setColor(aa[i].getGraphLine(gl).colour); + Graphics2D g2 = (Graphics2D) g; + g2.setStroke(new BasicStroke(1, + BasicStroke.CAP_SQUARE, + BasicStroke.JOIN_ROUND, 3f, + new float[] + {5f, 3f}, 0f)); + + graphExtras += 3; + + g.drawLine(x, graphExtras, + x+fm.stringWidth(aa[i].label), + graphExtras); + g2.setStroke(new BasicStroke()); + } + } y += ((2 * aa[i].height) / 3); } else @@ -390,7 +484,7 @@ public class AnnotationLabels extends JPanel implements MouseListener, { if (image != null) { - g.drawImage(image, 2, 0, this); + g.drawImage(image, 2, 0 - scrollOffset, this); } }