+/**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @author $author$\r
+ * @version $Revision$\r
+ */\r
+public class SeqPanel extends JPanel\r
+{\r
+ /** DOCUMENT ME!! */\r
+ public SeqCanvas seqCanvas;\r
+\r
+ /** DOCUMENT ME!! */\r
+ public AlignmentPanel ap;\r
+ protected int lastres;\r
+ protected int startseq;\r
+ int startEdit = -1;\r
+ int endEdit = -1;\r
+ protected AlignViewport av;\r
+\r
+ // if character is inserted or deleted, we will need to recalculate the conservation\r
+ int seqEditOccurred = -1;\r
+ ScrollThread scrollThread = null;\r
+ boolean mouseDragging = false;\r
+ boolean editingSeqs = false;\r
+ boolean groupEditing = false;\r
+\r
+ //////////////////////////////////////////\r
+ /////Everything below this is for defining the boundary of the rubberband\r
+ //////////////////////////////////////////\r
+ int oldSeq = -1;\r
+ boolean changeEndSeq = false;\r
+ boolean changeStartSeq = false;\r
+ boolean changeEndRes = false;\r
+ boolean changeStartRes = false;\r
+ SequenceGroup stretchGroup = null;\r
+ boolean remove = false;\r
+\r
+ boolean mouseWheelPressed = false;\r
+\r
+ /**\r
+ * Creates a new SeqPanel object.\r
+ *\r
+ * @param avp DOCUMENT ME!\r
+ * @param p DOCUMENT ME!\r
+ */\r
+ public SeqPanel(AlignViewport avp, AlignmentPanel p)\r
+ {\r
+ ToolTipManager.sharedInstance().registerComponent(this);\r
+ ToolTipManager.sharedInstance().setInitialDelay(0);\r
+ ToolTipManager.sharedInstance().setDismissDelay(10000);\r
+ this.av = avp;\r
+ setBackground(Color.white);\r
+\r
+ seqCanvas = new SeqCanvas(avp);\r
+ setLayout(new BorderLayout());\r
+ add(seqCanvas, BorderLayout.CENTER);\r
+\r
+ ap = p;\r
+\r
+\r
+ addMouseMotionListener(new MouseMotionAdapter()\r
+ {\r
+ public void mouseMoved(MouseEvent evt)\r
+ {\r
+ doMouseMoved(evt);\r
+ if (editingSeqs)\r
+ {\r
+ // This is because MacOSX creates a mouseMoved\r
+ // If control is down\r
+ if(!av.isDataset())\r
+ doMouseDragged(evt);\r
+ }\r
+ }\r
+\r
+ public void mouseDragged(MouseEvent evt)\r
+ {\r
+ if (editingSeqs)\r
+ {\r
+ if(!av.isDataset())\r
+ doMouseDragged(evt);\r
+ }\r
+ else\r
+ {\r
+ if(!av.isDataset())\r
+ doMouseDraggedDefineMode(evt);\r
+ }\r
+ }\r
+ });\r
+\r
+ addMouseWheelListener(new MouseWheelListener()\r
+ {\r
+ public void mouseWheelMoved(MouseWheelEvent e)\r
+ {\r
+\r
+ if (mouseWheelPressed)\r
+ {\r
+ Font font = av.getFont();\r
+ int fontSize = font.getSize();\r
+ if (e.getWheelRotation() > 0 && fontSize < 51)\r
+ fontSize++;\r
+ else if (fontSize > 1)\r
+ fontSize--;\r
+\r
+ av.setFont(new Font(font.getName(), font.getStyle(), fontSize));\r
+ ap.fontChanged();\r
+ }\r
+ else\r
+ {\r
+ if (e.getWheelRotation() > 0)\r
+ ap.scrollUp(false);\r
+ else\r
+ ap.scrollUp(true);\r
+ }\r
+\r
+ }\r
+ });\r
+\r
+\r
+ if(!av.isDataset())\r
+ {\r
+ addMouseListener(new MouseAdapter()\r
+ {\r
+ public void mouseReleased(MouseEvent evt)\r
+ {\r
+ mouseWheelPressed = false;\r
+\r
+ if (editingSeqs)\r
+ {\r
+ doMouseReleased(evt);\r
+ }\r
+ else\r
+ {\r
+ doMouseReleasedDefineMode(evt);\r
+ }\r
+ }\r
+\r
+ public void mousePressed(MouseEvent evt)\r
+ {\r
+ if (javax.swing.SwingUtilities.isMiddleMouseButton(evt))\r
+ {\r
+ mouseWheelPressed = true;\r
+ return;\r
+ }\r
+\r
+ if (evt.isShiftDown() || evt.isAltDown() ||\r
+ evt.isControlDown())\r
+ {\r
+ if (evt.isAltDown() || evt.isControlDown())\r
+ {\r
+ groupEditing = true;\r
+\r
+ }\r
+\r
+ editingSeqs = true;\r
+ doMousePressed(evt);\r
+ }\r
+ else\r
+ {\r
+ doMousePressedDefineMode(evt);\r
+ }\r
+ }\r
+\r
+ public void mouseExited(MouseEvent evt)\r
+ {\r
+ if (editingSeqs)\r
+ {\r
+ return;\r
+ }\r
+\r
+ doMouseExitedDefineMode(evt);\r
+ }\r
+\r
+ public void mouseEntered(MouseEvent evt)\r
+ {\r
+ if (editingSeqs)\r
+ {\r
+ return;\r
+ }\r
+\r
+ doMouseEnteredDefineMode(evt);\r
+ }\r
+ });\r
+ }\r
+ }\r
+\r
+ int startWrapBlock=-1;\r
+ int wrappedBlock=-1;\r
+ int findRes(MouseEvent evt)\r
+ {\r
+ int res = 0;\r
+ int x = evt.getX();\r