Rearrange annotations
authoramwaterhouse <Andrew Waterhouse>
Tue, 16 May 2006 10:23:48 +0000 (10:23 +0000)
committeramwaterhouse <Andrew Waterhouse>
Tue, 16 May 2006 10:23:48 +0000 (10:23 +0000)
src/jalview/gui/AnnotationLabels.java

index bffa89a..bbc5c04 100755 (executable)
@@ -41,14 +41,14 @@ public class AnnotationLabels extends JPanel implements MouseListener,
     static String DELETE = "Delete This Row";\r
     static String SHOWALL = "Show All Hidden Rows";\r
     static String OUTPUT_TEXT = "Show Values In Textbox";\r
-    boolean active = false;\r
+    boolean resizePanel = false;\r
     Image image;\r
     AlignmentPanel ap;\r
     AlignViewport av;\r
     boolean resizing = false;\r
+    MouseEvent dragEvent;\r
     int oldY;\r
-    int mouseX;\r
-    int selectedRow = 0;\r
+    int selectedRow;\r
     int scrollOffset = 0;\r
     Font font = new Font("Arial", Font.PLAIN, 11);\r
 \r
@@ -108,6 +108,29 @@ public class AnnotationLabels extends JPanel implements MouseListener,
         repaint();\r
     }\r
 \r
+    void getSelectedRow(int y)\r
+    {\r
+      int height = 0;\r
+      AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
+\r
+      for (int i = 0; i < aa.length; i++)\r
+      {\r
+        if (!aa[i].visible)\r
+        {\r
+          continue;\r
+        }\r
+\r
+        height += aa[i].height;\r
+\r
+        if (y < height)\r
+        {\r
+          selectedRow = i;\r
+\r
+          break;\r
+        }\r
+      }\r
+    }\r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r
@@ -195,6 +218,7 @@ public class AnnotationLabels extends JPanel implements MouseListener,
      */\r
     public void mousePressed(MouseEvent evt)\r
     {\r
+        getSelectedRow(evt.getY() - scrollOffset);\r
         oldY = evt.getY();\r
     }\r
 \r
@@ -205,8 +229,25 @@ public class AnnotationLabels extends JPanel implements MouseListener,
      */\r
     public void mouseReleased(MouseEvent evt)\r
     {\r
-        active = false;\r
+        int start = selectedRow;\r
+        getSelectedRow(evt.getY());\r
+        int end = selectedRow;\r
+\r
+        if(start!=end)\r
+        {\r
+          //Swap these annotations\r
+          AlignmentAnnotation startAA = ap.av.alignment.getAlignmentAnnotation()[start];\r
+          AlignmentAnnotation endAA = ap.av.alignment.getAlignmentAnnotation()[end];\r
+\r
+\r
+          ap.av.alignment.getAlignmentAnnotation()[end] = startAA;\r
+          ap.av.alignment.getAlignmentAnnotation()[start] = endAA;\r
+        }\r
+\r
+        resizePanel = false;\r
+        dragEvent = null;\r
         repaint();\r
+        ap.annotationPanel.repaint();\r
     }\r
 \r
     /**\r
@@ -216,8 +257,11 @@ public class AnnotationLabels extends JPanel implements MouseListener,
      */\r
     public void mouseEntered(MouseEvent evt)\r
     {\r
-        active = true;\r
+      if(evt.getY()<10)\r
+      {\r
+        resizePanel = true;\r
         repaint();\r
+      }\r
     }\r
 \r
     /**\r
@@ -226,10 +270,7 @@ public class AnnotationLabels extends JPanel implements MouseListener,
      * @param evt DOCUMENT ME!\r
      */\r
     public void mouseExited(MouseEvent evt)\r
-    {\r
-        active = false;\r
-        repaint();\r
-    }\r
+    {       }\r
 \r
     /**\r
      * DOCUMENT ME!\r
@@ -238,25 +279,30 @@ public class AnnotationLabels extends JPanel implements MouseListener,
      */\r
     public void mouseDragged(MouseEvent evt)\r
     {\r
-        active = true;\r
+      dragEvent = evt;\r
 \r
+      if (resizePanel)\r
+      {\r
         Dimension d = ap.annotationScroller.getPreferredSize();\r
         int dif = evt.getY() - oldY;\r
 \r
         dif /= ap.av.charHeight;\r
         dif *= ap.av.charHeight;\r
 \r
-        if ((d.height - dif) > 20)\r
+        if ( (d.height - dif) > 20)\r
         {\r
-            ap.annotationScroller.setPreferredSize(new Dimension(d.width,\r
-                    d.height - dif));\r
-            d = ap.annotationSpaceFillerHolder.getPreferredSize();\r
-            ap.annotationSpaceFillerHolder.setPreferredSize(new Dimension(\r
-                    d.width, d.height - dif));\r
-            ap.repaint();\r
+          ap.annotationScroller.setPreferredSize(new Dimension(d.width,\r
+              d.height - dif));\r
+          d = ap.annotationSpaceFillerHolder.getPreferredSize();\r
+          ap.annotationSpaceFillerHolder.setPreferredSize(new Dimension(\r
+              d.width, d.height - dif));\r
+          ap.repaint();\r
         }\r
 \r
         ap.addNotify();\r
+      }\r
+      else\r
+        repaint();\r
     }\r
 \r
     /**\r
@@ -266,6 +312,9 @@ public class AnnotationLabels extends JPanel implements MouseListener,
      */\r
     public void mouseMoved(MouseEvent evt)\r
     {\r
+      resizePanel = evt.getY()<10;\r
+\r
+      repaint();\r
     }\r
 \r
     /**\r
@@ -275,7 +324,9 @@ public class AnnotationLabels extends JPanel implements MouseListener,
      */\r
     public void mouseClicked(MouseEvent evt)\r
     {\r
-        int y = evt.getY() - scrollOffset;\r
+       if(!SwingUtilities.isRightMouseButton(evt))\r
+         return;\r
+\r
         AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
 \r
         if ((aa == null) || (aa.length == 0))\r
@@ -289,24 +340,6 @@ public class AnnotationLabels extends JPanel implements MouseListener,
             return;\r
         }\r
 \r
-        int height = 0;\r
-\r
-        for (int i = 0; i < aa.length; i++)\r
-        {\r
-            if (!aa[i].visible)\r
-            {\r
-                continue;\r
-            }\r
-\r
-            height += aa[i].height;\r
-\r
-            if (y < height)\r
-            {\r
-                selectedRow = i;\r
-\r
-                break;\r
-            }\r
-        }\r
 \r
         JPopupMenu pop = new JPopupMenu("Annotations");\r
         JMenuItem item = new JMenuItem(ADDNEW);\r
@@ -480,14 +513,17 @@ public class AnnotationLabels extends JPanel implements MouseListener,
             }\r
         }\r
 \r
-        if (active)\r
+        if (resizePanel)\r
         {\r
-            if (image != null)\r
-            {\r
-                g.drawImage(image, 2, 0 - scrollOffset, this);\r
-            }\r
+          g.drawImage(image, 2, 0 - scrollOffset, this);\r
+        }\r
+        else if (dragEvent != null)\r
+        {\r
+          g.setColor(Color.lightGray);\r
+          g.drawString(aa[selectedRow].label, dragEvent.getX(), dragEvent.getY());\r
         }\r
 \r
+\r
         if ((aa == null) || (aa.length < 1))\r
         {\r
             g.drawString("Right click", 2, 8);\r