\r
this.ap = ap;\r
av = ap.av;\r
- this.setLayout(null);\r
+ setLayout(null);\r
adjustPanelHeight();\r
\r
addMouseMotionListener(new MouseMotionAdapter()\r
}\r
\r
this.setSize(getSize().width, height);\r
- if(ap!=null)\r
- ap.annotationScroller.setSize(getSize().width, height);\r
-\r
\r
repaint();\r
\r
\r
public void paint(Graphics g)\r
{\r
+\r
+\r
imgWidth = (av.endRes - av.startRes + 1) * av.charWidth;\r
\r
if (image == null || imgWidth != image.getWidth(this))\r
}\r
\r
drawComponent(gg, av.startRes, av.endRes + 1);\r
+ g.setColor(Color.white);\r
+ g.fillRect(0, 0, getSize().width, getSize().height);\r
g.drawImage(image, 0, 0, this);\r
}\r
\r
g.setColor(Color.white);\r
g.fillRect(0, 0, getSize().width, getSize().height);\r
g.setColor(Color.black);\r
- g.drawString("Alignment has no annotations", 20, 15);\r
+ if(av.validCharWidth)\r
+ g.drawString("Alignment has no annotations", 20, 15);\r
\r
return;\r
}\r
\r
AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();\r
\r
- int j;\r
int x = 0;\r
int y = 0;\r
char lastSS;\r
x = (column - startRes) * av.charWidth;\r
\r
\r
- if (validRes &&\r
- (row.annotations[column].displayCharacter.length() > 0))\r
+ if (av.validCharWidth && validRes &&\r
+ (row.annotations[column].displayCharacter.length() > 0))\r
{\r
int charOffset = (av.charWidth -\r
fm.charWidth(row.annotations[column].displayCharacter.charAt(\r
+\r
/*\r
* Jalview - A Sequence Alignment Editor and Viewer\r
* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
\r
g.fillRect( (i - start) * width, y1, width, height);\r
\r
+ if(!av.validCharWidth)\r
+ continue;\r
+\r
g.setColor(Color.white);\r
charOffset = (width - fm.charWidth(s)) / 2;\r
g.drawString(String.valueOf(s),\r
scalestartx += 5;\r
}\r
\r
+ String string;\r
+ int maxX=0;\r
+\r
for (int i = scalestartx; i < endx; i += 5)\r
{\r
if (i % 10 == 0)\r
{\r
- gg.drawString(String.valueOf(i), (i - startx - 1) * av.charWidth, y);\r
+ string = String.valueOf(i);\r
+ if ( (i - startx - 1) * av.charWidth > maxX)\r
+ {\r
+ gg.drawString(string,\r
+ (i - startx - 1) * av.charWidth, y);\r
+ maxX = (i - startx + 1) * av.charWidth + fm.stringWidth(string);\r
+ }\r
+\r
gg.drawLine( (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2),\r
y + 2,\r
(int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2),\r
StringBuffer keyboardNo1;\r
StringBuffer keyboardNo2;\r
\r
+ boolean mouseWheelPressed = false;\r
+ Point lastMousePress;\r
+\r
public SeqPanel(AlignViewport avp, AlignmentPanel p)\r
{\r
this.av = avp;\r
}\r
public void mousePressed(MouseEvent evt)\r
{\r
+ lastMousePress = evt.getPoint();\r
+\r
+ if ( (evt.getModifiers() & InputEvent.BUTTON2_MASK) ==\r
+ InputEvent.BUTTON2_MASK)\r
+ {\r
+ mouseWheelPressed = true;\r
+ return;\r
+ }\r
+\r
if (evt.isShiftDown() || evt.isAltDown() ||\r
evt.isControlDown())\r
{\r
public void mouseReleased(MouseEvent evt)\r
{\r
mouseDragging = false;\r
+ mouseWheelPressed = false;\r
\r
if (!editingSeqs)\r
{\r
editOccurred();\r
\r
endEditing();\r
- ap.repaint();\r
+ ap.repaint();\r
}\r
\r
int startWrapBlock=-1;\r
\r
public void mouseDragged(MouseEvent evt)\r
{\r
- if (!editingSeqs)\r
-{\r
- doMouseDraggedDefineMode(evt);\r
- return;\r
-}\r
+ if (mouseWheelPressed)\r
+ {\r
+ int oldWidth = av.charWidth;\r
+\r
+ //Which is bigger, left-right or up-down?\r
+ if (Math.abs(evt.getY() - lastMousePress.y)\r
+ > Math.abs(evt.getX() - lastMousePress.x))\r
+ {\r
+ int fontSize = av.font.getSize();\r
+\r
+ if (evt.getY() < lastMousePress.y && av.charHeight > 1)\r
+ {\r
+ fontSize--;\r
+ }\r
+ else if (evt.getY() > lastMousePress.y)\r
+ {\r
+ fontSize++;\r
+ }\r
+\r
+\r
+ if(fontSize<1)\r
+ fontSize = 1;\r
+\r
+ av.setFont(new Font(av.font.getName(), av.font.getStyle(), fontSize));\r
+ av.charWidth = oldWidth;\r
+ }\r
+ else\r
+ {\r
+ if (evt.getX() < lastMousePress.x && av.charWidth > 1)\r
+ {\r
+ av.charWidth--;\r
+ }\r
+ else if (evt.getX() > lastMousePress.x)\r
+ {\r
+ av.charWidth++;\r
+ }\r
+\r
+ if(av.charWidth<1)\r
+ {\r
+ av.charWidth = 1;\r
+ }\r
+ }\r
+\r
+ ap.fontChanged();\r
+\r
+ FontMetrics fm = getFontMetrics(av.getFont());\r
+ av.validCharWidth = fm.charWidth('M') <= av.charWidth;\r
+\r
+ lastMousePress = evt.getPoint();\r
+\r
+ ap.repaint();\r
+ ap.annotationPanel.image = null;\r
+ return;\r
+ }\r
+\r
+ if (!editingSeqs)\r
+ {\r
+ doMouseDraggedDefineMode(evt);\r
+ return;\r
+ }\r
\r
int res = findRes(evt);\r
\r
//////////////////////////////////////////\r
public void doMousePressedDefineMode(MouseEvent evt)\r
{\r
+\r
+\r
if (scrollThread != null)\r
{\r
scrollThread.running = false;\r
\r
drawBoxes(seq, start, end, y1);\r
\r
- fm = g.getFontMetrics();\r
- drawText(seq, start, end, y1);\r
-\r
+ if(av.validCharWidth)\r
+ {\r
+ fm = g.getFontMetrics();\r
+ drawText(seq, start, end, y1);\r
+ }\r
}\r
\r
public void drawBoxes(SequenceI seq, int start, int end, int y1)\r
\r
char s = '~';\r
// Need to find the sequence position here.\r
- for (int i = start; i <= end; i++)\r
+ if(av.validCharWidth)\r
{\r
- if (i < seq.getLength())\r
+ for (int i = start; i <= end; i++)\r
{\r
- s = seq.getSequence().charAt(i);\r
- }\r
+ if (i < seq.getLength())\r
+ {\r
+ s = seq.getSequence().charAt(i);\r
+ }\r
\r
- charOffset = (width - fm.charWidth(s)) / 2;\r
- graphics.drawString(String.valueOf(s),\r
- charOffset + x1 + width * (i - start),\r
- y1 + height - pady);\r
+ charOffset = (width - fm.charWidth(s)) / 2;\r
+ graphics.drawString(String.valueOf(s),\r
+ charOffset + x1 + width * (i - start),\r
+ y1 + height - pady);\r
+ }\r
}\r
}\r
\r
graphics.setColor(Color.white);\r
\r
char s = seq.getCharAt(res);\r
+ if (av.validCharWidth)\r
+ {\r
\r
- charOffset = (av.charWidth - fm.charWidth(s)) / 2;\r
- graphics.drawString(String.valueOf(s),\r
- charOffset + x1,\r
- (y1 + av.charHeight) - pady);\r
+ charOffset = (av.charWidth - fm.charWidth(s)) / 2;\r
+ graphics.drawString(String.valueOf(s),\r
+ charOffset + x1,\r
+ (y1 + av.charHeight) - pady);\r
+ }\r
}\r
\r
}\r