X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=74ac8c0ed96fe3b2ddd3045b3014f9aabc99e975;hb=bea1d9b563d2fea018de3dbde9112dd59149126e;hp=db6870e984a4435d693174c4cf7a980077a5d3aa;hpb=433801a3edef339c0d679eb87e07498ab1325457;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index db6870e..74ac8c0 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -20,6 +20,71 @@ */ package jalview.gui; +import java.util.Locale; + +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; + +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DropTargetDragEvent; +import java.awt.dnd.DropTargetDropEvent; +import java.awt.dnd.DropTargetEvent; +import java.awt.dnd.DropTargetListener; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import java.awt.print.PageFormat; +import java.awt.print.PrinterJob; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.File; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Deque; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.List; +import java.util.Vector; + +import javax.swing.ButtonGroup; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JComponent; +import javax.swing.JEditorPane; +import javax.swing.JInternalFrame; +import javax.swing.JLabel; +import javax.swing.JLayeredPane; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.SwingUtilities; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; + +import ext.vamsas.ServiceHandle; import jalview.analysis.AlignmentSorter; import jalview.analysis.AlignmentUtils; import jalview.analysis.CrossRef; @@ -38,6 +103,7 @@ import jalview.api.SplitContainerI; import jalview.api.ViewStyleI; import jalview.api.analysis.SimilarityParamsI; import jalview.bin.Cache; +import jalview.bin.Console; import jalview.bin.Jalview; import jalview.commands.CommandI; import jalview.commands.EditCommand; @@ -98,6 +164,7 @@ import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemes; import jalview.schemes.ResidueColourScheme; import jalview.schemes.TCoffeeColourScheme; +import jalview.util.HttpUtils; import jalview.util.ImageMaker.TYPE; import jalview.util.MessageManager; import jalview.util.Platform; @@ -115,7 +182,9 @@ import jalview.ws.params.ArgumentI; import jalview.ws.params.ParamDatastoreI; import jalview.ws.params.WsParamSetI; import jalview.ws.seqfetcher.DbSourceProxy; -import jalview.ws.slivkaws.SlivkaWSDiscoverer; +import jalview.ws2.client.api.WebServiceDiscovererI; +import jalview.ws2.client.slivka.SlivkaWSDiscoverer; +import jalview.ws2.gui.WebServicesMenuManager; import java.io.IOException; import java.util.HashSet; import java.util.Set; @@ -428,7 +497,7 @@ public class AlignFrame extends GAlignFrame // modifyPID.setEnabled(false); } - String sortby = jalview.bin.Cache.getDefault(Preferences.SORT_ALIGNMENT, + String sortby = Cache.getDefault(Preferences.SORT_ALIGNMENT, "No sort"); if (sortby.equals("Id")) @@ -473,14 +542,14 @@ public class AlignFrame extends GAlignFrame wrapMenuItem_actionPerformed(null); } - if (jalview.bin.Cache.getDefault(Preferences.SHOW_OVERVIEW, false)) + if (Cache.getDefault(Preferences.SHOW_OVERVIEW, false)) { this.overviewMenuItem_actionPerformed(null); } addKeyListener(); - final List selviews = new ArrayList<>(); + final List selviews = new ArrayList<>(); final List origview = new ArrayList<>(); final String menuLabel = MessageManager .getString("label.copy_format_from"); @@ -548,10 +617,10 @@ public class AlignFrame extends GAlignFrame } } }); - if (Cache.getDefault("VERSION", "DEVELOPMENT").toLowerCase() + if (Cache.getDefault("VERSION", "DEVELOPMENT").toLowerCase(Locale.ROOT) .indexOf("devel") > -1 - || Cache.getDefault("VERSION", "DEVELOPMENT").toLowerCase() - .indexOf("test") > -1) + || Cache.getDefault("VERSION", "DEVELOPMENT") + .toLowerCase(Locale.ROOT).indexOf("test") > -1) { formatMenu.add(vsel); } @@ -652,7 +721,7 @@ public class AlignFrame extends GAlignFrame } if (viewport.cursorMode) { - alignPanel.getSeqPanel().moveCursor(0, 1); + alignPanel.getSeqPanel().moveCursor(0, 1, evt.isShiftDown()); } break; @@ -663,7 +732,7 @@ public class AlignFrame extends GAlignFrame } if (viewport.cursorMode) { - alignPanel.getSeqPanel().moveCursor(0, -1); + alignPanel.getSeqPanel().moveCursor(0, -1, evt.isShiftDown()); } break; @@ -676,7 +745,7 @@ public class AlignFrame extends GAlignFrame } else { - alignPanel.getSeqPanel().moveCursor(-1, 0); + alignPanel.getSeqPanel().moveCursor(-1, 0, evt.isShiftDown()); } break; @@ -688,7 +757,7 @@ public class AlignFrame extends GAlignFrame } else { - alignPanel.getSeqPanel().moveCursor(1, 0); + alignPanel.getSeqPanel().moveCursor(1, 0, evt.isShiftDown()); } break; @@ -1102,7 +1171,7 @@ public class AlignFrame extends GAlignFrame public String getVersion() { - return jalview.bin.Cache.getProperty("VERSION"); + return Cache.getProperty("VERSION"); } public FeatureRenderer getFeatureRenderer() @@ -1415,10 +1484,7 @@ public class AlignFrame extends GAlignFrame Desktop.getInstance().closeAssociatedWindows(); FileLoader loader = new FileLoader(); -// DataSourceType protocol = fileName.startsWith("http:") -// ? DataSourceType.URL -// : DataSourceType.FILE; - loader.LoadFile(viewport, (fileObject == null ? fileName : fileObject), protocol, currentFileFormat); + loader.LoadFile(viewport, (fileObject == null ? fileName : fileObject), protocol, currentFileFormat); } else { @@ -1481,7 +1547,7 @@ public class AlignFrame extends GAlignFrame public void save_actionPerformed(ActionEvent e) { if (fileName == null || (currentFileFormat == null) - || fileName.startsWith("http")) + || HttpUtils.startsWithHttpOrHttps(fileName)) { saveAs_actionPerformed(); } @@ -1556,11 +1622,20 @@ public class AlignFrame extends GAlignFrame if (!lastSaveSuccessful) { - JvOptionPane.showInternalMessageDialog(this, MessageManager - .formatMessage("label.couldnt_save_file", new Object[] - { lastFilenameSaved }), - MessageManager.getString("label.error_saving_file"), - JvOptionPane.WARNING_MESSAGE); + if (!Platform.isHeadless()) + { + JvOptionPane.showInternalMessageDialog(this, MessageManager + .formatMessage("label.couldnt_save_file", new Object[] + { lastFilenameSaved }), + MessageManager.getString("label.error_saving_file"), + JvOptionPane.WARNING_MESSAGE); + } + else + { + Console.error(MessageManager + .formatMessage("label.couldnt_save_file", new Object[] + { lastFilenameSaved })); + } } else { @@ -1640,32 +1715,64 @@ public class AlignFrame extends GAlignFrame { // create backupfiles object and get new temp filename destination boolean doBackup = BackupFiles.getEnabled(); - BackupFiles backupfiles = doBackup ? new BackupFiles(file) : null; + BackupFiles backupfiles = null; + if (doBackup) + { + Console.trace( + "ALIGNFRAME making backupfiles object for " + file); + backupfiles = new BackupFiles(file); + } try { String tempFilePath = doBackup ? backupfiles.getTempFilePath() : file; + Console.trace("ALIGNFRAME setting PrintWriter"); PrintWriter out = new PrintWriter(new FileWriter(tempFilePath)); + if (backupfiles != null) + { + Console.trace("ALIGNFRAME about to write to temp file " + + backupfiles.getTempFilePath()); + } out.print(output); + Console.trace("ALIGNFRAME about to close file"); out.close(); + Console.trace("ALIGNFRAME closed file"); AlignFrame.this.setTitle(file); statusBar.setText(MessageManager.formatMessage( "label.successfully_saved_to_file_in_format", new Object[] { fileName, format.getName() })); lastSaveSuccessful = true; + } catch (IOException e) + { + lastSaveSuccessful = false; + Console.error( + "ALIGNFRAME Something happened writing the temp file"); + Console.error(e.getMessage()); + Console.debug(Cache.getStackTraceString(e)); } catch (Exception ex) { lastSaveSuccessful = false; - ex.printStackTrace(); + Console.error( + "ALIGNFRAME Something unexpected happened writing the temp file"); + Console.error(ex.getMessage()); + Console.debug(Cache.getStackTraceString(ex)); } if (doBackup) { backupfiles.setWriteSuccess(lastSaveSuccessful); + Console.debug("ALIGNFRAME writing temp file was " + + (lastSaveSuccessful ? "" : "NOT ") + "successful"); // do the backup file roll and rename the temp file to actual file + Console.trace( + "ALIGNFRAME about to rollBackupsAndRenameTempFile"); lastSaveSuccessful = backupfiles.rollBackupsAndRenameTempFile(); + Console.debug( + "ALIGNFRAME performed rollBackupsAndRenameTempFile " + + (lastSaveSuccessful ? "" : "un") + + "successfully"); } } } @@ -1855,7 +1962,7 @@ public class AlignFrame extends GAlignFrame throws IOException, InterruptedException { final JalviewFileChooser chooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY")); + Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); String tooltip = MessageManager .getString("label.load_jalview_annotations"); @@ -1868,7 +1975,7 @@ public class AlignFrame extends GAlignFrame public void run() { String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); + Cache.setProperty("LAST_DIRECTORY", choice); loadJalviewDataFile(chooser.getSelectedFile(), null, null, null); } }); @@ -2060,7 +2167,7 @@ public class AlignFrame extends GAlignFrame { if (originalSource != viewport) { - Cache.log.warn( + Console.warn( "Implementation worry: mismatch of viewport origin for undo"); } originalSource.updateHiddenColumns(); @@ -2101,7 +2208,7 @@ public class AlignFrame extends GAlignFrame if (originalSource != viewport) { - Cache.log.warn( + Console.warn( "Implementation worry: mismatch of viewport origin for redo"); } originalSource.updateHiddenColumns(); @@ -2158,10 +2265,11 @@ public class AlignFrame extends GAlignFrame } /** - * DOCUMENT ME! + * Calls AlignmentI.moveSelectedSequencesByOne with current sequence selection + * or the sequence under cursor in keyboard mode * * @param up - * DOCUMENT ME! + * or down (if !up) */ public void moveSelectedSequences(boolean up) @@ -2170,8 +2278,23 @@ public class AlignFrame extends GAlignFrame if (sg == null) { + if (viewport.cursorMode) + { + sg = new SequenceGroup(); + sg.addSequence(viewport.getAlignment().getSequenceAt( + alignPanel.getSeqPanel().seqCanvas.cursorY), false); + } + else + { + return; + } + } + + if (sg.getSize() < 1) + { return; } + // TODO: JAL-3733 - add an event to the undo buffer for this ! viewport.getAlignment().moveSelectedSequencesByOne(sg, viewport.getHiddenRepSequences(), up); alignPanel.paintAlignment(true, false); @@ -2321,7 +2444,7 @@ public class AlignFrame extends GAlignFrame .setContents(new StringSelection(""), null); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, - Desktop.getInstance()); + d); } catch (OutOfMemoryError er) { new OOMWarning("copying region", er); @@ -3145,16 +3268,15 @@ public class AlignFrame extends GAlignFrame } /** - * DOCUMENT ME! + * Opens a Finder dialog * * @param e - * DOCUMENT ME! */ @Override public void findMenuItem_actionPerformed(ActionEvent e) { - new Finder(); + new Finder(alignPanel, false, null); } /** @@ -4153,9 +4275,6 @@ public class AlignFrame extends GAlignFrame viewport.setAutoCalculateConsensusAndConservation( autoCalculate.isSelected()); if (viewport.getAutoCalculateConsensusAndConservation()) - // ?? - // viewport.autoCalculateConsensus = autoCalculate.isSelected(); - // if (viewport.autoCalculateConsensus) { viewport.notifyAlignment(); } @@ -4520,7 +4639,7 @@ public class AlignFrame extends GAlignFrame { // Pick the tree file JalviewFileChooser chooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY")); + Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle( MessageManager.getString("label.select_newick_like_tree_file")); @@ -4634,21 +4753,23 @@ public class AlignFrame extends GAlignFrame return tp; } + private WebServicesMenuManager slivkaMenu = new WebServicesMenuManager("slivka", this); /** * Schedule the web services menu rebuild to the event dispatch thread. */ public void buildWebServicesMenu() { SwingUtilities.invokeLater(() -> { - Cache.log.info("Rebuiling WS menu"); + Console.info("Rebuiling WS menu"); webService.removeAll(); if (Cache.getDefault("SHOW_SLIVKA_SERVICES", true)) { - Cache.log.info("Building web service menu for slivka"); + Console.info("Building web service menu for slivka"); SlivkaWSDiscoverer discoverer = SlivkaWSDiscoverer.getInstance(); - JMenu submenu = new JMenu("Slivka"); - buildWebServicesMenu(discoverer, submenu); - webService.add(submenu); + slivkaMenu.setServices(discoverer); + slivkaMenu.setInProgress(discoverer.isRunning()); + slivkaMenu.setNoServices(discoverer.isDone() && !discoverer.hasServices()); + webService.add(slivkaMenu.getMenu()); } if (Cache.getDefault("SHOW_JWS2_SERVICES", true)) { @@ -4658,6 +4779,8 @@ public class AlignFrame extends GAlignFrame buildWebServicesMenu(jws2servs, submenu); webService.add(submenu); } + build_urlServiceMenu(webService); + build_fetchdbmenu(webService); }); } @@ -4795,7 +4918,7 @@ public class AlignFrame extends GAlignFrame showProducts.setEnabled(showp); } catch (Exception e) { - Cache.log.warn( + Console.warn( "canShowProducts threw an exception - please report to help@jalview.org", e); return false; @@ -4838,8 +4961,8 @@ public class AlignFrame extends GAlignFrame al = dna.translateCdna(codeTable); } catch (Exception ex) { - jalview.bin.Cache.log.error( - "Exception during translation. Please report this !", ex); + Console.error("Exception during translation. Please report this !", + ex); final String msg = MessageManager.getString( "label.error_when_translating_sequences_submit_bug_report"); final String errorTitle = MessageManager @@ -5209,7 +5332,7 @@ public class AlignFrame extends GAlignFrame } } catch (Exception x) { - Cache.log.debug( + Console.debug( "Exception when processing data source as T-COFFEE score file", x); tcf = null;