+ JInternalFrame frame = new JInternalFrame();\r
+ ClustalThread ct = new ClustalThread(frame);\r
+ Thread t = new Thread(ct);\r
+ t.start();\r
+ frame.setContentPane(ct);\r
+ Desktop.addInternalFrame(frame, title, 300, 80);\r
+\r
+ }\r
+\r
+ class ClustalThread extends JPanel implements Runnable\r
+ {\r
+ Image [] image;\r
+ int imageIndex = 0;\r
+ boolean webServiceRunning = false;\r
+ JInternalFrame frame;\r
+ public ClustalThread(JInternalFrame frame)\r
+ {\r
+ this.frame = frame;\r
+ image = new Image[9];\r
+ for(int i=0; i<9; i++)\r
+ {\r
+ java.net.URL url = getClass().getResource("/images/dna" + (i+1) + ".gif");\r
+ if (url != null)\r
+ {\r
+ image[i] = java.awt.Toolkit.getDefaultToolkit().createImage(url);\r
+ MediaTracker mt = new MediaTracker(this);\r
+ mt.addImage(image[i], i);\r
+ try{mt.waitForID(i);}\r
+ catch(Exception ex){}\r
+ }\r
+ }\r
+ DNATwirler twirler = new DNATwirler();\r
+ twirler.start();\r
+ webServiceRunning = true;\r
+ }\r
+\r
+ class DNATwirler extends Thread\r
+ {\r
+ public void run()\r
+ {\r
+ while(webServiceRunning)\r
+ {\r
+ try{\r
+ Thread.sleep(100);\r
+ imageIndex++;\r
+ imageIndex %=9;\r
+ repaint();\r
+ }\r
+ catch(Exception ex){}\r
+ }\r
+ }\r
+ }\r
+\r
+ // JBPNote\r
+ // Should check to see if the server settings are valid\r
+ // Need visual-delay indication here.\r
+ public void run()\r
+ {\r
+ jalview.ws.Jemboss jemboss = new jalview.ws.Jemboss();\r
+ Vector sv = viewport.getAlignment().getSequences();\r
+ SequenceI[] seqs = new SequenceI[sv.size()];\r
+\r
+ int i = 0;\r
+ do\r
+ {\r
+ seqs[i] = (SequenceI) sv.elementAt(i);\r
+ }\r
+ while (++i < sv.size());\r
+\r
+ SequenceI[] alignment = jemboss.clustalW(seqs); // gaps removed within method\r
+\r
+ if (alignment != null)\r
+ {\r
+ AlignFrame af = new AlignFrame(new Alignment(alignment));\r
+ af.clustalColour.setSelected(true);\r
+ af.clustalColour_actionPerformed(null);\r
+ Desktop.addInternalFrame(af, getTitle().concat(" - ClustalW Alignment"),\r
+ 700, 500); // JBPNote - is there a new window geom. property ?\r
+ }\r
+ else\r
+ JOptionPane.showMessageDialog(Desktop.desktop, "Problem obtaining clustal alignment", "Web service error",\r
+ JOptionPane.WARNING_MESSAGE);\r
+\r
+ webServiceRunning = false;\r
+ try{\r
+ frame.setClosed(true);\r
+ }catch(Exception ex){}\r
+ }\r
+\r
+ public void paintComponent(Graphics g)\r
+ {\r
+ g.setColor(Color.white);\r
+ g.fillRect(0,0,getWidth(), getHeight());\r
+ if(image!=null)\r
+ {\r
+ g.drawImage(image[imageIndex],10,10,this);\r
+ }\r
+ g.setFont(new Font("Arial", Font.BOLD, 12));\r
+ g.setColor(Color.black);\r
+ g.drawString("Clustal Alignment Web Service running", 30,30);\r
+ }\r
+ }\r
+ protected void jpred_actionPerformed(ActionEvent e)\r
+{\r
+\r
+\r
+ JInternalFrame frame = new JInternalFrame();\r
+ JPredClient ct = new JPredClient((SequenceI)\r
+ viewport.getAlignment().getSequences().elementAt(0));\r
+ }\r
+\r
+ protected void LoadtreeMenuItem_actionPerformed(ActionEvent e) {\r
+ // Pick the tree file\r
+ JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.\r
+ getProperty("LAST_DIRECTORY"));\r
+ chooser.setFileView(new JalviewFileView());\r
+ chooser.setDialogTitle("Select a newick-like tree file");\r
+ chooser.setToolTipText("Load a tree file");\r
+ int value = chooser.showOpenDialog(null);\r
+ if (value == JalviewFileChooser.APPROVE_OPTION)\r
+ {\r
+ String choice = chooser.getSelectedFile().getPath();\r
+ jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);\r
+ TreePanel treepanel = null;\r
+ try\r
+ {\r
+ jalview.io.NewickFile fin = new jalview.io.NewickFile(choice, "File");\r
+ fin.parse();\r
+\r
+ if (fin.getTree() != null)\r
+ {\r
+ TreePanel tp = null;\r
+ tp = new TreePanel(viewport, viewport.getAlignment().getSequences(),\r
+ fin, "FromFile", choice);\r
+ Desktop.addInternalFrame(tp, title, 600, 500);\r
+ }\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ JOptionPane.showMessageDialog(Desktop.desktop,\r
+ "Problem reading tree file",\r
+ ex.getMessage(),\r
+ JOptionPane.WARNING_MESSAGE);\r
+ ex.printStackTrace();\r
+ }\r
+ }\r