JAL-3829 open web page for 3d beacons structure by right-clicking and selecting pop... features/r2_11_2/JAL-3829_3dbeacons
authorJim Procter <j.procter@dundee.ac.uk>
Fri, 24 Sep 2021 16:23:24 +0000 (17:23 +0100)
committerJim Procter <j.procter@dundee.ac.uk>
Fri, 24 Sep 2021 16:23:24 +0000 (17:23 +0100)
src/jalview/fts/service/threedbeacons/TDB_FTSData.java
src/jalview/gui/StructureChooser.java
src/jalview/gui/structurechooser/ThreeDBStructureChooserQuerySource.java
src/jalview/jbgui/GStructureChooser.java

index 3418949..6745bb8 100644 (file)
@@ -112,4 +112,9 @@ public class TDB_FTSData implements FTSData
     return (String) getField(Page_URL);
   }
 
+  public String getModelId()
+  {
+    return (String) getField(Model_id);
+  }
+
 }
index 694b063..4807489 100644 (file)
@@ -37,6 +37,7 @@ import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
 import javax.swing.JTable;
 import javax.swing.SwingUtilities;
 import javax.swing.table.AbstractTableModel;
@@ -798,25 +799,18 @@ public class StructureChooser extends GStructureChooser
   }
 
   @Override
-  protected boolean showPopupFor(int selectedRow)
+  protected boolean showPopupFor(int selectedRow, int x, int y)
   {
     FilterOption selectedFilterOpt = ((FilterOption) cmb_filterOption
             .getSelectedItem());
     String currentView = selectedFilterOpt.getView();
+     
     if (currentView == VIEWS_FILTER && data instanceof ThreeDBStructureChooserQuerySource)
     {
-      TDB_FTSData row=null;
       
-      int i=1;
-      for (FTSData el:discoveredStructuresSet) {
-        if (i==selectedRow) {
-          row = (TDB_FTSData) el;
-          break;
-        }
-        i++;
-      }
+      TDB_FTSData row=((ThreeDBStructureChooserQuerySource)data).getFTSDataFor(getResultTable(), selectedRow, discoveredStructuresSet);
       String pageUrl = row.getModelViewUrl(); 
-      JMenu popup = new JMenu("3D Beacons");
+      JPopupMenu popup = new JPopupMenu("3D Beacons");
       JMenuItem viewUrl = new JMenuItem("View model web page");
       viewUrl.addActionListener(
               new ActionListener() {
@@ -829,7 +823,7 @@ public class StructureChooser extends GStructureChooser
               );
       popup.add(viewUrl);
       SwingUtilities.invokeLater(new Runnable()  {
-        public void run() { popup.setVisible(true); }
+        public void run() { popup.show(getResultTable(), x, y); }
       });
       return true;
     }
index 5a7f7d5..cdf456c 100644 (file)
@@ -550,4 +550,20 @@ public class ThreeDBStructureChooserQuerySource
     return upResponse;
   }
 
+  public TDB_FTSData getFTSDataFor(JTable restable, int selectedRow,
+          Collection<FTSData> discoveredStructuresSet)
+  {
+    int idColumnIndex = restable.getColumn("Model id").getModelIndex();
+    
+    String modelId = (String) restable.getValueAt(selectedRow, idColumnIndex);
+    for (FTSData row:discoveredStructuresSet)
+    {
+      if (row instanceof TDB_FTSData && ((TDB_FTSData)row).getModelId().equals(modelId))
+      {
+        return ((TDB_FTSData)row);
+      }
+    }
+    return null;
+  }
+
 }
\ No newline at end of file
index 8a72b37..fadfe6d 100644 (file)
@@ -337,7 +337,7 @@ public abstract class GStructureChooser extends JPanel
        {
          Point pt = e.getPoint();
          int selectedRow = tbl_summary.rowAtPoint(pt);
-         if (showPopupFor(selectedRow))
+         if (showPopupFor(selectedRow,pt.x,pt.y))
          {
            return true;
          }
@@ -694,7 +694,7 @@ public abstract class GStructureChooser extends JPanel
   }
 
 
-protected abstract boolean showPopupFor(int selectedRow);
+protected abstract boolean showPopupFor(int selectedRow, int x, int y);
 protected void closeAction(int preferredHeight)
   {
     // System.out.println(">>>>>>>>>> closing internal frame!!!");