JAL-2045 JAL-2047 improvement for sorting PDB quality measure numerically, and improv...
[jalview.git] / src / jalview / jbgui / GPDBSearchPanel.java
index 473f634..d640df8 100644 (file)
@@ -28,6 +28,7 @@ import jalview.util.MessageManager;
 import jalview.ws.dbsources.PDBRestClient.PDBDocField;
 
 import java.awt.BorderLayout;
+import java.awt.CardLayout;
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -72,13 +73,14 @@ public abstract class GPDBSearchPanel extends JPanel
   protected JButton btn_ok = new JButton();
 
   protected JButton btn_back = new JButton();
-  
+
   protected JButton btn_cancel = new JButton();
-  
+
   protected JTextField txt_search = new JTextField(20);
-  
+
   protected JTable tbl_summary = new JTable()
   {
+    @Override
     public String getToolTipText(MouseEvent evt)
     {
       String toolTipText = null;
@@ -88,27 +90,39 @@ public abstract class GPDBSearchPanel extends JPanel
 
       try
       {
+        if (getValueAt(rowIndex, colIndex) == null)
+        {
+          return null;
+        }
         toolTipText = getValueAt(rowIndex, colIndex).toString();
+
       } catch (Exception e)
       {
         e.printStackTrace();
       }
-      toolTipText = (toolTipText == null ? null : JvSwingUtils.wrapTooltip(
-              true, toolTipText));
+      toolTipText = (toolTipText == null ? null
+              : (toolTipText.length() > 500 ? JvSwingUtils.wrapTooltip(
+                      true, toolTipText.subSequence(0, 500) + "...")
+                      : JvSwingUtils.wrapTooltip(true, toolTipText)));
+
       return toolTipText;
     }
   };
 
   protected StringBuilder errorWarning = new StringBuilder();
 
-  protected JScrollPane scrl_searchResult = new JScrollPane(
-tbl_summary);
+  protected JScrollPane scrl_searchResult = new JScrollPane(tbl_summary);
 
   protected ImageIcon warningImage = new ImageIcon(getClass().getResource(
           "/images/warning.gif"));
 
+  protected ImageIcon loadingImage = new ImageIcon(getClass().getResource(
+          "/images/loading.gif"));
+
   protected JLabel lbl_warning = new JLabel(warningImage);
 
+  protected JLabel lbl_loading = new JLabel(loadingImage);
+
   private JTabbedPane tabbedPane = new JTabbedPane();
 
   private PDBDocFieldPreferences pdbDocFieldPrefs = new PDBDocFieldPreferences(
@@ -116,7 +130,7 @@ tbl_summary);
 
   private JPanel pnl_actions = new JPanel();
 
-  private JPanel pnl_results = new JPanel();
+  private JPanel pnl_results = new JPanel(new CardLayout());
 
   private JPanel pnl_inputs = new JPanel();
 
@@ -146,51 +160,127 @@ tbl_summary);
   {
     lbl_warning.setVisible(false);
     lbl_warning.setFont(new java.awt.Font("Verdana", 0, 12));
+    lbl_loading.setVisible(false);
+    lbl_loading.setFont(new java.awt.Font("Verdana", 0, 12));
 
+    tbl_summary.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
     tbl_summary.setAutoCreateRowSorter(true);
     tbl_summary.getTableHeader().setReorderingAllowed(false);
     tbl_summary.addMouseListener(new MouseAdapter()
     {
+      @Override
       public void mouseClicked(MouseEvent e)
       {
         validateSelection();
       }
+
+      @Override
       public void mouseReleased(MouseEvent e)
       {
         validateSelection();
       }
     });
+    tbl_summary.addKeyListener(new KeyAdapter()
+    {
+      @Override
+      public void keyPressed(KeyEvent evt)
+      {
+        validateSelection();
+        switch (evt.getKeyCode())
+        {
+        case KeyEvent.VK_ESCAPE: // escape key
+          btn_back_ActionPerformed();
+          break;
+        case KeyEvent.VK_ENTER: // enter key
+          if (btn_ok.isEnabled())
+          {
+            btn_ok_ActionPerformed();
+          }
+          evt.consume();
+          break;
+        case KeyEvent.VK_TAB: // tab key
+          if (evt.isShiftDown())
+          {
+            tabbedPane.requestFocus();
+          }
+          else
+          {
+            btn_back.requestFocus();
+          }
+          evt.consume();
+          break;
+        default:
+          return;
+        }
+      }
+    });
 
     btn_back.setFont(new java.awt.Font("Verdana", 0, 12));
     btn_back.setText(MessageManager.getString("action.back"));
     btn_back.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         btn_back_ActionPerformed();
       }
     });
+    btn_back.addKeyListener(new KeyAdapter()
+    {
+      @Override
+      public void keyPressed(KeyEvent evt)
+      {
+        if (evt.getKeyCode() == KeyEvent.VK_ENTER)
+        {
+          btn_back_ActionPerformed();
+        }
+      }
+    });
 
     btn_ok.setEnabled(false);
     btn_ok.setFont(new java.awt.Font("Verdana", 0, 12));
     btn_ok.setText(MessageManager.getString("action.ok"));
     btn_ok.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         btn_ok_ActionPerformed();
       }
     });
+    btn_ok.addKeyListener(new KeyAdapter()
+    {
+      @Override
+      public void keyPressed(KeyEvent evt)
+      {
+        if (evt.getKeyCode() == KeyEvent.VK_ENTER)
+        {
+          btn_ok_ActionPerformed();
+        }
+      }
+    });
+
     btn_cancel.setFont(new java.awt.Font("Verdana", 0, 12));
     btn_cancel.setText(MessageManager.getString("action.cancel"));
     btn_cancel.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         btn_cancel_ActionPerformed();
       }
     });
-
+    btn_cancel.addKeyListener(new KeyAdapter()
+    {
+      @Override
+      public void keyPressed(KeyEvent evt)
+      {
+        if (evt.getKeyCode() == KeyEvent.VK_ENTER)
+        {
+          btn_cancel_ActionPerformed();
+        }
+      }
+    });
 
     scrl_searchResult.setPreferredSize(new Dimension(500, 300));
     scrl_searchResult
@@ -217,8 +307,9 @@ tbl_summary);
         else
         {
           tooltipText = MessageManager.formatMessage(
-                  "label.separate_multiple_query_values", new Object[]
-                  { getCmbSearchTarget().getSelectedItem().toString() });
+                  "label.separate_multiple_query_values",
+                  new Object[] { getCmbSearchTarget().getSelectedItem()
+                          .toString() });
         }
         txt_search.setToolTipText(JvSwingUtils.wrapTooltip(true,
                 tooltipText));
@@ -228,7 +319,6 @@ tbl_summary);
 
     populateCmbSearchTargetOptions();
 
-
     txt_search.setFont(new java.awt.Font("Verdana", 0, 12));
 
     txt_search.addKeyListener(new KeyAdapter()
@@ -275,16 +365,25 @@ tbl_summary);
 
     final String searchTabTitle = MessageManager
             .getString("label.search_result");
-    final String configureCols = MessageManager.getString("label.configure_displayed_columns");
+    final String configureCols = MessageManager
+            .getString("label.configure_displayed_columns");
     ChangeListener changeListener = new ChangeListener()
     {
+      @Override
       public void stateChanged(ChangeEvent changeEvent)
       {
         JTabbedPane sourceTabbedPane = (JTabbedPane) changeEvent
                 .getSource();
         int index = sourceTabbedPane.getSelectedIndex();
+
+        btn_back.setVisible(true);
+        btn_cancel.setVisible(true);
+        btn_ok.setVisible(true);
         if (sourceTabbedPane.getTitleAt(index).equals(configureCols))
         {
+          btn_back.setVisible(false);
+          btn_cancel.setVisible(false);
+          btn_ok.setVisible(false);
           btn_back.setEnabled(false);
           btn_cancel.setEnabled(false);
           btn_ok.setEnabled(false);
@@ -318,6 +417,7 @@ tbl_summary);
     pnl_results.add(tabbedPane);
     pnl_inputs.add(cmb_searchTarget);
     pnl_inputs.add(txt_search);
+    pnl_inputs.add(lbl_loading);
     pnl_inputs.add(lbl_warning);
 
     this.setLayout(mainLayout);
@@ -342,6 +442,7 @@ tbl_summary);
             : true;
 
   }
+
   public void validateSelection()
   {
     if (tbl_summary.getSelectedRows().length > 0)
@@ -353,6 +454,7 @@ tbl_summary);
       btn_ok.setEnabled(false);
     }
   }
+
   public JComboBox<PDBDocField> getCmbSearchTarget()
   {
     return cmb_searchTarget;