X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=855ccbcbe37978496a1fb910c560178c022cfb50;hb=da5decd141e510a3a5ffb0b0e315c61c1ceb39a4;hp=b8f8eabf5a2e2bf062d6594f26b97188baa7e858;hpb=545a83a3607f98d0a1337cdf5954d6215be8cf94;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index b8f8eab..855ccbc 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -115,6 +115,7 @@ import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JProgressBar; +import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import javax.swing.event.HyperlinkEvent; @@ -394,13 +395,11 @@ public class Desktop extends jalview.jbgui.GDesktop int yPos = Math.max(5, (screenSize.height - 650) / 2); setBounds(xPos, yPos, 900, 650); } - /** - * BH 2018 - * - * @j2sNative - */ - { - + + boolean doFullLoad = /** @j2sNative ! */true; + + if (doFullLoad) { + jconsole = new Console(this, showjconsole); // add essential build information jconsole.setHeader("Jalview Version: " @@ -464,7 +463,7 @@ public class Desktop extends jalview.jbgui.GDesktop }); - } // end BH 2018 ignore + } this.setDropTarget(new java.awt.dnd.DropTarget(desktop, this)); @@ -541,7 +540,7 @@ public class Desktop extends jalview.jbgui.GDesktop { final Desktop me = this; // Thread off the news reader, in case there are connection problems. - addDialogThread(new Runnable() + new Thread(new Runnable() { @Override public void run() @@ -551,13 +550,13 @@ public class Desktop extends jalview.jbgui.GDesktop showNews.setVisible(true); Cache.log.debug("Completed news thread."); } - }); + }).start(); } public void getIdentifiersOrgData() { // Thread off the identifiers fetcher - addDialogThread(new Runnable() + new Thread(new Runnable() { @Override public void run() @@ -574,7 +573,8 @@ public class Desktop extends jalview.jbgui.GDesktop + e.getMessage()); } } - }); + }).start(); + ; } @Override @@ -1148,10 +1148,9 @@ public class Desktop extends jalview.jbgui.GDesktop } /** - * DOCUMENT ME! + * Shows a dialog for input of a URL at which to retrieve alignment data * - * @param e - * DOCUMENT ME! + * @param viewport */ @Override public void inputURLMenuItem_actionPerformed(AlignViewport viewport) @@ -1161,46 +1160,101 @@ public class Desktop extends jalview.jbgui.GDesktop JLabel label = new JLabel( MessageManager.getString("label.input_file_url")); - JComboBox history = new JComboBox(); JPanel panel = new JPanel(new GridLayout(2, 1)); panel.add(label); - panel.add(history); - history.setPreferredSize(new Dimension(400, 20)); - history.setEditable(true); - history.addItem("http://www."); - - String historyItems = jalview.bin.Cache.getProperty("RECENT_URL"); - - StringTokenizer st; - - if (historyItems != null) + + /* + * the URL to fetch is + * Java: an editable combobox with history + * JS: (pending JAL-3038) a plain text field + */ + JComponent history; + String urlBase = "http://www."; + if (Jalview.isJS()) { - st = new StringTokenizer(historyItems, "\t"); - - while (st.hasMoreTokens()) + history = new JTextField(urlBase, 35); + } + else + { + JComboBox asCombo = new JComboBox<>(); + asCombo.setPreferredSize(new Dimension(400, 20)); + asCombo.setEditable(true); + asCombo.addItem(urlBase); + String historyItems = Cache.getProperty("RECENT_URL"); + if (historyItems != null) { - history.addItem(st.nextElement()); + for (String token : historyItems.split("\\t")) + { + asCombo.addItem(token); + } } + history = asCombo; } + panel.add(history); - // BH 2018 -- providing a callback for SwingJS - // dialogOption is just a simple way to provide - // context for the modal-like response. - // The only requirement is that desktop implement - // PropertyChangeListener, which is used already in Java - // for changes in input value and such within the dialogs. + Object[] options = new Object[] { MessageManager.getString("action.ok"), + MessageManager.getString("action.cancel") }; + RunResponse action = new RunResponse(JvOptionPane.OK_OPTION) { + @Override + public void run() + { + String url = Jalview.isJS() ? ((JTextField) history).getText() + : ((JComboBox) history).getSelectedItem() + .toString(); - String dialogOption = "label.input_alignment_from_url"; - desktop.dialogData = new Object[] { dialogOption, viewport, history }; - desktop.onDialogReturn(JvOptionPane.showInternalConfirmDialog(desktop, - panel, MessageManager.getString(dialogOption), - JvOptionPane.OK_CANCEL_OPTION)); + if (url.toLowerCase().endsWith(".jar")) + { + if (viewport != null) + { + new FileLoader().LoadFile(viewport, url, DataSourceType.URL, + FileFormat.Jalview); + } + else + { + new FileLoader().LoadFile(url, DataSourceType.URL, + FileFormat.Jalview); + } + } + else + { + FileFormatI format = null; + try + { + format = new IdentifyFile().identify(url, DataSourceType.URL); + } catch (FileFormatException e) + { + // TODO revise error handling, distinguish between + // URL not found and response not valid + } + + if (format == null) + { + String msg = MessageManager.formatMessage("label.couldnt_locate", url); + JvOptionPane.showInternalMessageDialog(Desktop.desktop, msg, + MessageManager.getString("label.url_not_found"), + JvOptionPane.WARNING_MESSAGE); - // no code may follow this, as SwingJS will not block - // callback in JavaScript comes via a property change event, - // thus going into desktop.onDialogReturn(int) just the same as - // in Java. + return; + } + if (viewport != null) + { + new FileLoader().LoadFile(viewport, url, DataSourceType.URL, + format); + } + else + { + new FileLoader().LoadFile(url, DataSourceType.URL, format); + } + } + }}; + String dialogOption = MessageManager + .getString("label.input_alignment_from_url"); + JvOptionPane.newOptionDialog(desktop).response(action) + .showInternalDialog(panel, dialogOption, + JvOptionPane.YES_NO_CANCEL_OPTION, + JvOptionPane.PLAIN_MESSAGE, null, options, + MessageManager.getString("action.ok")); } /** @@ -1587,14 +1641,15 @@ public class Desktop extends jalview.jbgui.GDesktop * Jalview project file */ @Override - public void saveState_actionPerformed() + public void saveState_actionPerformed(boolean asCastor) { - JalviewFileChooser chooser = new JalviewFileChooser("jvp", + JalviewFileChooser chooser = new JalviewFileChooser( + asCastor ? "jvp" : "jvx", "Jalview Project"); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle(MessageManager.getString("label.save_state")); - + // TODO: JAL-3048 Dialog runner refactoring here int value = chooser.showSaveDialog(this); if (value == JalviewFileChooser.APPROVE_OPTION) @@ -1618,7 +1673,14 @@ public class Desktop extends jalview.jbgui.GDesktop // TODO prevent user from messing with the Desktop whilst we're saving try { - new Jalview2XML().saveState(choice); + if (asCastor) + { + new Jalview2XML().saveState(choice); + } + else + { + new jalview.project.Jalview2XML().saveState(choice); + } } catch (OutOfMemoryError oom) { new OOMWarning( @@ -1657,13 +1719,20 @@ public class Desktop extends jalview.jbgui.GDesktop * Prompts the user to choose a file and loads in as a Jalview project file */ @Override - public void loadState_actionPerformed() - { + public void loadState_actionPerformed(boolean asCastor) + { + // TODO: GET RID OF .JVX BEFORE RELEASE JIM! + final String[] suffix = asCastor ? new String[] { "jvp", "jar" } + : new String[] + { "jvx" }; + final String[] desc = asCastor + ? new String[] + { "Jalview Project", "Jalview Project (old)" } + : new String[] + { "Jalview Project" }; JalviewFileChooser chooser = new JalviewFileChooser( - Cache.getProperty("LAST_DIRECTORY"), new String[] - { "jvp", "jar" }, - new String[] - { "Jalview Project", "Jalview Project (old)" }, + Cache.getProperty("LAST_DIRECTORY"), suffix, + desc, "Jalview Project"); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle(MessageManager.getString("label.restore_state")); @@ -1686,7 +1755,14 @@ public class Desktop extends jalview.jbgui.GDesktop { choice }), choice.hashCode()); try { - new Jalview2XML().loadJalviewAlign(choice); + if (asCastor) + { + new Jalview2XML().loadJalviewAlign(choice); + } + else + { + new jalview.project.Jalview2XML().loadJalviewAlign(choice); + } } catch (OutOfMemoryError oom) { new OOMWarning("Whilst loading project from " + choice, oom); @@ -2427,149 +2503,8 @@ public class Desktop extends jalview.jbgui.GDesktop * @author AMW */ public class MyDesktopPane extends JDesktopPane - implements Runnable, PropertyChangeListener + implements Runnable { - - public Object[] dialogData; - - // @Override - @Override - public void propertyChange(PropertyChangeEvent event) - { - // TODO this is obsolete with JAL-3048 - delete? - Object val = event.getNewValue(); - String name = event.getPropertyName(); - System.out.println(name); - switch (event.getSource().getClass().getName()) - { - case "javax.swing.JOptionPane": - switch (name) - { - case "inputValue": - onDialogReturn(val); - return; - case "value": - if (val instanceof Integer) - { - onDialogReturn(((Integer) val).intValue()); - } - else - { - onDialogReturn(val); - } - return; - } - break; - case "javax.swing.JFileChooser": - switch (name) - { - case "SelectedFile": - // in JavaScript, this File object will have a _bytes property, - // because the file data has already been loaded - onDialogReturn(new Object[] { (File) val }); - return; - } - break; - } - System.out.println(event.getSource().getClass().getName() + " " - + event.getPropertyName() + ": " + event.getNewValue()); - } - - // JSCOmponent.DialogCaller interface - void onDialogReturn(Object value) - { - switch ((String) dialogData[0]) - { - case "SelectedFile": - case "runnable": - dialogData[0] = value; - ((Runnable) dialogData[1]).run(); - break; - default: - } - } - - // JSCOmponent.DialogCaller interface - void onDialogReturn(int value) - { - if (value != Math.floor(value)) - { - // in JavaScript, this will be NaN, oddly enough - return; - } - - switch ((String) dialogData[0]) - { - case "runnable": - dialogData[0] = Integer.valueOf(value); - ((Runnable) dialogData[1]).run(); - break; - case "label.input_alignment_from_url": - // reconstruct the parameter data - int reply = value; - AlignViewport viewport = (AlignViewport) dialogData[1]; - JComboBox history = (JComboBox) dialogData[2]; - // the rest of this is unchangaed - if (reply != JvOptionPane.OK_OPTION) - { - return; - } - - String url = history.getSelectedItem().toString(); - - if (url.toLowerCase().endsWith(".jar")) - { - if (viewport != null) - { - new FileLoader().LoadFile(viewport, url, DataSourceType.URL, - FileFormat.Jalview); - } - else - { - new FileLoader().LoadFile(url, DataSourceType.URL, - FileFormat.Jalview); - } - } - else - { - FileFormatI format = null; - try - { - format = new IdentifyFile().identify(url, DataSourceType.URL); - } catch (FileFormatException e) - { - // TODO revise error handling, distinguish between - // URL not found and response not valid - } - - if (format == null) - { - JvOptionPane.showInternalMessageDialog(Desktop.desktop, - MessageManager.formatMessage("label.couldnt_locate", - new Object[] - { url }), - MessageManager.getString("label.url_not_found"), - JvOptionPane.WARNING_MESSAGE); - - return; - } - - if (viewport != null) - { - new FileLoader().LoadFile(viewport, url, DataSourceType.URL, - format); - } - else - { - new FileLoader().LoadFile(url, DataSourceType.URL, format); - } - } - - break; - } - - } - private static final float ONE_MB = 1048576f; boolean showMemoryUsage = false;