From: amwaterhouse Date: Thu, 4 Nov 2004 17:54:38 +0000 (+0000) Subject: Added OverviewPanel X-Git-Tag: Release_2_0~950 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=8635a55d2c94dca49e62d5bda3211cb9e4f31dcc;p=jalview.git Added OverviewPanel --- diff --git a/src/jalview/gui/OverviewPanel.java b/src/jalview/gui/OverviewPanel.java new file mode 100755 index 0000000..2c67388 --- /dev/null +++ b/src/jalview/gui/OverviewPanel.java @@ -0,0 +1,168 @@ +package jalview.gui; + +import javax.swing.*; +import java.awt.event.*; +import java.awt.image.*; +import java.awt.*; + +public class OverviewPanel extends JPanel +{ + BufferedImage miniMe; + AlignViewport av; + AlignmentPanel ap; + float scalew = 1f; + float scaleh = 1f; + + int sequencesWidth=400, sequencesHeight=150; + int graphHeight=30; + int boxX=-1, boxY=-1, boxWidth=-1, boxHeight=-1; + + public OverviewPanel(AlignmentPanel ap, AlignViewport av) + { + this.av = av; + this.ap = ap; + setSize(sequencesWidth, sequencesHeight+graphHeight); + setLayout(null); + + updateOverviewImage(); + + addComponentListener(new ComponentAdapter() + { + + public void componentResized(ComponentEvent evt) + { + if( getWidth()!=sequencesWidth || getHeight()!=sequencesHeight+graphHeight) + updateOverviewImage(); + } + }); + + + addMouseMotionListener(new MouseMotionAdapter() + { + public void mouseDragged(MouseEvent evt) + { doMouseDragged(evt);} + }); + + addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent evt) + { doMousePressed(evt);} + public void mouseReleased(MouseEvent evt) + { doMouseReleased(evt);} + }); + + } + + public void doMousePressed(MouseEvent evt) + { + checkValid(evt.getX(), evt.getY()); + repaint(); + } + + public void doMouseReleased(MouseEvent evt) + { + int x = evt.getX(); + int y = evt.getY(); + checkValid(x, y); + ap.setScrollValues( (int)(x/scalew/av.getCharWidth()), (int)(y/scaleh/av.getCharHeight()) ); + } + + public void doMouseDragged(MouseEvent evt) + { + int x = evt.getX(); + int y = evt.getY(); + checkValid(x, y); + ap.setScrollValues( (int)(x/scalew/av.getCharWidth()), (int)(y/scaleh/av.getCharHeight()) ); + repaint(); + } + + void checkValid(int x, int y) + { + + if (y < 0) + y = 0; + if (y > sequencesHeight - boxHeight) + y = sequencesHeight- boxHeight; + + + if (x < 0) + x = 0; + + if (x > sequencesWidth - boxWidth) + x = sequencesWidth - boxWidth; + + boxX = x; + boxY = y; + } + + public void updateOverviewImage() + { + miniMe = null; + setPreferredSize (new Dimension(sequencesWidth, sequencesHeight+graphHeight)); + sequencesWidth=getWidth(); + sequencesHeight=this.getHeight()-graphHeight; + + + int fullsizeWidth = (int)(av.getAlignment().getWidth()*av.getCharWidth()); + int fullsizeHeight = av.getAlignment().getHeight()*av.getCharHeight(); + + + BufferedImage fullSize = new BufferedImage(fullsizeWidth, + fullsizeHeight, + BufferedImage.TYPE_INT_RGB); + + BufferedImage consensus = new BufferedImage(fullsizeWidth, + 80, + BufferedImage.TYPE_INT_RGB); + + + Graphics g = fullSize.getGraphics(); + ap.seqPanel.seqCanvas.drawPanel(g,0,av.getAlignment().getWidth(),0,av.getAlignment().getHeight(),0,0,0); + + g = consensus.getGraphics(); + ap.scorePanel.drawScorePanel(g, fullsizeWidth, 0, av.getAlignment().getWidth()); + + try{ + miniMe = new BufferedImage(sequencesWidth, sequencesHeight + graphHeight, + BufferedImage.TYPE_INT_RGB); + Graphics mg = miniMe.getGraphics(); + + mg.drawImage(fullSize, 0, 0, sequencesWidth, sequencesHeight, 0, 0, + fullsizeWidth, fullsizeHeight, this); + mg.drawImage(consensus, 0, sequencesHeight, sequencesWidth, + sequencesHeight + graphHeight, 0, 0, fullsizeWidth, 60, this); + + scalew = (float) sequencesWidth / (float) fullsizeWidth; + scaleh = (float) sequencesHeight / (float) fullsizeHeight; + + setBoxPosition(); + }catch(Exception ex) + {// most likely the frame size is zero + miniMe = null; + } + + } + + public void setBoxPosition() + { + boxX = (int) (av.getStartRes() * av.getCharWidth() * scalew); + boxY = (int) (av.getStartSeq() * av.getCharHeight() * scaleh); + boxWidth = (int) (av.getEndRes() * av.getCharWidth() * scalew) - boxX; + boxHeight = (int) (av.getEndSeq() * av.getCharHeight() * scaleh) - boxY; + repaint(); + + } + + + public void paintComponent(Graphics g) + { + if(miniMe!=null) + g.drawImage(miniMe, 0,0,this); + + g.setColor(Color.red); + + g.drawRect(boxX, boxY, boxWidth, boxHeight); + g.drawRect(boxX+1, boxY+1, boxWidth-2, boxHeight-2); + } + +}