*/
package jalview.gui;
-import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
-import jalview.bin.Cache;
-import jalview.gui.Help.HelpId;
-import jalview.gui.StructureViewer.ViewerType;
-import jalview.io.BackupFiles;
-import jalview.io.BackupFilesPresetEntry;
-import jalview.io.FileFormatI;
-import jalview.io.JalviewFileChooser;
-import jalview.io.JalviewFileView;
-import jalview.jbgui.GPreferences;
-import jalview.jbgui.GSequenceLink;
-import jalview.schemes.ColourSchemeI;
-import jalview.schemes.ColourSchemes;
-import jalview.schemes.ResidueColourScheme;
-import jalview.urls.UrlLinkTableModel;
-import jalview.urls.api.UrlProviderFactoryI;
-import jalview.urls.api.UrlProviderI;
-import jalview.urls.desktop.DesktopUrlProviderFactory;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-import jalview.util.UrlConstants;
-import jalview.ws.sifts.SiftsSettings;
-
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.table.TableRowSorter;
import ext.edu.ucsf.rbvi.strucviz2.StructureManager;
+import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
+import jalview.bin.Cache;
+import jalview.ext.pymol.PymolManager;
+import jalview.gui.Help.HelpId;
+import jalview.gui.StructureViewer.ViewerType;
+import jalview.io.BackupFiles;
+import jalview.io.BackupFilesPresetEntry;
+import jalview.io.FileFormatI;
+import jalview.io.JalviewFileChooser;
+import jalview.io.JalviewFileView;
+import jalview.jbgui.GPreferences;
+import jalview.jbgui.GSequenceLink;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.ColourSchemes;
+import jalview.schemes.ResidueColourScheme;
+import jalview.urls.UrlLinkTableModel;
+import jalview.urls.api.UrlProviderFactoryI;
+import jalview.urls.api.UrlProviderI;
+import jalview.urls.desktop.DesktopUrlProviderFactory;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+import jalview.util.UrlConstants;
+import jalview.ws.sifts.SiftsSettings;
/**
* DOCUMENT ME!
.setSelected(Cache.getDefault(SHOW_OV_HIDDEN_AT_START, false));
/*
- * Set Structure tab defaults.
+ * Set Structure tab defaults
*/
final boolean structSelected = Cache.getDefault(STRUCT_FROM_PDB, false);
structFromPdb.setSelected(structSelected);
addSecondaryStructure.setEnabled(structSelected);
addTempFactor.setSelected(Cache.getDefault(ADD_TEMPFACT_ANN, false));
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());
structViewer.setSelectedItem(viewerType);
- boolean isChimeraX = viewerType.equals(ViewerType.CHIMERAX.name());
- if (viewerType.equals(ViewerType.JMOL.name()))
+ String viewerPath = "";
+ ViewerType type = null;
+ try
{
- structureViewerPath.setText("");
- }
- else
+ type = ViewerType.valueOf(viewerType);
+ switch (type)
+ {
+ case JMOL:
+ break;
+ case CHIMERA:
+ viewerPath = Cache.getDefault(CHIMERA_PATH, "");
+ break;
+ case CHIMERAX:
+ viewerPath = Cache.getDefault(CHIMERAX_PATH, "");
+ break;
+ case PYMOL:
+ viewerPath = Cache.getDefault(PYMOL_PATH, "");
+ break;
+ }
+ } catch (IllegalArgumentException e)
{
- structureViewerPath.setText(Cache
- .getDefault(isChimeraX ? CHIMERAX_PATH : CHIMERA_PATH, ""));
+ Cache.log.error("Unknown structure viewer type: " + viewerType
+ + ", defaulting to Jmol");
+ type = ViewerType.JMOL;
}
+ structureViewerPath.setText(viewerPath);
+
structureViewerPath.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
- if (validateChimeraPath())
+ if (validateViewerPath())
{
Cache.setProperty(structViewer.getSelectedItem()
.equals(ViewerType.CHIMERAX.name())
@Override
protected boolean validateStructure()
{
- return validateChimeraPath();
+ return validateViewerPath();
}
}
/**
- * Returns true if chimera path is to a valid executable, else show an error
- * dialog.
+ * 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 validateChimeraPath()
+ private boolean validateViewerPath()
{
if (structureViewerPath.getText().trim().length() > 0)
{
if (!f.canExecute())
{
JvOptionPane.showInternalMessageDialog(Desktop.desktop,
- MessageManager.getString("label.invalid_chimera_path"),
- MessageManager.getString("label.invalid_name"),
+ MessageManager.getString("label.invalid_viewer_path"),
+ MessageManager.getString("label.invalid_viewer_path"),
JvOptionPane.ERROR_MESSAGE);
return false;
}
structureViewerPath.setEnabled(true);
structureViewerPathLabel.setEnabled(true);
structureViewerPathLabel.setText(MessageManager
- .formatMessage("label.chimera_path", selectedItem));
+ .formatMessage("label.viewer_path", selectedItem));
/*
- * Try user-specified and standard paths for Chimera executable
+ * Try user-specified and standard paths for structure viewer executable
*/
- boolean isChimeraX = selectedItem.equals(ViewerType.CHIMERAX.name());
- structureViewerPath.setText(Cache
- .getDefault(isChimeraX ? CHIMERAX_PATH : CHIMERA_PATH, ""));
+ String viewerPath = "";
+ List<String> paths = null;
+ try
+ {
+ ViewerType viewerType = ViewerType.valueOf(selectedItem);
+ switch (viewerType)
+ {
+ case JMOL:
+ // dealt with above
+ break;
+ case CHIMERA:
+ viewerPath = Cache.getDefault(CHIMERA_PATH, "");
+ paths = StructureManager.getChimeraPaths(false);
+ break;
+ case CHIMERAX:
+ viewerPath = Cache.getDefault(CHIMERAX_PATH, "");
+ paths = StructureManager.getChimeraPaths(true);
+ break;
+ case PYMOL:
+ viewerPath = Cache.getDefault(PYMOL_PATH, "");
+ paths = PymolManager.getPymolPaths();
+ break;
+ }
+ } catch (IllegalArgumentException e)
+ {
+ // only valid entries should be in the drop-down
+ }
+ structureViewerPath.setText(viewerPath);
- List<String> paths = StructureManager.getChimeraPaths(isChimeraX);
paths.add(0, structureViewerPath.getText());
for (String path : paths)
{
break;
}
}
+
if (!found)
{
String[] options = { "OK", "Help" };
int showHelp = JvOptionPane.showInternalOptionDialog(Desktop.desktop,
JvSwingUtils.wrapTooltip(true,
- MessageManager.getString("label.chimera_missing")),
+ MessageManager.getString("label.viewer_missing")),
"", JvOptionPane.YES_NO_OPTION, JvOptionPane.WARNING_MESSAGE,
null, options, options[0]);
if (showHelp == JvOptionPane.NO_OPTION)