/*\r
* Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
*\r
* This program is free software; you can redistribute it and/or\r
* modify it under the terms of the GNU General Public License\r
boolean stretchingGroup = false;\r
int min; //used by mouseDragged to see if user\r
int max; //used by mouseDragged to see if user\r
+ boolean mouseDragging = false;\r
\r
// wants to delete columns\r
public ScalePanel(AlignViewport av, AlignmentPanel ap)\r
min = res;\r
max = res;\r
\r
- if(reveal != null && SwingUtilities.isRightMouseButton(evt))\r
+ if (SwingUtilities.isRightMouseButton(evt))\r
+ {\r
+ JPopupMenu pop = new JPopupMenu();\r
+ if (reveal != null)\r
{\r
- JPopupMenu pop = new JPopupMenu();\r
JMenuItem item = new JMenuItem("Reveal");\r
item.addActionListener(new ActionListener()\r
{\r
public void actionPerformed(ActionEvent e)\r
{\r
- av.getColumnSelection().revealHiddenColumns(reveal[0], av);\r
+ av.showColumn(reveal[0]);\r
reveal = null;\r
ap.repaint();\r
+ if (ap.overviewPanel != null)\r
+ ap.overviewPanel.updateOverviewImage();\r
}\r
});\r
pop.add(item);\r
\r
- if(av.getColumnSelection().hiddenColumns.size()>1)\r
+ if (av.getColumnSelection().getHiddenColumns().size() > 1)\r
{\r
item = new JMenuItem("Reveal All");\r
item.addActionListener(new ActionListener()\r
{\r
public void actionPerformed(ActionEvent e)\r
{\r
- av.getColumnSelection().revealAllHiddenColumns(av);\r
+ av.showAllHiddenColumns();\r
reveal = null;\r
ap.repaint();\r
+ if (ap.overviewPanel != null)\r
+ ap.overviewPanel.updateOverviewImage();\r
}\r
});\r
pop.add(item);\r
}\r
-\r
pop.show(this, evt.getX(), evt.getY());\r
-\r
}\r
- else if (av.getColumnSelection().contains(res))\r
- {\r
- if( SwingUtilities.isRightMouseButton(evt))\r
+ else if (av.getColumnSelection().contains(res))\r
{\r
- JPopupMenu pop = new JPopupMenu();\r
JMenuItem item = new JMenuItem("Hide Columns");\r
item.addActionListener(new ActionListener()\r
{\r
public void actionPerformed(ActionEvent e)\r
{\r
- av.getColumnSelection().hideColumns(res, av);\r
+ av.hideColumns(res, res);\r
+ if(av.getSelectionGroup()!=null\r
+ && av.getSelectionGroup().getSize()==av.alignment.getHeight())\r
+ av.setSelectionGroup(null);\r
+\r
ap.repaint();\r
+ if (ap.overviewPanel != null)\r
+ ap.overviewPanel.updateOverviewImage();\r
}\r
});\r
pop.add(item);\r
pop.show(this, evt.getX(), evt.getY());\r
-\r
- }\r
- else\r
- {\r
- av.getColumnSelection().removeElement(res);\r
- av.setSelectionGroup(null);\r
}\r
}\r
- else\r
+ else // LEFT MOUSE TO SELECT\r
{\r
- av.getColumnSelection().addElement(res);\r
- SequenceGroup sg = new SequenceGroup();\r
+ if (!evt.isControlDown() && !evt.isShiftDown())\r
+ {\r
+ av.getColumnSelection().clear();\r
+ }\r
+\r
+ av.getColumnSelection().addElement(res);\r
+ SequenceGroup sg = new SequenceGroup();\r
+ for (int i = 0; i < av.alignment.getSequences().size(); i++)\r
+ {\r
+ sg.addSequence(av.alignment.getSequenceAt(i), false);\r
+ }\r
+\r
+ sg.setStartRes(res);\r
+ sg.setEndRes(res);\r
+ av.setSelectionGroup(sg);\r
\r
- for (int i = 0; i < av.alignment.getSequences().size(); i++)\r
+ if(evt.isShiftDown())\r
+ {\r
+ int min = Math.min(av.getColumnSelection().getMin(), res);\r
+ int max = Math.max(av.getColumnSelection().getMax(), res);\r
+ for (int i = min; i<max; i++)\r
{\r
- sg.addSequence(av.alignment.getSequenceAt(i), false);\r
+ av.getColumnSelection().addElement(i);\r
}\r
+ sg.setStartRes(min);\r
+ sg.setEndRes(max);\r
+ }\r
+\r
\r
- sg.setStartRes(res);\r
- sg.setEndRes(res);\r
- av.setSelectionGroup(sg);\r
}\r
\r
\r
*/\r
public void mouseReleased(MouseEvent evt)\r
{\r
+ mouseDragging = false;\r
+\r
int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
\r
+ if(res> av.alignment.getWidth())\r
+ {\r
+ res = av.alignment.getWidth()-1;\r
+ }\r
+\r
if(av.hasHiddenColumns)\r
res = av.getColumnSelection().adjustForHiddenColumns(res);\r
\r
\r
SequenceGroup sg = av.getSelectionGroup();\r
\r
- if (res > sg.getStartRes())\r
- {\r
+ if(sg!=null){\r
+ if (res > sg.getStartRes())\r
+ {\r
sg.setEndRes(res);\r
- }\r
- else if (res < sg.getStartRes())\r
- {\r
+ }\r
+ else if (res < sg.getStartRes())\r
+ {\r
sg.setStartRes(res);\r
+ }\r
}\r
-\r
stretchingGroup = false;\r
ap.repaint();\r
}\r
*/\r
public void mouseDragged(MouseEvent evt)\r
{\r
+ mouseDragging = true;\r
+\r
int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
+ if(res<0)\r
+ res = 0;\r
\r
if(av.hasHiddenColumns)\r
res = av.getColumnSelection().adjustForHiddenColumns(res);\r
\r
+\r
+ if(res> av.alignment.getWidth())\r
+ {\r
+ res = av.alignment.getWidth()-1;\r
+ }\r
+\r
if (res < min)\r
{\r
min = res;\r
max = res;\r
}\r
\r
+\r
+\r
SequenceGroup sg = av.getSelectionGroup();\r
\r
if (sg != null)\r
{\r
sg.setEndRes(res);\r
}\r
- else if (res < sg.getStartRes())\r
+ if (res < sg.getStartRes())\r
{\r
sg.setStartRes(res);\r
}\r
}\r
}\r
\r
- public void mouseEntered(MouseEvent evt){}\r
- public void mouseExited(MouseEvent evt){}\r
+ public void mouseEntered(MouseEvent evt)\r
+ {\r
+ if(mouseDragging)\r
+ ap.seqPanel.scrollCanvas(null);\r
+ }\r
+\r
+ public void mouseExited(MouseEvent evt)\r
+ {\r
+ if(mouseDragging)\r
+ ap.seqPanel.scrollCanvas(evt);\r
+ }\r
+\r
public void mouseClicked(MouseEvent evt){}\r
\r
public void mouseMoved(MouseEvent evt)\r
if(res+1==region[0] || res-1==region[1])\r
{\r
reveal = region;\r
+ ToolTipManager.sharedInstance().registerComponent(this);\r
+ this.setToolTipText("Reveal Hidden Columns with Right Mouse Button");\r
break;\r
}\r
+ else\r
+ this.setToolTipText(null);\r
+\r
}\r
\r
repaint();\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(av.getColumnSelection().adjustForHiddenColumns(i)),\r
- (i - startx - 1) * av.charWidth, y);\r
- gg.drawLine((int) (((i - startx - 1) * av.charWidth) +\r
- (av.charWidth / 2)), y + 2,\r
- (int) (((i - startx - 1) * av.charWidth) +\r
- (av.charWidth / 2)), y + (fm.getDescent() * 2));\r
+ string = String.valueOf(av.getColumnSelection().adjustForHiddenColumns(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) +\r
+ (av.charWidth / 2)), y + 2,\r
+ (int) ( ( (i - startx - 1) * av.charWidth) +\r
+ (av.charWidth / 2)),\r
+ y + (fm.getDescent() * 2));\r
+\r
}\r
else\r
{\r
{\r
gg.setColor(Color.blue);\r
int res;\r
- for (int i = 0; i < av.getColumnSelection().getHiddenColumns().size(); i++)\r
+ if(av.getShowHiddenMarkers())\r
{\r
- res = av.getColumnSelection().findHiddenRegionPosition( i )-startx;\r
+ for (int i = 0; i < av.getColumnSelection().getHiddenColumns().size();\r
+ i++)\r
+ {\r
\r
- gg.fillPolygon(new int[] { res*av.charWidth - 4,\r
- res*av.charWidth + 4,\r
- res*av.charWidth },\r
- new int[]\r
- {\r
- y-av.charHeight/2 , y-av.charHeight/2 ,\r
- y + 8\r
- }, 3);\r
+ res = av.getColumnSelection().findHiddenRegionPosition(i) -\r
+ startx;\r
\r
+ if(res < 0 || res > endx-scalestartx)\r
+ continue;\r
+\r
+ gg.fillPolygon(new int[]\r
+ {res * av.charWidth - av.charHeight / 4,\r
+ res * av.charWidth + av.charHeight / 4,\r
+ res * av.charWidth},\r
+ new int[]\r
+ {\r
+ y - av.charHeight / 2, y - av.charHeight / 2,\r
+ y + 8\r
+ }, 3);\r
+\r
+ }\r
}\r
\r
if (reveal != null && reveal[0] > startx && reveal[0] < endx)\r