X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Ffts%2Fcore%2FGFTSPanel.java;h=d52ff892684ee6d454747ea364952963385eda83;hb=4469e6d2c6a0c05c6278b10b0a157522aaa98091;hp=5a11107808744d66ca9fdf7c716c8473aee66d43;hpb=75569aced8ade4601d4c36583bf4392299229266;p=jalview.git diff --git a/src/jalview/fts/core/GFTSPanel.java b/src/jalview/fts/core/GFTSPanel.java index 5a11107..d52ff89 100644 --- a/src/jalview/fts/core/GFTSPanel.java +++ b/src/jalview/fts/core/GFTSPanel.java @@ -21,19 +21,10 @@ package jalview.fts.core; -import jalview.fts.api.FTSDataColumnI; -import jalview.fts.api.GFTSPanelI; -import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource; -import jalview.gui.Desktop; -import jalview.gui.IProgressIndicator; -import jalview.gui.JvSwingUtils; -import jalview.gui.SequenceFetcher; -import jalview.io.cache.JvCacheableInputBox; -import jalview.util.MessageManager; - import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Dimension; +import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; @@ -73,7 +64,18 @@ import javax.swing.event.DocumentListener; import javax.swing.event.InternalFrameEvent; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; -import javax.swing.text.JTextComponent; + +import jalview.bin.Cache; +import jalview.fts.api.FTSDataColumnI; +import jalview.fts.api.GFTSPanelI; +import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource; +import jalview.gui.Desktop; +import jalview.gui.IProgressIndicator; +import jalview.gui.JvSwingUtils; +import jalview.gui.SequenceFetcher; +import jalview.io.cache.JvCacheableInputBox; +import jalview.util.MessageManager; +import jalview.util.Platform; /** * This class provides the swing GUI layout for FTS Panel and implements most of @@ -86,13 +88,16 @@ import javax.swing.text.JTextComponent; @SuppressWarnings("serial") public abstract class GFTSPanel extends JPanel implements GFTSPanelI { + private static final Font VERDANA_12 = new Font("Verdana", 0, 12); + protected JInternalFrame mainFrame = new JInternalFrame( getFTSFrameTitle()); - protected JTabbedPane mainFramTabs = new JTabbedPane(); + protected JTabbedPane tabs = new JTabbedPane(); + protected IProgressIndicator progressIndicator; - protected JComboBox cmb_searchTarget = new JComboBox(); + protected JComboBox cmb_searchTarget = new JComboBox<>(); protected JButton btn_ok = new JButton(); @@ -131,7 +136,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI protected JLabel lbl_blank = new JLabel(balnkPlaceholderImage); - private JTabbedPane tabbedPane = new JTabbedPane(); + JTabbedPane tabbedPane = new JTabbedPane(); private JPanel pnl_actions = new JPanel(); @@ -151,7 +156,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI protected int pageLimit; - protected HashSet paginatorCart = new HashSet(); + protected HashSet paginatorCart = new HashSet<>(); private static final int MIN_WIDTH = 670; @@ -252,15 +257,14 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI { if (fetcher == null) { - mainFramTabs = null; + tabs = null; } jbInit(); if (fetcher != null) { - mainFramTabs.addTab(MessageManager.getString("label.retrieve_ids"), + tabs.addTab(MessageManager.getString("label.retrieve_ids"), fetcher); - fetcher.setDatabaseChooserVisible(false); - fetcher.embedWithFTSPanel(this); + fetcher.embedIn(this); } mainFrame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT)); final JPanel ftsPanel = this; @@ -270,10 +274,9 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI public void focusGained(FocusEvent e) { // TODO: make selected tab gain focus in correct widget - if (mainFramTabs != null - && mainFramTabs.getSelectedComponent() == ftsPanel) + if (tabs != null && tabs.getSelectedComponent() == ftsPanel) { - txt_search.requestFocusInWindow(); + txt_search.getComponent().requestFocusInWindow(); } } }); @@ -293,18 +296,18 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI private void jbInit() throws Exception { - txt_search = new JvCacheableInputBox(getCacheKey()); + txt_search = new JvCacheableInputBox<>(getCacheKey(), 45); populateCmbSearchTargetOptions(); Integer width = getTempUserPrefs().get("FTSPanel.width") == null ? 800 : getTempUserPrefs().get("FTSPanel.width"); Integer height = getTempUserPrefs().get("FTSPanel.height") == null ? 400 : getTempUserPrefs().get("FTSPanel.height"); lbl_warning.setVisible(false); - lbl_warning.setFont(new java.awt.Font("Verdana", 0, 12)); + lbl_warning.setFont(VERDANA_12); lbl_loading.setVisible(false); - lbl_loading.setFont(new java.awt.Font("Verdana", 0, 12)); + lbl_loading.setFont(VERDANA_12); lbl_blank.setVisible(true); - lbl_blank.setFont(new java.awt.Font("Verdana", 0, 12)); + lbl_blank.setFont(VERDANA_12); tbl_summary.setAutoCreateRowSorter(true); tbl_summary.getTableHeader().setReorderingAllowed(false); @@ -357,10 +360,35 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI } }); + JButton txt_help = new JButton("?"); + txt_help.setFont(VERDANA_12); + txt_help.setPreferredSize(new Dimension(15, 15)); + txt_help.setToolTipText(MessageManager.getString("action.help")); + txt_help.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + showHelp(); + } + }); + btn_autosearch.setText(MessageManager.getString("option.autosearch")); btn_autosearch.setToolTipText( MessageManager.getString("option.enable_disable_autosearch")); - btn_back.setFont(new java.awt.Font("Verdana", 0, 12)); + // disable autosearch by default + btn_autosearch.setSelected(!Platform.isJS() + && Cache.getDefault(getAutosearchPreference(), false)); + btn_autosearch.addActionListener(new java.awt.event.ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + Cache.setProperty(getAutosearchPreference(), + Boolean.toString(btn_autosearch.isSelected())); + } + }); + btn_back.setFont(VERDANA_12); btn_back.setText(MessageManager.getString("action.back")); btn_back.addActionListener(new java.awt.event.ActionListener() { @@ -383,7 +411,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI }); btn_ok.setEnabled(false); - btn_ok.setFont(new java.awt.Font("Verdana", 0, 12)); + btn_ok.setFont(VERDANA_12); btn_ok.setText(MessageManager.getString("action.ok")); btn_ok.addActionListener(new java.awt.event.ActionListener() { @@ -407,7 +435,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI btn_next_page.setEnabled(false); btn_next_page.setToolTipText( MessageManager.getString("label.next_page_tooltip")); - btn_next_page.setFont(new java.awt.Font("Verdana", 0, 12)); + btn_next_page.setFont(VERDANA_12); btn_next_page.setText(MessageManager.getString("action.next_page")); btn_next_page.addActionListener(new java.awt.event.ActionListener() { @@ -432,7 +460,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI btn_prev_page.setEnabled(false); btn_prev_page.setToolTipText( MessageManager.getString("label.prev_page_tooltip")); - btn_prev_page.setFont(new java.awt.Font("Verdana", 0, 12)); + btn_prev_page.setFont(VERDANA_12); btn_prev_page.setText(MessageManager.getString("action.prev_page")); btn_prev_page.addActionListener(new java.awt.event.ActionListener() { @@ -465,7 +493,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI btn_next_page.setVisible(false); } - btn_cancel.setFont(new java.awt.Font("Verdana", 0, 12)); + btn_cancel.setFont(VERDANA_12); btn_cancel.setText(MessageManager.getString("action.cancel")); btn_cancel.addActionListener(new java.awt.event.ActionListener() { @@ -488,7 +516,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI }); scrl_searchResult.setPreferredSize(new Dimension(width, height)); - cmb_searchTarget.setFont(new java.awt.Font("Verdana", 0, 12)); + cmb_searchTarget.setFont(VERDANA_12); cmb_searchTarget.addItemListener(new ItemListener() { @Override @@ -514,43 +542,45 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI "label.separate_multiple_query_values", new Object[] { getCmbSearchTarget().getSelectedItem().toString() }); } - txt_search.setToolTipText( + txt_search.getComponent().setToolTipText( JvSwingUtils.wrapTooltip(true, tooltipText)); + // if (btn_autosearch.isSelected()) searchAction(true); + + setCmbSearchTargetTooltip(); } } }); - txt_search.setFont(new java.awt.Font("Verdana", 0, 12)); + txt_search.getComponent().setFont(VERDANA_12); - txt_search.getEditor().getEditorComponent() - .addKeyListener(new KeyAdapter() - { - @Override - public void keyPressed(KeyEvent e) - { - if (e.getKeyCode() == KeyEvent.VK_ENTER) - { - if (getTypedText() == null || getTypedText().isEmpty()) - { - return; - } - String primaryKeyName = getFTSRestClient() - .getPrimaryKeyColumn().getName(); - if (primaryKeyName.equalsIgnoreCase(getCmbSearchTarget() - .getSelectedItem().toString())) - { - // TODO: nicer to show the list in the result set before - // viewing in Jalview perhaps ? - transferToSequenceFetcher(getTypedText()); - } - else - { - performSearchAction(); - } - } - } - }); + txt_search.addKeyListener(new KeyAdapter() + { + @Override + public void keyPressed(KeyEvent e) + { + if (e.getKeyCode() == KeyEvent.VK_ENTER) + { + if (getTypedText() == null || getTypedText().isEmpty()) + { + return; + } + String primaryKeyName = getFTSRestClient().getPrimaryKeyColumn() + .getName(); + if (primaryKeyName.equalsIgnoreCase( + getCmbSearchTarget().getSelectedItem().toString())) + { + // TODO: nicer to show the list in the result set before + // viewing in Jalview perhaps ? + transferToSequenceFetcher(getTypedText()); + } + else + { + performSearchAction(); + } + } + } + }); final DeferredTextInputListener listener = new DeferredTextInputListener( 1500, new ActionListener() { @@ -564,8 +594,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI } } }, false); - ((JTextComponent) txt_search.getEditor().getEditorComponent()) - .getDocument().addDocumentListener(listener); + txt_search.addDocumentListener(listener); txt_search.addFocusListener(new FocusListener() { @@ -584,7 +613,6 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI txt_search.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { @@ -617,7 +645,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI btn_ok.setEnabled(false); btn_next_page.setEnabled(false); btn_prev_page.setEnabled(false); - txt_search.setEnabled(false); + txt_search.getComponent().setEnabled(false); cmb_searchTarget.setEnabled(false); previousWantedFields = getFTSRestClient() .getAllDefaultDisplayedFTSDataColumns() @@ -628,7 +656,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI btn_back.setEnabled(true); btn_cancel.setEnabled(true); refreshPaginatorState(); - txt_search.setEnabled(true); + txt_search.getComponent().setEnabled(true); cmb_searchTarget.setEnabled(true); if (wantedFieldsUpdated()) { @@ -653,8 +681,10 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI pnl_actions.add(btn_cancel); pnl_results.add(tabbedPane); + setCmbSearchTargetTooltip(); pnl_inputs.add(cmb_searchTarget); - pnl_inputs.add(txt_search); + pnl_inputs.add(txt_search.getComponent()); + pnl_inputs.add(txt_help); pnl_inputs.add(btn_autosearch); pnl_inputs.add(lbl_loading); pnl_inputs.add(lbl_warning); @@ -667,12 +697,13 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI this.add(pnl_results, java.awt.BorderLayout.CENTER); this.add(pnl_actions, java.awt.BorderLayout.SOUTH); mainFrame.setVisible(true); - if (mainFramTabs != null) + if (tabs != null) { - mainFramTabs.setOpaque(true); - mainFramTabs.insertTab("Free Text Search", null, this, "", 0); - mainFrame.setContentPane(mainFramTabs); - mainFramTabs.setVisible(true); + tabs.setOpaque(true); + tabs.insertTab(MessageManager.getString("label.free_text_search"), + null, this, "", 0); + mainFrame.setContentPane(tabs); + tabs.setVisible(true); } else { @@ -698,6 +729,8 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI Desktop.addInternalFrame(mainFrame, getFTSFrameTitle(), width, height); } + abstract protected void showHelp(); + protected void closeAction() { getTempUserPrefs().put("FTSPanel.width", this.getWidth()); @@ -792,11 +825,6 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI return cmb_searchTarget; } - public JComboBox getTxtSearch() - { - return txt_search; - } - public JInternalFrame getMainFrame() { return mainFrame; @@ -837,6 +865,10 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI } } + /** + * Action on Back button is to close this panel and open a new Sequence + * Fetcher panel + */ public void btn_back_ActionPerformed() { closeAction(); @@ -860,7 +892,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI */ public void populateCmbSearchTargetOptions() { - List searchableTargets = new ArrayList(); + List searchableTargets = new ArrayList<>(); try { Collection foundFTSTargets = getFTSRestClient() @@ -888,7 +920,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI public void transferToSequenceFetcher(String ids) { - seqFetcher.getTextArea().setText(ids); + seqFetcher.setQuery(ids); Thread worker = new Thread(seqFetcher); worker.start(); } @@ -913,7 +945,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI lbl_blank.setVisible(true); btn_ok.setEnabled(false); mainFrame.setTitle(getFTSFrameTitle()); - referesh(); + refresh(); tbl_summary.setModel(new DefaultTableModel()); tbl_summary.setVisible(false); } @@ -1050,9 +1082,35 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI } } - public void referesh() + public void refresh() { mainFrame.setTitle(getFTSFrameTitle()); } + @Override + public abstract void okAction(); + + private void setCmbSearchTargetTooltip() + { + JComboBox cmb = getCmbSearchTarget(); + if (cmb.isEnabled()) + { + boolean isAll = "all" + .equalsIgnoreCase(cmb.getSelectedItem().toString()); + FTSDataColumnI index = (FTSDataColumnI) cmb.getSelectedItem(); + String indexCode = index.getAltCode(); + String dbName = getDbName(); + String message = isAll ? MessageManager + .formatMessage("label.search_db_all", new Object[] + { dbName }) + : MessageManager.formatMessage("label.search_db_index", + new Object[] + { dbName, indexCode }); + cmb.setToolTipText(message); + } + else + { + cmb.setToolTipText(""); + } + } }