From 2df9d1cb0e8975c84486ddc4728062e377adbb1f Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Tue, 2 May 2006 12:23:01 +0000 Subject: [PATCH] Middle mouse to compress alignment --- src/jalview/appletgui/AnnotationPanel.java | 17 +++--- src/jalview/appletgui/FeatureRenderer.java | 4 ++ src/jalview/appletgui/ScalePanel.java | 12 +++- src/jalview/appletgui/SeqPanel.java | 82 +++++++++++++++++++++++++-- src/jalview/appletgui/SequenceRenderer.java | 38 ++++++++----- 5 files changed, 123 insertions(+), 30 deletions(-) diff --git a/src/jalview/appletgui/AnnotationPanel.java b/src/jalview/appletgui/AnnotationPanel.java index daa68d1..1bf3d38 100755 --- a/src/jalview/appletgui/AnnotationPanel.java +++ b/src/jalview/appletgui/AnnotationPanel.java @@ -60,7 +60,7 @@ public class AnnotationPanel this.ap = ap; av = ap.av; - this.setLayout(null); + setLayout(null); adjustPanelHeight(); addMouseMotionListener(new MouseMotionAdapter() @@ -131,9 +131,6 @@ public class AnnotationPanel } this.setSize(getSize().width, height); - if(ap!=null) - ap.annotationScroller.setSize(getSize().width, height); - repaint(); @@ -211,6 +208,8 @@ public class AnnotationPanel public void paint(Graphics g) { + + imgWidth = (av.endRes - av.startRes + 1) * av.charWidth; if (image == null || imgWidth != image.getWidth(this)) @@ -230,6 +229,8 @@ public class AnnotationPanel } drawComponent(gg, av.startRes, av.endRes + 1); + g.setColor(Color.white); + g.fillRect(0, 0, getSize().width, getSize().height); g.drawImage(image, 0, 0, this); } @@ -291,14 +292,14 @@ public class AnnotationPanel g.setColor(Color.white); g.fillRect(0, 0, getSize().width, getSize().height); g.setColor(Color.black); - g.drawString("Alignment has no annotations", 20, 15); + if(av.validCharWidth) + g.drawString("Alignment has no annotations", 20, 15); return; } AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation(); - int j; int x = 0; int y = 0; char lastSS; @@ -361,8 +362,8 @@ public class AnnotationPanel x = (column - startRes) * av.charWidth; - if (validRes && - (row.annotations[column].displayCharacter.length() > 0)) + if (av.validCharWidth && validRes && + (row.annotations[column].displayCharacter.length() > 0)) { int charOffset = (av.charWidth - fm.charWidth(row.annotations[column].displayCharacter.charAt( diff --git a/src/jalview/appletgui/FeatureRenderer.java b/src/jalview/appletgui/FeatureRenderer.java index 83a8340..900de83 100755 --- a/src/jalview/appletgui/FeatureRenderer.java +++ b/src/jalview/appletgui/FeatureRenderer.java @@ -1,3 +1,4 @@ + /* * Jalview - A Sequence Alignment Editor and Viewer * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle @@ -281,6 +282,9 @@ public class FeatureRenderer g.fillRect( (i - start) * width, y1, width, height); + if(!av.validCharWidth) + continue; + g.setColor(Color.white); charOffset = (width - fm.charWidth(s)) / 2; g.drawString(String.valueOf(s), diff --git a/src/jalview/appletgui/ScalePanel.java b/src/jalview/appletgui/ScalePanel.java index fc7be6d..f8706ae 100755 --- a/src/jalview/appletgui/ScalePanel.java +++ b/src/jalview/appletgui/ScalePanel.java @@ -204,11 +204,21 @@ public class ScalePanel scalestartx += 5; } + String string; + int maxX=0; + for (int i = scalestartx; i < endx; i += 5) { if (i % 10 == 0) { - gg.drawString(String.valueOf(i), (i - startx - 1) * av.charWidth, y); + string = String.valueOf(i); + if ( (i - startx - 1) * av.charWidth > maxX) + { + gg.drawString(string, + (i - startx - 1) * av.charWidth, y); + maxX = (i - startx + 1) * av.charWidth + fm.stringWidth(string); + } + gg.drawLine( (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2), y + 2, (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2), diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index 987b0b8..87e9bec 100755 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -55,6 +55,9 @@ public class SeqPanel StringBuffer keyboardNo1; StringBuffer keyboardNo2; + boolean mouseWheelPressed = false; + Point lastMousePress; + public SeqPanel(AlignViewport avp, AlignmentPanel p) { this.av = avp; @@ -314,6 +317,15 @@ public class SeqPanel } public void mousePressed(MouseEvent evt) { + lastMousePress = evt.getPoint(); + + if ( (evt.getModifiers() & InputEvent.BUTTON2_MASK) == + InputEvent.BUTTON2_MASK) + { + mouseWheelPressed = true; + return; + } + if (evt.isShiftDown() || evt.isAltDown() || evt.isControlDown()) { @@ -360,6 +372,7 @@ public class SeqPanel public void mouseReleased(MouseEvent evt) { mouseDragging = false; + mouseWheelPressed = false; if (!editingSeqs) { @@ -370,7 +383,7 @@ public class SeqPanel editOccurred(); endEditing(); - ap.repaint(); + ap.repaint(); } int startWrapBlock=-1; @@ -566,11 +579,66 @@ public class SeqPanel public void mouseDragged(MouseEvent evt) { - if (!editingSeqs) -{ - doMouseDraggedDefineMode(evt); - return; -} + if (mouseWheelPressed) + { + int oldWidth = av.charWidth; + + //Which is bigger, left-right or up-down? + if (Math.abs(evt.getY() - lastMousePress.y) + > Math.abs(evt.getX() - lastMousePress.x)) + { + int fontSize = av.font.getSize(); + + if (evt.getY() < lastMousePress.y && av.charHeight > 1) + { + fontSize--; + } + else if (evt.getY() > lastMousePress.y) + { + fontSize++; + } + + + if(fontSize<1) + fontSize = 1; + + av.setFont(new Font(av.font.getName(), av.font.getStyle(), fontSize)); + av.charWidth = oldWidth; + } + else + { + if (evt.getX() < lastMousePress.x && av.charWidth > 1) + { + av.charWidth--; + } + else if (evt.getX() > lastMousePress.x) + { + av.charWidth++; + } + + if(av.charWidth<1) + { + av.charWidth = 1; + } + } + + ap.fontChanged(); + + FontMetrics fm = getFontMetrics(av.getFont()); + av.validCharWidth = fm.charWidth('M') <= av.charWidth; + + lastMousePress = evt.getPoint(); + + ap.repaint(); + ap.annotationPanel.image = null; + return; + } + + if (!editingSeqs) + { + doMouseDraggedDefineMode(evt); + return; + } int res = findRes(evt); @@ -925,6 +993,8 @@ public class SeqPanel ////////////////////////////////////////// public void doMousePressedDefineMode(MouseEvent evt) { + + if (scrollThread != null) { scrollThread.running = false; diff --git a/src/jalview/appletgui/SequenceRenderer.java b/src/jalview/appletgui/SequenceRenderer.java index 891dfab..9dbb05c 100755 --- a/src/jalview/appletgui/SequenceRenderer.java +++ b/src/jalview/appletgui/SequenceRenderer.java @@ -97,9 +97,11 @@ public class SequenceRenderer drawBoxes(seq, start, end, y1); - fm = g.getFontMetrics(); - drawText(seq, start, end, y1); - + if(av.validCharWidth) + { + fm = g.getFontMetrics(); + drawText(seq, start, end, y1); + } } public void drawBoxes(SequenceI seq, int start, int end, int y1) @@ -250,17 +252,20 @@ public class SequenceRenderer char s = '~'; // Need to find the sequence position here. - for (int i = start; i <= end; i++) + if(av.validCharWidth) { - if (i < seq.getLength()) + for (int i = start; i <= end; i++) { - s = seq.getSequence().charAt(i); - } + if (i < seq.getLength()) + { + s = seq.getSequence().charAt(i); + } - charOffset = (width - fm.charWidth(s)) / 2; - graphics.drawString(String.valueOf(s), - charOffset + x1 + width * (i - start), - y1 + height - pady); + charOffset = (width - fm.charWidth(s)) / 2; + graphics.drawString(String.valueOf(s), + charOffset + x1 + width * (i - start), + y1 + height - pady); + } } } @@ -275,11 +280,14 @@ public class SequenceRenderer graphics.setColor(Color.white); char s = seq.getCharAt(res); + if (av.validCharWidth) + { - charOffset = (av.charWidth - fm.charWidth(s)) / 2; - graphics.drawString(String.valueOf(s), - charOffset + x1, - (y1 + av.charHeight) - pady); + charOffset = (av.charWidth - fm.charWidth(s)) / 2; + graphics.drawString(String.valueOf(s), + charOffset + x1, + (y1 + av.charHeight) - pady); + } } } -- 1.7.10.2