Toggle case added to popup menu
authoramwaterhouse <Andrew Waterhouse>
Tue, 2 May 2006 09:28:24 +0000 (09:28 +0000)
committeramwaterhouse <Andrew Waterhouse>
Tue, 2 May 2006 09:28:24 +0000 (09:28 +0000)
src/jalview/appletgui/APopupMenu.java
src/jalview/datamodel/Sequence.java
src/jalview/datamodel/SequenceI.java

index ebf27bb..8f6e49f 100755 (executable)
@@ -58,6 +58,7 @@ public class APopupMenu
   MenuItem cut = new MenuItem("Cut (Jalview Only)");\r
   MenuItem toUpper = new MenuItem("To Upper Case");\r
   MenuItem toLower = new MenuItem("To Lower Case");\r
+  MenuItem toggleCase = new MenuItem("Toggle Case");\r
 \r
   public APopupMenu(AlignmentPanel apanel, final Sequence seq, Vector links)\r
   {\r
@@ -193,28 +194,18 @@ public class APopupMenu
       ap.alignFrame.copy_actionPerformed();\r
     else if(source==cut)\r
       ap.alignFrame.cut_actionPerformed();\r
-    else if(source==toUpper)\r
+    else if(source==toUpper || source==toLower || source==toggleCase)\r
     {\r
       SequenceGroup sg = ap.av.getSelectionGroup();\r
       if (sg != null)\r
       {\r
         for (int g = 0; g < sg.getSize(); g++)\r
         {\r
-          sg.getSequenceAt(g).changeCase(true, sg.getStartRes(),\r
-                                         sg.getEndRes() + 1);\r
-        }\r
-        ap.seqPanel.seqCanvas.repaint();\r
-      }\r
-    }\r
-    else if(source==toLower)\r
-    {\r
-      SequenceGroup sg = ap.av.getSelectionGroup();\r
-      if (sg != null)\r
-      {\r
-        for (int g = 0; g < sg.getSize(); g++)\r
-        {\r
-          sg.getSequenceAt(g).changeCase(false, sg.getStartRes(),\r
-                                         sg.getEndRes() + 1);\r
+          if (source == toggleCase)\r
+            sg.getSequenceAt(g).toggleCase(sg.getStartRes(), sg.getEndRes() + 1);\r
+          else\r
+            sg.getSequenceAt(g).changeCase(source == toUpper, sg.getStartRes(),\r
+                                           sg.getEndRes() + 1);\r
         }\r
         ap.seqPanel.seqCanvas.repaint();\r
       }\r
@@ -317,6 +308,8 @@ public class APopupMenu
     toUpper.addActionListener(this);\r
     editMenu.add(toLower);\r
     toLower.addActionListener(this);\r
+    editMenu.add(toggleCase);\r
+    toggleCase.addActionListener(this);\r
 \r
   }\r
 \r
index 333737e..6873f52 100755 (executable)
@@ -662,4 +662,38 @@ public class Sequence implements SequenceI
       sequence = newSeq.toString();\r
     }\r
 \r
+    public void toggleCase(int start, int end)\r
+    {\r
+      StringBuffer newSeq = new StringBuffer();\r
+\r
+     if(end>=sequence.length())\r
+       end = sequence.length()-1;\r
+\r
+     if (start > 0)\r
+     {\r
+       newSeq.append(sequence.substring(0, start));\r
+     }\r
+\r
+     char nextChar;\r
+     for(int c=start; c<end; c++)\r
+     {\r
+       nextChar = sequence.charAt(c);\r
+       if(Character.isLetter(nextChar))\r
+       {\r
+         if(Character.isUpperCase(nextChar))\r
+           nextChar = Character.toLowerCase(nextChar);\r
+         else\r
+           nextChar = Character.toUpperCase(nextChar);\r
+       }\r
+\r
+\r
+       newSeq.append(nextChar);\r
+     }\r
+\r
+     if (end < sequence.length())\r
+       newSeq.append(sequence.substring(end));\r
+\r
+     sequence = newSeq.toString();\r
+    }\r
+\r
 }\r
index bf577bf..ea49f68 100755 (executable)
@@ -256,4 +256,6 @@ public interface SequenceI
 \r
     public void changeCase(boolean toUpper, int start, int end);\r
 \r
+    public void toggleCase(int start, int end);\r
+\r
 }\r