X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fjbgui%2FGStructureChooser.java;h=d317e9721ace7d26a11bf42534cabbf0e421e3c7;hb=49ff0aa506eb0b2e031fa3e8d16337e0c8cf2508;hp=ccccfb4035e64e6de932074a917cb1702cbaceff;hpb=a20a6bc5758a4c6cb221d42174ace2f48e0002b3;p=jalview.git diff --git a/src/jalview/jbgui/GStructureChooser.java b/src/jalview/jbgui/GStructureChooser.java index ccccfb4..d317e97 100644 --- a/src/jalview/jbgui/GStructureChooser.java +++ b/src/jalview/jbgui/GStructureChooser.java @@ -21,24 +21,16 @@ package jalview.jbgui; -import jalview.datamodel.SequenceI; -import jalview.fts.api.FTSDataColumnI; -import jalview.fts.core.FTSDataColumnPreferences; -import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource; -import jalview.fts.service.pdb.PDBFTSRestClient; -import jalview.gui.AlignmentPanel; -import jalview.gui.Desktop; -import jalview.gui.JvSwingUtils; -import jalview.gui.StructureViewer; -import jalview.util.MessageManager; - import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; import java.awt.GridLayout; +import java.awt.Insets; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -67,8 +59,8 @@ import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListCellRenderer; +import javax.swing.SwingConstants; import javax.swing.Timer; -import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; @@ -76,6 +68,17 @@ import javax.swing.event.DocumentListener; import javax.swing.event.InternalFrameEvent; import javax.swing.table.TableColumn; +import jalview.datamodel.SequenceI; +import jalview.fts.api.FTSDataColumnI; +import jalview.fts.core.FTSDataColumnPreferences; +import jalview.gui.AlignmentPanel; +import jalview.gui.Desktop; +import jalview.gui.JvSwingUtils; +import jalview.gui.StructureViewer; +import jalview.structure.StructureImportSettings; +import jalview.structure.StructureImportSettings.TFType; +import jalview.util.MessageManager; +import jalview.util.Platform; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") @@ -90,6 +93,8 @@ public abstract class GStructureChooser extends JPanel { private static final Font VERDANA_12 = new Font("Verdana", 0, 12); + private static final Font VERDANA_10 = new Font("Verdana", 0, 10); + public static final String VIEWS_FILTER = "VIEWS_FILTER"; protected static final String VIEWS_FROM_FILE = "VIEWS_FROM_FILE"; @@ -121,7 +126,22 @@ public abstract class GStructureChooser extends JPanel protected JButton btn_newView; protected JButton btn_pdbFromFile = new JButton(); - + + protected JLabel lbl_pdbFile = new JLabel(); + + protected JLabel lbl_chooseTempFacType = new JLabel(); + + protected JComboBox combo_tempFacAs = new JComboBox<>(); + + protected boolean tempFacAsChanged = false; + + protected JButton btn_paeMatrixFile = new JButton(); + + protected JLabel lbl_paeFile = new JLabel(); + + // holder for icon and button + protected JPanel pnl_queryTDB; + protected JButton btn_queryTDB = new JButton(); protected JCheckBox chk_superpose = new JCheckBox( @@ -149,14 +169,14 @@ public abstract class GStructureChooser extends JPanel protected ImageIcon warningImage = new ImageIcon( getClass().getResource("/images/warning.gif")); - protected ImageIcon tdbImage = new ImageIcon( - getClass().getResource("/images/3d-beacons-logo-transparent.png")); + protected ImageIcon tdbImage = new ImageIcon(getClass() + .getResource("/images/3d-beacons-logo-transparent.png")); protected JLabel lbl_loading = new JLabel(loadingImage); protected JLabel lbl_pdbManualFetchStatus = new JLabel(errorImage); - protected JLabel lbl_fromFileStatus = new JLabel(errorImage); + // protected JLabel lbl_fromFileStatus = new JLabel(errorImage); protected AssociateSeqPanel idInputAssSeqPanel = new AssociateSeqPanel(); @@ -169,8 +189,9 @@ public abstract class GStructureChooser extends JPanel protected JTabbedPane pnl_filter = new JTabbedPane(); protected abstract FTSDataColumnPreferences getFTSDocFieldPrefs(); - protected abstract void setFTSDocFieldPrefs(FTSDataColumnPreferences newPrefs); + protected abstract void setFTSDocFieldPrefs( + FTSDataColumnPreferences newPrefs); protected FTSDataColumnI[] previousWantedFields; @@ -251,18 +272,20 @@ public abstract class GStructureChooser extends JPanel + "...\"") : JvSwingUtils.wrapTooltip(true, toolTipText))); return toolTipText; - } + } }; public GStructureChooser() { } + protected void initDialog() { try { jbInit(); + mainFrame.setFrameIcon(null); mainFrame.setVisible(false); mainFrame.invalidate(); mainFrame.pack(); @@ -272,29 +295,33 @@ public abstract class GStructureChooser extends JPanel e.printStackTrace(); } } - + // BH SwingJS optimization // (a) 100-ms interruptable timer for text entry -- BH 1/10/2019 // (b) two-character minimum, at least for JavaScript. - - private Timer timer; - - protected void txt_search_ActionPerformedDelayed() { - if (timer != null) { - timer.stop(); - } - timer = new Timer(300, new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - txt_search_ActionPerformed(); - } - }); - timer.setRepeats(false); - timer.start(); + + private Timer timer; + + protected void txt_search_ActionPerformedDelayed() + { + if (timer != null) + { + timer.stop(); + } + timer = new Timer(300, new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + txt_search_ActionPerformed(); + } + }); + timer.setRepeats(false); + timer.start(); } // - + /** * Initializes the GUI default properties * @@ -320,6 +347,7 @@ public abstract class GStructureChooser extends JPanel super.mousePressed(e); } } + @Override public void mouseClicked(MouseEvent e) { @@ -334,21 +362,22 @@ public abstract class GStructureChooser extends JPanel { if (!popupAction(e)) { - validateSelections(); + validateSelections(); } } + boolean popupAction(MouseEvent e) { - if (e.isPopupTrigger()) - { - Point pt = e.getPoint(); - int selectedRow = tbl_summary.rowAtPoint(pt); - if (showPopupFor(selectedRow,pt.x,pt.y)) - { - return true; - } - } - return false; + if (e.isPopupTrigger()) + { + Point pt = e.getPoint(); + int selectedRow = tbl_summary.rowAtPoint(pt); + if (showPopupFor(selectedRow, pt.x, pt.y)) + { + return true; + } + } + return false; } }); tbl_summary.addKeyListener(new KeyAdapter() @@ -388,7 +417,7 @@ public abstract class GStructureChooser extends JPanel JButton btn_cancel = new JButton( MessageManager.getString("action.cancel")); btn_cancel.setFont(VERDANA_12); - btn_cancel.addActionListener(new java.awt.event.ActionListener() + btn_cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -465,9 +494,11 @@ public abstract class GStructureChooser extends JPanel } }); - btn_newView = new JButton(MessageManager.getString("action.new_view")); + btn_newView = new JButton( + MessageManager.formatMessage("action.new_structure_view_with", + StructureViewer.getViewerType().toString())); btn_newView.setFont(VERDANA_12); - btn_newView.addActionListener(new java.awt.event.ActionListener() + btn_newView.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -487,9 +518,12 @@ public abstract class GStructureChooser extends JPanel } }); + // TODO: JAL-3898 - get list of available external programs to view + // structures with + btn_add = new JButton(MessageManager.getString("action.add")); btn_add.setFont(VERDANA_12); - btn_add.addActionListener(new java.awt.event.ActionListener() + btn_add.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -512,7 +546,7 @@ public abstract class GStructureChooser extends JPanel btn_pdbFromFile.setFont(VERDANA_12); String btn_title = MessageManager.getString("label.select_pdb_file"); btn_pdbFromFile.setText(btn_title + " "); - btn_pdbFromFile.addActionListener(new java.awt.event.ActionListener() + btn_pdbFromFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -531,6 +565,55 @@ public abstract class GStructureChooser extends JPanel } } }); + lbl_pdbFile.setFont(VERDANA_10); + lbl_pdbFile.setFont(VERDANA_10); + + lbl_chooseTempFacType.setFont(VERDANA_12); + lbl_chooseTempFacType.setText(new StringBuilder() + .append(MessageManager.getString("label.choose_tempfac_type")) + .append(" ").append(MessageManager.getString("label.optional")) + .toString()); + + combo_tempFacAs.setFont(VERDANA_12); + for (TFType t : TFType.values()) + { + combo_tempFacAs.addItem(t); + } + combo_tempFacAs.addItemListener(new ItemListener() + { + @Override + public void itemStateChanged(ItemEvent e) + { + // used to determine if we should guess pLDDT or leave a user-choice + tempFacAsChanged = true; + } + }); + + btn_paeMatrixFile.setFont(VERDANA_12); + btn_paeMatrixFile.setText(new StringBuilder() + .append(MessageManager.getString("label.add_pae_matrix_file")) + .append(" ").append(MessageManager.getString("label.optional")) + .toString()); + btn_paeMatrixFile.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + paeMatrixFile_actionPerformed(); + } + }); + btn_paeMatrixFile.addKeyListener(new KeyAdapter() + { + @Override + public void keyPressed(KeyEvent evt) + { + if (evt.getKeyCode() == KeyEvent.VK_ENTER) + { + paeMatrixFile_actionPerformed(); + } + } + }); + lbl_paeFile.setFont(VERDANA_10); JScrollPane scrl_foundStructures = new JScrollPane(tbl_summary); scrl_foundStructures.setPreferredSize(new Dimension(width, height)); @@ -581,11 +664,23 @@ public abstract class GStructureChooser extends JPanel }); chk_invertFilter.addItemListener(this); - btn_queryTDB.setFont(VERDANA_12); - //btn_queryTDB.setPreferredSize(new Dimension(200,22)); - btn_queryTDB.setText(MessageManager.getString("label.search_3dbeacons")); - btn_queryTDB.setToolTipText(MessageManager.getString("label.find_models_from_3dbeacons")); + btn_queryTDB = new JButton(); + if (Platform.isMac()) + { + // needed to make icon button have round corners in vaqua + btn_queryTDB.putClientProperty("JButton.buttonType", "bevel"); + } + btn_queryTDB.setMargin(new Insets(0, 16, 0, 20)); + btn_queryTDB + .setText(MessageManager.getString("label.search_3dbeacons")); + btn_queryTDB.setIconTextGap(12); btn_queryTDB.setIcon(tdbImage); + btn_queryTDB.setVerticalTextPosition(SwingConstants.CENTER); + btn_queryTDB.setHorizontalTextPosition(SwingConstants.TRAILING); + btn_queryTDB.setFont(VERDANA_12); + btn_queryTDB.setToolTipText( + MessageManager.getString("label.find_models_from_3dbeacons")); + // btn_queryTDB.setPreferredSize(new Dimension(200, 32)); btn_queryTDB.setVisible(false); targetView.setVisible(false); @@ -599,19 +694,54 @@ public abstract class GStructureChooser extends JPanel JPanel pnl_main = new JPanel(new BorderLayout()); JPanel pnl_controls = new JPanel(); - pnl_main.add(btn_queryTDB,BorderLayout.NORTH); + pnl_queryTDB = new JPanel(); + pnl_queryTDB.setLayout(new FlowLayout(FlowLayout.CENTER, 4, 4)); + pnl_queryTDB.setBackground(getBackground()); + pnl_queryTDB.add(btn_queryTDB); + + pnl_queryTDB.setVisible(false); + pnl_main.add(pnl_queryTDB, BorderLayout.NORTH); pnl_controls.add(cmb_filterOption); pnl_controls.add(lbl_loading); pnl_controls.add(chk_invertFilter); - pnl_main.add(pnl_controls,BorderLayout.CENTER); + pnl_main.add(pnl_controls, BorderLayout.CENTER); lbl_loading.setVisible(false); - JPanel pnl_fileChooser = new JPanel(new FlowLayout()); - pnl_fileChooser.add(btn_pdbFromFile); - pnl_fileChooser.add(lbl_fromFileStatus); + // JPanel pnl_fileChooser = new JPanel(new FlowLayout()); + // pnl_fileChooser.add(btn_pdbFromFile); + // pnl_fileChooser.add(lbl_fromFileStatus); + + JPanel pnl_fileOptions = new JPanel(); + pnl_fileOptions.setLayout(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weightx = 0.0; + gbc.weighty = 0.0; + gbc.insets = new Insets(0, 0, 2, 0); + gbc.fill = GridBagConstraints.NONE; + gbc.anchor = GridBagConstraints.FIRST_LINE_START; + // pnl_fileOptions.add(pnl_fileChooser, gbc); + pnl_fileOptions.add(btn_pdbFromFile, gbc); + gbc.gridy++; + gbc.insets = new Insets(0, 0, 18, 0); + pnl_fileOptions.add(lbl_pdbFile, gbc); + gbc.gridy++; + gbc.insets = new Insets(0, 0, 2, 0); + pnl_fileOptions.add(lbl_chooseTempFacType, gbc); + gbc.gridy++; + gbc.insets = new Insets(0, 0, 18, 0); + pnl_fileOptions.add(combo_tempFacAs, gbc); + gbc.gridy++; + gbc.insets = new Insets(0, 0, 2, 0); + pnl_fileOptions.add(btn_paeMatrixFile, gbc); + gbc.gridy++; + gbc.weighty = 1.0; + pnl_fileOptions.add(lbl_paeFile, gbc); + JPanel pnl_fileChooserBL = new JPanel(new BorderLayout()); - pnl_fileChooserBL.add(fileChooserAssSeqPanel, BorderLayout.NORTH); - pnl_fileChooserBL.add(pnl_fileChooser, BorderLayout.CENTER); + pnl_fileChooserBL.add(fileChooserAssSeqPanel, BorderLayout.PAGE_START); + pnl_fileChooserBL.add(pnl_fileOptions, BorderLayout.CENTER); JPanel pnl_idInput = new JPanel(new FlowLayout()); pnl_idInput.add(txt_search); @@ -708,9 +838,9 @@ public abstract class GStructureChooser extends JPanel Desktop.addInternalFrame(mainFrame, frameTitle, width, height); } + protected abstract boolean showPopupFor(int selectedRow, int x, int y); -protected abstract boolean showPopupFor(int selectedRow, int x, int y); -protected void closeAction(int preferredHeight) + protected void closeAction(int preferredHeight) { // System.out.println(">>>>>>>>>> closing internal frame!!!"); // System.out.println("width : " + mainFrame.getWidth()); @@ -916,6 +1046,8 @@ protected void closeAction(int preferredHeight) protected abstract void pdbFromFile_actionPerformed(); + protected abstract void paeMatrixFile_actionPerformed(); + protected abstract void txt_search_ActionPerformed(); protected abstract void populateCmbAssociateSeqOptions( @@ -927,4 +1059,16 @@ protected void closeAction(int preferredHeight) protected abstract void tabRefresh(); protected abstract void validateSelections(); -} \ No newline at end of file + + public JInternalFrame getFrame() + { + return mainFrame; + } + + public void setPdbOptionsEnabled(boolean b) + { + lbl_chooseTempFacType.setEnabled(b); + combo_tempFacAs.setEnabled(b); + btn_paeMatrixFile.setEnabled(b); + } +}