X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fjbgui%2FGStructureChooser.java;h=5b04359db6e2c0f0f5c0a62f2f5201652a354255;hb=refs%2Fheads%2Fspike%2FJAL-4047%2FJAL-4048_columns_in_sequenceID;hp=fadfe6da410abceb1a69a6e76a43d589d68281f8;hpb=27dc4596d13971e00f04578d469c5e3eb604757f;p=jalview.git diff --git a/src/jalview/jbgui/GStructureChooser.java b/src/jalview/jbgui/GStructureChooser.java index fadfe6d..5b04359 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,6 +59,7 @@ 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.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -75,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") @@ -89,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"; @@ -100,6 +106,8 @@ public abstract class GStructureChooser extends JPanel */ protected static final String VIEWS_LOCAL_PDB = "VIEWS_LOCAL_PDB"; + protected JPanel actionsPanel; + protected JPanel statusPanel = new JPanel(); public JLabel statusBar = new JLabel(); @@ -115,12 +123,31 @@ public abstract class GStructureChooser extends JPanel protected StringBuilder errorWarning = new StringBuilder(); + protected JButton btn_cancel; + protected JButton btn_add; 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( MessageManager.getString("label.superpose_structures")); @@ -146,11 +173,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 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(); @@ -163,8 +193,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; @@ -245,50 +276,56 @@ 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(); } catch (Exception e) { - System.out.println(e); // for JavaScript TypeError + jalview.bin.Console.outPrintln(e); // for JavaScript TypeError 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 * @@ -314,6 +351,7 @@ public abstract class GStructureChooser extends JPanel super.mousePressed(e); } } + @Override public void mouseClicked(MouseEvent e) { @@ -328,21 +366,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() @@ -379,10 +418,9 @@ public abstract class GStructureChooser extends JPanel } }); - JButton btn_cancel = new JButton( - MessageManager.getString("action.cancel")); + 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) @@ -459,9 +497,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) @@ -481,9 +521,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) @@ -506,7 +549,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) @@ -525,6 +568,51 @@ public abstract class GStructureChooser extends JPanel } } }); + lbl_pdbFile.setFont(VERDANA_10); + lbl_pdbFile.setFont(VERDANA_10); + + lbl_chooseTempFacType.setFont(VERDANA_12); + lbl_chooseTempFacType.setText( + MessageManager.getString("label.interpret_tempfac_as")); + + 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(MessageManager.getString("label.add_pae_matrix_file")); + 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)); @@ -575,28 +663,92 @@ public abstract class GStructureChooser extends JPanel }); chk_invertFilter.addItemListener(this); + 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); - JPanel actionsPanel = new JPanel(new MigLayout()); + actionsPanel = new JPanel(new MigLayout()); actionsPanel.add(targetView, "left"); actionsPanel.add(btn_add, "wrap"); actionsPanel.add(chk_superpose, "left"); actionsPanel.add(btn_newView); actionsPanel.add(btn_cancel, "right"); - JPanel pnl_main = new JPanel(); - pnl_main.add(cmb_filterOption); - pnl_main.add(lbl_loading); - pnl_main.add(chk_invertFilter); + JPanel pnl_main = new JPanel(new BorderLayout()); + JPanel pnl_controls = new JPanel(); + 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); 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(new JLabel( + MessageManager.getString("label.structure_import_options")), + gbc); + gbc.gridy++; + + gbc.insets = new Insets(0, 0, 6, 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, 6, 0); + pnl_fileOptions.add(btn_paeMatrixFile, gbc); + gbc.gridy++; + gbc.insets = new Insets(0, 0, 2, 0); + 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); @@ -693,15 +845,15 @@ 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()); - // System.out.println("heigh : " + mainFrame.getHeight()); - // System.out.println("x : " + mainFrame.getX()); - // System.out.println("y : " + mainFrame.getY()); + // jalview.bin.Console.outPrintln(">>>>>>>>>> closing internal frame!!!"); + // jalview.bin.Console.outPrintln("width : " + mainFrame.getWidth()); + // jalview.bin.Console.outPrintln("heigh : " + mainFrame.getHeight()); + // jalview.bin.Console.outPrintln("x : " + mainFrame.getX()); + // jalview.bin.Console.outPrintln("y : " + mainFrame.getY()); tempUserPrefs.put("structureChooser.width", pnl_filter.getWidth()); tempUserPrefs.put("structureChooser.height", preferredHeight); tempUserPrefs.put("structureChooser.x", mainFrame.getX()); @@ -901,6 +1053,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( @@ -912,4 +1066,17 @@ 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); + lbl_paeFile.setEnabled(b); + } +}