Unique name for new group and treegroup
[jalview.git] / src / jalview / gui / SeqPanel.java
index bc9adfe..ed9ce8d 100755 (executable)
@@ -366,7 +366,7 @@ public class SeqPanel extends JPanel implements MouseListener,
         SequenceGroup sg = av.selectionGroup;\r
         //Find the top and bottom of this group\r
         int min = av.alignment.getHeight(), max = 0;\r
-        for(int i=0; i<sg.getSize(false); i++)\r
+        for(int i=0; i<sg.getSize(); i++)\r
         {\r
           int index = av.alignment.findIndex( sg.getSequenceAt(i) );\r
           if(index > max)\r
@@ -402,7 +402,7 @@ public class SeqPanel extends JPanel implements MouseListener,
         else\r
         {\r
           // Now add any sequences between min and max\r
-          sg.getSequences(false).clear();\r
+          sg.getSequences(null).clear();\r
           for (int i = min; i < max; i++)\r
           {\r
             sg.addSequence(av.alignment.getSequenceAt(i), false);\r
@@ -570,116 +570,127 @@ public class SeqPanel extends JPanel implements MouseListener,
 \r
       setStatusMessage(sequence, res, seq);\r
 \r
+\r
+\r
+      tooltipText.setLength(6); // Cuts the buffer back to <html>\r
+\r
+      SequenceGroup []  groups = av.alignment.findAllGroups(sequence);\r
+      if(groups!=null)\r
+      {\r
+        for(int g=0; g<groups.length; g++)\r
+        {\r
+          if(groups[g].getStartRes()<=res && groups[g].getEndRes()>=res)\r
+          {\r
+            if (!groups[g].getName().startsWith("JTreeGroup") &&\r
+                !groups[g].getName().startsWith("JGroup"))\r
+              tooltipText.append(groups[g].getName() + " ");\r
+\r
+            if(groups[g].getDescription()!=null)\r
+              tooltipText.append(groups[g].getDescription()+"<BR>");\r
+          }\r
+        }\r
+      }\r
+\r
+\r
         // use aa to see if the mouse pointer is on a\r
         if (av.showSequenceFeatures)\r
         {\r
-            tooltipText.setLength(6); // Cuts the buffer back to <html>\r
+          SequenceFeature[] features = findFeaturesAtRes(\r
+              sequence.getDatasetSequence(), sequence.findPosition(res));\r
 \r
-            SequenceFeature[] features = findFeaturesAtRes(\r
-                sequence.getDatasetSequence(), sequence.findPosition(res));\r
-\r
-            if(features!=null)\r
+          if (features != null)\r
+          {\r
+            for (int i = 0; i < features.length; i++)\r
             {\r
-              for (int i = 0; i < features.length; i++)\r
+              if (features[i].getType().equals("disulfide bond"))\r
               {\r
-                  if (features[i].getType().equals("disulfide bond"))\r
-                  {\r
-                    if (features[i].getBegin() == sequence.findPosition(res)\r
-                        || features[i].getEnd() == sequence.findPosition(res))\r
-                    {\r
-                      if (tooltipText.length() > 6)\r
-                        tooltipText.append("<br>");\r
-                      tooltipText.append("disulfide bond " + features[i].getBegin() + ":" +\r
+                if (features[i].getBegin() == sequence.findPosition(res)\r
+                    || features[i].getEnd() == sequence.findPosition(res))\r
+                {\r
+                  if (tooltipText.length() > 6)\r
+                    tooltipText.append("<br>");\r
+                  tooltipText.append("disulfide bond " + features[i].getBegin() + ":" +\r
                                      features[i].getEnd());\r
-                      if (features[i].links != null)\r
-                      tooltipText.append(" <img src=\"" + linkImageURL + "\">");\r
-                    }\r
-                  }\r
-                  else\r
-                  {\r
-                    if (tooltipText.length() > 6)\r
-                      tooltipText.append("<br>");\r
+                  if (features[i].links != null)\r
+                    tooltipText.append(" <img src=\"" + linkImageURL + "\">");\r
+                }\r
+              }\r
+              else\r
+              {\r
+                if (tooltipText.length() > 6)\r
+                  tooltipText.append("<br>");\r
 \r
-                    tooltipText.append(features[i].getType() + " " +\r
+                tooltipText.append(features[i].getType() + " " +\r
                                    features[i].begin);\r
-                    if (features[i].begin != features[i].end)\r
-                      tooltipText.append(" " + features[i].end);\r
+                if (features[i].begin != features[i].end)\r
+                  tooltipText.append(" " + features[i].end);\r
 \r
-                    if (features[i].getDescription() != null\r
-                        && !features[i].description.equals(features[i].getType()))\r
-                    {\r
-                      tmpString = features[i].getDescription();\r
-                      int startTag=tmpString.toUpperCase().indexOf("<HTML>");\r
-                      if(startTag>-1)\r
-                      {\r
-                        tmpString = tmpString.substring(startTag + 6);\r
-                      }\r
-                      int endTag=tmpString.toUpperCase().indexOf("</BODY>");\r
-                      if(endTag>-1)\r
-                      {\r
-                        tmpString = tmpString.substring(0, endTag);\r
-                      }\r
-                      endTag = tmpString.toUpperCase().indexOf("</HTML>");\r
-                      if(endTag>-1)\r
-                      {\r
-                        tmpString = tmpString.substring(0, endTag);\r
-                      }\r
-\r
-                      if(startTag>-1)\r
-                      {\r
-                        tooltipText.append("; " + tmpString);\r
-                      }\r
-                      else\r
-                      {\r
-                       if (tmpString.indexOf("<") > -1 || tmpString.indexOf(">") > -1)\r
-                       {\r
-                         //The description does not specify html is to\r
-                         //be used, so we must remove < > symbols\r
-                         tmpString = tmpString.replaceAll("<", "&lt;");\r
-                         tmpString = tmpString.replaceAll(">", "&gt;");\r
-\r
-                         tooltipText.append("; ");\r
-                         tooltipText.append(tmpString);\r
-\r
-                       }\r
-                       else\r
-                         tooltipText.append("; "+tmpString);\r
-                      }\r
-                    }\r
-                    if (features[i].getValue("status") != null )\r
+                if (features[i].getDescription() != null\r
+                    && !features[i].description.equals(features[i].getType()))\r
+                {\r
+                  tmpString = features[i].getDescription();\r
+                  int startTag = tmpString.toUpperCase().indexOf("<HTML>");\r
+                  if (startTag > -1)\r
+                  {\r
+                    tmpString = tmpString.substring(startTag + 6);\r
+                  }\r
+                  int endTag = tmpString.toUpperCase().indexOf("</BODY>");\r
+                  if (endTag > -1)\r
+                  {\r
+                    tmpString = tmpString.substring(0, endTag);\r
+                  }\r
+                  endTag = tmpString.toUpperCase().indexOf("</HTML>");\r
+                  if (endTag > -1)\r
+                  {\r
+                    tmpString = tmpString.substring(0, endTag);\r
+                  }\r
+\r
+                  if (startTag > -1)\r
+                  {\r
+                    tooltipText.append("; " + tmpString);\r
+                  }\r
+                  else\r
+                  {\r
+                    if (tmpString.indexOf("<") > -1 || tmpString.indexOf(">") > -1)\r
                     {\r
-                      String status = features[i].getValue("status").toString();\r
-                      if(status.length()>0)\r
-                        tooltipText.append("; (" + features[i].getValue("status") + ")");\r
-                    }\r
+                      //The description does not specify html is to\r
+                      //be used, so we must remove < > symbols\r
+                      tmpString = tmpString.replaceAll("<", "&lt;");\r
+                      tmpString = tmpString.replaceAll(">", "&gt;");\r
 \r
-                    if (features[i].links != null)\r
-                      tooltipText.append(" <img src=\"" + linkImageURL + "\">");\r
+                      tooltipText.append("; ");\r
+                      tooltipText.append(tmpString);\r
 \r
+                    }\r
+                    else\r
+                      tooltipText.append("; " + tmpString);\r
                   }\r
-\r
-               // else if(features[i].begin==0 && features[i].end==0)\r
+                }\r
+                if (features[i].getValue("status") != null)\r
                 {\r
-                  // seqSpecific.append(features[i].featureGroup+": "\r
-                  //                   + features[i].getType()+" "\r
-                   //                   +features[i].getDescription()+"<br>");\r
-\r
+                  String status = features[i].getValue("status").toString();\r
+                  if (status.length() > 0)\r
+                    tooltipText.append("; (" + features[i].getValue("status") + ")");\r
                 }\r
-              }\r
 \r
-              if(tooltipText.length()==6) // <html></html>\r
-              {\r
-                setToolTipText(null);\r
-              }\r
-              else\r
-              {\r
-                tooltipText.append("</html>");\r
-                setToolTipText(tooltipText.toString());\r
+                if (features[i].links != null)\r
+                  tooltipText.append(" <img src=\"" + linkImageURL + "\">");\r
+\r
               }\r
             }\r
-            else\r
-              setToolTipText(null);\r
+          }\r
         }\r
+        if (tooltipText.length() == 6) // <html></html>\r
+        {\r
+          setToolTipText(null);\r
+        }\r
+        else\r
+        {\r
+          tooltipText.append("</html>");\r
+          setToolTipText(tooltipText.toString());\r
+        }\r
+       // else\r
+        //  setToolTipText(null);\r
     }\r
 \r
     void setStatusMessage(SequenceI sequence, int res, int seq)\r
@@ -809,24 +820,20 @@ public class SeqPanel extends JPanel implements MouseListener,
       boolean fixedColumns = false;\r
       SequenceGroup sg = av.getSelectionGroup();\r
 \r
+      SequenceI seq = av.alignment.getSequenceAt(startseq);\r
 \r
+      //No group, but the sequence may represent a group\r
         if (!groupEditing && av.hasHiddenRows)\r
         {\r
-          if (av.alignment.getSequenceAt(startseq).getHiddenSequences() != null)\r
+          if (av.hiddenRepSequences!=null\r
+              && av.hiddenRepSequences.containsKey(seq))\r
           {\r
+            sg = (SequenceGroup)av.hiddenRepSequences.get(seq);\r
             groupEditing = true;\r
           }\r
         }\r
 \r
-        //No group, but the sequence may represent a group\r
-        if (groupEditing\r
-            && sg == null\r
-            && av.alignment.getSequenceAt(startseq).getHiddenSequences() == null)\r
-        {\r
-          groupEditing = false;\r
-        }\r
 \r
-        SequenceI seq = av.alignment.getSequenceAt(startseq);\r
         StringBuffer message = new StringBuffer();\r
         if (groupEditing)\r
         {\r
@@ -855,7 +862,7 @@ public class SeqPanel extends JPanel implements MouseListener,
 \r
         //Are we editing within a selection group?\r
         if (groupEditing\r
-            || (sg != null && sg.getSequences(true).contains(seq)))\r
+            || (sg != null && sg.getSequences(av.hiddenRepSequences).contains(seq)))\r
         {\r
           fixedColumns = true;\r
 \r
@@ -863,9 +870,7 @@ public class SeqPanel extends JPanel implements MouseListener,
           //but the sequence represents a group\r
           if (sg == null)\r
           {\r
-            sg = new SequenceGroup(null, null, false, false, false, 0,\r
-                                   av.alignment.getWidth()-1);\r
-            sg.addSequence(av.alignment.getSequenceAt(startseq), false);\r
+            sg = (SequenceGroup) av.hiddenRepSequences.get(seq);\r
           }\r
 \r
           fixedLeft = sg.getStartRes();\r
@@ -924,7 +929,7 @@ public class SeqPanel extends JPanel implements MouseListener,
 \r
         if (groupEditing)\r
         {\r
-          Vector vseqs = sg.getSequences(true);\r
+          Vector vseqs = sg.getSequences(av.hiddenRepSequences);\r
           int g, groupSize = vseqs.size();\r
           SequenceI[] groupSeqs = new SequenceI[groupSize];\r
           for (g = 0; g < groupSeqs.length; g++)\r
@@ -972,7 +977,7 @@ public class SeqPanel extends JPanel implements MouseListener,
 \r
             if (!blank)\r
             {\r
-              if(sg.getSize(false) == av.alignment.getHeight()  )\r
+              if(sg.getSize() == av.alignment.getHeight()  )\r
               {\r
                 if((av.hasHiddenColumns\r
                     && startres<av.getColumnSelection().getHiddenBoundaryRight(startres)))\r
@@ -1043,7 +1048,7 @@ public class SeqPanel extends JPanel implements MouseListener,
                 editCommand.appendEdit(EditCommand.INSERT_GAP,\r
                                        groupSeqs,\r
                                        startres, startres-lastres,\r
-                                       av.getGapCharacter(),\r
+                                       av.alignment,\r
                                        true);\r
               }\r
             }\r
@@ -1061,7 +1066,7 @@ public class SeqPanel extends JPanel implements MouseListener,
                 editCommand.appendEdit(EditCommand.DELETE_GAP,\r
                                        groupSeqs,\r
                                        startres, lastres - startres,\r
-                                       av.getGapCharacter(),\r
+                                       av.alignment,\r
                                        true);\r
 \r
             }\r
@@ -1084,7 +1089,7 @@ public class SeqPanel extends JPanel implements MouseListener,
                                      new SequenceI[]\r
                                      {seq},\r
                                      lastres, startres-lastres,\r
-                                     av.getGapCharacter(),\r
+                                     av.alignment,\r
                                      true);\r
             }\r
           }\r
@@ -1120,7 +1125,7 @@ public class SeqPanel extends JPanel implements MouseListener,
                                        new SequenceI[]\r
                                        {seq},\r
                                        startres, max,\r
-                                       av.getGapCharacter(),\r
+                                       av.alignment,\r
                                        true);\r
               }\r
             }\r
@@ -1160,11 +1165,11 @@ public class SeqPanel extends JPanel implements MouseListener,
 \r
       editCommand.appendEdit(EditCommand.DELETE_GAP,\r
                              seq,\r
-                             blankColumn, 1, av.getGapCharacter(), true);\r
+                             blankColumn, 1, av.alignment, true);\r
 \r
       editCommand.appendEdit(EditCommand.INSERT_GAP,\r
                              seq,\r
-                             j, 1, av.getGapCharacter(),\r
+                             j, 1, av.alignment,\r
                              true);\r
 \r
     }\r
@@ -1174,11 +1179,11 @@ public class SeqPanel extends JPanel implements MouseListener,
 \r
       editCommand.appendEdit(EditCommand.DELETE_GAP,\r
                              seq,\r
-                             j, 1, av.getGapCharacter(), true);\r
+                             j, 1, av.alignment, true);\r
 \r
       editCommand.appendEdit(EditCommand.INSERT_GAP,\r
                              seq,\r
-                             fixedColumn, 1, av.getGapCharacter(), true);\r
+                             fixedColumn, 1, av.alignment, true);\r
     }\r
 \r
     /**\r
@@ -1221,7 +1226,7 @@ public class SeqPanel extends JPanel implements MouseListener,
       SequenceI sequence = av.alignment.getSequenceAt( findSeq(evt) );\r
       if(evt.getClickCount()>1)\r
       {\r
-        if (av.getSelectionGroup().getSize(false) == 1\r
+        if (av.getSelectionGroup().getSize() == 1\r
             && av.getSelectionGroup().getEndRes()\r
             - av.getSelectionGroup().getStartRes() < 2)\r
           av.setSelectionGroup(null);\r
@@ -1327,7 +1332,7 @@ public class SeqPanel extends JPanel implements MouseListener,
                 stretchGroup = null;\r
             }\r
         }\r
-        else if (!stretchGroup.getSequences(false).contains(sequence) ||\r
+        else if (!stretchGroup.getSequences(null).contains(sequence) ||\r
                 (stretchGroup.getStartRes() > res) ||\r
                 (stretchGroup.getEndRes() < res))\r
         {\r
@@ -1442,7 +1447,7 @@ public class SeqPanel extends JPanel implements MouseListener,
           if (stretchGroup.cs instanceof ClustalxColourScheme)\r
           {\r
             ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(\r
-                stretchGroup.getSequences(true),\r
+                stretchGroup.getSequences(av.hiddenRepSequences),\r
                 stretchGroup.getWidth());\r
           }\r
 \r
@@ -1549,7 +1554,7 @@ public class SeqPanel extends JPanel implements MouseListener,
 \r
             Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);\r
 \r
-            if (stretchGroup.getSequences(false).contains(nextSeq))\r
+            if (stretchGroup.getSequences(null).contains(nextSeq))\r
             {\r
                 stretchGroup.deleteSequence(seq, false);\r
             }\r