Formatting
[jalview.git] / src / jalview / gui / ScalePanel.java
index 32283ce..ebf25bf 100755 (executable)
@@ -1,6 +1,6 @@
 /*\r
  * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
  *\r
  * This program is free software; you can redistribute it and/or\r
  * modify it under the terms of the GNU General Public License\r
  */\r
 package jalview.gui;\r
 \r
-import jalview.datamodel.*;\r
-\r
 import java.awt.*;\r
 import java.awt.event.*;\r
-\r
 import javax.swing.*;\r
 \r
+import jalview.datamodel.*;\r
 \r
 /**\r
  * DOCUMENT ME!\r
@@ -32,420 +30,451 @@ import javax.swing.*;
  * @author $author$\r
  * @version $Revision$\r
  */\r
-public class ScalePanel extends JPanel implements MouseMotionListener, MouseListener\r
+public class ScalePanel\r
+    extends JPanel implements MouseMotionListener, MouseListener\r
 {\r
-    protected int offy = 4;\r
-\r
-    /** DOCUMENT ME!! */\r
-    public int width;\r
-    protected AlignViewport av;\r
-    AlignmentPanel ap;\r
-    boolean stretchingGroup = false;\r
-    int min; //used by mouseDragged to see if user\r
-    int max; //used by mouseDragged to see if user\r
-    boolean mouseDragging = false;\r
-\r
-    // wants to delete columns\r
-    public ScalePanel(AlignViewport av, AlignmentPanel ap)\r
+  protected int offy = 4;\r
+\r
+  /** DOCUMENT ME!! */\r
+  public int width;\r
+  protected AlignViewport av;\r
+  AlignmentPanel ap;\r
+  boolean stretchingGroup = false;\r
+  int min; //used by mouseDragged to see if user\r
+  int max; //used by mouseDragged to see if user\r
+  boolean mouseDragging = false;\r
+\r
+  // wants to delete columns\r
+  public ScalePanel(AlignViewport av, AlignmentPanel ap)\r
+  {\r
+    this.av = av;\r
+    this.ap = ap;\r
+\r
+    addMouseListener(this);\r
+    addMouseMotionListener(this);\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param evt DOCUMENT ME!\r
+   */\r
+  public void mousePressed(MouseEvent evt)\r
+  {\r
+    int x = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
+    final int res;\r
+\r
+    if (av.hasHiddenColumns)\r
     {\r
-        this.av = av;\r
-        this.ap = ap;\r
-\r
-        addMouseListener(this);\r
-        addMouseMotionListener(this);\r
+      res = av.getColumnSelection().adjustForHiddenColumns(x);\r
     }\r
-\r
-    /**\r
-     * DOCUMENT ME!\r
-     *\r
-     * @param evt DOCUMENT ME!\r
-     */\r
-    public void mousePressed(MouseEvent evt)\r
+    else\r
     {\r
-        int x = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
-        final int res;\r
-\r
-        if(av.hasHiddenColumns)\r
-          res = av.getColumnSelection().adjustForHiddenColumns(x);\r
-        else\r
-          res = x;\r
+      res = x;\r
+    }\r
 \r
-        min = res;\r
-        max = res;\r
+    min = res;\r
+    max = res;\r
 \r
-        if (SwingUtilities.isRightMouseButton(evt))\r
+    if (SwingUtilities.isRightMouseButton(evt))\r
+    {\r
+      JPopupMenu pop = new JPopupMenu();\r
+      if (reveal != null)\r
+      {\r
+        JMenuItem item = new JMenuItem("Reveal");\r
+        item.addActionListener(new ActionListener()\r
         {\r
-          JPopupMenu pop = new JPopupMenu();\r
-          if (reveal != null)\r
+          public void actionPerformed(ActionEvent e)\r
           {\r
-            JMenuItem item = new JMenuItem("Reveal");\r
-            item.addActionListener(new ActionListener()\r
-            {\r
-              public void actionPerformed(ActionEvent e)\r
-              {\r
-                av.showColumn(reveal[0]);\r
-                reveal = null;\r
-                ap.repaint();\r
-                if (ap.overviewPanel != null)\r
-                  ap.overviewPanel.updateOverviewImage();\r
-              }\r
-            });\r
-            pop.add(item);\r
-\r
-            if (av.getColumnSelection().getHiddenColumns().size() > 1)\r
+            av.showColumn(reveal[0]);\r
+            reveal = null;\r
+            ap.repaint();\r
+            if (ap.overviewPanel != null)\r
             {\r
-              item = new JMenuItem("Reveal All");\r
-              item.addActionListener(new ActionListener()\r
-              {\r
-                public void actionPerformed(ActionEvent e)\r
-                {\r
-                  av.showAllHiddenColumns();\r
-                  reveal = null;\r
-                  ap.repaint();\r
-                  if (ap.overviewPanel != null)\r
-                    ap.overviewPanel.updateOverviewImage();\r
-                }\r
-              });\r
-              pop.add(item);\r
+              ap.overviewPanel.updateOverviewImage();\r
             }\r
-            pop.show(this, evt.getX(), evt.getY());\r
           }\r
-          else if (av.getColumnSelection().contains(res))\r
+        });\r
+        pop.add(item);\r
+\r
+        if (av.getColumnSelection().getHiddenColumns().size() > 1)\r
+        {\r
+          item = new JMenuItem("Reveal All");\r
+          item.addActionListener(new ActionListener()\r
           {\r
-            JMenuItem item = new JMenuItem("Hide Columns");\r
-            item.addActionListener(new ActionListener()\r
+            public void actionPerformed(ActionEvent e)\r
             {\r
-              public void actionPerformed(ActionEvent e)\r
+              av.showAllHiddenColumns();\r
+              reveal = null;\r
+              ap.repaint();\r
+              if (ap.overviewPanel != null)\r
               {\r
-                av.hideColumns(res, res);\r
-                if(av.getSelectionGroup()!=null\r
-                   && av.getSelectionGroup().getSize()==av.alignment.getHeight())\r
-                  av.setSelectionGroup(null);\r
-\r
-                ap.repaint();\r
-                if (ap.overviewPanel != null)\r
-                  ap.overviewPanel.updateOverviewImage();\r
+                ap.overviewPanel.updateOverviewImage();\r
               }\r
-            });\r
-            pop.add(item);\r
-            pop.show(this, evt.getX(), evt.getY());\r
-          }\r
+            }\r
+          });\r
+          pop.add(item);\r
         }\r
-        else // LEFT MOUSE TO SELECT\r
+        pop.show(this, evt.getX(), evt.getY());\r
+      }\r
+      else if (av.getColumnSelection().contains(res))\r
+      {\r
+        JMenuItem item = new JMenuItem("Hide Columns");\r
+        item.addActionListener(new ActionListener()\r
         {\r
-          if (!evt.isControlDown() && !evt.isShiftDown())\r
-          {\r
-            av.getColumnSelection().clear();\r
-          }\r
-\r
-          av.getColumnSelection().addElement(res);\r
-          SequenceGroup sg = new SequenceGroup();\r
-          for (int i = 0; i < av.alignment.getSequences().size(); i++)\r
+          public void actionPerformed(ActionEvent e)\r
           {\r
-            sg.addSequence(av.alignment.getSequenceAt(i), false);\r
-          }\r
-\r
-          sg.setStartRes(res);\r
-          sg.setEndRes(res);\r
-          av.setSelectionGroup(sg);\r
+            av.hideColumns(res, res);\r
+            if (av.getSelectionGroup() != null\r
+                && av.getSelectionGroup().getSize() == av.alignment.getHeight())\r
+            {\r
+              av.setSelectionGroup(null);\r
+            }\r
 \r
-          if(evt.isShiftDown())\r
-          {\r
-            int min = Math.min(av.getColumnSelection().getMin(), res);\r
-            int max = Math.max(av.getColumnSelection().getMax(), res);\r
-            for (int i = min; i<max; i++)\r
+            ap.repaint();\r
+            if (ap.overviewPanel != null)\r
             {\r
-                av.getColumnSelection().addElement(i);\r
+              ap.overviewPanel.updateOverviewImage();\r
             }\r
-            sg.setStartRes(min);\r
-            sg.setEndRes(max);\r
           }\r
-\r
-\r
-        }\r
-\r
-\r
-        ap.repaint();\r
+        });\r
+        pop.add(item);\r
+        pop.show(this, evt.getX(), evt.getY());\r
+      }\r
     }\r
-\r
-    /**\r
-     * DOCUMENT ME!\r
-     *\r
-     * @param evt DOCUMENT ME!\r
-     */\r
-    public void mouseReleased(MouseEvent evt)\r
+    else // LEFT MOUSE TO SELECT\r
     {\r
-        mouseDragging = false;\r
+      if (!evt.isControlDown() && !evt.isShiftDown())\r
+      {\r
+        av.getColumnSelection().clear();\r
+      }\r
 \r
-        int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
+      av.getColumnSelection().addElement(res);\r
+      SequenceGroup sg = new SequenceGroup();\r
+      for (int i = 0; i < av.alignment.getSequences().size(); i++)\r
+      {\r
+        sg.addSequence(av.alignment.getSequenceAt(i), false);\r
+      }\r
+\r
+      sg.setStartRes(res);\r
+      sg.setEndRes(res);\r
+      av.setSelectionGroup(sg);\r
 \r
-        if(res> av.alignment.getWidth())\r
+      if (evt.isShiftDown())\r
+      {\r
+        int min = Math.min(av.getColumnSelection().getMin(), res);\r
+        int max = Math.max(av.getColumnSelection().getMax(), res);\r
+        for (int i = min; i < max; i++)\r
         {\r
-          res = av.alignment.getWidth()-1;\r
+          av.getColumnSelection().addElement(i);\r
         }\r
+        sg.setStartRes(min);\r
+        sg.setEndRes(max);\r
+      }\r
 \r
-        if(av.hasHiddenColumns)\r
-          res = av.getColumnSelection().adjustForHiddenColumns(res);\r
+    }\r
 \r
-        if (!stretchingGroup)\r
-        {\r
-            ap.repaint();\r
+    ap.repaint();\r
+  }\r
 \r
-            return;\r
-        }\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param evt DOCUMENT ME!\r
+   */\r
+  public void mouseReleased(MouseEvent evt)\r
+  {\r
+    mouseDragging = false;\r
 \r
-        SequenceGroup sg = av.getSelectionGroup();\r
+    int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
 \r
-        if(sg!=null){\r
-          if (res > sg.getStartRes())\r
-          {\r
-            sg.setEndRes(res);\r
-          }\r
-          else if (res < sg.getStartRes())\r
-          {\r
-            sg.setStartRes(res);\r
-          }\r
-        }\r
-        stretchingGroup = false;\r
-        ap.repaint();\r
+    if (res > av.alignment.getWidth())\r
+    {\r
+      res = av.alignment.getWidth() - 1;\r
     }\r
 \r
-    /**\r
-     * DOCUMENT ME!\r
-     *\r
-     * @param evt DOCUMENT ME!\r
-     */\r
-    public void mouseDragged(MouseEvent evt)\r
+    if (av.hasHiddenColumns)\r
     {\r
-        mouseDragging = true;\r
-\r
-        int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
-        if(res<0)\r
-          res = 0;\r
+      res = av.getColumnSelection().adjustForHiddenColumns(res);\r
+    }\r
 \r
-        if(av.hasHiddenColumns)\r
-          res = av.getColumnSelection().adjustForHiddenColumns(res);\r
+    if (!stretchingGroup)\r
+    {\r
+      ap.repaint();\r
 \r
+      return;\r
+    }\r
 \r
-        if(res> av.alignment.getWidth())\r
-        {\r
-          res = av.alignment.getWidth()-1;\r
-        }\r
+    SequenceGroup sg = av.getSelectionGroup();\r
 \r
-        if (res < min)\r
-        {\r
-            min = res;\r
-        }\r
+    if (sg != null)\r
+    {\r
+      if (res > sg.getStartRes())\r
+      {\r
+        sg.setEndRes(res);\r
+      }\r
+      else if (res < sg.getStartRes())\r
+      {\r
+        sg.setStartRes(res);\r
+      }\r
+    }\r
+    stretchingGroup = false;\r
+    ap.repaint();\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param evt DOCUMENT ME!\r
+   */\r
+  public void mouseDragged(MouseEvent evt)\r
+  {\r
+    mouseDragging = true;\r
+\r
+    int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
+    if (res < 0)\r
+    {\r
+      res = 0;\r
+    }\r
 \r
-        if (res > max)\r
-        {\r
-            max = res;\r
-        }\r
+    if (av.hasHiddenColumns)\r
+    {\r
+      res = av.getColumnSelection().adjustForHiddenColumns(res);\r
+    }\r
 \r
+    if (res > av.alignment.getWidth())\r
+    {\r
+      res = av.alignment.getWidth() - 1;\r
+    }\r
 \r
+    if (res < min)\r
+    {\r
+      min = res;\r
+    }\r
 \r
-        SequenceGroup sg = av.getSelectionGroup();\r
+    if (res > max)\r
+    {\r
+      max = res;\r
+    }\r
 \r
-        if (sg != null)\r
-        {\r
-            stretchingGroup = true;\r
+    SequenceGroup sg = av.getSelectionGroup();\r
 \r
-            if (!av.getColumnSelection().contains(res))\r
-            {\r
-                av.getColumnSelection().addElement(res);\r
-            }\r
+    if (sg != null)\r
+    {\r
+      stretchingGroup = true;\r
 \r
-            if (res > sg.getStartRes())\r
-            {\r
-                sg.setEndRes(res);\r
-            }\r
-            if (res < sg.getStartRes())\r
-            {\r
-                sg.setStartRes(res);\r
-            }\r
+      if (!av.getColumnSelection().contains(res))\r
+      {\r
+        av.getColumnSelection().addElement(res);\r
+      }\r
 \r
-            for (int i = min; i <= max; i++)\r
-            {\r
-                if ((i < sg.getStartRes()) || (i > sg.getEndRes()))\r
-                {\r
-                    av.getColumnSelection().removeElement(i);\r
-                }\r
-                else\r
-                {\r
-                    av.getColumnSelection().addElement(i);\r
-                }\r
-            }\r
+      if (res > sg.getStartRes())\r
+      {\r
+        sg.setEndRes(res);\r
+      }\r
+      if (res < sg.getStartRes())\r
+      {\r
+        sg.setStartRes(res);\r
+      }\r
 \r
-            ap.repaint();\r
+      for (int i = min; i <= max; i++)\r
+      {\r
+        if ( (i < sg.getStartRes()) || (i > sg.getEndRes()))\r
+        {\r
+          av.getColumnSelection().removeElement(i);\r
         }\r
+        else\r
+        {\r
+          av.getColumnSelection().addElement(i);\r
+        }\r
+      }\r
+\r
+      ap.repaint();\r
     }\r
+  }\r
 \r
-    public void mouseEntered(MouseEvent evt)\r
+  public void mouseEntered(MouseEvent evt)\r
+  {\r
+    if (mouseDragging)\r
     {\r
-      if(mouseDragging)\r
-        ap.seqPanel.scrollCanvas(null);\r
+      ap.seqPanel.scrollCanvas(null);\r
     }\r
+  }\r
 \r
-    public void mouseExited(MouseEvent evt)\r
+  public void mouseExited(MouseEvent evt)\r
+  {\r
+    if (mouseDragging)\r
     {\r
-      if(mouseDragging)\r
-        ap.seqPanel.scrollCanvas(evt);\r
+      ap.seqPanel.scrollCanvas(evt);\r
     }\r
+  }\r
 \r
-    public void mouseClicked(MouseEvent evt){}\r
+  public void mouseClicked(MouseEvent evt)\r
+  {}\r
 \r
-    public void mouseMoved(MouseEvent evt)\r
+  public void mouseMoved(MouseEvent evt)\r
+  {\r
+    if (!av.hasHiddenColumns)\r
     {\r
-      if(!av.hasHiddenColumns)\r
-        return;\r
+      return;\r
+    }\r
 \r
-      int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
+    int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();\r
 \r
-      res = av.getColumnSelection().adjustForHiddenColumns(res);\r
+    res = av.getColumnSelection().adjustForHiddenColumns(res);\r
 \r
-      reveal = null;\r
-      for(int i=0; i<av.getColumnSelection().getHiddenColumns().size(); i++)\r
+    reveal = null;\r
+    for (int i = 0; i < av.getColumnSelection().getHiddenColumns().size(); i++)\r
+    {\r
+      int[] region = (int[]) av.getColumnSelection().getHiddenColumns().\r
+          elementAt(i);\r
+      if (res + 1 == region[0] || res - 1 == region[1])\r
       {\r
-        int [] region = (int[])av.getColumnSelection().getHiddenColumns().elementAt(i);\r
-        if(res+1==region[0] || res-1==region[1])\r
-        {\r
-          reveal = region;\r
-          ToolTipManager.sharedInstance().registerComponent(this);\r
-          this.setToolTipText("Reveal Hidden Columns with Right Mouse Button");\r
-          break;\r
-        }\r
-        else\r
-          this.setToolTipText(null);\r
-\r
+        reveal = region;\r
+        ToolTipManager.sharedInstance().registerComponent(this);\r
+        this.setToolTipText("Reveal Hidden Columns with Right Mouse Button");\r
+        break;\r
+      }\r
+      else\r
+      {\r
+        this.setToolTipText(null);\r
       }\r
 \r
-      repaint();\r
     }\r
 \r
-    int [] reveal;\r
-\r
-    /**\r
-     * DOCUMENT ME!\r
-     *\r
-     * @param g DOCUMENT ME!\r
-     */\r
-    public void paintComponent(Graphics g)\r
+    repaint();\r
+  }\r
+\r
+  int[] reveal;\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param g DOCUMENT ME!\r
+   */\r
+  public void paintComponent(Graphics g)\r
+  {\r
+    drawScale(g, av.getStartRes(), av.getEndRes(), getWidth(), getHeight());\r
+  }\r
+\r
+  // scalewidth will normally be screenwidth,\r
+  public void drawScale(Graphics g, int startx, int endx, int width,\r
+                        int height)\r
+  {\r
+    Graphics2D gg = (Graphics2D) g;\r
+    gg.setFont(av.getFont());\r
+\r
+    if (av.antiAlias)\r
     {\r
-        drawScale(g, av.getStartRes(), av.getEndRes(), getWidth(), getHeight());\r
+      gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
+                          RenderingHints.VALUE_ANTIALIAS_ON);\r
     }\r
 \r
-    // scalewidth will normally be screenwidth,\r
-    public void drawScale(Graphics g, int startx, int endx, int width,\r
-        int height)\r
-    {\r
-        Graphics2D gg = (Graphics2D) g;\r
-        gg.setFont(av.getFont());\r
-\r
-        if(av.antiAlias)\r
-          gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
-                              RenderingHints.VALUE_ANTIALIAS_ON);\r
+    //Fill in the background\r
+    gg.setColor(Color.white);\r
+    gg.fillRect(0, 0, width, height);\r
+    gg.setColor(Color.black);\r
 \r
-        //Fill in the background\r
-        gg.setColor(Color.white);\r
-        gg.fillRect(0, 0, width, height);\r
-        gg.setColor(Color.black);\r
+    //Fill the selected columns\r
+    ColumnSelection cs = av.getColumnSelection();\r
+    gg.setColor(new Color(220, 0, 0));\r
 \r
-        //Fill the selected columns\r
-        ColumnSelection cs = av.getColumnSelection();\r
-        gg.setColor(new Color(220, 0, 0));\r
-\r
-        for (int i = 0; i < cs.size(); i++)\r
-        {\r
-            int sel = cs.columnAt(i);\r
-            if(av.hasHiddenColumns)\r
-                sel = av.getColumnSelection().findColumnPosition(sel);\r
+    for (int i = 0; i < cs.size(); i++)\r
+    {\r
+      int sel = cs.columnAt(i);\r
+      if (av.hasHiddenColumns)\r
+      {\r
+        sel = av.getColumnSelection().findColumnPosition(sel);\r
+      }\r
 \r
-            if ((sel >= startx) && (sel <= endx))\r
-            {\r
-                gg.fillRect((sel - startx) * av.charWidth, 0, av.charWidth,\r
+      if ( (sel >= startx) && (sel <= endx))\r
+      {\r
+        gg.fillRect( (sel - startx) * av.charWidth, 0, av.charWidth,\r
                     getHeight());\r
-            }\r
-        }\r
+      }\r
+    }\r
 \r
-        // Draw the scale numbers\r
-        gg.setColor(Color.black);\r
+    // Draw the scale numbers\r
+    gg.setColor(Color.black);\r
 \r
-        int scalestartx = (startx / 10) * 10;\r
+    int scalestartx = (startx / 10) * 10;\r
 \r
-        FontMetrics fm = gg.getFontMetrics(av.getFont());\r
-        int y = av.charHeight - fm.getDescent();\r
+    FontMetrics fm = gg.getFontMetrics(av.getFont());\r
+    int y = av.charHeight - fm.getDescent();\r
 \r
-        if ((scalestartx % 10) == 0)\r
-        {\r
-            scalestartx += 5;\r
-        }\r
+    if ( (scalestartx % 10) == 0)\r
+    {\r
+      scalestartx += 5;\r
+    }\r
 \r
-        String string;\r
-        int maxX=0;\r
+    String string;\r
+    int maxX = 0;\r
 \r
-        for (int i = scalestartx; i < endx; i += 5)\r
+    for (int i = scalestartx; i < endx; i += 5)\r
+    {\r
+      if ( (i % 10) == 0)\r
+      {\r
+        string = String.valueOf(av.getColumnSelection().adjustForHiddenColumns(\r
+            i));\r
+        if ( (i - startx - 1) * av.charWidth > maxX)\r
         {\r
-            if ((i % 10) == 0)\r
-            {\r
-                string = String.valueOf(av.getColumnSelection().adjustForHiddenColumns(i));\r
-                if ( (i - startx - 1) * av.charWidth > maxX)\r
-                {\r
-                  gg.drawString(string,\r
-                                (i - startx - 1) * av.charWidth, y);\r
-                  maxX = (i - startx + 1) * av.charWidth + fm.stringWidth(string);\r
-                }\r
-\r
-                gg.drawLine( (int) ( ( (i - startx - 1) * av.charWidth) +\r
-                                    (av.charWidth / 2)), y + 2,\r
-                            (int) ( ( (i - startx - 1) * av.charWidth) +\r
-                                   (av.charWidth / 2)),\r
-                            y + (fm.getDescent() * 2));\r
-\r
-            }\r
-            else\r
-            {\r
-                gg.drawLine((int) (((i - startx - 1) * av.charWidth) +\r
-                    (av.charWidth / 2)), y + fm.getDescent(),\r
-                    (int) (((i - startx - 1) * av.charWidth) +\r
-                    (av.charWidth / 2)), y + (fm.getDescent() * 2));\r
-            }\r
+          gg.drawString(string,\r
+                        (i - startx - 1) * av.charWidth, y);\r
+          maxX = (i - startx + 1) * av.charWidth + fm.stringWidth(string);\r
         }\r
 \r
-        if (av.hasHiddenColumns)\r
-        {\r
-          gg.setColor(Color.blue);\r
-          int res;\r
-          if(av.getShowHiddenMarkers())\r
-          {\r
-            for (int i = 0; i < av.getColumnSelection().getHiddenColumns().size();\r
-                 i++)\r
-            {\r
+        gg.drawLine( (int) ( ( (i - startx - 1) * av.charWidth) +\r
+                            (av.charWidth / 2)), y + 2,\r
+                    (int) ( ( (i - startx - 1) * av.charWidth) +\r
+                           (av.charWidth / 2)),\r
+                    y + (fm.getDescent() * 2));\r
 \r
-              res = av.getColumnSelection().findHiddenRegionPosition(i) -\r
-                  startx;\r
-\r
-              if(res < 0 || res > endx-scalestartx)\r
-                continue;\r
+      }\r
+      else\r
+      {\r
+        gg.drawLine( (int) ( ( (i - startx - 1) * av.charWidth) +\r
+                            (av.charWidth / 2)), y + fm.getDescent(),\r
+                    (int) ( ( (i - startx - 1) * av.charWidth) +\r
+                           (av.charWidth / 2)), y + (fm.getDescent() * 2));\r
+      }\r
+    }\r
 \r
-              gg.fillPolygon(new int[]\r
-                             {res * av.charWidth - av.charHeight / 4,\r
-                             res * av.charWidth + av.charHeight / 4,\r
-                             res * av.charWidth},\r
-                             new int[]\r
-                             {\r
-                             y - av.charHeight / 2, y - av.charHeight / 2,\r
-                             y + 8\r
-              }, 3);\r
+    if (av.hasHiddenColumns)\r
+    {\r
+      gg.setColor(Color.blue);\r
+      int res;\r
+      if (av.getShowHiddenMarkers())\r
+      {\r
+        for (int i = 0; i < av.getColumnSelection().getHiddenColumns().size();\r
+             i++)\r
+        {\r
 \r
-            }\r
-          }\r
+          res = av.getColumnSelection().findHiddenRegionPosition(i) -\r
+              startx;\r
 \r
-          if (reveal != null && reveal[0] > startx && reveal[0] < endx)\r
+          if (res < 0 || res > endx - scalestartx)\r
           {\r
-            gg.drawString("Reveal Columns", reveal[0] * av.charWidth, 0);\r
+            continue;\r
           }\r
-        }\r
 \r
+          gg.fillPolygon(new int[]\r
+                         {res * av.charWidth - av.charHeight / 4,\r
+                         res * av.charWidth + av.charHeight / 4,\r
+                         res * av.charWidth},\r
+                         new int[]\r
+                         {\r
+                         y - av.charHeight / 2, y - av.charHeight / 2,\r
+                         y + 8\r
+          }, 3);\r
+\r
+        }\r
+      }\r
 \r
+      if (reveal != null && reveal[0] > startx && reveal[0] < endx)\r
+      {\r
+        gg.drawString("Reveal Columns", reveal[0] * av.charWidth, 0);\r
+      }\r
     }\r
+\r
+  }\r
 }\r