mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/gdm/GDMExpHeader.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2003, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4 */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6 * $RCSfile: GDMExpHeader.java,v $
2 26 Feb 07 jari 7 * $Revision: 1.6 $
2 26 Feb 07 jari 8 * $Date: 2005/03/10 20:22:01 $
2 26 Feb 07 jari 9 * $Author: braistedj $
2 26 Feb 07 jari 10 * $State: Exp $
2 26 Feb 07 jari 11 */
2 26 Feb 07 jari 12 package org.tigr.microarray.mev.cluster.gui.impl.gdm;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.BorderLayout;
2 26 Feb 07 jari 15 import java.awt.Color;
2 26 Feb 07 jari 16 import java.awt.Dimension;
2 26 Feb 07 jari 17 import java.awt.Font;
2 26 Feb 07 jari 18 import java.awt.FontMetrics;
2 26 Feb 07 jari 19 import java.awt.Graphics;
2 26 Feb 07 jari 20 import java.awt.Graphics2D;
2 26 Feb 07 jari 21 import java.awt.Insets;
2 26 Feb 07 jari 22 import java.awt.Rectangle;
2 26 Feb 07 jari 23 import java.awt.RenderingHints;
2 26 Feb 07 jari 24 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 25 import java.awt.event.ActionListener;
2 26 Feb 07 jari 26 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 27 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 28 import java.awt.event.MouseMotionListener;
2 26 Feb 07 jari 29 import java.awt.image.BufferedImage;
2 26 Feb 07 jari 30 import java.text.DecimalFormat;
2 26 Feb 07 jari 31
2 26 Feb 07 jari 32 import javax.swing.JPanel;
2 26 Feb 07 jari 33 import javax.swing.JScrollBar;
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 37
2 26 Feb 07 jari 38 public class GDMExpHeader extends JPanel {
2 26 Feb 07 jari 39
2 26 Feb 07 jari 40     private static final String GDM_VECTOR_STRING = "GDM Vector";
2 26 Feb 07 jari 41
2 26 Feb 07 jari 42     private int [] indices;
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44     private int labelIndex;
2 26 Feb 07 jari 45     private Insets insets;
2 26 Feb 07 jari 46     private int num_experiments;
2 26 Feb 07 jari 47     private boolean showClusters = true;
2 26 Feb 07 jari 48     private boolean hasColorBar = false;
2 26 Feb 07 jari 49     private boolean isColumnHeader;
2 26 Feb 07 jari 50
2 26 Feb 07 jari 51     private IData expData;
2 26 Feb 07 jari 52     private int contentWidth;
2 26 Feb 07 jari 53     private int contentHeight;
2 26 Feb 07 jari 54     private int elementWidth;
2 26 Feb 07 jari 55     private int elementHeight;
2 26 Feb 07 jari 56     private int tracespace;
2 26 Feb 07 jari 57     private int maxExpNameLength;
2 26 Feb 07 jari 58     private Experiment experiment;
2 26 Feb 07 jari 59
2 26 Feb 07 jari 60     private boolean isAntiAliasing = false;
2 26 Feb 07 jari 61     private boolean isTracing = true;
2 26 Feb 07 jari 62
2 26 Feb 07 jari 63     private final int OFFSET = 2;
2 26 Feb 07 jari 64     private int annotationSize = 100;
2 26 Feb 07 jari 65     private final int MIN_LABEL_PANEL_SIZE = 1;
2 26 Feb 07 jari 66     private final int MAX_LABEL_PANEL_SIZE = 200;
2 26 Feb 07 jari 67     private static final int NOT_UPDATE_ANNOTATION_SIZE = -1;
2 26 Feb 07 jari 68
2 26 Feb 07 jari 69     private GDMExpGradientLabelPanel gdmGradientLabelPanel;
2 26 Feb 07 jari 70     private GDMColorBarPanel gdmColorBarPanel;
2 26 Feb 07 jari 71
2 26 Feb 07 jari 72     private float minValue = 0.0f;
2 26 Feb 07 jari 73     private float maxValue = 1.0f;
2 26 Feb 07 jari 74
2 26 Feb 07 jari 75     private final int RECT_HEIGHT = 10;
2 26 Feb 07 jari 76     private final int RECT_WIDTH = 200; 
2 26 Feb 07 jari 77     private int maxColorScaleTextWidth = 0;
2 26 Feb 07 jari 78     private int maxColorScaleTextHeight = 0;
2 26 Feb 07 jari 79
2 26 Feb 07 jari 80     private int probes;
2 26 Feb 07 jari 81
2 26 Feb 07 jari 82     private int headerWidth;
2 26 Feb 07 jari 83     private int headerHeight;
2 26 Feb 07 jari 84
2 26 Feb 07 jari 85     private int gradientPanelWidth;
2 26 Feb 07 jari 86     private int gradientPanelHeight;
2 26 Feb 07 jari 87
2 26 Feb 07 jari 88     private int labelPanelWidth;
2 26 Feb 07 jari 89     private int labelPanelHeight;
2 26 Feb 07 jari 90
2 26 Feb 07 jari 91     private int colorBarWidth;
2 26 Feb 07 jari 92     private int colorBarHeight;
2 26 Feb 07 jari 93     
2 26 Feb 07 jari 94     private DecimalFormat decFormat;
2 26 Feb 07 jari 95     private boolean sortByProximity = true;
2 26 Feb 07 jari 96     private ActionListener matrixListener;
2 26 Feb 07 jari 97     private int currentIndex = 0;
2 26 Feb 07 jari 98     
2 26 Feb 07 jari 99
2 26 Feb 07 jari 100     /**
2 26 Feb 07 jari 101      * Constructs a <code>MultipleArrayHeader</code> with specified
2 26 Feb 07 jari 102      * insets and trace space.
2 26 Feb 07 jari 103      */
2 26 Feb 07 jari 104     public GDMExpHeader(Insets insets, int tracespace, boolean colHdr, Experiment experiment,
2 26 Feb 07 jari 105   int width, int height, Dimension eSize, int maxExpLen, int num_experiments, 
2 26 Feb 07 jari 106   int [] indexes) {
2 26 Feb 07 jari 107
2 26 Feb 07 jari 108         this.setLayout(new BorderLayout());
2 26 Feb 07 jari 109
2 26 Feb 07 jari 110   this.insets = new Insets(0, 0, 0, 0);
2 26 Feb 07 jari 111
2 26 Feb 07 jari 112   this.indices = indexes;
2 26 Feb 07 jari 113   this.insets.left = insets.left;
2 26 Feb 07 jari 114   this.insets.right = insets.right;
2 26 Feb 07 jari 115   this.insets.top = insets.top;
2 26 Feb 07 jari 116   this.insets.bottom = insets.bottom;
2 26 Feb 07 jari 117
2 26 Feb 07 jari 118   this.tracespace = tracespace;
2 26 Feb 07 jari 119   this.experiment = experiment;
2 26 Feb 07 jari 120   this.elementWidth = eSize.width;
2 26 Feb 07 jari 121   this.elementHeight = eSize.height;
2 26 Feb 07 jari 122   this.isColumnHeader = colHdr;
2 26 Feb 07 jari 123   this.contentWidth = width;
2 26 Feb 07 jari 124   this.contentHeight = height;
2 26 Feb 07 jari 125   this.probes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 126         this.num_experiments = num_experiments;
2 26 Feb 07 jari 127   this.maxExpNameLength = maxExpLen * elementWidth;
2 26 Feb 07 jari 128
2 26 Feb 07 jari 129         gdmGradientLabelPanel = new GDMExpGradientLabelPanel(insets, tracespace, colHdr,
2 26 Feb 07 jari 130         width, height, eSize, maxExpLen, num_experiments, indices);
2 26 Feb 07 jari 131
2 26 Feb 07 jari 132         gdmColorBarPanel = new GDMColorBarPanel();
2 26 Feb 07 jari 133
2 26 Feb 07 jari 134         setFontSize(elementWidth);
2 26 Feb 07 jari 135
2 26 Feb 07 jari 136         if (isColumnHeader == true) {
2 26 Feb 07 jari 137             add(gdmGradientLabelPanel, BorderLayout.NORTH);            
2 26 Feb 07 jari 138             if(hasColorBar)
2 26 Feb 07 jari 139                 add(gdmColorBarPanel, BorderLayout.CENTER);
2 26 Feb 07 jari 140         } else {
2 26 Feb 07 jari 141             add(gdmGradientLabelPanel, BorderLayout.WEST);
2 26 Feb 07 jari 142             if(hasColorBar)
2 26 Feb 07 jari 143                 add(gdmColorBarPanel, BorderLayout.CENTER);
2 26 Feb 07 jari 144         }
2 26 Feb 07 jari 145         
2 26 Feb 07 jari 146         decFormat = new DecimalFormat();
2 26 Feb 07 jari 147         decFormat.setMaximumFractionDigits(3);
2 26 Feb 07 jari 148         decFormat.setMinimumFractionDigits(1);
2 26 Feb 07 jari 149
2 26 Feb 07 jari 150   Listener listener = new Listener();
2 26 Feb 07 jari 151         gdmGradientLabelPanel.getLabelPanel().addMouseListener(listener);
2 26 Feb 07 jari 152         gdmGradientLabelPanel.getLabelPanel().addMouseMotionListener(listener);
2 26 Feb 07 jari 153         
2 26 Feb 07 jari 154   setBackground(Color.white);
2 26 Feb 07 jari 155   setOpaque(true);
2 26 Feb 07 jari 156     }
2 26 Feb 07 jari 157
2 26 Feb 07 jari 158
2 26 Feb 07 jari 159     private class Listener extends MouseAdapter implements ActionListener, MouseMotionListener{
2 26 Feb 07 jari 160   public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 161       String command = e.getActionCommand();
2 26 Feb 07 jari 162   }
2 26 Feb 07 jari 163         
2 26 Feb 07 jari 164         public void mouseClicked(MouseEvent evt){
2 26 Feb 07 jari 165             if(sortByProximity){
2 26 Feb 07 jari 166                 int loc = 0;
2 26 Feb 07 jari 167                 if(GDMExpHeader.this.isColumnHeader)
2 26 Feb 07 jari 168                     loc = evt.getX();
2 26 Feb 07 jari 169                 else
2 26 Feb 07 jari 170                     loc = evt.getY();
2 26 Feb 07 jari 171                 int index = (int)((loc - insets.left)/elementWidth);
2 26 Feb 07 jari 172                 fireGDMSortEvent(indices[index]);
2 26 Feb 07 jari 173             }
2 26 Feb 07 jari 174         }
2 26 Feb 07 jari 175         
2 26 Feb 07 jari 176         public void mouseMoved(MouseEvent event) {
2 26 Feb 07 jari 177             if(sortByProximity){
2 26 Feb 07 jari 178                 Graphics2D g2D = (Graphics2D)gdmGradientLabelPanel.getLabelPanelGraphics();
2 26 Feb 07 jari 179                 if(g2D == null)
2 26 Feb 07 jari 180                     return;
2 26 Feb 07 jari 181                 
2 26 Feb 07 jari 182                 int x = event.getX();
2 26 Feb 07 jari 183                 int y = event.getY();
2 26 Feb 07 jari 184                 int elementIndex;
2 26 Feb 07 jari 185                 if(isColumnHeader){
2 26 Feb 07 jari 186                     elementIndex = x/elementWidth;
2 26 Feb 07 jari 187                     if(elementIndex >= num_experiments){
2 26 Feb 07 jari 188                       repaint();
2 26 Feb 07 jari 189                       return;
2 26 Feb 07 jari 190                     }
2 26 Feb 07 jari 191                     if(elementIndex != currentIndex){
2 26 Feb 07 jari 192                         g2D.setColor(Color.white);
2 26 Feb 07 jari 193                         g2D.drawRect(currentIndex*elementWidth, 0, elementWidth, gdmGradientLabelPanel.getLabelPanel().getHeight()-1);
2 26 Feb 07 jari 194                     }
2 26 Feb 07 jari 195                     g2D.setColor(Color.blue);
2 26 Feb 07 jari 196                     g2D.drawRect(elementIndex*elementWidth, 0, elementWidth, gdmGradientLabelPanel.getLabelPanel().getHeight()-1);
2 26 Feb 07 jari 197                 } else {
2 26 Feb 07 jari 198                     elementIndex = y/elementWidth;
2 26 Feb 07 jari 199                     if(elementIndex >= num_experiments){
2 26 Feb 07 jari 200                         repaint();
2 26 Feb 07 jari 201                         return;
2 26 Feb 07 jari 202                     }
2 26 Feb 07 jari 203                     if(elementIndex != currentIndex){
2 26 Feb 07 jari 204                         g2D.setColor(Color.white);
2 26 Feb 07 jari 205                         g2D.drawRect( 0, currentIndex*elementWidth, gdmGradientLabelPanel.getLabelPanel().getWidth()-1, elementHeight);
2 26 Feb 07 jari 206                     }
2 26 Feb 07 jari 207                     g2D.setColor(Color.blue);
2 26 Feb 07 jari 208                     g2D.drawRect(0, elementIndex*elementWidth, gdmGradientLabelPanel.getLabelPanel().getWidth()-1, elementHeight);
2 26 Feb 07 jari 209                 }               
2 26 Feb 07 jari 210                 currentIndex = elementIndex;
2 26 Feb 07 jari 211             }
2 26 Feb 07 jari 212         }
2 26 Feb 07 jari 213             
2 26 Feb 07 jari 214         public void mouseExited(MouseEvent event) {
2 26 Feb 07 jari 215             repaint();
2 26 Feb 07 jari 216         }            
2 26 Feb 07 jari 217             
2 26 Feb 07 jari 218         public void mouseDragged(java.awt.event.MouseEvent mouseEvent) {
2 26 Feb 07 jari 219         }
2 26 Feb 07 jari 220         
2 26 Feb 07 jari 221     }
2 26 Feb 07 jari 222
2 26 Feb 07 jari 223     /**
2 26 Feb 07 jari 224      * Sets the label index
2 26 Feb 07 jari 225      */
2 26 Feb 07 jari 226     public void setLabelIndex(int label) {
2 26 Feb 07 jari 227   this.labelIndex = label;
2 26 Feb 07 jari 228   this.gdmGradientLabelPanel.setLabelIndex(label);
2 26 Feb 07 jari 229     }
2 26 Feb 07 jari 230
2 26 Feb 07 jari 231     /**
2 26 Feb 07 jari 232      *  GDMExpHeader: updateSize.
2 26 Feb 07 jari 233      */    
2 26 Feb 07 jari 234     public void updateSize(int size) {
2 26 Feb 07 jari 235
2 26 Feb 07 jari 236         int expNameLength; 
2 26 Feb 07 jari 237   updateMaxExpNameLength();
2 26 Feb 07 jari 238         expNameLength = getMaxExpNameLength();
2 26 Feb 07 jari 239
2 26 Feb 07 jari 240         int maxTextSize;
2 26 Feb 07 jari 241
2 26 Feb 07 jari 242         if (size == NOT_UPDATE_ANNOTATION_SIZE) {
2 26 Feb 07 jari 243       if (expNameLength < MIN_LABEL_PANEL_SIZE) {
2 26 Feb 07 jari 244     setAnnotationSize(MIN_LABEL_PANEL_SIZE);
2 26 Feb 07 jari 245       } else if (expNameLength > MAX_LABEL_PANEL_SIZE) {
2 26 Feb 07 jari 246     setAnnotationSize(MAX_LABEL_PANEL_SIZE);
2 26 Feb 07 jari 247       } else {
2 26 Feb 07 jari 248     setAnnotationSize(expNameLength);
2 26 Feb 07 jari 249       }
2 26 Feb 07 jari 250         } else {
2 26 Feb 07 jari 251             setAnnotationSize(size);
2 26 Feb 07 jari 252         }
2 26 Feb 07 jari 253         
2 26 Feb 07 jari 254         boolean tempBool = false;
2 26 Feb 07 jari 255         if(showClusters) {
2 26 Feb 07 jari 256       tempBool = areExperimentsColored();
2 26 Feb 07 jari 257             if(tempBool && !hasColorBar){
2 26 Feb 07 jari 258                 this.add(gdmColorBarPanel, BorderLayout.CENTER);
2 26 Feb 07 jari 259                 this.validate();
2 26 Feb 07 jari 260             } else if(!tempBool && hasColorBar){
2 26 Feb 07 jari 261                 this.remove(gdmColorBarPanel);
2 26 Feb 07 jari 262                 this.validate();
2 26 Feb 07 jari 263             }
2 26 Feb 07 jari 264             hasColorBar = tempBool;
2 26 Feb 07 jari 265         }
2 26 Feb 07 jari 266   else {
2 26 Feb 07 jari 267       hasColorBar = false;
2 26 Feb 07 jari 268   }        
2 26 Feb 07 jari 269
2 26 Feb 07 jari 270   if (isColumnHeader == true) {
2 26 Feb 07 jari 271
2 26 Feb 07 jari 272       headerWidth = contentWidth + (int) (elementWidth/2);
2 26 Feb 07 jari 273       gradientPanelWidth = headerWidth;
2 26 Feb 07 jari 274       labelPanelWidth = headerWidth;
2 26 Feb 07 jari 275       colorBarWidth = headerWidth;
2 26 Feb 07 jari 276       colorBarHeight = 0;
2 26 Feb 07 jari 277
2 26 Feb 07 jari 278         } else {
2 26 Feb 07 jari 279
2 26 Feb 07 jari 280           headerHeight = contentHeight + (int) (elementHeight/2);
2 26 Feb 07 jari 281       gradientPanelHeight = headerHeight;
2 26 Feb 07 jari 282       labelPanelHeight = headerHeight;
2 26 Feb 07 jari 283       colorBarWidth = 0;
2 26 Feb 07 jari 284       colorBarHeight = headerHeight;
2 26 Feb 07 jari 285   } 
2 26 Feb 07 jari 286
2 26 Feb 07 jari 287   Graphics2D g = (Graphics2D)getColorScaleGraphics();
2 26 Feb 07 jari 288   FontMetrics hfm;
2 26 Feb 07 jari 289
2 26 Feb 07 jari 290   if (g != null) {
2 26 Feb 07 jari 291       hfm = g.getFontMetrics();
2 26 Feb 07 jari 292       maxColorScaleTextHeight = hfm.getHeight();
2 26 Feb 07 jari 293       
2 26 Feb 07 jari 294       float midValue = (minValue + maxValue)/2f;
2 26 Feb 07 jari 295             String minString = decFormat.format(minValue);
2 26 Feb 07 jari 296             String maxString = decFormat.format(maxValue);
2 26 Feb 07 jari 297             String midString = decFormat.format(midValue);
2 26 Feb 07 jari 298             
2 26 Feb 07 jari 299       //midValue = (float) (new BigDecimal(midValue).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
2 26 Feb 07 jari 300       //minValue = (float) (new BigDecimal(minValue).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
2 26 Feb 07 jari 301       //maxValue = (float) (new BigDecimal(maxValue).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
2 26 Feb 07 jari 302       int textWidth1 = hfm.stringWidth(minString);
2 26 Feb 07 jari 303       int textWidth2 = hfm.stringWidth(maxString);
2 26 Feb 07 jari 304       int textWidth3 = hfm.stringWidth(midString);
2 26 Feb 07 jari 305
2 26 Feb 07 jari 306       maxColorScaleTextWidth = Math.max(Math.max(textWidth1, textWidth2), textWidth3);
2 26 Feb 07 jari 307
2 26 Feb 07 jari 308         }
2 26 Feb 07 jari 309
2 26 Feb 07 jari 310         maxTextSize = Math.max(maxColorScaleTextWidth, maxColorScaleTextHeight);
2 26 Feb 07 jari 311
2 26 Feb 07 jari 312   if (isColumnHeader == true) {
2 26 Feb 07 jari 313
2 26 Feb 07 jari 314             gradientPanelHeight = 2*OFFSET + RECT_HEIGHT + maxColorScaleTextHeight;
2 26 Feb 07 jari 315             labelPanelHeight = annotationSize + 10;// + (elementHeight/2);
2 26 Feb 07 jari 316
2 26 Feb 07 jari 317       if (hasColorBar) {
2 26 Feb 07 jari 318     colorBarHeight = OFFSET + (elementHeight >= 10 ? elementHeight : 10);
2 26 Feb 07 jari 319       } else {
2 26 Feb 07 jari 320     colorBarHeight = 0;
2 26 Feb 07 jari 321       }
2 26 Feb 07 jari 322
2 26 Feb 07 jari 323             headerHeight = gradientPanelHeight + labelPanelHeight + colorBarHeight;
2 26 Feb 07 jari 324   } else {
2 26 Feb 07 jari 325
2 26 Feb 07 jari 326             gradientPanelWidth = 2*OFFSET + RECT_HEIGHT + maxColorScaleTextWidth;
2 26 Feb 07 jari 327             labelPanelWidth = annotationSize + 10;// + (elementHeight/2);
2 26 Feb 07 jari 328
2 26 Feb 07 jari 329       if (hasColorBar) {
2 26 Feb 07 jari 330     colorBarWidth = OFFSET + (elementWidth >= 10 ? elementWidth : 10);
2 26 Feb 07 jari 331       } else {
2 26 Feb 07 jari 332     colorBarWidth = 0; 
2 26 Feb 07 jari 333       }
2 26 Feb 07 jari 334             headerWidth = gradientPanelWidth + labelPanelWidth + colorBarWidth;
2 26 Feb 07 jari 335   }
2 26 Feb 07 jari 336
2 26 Feb 07 jari 337   this.setSize(headerWidth, headerHeight);
2 26 Feb 07 jari 338   this.setPreferredSize(new Dimension(headerWidth, headerHeight));
2 26 Feb 07 jari 339
2 26 Feb 07 jari 340   gdmGradientLabelPanel.updateSize();
2 26 Feb 07 jari 341   gdmColorBarPanel.updateSize();
2 26 Feb 07 jari 342         
2 26 Feb 07 jari 343        // if(!hasColorBar){
2 26 Feb 07 jari 344        //     this.setSize(gdmGradientLabelPanel.getSize());
2 26 Feb 07 jari 345        //     this.setPreferredSize(gdmGradientLabelPanel.getSize());
2 26 Feb 07 jari 346        // }
2 26 Feb 07 jari 347     }
2 26 Feb 07 jari 348
2 26 Feb 07 jari 349     private Graphics getColorScaleGraphics(){
2 26 Feb 07 jari 350         return this.gdmGradientLabelPanel.getColorScaleGraphics();
2 26 Feb 07 jari 351     }
2 26 Feb 07 jari 352     
2 26 Feb 07 jari 353     /**
2 26 Feb 07 jari 354      * Sets matrix listener
2 26 Feb 07 jari 355      */
2 26 Feb 07 jari 356     public void setMatrixListener(ActionListener aL){
2 26 Feb 07 jari 357         this.matrixListener = aL;
2 26 Feb 07 jari 358     }
2 26 Feb 07 jari 359     
2 26 Feb 07 jari 360     public void setSortByProximity(boolean allowSort){
2 26 Feb 07 jari 361         this.sortByProximity = allowSort;
2 26 Feb 07 jari 362     }
2 26 Feb 07 jari 363
2 26 Feb 07 jari 364     /**
2 26 Feb 07 jari 365      * GDMExpGradientLabelPanel: Updates the max experiment name attribute.
2 26 Feb 07 jari 366      */
2 26 Feb 07 jari 367     private void updateMaxExpNameLength() {
2 26 Feb 07 jari 368         Graphics2D g = (Graphics2D)this.gdmGradientLabelPanel.getLabelPanelGraphics();
2 26 Feb 07 jari 369         if (g == null) {
2 26 Feb 07 jari 370             return;
2 26 Feb 07 jari 371         }
2 26 Feb 07 jari 372         if (isAntiAliasing) {  //Anti-aliasing is on
2 26 Feb 07 jari 373             g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
2 26 Feb 07 jari 374             g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
2 26 Feb 07 jari 375         }
2 26 Feb 07 jari 376         FontMetrics fm = g.getFontMetrics();
2 26 Feb 07 jari 377
2 26 Feb 07 jari 378         String expName;
2 26 Feb 07 jari 379         double maxLength = 0;
2 26 Feb 07 jari 380         for (int i = 0; i < num_experiments; i++) {
2 26 Feb 07 jari 381             expName = expData.getSampleName(i);            
2 26 Feb 07 jari 382             maxLength = Math.max(maxLength, fm.stringWidth(expName));
2 26 Feb 07 jari 383         }
2 26 Feb 07 jari 384         maxExpNameLength = (int)maxLength;
2 26 Feb 07 jari 385     }
2 26 Feb 07 jari 386
2 26 Feb 07 jari 387     /**
2 26 Feb 07 jari 388      * GDMExpGradientLabelPanel: Returns max experiment name width.
2 26 Feb 07 jari 389      */
2 26 Feb 07 jari 390     private int getMaxExpNameLength() {
2 26 Feb 07 jari 391         return maxExpNameLength;
2 26 Feb 07 jari 392     }
2 26 Feb 07 jari 393
2 26 Feb 07 jari 394     /**
2 26 Feb 07 jari 395      * GDMExpGradientLabelPanel: Sets max experiment name width.
2 26 Feb 07 jari 396      */
2 26 Feb 07 jari 397     private void setMaxExpNameLength(int val) {
2 26 Feb 07 jari 398   maxExpNameLength = val;
2 26 Feb 07 jari 399     }
2 26 Feb 07 jari 400
2 26 Feb 07 jari 401     public void setNumExperiments(int num_experiments){
2 26 Feb 07 jari 402         this.num_experiments = num_experiments;
2 26 Feb 07 jari 403         this.gdmGradientLabelPanel.setNumExperiments(num_experiments);
2 26 Feb 07 jari 404     }
2 26 Feb 07 jari 405
2 26 Feb 07 jari 406     public void setIndices(int [] indexes) {
2 26 Feb 07 jari 407   this.indices = indexes;
2 26 Feb 07 jari 408   this.gdmGradientLabelPanel.setIndices(indexes);
2 26 Feb 07 jari 409     }
2 26 Feb 07 jari 410
2 26 Feb 07 jari 411     public int [] getIndices() {
2 26 Feb 07 jari 412   return this.indices;
2 26 Feb 07 jari 413     }
2 26 Feb 07 jari 414
2 26 Feb 07 jari 415     /**
2 26 Feb 07 jari 416      * Sets gradient images.
2 26 Feb 07 jari 417     */
2 26 Feb 07 jari 418     public void setPosColorImages(BufferedImage posColorImage) {
2 26 Feb 07 jari 419   gdmGradientLabelPanel.setPosColorImages(posColorImage);
2 26 Feb 07 jari 420   gdmGradientLabelPanel.repaint();
2 26 Feb 07 jari 421     }
2 26 Feb 07 jari 422
2 26 Feb 07 jari 423     public JScrollBar getVerticalScrollBar() {
2 26 Feb 07 jari 424         return gdmGradientLabelPanel.getVerticalScrollBar();
2 26 Feb 07 jari 425     };
2 26 Feb 07 jari 426
2 26 Feb 07 jari 427     public JScrollBar getHorizontalScrollBar() {
2 26 Feb 07 jari 428         return gdmGradientLabelPanel.getHorizontalScrollBar();
2 26 Feb 07 jari 429     };
2 26 Feb 07 jari 430
2 26 Feb 07 jari 431     /**
2 26 Feb 07 jari 432      * Sets left margin
2 26 Feb 07 jari 433      */
2 26 Feb 07 jari 434     public void setLeftInset(int leftMargin){
2 26 Feb 07 jari 435   this.insets.left = leftMargin;
2 26 Feb 07 jari 436   this.setLeftInset(leftMargin);
2 26 Feb 07 jari 437   this.gdmGradientLabelPanel.setLeftInset(leftMargin);
2 26 Feb 07 jari 438     }
2 26 Feb 07 jari 439
2 26 Feb 07 jari 440     /**
2 26 Feb 07 jari 441     * Sets top margin
2 26 Feb 07 jari 442     */
2 26 Feb 07 jari 443     public void setTopInset(int topMargin){
2 26 Feb 07 jari 444   insets.top = topMargin;
2 26 Feb 07 jari 445   this.gdmGradientLabelPanel.setTopInset(topMargin);
2 26 Feb 07 jari 446     }
2 26 Feb 07 jari 447
2 26 Feb 07 jari 448     /**
2 26 Feb 07 jari 449      * Sets the component data.
2 26 Feb 07 jari 450      */
2 26 Feb 07 jari 451     public void setData(IData data) {
2 26 Feb 07 jari 452   this.expData = data;
2 26 Feb 07 jari 453   this.gdmGradientLabelPanel.setData(data);
2 26 Feb 07 jari 454     }
2 26 Feb 07 jari 455
2 26 Feb 07 jari 456     
2 26 Feb 07 jari 457     /**
2 26 Feb 07 jari 458      * Sets the anti-aliasing attribute.
2 26 Feb 07 jari 459      */
2 26 Feb 07 jari 460     public void setAntiAliasing(boolean isAntiAliasing) {
2 26 Feb 07 jari 461   this.isAntiAliasing = isAntiAliasing;
2 26 Feb 07 jari 462   this.gdmGradientLabelPanel.setAntiAliasing(isAntiAliasing);
2 26 Feb 07 jari 463     }
2 26 Feb 07 jari 464
2 26 Feb 07 jari 465     /**
2 26 Feb 07 jari 466      * Sets the element width attribute.
2 26 Feb 07 jari 467      */
2 26 Feb 07 jari 468     void setElementWidth(int width) {
2 26 Feb 07 jari 469   this.elementWidth = width;
2 26 Feb 07 jari 470   setFontSize(width);
2 26 Feb 07 jari 471   this.gdmGradientLabelPanel.setElementWidth(width);
2 26 Feb 07 jari 472     }
2 26 Feb 07 jari 473
2 26 Feb 07 jari 474     /**
2 26 Feb 07 jari 475      * Sets the element height attribute.
2 26 Feb 07 jari 476      */
2 26 Feb 07 jari 477     void setElementHeight(int height) {
2 26 Feb 07 jari 478   this.elementHeight = height;
2 26 Feb 07 jari 479   setFontSize(height);
2 26 Feb 07 jari 480   this.gdmGradientLabelPanel.setElementHeight(height);
2 26 Feb 07 jari 481     }
2 26 Feb 07 jari 482
2 26 Feb 07 jari 483     int getElementWidth() {
2 26 Feb 07 jari 484   return this.elementWidth;
2 26 Feb 07 jari 485     }
2 26 Feb 07 jari 486
2 26 Feb 07 jari 487     /**
2 26 Feb 07 jari 488      * Sets the max header width attribute.
2 26 Feb 07 jari 489      */
2 26 Feb 07 jari 490     void setAnnotationSize(int size) {
2 26 Feb 07 jari 491   this.annotationSize = size;
2 26 Feb 07 jari 492   this.gdmGradientLabelPanel.setAnnotationSize(size);
2 26 Feb 07 jari 493     }
2 26 Feb 07 jari 494
2 26 Feb 07 jari 495     /**
2 26 Feb 07 jari 496      * Sets the content width attribute.
2 26 Feb 07 jari 497      */
2 26 Feb 07 jari 498     void setContentWidth(int width) {
2 26 Feb 07 jari 499   this.contentWidth = width;
2 26 Feb 07 jari 500   this.gdmGradientLabelPanel.setContentWidth(width);
2 26 Feb 07 jari 501     }
2 26 Feb 07 jari 502
2 26 Feb 07 jari 503     /**
2 26 Feb 07 jari 504      * Sets the content height attribute.
2 26 Feb 07 jari 505      */
2 26 Feb 07 jari 506     void setContentHeight(int height) {
2 26 Feb 07 jari 507   this.contentHeight = height;
2 26 Feb 07 jari 508   this.gdmGradientLabelPanel.setContentHeight(height);
2 26 Feb 07 jari 509     }
2 26 Feb 07 jari 510
2 26 Feb 07 jari 511     /**
2 26 Feb 07 jari 512      * Sets the isTracing attribute.
2 26 Feb 07 jari 513      */
2 26 Feb 07 jari 514     void setTracing(boolean isTracing) {
2 26 Feb 07 jari 515   this.isTracing = isTracing;
2 26 Feb 07 jari 516   this.gdmGradientLabelPanel.setTracing(isTracing);
2 26 Feb 07 jari 517     }
2 26 Feb 07 jari 518
2 26 Feb 07 jari 519     /**
2 26 Feb 07 jari 520      * Returns a trace space value.
2 26 Feb 07 jari 521      */
2 26 Feb 07 jari 522     private int getSpacing() {
2 26 Feb 07 jari 523   if (isTracing) {
2 26 Feb 07 jari 524       return tracespace;
2 26 Feb 07 jari 525   }
2 26 Feb 07 jari 526   return 0;
2 26 Feb 07 jari 527     }
2 26 Feb 07 jari 528
2 26 Feb 07 jari 529     /**
2 26 Feb 07 jari 530      * Sets the component font size.
2 26 Feb 07 jari 531      */
2 26 Feb 07 jari 532     private void setFontSize(int size) {
2 26 Feb 07 jari 533   if (size > 12) {
2 26 Feb 07 jari 534     size = 12;
2 26 Feb 07 jari 535   }
2 26 Feb 07 jari 536   setFont(new Font("monospaced", Font.PLAIN, size));
2 26 Feb 07 jari 537     }
2 26 Feb 07 jari 538
2 26 Feb 07 jari 539     public void setValues(float minValue, float maxValue) {
2 26 Feb 07 jari 540   this.minValue = minValue;
2 26 Feb 07 jari 541   this.maxValue = maxValue;
2 26 Feb 07 jari 542   this.gdmGradientLabelPanel.setValues(minValue, maxValue);
2 26 Feb 07 jari 543     }
2 26 Feb 07 jari 544
2 26 Feb 07 jari 545     /**
2 26 Feb 07 jari 546      * GDMExpGradientLabelPanel: returns true if a probe in the current viewer has color
2 26 Feb 07 jari 547      */
2 26 Feb 07 jari 548     protected  boolean areExperimentsColored() {
2 26 Feb 07 jari 549         for(int i = 0; i < this.num_experiments; i++){
2 26 Feb 07 jari 550             if( this.expData.getExperimentColor(i) != null){
2 26 Feb 07 jari 551                 return true;
2 26 Feb 07 jari 552             }
2 26 Feb 07 jari 553         }
2 26 Feb 07 jari 554         return false;
2 26 Feb 07 jari 555     }
2 26 Feb 07 jari 556     
2 26 Feb 07 jari 557     /**
2 26 Feb 07 jari 558      * signals the matrix to sort on proximity about the provided index
2 26 Feb 07 jari 559      */
2 26 Feb 07 jari 560     private void fireGDMSortEvent(int index){
2 26 Feb 07 jari 561         ActionEvent ae = new ActionEvent(this, index, GDMExpViewer.SORT_BY_PROXIMITY_CMD);
2 26 Feb 07 jari 562         if(matrixListener != null){
2 26 Feb 07 jari 563             matrixListener.actionPerformed(ae);
2 26 Feb 07 jari 564         }
2 26 Feb 07 jari 565     }
2 26 Feb 07 jari 566
2 26 Feb 07 jari 567     private class GDMColorBarPanel extends JPanel {
2 26 Feb 07 jari 568       
2 26 Feb 07 jari 569   public GDMColorBarPanel() {
2 26 Feb 07 jari 570       setBackground(Color.white);
2 26 Feb 07 jari 571       setOpaque(true);
2 26 Feb 07 jari 572   }
2 26 Feb 07 jari 573
2 26 Feb 07 jari 574       /**
2 26 Feb 07 jari 575         * Sets the component font size.
2 26 Feb 07 jari 576         */
2 26 Feb 07 jari 577       private void setFontSize(int width) {
2 26 Feb 07 jari 578       if (width > 12) {
2 26 Feb 07 jari 579       width = 12;
2 26 Feb 07 jari 580       }
2 26 Feb 07 jari 581       setFont(new Font("monospaced", Font.PLAIN, width));
2 26 Feb 07 jari 582       }
2 26 Feb 07 jari 583
2 26 Feb 07 jari 584         /**
2 26 Feb 07 jari 585          * GDMColorBarPanel: updateSize
2 26 Feb 07 jari 586          */
2 26 Feb 07 jari 587   public void updateSize() {
2 26 Feb 07 jari 588             int w, h;
2 26 Feb 07 jari 589
2 26 Feb 07 jari 590          this.setSize(colorBarWidth, colorBarHeight);
2 26 Feb 07 jari 591       this.setPreferredSize(new Dimension(colorBarWidth, colorBarHeight));
2 26 Feb 07 jari 592       }
2 26 Feb 07 jari 593
2 26 Feb 07 jari 594         /**
2 26 Feb 07 jari 595          * GDMColorBarPanel: paint
2 26 Feb 07 jari 596          */
2 26 Feb 07 jari 597       public void paint(Graphics g1D) {
2 26 Feb 07 jari 598             super.paint(g1D);            
2 26 Feb 07 jari 599             if (expData == null) {
2 26 Feb 07 jari 600                 return;
2 26 Feb 07 jari 601             }
2 26 Feb 07 jari 602             if (!hasColorBar)
2 26 Feb 07 jari 603                 return;
2 26 Feb 07 jari 604             Graphics2D g = (Graphics2D)g1D;
2 26 Feb 07 jari 605             if (isAntiAliasing) {
2 26 Feb 07 jari 606              g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
2 26 Feb 07 jari 607               g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
2 26 Feb 07 jari 608             }
2 26 Feb 07 jari 609             
2 26 Feb 07 jari 610             if (isColumnHeader == true) {
2 26 Feb 07 jari 611                 drawColumnColorBar(g);
2 26 Feb 07 jari 612             } else {
2 26 Feb 07 jari 613                 drawRowColorBar(g);
2 26 Feb 07 jari 614             }
2 26 Feb 07 jari 615       }
2 26 Feb 07 jari 616         
2 26 Feb 07 jari 617         
2 26 Feb 07 jari 618   private void drawRowColorBar(Graphics2D g) {
2 26 Feb 07 jari 619       Rectangle bounds = g.getClipBounds();
2 26 Feb 07 jari 620       final int top = getTopIndex(bounds.y);
2 26 Feb 07 jari 621       int bottom =0;
2 26 Feb 07 jari 622
2 26 Feb 07 jari 623       bottom = getBottomIndex(bounds.y+bounds.height, num_experiments);
2 26 Feb 07 jari 624
2 26 Feb 07 jari 625       for (int row=top; row<bottom; row++) {                
2 26 Feb 07 jari 626     fillRowColorRectAt(g, OFFSET/2, row);
2 26 Feb 07 jari 627       }
2 26 Feb 07 jari 628   }
2 26 Feb 07 jari 629
2 26 Feb 07 jari 630   /**
2 26 Feb 07 jari 631    * fills cluster colors
2 26 Feb 07 jari 632    */
2 26 Feb 07 jari 633   private void fillRowColorRectAt(Graphics g, int xLoc, int row) {
2 26 Feb 07 jari 634
2 26 Feb 07 jari 635       Color expColor = null;
2 26 Feb 07 jari 636
2 26 Feb 07 jari 637       expColor = expData.getExperimentColor(indices[row]);
2 26 Feb 07 jari 638
2 26 Feb 07 jari 639       if(expColor == null)
2 26 Feb 07 jari 640     expColor = Color.white;
2 26 Feb 07 jari 641
2 26 Feb 07 jari 642       g.setColor(expColor);
2 26 Feb 07 jari 643       g.fillRect(xLoc, row*elementHeight, colorBarWidth-OFFSET, elementHeight);
2 26 Feb 07 jari 644   }
2 26 Feb 07 jari 645
2 26 Feb 07 jari 646   private void drawColumnColorBar(Graphics2D g) {
2 26 Feb 07 jari 647       Rectangle bounds = g.getClipBounds();
2 26 Feb 07 jari 648       final int left = getLeftIndex(bounds.x);
2 26 Feb 07 jari 649       int right = 0;
2 26 Feb 07 jari 650
2 26 Feb 07 jari 651       right = getRightIndex(bounds.x+bounds.width, num_experiments);
2 26 Feb 07 jari 652
2 26 Feb 07 jari 653       for (int column = left; column < right; column++) {                
2 26 Feb 07 jari 654     fillColumnColorRectAt(g, column, OFFSET/2 );
2 26 Feb 07 jari 655       }
2 26 Feb 07 jari 656   }
2 26 Feb 07 jari 657
2 26 Feb 07 jari 658   /**
2 26 Feb 07 jari 659    * fills cluster colors
2 26 Feb 07 jari 660    */
2 26 Feb 07 jari 661   private void fillColumnColorRectAt(Graphics g, int column, int yLoc) {
2 26 Feb 07 jari 662
2 26 Feb 07 jari 663       Color expColor = null;
2 26 Feb 07 jari 664
2 26 Feb 07 jari 665       expColor = expData.getExperimentColor(indices[column]);
2 26 Feb 07 jari 666
2 26 Feb 07 jari 667       if(expColor == null)
2 26 Feb 07 jari 668                 expColor = Color.white;
2 26 Feb 07 jari 669
2 26 Feb 07 jari 670       g.setColor(expColor);
2 26 Feb 07 jari 671       g.fillRect(column*elementWidth, yLoc, elementWidth, colorBarHeight-OFFSET);
2 26 Feb 07 jari 672         }
2 26 Feb 07 jari 673
2 26 Feb 07 jari 674
2 26 Feb 07 jari 675   /**
2 26 Feb 07 jari 676    * Returns index of top row.
2 26 Feb 07 jari 677    */
2 26 Feb 07 jari 678   private int getTopIndex(int top) {
2 26 Feb 07 jari 679       if (top<0) {
2 26 Feb 07 jari 680     return 0;
2 26 Feb 07 jari 681       }
2 26 Feb 07 jari 682       return top/elementHeight;
2 26 Feb 07 jari 683   }
2 26 Feb 07 jari 684
2 26 Feb 07 jari 685   /**
2 26 Feb 07 jari 686    * Returns index of left column.
2 26 Feb 07 jari 687    */
2 26 Feb 07 jari 688   private int getLeftIndex(int left) {
2 26 Feb 07 jari 689       if (left<0) {
2 26 Feb 07 jari 690     return 0;
2 26 Feb 07 jari 691       }
2 26 Feb 07 jari 692       return left/(elementWidth+getSpacing());
2 26 Feb 07 jari 693   }
2 26 Feb 07 jari 694
2 26 Feb 07 jari 695   /**
2 26 Feb 07 jari 696    * Returns index of right column.
2 26 Feb 07 jari 697    */
2 26 Feb 07 jari 698   private int getRightIndex(int right, int limit) {
2 26 Feb 07 jari 699       if (right<0) {
2 26 Feb 07 jari 700     return 0;
2 26 Feb 07 jari 701       }
2 26 Feb 07 jari 702       int result = right/(elementWidth+getSpacing())+1;
2 26 Feb 07 jari 703       return result > limit ? limit : result;
2 26 Feb 07 jari 704   }
2 26 Feb 07 jari 705
2 26 Feb 07 jari 706   /**
2 26 Feb 07 jari 707    * Returns index of bottom row.
2 26 Feb 07 jari 708    */
2 26 Feb 07 jari 709   private int getBottomIndex(int bottom, int limit) {
2 26 Feb 07 jari 710       if (bottom<0) {
2 26 Feb 07 jari 711     return 0;
2 26 Feb 07 jari 712       }
2 26 Feb 07 jari 713       int result = bottom/elementHeight+1;
2 26 Feb 07 jari 714       return result > limit ? limit : result;
2 26 Feb 07 jari 715   }
2 26 Feb 07 jari 716     }
2 26 Feb 07 jari 717 }