+\r
+ // this class allows scrolling off the bottom of the visible alignment\r
+ class ScrollThread\r
+ extends Thread\r
+ {\r
+ boolean running = false;\r
+ boolean up = true;\r
+ public ScrollThread(boolean up)\r
+ {\r
+ this.up = up;\r
+ start();\r
+ }\r
+\r
+ public void stopScrolling()\r
+ {\r
+ running = false;\r
+ }\r
+\r
+ public void run()\r
+ {\r
+ running = true;\r
+ while (running)\r
+ {\r
+ if(alignPanel.scrollUp(up))\r
+ {\r
+ // scroll was ok, so add new sequence to selection\r
+ int seq = av.getStartSeq();\r
+ if(!up)\r
+ seq = av.getEndSeq();\r
+\r
+ if (seq < lastid)\r
+ selectSeqs(lastid - 1, seq);\r
+ else if (seq > lastid)\r
+ selectSeqs(lastid + 1, seq);\r
+\r
+ lastid = seq;\r
+ }\r
+ else\r
+ running = false;\r
+\r
+ alignPanel.repaint();\r
+ try\r
+ {\r
+ Thread.sleep(100);\r
+ }\r
+ catch (Exception ex)\r
+ {}\r
+ }\r
+ }\r
+}\r
+\r