else\r
{\r
format = new jalview.io.IdentifyFile().Identify(file, protocol);\r
- desktop.LoadFile(file, protocol, format);\r
+ new jalview.io.FileLoader().LoadFile(file, protocol, format);\r
}\r
}\r
}\r
*/\r
public void addSequence(SequenceI snew)\r
{\r
- sequences.addElement(snew);\r
- }\r
+ if(dataset!=null)\r
+ {\r
+ Sequence ds = new Sequence(snew.getName(),\r
+ AlignSeq.extractGaps("-. ", snew.getSequence()),\r
+ snew.getStart(),\r
+ snew.getEnd());\r
\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param seq DOCUMENT ME!\r
- */\r
- public void addSequence(SequenceI[] seq)\r
- {\r
- for (int i = 0; i < seq.length; i++)\r
- {\r
- addSequence(seq[i]);\r
- }\r
+ snew.setDatasetSequence(ds);\r
+ getDataset().addSequence(ds);\r
+ }\r
+\r
+ sequences.addElement(snew);\r
}\r
\r
+\r
/** Adds a sequence to the alignment. Recalculates maxLength and size.\r
*\r
* @param snew\r
{\r
new SequenceFetcher(this);\r
}\r
+\r
+ public void addFromFile_actionPerformed(ActionEvent e)\r
+ {\r
+ Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport.alignment);\r
+ }\r
+\r
+ public void addFromText_actionPerformed(ActionEvent e)\r
+ {\r
+ Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport.alignment);\r
+ }\r
+\r
+ public void addFromURL_actionPerformed(ActionEvent e)\r
+ {\r
+ Desktop.instance.inputURLMenuItem_actionPerformed(viewport.alignment);\r
+ }\r
+\r
/**\r
* DOCUMENT ME!\r
*\r
sequences[i].getEnd());\r
\r
alignment.addSequence(newseq);\r
- if(sequences[i].getDatasetSequence()==null)\r
- {\r
- ////////////////////////////\r
- //Datset needs extension;\r
- /////////////////////////////\r
- Sequence ds = new Sequence(sequences[i].getName(),\r
- AlignSeq.extractGaps("-. ", sequences[i].getSequence()),\r
- sequences[i].getStart(),\r
- sequences[i].getEnd());\r
- newseq.setDatasetSequence(ds);\r
- alignment.getDataset().addSequence(ds);\r
- }\r
- else\r
- {\r
- newseq.setDatasetSequence(sequences[i].getDatasetSequence());\r
- }\r
}\r
viewport.setEndSeq(alignment.getHeight());\r
alignment.getWidth();\r
public class CutAndPasteTransfer extends GCutAndPasteTransfer\r
{\r
\r
+ AlignmentI addToThisAlignment;\r
+\r
public CutAndPasteTransfer()\r
{\r
SwingUtilities.invokeLater(new Runnable()\r
/**\r
* DOCUMENT ME!\r
*/\r
- public void setForInput()\r
+ public void setForInput(AlignmentI alignment)\r
{\r
- getContentPane().add(inputButtonPanel, java.awt.BorderLayout.SOUTH);\r
+ addToThisAlignment = alignment;\r
+ getContentPane().add(inputButtonPanel, java.awt.BorderLayout.SOUTH);\r
}\r
\r
/**\r
\r
if (sequences != null)\r
{\r
+ if(addToThisAlignment!=null)\r
+ {\r
+ for(int i=0; i<sequences.length; i++)\r
+ addToThisAlignment.addSequence(sequences[i]);\r
+ }\r
+ else\r
+ {\r
AlignFrame af = new AlignFrame(new Alignment(sequences));\r
af.currentFileFormat = format;\r
Desktop.addInternalFrame(af, "Cut & Paste input - " + format,\r
- AlignFrame.NEW_WINDOW_WIDTH, AlignFrame.NEW_WINDOW_HEIGHT);\r
+ AlignFrame.NEW_WINDOW_WIDTH,\r
+ AlignFrame.NEW_WINDOW_HEIGHT);\r
af.statusBar.setText("Successfully pasted alignment file");\r
\r
try\r
{\r
- af.setMaximum( jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false));\r
+ af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false));\r
}\r
catch (Exception ex)\r
{\r
}\r
\r
+ }\r
try\r
{\r
this.setClosed(true);\r
import java.awt.datatransfer.*;\r
import java.awt.dnd.*;\r
import java.awt.event.*;\r
+import java.util.*;\r
\r
import javax.swing.*;\r
\r
format = new IdentifyFile().Identify(file,\r
protocol);\r
}\r
- LoadFile(file, protocol, format);\r
+\r
+\r
+ new FileLoader().LoadFile(file, protocol, format);\r
+\r
}\r
}\r
catch (Exception ex)\r
*\r
* @param e DOCUMENT ME!\r
*/\r
- public void inputLocalFileMenuItem_actionPerformed(ActionEvent e)\r
+ public void inputLocalFileMenuItem_actionPerformed(jalview.datamodel.AlignmentI alignment)\r
{\r
JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.getProperty(\r
"LAST_DIRECTORY"),\r
String format = null;\r
if (chooser.getSelectedFormat().equals("Jalview"))\r
{\r
- format = "Jalview";\r
+ format = "Jalview";\r
}\r
else\r
{\r
format = new IdentifyFile().Identify(choice, FormatAdapter.FILE);\r
}\r
\r
- jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", format);\r
- LoadFile(choice, FormatAdapter.FILE, format);\r
+ if (alignment != null)\r
+ new FileLoader().LoadFile(alignment, choice, FormatAdapter.FILE, format);\r
+ else\r
+ new FileLoader().LoadFile(choice, FormatAdapter.FILE, format);\r
}\r
}\r
\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param file DOCUMENT ME!\r
- * @param protocol DOCUMENT ME!\r
- * @param format DOCUMENT ME!\r
- */\r
- public void LoadFile(String file, String protocol, String format)\r
- {\r
- FileLoader fileLoader = new FileLoader();\r
- fileLoader.LoadFile(file, protocol, format);\r
- }\r
+\r
\r
/**\r
* DOCUMENT ME!\r
*\r
* @param e DOCUMENT ME!\r
*/\r
- public void inputURLMenuItem_actionPerformed(ActionEvent e)\r
+ public void inputURLMenuItem_actionPerformed(jalview.datamodel.AlignmentI alignment)\r
{\r
// This construct allows us to have a wider textfield\r
// for viewing\r
JLabel label = new JLabel("Enter URL of Input File");\r
- JTextField textinput = new JTextField("http://www.", 40);\r
+ final JComboBox history = new JComboBox();\r
JPanel panel = new JPanel(new BorderLayout());\r
panel.add(label, BorderLayout.NORTH);\r
- panel.add(textinput, BorderLayout.SOUTH);\r
+ panel.add(history, BorderLayout.CENTER);\r
+ history.setPreferredSize(new Dimension(400,20));\r
+ history.setEditable(true);\r
+ history.addItem("http://www.");\r
+\r
+ String historyItems = jalview.bin.Cache.getProperty("RECENT_URL");\r
+\r
+ StringTokenizer st;\r
+\r
+ if (historyItems != null)\r
+ {\r
+ st = new StringTokenizer(historyItems, "\t");\r
\r
+ while (st.hasMoreTokens())\r
+ {\r
+ history.addItem(st.nextElement());\r
+ }\r
+ }\r
\r
int reply = JOptionPane.showInternalConfirmDialog(desktop,\r
panel, "Input Alignment From URL",\r
return;\r
}\r
\r
- String url = textinput.getText();\r
+ String url = history.getSelectedItem().toString();\r
\r
if (url.toLowerCase().endsWith(".jar"))\r
{\r
- jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", "Jalview");\r
- new Jalview2XML().LoadJalviewAlign(url);\r
+ if (alignment != null)\r
+ new FileLoader().LoadFile(alignment, url, FormatAdapter.URL, "Jalview");\r
+ else\r
+ new FileLoader().LoadFile(url, FormatAdapter.URL, "Jalview");\r
}\r
else\r
{\r
-\r
String format = new IdentifyFile().Identify(url, FormatAdapter.URL);\r
\r
if (format.equals("URL NOT FOUND"))\r
return;\r
}\r
\r
- LoadFile(url, FormatAdapter.URL, format);\r
+ if (alignment != null)\r
+ new FileLoader().LoadFile(alignment, url, FormatAdapter.URL, format);\r
+ else\r
+ new FileLoader().LoadFile(url, FormatAdapter.URL, format);\r
}\r
}\r
\r
*\r
* @param e DOCUMENT ME!\r
*/\r
- public void inputTextboxMenuItem_actionPerformed(ActionEvent e)\r
+ public void inputTextboxMenuItem_actionPerformed(jalview.datamodel.AlignmentI alignment)\r
{\r
CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
- cap.setForInput();\r
+ cap.setForInput(alignment);\r
Desktop.addInternalFrame(cap, "Cut & Paste Alignment File", 600, 500);\r
}\r
\r
import jalview.gui.AlignFrame;\r
import jalview.gui.Jalview2XML;\r
import javax.swing.JOptionPane;\r
-import jalview.datamodel.Alignment;\r
+import jalview.datamodel.*;\r
import jalview.gui.Desktop;\r
import jalview.datamodel.SequenceI;\r
+import java.util.Vector;\r
+import java.util.StringTokenizer;\r
\r
public class FileLoader\r
{\r
+ String file;\r
+ String protocol;\r
+ String format;\r
+ AlignmentI alignment;\r
+\r
+ public void LoadFile(AlignmentI alignment, String file, String protocol, String format)\r
+ {\r
+ this.alignment = alignment;\r
+ LoadFile(file, protocol, format);\r
+ }\r
+\r
public void LoadFile(String file, String protocol, String format)\r
{\r
- LoadingThread loader = new LoadingThread(file, protocol, format);\r
+ this.file = file;\r
+ this.protocol = protocol;\r
+ this.format = format;\r
+\r
+ LoadingThread loader = new LoadingThread();\r
loader.start();\r
}\r
\r
public AlignFrame LoadFileWaitTillLoaded(String file, String protocol,\r
String format)\r
{\r
- LoadingThread loader = new LoadingThread(file, protocol, format);\r
+ this.file = file;\r
+ this.protocol = protocol;\r
+ this.format = format;\r
+\r
+ LoadingThread loader = new LoadingThread();\r
loader.start();\r
while (loader.isAlive())\r
{\r
}\r
\r
\r
- class LoadingThread\r
- extends Thread\r
-{\r
- String file;\r
- String protocol;\r
- String format;\r
- AlignFrame af;\r
\r
- public LoadingThread(String file, String protocol, String format)\r
+ public void updateRecentlyOpened()\r
{\r
- this.file = file;\r
- this.protocol = protocol;\r
- this.format = format;\r
- }\r
+ Vector recent = new Vector();\r
\r
- public void run()\r
- {\r
- SequenceI[] sequences = null;\r
+ String type = protocol.equals(FormatAdapter.FILE)\r
+ ? "RECENT_FILE" : "RECENT_URL";\r
+\r
+ String historyItems = jalview.bin.Cache.getProperty(type);\r
\r
- if (format.equalsIgnoreCase("Jalview"))\r
+ StringTokenizer st;\r
+\r
+ if (historyItems != null)\r
{\r
- af = new Jalview2XML().LoadJalviewAlign(file);\r
+ st = new StringTokenizer(historyItems, "\t");\r
+\r
+ while (st.hasMoreTokens())\r
+ {\r
+ recent.addElement(st.nextElement().toString().trim());\r
+ }\r
+ }\r
+\r
+ if (recent.contains(file))\r
+ {\r
+ recent.remove(file);\r
+ }\r
+\r
+ StringBuffer newHistory = new StringBuffer(file);\r
+ for (int i = 0; i < recent.size() && i < 10; i++)\r
+ {\r
+ newHistory.append("\t");\r
+ newHistory.append(recent.elementAt(i));\r
}\r
- else\r
+\r
+ jalview.bin.Cache.setProperty(type, newHistory.toString());\r
+\r
+ if(type.equals(FormatAdapter.FILE))\r
+ jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", format);\r
+ }\r
+\r
+\r
+ class LoadingThread\r
+ extends Thread\r
+ {\r
+\r
+ AlignFrame af;\r
+\r
+\r
+ public void run()\r
{\r
- String errorMessage = AppletFormatAdapter.SUPPORTED_FORMATS;\r
+ SequenceI[] sequences = null;\r
\r
- if (FormatAdapter.formats.contains(format))\r
+ if (format.equalsIgnoreCase("Jalview"))\r
{\r
- try{\r
- sequences = new FormatAdapter().readFile(file, protocol, format);\r
- }catch(java.io.IOException ex)\r
- {\r
- errorMessage = ex.getMessage();\r
- }\r
+ af = new Jalview2XML().LoadJalviewAlign(file);\r
}\r
-\r
- if ( (sequences != null) && (sequences.length > 0))\r
+ else\r
{\r
- af = new AlignFrame(new Alignment(sequences));\r
- af.currentFileFormat = format;\r
- af.statusBar.setText("Successfully loaded file " + file);\r
-\r
- Desktop.addInternalFrame(af, file, AlignFrame.NEW_WINDOW_WIDTH,\r
- AlignFrame.NEW_WINDOW_HEIGHT);\r
+ String errorMessage = AppletFormatAdapter.SUPPORTED_FORMATS;\r
\r
+ if (FormatAdapter.formats.contains(format))\r
+ {\r
+ try\r
+ {\r
+ sequences = new FormatAdapter().readFile(file, protocol, format);\r
+ }\r
+ catch (java.io.IOException ex)\r
+ {\r
+ errorMessage = ex.getMessage();\r
+ }\r
+ }\r
\r
- try\r
+ if ( (sequences != null) && (sequences.length > 0))\r
{\r
- af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false));\r
+ if(alignment!=null)\r
+ {\r
+ for(int i=0; i<sequences.length; i++)\r
+ alignment.addSequence(sequences[i]);\r
+ }\r
+ else\r
+ {\r
+ af = new AlignFrame(new Alignment(sequences));\r
+ af.currentFileFormat = format;\r
+ af.statusBar.setText("Successfully loaded file " + file);\r
+\r
+ Desktop.addInternalFrame(af, file, AlignFrame.NEW_WINDOW_WIDTH,\r
+ AlignFrame.NEW_WINDOW_HEIGHT);\r
+\r
+ try\r
+ {\r
+ af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false));\r
+ }\r
+ catch (java.beans.PropertyVetoException ex)\r
+ {\r
+ }\r
+ }\r
+\r
}\r
- catch (Exception ex)\r
+ else\r
{\r
+ JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
+ "Couldn't load file " + file +\r
+ "\n"\r
+ + errorMessage,\r
+ "Error loading file",\r
+ JOptionPane.WARNING_MESSAGE);\r
}\r
}\r
- else\r
+\r
+ if (af != null)\r
{\r
- JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
- "Couldn't load file "+file+"\n"\r
- +errorMessage,\r
- "Error loading file",\r
- JOptionPane.WARNING_MESSAGE);\r
+ updateRecentlyOpened();\r
}\r
}\r
}\r
-}\r
\r
}\r
import java.io.*;\r
import java.awt.*;\r
import javax.swing.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
\r
public class JalviewFileChooser\r
extends JFileChooser\r
public JalviewFileChooser(String dir)\r
{\r
super(dir);\r
+ setAccessory(new RecentlyOpened());\r
}\r
\r
public JalviewFileChooser(String dir, String[] suffix, String[] desc,\r
{\r
setFileFilter(chosen);\r
}\r
+ setAccessory(new RecentlyOpened());\r
}\r
\r
+\r
public void setFileFilter(javax.swing.filechooser.FileFilter filter)\r
{\r
super.setFileFilter(filter);\r
}\r
}\r
\r
-\r
public String getSelectedFormat()\r
{\r
if(getFileFilter()==null)\r
public int showSaveDialog(Component parent)\r
throws HeadlessException\r
{\r
+ this.setAccessory(null);\r
+\r
setDialogType(SAVE_DIALOG);\r
\r
int ret = showDialog(parent, null);\r
\r
return ret;\r
}\r
+\r
+ void recentListSelectionChanged(String selection)\r
+ {\r
+ setSelectedFile(null);\r
+\r
+ File file = new File(selection);\r
+ if (getFileFilter() instanceof JalviewFileFilter)\r
+ {\r
+ JalviewFileFilter jvf = (JalviewFileFilter)this.getFileFilter();\r
+\r
+ if (!jvf.accept(file))\r
+ {\r
+ setFileFilter(getChoosableFileFilters()[0]);\r
+ }\r
+ }\r
+\r
+ setSelectedFile( file );\r
+ }\r
+\r
+ class RecentlyOpened extends JPanel\r
+ {\r
+ JList list;\r
+ public RecentlyOpened()\r
+ {\r
+ String historyItems = jalview.bin.Cache.getProperty("RECENT_FILE");\r
+ StringTokenizer st;\r
+ Vector recent = new Vector();\r
+\r
+ if (historyItems != null)\r
+ {\r
+ st = new StringTokenizer(historyItems, "\t");\r
+\r
+ while (st.hasMoreTokens())\r
+ {\r
+ recent.addElement(st.nextElement());\r
+ }\r
+ }\r
+\r
+ list = new JList(recent);\r
+ list.addMouseListener(new MouseAdapter()\r
+ {\r
+ public void mousePressed(MouseEvent evt)\r
+ {\r
+ recentListSelectionChanged(list.getSelectedValue().toString());\r
+ }\r
+ });\r
+\r
+ this.setBorder(new javax.swing.border.TitledBorder("Recently Opened"));\r
+\r
+ JScrollPane scroller = new JScrollPane(list);\r
+ scroller.setPreferredSize(new Dimension(250, 200));\r
+ this.add(scroller);\r
+ scroller.getHorizontalScrollBar()\r
+ .setValue(scroller.getHorizontalScrollBar().getMaximum()\r
+ );\r
+\r
+ }\r
+\r
+ }\r
}\r
\r
\r
\r
+\r
+\r
\r
JMenuItem associatedData = new JMenuItem();\r
protected JCheckBoxMenuItem autoCalculate = new JCheckBoxMenuItem();\r
+ JMenu addSequenceMenu = new JMenu();\r
+ JMenuItem addFromFile = new JMenuItem();\r
+ JMenuItem addFromText = new JMenuItem();\r
+ JMenuItem addFromURL = new JMenuItem();\r
public GAlignFrame()\r
{\r
\r
autoCalculate_actionPerformed(e);\r
}\r
});\r
+ addSequenceMenu.setText("Add Sequences");\r
+ addFromFile.setText("From File");\r
+ addFromFile.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ addFromFile_actionPerformed(e);\r
+ }\r
+ });\r
+ addFromText.setText("From Textbox");\r
+ addFromText.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ addFromText_actionPerformed(e);\r
+ }\r
+ });\r
+ addFromURL.setText("From URL");\r
+ addFromURL.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ addFromURL_actionPerformed(e);\r
+ }\r
+ });\r
alignFrameMenuBar.add(fileMenu);\r
alignFrameMenuBar.add(editMenu);\r
alignFrameMenuBar.add(searchMenu);\r
alignFrameMenuBar.add(colourMenu);\r
alignFrameMenuBar.add(calculateMenu);\r
alignFrameMenuBar.add(webService);\r
+ fileMenu.add(addSequenceMenu);\r
fileMenu.add(fetchSequence);\r
fileMenu.addSeparator();\r
fileMenu.add(vamsasStore);\r
jMenu2.add(htmlMenuItem);\r
jMenu2.add(epsFile);\r
jMenu2.add(createPNG);\r
+ addSequenceMenu.add(addFromFile);\r
+ addSequenceMenu.add(addFromText);\r
+ addSequenceMenu.add(addFromURL);\r
}\r
\r
protected void outputText_actionPerformed(ActionEvent e)\r
{\r
\r
}\r
+\r
+ public void addFromFile_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ public void addFromText_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ public void addFromURL_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
}\r
{\r
public void actionPerformed(ActionEvent e)\r
{\r
- inputLocalFileMenuItem_actionPerformed(e);\r
+ inputLocalFileMenuItem_actionPerformed(null);\r
}\r
});\r
inputURLMenuItem.setMnemonic('U');\r
{\r
public void actionPerformed(ActionEvent e)\r
{\r
- inputURLMenuItem_actionPerformed(e);\r
+ inputURLMenuItem_actionPerformed(null);\r
}\r
});\r
inputTextboxMenuItem.setMnemonic('C');\r
{\r
public void actionPerformed(ActionEvent e)\r
{\r
- inputTextboxMenuItem_actionPerformed(e);\r
+ inputTextboxMenuItem_actionPerformed(null);\r
}\r
});\r
quit.setMnemonic('Q');\r
*\r
* @param e DOCUMENT ME!\r
*/\r
- protected void inputLocalFileMenuItem_actionPerformed(ActionEvent e)\r
+ protected void inputLocalFileMenuItem_actionPerformed(jalview.datamodel.AlignmentI al)\r
{\r
}\r
\r
*\r
* @param e DOCUMENT ME!\r
*/\r
- protected void inputURLMenuItem_actionPerformed(ActionEvent e)\r
+ protected void inputURLMenuItem_actionPerformed(jalview.datamodel.AlignmentI al)\r
{\r
}\r
\r
*\r
* @param e DOCUMENT ME!\r
*/\r
- protected void inputTextboxMenuItem_actionPerformed(ActionEvent e)\r
+ protected void inputTextboxMenuItem_actionPerformed(jalview.datamodel.AlignmentI al)\r
{\r
}\r
\r