X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fjbgui%2FGPreferences.java;h=4e909f1812268b2a9ea232aeccca74cf6cc89932;hb=7692386ccfe778075dd83a753d30a7a27fe507be;hp=bb6f22384f7706861b1ed0b72cb2ad889ce4b183;hpb=cef7be0f9008ff15318e3479a5de35e127071ef3;p=jalview.git diff --git a/src/jalview/jbgui/GPreferences.java b/src/jalview/jbgui/GPreferences.java index bb6f223..4e909f1 100755 --- a/src/jalview/jbgui/GPreferences.java +++ b/src/jalview/jbgui/GPreferences.java @@ -26,6 +26,7 @@ import jalview.fts.service.pdb.PDBFTSRestClient; import jalview.gui.JvSwingUtils; import jalview.gui.StructureViewer.ViewerType; import jalview.util.MessageManager; +import jalview.util.Platform; import java.awt.BorderLayout; import java.awt.Color; @@ -40,7 +41,6 @@ import java.awt.Insets; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -48,11 +48,13 @@ import java.awt.event.MouseEvent; 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; @@ -72,6 +74,8 @@ import javax.swing.event.ChangeListener; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; +import net.miginfocom.swing.MigLayout; + /** * Base class for the Preferences panel. * @@ -187,6 +191,19 @@ public class GPreferences extends JPanel protected JComboBox nucColour = new JComboBox<>(); /* + * Overview tab components + */ + protected JPanel gapColour = new JPanel(); + + protected JPanel hiddenColour = new JPanel(); + + protected JCheckBox useLegacyGap; + + protected JCheckBox showHiddenAtStart; + + protected JLabel gapLabel; + + /* * Connections tab components */ protected JTable linkUrlTable = new JTable(); @@ -260,34 +277,19 @@ public class GPreferences extends JPanel /* * hmmer tab and components */ - protected JPanel hmmerTab = new JPanel(); - - protected JCheckBox trimTermini = new JCheckBox(); - - protected ButtonGroup backgroundFreqSource = new ButtonGroup(); + protected JPanel hmmerTab; - protected AbstractButton uniprot = new JCheckBox(); + protected JCheckBox hmmrTrimTermini; - protected AbstractButton alignment = new JCheckBox(); + protected AbstractButton hmmerBackgroundUniprot; - protected JLabel sequencesToKeep = new JLabel(); + protected AbstractButton hmmerBackgroundAlignment; - protected JTextField numberOfSequencesToKeepField = new JTextField(); + protected JTextField hmmerSequenceCount; - protected JLabel installationLocation = new JLabel(); + protected JTextField hmmerPath; - protected JCheckBox isHMMERInstalled = new JCheckBox(); - - protected JTextField hmmerPath = new JTextField(); - - protected JLabel hmmsearch = new JLabel(); - - protected JLabel hmmalign = new JLabel(); - - /* - * DAS Settings tab - */ - protected JPanel dasTab = new JPanel(); + protected JTextField cygwinPath; /* * Web Services tab @@ -329,6 +331,9 @@ public class GPreferences extends JPanel tabbedPane.add(initColoursTab(), MessageManager.getString("label.colours")); + tabbedPane.add(initOverviewTab(), + MessageManager.getString("label.overview")); + tabbedPane.add(initStructureTab(), MessageManager.getString("label.structure")); @@ -347,12 +352,6 @@ public class GPreferences extends JPanel tabbedPane.add(initHMMERTab(), MessageManager.getString("label.hmmer")); /* - * See DasSourceBrowser for the real work of configuring this tab. - */ - dasTab.setLayout(new BorderLayout()); - tabbedPane.add(dasTab, MessageManager.getString("label.das_settings")); - - /* * See WsPreferences for the real work of configuring this tab. */ wsTab.setLayout(new BorderLayout()); @@ -360,7 +359,7 @@ public class GPreferences extends JPanel /* * Handler to validate a tab before leaving it - currently only for - * Structure. + * Structure */ tabbedPane.addChangeListener(new ChangeListener() { @@ -378,16 +377,6 @@ public class GPreferences extends JPanel return; } } - else if (lastTab == hmmerTab - && tabbedPane.getSelectedComponent() != hmmerTab - && isHMMERInstalled.isSelected()) - { - if (!validateHMMER()) - { - tabbedPane.setSelectedComponent(hmmerTab); - } - return; - } lastTab = tabbedPane.getSelectedComponent(); } @@ -424,51 +413,29 @@ public class GPreferences extends JPanel } /** - * Initialises the hmmer tabbed panel. + * Initialises the hmmer tabbed panel * * @return */ private JPanel initHMMERTab() { - hmmerTab.setLayout(null); + hmmerTab = new JPanel(); + hmmerTab.setLayout(new BoxLayout(hmmerTab, BoxLayout.Y_AXIS)); + hmmerTab.setLayout(new MigLayout("flowy")); - hmmalign.setFont(LABEL_FONT); - hmmalign.setText(MessageManager.getString("label.hmmalign_label")); - hmmalign.setBounds(new Rectangle(22, 10, 200, 23)); - - trimTermini.setFont(LABEL_FONT); - trimTermini.setText(MessageManager.getString("label.trim_termini")); - trimTermini.setBounds(new Rectangle(22, 30, 200, 23)); - - hmmsearch.setFont(LABEL_FONT); - hmmsearch.setText(MessageManager.getString("label.hmmsearch_label")); - hmmsearch.setBounds(new Rectangle(250, 10, 200, 23)); - - sequencesToKeep.setFont(LABEL_FONT); - sequencesToKeep - .setText(MessageManager.getString("label.no_of_sequences")); - sequencesToKeep.setBounds(new Rectangle(250, 30, 125, 23)); - numberOfSequencesToKeepField.setBounds(new Rectangle(375, 30, 40, 23)); - - isHMMERInstalled.setFont(LABEL_FONT); - isHMMERInstalled.setText( - MessageManager.getString("label.hmmer_installed")); - isHMMERInstalled.setBounds(new Rectangle(22, 180, 200, 23)); - isHMMERInstalled.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - boolean status = isHMMERInstalled.isSelected(); - installationLocation.setEnabled(status); - hmmerPath.setEnabled(status); - } - }); - installationLocation.setFont(LABEL_FONT); - installationLocation.setText( - MessageManager.getString("label.change_hmmer_location")); - installationLocation.setBounds(new Rectangle(22, 200, 200, 23)); - hmmerPath.setBounds(new Rectangle(22, 220, 200, 23)); + /* + * 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 @@ -480,34 +447,95 @@ public class GPreferences extends JPanel if (chosen != null) { hmmerPath.setText(chosen); + validateHmmerPath(); } } } }); + installationPanel.add(hmmerLocation); + installationPanel.add(hmmerPath); - backgroundFreqSource.add(uniprot); - backgroundFreqSource.add(alignment); - backgroundFreqSource.setSelected(uniprot.getModel(), true); - - uniprot.setText(MessageManager.getString("label.freq_uniprot")); - uniprot.setFont(LABEL_FONT); - uniprot.setBounds(new Rectangle(22, 260, 255, 23)); - - alignment.setText(MessageManager.getString("label.freq_alignment")); - alignment.setFont(LABEL_FONT); - alignment.setBounds(new Rectangle(22, 280, 255, 23)); - - hmmerTab.add(uniprot); - hmmerTab.add(alignment); - hmmerTab.add(hmmalign); - hmmerTab.add(hmmsearch); - hmmerTab.add(installationLocation); - hmmerTab.add(hmmerPath); - hmmerTab.add(trimTermini); - hmmerTab.add(sequencesToKeep); - hmmerTab.add(sequencesToKeep); - hmmerTab.add(numberOfSequencesToKeepField); - hmmerTab.add(isHMMERInstalled); + /* + * path to Cygwin binaries folder (for Windows) + */ + if (Platform.isWindows()) + { + 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; } @@ -644,7 +672,9 @@ public class GPreferences extends JPanel MessageManager.getString("label.default_browser_unix")); defaultBrowser.setFont(LABEL_FONT); defaultBrowser.setText(""); - + final String tooltip = JvSwingUtils.wrapTooltip(true, + MessageManager.getString("label.double_click_to_browse")); + defaultBrowser.setToolTipText(tooltip); defaultBrowser.addMouseListener(new MouseAdapter() { @Override @@ -1065,7 +1095,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); @@ -1077,7 +1107,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); @@ -1086,11 +1116,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); @@ -1099,6 +1129,151 @@ public class GPreferences extends JPanel } /** + * Initialises the Overview tabbed panel. + * + * @return + */ + private JPanel initOverviewTab() + { + JPanel overviewPanel = new JPanel(); + overviewPanel.setBorder(new TitledBorder( + MessageManager.getString("label.overview_settings"))); + + gapColour.setFont(LABEL_FONT); + // fixing the border colours stops apparent colour bleed from the panel + gapColour.setBorder( + BorderFactory.createEtchedBorder(Color.white, Color.lightGray)); + gapColour.setPreferredSize(new Dimension(40, 20)); + gapColour.addMouseListener(new MouseAdapter() + { + @Override + public void mousePressed(MouseEvent e) + { + gapColour_actionPerformed(gapColour); + } + }); + + hiddenColour.setFont(LABEL_FONT); + // fixing the border colours stops apparent colour bleed from the panel + hiddenColour.setBorder( + BorderFactory.createEtchedBorder(Color.white, Color.lightGray)); + hiddenColour.setPreferredSize(new Dimension(40, 20)); + hiddenColour.addMouseListener(new MouseAdapter() + { + @Override + public void mousePressed(MouseEvent e) + { + hiddenColour_actionPerformed(hiddenColour); + } + }); + + useLegacyGap = new JCheckBox( + MessageManager.getString("label.ov_legacy_gap")); + useLegacyGap.setFont(LABEL_FONT); + useLegacyGap.setHorizontalAlignment(SwingConstants.LEFT); + useLegacyGap.setVerticalTextPosition(SwingConstants.TOP); + gapLabel = new JLabel( + MessageManager.getString("label.gap_colour")); + gapLabel.setFont(LABEL_FONT); + gapLabel.setHorizontalAlignment(SwingConstants.LEFT); + gapLabel.setVerticalTextPosition(SwingConstants.TOP); + showHiddenAtStart = new JCheckBox( + MessageManager.getString("label.ov_show_hide_default")); + showHiddenAtStart.setFont(LABEL_FONT); + showHiddenAtStart.setHorizontalAlignment(SwingConstants.LEFT); + showHiddenAtStart.setVerticalTextPosition(SwingConstants.TOP); + JLabel hiddenLabel = new JLabel( + MessageManager.getString("label.hidden_colour")); + hiddenLabel.setFont(LABEL_FONT); + hiddenLabel.setHorizontalAlignment(SwingConstants.LEFT); + hiddenLabel.setVerticalTextPosition(SwingConstants.TOP); + + useLegacyGap.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + useLegacyGaps_actionPerformed(e); + } + }); + + overviewPanel.setLayout(new GridBagLayout()); + GridBagConstraints c1 = new GridBagConstraints(); + + c1.fill = GridBagConstraints.HORIZONTAL; + c1.gridx = 0; + c1.gridy = 0; + c1.weightx = 1; + c1.ipady = 20; + c1.anchor = GridBagConstraints.FIRST_LINE_START; + overviewPanel.add(useLegacyGap, c1); + + GridBagConstraints c2 = new GridBagConstraints(); + c2.fill = GridBagConstraints.HORIZONTAL; + c2.gridx = 1; + c2.gridy = 0; + c2.insets = new Insets(0, 15, 0, 10); + overviewPanel.add(gapLabel, c2); + + GridBagConstraints c3 = new GridBagConstraints(); + c3.fill = GridBagConstraints.HORIZONTAL; + c3.gridx = 2; + c3.gridy = 0; + c3.insets = new Insets(0, 0, 0, 15); + overviewPanel.add(gapColour, c3); + + GridBagConstraints c4 = new GridBagConstraints(); + c4.fill = GridBagConstraints.HORIZONTAL; + c4.gridx = 0; + c4.gridy = 1; + c4.weightx = 1; + overviewPanel.add(showHiddenAtStart, c4); + + GridBagConstraints c5 = new GridBagConstraints(); + c5.fill = GridBagConstraints.HORIZONTAL; + c5.gridx = 1; + c5.gridy = 1; + c5.insets = new Insets(0, 15, 0, 10); + overviewPanel.add(hiddenLabel, c5); + + GridBagConstraints c6 = new GridBagConstraints(); + c6.fill = GridBagConstraints.HORIZONTAL; + c6.gridx = 2; + c6.gridy = 1; + c6.insets = new Insets(0, 0, 0, 15); + overviewPanel.add(hiddenColour, c6); + + JButton resetButton = new JButton( + MessageManager.getString("label.reset_to_defaults")); + + resetButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + resetOvDefaults_actionPerformed(e); + } + }); + + GridBagConstraints c7 = new GridBagConstraints(); + c7.fill = GridBagConstraints.NONE; + c7.gridx = 0; + c7.gridy = 2; + c7.insets = new Insets(10, 0, 0, 0); + c7.anchor = GridBagConstraints.WEST; + overviewPanel.add(resetButton, c7); + + // Add padding so the panel doesn't look ridiculous + JPanel spacePanel = new JPanel(); + overviewPanel.add(spacePanel, + new GridBagConstraints(0, 3, 1, 1, 1.0, 1.0, + GridBagConstraints.WEST, GridBagConstraints.BOTH, + new Insets(0, 0, 0, 5), 0, 0)); + + return overviewPanel; + } + + /** * Initialises the Structure tabbed panel. * * @return @@ -1181,14 +1356,14 @@ public class GPreferences extends JPanel pathLabel.setFont(new java.awt.Font("SansSerif", 0, 11)); pathLabel.setHorizontalAlignment(SwingConstants.LEFT); pathLabel.setText(MessageManager.getString("label.chimera_path")); - final String tooltip = JvSwingUtils.wrapTooltip(true, - MessageManager.getString("label.chimera_path_tip")); - pathLabel.setToolTipText(tooltip); pathLabel.setBounds(new Rectangle(10, ypos, 140, height)); structureTab.add(pathLabel); chimeraPath.setFont(LABEL_FONT); chimeraPath.setText(""); + final String tooltip = JvSwingUtils.wrapTooltip(true, + MessageManager.getString("label.chimera_path_tip")); + chimeraPath.setToolTipText(tooltip); chimeraPath.setBounds(new Rectangle(160, ypos, 300, height)); chimeraPath.addMouseListener(new MouseAdapter() { @@ -1275,46 +1450,11 @@ public class GPreferences extends JPanel return choice; } - /** - * Validate the structure tab preferences; if invalid, set focus on this tab. - * - * @param e - */ - protected boolean validateStructure(FocusEvent e) - { - if (!validateStructure()) - { - e.getComponent().requestFocusInWindow(); - return false; - } - return true; - } - - /** - * Validate the hmmer tab preferences; if invalid, set focus on this tab. - * - * @param e - */ - protected boolean validateHMMER(FocusEvent e) - { - if (!validateHMMER()) - { - e.getComponent().requestFocusInWindow(); - return false; - } - return true; - } - protected boolean validateStructure() { return false; } - protected boolean validateHMMER() - { - return false; - } - /** * Initialises the Visual tabbed panel. * @@ -1511,6 +1651,9 @@ public class GPreferences extends JPanel startupCheckbox.setSelected(true); startupFileTextfield.setFont(LABEL_FONT); startupFileTextfield.setBounds(new Rectangle(172, 310, 330, 20)); + final String tooltip = JvSwingUtils.wrapTooltip(true, + MessageManager.getString("label.double_click_to_browse")); + startupFileTextfield.setToolTipText(tooltip); startupFileTextfield.addMouseListener(new MouseAdapter() { @Override @@ -1654,12 +1797,28 @@ public class GPreferences extends JPanel { } + protected void gapColour_actionPerformed(JPanel panel) + { + } + + protected void hiddenColour_actionPerformed(JPanel panel) + { + } + protected void showunconserved_actionPerformed(ActionEvent e) { // TODO Auto-generated method stub } + protected void useLegacyGaps_actionPerformed(ActionEvent e) + { + } + + protected void resetOvDefaults_actionPerformed(ActionEvent e) + { + } + /** * DOCUMENT ME! * @@ -1803,8 +1962,39 @@ public class GPreferences extends JPanel } - public void hmmerPath_actionPerformed(ActionEvent e) + 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(); } }