X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fjbgui%2FGPreferences.java;h=610f32e1f81e1a030f84dcd42d62b73c704956fc;hb=ead72caff9aef9b7103dbb15907aeae777200832;hp=f3289a3e418f60d1b4e228ee5d3479aab09949ea;hpb=6a1564abce042be6eb37fd3ae883921e00a2bd0c;p=jalview.git diff --git a/src/jalview/jbgui/GPreferences.java b/src/jalview/jbgui/GPreferences.java index f3289a3..610f32e 100755 --- a/src/jalview/jbgui/GPreferences.java +++ b/src/jalview/jbgui/GPreferences.java @@ -26,6 +26,7 @@ import jalview.util.MessageManager; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; @@ -36,6 +37,7 @@ 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; @@ -45,6 +47,7 @@ import javax.swing.DefaultListCellRenderer; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; +import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; @@ -56,6 +59,8 @@ import javax.swing.SwingConstants; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -128,8 +133,10 @@ public class GPreferences extends JPanel protected JCheckBox showNpTooltip = new JCheckBox(); /* - * Annotations tab components + * Structure tab and components */ + protected JPanel structureTab; + protected JCheckBox structFromPdb = new JCheckBox(); protected JCheckBox useRnaView = new JCheckBox(); @@ -140,6 +147,8 @@ public class GPreferences extends JPanel protected JComboBox structViewer = new JComboBox(); + protected JTextField chimeraPath = new JTextField(); + /* * Colours tab components */ @@ -237,7 +246,7 @@ public class GPreferences extends JPanel */ private void jbInit() throws Exception { - JTabbedPane tabbedPane = new JTabbedPane(); + final JTabbedPane tabbedPane = new JTabbedPane(); this.setLayout(new BorderLayout()); JPanel okCancelPanel = initOkCancelPanel(); this.add(tabbedPane, BorderLayout.CENTER); @@ -271,6 +280,31 @@ public class GPreferences extends JPanel */ wsTab.setLayout(new BorderLayout()); tabbedPane.add(wsTab, MessageManager.getString("label.web_services")); + + /* + * Handler to validate a tab before leaving it - currently only for + * Structure. + */ + tabbedPane.addChangeListener(new ChangeListener() + { + private Component lastTab; + + @Override + public void stateChanged(ChangeEvent e) + { + if (lastTab == structureTab + && tabbedPane.getSelectedComponent() != structureTab) + { + if (!validateStructure()) + { + tabbedPane.setSelectedComponent(structureTab); + return; + } + } + lastTab = tabbedPane.getSelectedComponent(); + } + + }); } /** @@ -689,7 +723,8 @@ public class GPreferences extends JPanel */ private JPanel initStructureTab() { - JPanel structureTab = new JPanel(); + structureTab = new JPanel(); + structureTab.setBorder(new TitledBorder(MessageManager .getString("label.structure_options"))); structureTab.setLayout(null); @@ -744,15 +779,109 @@ public class GPreferences extends JPanel structureTab.add(viewerLabel); structViewer.setFont(verdana11); - structViewer.setBounds(new Rectangle(150, ypos, 120, height)); + structViewer.setBounds(new Rectangle(160, ypos, 120, height)); structViewer.addItem(Viewer.JMOL.name()); structViewer.addItem(Viewer.CHIMERA.name()); + structViewer.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + structureViewer_actionPerformed((String) structViewer + .getSelectedItem()); + } + }); structureTab.add(structViewer); + ypos += lineSpacing; + JLabel pathLabel = new JLabel(); + 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(verdana11); + chimeraPath.setText(""); + chimeraPath.setBounds(new Rectangle(160, ypos, 300, height)); + chimeraPath.addMouseListener(new MouseAdapter() + { + @Override + public void mouseClicked(MouseEvent e) + { + if (e.getClickCount() == 2) + { + String chosen = openFileChooser(); + if (chosen != null) + { + chimeraPath.setText(chosen); + } + } + } + }); + structureTab.add(chimeraPath); + return structureTab; } /** + * Action on choosing a structure viewer from combobox options. + * + * @param selectedItem + */ + protected void structureViewer_actionPerformed(String selectedItem) + { + } + + /** + * Show a dialog for the user to choose a file. Returns the chosen path, or + * null on Cancel. + * + * @return + */ + protected String openFileChooser() + { + String choice = null; + JFileChooser chooser = new JFileChooser(); + + // chooser.setFileView(new JalviewFileView()); + chooser.setDialogTitle(MessageManager + .getString("label.open_local_file")); + chooser.setToolTipText(MessageManager.getString("action.open")); + + int value = chooser.showOpenDialog(this); + + if (value == JFileChooser.APPROVE_OPTION) + { + choice = chooser.getSelectedFile().getPath(); + } + 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; + } + + protected boolean validateStructure() + { + return false; + } + + /** * Initialises the Visual tabbed panel. * * @return @@ -912,9 +1041,9 @@ public class GPreferences extends JPanel fontLabel.setHorizontalAlignment(SwingConstants.RIGHT); fontLabel.setText(MessageManager.getString("label.font")); fontSizeCB.setFont(verdana11); - fontSizeCB.setBounds(new Rectangle(319, 104, 49, 23)); + fontSizeCB.setBounds(new Rectangle(320, 104, 65, 23)); fontStyleCB.setFont(verdana11); - fontStyleCB.setBounds(new Rectangle(367, 104, 70, 23)); + fontStyleCB.setBounds(new Rectangle(382, 104, 80, 23)); fontNameCB.setFont(verdana11); fontNameCB.setBounds(new Rectangle(172, 104, 147, 23)); gapSymbolCB.setFont(verdana11); @@ -948,13 +1077,13 @@ public class GPreferences extends JPanel sortLabel.setHorizontalAlignment(SwingConstants.RIGHT); sortLabel.setText(MessageManager.getString("label.sort_by")); sortAnnBy.setFont(verdana11); - sortAnnBy.setBounds(new Rectangle(172, 265, 120, 21)); + sortAnnBy.setBounds(new Rectangle(172, 265, 110, 21)); JLabel sortAnnLabel = new JLabel(); sortAnnLabel.setFont(verdana11); sortAnnLabel.setHorizontalAlignment(SwingConstants.RIGHT); sortAnnLabel.setText(MessageManager.getString("label.sort_ann_by")); sortAutocalc.setFont(verdana11); - sortAutocalc.setBounds(new Rectangle(300, 265, 185, 21)); + sortAutocalc.setBounds(new Rectangle(290, 265, 165, 21)); JPanel annsettingsPanel = new JPanel(); annsettingsPanel.setBounds(new Rectangle(173, 34, 300, 61)); annsettingsPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));