boxX = evt.getX();\r
boxY = evt.getY();\r
checkValid();\r
- if (!resizing)\r
- {\r
- ap.setScrollValues( (int) (boxX / scalew / av.getCharWidth()),\r
+ ap.setScrollValues( (int) (boxX / scalew / av.getCharWidth()),\r
(int) (boxY / scaleh / av.getCharHeight()));\r
- }\r
}\r
\r
public void doMouseDragged(MouseEvent evt)\r
boxX = evt.getX();\r
boxY = evt.getY();\r
checkValid();\r
- if (!resizing)\r
- {\r
- ap.setScrollValues( (int) (boxX / scalew / av.getCharWidth()),\r
+ ap.setScrollValues( (int) (boxX / scalew / av.getCharWidth()),\r
(int) (boxY / scaleh / av.getCharHeight()));\r
- }\r
+\r
repaint();\r
ap.repaint();\r
}\r
}\r
}\r
\r
+ /**\r
+ * DOCUMENT ME!\r
+ */\r
public void updateOverviewImage()\r
{\r
if (resizing)\r
{\r
- return;\r
+ resizeAgain = true;\r
+ return;\r
}\r
\r
resizing = true;\r
+\r
+ if ( (getSize().width > 0) && (getSize().height > 0))\r
+ {\r
+ width = getSize().width;\r
+ sequencesHeight = getSize().height - graphHeight;\r
+ }\r
+ setSize(new Dimension(width, sequencesHeight + graphHeight));\r
+ setBoxPosition();\r
+\r
Thread thread = new Thread(this);\r
thread.start();\r
- repaint();\r
+ repaint();\r
}\r
\r
+ // This is set true if the user resizes whilst\r
+ // the overview is being calculated\r
+ boolean resizeAgain = false;\r
+\r
public void run()\r
{\r
miniMe = null;\r
\r
for (int sSeq = 0, chunky = 0; sSeq < alheight; sSeq += maxSize, chunky++)\r
{\r
+ if(resizeAgain)\r
+ break;\r
+\r
eSeq += maxSize;\r
if (eSeq > alheight)\r
{\r
"Out of memory when trying to calculate the overview window image!");\r
}\r
\r
+ System.gc();\r
+\r
av.setRenderGaps(oldRenderGaps);\r
resizing = false;\r
\r
setBoxPosition();\r
+\r
+ if(resizeAgain)\r
+ {\r
+ resizeAgain = false;\r
+ updateOverviewImage();\r
+ }\r
}\r
\r
public void setBoxPosition()\r
{\r
+ int fullsizeWidth = av.alignment.getWidth() * av.getCharWidth();\r
+ int fullsizeHeight = av.alignment.getHeight() * av.getCharHeight();\r
+\r
+ scalew = (float) width / (float) fullsizeWidth;\r
+ scaleh = (float) sequencesHeight / (float) fullsizeHeight;\r
+\r
boxX = (int) (av.getStartRes() * av.getCharWidth() * scalew);\r
boxY = (int) (av.getStartSeq() * av.getCharHeight() * scaleh);\r
boxWidth = (int) ( (av.getEndRes() - av.getStartRes() + 1) *\r
\r
public void paint(Graphics g)\r
{\r
- if (resizing)\r
+ if (miniMe != null)\r
+ {\r
+ g.drawImage(miniMe, 0, 0, this);\r
+ }\r
+ else\r
{\r
g.setColor(Color.white);\r
g.fillRect(0, 0, getSize().width, getSize().height);\r
g.setColor(Color.black);\r
-\r
g.setFont(new Font("Verdana", Font.BOLD, 15));\r
g.drawString("Recalculating", 5, sequencesHeight / 2);\r
- g.drawString("Overview.....", 5, sequencesHeight / 2 + 20);\r
+ g.drawString("Overview.....", 5, (sequencesHeight / 2) + 20);\r
}\r
- else\r
- {\r
- if (miniMe != null)\r
- {\r
- g.drawImage(miniMe, 0, 0, this);\r
- }\r
\r
- g.setColor(Color.red);\r
- g.drawRect(boxX, boxY, boxWidth, boxHeight);\r
- g.drawRect(boxX + 1, boxY + 1, boxWidth - 2, boxHeight - 2);\r
- }\r
+ g.setColor(Color.red);\r
+ g.drawRect(boxX, boxY, boxWidth, boxHeight);\r
+ g.drawRect(boxX + 1, boxY + 1, boxWidth - 2, boxHeight - 2);\r
}\r
\r
}\r