Merge branch 'Jalview-BH/JAL-3026' of https://source.jalview.org/git/jalview.git...
authorhansonr <hansonr@STO24954W.ad.stolaf.edu>
Mon, 20 Aug 2018 04:23:06 +0000 (23:23 -0500)
committerhansonr <hansonr@STO24954W.ad.stolaf.edu>
Mon, 20 Aug 2018 04:23:06 +0000 (23:23 -0500)
resources/lang/Messages.properties
src/jalview/fts/core/GFTSPanel.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/AnnotationColumnChooser.java
src/jalview/gui/Desktop.java
src/jalview/gui/Finder.java
src/jalview/io/cache/JvCacheableInputBox.java
src/jalview/jbgui/GAlignFrame.java
src/jalview/jbgui/GFinder.java
test/jalview/fts/service/pdb/PDBFTSPanelTest.java
test/jalview/io/cache/JvCacheableInputBoxTest.java

index 184ae5c..2c4e964 100644 (file)
@@ -417,7 +417,7 @@ label.input_alignment_from_url = Input Alignment From URL
 label.input_alignment = Input Alignment
 label.couldnt_import_as_vamsas_session = Couldn't import {0} as a new vamsas session.
 label.vamsas_document_import_failed = Vamsas Document Import Failed
-label.couldnt_locate = Couldn't locate {0}
+label.couldnt_locate = Couldn''t locate {0}
 label.url_not_found = URL not found
 label.new_sequence_url_link = New sequence URL link
 label.cannot_edit_annotations_in_wrapped_view = Cannot edit annotations in wrapped view
index b0ab8c6..38ea958 100644 (file)
@@ -73,7 +73,6 @@ 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;
 
 /**
  * This class provides the swing GUI layout for FTS Panel and implements most of
@@ -274,7 +273,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI
           if (tabs != null
                   && tabs.getSelectedComponent() == ftsPanel)
           {
-            txt_search.requestFocusInWindow();
+            txt_search.getComponent().requestFocusInWindow();
           }
         }
       });
@@ -526,17 +525,16 @@ 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));
           searchAction(true);
         }
       }
     });
 
-    txt_search.setFont(new java.awt.Font("Verdana", 0, 12));
+    txt_search.getComponent().setFont(new java.awt.Font("Verdana", 0, 12));
 
-    txt_search.getEditor().getEditorComponent()
-            .addKeyListener(new KeyAdapter()
+    txt_search.addKeyListener(new KeyAdapter()
             {
               @Override
               public void keyPressed(KeyEvent e)
@@ -576,8 +574,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()
     {
@@ -629,7 +626,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()
@@ -640,7 +637,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())
           {
@@ -666,7 +663,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI
 
     pnl_results.add(tabbedPane);
     pnl_inputs.add(cmb_searchTarget);
-    pnl_inputs.add(txt_search);
+    pnl_inputs.add(txt_search.getComponent());
     pnl_inputs.add(btn_autosearch);
     pnl_inputs.add(lbl_loading);
     pnl_inputs.add(lbl_warning);
@@ -805,11 +802,6 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI
     return cmb_searchTarget;
   }
 
-  public JComboBox<String> getTxtSearch()
-  {
-    return txt_search;
-  }
-
   public JInternalFrame getMainFrame()
   {
     return mainFrame;
index 5b9df68..a59cc13 100644 (file)
@@ -157,8 +157,7 @@ import javax.swing.SwingUtilities;
  * @version $Revision$
  */
 public class AlignFrame extends GAlignFrame implements DropTargetListener,
-        IProgressIndicator, AlignViewControllerGuiI, ColourChangeListener,
-        PropertyChangeListener
+        IProgressIndicator, AlignViewControllerGuiI, ColourChangeListener
 {
 
   public static final int DEFAULT_WIDTH = 700;
@@ -334,34 +333,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     init();
   }
 
-  @Override
-  public void propertyChange(PropertyChangeEvent evt)
-  {
-    Desktop.getDesktop().propertyChange(evt);
-  }
-
-  /**
-   * BH 2018
-   * 
-   * @return true if we have any features
-   */
-  @Override
-  protected boolean haveAlignmentFeatures()
-  {
-    AlignmentI alignment = getViewport().getAlignment();
-
-    for (int i = 0; i < alignment.getHeight(); i++)
-    {
-      SequenceI seq = alignment.getSequenceAt(i);
-      for (String group : seq.getFeatures().getFeatureGroups(true))
-      {
-        if (group != null)
-          return true;
-      }
-    }
-    return false;
-  }
-
   /**
    * initalise the alignframe from the underlying viewport data and the
    * configurations
index 5adecad..5e12d2b 100644 (file)
@@ -731,10 +731,9 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
               MessageManager.getString("label.search_filter")));
 
       searchBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXX");
-      searchBox.setToolTipText(
+      searchBox.getComponent().setToolTipText(
               MessageManager.getString("info.enter_search_text_here"));
-      searchBox.getEditor().getEditorComponent()
-              .addKeyListener(new java.awt.event.KeyAdapter()
+      searchBox.addKeyListener(new java.awt.event.KeyAdapter()
               {
                 @Override
                 public void keyPressed(KeyEvent e)
@@ -746,8 +745,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
                   }
                 }
               });
-      searchBox.getEditor().getEditorComponent()
-              .addFocusListener(new FocusAdapter()
+      searchBox.addFocusListener(new FocusAdapter()
       {
         @Override
         public void focusLost(FocusEvent e)
@@ -777,7 +775,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
       });
 
       syncState();
-      this.add(searchBox);
+      this.add(searchBox.getComponent());
       this.add(displayName);
       this.add(description);
     }
index 6e155eb..ceea332 100644 (file)
@@ -115,6 +115,7 @@ import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
 import javax.swing.JProgressBar;
+import javax.swing.JTextField;
 import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
 import javax.swing.event.HyperlinkEvent;
@@ -1146,10 +1147,9 @@ public class Desktop extends jalview.jbgui.GDesktop
   }
 
   /**
-   * DOCUMENT ME!
+   * Shows a dialog for input of a URL at which to retrieve alignment data
    * 
-   * @param e
-   *          DOCUMENT ME!
+   * @param viewport
    */
   @Override
   public void inputURLMenuItem_actionPerformed(AlignViewport viewport)
@@ -1159,46 +1159,101 @@ public class Desktop extends jalview.jbgui.GDesktop
     JLabel label = new JLabel(
             MessageManager.getString("label.input_file_url"));
 
-    JComboBox history = new JComboBox();
     JPanel panel = new JPanel(new GridLayout(2, 1));
     panel.add(label);
-    panel.add(history);
-    history.setPreferredSize(new Dimension(400, 20));
-    history.setEditable(true);
-    history.addItem("http://www.");
-
-    String historyItems = jalview.bin.Cache.getProperty("RECENT_URL");
-
-    StringTokenizer st;
-
-    if (historyItems != null)
+    
+    /*
+     * the URL to fetch is
+     * Java: an editable combobox with history
+     * JS: (pending JAL-3038) a plain text field
+     */
+    JComponent history;
+    String urlBase = "http://www.";
+    if (Jalview.isJS())
     {
-      st = new StringTokenizer(historyItems, "\t");
-
-      while (st.hasMoreTokens())
+      history = new JTextField(urlBase, 35);
+    }
+    else
+    {
+      JComboBox<String> asCombo = new JComboBox<>();
+      asCombo.setPreferredSize(new Dimension(400, 20));
+      asCombo.setEditable(true);
+      asCombo.addItem(urlBase);
+      String historyItems = Cache.getProperty("RECENT_URL");
+      if (historyItems != null)
       {
-        history.addItem(st.nextElement());
+        for (String token : historyItems.split("\\t"))
+        {
+          asCombo.addItem(token);
+        }
       }
+      history = asCombo;
     }
+    panel.add(history);
 
-    // BH 2018 -- providing a callback for SwingJS
-    // dialogOption is just a simple way to provide
-    // context for the modal-like response.
-    // The only requirement is that desktop implement
-    // PropertyChangeListener, which is used already in Java
-    // for changes in input value and such within the dialogs.
+    Object[] options = new Object[] { MessageManager.getString("action.ok"),
+        MessageManager.getString("action.cancel") };
+    RunResponse action = new RunResponse(JvOptionPane.OK_OPTION) {
+      @Override
+      public void run()
+      {
+        String url = Jalview.isJS() ? ((JTextField) history).getText()
+                : ((JComboBox<String>) history).getSelectedItem()
+                        .toString();
 
-    String dialogOption = "label.input_alignment_from_url";
-    desktop.dialogData = new Object[] { dialogOption, viewport, history };
-    desktop.onDialogReturn(JvOptionPane.showInternalConfirmDialog(desktop,
-            panel, MessageManager.getString(dialogOption),
-            JvOptionPane.OK_CANCEL_OPTION));
+        if (url.toLowerCase().endsWith(".jar"))
+        {
+          if (viewport != null)
+          {
+            new FileLoader().LoadFile(viewport, url, DataSourceType.URL,
+                    FileFormat.Jalview);
+          }
+          else
+          {
+            new FileLoader().LoadFile(url, DataSourceType.URL,
+                    FileFormat.Jalview);
+          }
+        }
+        else
+        {
+          FileFormatI format = null;
+          try
+          {
+            format = new IdentifyFile().identify(url, DataSourceType.URL);
+          } catch (FileFormatException e)
+          {
+            // TODO revise error handling, distinguish between
+            // URL not found and response not valid
+          }
+
+          if (format == null)
+          {
+            String msg = MessageManager.formatMessage("label.couldnt_locate", url);
+            JvOptionPane.showInternalMessageDialog(Desktop.desktop, msg,
+                    MessageManager.getString("label.url_not_found"),
+                    JvOptionPane.WARNING_MESSAGE);
 
-    // no code may follow this, as SwingJS will not block
-    // callback in JavaScript comes via a property change event,
-    // thus going into desktop.onDialogReturn(int) just the same as
-    // in Java.
+            return;
+          }
 
+          if (viewport != null)
+          {
+            new FileLoader().LoadFile(viewport, url, DataSourceType.URL,
+                    format);
+          }
+          else
+          {
+            new FileLoader().LoadFile(url, DataSourceType.URL, format);
+          }
+        }
+      }};
+    String dialogOption = MessageManager
+            .getString("label.input_alignment_from_url");
+    JvOptionPane.newOptionDialog(desktop).response(action)
+            .showInternalDialog(panel, dialogOption,
+                    JvOptionPane.YES_NO_CANCEL_OPTION,
+                    JvOptionPane.PLAIN_MESSAGE, null, options,
+                    MessageManager.getString("action.ok"));
   }
 
   /**
@@ -2425,149 +2480,8 @@ public class Desktop extends jalview.jbgui.GDesktop
    * @author AMW
    */
   public class MyDesktopPane extends JDesktopPane
-          implements Runnable, PropertyChangeListener
+          implements Runnable
   {
-
-    public Object[] dialogData;
-
-    // @Override
-    @Override
-    public void propertyChange(PropertyChangeEvent event)
-    {
-      // TODO this is obsolete with JAL-3048 - delete?
-      Object val = event.getNewValue();
-      String name = event.getPropertyName();
-      System.out.println(name);
-      switch (event.getSource().getClass().getName())
-      {
-      case "javax.swing.JOptionPane":
-        switch (name)
-        {
-        case "inputValue":
-          onDialogReturn(val);
-          return;
-        case "value":
-          if (val instanceof Integer)
-          {
-            onDialogReturn(((Integer) val).intValue());
-          }
-          else
-          {
-            onDialogReturn(val);
-          }
-          return;
-        }
-        break;
-      case "javax.swing.JFileChooser":
-        switch (name)
-        {
-        case "SelectedFile":
-          // in JavaScript, this File object will have a _bytes property,
-          // because the file data has already been loaded
-          onDialogReturn(new Object[] { (File) val });
-          return;
-        }
-        break;
-      }
-      System.out.println(event.getSource().getClass().getName() + " "
-              + event.getPropertyName() + ": " + event.getNewValue());
-    }
-
-    // JSCOmponent.DialogCaller interface
-    void onDialogReturn(Object value)
-    {
-      switch ((String) dialogData[0])
-      {
-      case "SelectedFile":
-      case "runnable":
-        dialogData[0] = value;
-        ((Runnable) dialogData[1]).run();
-        break;
-      default:
-      }
-    }
-
-    // JSCOmponent.DialogCaller interface
-    void onDialogReturn(int value)
-    {
-      if (value != Math.floor(value))
-      {
-        // in JavaScript, this will be NaN, oddly enough
-        return;
-      }
-
-      switch ((String) dialogData[0])
-      {
-      case "runnable":
-        dialogData[0] = Integer.valueOf(value);
-        ((Runnable) dialogData[1]).run();
-        break;
-      case "label.input_alignment_from_url":
-        // reconstruct the parameter data
-        int reply = value;
-        AlignViewport viewport = (AlignViewport) dialogData[1];
-        JComboBox history = (JComboBox) dialogData[2];
-        // the rest of this is unchangaed
-        if (reply != JvOptionPane.OK_OPTION)
-        {
-          return;
-        }
-
-        String url = history.getSelectedItem().toString();
-
-        if (url.toLowerCase().endsWith(".jar"))
-        {
-          if (viewport != null)
-          {
-            new FileLoader().LoadFile(viewport, url, DataSourceType.URL,
-                    FileFormat.Jalview);
-          }
-          else
-          {
-            new FileLoader().LoadFile(url, DataSourceType.URL,
-                    FileFormat.Jalview);
-          }
-        }
-        else
-        {
-          FileFormatI format = null;
-          try
-          {
-            format = new IdentifyFile().identify(url, DataSourceType.URL);
-          } catch (FileFormatException e)
-          {
-            // TODO revise error handling, distinguish between
-            // URL not found and response not valid
-          }
-
-          if (format == null)
-          {
-            JvOptionPane.showInternalMessageDialog(Desktop.desktop,
-                    MessageManager.formatMessage("label.couldnt_locate",
-                            new Object[]
-                            { url }),
-                    MessageManager.getString("label.url_not_found"),
-                    JvOptionPane.WARNING_MESSAGE);
-
-            return;
-          }
-
-          if (viewport != null)
-          {
-            new FileLoader().LoadFile(viewport, url, DataSourceType.URL,
-                    format);
-          }
-          else
-          {
-            new FileLoader().LoadFile(url, DataSourceType.URL, format);
-          }
-        }
-
-        break;
-      }
-
-    }
-
     private static final float ONE_MB = 1048576f;
 
     boolean showMemoryUsage = false;
index 6361a86..0d35add 100755 (executable)
@@ -114,7 +114,7 @@ public class Finder extends GFinder
     Desktop.addInternalFrame(frame, MessageManager.getString("label.find"),
             MY_WIDTH, MY_HEIGHT);
     frame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
-    searchBox.requestFocus();
+    searchBox.getComponent().requestFocus();
   }
 
   /**
@@ -217,7 +217,7 @@ public class Finder extends GFinder
     List<SequenceI> seqs = new ArrayList<SequenceI>();
     List<SequenceFeature> features = new ArrayList<SequenceFeature>();
 
-    String searchString = searchBox.getEditor().getItem().toString().trim();
+    String searchString = searchBox.getUserInput();
     String desc = "Search Results";
 
     /*
@@ -244,7 +244,7 @@ public class Finder extends GFinder
   {
     createFeatures.setEnabled(false);
 
-    String searchString = searchBox.getUserInput().trim();
+    String searchString = searchBox.getUserInput();
 
     if (isInvalidSearchString(searchString))
     {
@@ -304,7 +304,7 @@ public class Finder extends GFinder
       seqIndex = 0;
       JvOptionPane.showInternalMessageDialog(this,
               MessageManager.getString("label.finished_searching"), null,
-              JvOptionPane.INFORMATION_MESSAGE);
+              JvOptionPane.PLAIN_MESSAGE);
     }
     else
     {
@@ -325,7 +325,7 @@ public class Finder extends GFinder
         resIndex = -1;
         seqIndex = 0;
         JvOptionPane.showInternalMessageDialog(this, message, null,
-                JvOptionPane.INFORMATION_MESSAGE);
+                JvOptionPane.PLAIN_MESSAGE);
       }
     }
   }
index beef3e7..d2ad8de 100644 (file)
 package jalview.io.cache;
 
 import jalview.bin.Cache;
+import jalview.bin.Jalview;
 import jalview.util.MessageManager;
 
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
 import java.awt.event.KeyListener;
 import java.util.ArrayList;
@@ -35,16 +38,33 @@ import java.util.List;
 import java.util.Set;
 
 import javax.swing.JComboBox;
+import javax.swing.JComponent;
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
+import javax.swing.JTextField;
 import javax.swing.SwingUtilities;
+import javax.swing.event.CaretListener;
+import javax.swing.event.DocumentListener;
+import javax.swing.text.JTextComponent;
 
-public class JvCacheableInputBox<E> extends JComboBox<String>
+/**
+ * A class that provides an editable combobox with a memory of previous entries
+ * that may be persisted
+ * 
+ * @author tcofoegbu
+ *
+ * @param <E>
+ */
+/*
+ * (temporary?) patches to wrap a JTextField instead when running as Javascript
+ */
+public class JvCacheableInputBox<E>
 {
+  private JComboBox<String> comboBox; // used for Jalview
 
-  private static final long serialVersionUID = 5774610435079326695L;
+  private JTextField textField; // used for JalviewJS
 
-  private static final int LEFT_BOARDER_WIDTH = 16;
+  private static final long serialVersionUID = 5774610435079326695L;
 
   private String cacheKey;
 
@@ -64,14 +84,25 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
     return enterWasPressed;
   }
 
+  /**
+   * Constructor
+   * 
+   * @param newCacheKey
+   */
   public JvCacheableInputBox(String newCacheKey)
   {
     super();
-    this.cacheKey = newCacheKey;
-    setEditable(true);
-    addKeyListener(new KeyListener()
+    if (Jalview.isJS())
     {
+      textField = new JTextField();
+      return;
+    }
 
+    this.cacheKey = newCacheKey;
+    comboBox = new JComboBox<String>();
+    comboBox.setEditable(true);
+    comboBox.addKeyListener(new KeyAdapter()
+    {
       @Override
       public void keyTyped(KeyEvent e)
       {
@@ -82,22 +113,8 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
         }
         // 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(
+    comboBox.setPrototypeDisplayValue(
             "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
     appCache = AppCache.getInstance();
     initCachePopupMenu();
@@ -158,8 +175,8 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
     });
 
     popup.add(menuItemClearCache);
-    setComponentPopupMenu(popup);
-    add(popup);
+    comboBox.setComponentPopupMenu(popup);
+    comboBox.add(popup);
   }
 
   /**
@@ -185,6 +202,10 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
    */
   public void updateCache()
   {
+    if (Jalview.isJS())
+    {
+      return;
+    }
     SwingUtilities.invokeLater(new Runnable()
     {
       @Override
@@ -204,9 +225,9 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
         }
 
         String lastSearch = userInput;
-        if (getItemCount() > 0)
+        if (comboBox.getItemCount() > 0)
         {
-          removeAllItems();
+          comboBox.removeAllItems();
         }
         Set<String> cacheItems = appCache.getAllCachedItemsFor(cacheKey);
         List<String> reversedCacheItems = new ArrayList<>();
@@ -215,7 +236,7 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
         Collections.reverse(reversedCacheItems);
         if (lastSearch.isEmpty())
         {
-          addItem("");
+          comboBox.addItem("");
         }
 
         if (reversedCacheItems != null && !reversedCacheItems.isEmpty())
@@ -236,12 +257,12 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
               }
               else
               {
-                addItem(cacheItem);
+                comboBox.addItem(cacheItem);
               }
             }
             else
             {
-              addItem(cacheItem);
+              comboBox.addItem(cacheItem);
             }
           }
           appCache.putCache(cacheKey, foundCache);
@@ -257,18 +278,113 @@ public class JvCacheableInputBox<E> extends JComboBox<String>
    */
   public void persistCache()
   {
-    appCache.persistCache(cacheKey);
+    if (!Jalview.isJS())
+    {
+      appCache.persistCache(cacheKey);
+    }
   }
 
   /**
-   * Method to obtain input text from the cache box
+   * Returns the trimmed text in the input field
    * 
    * @return
    */
   public String getUserInput()
   {
-    return getEditor().getItem() == null ? ""
-            : getEditor().getItem().toString().trim();
+    if (Jalview.isJS())
+    {
+      return textField.getText().trim();
+    }
+    Object item = comboBox.getEditor().getItem();
+    return item == null ? "" : item.toString().trim();
+  }
+
+  public JComponent getComponent()
+  {
+    return Jalview.isJS() ? textField : comboBox;
+  }
+
+  public void addActionListener(ActionListener actionListener)
+  {
+    if (!Jalview.isJS())
+    {
+      comboBox.addActionListener(actionListener);
+    }
+  }
+
+  public void addDocumentListener(DocumentListener listener)
+  {
+    if (!Jalview.isJS())
+    {
+      ((JTextComponent) comboBox.getEditor().getEditorComponent())
+              .getDocument().addDocumentListener(listener);
+    }
+  }
+
+  public void addFocusListener(FocusListener focusListener)
+  {
+    if (!Jalview.isJS())
+    {
+      comboBox.addFocusListener(focusListener);
+    }
+  }
+
+  public void addKeyListener(KeyListener kl)
+  {
+    if (!Jalview.isJS())
+    {
+      comboBox.getEditor().getEditorComponent().addKeyListener(kl);
+    }
+  }
+
+  public void setEditable(boolean b)
+  {
+    if (!Jalview.isJS())
+    {
+      comboBox.setEditable(b);
+    }
+  }
+
+  public void setPrototypeDisplayValue(String string)
+  {
+    if (!Jalview.isJS())
+    {
+      comboBox.setPrototypeDisplayValue(string);
+    }
+  }
+
+  public void setSelectedItem(String userInput)
+  {
+    if (!Jalview.isJS())
+    {
+      comboBox.setSelectedItem(userInput);
+    }
+  }
+
+  public boolean isPopupVisible()
+  {
+    if (!Jalview.isJS())
+    {
+      return comboBox.isPopupVisible();
+    }
+    return false;
+  }
+
+  public void addCaretListener(CaretListener caretListener)
+  {
+    if (!Jalview.isJS())
+    {
+      ((JTextComponent) comboBox.getEditor().getEditorComponent())
+              .addCaretListener(caretListener);
+    }
+  }
+
+  public void addItem(String item)
+  {
+    if (!Jalview.isJS())
+    {
+      comboBox.addItem(item);
+    }
   }
 
 }
index 3a6e603..69031d1 100755 (executable)
@@ -285,16 +285,7 @@ public class GAlignFrame extends JInternalFrame
     addMenuActionAndAccelerator(keyStroke, closeMenuItem, al);
 
     JMenu editMenu = new JMenu(MessageManager.getString("action.edit"));
-    JMenu viewMenu = new JMenu(MessageManager.getString("action.view")) {
-      
-      public void setPopupMenuVisible(boolean b) {
-        if (b) {
-          openFeatureSettings.setEnabled(haveAlignmentFeatures());
-        }
-        super.setPopupMenuVisible(b);
-      }
-
-    };
+    JMenu viewMenu = new JMenu(MessageManager.getString("action.view"));
     JMenu annotationsMenu = new JMenu(
             MessageManager.getString("action.annotations"));
     JMenu showMenu = new JMenu(MessageManager.getString("action.show"));
@@ -1899,12 +1890,6 @@ public class GAlignFrame extends JInternalFrame
     // selectMenu.add(listenToViewSelections);
   }
 
-  protected boolean haveAlignmentFeatures()
-  {
-    // because gAlignFrame is not an abstract class  -- see AlignFrame
-    return false;
-  }
-
   protected void loadVcf_actionPerformed()
   {
   }
index 1ea4ab5..eb4b910 100755 (executable)
@@ -43,7 +43,6 @@ import javax.swing.SwingConstants;
 import javax.swing.SwingUtilities;
 import javax.swing.event.CaretEvent;
 import javax.swing.event.CaretListener;
-import javax.swing.text.JTextComponent;
 
 public class GFinder extends JPanel
 {
@@ -134,9 +133,9 @@ public class GFinder extends JPanel
         createFeatures_actionPerformed();
       }
     });
-    searchBox.setFont(new java.awt.Font("Verdana", Font.PLAIN, 12));
-    ((JTextComponent) searchBox.getEditor().getEditorComponent())
-            .addCaretListener(new CaretListener()
+    searchBox.getComponent()
+            .setFont(new java.awt.Font("Verdana", Font.PLAIN, 12));
+    searchBox.addCaretListener(new CaretListener()
             {
               @Override
               public void caretUpdate(CaretEvent e)
@@ -144,8 +143,7 @@ public class GFinder extends JPanel
                 textfield_caretUpdate(e);
               }
             });
-    searchBox.getEditor().getEditorComponent()
-            .addKeyListener(new java.awt.event.KeyAdapter()
+    searchBox.addKeyListener(new java.awt.event.KeyAdapter()
             {
               @Override
               public void keyPressed(KeyEvent e)
@@ -169,10 +167,10 @@ public class GFinder extends JPanel
     actionsPanel.add(createFeatures, null);
     this.add(jLabelFind, java.awt.BorderLayout.WEST);
     this.add(actionsPanel, java.awt.BorderLayout.EAST);
-    this.add(jPanel2, java.awt.BorderLayout.SOUTH);
+    // this.add(jPanel2, java.awt.BorderLayout.SOUTH);
     this.add(jPanel3, java.awt.BorderLayout.NORTH);
     this.add(jPanel4, java.awt.BorderLayout.CENTER);
-    jPanel4.add(searchBox, java.awt.BorderLayout.NORTH);
+    jPanel4.add(searchBox.getComponent(), java.awt.BorderLayout.NORTH);
 
     JPanel optionsPanel = new JPanel();
 
index 9912e44..224a712 100644 (file)
@@ -33,6 +33,8 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import junit.extensions.PA;
+
 public class PDBFTSPanelTest
 {
 
@@ -103,12 +105,13 @@ public class PDBFTSPanelTest
   {
     PDBFTSPanel searchPanel = new PDBFTSPanel(null);
     JInternalFrame mainFrame = searchPanel.getMainFrame();
-    JComboBox<String> txt_search = searchPanel.getTxtSearch();
+//    JComboBox<String> txt_search = PA.gsearchPanel.getTxtSearch();
 
     assertTrue(mainFrame.getTitle().length() == 20);
     assertTrue(mainFrame.getTitle()
             .equalsIgnoreCase("PDB Sequence Fetcher"));
-    txt_search.setSelectedItem("ABC");
+    PA.invokeMethod(PA.getValue(searchPanel, "txt_search"), "setSelectedItem(java.lang.String)", "ABC");
+  //  txt_search.setSelectedItem("ABC");
     try
     {
       // wait for web-service to handle response
index dfd7973..6c79f31 100644 (file)
@@ -34,7 +34,7 @@ public class JvCacheableInputBoxTest
 
     try
     {
-      // This 1ms delay is essential to prevent the
+      // This delay is essential to prevent the
       // assertion below from executing before
       // swing thread finishes updating the combo-box
       Thread.sleep(100);