JAL-3829 pulled out more of the FTS dependent parts of structurechooser
[jalview.git] / src / jalview / jbgui / GStructureChooser.java
index 768051f..d43495e 100644 (file)
@@ -40,6 +40,7 @@ import java.awt.FlowLayout;
 import java.awt.Font;
 import java.awt.GridLayout;
 import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.awt.event.KeyAdapter;
@@ -65,6 +66,7 @@ import javax.swing.JTabbedPane;
 import javax.swing.JTable;
 import javax.swing.JTextField;
 import javax.swing.ListCellRenderer;
+import javax.swing.Timer;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.event.DocumentEvent;
@@ -157,11 +159,11 @@ public abstract class GStructureChooser extends JPanel
 
   protected JTable tbl_local_pdb = new JTable();
 
-  protected JTabbedPane pnl_filter = jalview.jbgui.GDesktop.createTabbedPane();
+  protected JTabbedPane pnl_filter = new JTabbedPane();
+
+  protected abstract FTSDataColumnPreferences getFTSDocFieldPrefs();
+  protected abstract void setFTSDocFieldPrefs(FTSDataColumnPreferences newPrefs);
 
-  protected FTSDataColumnPreferences pdbDocFieldPrefs = new FTSDataColumnPreferences(
-          PreferenceSource.STRUCTURE_CHOOSER,
-          PDBFTSRestClient.getInstance());
 
   protected FTSDataColumnI[] previousWantedFields;
 
@@ -247,6 +249,10 @@ public abstract class GStructureChooser extends JPanel
 
   public GStructureChooser()
   {
+  }
+  protected void initDialog()
+  {
+
     try
     {
       jbInit();
@@ -259,7 +265,29 @@ public abstract class GStructureChooser extends JPanel
       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();
+  }
+  //
+  
   /**
    * Initializes the GUI default properties
    * 
@@ -486,19 +514,19 @@ public abstract class GStructureChooser extends JPanel
       @Override
       public void insertUpdate(DocumentEvent e)
       {
-        txt_search_ActionPerformed();
+        txt_search_ActionPerformedDelayed();
       }
 
       @Override
       public void removeUpdate(DocumentEvent e)
       {
-        txt_search_ActionPerformed();
+        txt_search_ActionPerformedDelayed();
       }
 
       @Override
       public void changedUpdate(DocumentEvent e)
       {
-        txt_search_ActionPerformed();
+        txt_search_ActionPerformedDelayed();
       }
     });
 
@@ -572,7 +600,7 @@ public abstract class GStructureChooser extends JPanel
           btn_add.setVisible(false);
           btn_newView.setEnabled(false);
           btn_cancel.setVisible(false);
-          previousWantedFields = pdbDocFieldPrefs
+          previousWantedFields = getFTSDocFieldPrefs()
                   .getStructureSummaryFields()
                   .toArray(new FTSDataColumnI[0]);
         }
@@ -594,7 +622,7 @@ public abstract class GStructureChooser extends JPanel
     pnl_filter.addChangeListener(changeListener);
     pnl_filter.setPreferredSize(new Dimension(width, height));
     pnl_filter.add(foundStructureSummary, scrl_foundStructures);
-    pnl_filter.add(configureCols, pdbDocFieldPrefs);
+    pnl_filter.add(configureCols, getFTSDocFieldPrefs());
 
     JPanel pnl_locPDB = new JPanel(new BorderLayout());
     pnl_locPDB.add(scrl_localPDB);
@@ -637,7 +665,8 @@ public abstract class GStructureChooser extends JPanel
     Desktop.addInternalFrame(mainFrame, frameTitle, width, height);
   }
 
-  protected void closeAction(int preferredHeight)
+
+protected void closeAction(int preferredHeight)
   {
     // System.out.println(">>>>>>>>>> closing internal frame!!!");
     // System.out.println("width : " + mainFrame.getWidth());
@@ -658,7 +687,7 @@ public abstract class GStructureChooser extends JPanel
       return true;
     }
 
-    FTSDataColumnI[] currentWantedFields = pdbDocFieldPrefs
+    FTSDataColumnI[] currentWantedFields = getFTSDocFieldPrefs()
             .getStructureSummaryFields().toArray(new FTSDataColumnI[0]);
     return Arrays.equals(currentWantedFields, previousWantedFields) ? false
             : true;