import jalview.util.MessageManager;
import jalview.util.Platform;
-import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusListener;
*/
public class JvCacheableInputBox<E>
{
- private JComboBox<String> comboBox; // used for Jalview
+ protected JComboBox<String> comboBox; // used for Jalview
- private JTextField textField; // used for JalviewJS
+ protected JTextField textField; // used for JalviewJS
- private static final long serialVersionUID = 5774610435079326695L;
+ protected JTextComponent textComponent; // used for both
- private String cacheKey;
+ protected String cacheKey;
- private AppCache appCache;
+ protected AppCache appCache;
private JPopupMenu popup = new JPopupMenu();
volatile boolean enterWasPressed = false;
-private String prototypeDisplayValue;
-
-private boolean isJS;
+ private String prototypeDisplayValue;
/**
* @return flag indicating if the most recent keypress was enter
*/
public JvCacheableInputBox(String newCacheKey)
{
- super();
- isJS = Platform.isJS();
- this.prototypeDisplayValue =
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
- if (isJS)
+ // super();
+ cacheKey = newCacheKey;
+ prototypeDisplayValue = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
+ boolean useTextField = Platform.isJS();
+ // BH 2019.03 only switch for JavaScript here
+ // SwingJS TODO implement editable combo box
+ if (useTextField)
{
- textField = new JTextField() {
- public Dimension getPreferredSize() {
- return super.getPreferredSize();
-// FontMetrics fm = getFontMetrics(getFont());
-// return new Dimension(fm.stringWidth(prototypeDisplayValue), fm.getHeight());
- }
- };
- return;
+ appCache = null;
+ textComponent = textField = new JTextField();
+ // {
+ // @Override
+ // public Dimension getPreferredSize() {
+ // return super.getPreferredSize();
+ //// FontMetrics fm = getFontMetrics(getFont());
+ //// return new Dimension(fm.stringWidth(prototypeDisplayValue),
+ // fm.getHeight());
+ // }
+ // };
}
-
- this.cacheKey = newCacheKey;
- comboBox = new JComboBox<String>();
- comboBox.setEditable(true);
- comboBox.addKeyListener(new KeyAdapter()
+ else
{
- @Override
- public void keyTyped(KeyEvent e)
+ appCache = AppCache.getInstance();
+ comboBox = new JComboBox<>();
+ textComponent = (JTextComponent) comboBox.getEditor()
+ .getEditorComponent();
+ comboBox.setEditable(true);
+ comboBox.addKeyListener(new KeyAdapter()
{
- enterWasPressed = false;
- if (e.getKeyCode() == KeyEvent.VK_ENTER)
+ @Override
+ public void keyTyped(KeyEvent e)
{
- enterWasPressed = true;
+ enterWasPressed = false;
+ if (e.getKeyCode() == KeyEvent.VK_ENTER)
+ {
+ enterWasPressed = true;
+ }
+ // let event bubble up
}
- // let event bubble up
- }
- });
- comboBox.setPrototypeDisplayValue(prototypeDisplayValue);
- appCache = AppCache.getInstance();
+ });
+ comboBox.setPrototypeDisplayValue(prototypeDisplayValue);
+ }
initCachePopupMenu();
initCache(newCacheKey);
updateCache();
}
/**
- * Method for initialising cache items for a given cache key and populating the
- * in-memory cache with persisted cache items
+ * Method for initialising cache items for a given cache key and populating
+ * the in-memory cache with persisted cache items
*
* @param cacheKey
*/
private void initCache(String cacheKey)
{
+ if (appCache == null)
+ {
+ return;
+ }
// obtain persisted cache items from properties file as a delimited string
String delimitedCacheStr = Cache.getProperty(cacheKey);
if (delimitedCacheStr == null || delimitedCacheStr.isEmpty())
*/
private void initCachePopupMenu()
{
+ if (appCache == null)
+ {
+ return;
+ }
menuItemClearCache.setFont(new java.awt.Font("Verdana", 0, 12));
menuItemClearCache
.setText(MessageManager.getString("action.clear_cached_items"));
*/
public void updateCache()
{
- if (isJS)
+ if (appCache == null)
{
return;
}
*/
public void persistCache()
{
- if (!isJS)
+ if (appCache == null)
{
- appCache.persistCache(cacheKey);
+ return;
}
+ appCache.persistCache(cacheKey);
}
/**
*/
public String getUserInput()
{
- if (isJS)
+ if (comboBox == null)
{
return textField.getText().trim();
}
public JComponent getComponent()
{
- return isJS ? textField : comboBox;
+ return (comboBox == null ? textField : comboBox);
}
public void addActionListener(ActionListener actionListener)
{
- if (isJS)
+ if (comboBox == null)
{
textField.addActionListener(actionListener);
}
public void addDocumentListener(DocumentListener listener)
{
- if (!isJS)
- {
- ((JTextComponent) comboBox.getEditor().getEditorComponent())
- .getDocument().addDocumentListener(listener);
- }
+ textComponent.getDocument().addDocumentListener(listener);
}
public void addFocusListener(FocusListener focusListener)
{
- if (isJS)
- {
- textField.addFocusListener(focusListener);
- }
- else
- {
- comboBox.addFocusListener(focusListener);
- }
+ textComponent.addFocusListener(focusListener);
}
public void addKeyListener(KeyListener kl)
{
- if (!isJS)
- {
- comboBox.getEditor().getEditorComponent().addKeyListener(kl);
- }
+ textComponent.addKeyListener(kl);
+ }
+
+ public void addCaretListener(CaretListener caretListener)
+ {
+ textComponent.addCaretListener(caretListener);
}
public void setEditable(boolean b)
{
- if (!isJS)
+ if (comboBox != null)
{
comboBox.setEditable(b);
}
public void setPrototypeDisplayValue(String string)
{
- this.prototypeDisplayValue = string;
- if (!isJS)
+ prototypeDisplayValue = string;
+ if (comboBox != null)
{
comboBox.setPrototypeDisplayValue(string);
- }
+ }
}
public void setSelectedItem(String userInput)
{
- if (!isJS)
+ if (comboBox != null)
{
comboBox.setSelectedItem(userInput);
}
public boolean isPopupVisible()
{
- if (!isJS)
- {
- return comboBox.isPopupVisible();
- }
- return false;
- }
-
- public void addCaretListener(CaretListener caretListener)
- {
- if (!isJS)
- {
- ((JTextComponent) comboBox.getEditor().getEditorComponent())
- .addCaretListener(caretListener);
- }
+ return (comboBox != null && comboBox.isPopupVisible());
}
public void addItem(String item)
{
- if (!isJS)
+ if (comboBox != null)
{
comboBox.addItem(item);
}