X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FScalePanel.java;h=2ec45702b476374a45d4b00e1afa458400720619;hb=12d96b44faa3d26fa4f75212d371be69e1ed1199;hp=e25a4bbdbe1eb05fd9aa5f11525ae9de859a1d68;hpb=1ecf6419aba86993b3c223bf5ec0fa79427baf85;p=jalview.git diff --git a/src/jalview/gui/ScalePanel.java b/src/jalview/gui/ScalePanel.java index e25a4bb..2ec4570 100755 --- a/src/jalview/gui/ScalePanel.java +++ b/src/jalview/gui/ScalePanel.java @@ -1,52 +1,172 @@ package jalview.gui; +import jalview.datamodel.*; import java.awt.*; import java.awt.event.*; - import javax.swing.*; public class ScalePanel extends JPanel { - protected ScaleCanvas scaleCanvas; - - protected int offy; + protected int offy = 4; public int width; protected AlignViewport av; + AlignmentPanel ap; - public ScalePanel(AlignViewport av) { + boolean stretchingGroup = false; + + public ScalePanel(AlignViewport av, AlignmentPanel ap) + { this.av = av; + this.ap = ap; - scaleCanvas = new ScaleCanvas(av); - setLayout(new BorderLayout()); - add(scaleCanvas, BorderLayout.CENTER); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent evt) { doMousePressed(evt); } + public void mouseReleased(MouseEvent evt) + { + doMouseReleased(evt); + } + + }); + addMouseMotionListener(new MouseMotionAdapter() + { + public void mouseDragged(MouseEvent evt) + { + doMouseDragged(evt); + } }); - } - public Dimension getMinimumSize() { - return scaleCanvas.getMinimumSize(); } - public Dimension getPreferredSize() { - return scaleCanvas.getPreferredSize(); - } public void doMousePressed(MouseEvent evt) { int x = evt.getX(); - int res = x/(int)av.getCharWidth() + av.getStartRes(); + int res = x/av.getCharWidth() + av.getStartRes(); + SequenceGroup sg = null; - if (! av.getColumnSelection().contains(res)) - av.getColumnSelection().addElement(res); - else + if (av.getColumnSelection().contains(res)) av.getColumnSelection().removeElement(res); + else + { + av.getColumnSelection().addElement(res); + + sg = new SequenceGroup(); + for (int i = 0; i < av.alignment.getSequences().size(); i++) + sg.addSequence(av.alignment.getSequenceAt(i)); + + sg.setStartRes(res); + sg.setEndRes(res); - repaint(); + ap.annotationPanel.addEditableColumn(res); + } + av.setSelectionGroup(sg); + ap.repaint(); } + + public void doMouseReleased(MouseEvent evt) + { + if(!stretchingGroup) + return; + + int x = evt.getX(); + int res = x/av.getCharWidth() + av.getStartRes(); + + if (! av.getColumnSelection().contains(res)) + av.getColumnSelection().addElement(res); + + SequenceGroup sg = av.getSelectionGroup(); + + if(res>sg.getStartRes()) + sg.setEndRes(res); + else if(res sg.getStartRes()) + sg.setEndRes(res); + else if (res < sg.getStartRes()) + sg.setStartRes(res); + + ap.annotationPanel.addEditableColumn(res); + ap.repaint(); + } + } + + public void paintComponent(Graphics g) + { + drawScale(g, av.getStartRes(), av.getEndRes(), getWidth(), getHeight()); + } + +// scalewidth will normally be screenwidth, + public void drawScale(Graphics g, int startx, int endx, int width, int height) + { + Graphics2D gg = (Graphics2D)g; + gg.setFont(av.getFont()); + gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); + + //Fill in the background + gg.setColor(Color.white); + gg.fillRect(0,0,width, height); + gg.setColor(Color.black); + + + //Fill the selected columns + ColumnSelection cs = av.getColumnSelection(); + gg.setColor(new Color(220,0,0)); + for (int i=0; i= startx && sel <= endx) + gg.fillRect((sel-startx)*av.charWidth,0,av.charWidth,getHeight()); + } + + + // Draw the scale numbers + gg.setColor(Color.black); + int scalestartx = (startx/10) * 10; + + FontMetrics fm = gg.getFontMetrics(av.getFont()); + int y = av.charHeight -fm.getDescent(); + + if(scalestartx%10==0) + scalestartx+=5; + + for (int i=scalestartx;i < endx; i+= 5) + { + if(i%10==0) + { + gg.drawString(String.valueOf(i), (i - startx - 1) * av.charWidth, y); + gg.drawLine( (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2), + y+2, + (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2), + y+fm.getDescent()*2); + } + else + gg.drawLine( (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2), + y+fm.getDescent(), + (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2), + y+fm.getDescent()*2); + + + } + } + + }