Merge branch 'releases/Release_2_10_3_Branch'
[jalview.git] / src / jalview / io / cache / JvCacheableInputBox.java
index 06302c3..a837512 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.io.cache;
 
 import jalview.bin.Cache;
@@ -7,6 +27,8 @@ import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -33,7 +55,7 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
 
   private static final int INPUT_LIMIT = 2;
 
-  private static final int LEFT_BOARDER_WIDTH = 2;
+  private static final int LEFT_BOARDER_WIDTH = 16;
 
   private String cacheKey;
 
@@ -49,12 +71,51 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
 
   private JMenuItem menuItemClearCache = new JMenuItem();
 
+  volatile boolean enterWasPressed = false;
+
+  /**
+   * @return flag indicating if the most recent keypress was enter
+   */
+  public boolean wasEnterPressed()
+  {
+    return enterWasPressed;
+  }
+
   public JvCacheableInputBox(String newCacheKey)
   {
     super();
     this.cacheKey = newCacheKey;
     setEditable(true);
-    setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
+    addKeyListener(new KeyListener()
+    {
+
+      @Override
+      public void keyTyped(KeyEvent e)
+      {
+        enterWasPressed = false;
+        if (e.getKeyCode() == KeyEvent.VK_ENTER)
+        {
+          enterWasPressed = true;
+        }
+        // let event bubble up
+      }
+
+      @Override
+      public void keyReleased(KeyEvent e)
+      {
+        // TODO Auto-generated method stub
+
+      }
+
+      @Override
+      public void keyPressed(KeyEvent e)
+      {
+        // TODO Auto-generated method stub
+
+      }
+    });
+    setPrototypeDisplayValue(
+            "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
     appCache = AppCache.getInstance();
     initCachePopupMenu();
     initCache(newCacheKey);
@@ -76,11 +137,11 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
       return;
     }
     // convert delimited cache items to a list of strings
-    List<String> persistedCacheItems = Arrays.asList(delimitedCacheStr
-            .split(AppCache.CACHE_DELIMITER));
+    List<String> persistedCacheItems = Arrays
+            .asList(delimitedCacheStr.split(AppCache.CACHE_DELIMITER));
 
     LinkedHashSet<String> foundCacheItems = appCache
-            .getAllCachedItemsFor(cacheKey);// cacheItems.get(cacheKey);
+            .getAllCachedItemsFor(cacheKey);
     if (foundCacheItems == null)
     {
       foundCacheItems = new LinkedHashSet<String>();
@@ -100,11 +161,13 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
   {
     pnlDefaultCache.setBackground(Color.WHITE);
     // pad panel so as to align with other menu items
-    pnlDefaultCache.setBorder(BorderFactory.createEmptyBorder(0,
-            LEFT_BOARDER_WIDTH, 0, 0));
+    pnlDefaultCache.setBorder(
+            BorderFactory.createEmptyBorder(0, LEFT_BOARDER_WIDTH, 0, 0));
     txtDefaultCacheSize.setPreferredSize(new Dimension(45, 20));
-    lblDefaultCacheSize.setText(MessageManager
-            .getString("label.default_cache_size"));
+    txtDefaultCacheSize.setFont(new java.awt.Font("Verdana", 0, 12));
+    lblDefaultCacheSize
+            .setText(MessageManager.getString("label.default_cache_size"));
+    lblDefaultCacheSize.setFont(new java.awt.Font("Verdana", 0, 12));
     // Force input to accept only Integer entries up to length - INPUT_LIMIT
     txtDefaultCacheSize.setDocument(new PlainDocument()
     {
@@ -120,11 +183,26 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
         }
       }
     });
+    txtDefaultCacheSize.addKeyListener(new java.awt.event.KeyAdapter()
+    {
+      @Override
+      public void keyPressed(KeyEvent e)
+      {
+        if (e.getKeyCode() == KeyEvent.VK_ENTER)
+        {
+          e.consume();
+          updateCache();
+          closePopup();
+        }
+      }
+    });
+
     txtDefaultCacheSize.setText(appCache.getCacheLimit(cacheKey));
     pnlDefaultCache.add(lblDefaultCacheSize);
+    menuItemClearCache.setFont(new java.awt.Font("Verdana", 0, 12));
     pnlDefaultCache.add(txtDefaultCacheSize);
-    menuItemClearCache.setText(MessageManager
-            .getString("action.clear_cached_items"));
+    menuItemClearCache
+            .setText(MessageManager.getString("action.clear_cached_items"));
     menuItemClearCache.addActionListener(new ActionListener()
     {
       @Override
@@ -143,6 +221,12 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
     add(popup);
   }
 
+  private void closePopup()
+  {
+    popup.setVisible(false);
+    popup.transferFocus();
+  }
+
   /**
    * Answers true if input text is an integer
    * 
@@ -171,9 +255,9 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
       @Override
       public void run()
       {
-        int userLimit = txtDefaultCacheSize.getText().trim().isEmpty() ? Integer
-                .valueOf(AppCache.DEFAULT_LIMIT) : Integer
-                .valueOf(txtDefaultCacheSize.getText());
+        int userLimit = txtDefaultCacheSize.getText().trim().isEmpty()
+                ? Integer.valueOf(AppCache.DEFAULT_LIMIT)
+                : Integer.valueOf(txtDefaultCacheSize.getText());
         int cacheLimit = appCache.updateCacheLimit(cacheKey, userLimit);
         String userInput = getUserInput();
         if (userInput != null && !userInput.isEmpty())
@@ -235,7 +319,6 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
     });
   }
 
-
   /**
    * This method should be called to persist the in-memory cache when this
    * components parent frame is closed / exited
@@ -243,9 +326,9 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
   public void persistCache()
   {
     appCache.persistCache(cacheKey);
-    int userLimit = txtDefaultCacheSize.getText().trim().isEmpty() ? Integer
-            .valueOf(AppCache.DEFAULT_LIMIT) : Integer
-            .valueOf(txtDefaultCacheSize.getText());
+    int userLimit = txtDefaultCacheSize.getText().trim().isEmpty()
+            ? Integer.valueOf(AppCache.DEFAULT_LIMIT)
+            : Integer.valueOf(txtDefaultCacheSize.getText());
     appCache.updateCacheLimit(cacheKey, userLimit);
   }
 
@@ -256,8 +339,8 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
    */
   public String getUserInput()
   {
-    return getEditor().getItem() == null ? "" : getEditor().getItem()
-            .toString().trim();
+    return getEditor().getItem() == null ? ""
+            : getEditor().getItem().toString().trim();
   }
 
 }