ColumnSelection moved to datamodel
[jalview.git] / src / jalview / gui / IdCanvas.java
index a05c6c0..7734f9a 100755 (executable)
@@ -65,8 +65,7 @@ public class IdCanvas extends JPanel
      * @param starty DOCUMENT ME!\r
      * @param ypos DOCUMENT ME!\r
      */\r
-    public void drawIdString(Graphics2D gg, SequenceI s, int i, int starty,\r
-        int ypos)\r
+    public void drawIdString(Graphics2D gg, SequenceI s, int i, int starty, int ypos)\r
     {\r
         int charHeight = av.charHeight;\r
 \r
@@ -96,6 +95,11 @@ public class IdCanvas extends JPanel
 \r
         gg.drawString( s.getDisplayId(av.getShowJVSuffix()),\r
                       0, (((i - starty + 1) * charHeight) + ypos) - (charHeight / 5));\r
+\r
+        if (av.hasHiddenRows && av.showHiddenMarkers)\r
+          drawMarker(i, starty, ypos);\r
+\r
+\r
     }\r
 \r
     /**\r
@@ -169,6 +173,8 @@ public class IdCanvas extends JPanel
             return;\r
         }\r
 \r
+        int oldHeight = imgHeight;\r
+\r
         imgHeight = getHeight();\r
         imgHeight -= (imgHeight % av.charHeight);\r
 \r
@@ -177,15 +183,17 @@ public class IdCanvas extends JPanel
             return;\r
         }\r
 \r
-        image = new BufferedImage(getWidth(), imgHeight,\r
-                BufferedImage.TYPE_INT_RGB);\r
-        gg = (Graphics2D) image.getGraphics();\r
+        if(oldHeight!=imgHeight)\r
+        {\r
+          image = new BufferedImage(getWidth(), imgHeight,\r
+                                    BufferedImage.TYPE_INT_RGB);\r
+        }\r
 \r
+        gg = (Graphics2D) image.getGraphics();\r
         //Fill in the background\r
         gg.setColor(Color.white);\r
         gg.fillRect(0, 0, getWidth(), imgHeight);\r
 \r
-\r
         drawIds(av.getStartSeq(), av.endSeq);\r
 \r
         g.drawImage(image, 0, 0, this);\r
@@ -249,7 +257,7 @@ public class IdCanvas extends JPanel
               {\r
                 if (av.hasHiddenRows)\r
                 {\r
-                  setHiddenFont(i, starty);\r
+                  setHiddenFont(i);\r
                 }\r
                 else\r
                   gg.setFont(italic);\r
@@ -264,16 +272,20 @@ public class IdCanvas extends JPanel
                   labels.drawComponent(gg, getWidth());\r
                   gg.translate(0, -ypos-(alheight * av.charHeight));\r
                 }\r
+\r
+\r
             }\r
         }\r
         else\r
         {\r
+          //Now draw the id strings\r
+\r
             //Now draw the id strings\r
             for (int i = starty; i < endy; i++)\r
             {\r
               if (av.hasHiddenRows)\r
               {\r
-                setHiddenFont(i, starty);\r
+                setHiddenFont(i);\r
               }\r
 \r
                 // Selected sequence colours\r
@@ -308,32 +320,60 @@ public class IdCanvas extends JPanel
                 gg.drawString(string, 0,\r
                     (((i - starty) * av.charHeight) + av.charHeight) -\r
                     (av.charHeight / 5));\r
+\r
+               if(av.hasHiddenRows && av.showHiddenMarkers)\r
+                 drawMarker(i, starty, 0);\r
+\r
             }\r
 \r
         }\r
     }\r
 \r
-    void setHiddenFont(int i, int starty)\r
+    void drawMarker(int i, int starty, int yoffset)\r
     {\r
-      Font italic = new Font(av.getFont().getName(), Font.ITALIC,\r
-                             av.getFont().getSize());\r
-      Font bold = new Font(av.getFont().getName(), Font.BOLD,\r
-                           av.getFont().getSize());\r
+      int hiddenIndex = av.adjustForHiddenSeqs(i);\r
+      int lastIndex = av.adjustForHiddenSeqs(i - 1);\r
+      int nextIndex = av.adjustForHiddenSeqs(i + 1);\r
 \r
-      int tmp, hiddenIndex = starty;\r
-      tmp = av.adjustForHiddenSeqs(i);\r
+      boolean below = (hiddenIndex > lastIndex + 1);\r
+      boolean above = (nextIndex>hiddenIndex+1);\r
 \r
-      if (av.adjustForHiddenSeqs(i - 1) == tmp - 1)\r
-      {\r
-        hiddenIndex = tmp;\r
-      }\r
+        gg.setColor(Color.blue);\r
+        if(below)\r
+        {\r
+          gg.fillPolygon(new int[]\r
+                         {getWidth()- av.charHeight,\r
+                         getWidth()- av.charHeight,\r
+                         getWidth()},\r
+                         new int[]\r
+                         {\r
+                         (i - starty) * av.charHeight +yoffset,\r
+                         (i - starty) * av.charHeight +yoffset+ av.charHeight / 4,\r
+                         (i - starty) * av.charHeight+yoffset\r
+          }, 3);\r
+        }\r
+        if(above)\r
+        {\r
+          gg.fillPolygon(new int[]\r
+                        {getWidth()- av.charHeight,\r
+                        getWidth()- av.charHeight,\r
+                        getWidth() },\r
+                        new int[]\r
+                        {\r
+                        (i - starty+1) * av.charHeight +yoffset,\r
+                        (i - starty+1) * av.charHeight +yoffset- av.charHeight / 4,\r
+                        (i - starty+1) * av.charHeight +yoffset\r
+         }, 3);\r
 \r
-      if (hiddenIndex != tmp)\r
-      {\r
-        hiddenIndex = tmp;\r
-      }\r
+        }\r
+    }\r
 \r
-      hiddenIndex++;\r
+    void setHiddenFont(int i)\r
+    {\r
+      Font italic = new Font(av.getFont().getName(), Font.ITALIC,\r
+                             av.getFont().getSize());\r
+      Font bold = new Font(av.getFont().getName(), Font.BOLD,\r
+                           av.getFont().getSize());\r
 \r
       if (av.alignment.getSequenceAt(i).getHiddenSequences() != null)\r
         gg.setFont(bold);\r