3 import javax.swing.*;
\r
4 import java.awt.event.*;
\r
5 import java.awt.image.*;
\r
8 public class OverviewPanel extends JPanel
\r
10 BufferedImage miniMe;
\r
16 int sequencesWidth=400, sequencesHeight=150;
\r
18 int boxX=-1, boxY=-1, boxWidth=-1, boxHeight=-1;
\r
20 public OverviewPanel(AlignmentPanel ap, AlignViewport av)
\r
24 setSize(sequencesWidth, sequencesHeight+graphHeight);
\r
27 updateOverviewImage();
\r
29 addComponentListener(new ComponentAdapter()
\r
32 public void componentResized(ComponentEvent evt)
\r
34 if( getWidth()!=sequencesWidth || getHeight()!=sequencesHeight+graphHeight)
\r
35 updateOverviewImage();
\r
40 addMouseMotionListener(new MouseMotionAdapter()
\r
42 public void mouseDragged(MouseEvent evt)
\r
43 { doMouseDragged(evt);}
\r
46 addMouseListener(new MouseAdapter()
\r
48 public void mousePressed(MouseEvent evt)
\r
49 { doMousePressed(evt);}
\r
50 public void mouseReleased(MouseEvent evt)
\r
51 { doMouseReleased(evt);}
\r
56 public void doMousePressed(MouseEvent evt)
\r
58 checkValid(evt.getX(), evt.getY());
\r
62 public void doMouseReleased(MouseEvent evt)
\r
67 ap.setScrollValues( (int)(x/scalew/av.getCharWidth()), (int)(y/scaleh/av.getCharHeight()) );
\r
70 public void doMouseDragged(MouseEvent evt)
\r
75 ap.setScrollValues( (int)(x/scalew/av.getCharWidth()), (int)(y/scaleh/av.getCharHeight()) );
\r
79 void checkValid(int x, int y)
\r
84 if (y > sequencesHeight - boxHeight)
\r
85 y = sequencesHeight- boxHeight;
\r
91 if (x > sequencesWidth - boxWidth)
\r
92 x = sequencesWidth - boxWidth;
\r
98 public void updateOverviewImage()
\r
101 setPreferredSize (new Dimension(sequencesWidth, sequencesHeight+graphHeight));
\r
102 sequencesWidth=getWidth();
\r
103 sequencesHeight=this.getHeight()-graphHeight;
\r
106 int fullsizeWidth = (int)(av.getAlignment().getWidth()*av.getCharWidth());
\r
107 int fullsizeHeight = av.getAlignment().getHeight()*av.getCharHeight();
\r
110 BufferedImage fullSize = new BufferedImage(fullsizeWidth,
\r
112 BufferedImage.TYPE_INT_RGB);
\r
114 BufferedImage consensus = new BufferedImage(fullsizeWidth,
\r
116 BufferedImage.TYPE_INT_RGB);
\r
119 Graphics g = fullSize.getGraphics();
\r
120 ap.seqPanel.seqCanvas.drawPanel(g,0,av.getAlignment().getWidth(),0,av.getAlignment().getHeight(),0,0,0);
\r
122 g = consensus.getGraphics();
\r
123 ap.scorePanel.drawScorePanel(g, fullsizeWidth, 0, av.getAlignment().getWidth());
\r
126 miniMe = new BufferedImage(sequencesWidth, sequencesHeight + graphHeight,
\r
127 BufferedImage.TYPE_INT_RGB);
\r
128 Graphics mg = miniMe.getGraphics();
\r
130 mg.drawImage(fullSize, 0, 0, sequencesWidth, sequencesHeight, 0, 0,
\r
131 fullsizeWidth, fullsizeHeight, this);
\r
132 mg.drawImage(consensus, 0, sequencesHeight, sequencesWidth,
\r
133 sequencesHeight + graphHeight, 0, 0, fullsizeWidth, 60, this);
\r
135 scalew = (float) sequencesWidth / (float) fullsizeWidth;
\r
136 scaleh = (float) sequencesHeight / (float) fullsizeHeight;
\r
139 }catch(Exception ex)
\r
140 {// most likely the frame size is zero
\r
146 public void setBoxPosition()
\r
148 boxX = (int) (av.getStartRes() * av.getCharWidth() * scalew);
\r
149 boxY = (int) (av.getStartSeq() * av.getCharHeight() * scaleh);
\r
150 boxWidth = (int) (av.getEndRes() * av.getCharWidth() * scalew) - boxX;
\r
151 boxHeight = (int) (av.getEndSeq() * av.getCharHeight() * scaleh) - boxY;
\r
157 public void paintComponent(Graphics g)
\r
160 g.drawImage(miniMe, 0,0,this);
\r
162 g.setColor(Color.red);
\r
164 g.drawRect(boxX, boxY, boxWidth, boxHeight);
\r
165 g.drawRect(boxX+1, boxY+1, boxWidth-2, boxHeight-2);
\r