X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPreferences.java;h=b9f30e35e7dfeeefdb419c28d84517bc0ff67ee1;hb=cb8e52fbbc5f725e3f7f48c672cdddb0690bd978;hp=da33f3970476685f0677c523d2a15dac080ed5c0;hpb=7664ccad29d55ad2355d72feeac23d8bdd49a2a7;p=jalview.git diff --git a/src/jalview/gui/Preferences.java b/src/jalview/gui/Preferences.java index da33f39..b9f30e3 100755 --- a/src/jalview/gui/Preferences.java +++ b/src/jalview/gui/Preferences.java @@ -31,6 +31,7 @@ import java.awt.event.MouseEvent; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CompletableFuture; import javax.help.HelpSetException; import javax.swing.JComboBox; @@ -53,6 +54,8 @@ import javax.swing.table.TableRowSorter; import ext.edu.ucsf.rbvi.strucviz2.StructureManager; import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder; import jalview.bin.Cache; +import jalview.bin.Console; +import jalview.bin.MemorySetting; import jalview.ext.pymol.PymolManager; import jalview.gui.Help.HelpId; import jalview.gui.StructureViewer.ViewerType; @@ -81,6 +84,10 @@ import jalview.ws.sifts.SiftsSettings; * @author $author$ * @version $Revision$ */ +/* + * for merge with Jalview-JS + public class Preferences extends GPreferences implements ApplicationSingletonI + */ public class Preferences extends GPreferences { public static final String ENABLE_SPLIT_FRAME = "ENABLE_SPLIT_FRAME"; @@ -129,6 +136,8 @@ public class Preferences extends GPreferences private String previousProxyType; + private static Preferences INSTANCE = null; // add "final" + /** * Holds name and link separated with | character. Sequence ID must be * $SEQUENCE_ID$ or $SEQUENCE_ID=/.possible | chars ./=$ @@ -139,10 +148,10 @@ public class Preferences extends GPreferences /** * Holds name and link separated with | character. Sequence IDS and Sequences - * must be $SEQUENCEIDS$ or $SEQUENCEIDS=/.possible | chars ./=$ and - * $SEQUENCES$ or $SEQUENCES=/.possible | chars ./=$ and separation character - * for first and second token specified after a pipe character at end |,|. - * (TODO: proper escape for using | to separate ids or sequences + * must be $SEQUENCEIDS$ or $SEQUENCEIDS=/.possible | chars ./=$ and $SEQUENCES$ + * or $SEQUENCES=/.possible | chars ./=$ and separation character for first and + * second token specified after a pipe character at end |,|. (TODO: proper + * escape for using | to separate ids or sequences */ public static List groupURLLinks; @@ -188,22 +197,58 @@ public class Preferences extends GPreferences private OptionsParam textOpt = new OptionsParam( MessageManager.getString("action.text"), "Text"); - /** - * Creates a new Preferences object. - */ - public Preferences() + // get singleton Preferences instance + public static Preferences getInstance() { - new Preferences(0); + if (INSTANCE == null || INSTANCE.frame == null + || INSTANCE.frame.isClosed()) + { + INSTANCE = new Preferences(); + } + return INSTANCE; + + /* + * Replace code with the following for Jalvew-JS + Preferences INSTANCE = ApplicationSingletonProvider.getInstance(Preferences.class); + if (INSTANCE == null || INSTANCE.frame == null + || INSTANCE.frame.isClosed()) + { + ApplicationSingletonProvider.remove(Preferences.class); + INSTANCE = ApplicationSingletonProvider.getInstance(Preferences.class); + } + return INSTANCE; + */ } - public Preferences(int selectTab) + public static void openPreferences() { - new Preferences(selectTab, null); + openPreferences(null, null); } - public Preferences(int selectTab, String message) + public static void openPreferences(TabRef selectTab, String message) { - super(selectTab, message); + Preferences p = getInstance(); + if (selectTab != null) + p.selectTab(selectTab, message); + p.frame.show(); + p.frame.moveToFront(); + p.frame.grabFocus(); + } + + public void selectTab(TabRef selectTab, String message) + { + this.selectTab(selectTab); + if (message != null) + this.setMessage(message); + this.frame.show(); + } + + /** + * Creates a new Preferences object. + */ + private Preferences() + { + super(); frame = new JInternalFrame(); frame.setContentPane(this); if (!Platform.isJS()) @@ -312,8 +357,8 @@ public class Preferences extends GPreferences startupCheckbox .setSelected(Cache.getDefault("SHOW_STARTUP_FILE", true)); startupFileTextfield.setText(Cache.getDefault("STARTUP_FILE", - Cache.getDefault("www.jalview.org", "http://www.jalview.org") - + "/examples/exampleFile_2_3.jar")); + Cache.getDefault("www.jalview.org", "https://www.jalview.org") + + "/examples/exampleFile_2_7.jvp")); /* * Set Colours tab defaults @@ -340,12 +385,10 @@ public class Preferences extends GPreferences /* * Set overview panel defaults */ - gapColour.setBackground( - Cache.getDefaultColour(GAP_COLOUR, - jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_GAP)); - hiddenColour.setBackground( - Cache.getDefaultColour(HIDDEN_COLOUR, - jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_HIDDEN)); + gapColour.setBackground(Cache.getDefaultColour(GAP_COLOUR, + jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_GAP)); + hiddenColour.setBackground(Cache.getDefaultColour(HIDDEN_COLOUR, + jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_HIDDEN)); useLegacyGap.setSelected(Cache.getDefault(USE_LEGACY_GAP, false)); gapLabel.setEnabled(!useLegacyGap.isSelected()); gapColour.setEnabled(!useLegacyGap.isSelected()); @@ -355,20 +398,19 @@ public class Preferences extends GPreferences /* * Set Structure tab defaults */ - final boolean structSelected = Cache.getDefault(STRUCT_FROM_PDB, false); + final boolean structSelected = Cache.getDefault(STRUCT_FROM_PDB, true); structFromPdb.setSelected(structSelected); - useRnaView.setSelected(Cache.getDefault(USE_RNAVIEW, false)); - useRnaView.setEnabled(structSelected); - addSecondaryStructure.setSelected(Cache.getDefault(ADD_SS_ANN, false)); + addSecondaryStructure.setSelected(Cache.getDefault(ADD_SS_ANN, true)); addSecondaryStructure.setEnabled(structSelected); - addTempFactor.setSelected(Cache.getDefault(ADD_TEMPFACT_ANN, false)); + addTempFactor.setSelected(Cache.getDefault(ADD_TEMPFACT_ANN, true)); addTempFactor.setEnabled(structSelected); /* * set choice of structure viewer, and path if saved as a preference; * default to Jmol (first choice) if an unexpected value is found */ - String viewerType = Cache.getDefault(STRUCTURE_DISPLAY, ViewerType.JMOL.name()); + String viewerType = Cache.getDefault(STRUCTURE_DISPLAY, + ViewerType.JMOL.name()); structViewer.setSelectedItem(viewerType); String viewerPath = ""; ViewerType type = null; @@ -391,7 +433,7 @@ public class Preferences extends GPreferences } } catch (IllegalArgumentException e) { - Cache.log.error("Unknown structure viewer type: " + viewerType + Console.error("Unknown structure viewer type: " + viewerType + ", defaulting to Jmol"); type = ViewerType.JMOL; } @@ -404,10 +446,27 @@ public class Preferences extends GPreferences { if (validateViewerPath()) { - Cache.setProperty(structViewer.getSelectedItem() - .equals(ViewerType.CHIMERAX.name()) - ? CHIMERAX_PATH - : CHIMERA_PATH, structureViewerPath.getText()); + String path = structureViewerPath.getText(); + try { + ViewerType type = ViewerType.valueOf(viewerType); + switch (type) + { + case JMOL: + break; + case CHIMERA: + Cache.setProperty(CHIMERA_PATH, path); + break; + case CHIMERAX: + Cache.setProperty(CHIMERAX_PATH, path); + break; + case PYMOL: + Cache.setProperty(PYMOL_PATH, path); + break; + } + } catch (IllegalArgumentException x) + { + Console.error("Failed to set path - unknown viewer type",x); + } } } }); @@ -562,7 +621,7 @@ public class Preferences extends GPreferences proxyType.setSelected(customProxy.getModel(), true); break; default: - Cache.log.warn( + Console.warn( "Incorrect PROXY_TYPE - should be 'none' (clear proxy properties), 'false' (system settings), 'true' (custom settings): " + proxyTypeString); } @@ -574,9 +633,10 @@ public class Preferences extends GPreferences proxyAuthUsernameTB .setText(Cache.getDefault("PROXY_AUTH_USERNAME", "")); // we are not storing or retrieving proxy password from .jalview_properties - proxyAuthPasswordTB.setText(Cache.proxyAuthPassword == null ? "" + proxyAuthPasswordPB.setText(Cache.proxyAuthPassword == null ? "" : new String(Cache.proxyAuthPassword)); setCustomProxyEnabled(); + applyProxyButtonEnabled(false); defaultBrowser.setText(Cache.getDefault("DEFAULT_BROWSER", "")); @@ -620,12 +680,16 @@ public class Preferences extends GPreferences annotations_actionPerformed(null); // update the display of the annotation // settings - - + /* * Set Backups tab defaults */ loadLastSavedBackupsOptions(); + + /* + * Set Startup tab defaults + */ + } /** @@ -641,7 +705,7 @@ public class Preferences extends GPreferences comboBox.addItem(promptEachTimeOpt); comboBox.addItem(lineArtOpt); comboBox.addItem(textOpt); - + /* * JalviewJS doesn't support Lineart so force it to Text */ @@ -675,6 +739,11 @@ public class Preferences extends GPreferences return; } + /* + * Set proxy settings first (to be before web services refresh) + */ + saveProxySettings(); + /* * Save Visual settings */ @@ -781,14 +850,11 @@ public class Preferences extends GPreferences Boolean.toString(addTempFactor.isSelected())); Cache.applicationProperties.setProperty(ADD_SS_ANN, Boolean.toString(addSecondaryStructure.isSelected())); - Cache.applicationProperties.setProperty(USE_RNAVIEW, - Boolean.toString(useRnaView.isSelected())); Cache.applicationProperties.setProperty(STRUCT_FROM_PDB, Boolean.toString(structFromPdb.isSelected())); String viewer = structViewer.getSelectedItem().toString(); String viewerPath = structureViewerPath.getText(); - Cache.applicationProperties.setProperty(STRUCTURE_DISPLAY, - viewer); + Cache.applicationProperties.setProperty(STRUCTURE_DISPLAY, viewer); if (viewer.equals(ViewerType.CHIMERA.name())) { Cache.setOrRemove(CHIMERA_PATH, viewerPath); @@ -818,6 +884,8 @@ public class Preferences extends GPreferences /* * Save Connections settings */ + // Proxy settings set first (to catch web services) + Cache.setOrRemove("DEFAULT_BROWSER", defaultBrowser.getText()); jalview.util.BrowserLauncher.resetBrowser(); @@ -848,9 +916,6 @@ public class Preferences extends GPreferences Cache.applicationProperties.setProperty("DEFAULT_URL", sequenceUrlLinks.getPrimaryUrlId()); - // Proxy settings - saveProxySettings(); - Cache.setProperty("VERSION_CHECK", Boolean.toString(versioncheck.isSelected())); if (Cache.getProperty("USAGESTATS") != null || usagestats.isSelected()) @@ -920,16 +985,16 @@ public class Preferences extends GPreferences Cache.applicationProperties.setProperty(BackupFiles.ENABLED, Boolean.toString(enableBackupFiles.isSelected())); int preset = getComboIntStringKey(backupfilesPresetsCombo); - Cache.applicationProperties.setProperty(BackupFiles.NS + "_PRESET", Integer.toString(preset)); + Cache.applicationProperties.setProperty(BackupFiles.NS + "_PRESET", + Integer.toString(preset)); if (preset == BackupFilesPresetEntry.BACKUPFILESSCHEMECUSTOM) { BackupFilesPresetEntry customBFPE = getBackupfilesCurrentEntry(); BackupFilesPresetEntry.backupfilesPresetEntriesValues.put( BackupFilesPresetEntry.BACKUPFILESSCHEMECUSTOM, customBFPE); - Cache.applicationProperties - .setProperty(BackupFilesPresetEntry.CUSTOMCONFIG, - customBFPE.toString()); + Cache.applicationProperties.setProperty( + BackupFilesPresetEntry.CUSTOMCONFIG, customBFPE.toString()); } BackupFilesPresetEntry savedBFPE = BackupFilesPresetEntry.backupfilesPresetEntriesValues @@ -937,6 +1002,21 @@ public class Preferences extends GPreferences Cache.applicationProperties.setProperty( BackupFilesPresetEntry.SAVEDCONFIG, savedBFPE.toString()); + /* + * Save Memory Settings + */ + Cache.applicationProperties.setProperty( + MemorySetting.CUSTOMISED_SETTINGS, + Boolean.toString(customiseMemorySetting.isSelected())); + Cache.applicationProperties.setProperty(MemorySetting.MEMORY_JVMMEMPC, + Integer.toString(jvmMemoryPercentSlider.getValue())); + Cache.applicationProperties.setProperty(MemorySetting.MEMORY_JVMMEMMAX, + jvmMemoryMaxTextField.getText()); + + /* + * save and close Preferences + */ + Cache.saveProperties(); Desktop.instance.doConfigureStructurePrefs(); try @@ -949,10 +1029,10 @@ public class Preferences extends GPreferences public void saveProxySettings() { - Cache.applicationProperties.setProperty("USE_PROXY", - customProxy.isSelected() ? Cache.PROXYTYPE_CUSTOM - : noProxy.isSelected() ? Cache.PROXYTYPE_NONE - : Cache.PROXYTYPE_SYSTEM); + String newProxyType = customProxy.isSelected() ? Cache.PROXYTYPE_CUSTOM + : noProxy.isSelected() ? Cache.PROXYTYPE_NONE + : Cache.PROXYTYPE_SYSTEM; + Cache.applicationProperties.setProperty("USE_PROXY", newProxyType); Cache.setOrRemove("PROXY_SERVER", proxyServerHttpTB.getText()); Cache.setOrRemove("PROXY_PORT", proxyPortHttpTB.getText()); Cache.setOrRemove("PROXY_SERVER_HTTPS", proxyServerHttpsTB.getText()); @@ -960,13 +1040,20 @@ public class Preferences extends GPreferences Cache.setOrRemove("PROXY_AUTH", Boolean.toString(proxyAuth.isSelected())); Cache.setOrRemove("PROXY_AUTH_USERNAME", proxyAuthUsernameTB.getText()); - Cache.proxyAuthPassword = proxyAuthPasswordTB.getPassword(); + Cache.proxyAuthPassword = proxyAuthPasswordPB.getPassword(); Cache.setProxyPropertiesFromPreferences(previousProxyType); + if (newProxyType.equals(Cache.PROXYTYPE_CUSTOM) + || !newProxyType.equals(previousProxyType)) + { + // force a re-lookup of ws if proxytype is custom or has changed + wsPrefs.update++; + } + previousProxyType = newProxyType; } /** - * Do any necessary validation before saving settings. Return focus to the - * first tab which fails validation. + * Do any necessary validation before saving settings. Return focus to the first + * tab which fails validation. * * @return */ @@ -1020,7 +1107,7 @@ public class Preferences extends GPreferences * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ @Override public void cancel_actionPerformed(ActionEvent e) @@ -1042,7 +1129,7 @@ public class Preferences extends GPreferences * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ @Override public void annotations_actionPerformed(ActionEvent e) @@ -1103,7 +1190,7 @@ public class Preferences extends GPreferences if (index == -1) { // button no longer enabled if row is not selected - Cache.log.debug("Edit with no row selected in linkUrlTable"); + Console.debug("Edit with no row selected in linkUrlTable"); return; } @@ -1155,7 +1242,7 @@ public class Preferences extends GPreferences if (index == -1) { // button no longer enabled if row is not selected - Cache.log.debug("Delete with no row selected in linkUrlTable"); + Console.debug("Delete with no row selected in linkUrlTable"); return; } else @@ -1232,8 +1319,7 @@ public class Preferences extends GPreferences if (!useLegacyGap.isSelected()) { JalviewColourChooser.showColourChooser(this, - MessageManager.getString("label.select_gap_colour"), - gap); + MessageManager.getString("label.select_gap_colour"), gap); } } @@ -1241,8 +1327,7 @@ public class Preferences extends GPreferences public void hiddenColour_actionPerformed(JPanel hidden) { JalviewColourChooser.showColourChooser(this, - MessageManager.getString("label.select_hidden_colour"), - hidden); + MessageManager.getString("label.select_hidden_colour"), hidden); } @Override @@ -1307,8 +1392,8 @@ public class Preferences extends GPreferences } /** - * Returns true if structure viewer path is to a valid executable, else shows - * an error dialog. Does nothing if the path is empty, as is the case for Jmol + * Returns true if structure viewer path is to a valid executable, else shows an + * error dialog. Does nothing if the path is empty, as is the case for Jmol * (built in to Jalview) or when Jalview is left to try default paths. */ private boolean validateViewerPath() @@ -1329,8 +1414,8 @@ public class Preferences extends GPreferences } /** - * If Chimera or ChimeraX or Pymol is selected, check it can be found on - * default or user-specified path, if not show a warning/help dialog + * If Chimera or ChimeraX or Pymol is selected, check it can be found on default + * or user-specified path, if not show a warning/help dialog */ @Override protected void structureViewer_actionPerformed(String selectedItem) @@ -1397,8 +1482,10 @@ public class Preferences extends GPreferences MessageManager.getString("label.viewer_missing")), "", JvOptionPane.YES_NO_OPTION, JvOptionPane.WARNING_MESSAGE, null, options, options[0]); + if (showHelp == JvOptionPane.NO_OPTION) { + this.selectTab(Preferences.TabRef.STRUCTURE_TAB, null); try { Help.showHelpWindow(HelpId.StructureViewer); @@ -1407,6 +1494,24 @@ public class Preferences extends GPreferences e.printStackTrace(); } } + else if (showHelp == JvOptionPane.OK_OPTION) + { + this.selectTab(Preferences.TabRef.STRUCTURE_TAB, null); + CompletableFuture cf = CompletableFuture.runAsync(() -> { + try + { + for (int i = 0; i < 3; i++) + { + structureViewerPath.setBackground(Color.PINK); + Thread.sleep(500); + structureViewerPath.setBackground(Color.WHITE); + Thread.sleep(500); + } + } catch (InterruptedException e) + { + } + }); + } } }