X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fjbgui%2FGPreferences.java;h=a4c03bed0bb70473b8431b779349076042f3284b;hb=49db0dff1da16c3355b43a41498c1fc93ef47e91;hp=f1a94fc8ec529925c81ae31f958744d675f00345;hpb=fac1e8688bbf17fc6138c2a0c21ef12f90ee4c5a;p=jalview.git diff --git a/src/jalview/jbgui/GPreferences.java b/src/jalview/jbgui/GPreferences.java index f1a94fc..a4c03be 100755 --- a/src/jalview/jbgui/GPreferences.java +++ b/src/jalview/jbgui/GPreferences.java @@ -20,6 +20,22 @@ */ package jalview.jbgui; +import jalview.bin.Cache; +import jalview.fts.core.FTSDataColumnPreferences; +import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource; +import jalview.fts.service.pdb.PDBFTSRestClient; +import jalview.gui.Desktop; +import jalview.gui.JalviewBooleanRadioButtons; +import jalview.gui.JvOptionPane; +import jalview.gui.JvSwingUtils; +import jalview.gui.StructureViewer.ViewerType; +import jalview.io.BackupFilenameParts; +import jalview.io.BackupFiles; +import jalview.io.BackupFilesPresetEntry; +import jalview.io.IntKeyStringValueEntry; +import jalview.util.MessageManager; +import jalview.util.Platform; + import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; @@ -41,13 +57,16 @@ import java.awt.event.MouseEvent; import java.util.Arrays; import java.util.List; +import javax.swing.AbstractButton; import javax.swing.AbstractCellEditor; import javax.swing.BorderFactory; +import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.DefaultListCellRenderer; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; +import javax.swing.JComponent; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JPanel; @@ -74,22 +93,6 @@ import javax.swing.event.DocumentListener; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; -import jalview.bin.Cache; -import jalview.fts.core.FTSDataColumnPreferences; -import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource; -import jalview.fts.service.pdb.PDBFTSRestClient; -import jalview.gui.Desktop; -import jalview.gui.JalviewBooleanRadioButtons; -import jalview.gui.JvOptionPane; -import jalview.gui.JvSwingUtils; -import jalview.gui.StructureViewer.ViewerType; -import jalview.io.BackupFilenameParts; -import jalview.io.BackupFiles; -import jalview.io.BackupFilesPresetEntry; -import jalview.io.IntKeyStringValueEntry; -import jalview.util.MessageManager; -import jalview.util.Platform; - /** * Base class for the Preferences panel. * @@ -164,6 +167,9 @@ public class GPreferences extends JPanel protected JCheckBox showConsensLogo = new JCheckBox(); + protected JCheckBox showInformationHistogram = new JCheckBox(); + + protected JCheckBox showHMMLogo = new JCheckBox(); protected JCheckBox showDbRefTooltip = new JCheckBox(); protected JCheckBox showNpTooltip = new JCheckBox(); @@ -175,7 +181,6 @@ public class GPreferences extends JPanel protected JCheckBox structFromPdb = new JCheckBox(); - protected JCheckBox useRnaView = new JCheckBox(); protected JCheckBox addSecondaryStructure = new JCheckBox(); @@ -327,10 +332,28 @@ public class GPreferences extends JPanel protected JCheckBox sortByTree = new JCheckBox(); /* + * hmmer tab and components + */ + protected JPanel hmmerTab; + + protected JCheckBox hmmrTrimTermini; + + protected AbstractButton hmmerBackgroundUniprot; + + protected AbstractButton hmmerBackgroundAlignment; + + protected JTextField hmmerSequenceCount; + + protected JTextField hmmerPath; + + protected JTextField cygwinPath; + + /* * Web Services tab */ protected JPanel wsTab = new JPanel(); + protected JPanel slivkaTab = new JPanel(); /* * Backups tab components * a lot of these are member variables instead of local variables only so that they @@ -380,7 +403,6 @@ public class GPreferences extends JPanel private final JTabbedPane tabbedPane = new JTabbedPane(); private JLabel messageLabel = new JLabel("", JLabel.CENTER); - /** * Creates a new GPreferences object. */ @@ -404,10 +426,8 @@ public class GPreferences extends JPanel { // final JTabbedPane tabbedPane = new JTabbedPane(); this.setLayout(new BorderLayout()); - // message label at top this.add(messageLabel, BorderLayout.NORTH); - JPanel okCancelPanel = initOkCancelPanel(); this.add(tabbedPane, BorderLayout.CENTER); this.add(okCancelPanel, BorderLayout.SOUTH); @@ -427,11 +447,11 @@ public class GPreferences extends JPanel tabbedPane.add(initConnectionsTab(), MessageManager.getString("label.connections")); - if (!Platform.isJS()) - { - tabbedPane.add(initBackupsTab(), - MessageManager.getString("label.backups")); - } + if (!Platform.isJS()) + { + tabbedPane.add(initBackupsTab(), + MessageManager.getString("label.backups")); + } tabbedPane.add(initLinksTab(), MessageManager.getString("label.urllinks")); @@ -442,6 +462,7 @@ public class GPreferences extends JPanel tabbedPane.add(initEditingTab(), MessageManager.getString("label.editing")); + tabbedPane.add(initHMMERTab(), MessageManager.getString("label.hmmer")); /* * See WsPreferences for the real work of configuring this tab. */ @@ -450,6 +471,9 @@ public class GPreferences extends JPanel wsTab.setLayout(new BorderLayout()); tabbedPane.add(wsTab, MessageManager.getString("label.web_services")); } + + slivkaTab.setLayout(new BorderLayout()); + tabbedPane.add(slivkaTab, "Slivka Services"); /* * Handler to validate a tab before leaving it - currently only for @@ -473,7 +497,6 @@ public class GPreferences extends JPanel } } lastTab = tabbedPane.getSelectedComponent(); - clearMessage(); } @@ -510,9 +533,12 @@ public class GPreferences extends JPanel } } - public final static int CONNECTIONS_TAB = 5; + public static enum TabRef + { + CONNECTIONS_TAB, STRUCTURE_TAB + }; - public void selectTab(int selectTab) + public void selectTab(TabRef selectTab) { // select a given tab - currently only for Connections switch (selectTab) @@ -520,6 +546,9 @@ public class GPreferences extends JPanel case CONNECTIONS_TAB: tabbedPane.setSelectedComponent(connectTab); break; + case STRUCTURE_TAB: + tabbedPane.setSelectedComponent(structureTab); + break; default: } } @@ -554,7 +583,135 @@ public class GPreferences extends JPanel } /** - * Initialises the Output tab + * Initialises the hmmer tabbed panel + * + * @return + */ + private JPanel initHMMERTab() + { + hmmerTab = new JPanel(); + hmmerTab.setLayout(new BoxLayout(hmmerTab, BoxLayout.Y_AXIS)); + hmmerTab.setLayout(new MigLayout("flowy")); + + /* + * path to hmmer binaries folder + */ + JPanel installationPanel = new JPanel(new MigLayout("flowy")); + // new FlowLayout(FlowLayout.LEFT)); + JvSwingUtils.createTitledBorder(installationPanel, + MessageManager.getString("label.installation"), true); + hmmerTab.add(installationPanel); + JLabel hmmerLocation = new JLabel( + MessageManager.getString("label.hmmer_location")); + hmmerLocation.setFont(LABEL_FONT); + final int pathFieldLength = 40; + hmmerPath = new JTextField(pathFieldLength); + hmmerPath.addMouseListener(new MouseAdapter() + { + @Override + public void mouseClicked(MouseEvent e) + { + if (e.getClickCount() == 2) + { + String chosen = openFileChooser(true); + if (chosen != null) + { + hmmerPath.setText(chosen); + validateHmmerPath(); + } + } + } + }); + installationPanel.add(hmmerLocation); + installationPanel.add(hmmerPath); + + /* + * path to Cygwin binaries folder (for Windows) + */ + if (Platform.isWindowsAndNotJS()) + { + JLabel cygwinLocation = new JLabel( + MessageManager.getString("label.cygwin_location")); + cygwinLocation.setFont(LABEL_FONT); + cygwinPath = new JTextField(pathFieldLength); + cygwinPath.addMouseListener(new MouseAdapter() + { + @Override + public void mouseClicked(MouseEvent e) + { + if (e.getClickCount() == 2) + { + String chosen = openFileChooser(true); + if (chosen != null) + { + cygwinPath.setText(chosen); + validateCygwinPath(); + } + } + } + }); + installationPanel.add(cygwinLocation); + installationPanel.add(cygwinPath); + } + + /* + * preferences for hmmalign + */ + JPanel alignOptionsPanel = new JPanel(new MigLayout()); + // new FlowLayout(FlowLayout.LEFT)); + JvSwingUtils.createTitledBorder(alignOptionsPanel, + MessageManager.getString("label.hmmalign_options"), true); + hmmerTab.add(alignOptionsPanel); + hmmrTrimTermini = new JCheckBox(); + hmmrTrimTermini.setFont(LABEL_FONT); + hmmrTrimTermini.setText(MessageManager.getString("label.trim_termini")); + alignOptionsPanel.add(hmmrTrimTermini); + + /* + * preferences for hmmsearch + */ + JPanel searchOptions = new JPanel(new MigLayout()); + // FlowLayout(FlowLayout.LEFT)); + JvSwingUtils.createTitledBorder(searchOptions, + MessageManager.getString("label.hmmsearch_options"), true); + hmmerTab.add(searchOptions); + JLabel sequencesToKeep = new JLabel( + MessageManager.getString("label.no_of_sequences")); + sequencesToKeep.setFont(LABEL_FONT); + searchOptions.add(sequencesToKeep); + hmmerSequenceCount = new JTextField(5); + searchOptions.add(hmmerSequenceCount); + + /* + * preferences for Information Content annotation + */ + // JPanel dummy = new JPanel(new FlowLayout(FlowLayout.LEFT)); + JPanel annotationOptions = new JPanel(new MigLayout("left")); + JvSwingUtils.createTitledBorder(annotationOptions, + MessageManager.getString("label.information_annotation"), true); + // dummy.add(annotationOptions); + hmmerTab.add(annotationOptions); + ButtonGroup backgroundOptions = new ButtonGroup(); + hmmerBackgroundUniprot = new JRadioButton( + MessageManager.getString("label.freq_uniprot")); + hmmerBackgroundUniprot.setFont(LABEL_FONT); + hmmerBackgroundAlignment = new JRadioButton( + MessageManager.getString("label.freq_alignment")); + hmmerBackgroundAlignment.setFont(LABEL_FONT); + backgroundOptions.add(hmmerBackgroundUniprot); + backgroundOptions.add(hmmerBackgroundAlignment); + backgroundOptions.setSelected(hmmerBackgroundUniprot.getModel(), true); + // disable buttons for now as annotation only uses Uniprot background + hmmerBackgroundAlignment.setEnabled(false); + hmmerBackgroundUniprot.setEnabled(false); + annotationOptions.add(hmmerBackgroundUniprot, "wrap"); + annotationOptions.add(hmmerBackgroundAlignment); + + return hmmerTab; + } + + /** + * Initialises the Output tabbed panel. * * @return */ @@ -1116,7 +1273,6 @@ public class GPreferences extends JPanel proxyAuth_actionPerformed(); } }); - setCustomProxyEnabled(); // Make proxy server panel @@ -1205,45 +1361,56 @@ public class GPreferences extends JPanel gbc.gridy++; proxyPanel.add(hpPanel, gbc); - // Require authentication checkbox - gbc.gridy++; - proxyPanel.add(proxyAuth, gbc); - - // username and password - JPanel upPanel = new JPanel(); - upPanel.setLayout(new GridBagLayout()); - // username row - c.gridy = 0; - c.gridx = 0; - c.gridwidth = 1; - c.weightx = 0.4; - c.anchor = GridBagConstraints.LINE_END; - upPanel.add(proxyAuthUsernameLabel, c); - - c.gridx++; - c.weightx = 1.0; - c.anchor = GridBagConstraints.LINE_START; - upPanel.add(proxyAuthUsernameTB, c); - - // password row - c.gridy++; - c.gridx = 0; - c.weightx = 0.4; - c.anchor = GridBagConstraints.LINE_END; - upPanel.add(proxyAuthPasswordLabel, c); - - c.gridx++; - c.weightx = 1.0; - c.anchor = GridBagConstraints.LINE_START; - upPanel.add(proxyAuthPasswordPB, c); - - c.gridx++; - c.weightx = 0.4; - c.anchor = GridBagConstraints.LINE_START; - upPanel.add(passwordNotStoredLabel, c); - - gbc.gridy++; - proxyPanel.add(upPanel, gbc); + if (!Platform.isJS()) + /** + * java.net.Authenticator is not implemented in SwingJS. Not displaying the + * Authentication options in Preferences. + * + * @j2sIgnore + * + */ + { + // Require authentication checkbox + gbc.gridy++; + proxyPanel.add(proxyAuth, gbc); + + // username and password + JPanel upPanel = new JPanel(); + upPanel.setLayout(new GridBagLayout()); + // username row + c.gridy = 0; + c.gridx = 0; + c.gridwidth = 1; + c.weightx = 0.4; + c.anchor = GridBagConstraints.LINE_END; + upPanel.add(proxyAuthUsernameLabel, c); + + c.gridx++; + c.weightx = 1.0; + c.anchor = GridBagConstraints.LINE_START; + upPanel.add(proxyAuthUsernameTB, c); + + // password row + c.gridy++; + c.gridx = 0; + c.weightx = 0.4; + c.anchor = GridBagConstraints.LINE_END; + upPanel.add(proxyAuthPasswordLabel, c); + + c.gridx++; + c.weightx = 1.0; + c.anchor = GridBagConstraints.LINE_START; + upPanel.add(proxyAuthPasswordPB, c); + + c.gridx++; + c.weightx = 0.4; + c.anchor = GridBagConstraints.LINE_START; + upPanel.add(passwordNotStoredLabel, c); + + gbc.gridy++; + proxyPanel.add(upPanel, gbc); + + } // end j2sIgnore applyProxyButton.setText(MessageManager.getString("action.apply")); applyProxyButton.addActionListener(new ActionListener() @@ -1430,7 +1597,7 @@ public class GPreferences extends JPanel protColourLabel.setHorizontalAlignment(SwingConstants.LEFT); protColourLabel.setText( MessageManager.getString("label.prot_alignment_colour") + " "); - JvSwingUtils.addtoLayout(coloursTab, + GPreferences.addtoLayout(coloursTab, MessageManager .getString("label.default_colour_scheme_for_alignment"), protColourLabel, protColour); @@ -1442,7 +1609,7 @@ public class GPreferences extends JPanel nucColourLabel.setHorizontalAlignment(SwingConstants.LEFT); nucColourLabel.setText( MessageManager.getString("label.nuc_alignment_colour") + " "); - JvSwingUtils.addtoLayout(coloursTab, + GPreferences.addtoLayout(coloursTab, MessageManager .getString("label.default_colour_scheme_for_alignment"), nucColourLabel, nucColour); @@ -1451,11 +1618,11 @@ public class GPreferences extends JPanel annotationShding.setBorder(new TitledBorder( MessageManager.getString("label.annotation_shading_default"))); annotationShding.setLayout(new GridLayout(1, 2)); - JvSwingUtils.addtoLayout(annotationShding, + GPreferences.addtoLayout(annotationShding, MessageManager.getString( "label.default_minimum_colour_annotation_shading"), mincolourLabel, minColour); - JvSwingUtils.addtoLayout(annotationShding, + GPreferences.addtoLayout(annotationShding, MessageManager.getString( "label.default_maximum_colour_annotation_shading"), maxcolourLabel, maxColour); @@ -1635,7 +1802,6 @@ public class GPreferences extends JPanel { boolean selected = structFromPdb.isSelected(); // enable other options only when the first is checked - useRnaView.setEnabled(selected); addSecondaryStructure.setEnabled(selected); addTempFactor.setEnabled(selected); } @@ -1643,11 +1809,6 @@ public class GPreferences extends JPanel structureTab.add(structFromPdb); // indent checkboxes that are conditional on the first one - ypos += lineSpacing; - useRnaView.setFont(LABEL_FONT); - useRnaView.setText(MessageManager.getString("label.use_rnaview")); - useRnaView.setBounds(new Rectangle(25, ypos, width, height)); - structureTab.add(useRnaView); ypos += lineSpacing; addSecondaryStructure.setFont(LABEL_FONT); @@ -1693,11 +1854,13 @@ public class GPreferences extends JPanel ypos += lineSpacing; structureViewerPathLabel = new JLabel(); - structureViewerPathLabel.setFont(LABEL_FONT);// new Font("SansSerif", 0, 11)); + structureViewerPathLabel.setFont(LABEL_FONT);// new Font("SansSerif", 0, + // 11)); structureViewerPathLabel.setHorizontalAlignment(SwingConstants.LEFT); structureViewerPathLabel.setText(MessageManager .formatMessage("label.viewer_path", "Chimera(X)")); - structureViewerPathLabel.setBounds(new Rectangle(10, ypos, 170, height)); + structureViewerPathLabel + .setBounds(new Rectangle(10, ypos, 170, height)); structureViewerPathLabel.setEnabled(false); structureTab.add(structureViewerPathLabel); @@ -1715,6 +1878,34 @@ public class GPreferences extends JPanel { if (structureViewerPath.isEnabled() && e.getClickCount() == 2) { + structureViewer_actionPerformed( + (String) structViewer.getSelectedItem()); + } + }); + structureTab.add(structViewer); + ypos += lineSpacing; + structureViewerPathLabel = new JLabel(); + structureViewerPathLabel.setFont(LABEL_FONT);// new Font("SansSerif", 0, + // 11)); + structureViewerPathLabel.setHorizontalAlignment(SwingConstants.LEFT); + structureViewerPathLabel.setText(MessageManager + .formatMessage("label.viewer_path", "Chimera(X)")); + structureViewerPathLabel + .setBounds(new Rectangle(10, ypos, 170, height)); + structureViewerPathLabel.setEnabled(false); + structureTab.add(structureViewerPathLabel); + + structureViewerPath.setFont(LABEL_FONT); + structureViewerPath.setText(""); + structureViewerPath.setEnabled(false); + final String tooltip = JvSwingUtils.wrapTooltip(true, + MessageManager.getString("label.viewer_path_tip")); + structureViewerPath.setToolTipText(tooltip); + structureViewerPath.setBounds(new Rectangle(190, ypos, 290, height)); + structureViewerPath.addMouseListener(new MouseAdapter() + { + if (structureViewerPath.isEnabled() && e.getClickCount() == 2) + { String chosen = openFileChooser(); if (chosen != null) { @@ -1755,14 +1946,13 @@ public class GPreferences extends JPanel /* * hide Chimera options in JalviewJS */ - if (Platform.isJS()) + if (Platform.isJS()) { structureViewerPathLabel.setVisible(false); structureViewerPath.setVisible(false); viewerLabel.setVisible(false); structViewer.setVisible(false); } - return structureTab; } @@ -1776,16 +1966,29 @@ public class GPreferences extends JPanel } /** - * Show a dialog for the user to choose a file. Returns the chosen path, or - * null on Cancel. + * Show a dialog for the user to choose a file. Returns the chosen path, or null + * on Cancel. * * @return */ - protected String openFileChooser() + protected String openFileChooser(boolean forFolder) { String choice = null; JFileChooser chooser = new JFileChooser(); + // Enable appBundleIsTraversable in macOS FileChooser to allow selecting + // hidden executables within .app dirs + if (Platform.isMac()) + { + chooser.putClientProperty("JFileChooser.appBundleIsTraversable", + true); + } + + if (forFolder) + { + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + } + // chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle( MessageManager.getString("label.open_local_file")); @@ -2651,7 +2854,7 @@ public class GPreferences extends JPanel boolean ret = false; String warningMessage = MessageManager .getString("label.warning_confirm_change_reverse"); - int confirm = JvOptionPane.showConfirmDialog(Desktop.desktop, + int confirm = JvOptionPane.showConfirmDialog(Desktop.getDesktopPane(), warningMessage, MessageManager.getString("label.change_increment_decrement"), JvOptionPane.YES_NO_OPTION, JvOptionPane.WARNING_MESSAGE); @@ -3319,5 +3522,41 @@ public class GPreferences extends JPanel } } + + protected void validateHmmerPath() + { + } + + protected void validateCygwinPath() + { + } + + /** + * A helper method to add a panel containing a label and a component to a + * panel + * + * @param panel + * @param tooltip + * @param label + * @param valBox + */ + protected static void addtoLayout(JPanel panel, String tooltip, + JComponent label, JComponent valBox) + { + JPanel laypanel = new JPanel(new GridLayout(1, 2)); + JPanel labPanel = new JPanel(new BorderLayout()); + JPanel valPanel = new JPanel(); + labPanel.setBounds(new Rectangle(7, 7, 158, 23)); + valPanel.setBounds(new Rectangle(172, 7, 270, 23)); + labPanel.add(label, BorderLayout.WEST); + valPanel.add(valBox); + laypanel.add(labPanel); + laypanel.add(valPanel); + valPanel.setToolTipText(tooltip); + labPanel.setToolTipText(tooltip); + valBox.setToolTipText(tooltip); + panel.add(laypanel); + panel.validate(); + } }