Loads PDB files from jar file, new views can open PDB file
[jalview.git] / src / jalview / gui / FeatureRenderer.java
index 14dd1a0..beef70c 100755 (executable)
@@ -212,7 +212,7 @@ public class FeatureRenderer
        {\r
         type =  renderOrder[renderIndex];\r
 \r
-        if(!av.featuresDisplayed.containsKey(type))\r
+        if(type==null || !av.featuresDisplayed.containsKey(type))\r
           continue;\r
 \r
         // loop through all features in sequence to find\r
@@ -423,25 +423,29 @@ public class FeatureRenderer
     public boolean createNewFeatures(SequenceI[] sequences,\r
                                   SequenceFeature [] features)\r
     {\r
-      return amendFeatures(sequences, features, true);\r
+      return amendFeatures(sequences, features, true, null);\r
     }\r
 \r
-    boolean amendFeatures(SequenceI[] sequences,\r
-                           final SequenceFeature [] features,\r
-                           boolean newFeatures)\r
+    int featureIndex = 0;\r
+    boolean amendFeatures(final SequenceI[] sequences,\r
+                          final SequenceFeature[] features,\r
+                          boolean newFeatures,\r
+                          final AlignmentPanel ap)\r
     {\r
       JPanel bigPanel = new JPanel(new BorderLayout());\r
       final JComboBox name = new JComboBox();\r
       final JComboBox source = new JComboBox();\r
       final JTextArea description = new JTextArea(3,25);\r
-      final JTextField start = new JTextField(6);\r
-      final JTextField end = new JTextField(6);\r
-      final JButton colour = new JButton("     ");\r
+      final JSpinner start = new JSpinner();\r
+      final JSpinner end = new JSpinner();\r
+      start.setPreferredSize(new Dimension(80,20));\r
+      end.setPreferredSize(new Dimension(80,20));\r
+      final JPanel colour = new JPanel();\r
+      colour.setBorder(BorderFactory.createEtchedBorder());\r
       colour.setMaximumSize(new Dimension(40,10));\r
-      colour.setBackground(new Color(60, 160, 115));\r
-      colour.addActionListener(new ActionListener()\r
+      colour.addMouseListener(new MouseAdapter()\r
           {\r
-            public void actionPerformed(ActionEvent evt)\r
+            public void mousePressed(MouseEvent evt)\r
             {\r
               colour.setBackground(\r
                   JColorChooser.showDialog(Desktop.desktop,\r
@@ -475,9 +479,9 @@ public class FeatureRenderer
         bigPanel.add(panel, BorderLayout.SOUTH);\r
 \r
         panel = new JPanel();\r
-        panel.add(new JLabel("Start: ", JLabel.RIGHT));\r
+        panel.add(new JLabel(" Start:", JLabel.RIGHT));\r
         panel.add(start);\r
-        panel.add(new JLabel("End: ", JLabel.RIGHT));\r
+        panel.add(new JLabel("  End:", JLabel.RIGHT));\r
         panel.add(end);\r
         bigPanel.add(panel, BorderLayout.CENTER);\r
       }\r
@@ -523,9 +527,20 @@ public class FeatureRenderer
         description.setText(\r
             lastDescriptionAdded == null ?\r
             features[0].description : lastDescriptionAdded);\r
+\r
+        if (getColour(lastFeatureAdded) != null)\r
+        {\r
+          colour.setBackground(getColour(lastFeatureAdded));\r
+        }\r
+        else\r
+        {\r
+          colour.setBackground(new Color(60, 160, 115));\r
+        }\r
+\r
       }\r
       else if (!newFeatures)\r
       {\r
+        featureIndex = 0;\r
         for(int f=0; f<features.length; f++)\r
         {\r
           name.addItem(features[f].getType().toString());\r
@@ -533,8 +548,8 @@ public class FeatureRenderer
 \r
         description.setText(features[0].getDescription());\r
         source.setSelectedItem(features[0].getFeatureGroup());\r
-        start.setText(features[0].getBegin()+"");\r
-        end.setText(features[0].getEnd()+"");\r
+        start.setValue(new Integer(features[0].getBegin()));\r
+        end.setValue(new Integer(features[0].getEnd()));\r
         colour.setBackground(\r
                 getColour(name.getSelectedItem().toString()));\r
         name.addItemListener(new ItemListener()\r
@@ -542,12 +557,31 @@ public class FeatureRenderer
           public void itemStateChanged(ItemEvent e)\r
           {\r
             int index = name.getSelectedIndex();\r
-            description.setText(features[index].getDescription());\r
-            source.setSelectedItem(features[index].getFeatureGroup());\r
-            start.setText(features[index].getBegin() + "");\r
-            end.setText(features[index].getEnd() + "");\r
-            colour.setBackground(\r
-                getColour(name.getSelectedItem().toString()));\r
+            if(index!=-1)\r
+            {\r
+              featureIndex = index;\r
+              description.setText(features[index].getDescription());\r
+              source.setSelectedItem(features[index].getFeatureGroup());\r
+              start.setValue(new Integer(features[index].getBegin()));\r
+              end.setValue(new Integer(features[index].getEnd()));\r
+              colour.setBackground(\r
+                  getColour(name.getSelectedItem().toString()));\r
+\r
+              SearchResults highlight = new SearchResults();\r
+              highlight.addResult(sequences[0],\r
+                                  features[index].getBegin(),\r
+                                  features[index].getEnd());\r
+\r
+              ap.seqPanel.seqCanvas.highlightSearchResults(highlight);\r
+\r
+            }\r
+            Color col = getColour(name.getSelectedItem().toString());\r
+            if (col == null)\r
+              col = new\r
+                  jalview.schemes.UserColourScheme()\r
+                  .createColourFromName(name.getSelectedItem().toString());\r
+\r
+            colour.setBackground(col);\r
           }\r
         });\r
 \r
@@ -560,15 +594,17 @@ public class FeatureRenderer
       else\r
         options = new Object[]{"OK", "Cancel"};\r
 \r
+      String title = newFeatures ?  "Create New Sequence Feature(s)" :\r
+                                    "Amend/Delete Features for "\r
+                                    +sequences[0].getName();\r
+\r
       int reply = JOptionPane.showInternalOptionDialog(Desktop.desktop,\r
                                                    bigPanel,\r
-                                                   newFeatures ?\r
-                                                   "Create New Sequence Feature(s)" :\r
-                                                   "Amend/Delete Features",\r
+                                                   title,\r
                                                    JOptionPane.YES_NO_CANCEL_OPTION,\r
                                                    JOptionPane.QUESTION_MESSAGE,\r
                                                    null,\r
-                                                   options, null);\r
+                                                   options, "OK");\r
 \r
       jalview.io.FeaturesFile ffile = new jalview.io.FeaturesFile();\r
 \r
@@ -583,7 +619,8 @@ public class FeatureRenderer
 \r
       if(!newFeatures)\r
       {\r
-        SequenceFeature sf = features[name.getSelectedIndex()];\r
+        SequenceFeature sf = features[featureIndex];\r
+\r
         if(reply==JOptionPane.NO_OPTION)\r
           sequences[0].getDatasetSequence().deleteFeature(sf);\r
         else if(reply==JOptionPane.YES_OPTION)\r
@@ -593,8 +630,8 @@ public class FeatureRenderer
           sf.description = lastDescriptionAdded;\r
           setColour(sf.type, colour.getBackground());\r
           try{\r
-            sf.begin = Integer.parseInt( start.getText() );\r
-            sf.end = Integer.parseInt( end.getText() );\r
+            sf.begin = ((Integer)start.getValue()).intValue();\r
+            sf.end = ((Integer)end.getValue()).intValue();\r
           }catch(NumberFormatException ex)\r
           {}\r
 \r
@@ -638,6 +675,10 @@ public class FeatureRenderer
           return false;\r
       }\r
 \r
+      if(name.getSelectedIndex()==-1)\r
+        findAllFeatures();\r
+\r
+\r
       return true;\r
     }\r
 \r