mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/gdm/GDMGeneGradientLabelPanel.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: GDMGeneGradientLabelPanel.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.5 $
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.Color;
2 26 Feb 07 jari 15 import java.awt.Dimension;
2 26 Feb 07 jari 16 import java.awt.Font;
2 26 Feb 07 jari 17 import java.awt.FontMetrics;
2 26 Feb 07 jari 18 import java.awt.Graphics;
2 26 Feb 07 jari 19 import java.awt.Graphics2D;
2 26 Feb 07 jari 20 import java.awt.Insets;
2 26 Feb 07 jari 21 import java.awt.RenderingHints;
2 26 Feb 07 jari 22 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 23 import java.awt.event.ActionListener;
2 26 Feb 07 jari 24 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 25 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 26 import java.awt.image.BufferedImage;
2 26 Feb 07 jari 27 import java.text.DecimalFormat;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29 import javax.swing.BorderFactory;
2 26 Feb 07 jari 30 import javax.swing.JComponent;
2 26 Feb 07 jari 31 import javax.swing.JPanel;
2 26 Feb 07 jari 32 import javax.swing.JScrollPane;
2 26 Feb 07 jari 33 import javax.swing.JViewport;
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 GDMGeneGradientLabelPanel extends JScrollPane {
2 26 Feb 07 jari 39     
2 26 Feb 07 jari 40     private final int OFFSET = 5;
2 26 Feb 07 jari 41     private final int RECT_HEIGHT = 10;
2 26 Feb 07 jari 42     private final int RECT_WIDTH = 200;
2 26 Feb 07 jari 43     
2 26 Feb 07 jari 44     private IData expData;
2 26 Feb 07 jari 45     private Insets insets;
2 26 Feb 07 jari 46     private int contentWidth;
2 26 Feb 07 jari 47     private int contentHeight;
2 26 Feb 07 jari 48     private int elementWidth;
2 26 Feb 07 jari 49     private int elementHeight;
2 26 Feb 07 jari 50     private int tracespace;
2 26 Feb 07 jari 51     private int maxGeneNameLength;
2 26 Feb 07 jari 52     private int num_genes;
2 26 Feb 07 jari 53     private int [] indices;
2 26 Feb 07 jari 54     private int labelIndex;
2 26 Feb 07 jari 55     private Experiment experiment;
2 26 Feb 07 jari 56     
2 26 Feb 07 jari 57     private boolean isAntiAliasing = false;
2 26 Feb 07 jari 58     private boolean isTracing = true;
2 26 Feb 07 jari 59     private boolean isColumnHeader;
2 26 Feb 07 jari 60     
2 26 Feb 07 jari 61     private int annotationSize;
2 26 Feb 07 jari 62     
2 26 Feb 07 jari 63     private GDMLabelPanel gdmLabelPanel;
2 26 Feb 07 jari 64     private GDMGradientPanel gdmGradientPanel;
2 26 Feb 07 jari 65     
2 26 Feb 07 jari 66     private float minValue = 0.0f;
2 26 Feb 07 jari 67     private float maxValue = 1.0f;
2 26 Feb 07 jari 68     
2 26 Feb 07 jari 69     private int maxColorScaleTextWidth = 0;
2 26 Feb 07 jari 70     private int maxColorScaleTextHeight = 0;
2 26 Feb 07 jari 71     
2 26 Feb 07 jari 72     private DecimalFormat decFormat;
2 26 Feb 07 jari 73     /**
2 26 Feb 07 jari 74      * Constructs a <code>MultipleArrayHeader</code> with specified
2 26 Feb 07 jari 75      * insets and trace space.
2 26 Feb 07 jari 76      */
2 26 Feb 07 jari 77     public GDMGeneGradientLabelPanel(Insets insets, int tracespace, boolean colHdr, Experiment experiment,
2 26 Feb 07 jari 78     int width, int height, Dimension eSize, int maxGeneLen, int num_genes,
2 26 Feb 07 jari 79     int [] indexes) {
2 26 Feb 07 jari 80         
2 26 Feb 07 jari 81         this.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
2 26 Feb 07 jari 82         
2 26 Feb 07 jari 83         this.insets = new Insets(0, 0, 0, 0);
2 26 Feb 07 jari 84
2 26 Feb 07 jari 85         this.tracespace = tracespace;
2 26 Feb 07 jari 86         this.experiment = experiment;
2 26 Feb 07 jari 87         this.elementWidth = eSize.width;
2 26 Feb 07 jari 88         this.elementHeight = eSize.height;
2 26 Feb 07 jari 89         this.isColumnHeader = colHdr;
2 26 Feb 07 jari 90         this.contentWidth = width;
2 26 Feb 07 jari 91         this.contentHeight = height;
2 26 Feb 07 jari 92         this.indices = indexes;
2 26 Feb 07 jari 93         
2 26 Feb 07 jari 94         this.num_genes = num_genes;
2 26 Feb 07 jari 95         
2 26 Feb 07 jari 96         this.maxGeneNameLength = maxGeneLen * elementWidth;
2 26 Feb 07 jari 97         
2 26 Feb 07 jari 98         gdmGradientPanel = new GDMGradientPanel();
2 26 Feb 07 jari 99         gdmLabelPanel = new GDMLabelPanel();
2 26 Feb 07 jari 100         
2 26 Feb 07 jari 101         setViewportView(gdmLabelPanel);
2 26 Feb 07 jari 102         setViewport(getViewport());
2 26 Feb 07 jari 103         
2 26 Feb 07 jari 104         
2 26 Feb 07 jari 105         
2 26 Feb 07 jari 106         if (isColumnHeader == true) {
2 26 Feb 07 jari 107             setColumnHeaderView(gdmGradientPanel);
2 26 Feb 07 jari 108             setColumnHeader(getColumnHeader());
2 26 Feb 07 jari 109             setViewportBorder(BorderFactory.createEmptyBorder(2,0,2,0));
2 26 Feb 07 jari 110         } else {
2 26 Feb 07 jari 111             setRowHeaderView(gdmGradientPanel);
2 26 Feb 07 jari 112             setRowHeader(getRowHeader());
2 26 Feb 07 jari 113             setViewportBorder(BorderFactory.createEmptyBorder(0,2,0,2));
2 26 Feb 07 jari 114         }
2 26 Feb 07 jari 115         
2 26 Feb 07 jari 116         updateSize();
2 26 Feb 07 jari 117         
2 26 Feb 07 jari 118         if (isColumnHeader == true) {
2 26 Feb 07 jari 119             setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
2 26 Feb 07 jari 120             setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
2 26 Feb 07 jari 121         } else {
2 26 Feb 07 jari 122             setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
2 26 Feb 07 jari 123             setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
2 26 Feb 07 jari 124         }
2 26 Feb 07 jari 125         
2 26 Feb 07 jari 126         getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
2 26 Feb 07 jari 127         
2 26 Feb 07 jari 128         decFormat = new DecimalFormat();
2 26 Feb 07 jari 129         decFormat.setMinimumFractionDigits(1);
2 26 Feb 07 jari 130         decFormat.setMaximumFractionDigits(3);
2 26 Feb 07 jari 131              
2 26 Feb 07 jari 132         setBackground(Color.white);
2 26 Feb 07 jari 133         setOpaque(true);
2 26 Feb 07 jari 134     }
2 26 Feb 07 jari 135     
2 26 Feb 07 jari 136     private class Listener extends MouseAdapter implements ActionListener {
2 26 Feb 07 jari 137         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 138             String command = e.getActionCommand();
2 26 Feb 07 jari 139         }
2 26 Feb 07 jari 140         
2 26 Feb 07 jari 141         public void mouseMoved(MouseEvent event) {
2 26 Feb 07 jari 142             
2 26 Feb 07 jari 143         }
2 26 Feb 07 jari 144         public void mouseExited(MouseEvent event) {}
2 26 Feb 07 jari 145         public void mouseEntered(MouseEvent event) {}
2 26 Feb 07 jari 146         public void mouseDragged(MouseEvent event) {}
2 26 Feb 07 jari 147     }
2 26 Feb 07 jari 148     
2 26 Feb 07 jari 149     public void setValues(float minValue, float maxValue) {
2 26 Feb 07 jari 150         this.minValue = minValue;
2 26 Feb 07 jari 151         this.maxValue = maxValue;
2 26 Feb 07 jari 152     }
2 26 Feb 07 jari 153     
2 26 Feb 07 jari 154     /**
2 26 Feb 07 jari 155      * Sets the component data.
2 26 Feb 07 jari 156      */
2 26 Feb 07 jari 157     public void setData(IData data) {
2 26 Feb 07 jari 158         this.expData = data;
2 26 Feb 07 jari 159     }
2 26 Feb 07 jari 160     
2 26 Feb 07 jari 161     public void setNumGenes(int val) {
2 26 Feb 07 jari 162         this.num_genes = val;
2 26 Feb 07 jari 163     }
2 26 Feb 07 jari 164     
2 26 Feb 07 jari 165     public void setIndices(int [] indexes) {
2 26 Feb 07 jari 166         this.indices = indexes;
2 26 Feb 07 jari 167     }
2 26 Feb 07 jari 168     
2 26 Feb 07 jari 169     public int [] getIndices() {
2 26 Feb 07 jari 170         return this.indices;
2 26 Feb 07 jari 171     }
2 26 Feb 07 jari 172     
2 26 Feb 07 jari 173     /**
2 26 Feb 07 jari 174      * Sets the label index
2 26 Feb 07 jari 175      */
2 26 Feb 07 jari 176     public void setLabelIndex(int label) {
2 26 Feb 07 jari 177         this.labelIndex = label;
2 26 Feb 07 jari 178     }
2 26 Feb 07 jari 179     
2 26 Feb 07 jari 180     public int getLabelIndex() {
2 26 Feb 07 jari 181         return this.labelIndex;
2 26 Feb 07 jari 182     }
2 26 Feb 07 jari 183     
2 26 Feb 07 jari 184     /**
2 26 Feb 07 jari 185      * Sets the anti-aliasing attribute.
2 26 Feb 07 jari 186      */
2 26 Feb 07 jari 187     public void setAntiAliasing(boolean isAntiAliasing) {
2 26 Feb 07 jari 188         this.isAntiAliasing = isAntiAliasing;
2 26 Feb 07 jari 189     }
2 26 Feb 07 jari 190     
2 26 Feb 07 jari 191     /**
2 26 Feb 07 jari 192      * Sets the element width attribute.
2 26 Feb 07 jari 193      */
2 26 Feb 07 jari 194     void setElementWidth(int width) {
2 26 Feb 07 jari 195         this.elementWidth = width;
2 26 Feb 07 jari 196         setFontSize(width);
2 26 Feb 07 jari 197         gdmLabelPanel.setFontSize(width);
2 26 Feb 07 jari 198     }
2 26 Feb 07 jari 199     
2 26 Feb 07 jari 200     int getElementWidth() {
2 26 Feb 07 jari 201         return this.elementWidth;
2 26 Feb 07 jari 202     }
2 26 Feb 07 jari 203     
2 26 Feb 07 jari 204     public JComponent getLabelPanel(){
2 26 Feb 07 jari 205         return this.gdmLabelPanel;
2 26 Feb 07 jari 206     }
2 26 Feb 07 jari 207     
2 26 Feb 07 jari 208     /**
2 26 Feb 07 jari 209      * Sets the max header width attribute.
2 26 Feb 07 jari 210      */
2 26 Feb 07 jari 211     void setAnnotationSize(int size) {
2 26 Feb 07 jari 212         this.annotationSize = size;
2 26 Feb 07 jari 213     }
2 26 Feb 07 jari 214     
2 26 Feb 07 jari 215     /**
2 26 Feb 07 jari 216      * Sets the content width attribute.
2 26 Feb 07 jari 217      */
2 26 Feb 07 jari 218     void setContentWidth(int width) {
2 26 Feb 07 jari 219         this.contentWidth = width;
2 26 Feb 07 jari 220     }
2 26 Feb 07 jari 221     
2 26 Feb 07 jari 222     /**
2 26 Feb 07 jari 223      * Sets the element height attribute.
2 26 Feb 07 jari 224      */
2 26 Feb 07 jari 225     void setElementHeight(int height) {
2 26 Feb 07 jari 226         this.elementHeight = height;
2 26 Feb 07 jari 227         setFontSize(height);
2 26 Feb 07 jari 228         gdmLabelPanel.setFontSize(height);
2 26 Feb 07 jari 229     }
2 26 Feb 07 jari 230     /**
2 26 Feb 07 jari 231      * Sets the content height attribute.
2 26 Feb 07 jari 232      */
2 26 Feb 07 jari 233     void setContentHeight(int height) {
2 26 Feb 07 jari 234         this.contentHeight = height;
2 26 Feb 07 jari 235     }
2 26 Feb 07 jari 236     
2 26 Feb 07 jari 237     /**
2 26 Feb 07 jari 238      * Sets the isTracing attribute.
2 26 Feb 07 jari 239      */
2 26 Feb 07 jari 240     void setTracing(boolean isTracing) {
2 26 Feb 07 jari 241         this.isTracing = isTracing;
2 26 Feb 07 jari 242     }
2 26 Feb 07 jari 243     
2 26 Feb 07 jari 244     /**
2 26 Feb 07 jari 245      * Returns a trace space value.
2 26 Feb 07 jari 246      */
2 26 Feb 07 jari 247     private int getSpacing() {
2 26 Feb 07 jari 248         if (isTracing) {
2 26 Feb 07 jari 249             return tracespace;
2 26 Feb 07 jari 250         }
2 26 Feb 07 jari 251         return 0;
2 26 Feb 07 jari 252     }
2 26 Feb 07 jari 253     
2 26 Feb 07 jari 254     /**
2 26 Feb 07 jari 255      * Sets the component font size.
2 26 Feb 07 jari 256      */
2 26 Feb 07 jari 257     private void setFontSize(int size) {
2 26 Feb 07 jari 258         if (size > 12) {
2 26 Feb 07 jari 259             size = 12;
2 26 Feb 07 jari 260         }
2 26 Feb 07 jari 261         setFont(new Font("monospaced", Font.PLAIN, size));
2 26 Feb 07 jari 262     }
2 26 Feb 07 jari 263     
2 26 Feb 07 jari 264     private void updateMaxGeneNameLength() {
2 26 Feb 07 jari 265         Graphics2D g = (Graphics2D)getGraphics();
2 26 Feb 07 jari 266         if (g == null) {
2 26 Feb 07 jari 267             return;
2 26 Feb 07 jari 268         }
2 26 Feb 07 jari 269         if (isAntiAliasing) {  //Anti-aliasing is on
2 26 Feb 07 jari 270             g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
2 26 Feb 07 jari 271             g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
2 26 Feb 07 jari 272         }
2 26 Feb 07 jari 273         FontMetrics fm = g.getFontMetrics();
2 26 Feb 07 jari 274         String geneName="";
2 26 Feb 07 jari 275         int maxLength = 0;
2 26 Feb 07 jari 276         int [] indices = getIndices();
2 26 Feb 07 jari 277         
2 26 Feb 07 jari 278         for (int i = 0; i<num_genes; i++) {
2 26 Feb 07 jari 279             if (indices != null) {
2 26 Feb 07 jari 280                 if (labelIndex >= 0) {
2 26 Feb 07 jari 281                     geneName = expData.getElementAttribute(experiment.getGeneIndexMappedToData(indices[i]), labelIndex);
2 26 Feb 07 jari 282                 }
2 26 Feb 07 jari 283             } else {
2 26 Feb 07 jari 284                 if (labelIndex >= 0) {
2 26 Feb 07 jari 285                     geneName = expData.getElementAttribute(i, labelIndex);
2 26 Feb 07 jari 286                 }
2 26 Feb 07 jari 287             }
2 26 Feb 07 jari 288             maxLength = Math.max(maxLength, fm.stringWidth(geneName));
2 26 Feb 07 jari 289         }
2 26 Feb 07 jari 290         maxGeneNameLength = maxLength;
2 26 Feb 07 jari 291     }
2 26 Feb 07 jari 292     
2 26 Feb 07 jari 293     /**
2 26 Feb 07 jari 294      * Returns max label width.
2 26 Feb 07 jari 295      */
2 26 Feb 07 jari 296     private int getMaxGeneNameLength() {
2 26 Feb 07 jari 297         return maxGeneNameLength;
2 26 Feb 07 jari 298     }
2 26 Feb 07 jari 299     
2 26 Feb 07 jari 300     private void setMaxGeneNameLength(int val) {
2 26 Feb 07 jari 301         maxGeneNameLength = val;
2 26 Feb 07 jari 302     }
2 26 Feb 07 jari 303     
2 26 Feb 07 jari 304     /**
2 26 Feb 07 jari 305      *  GDMGeneGradientLabelPanel: updateSize.
2 26 Feb 07 jari 306      */
2 26 Feb 07 jari 307     public void updateSize() {
2 26 Feb 07 jari 308         
2 26 Feb 07 jari 309         updateMaxGeneNameLength();
2 26 Feb 07 jari 310         gdmGradientPanel.updateSize();
2 26 Feb 07 jari 311         gdmLabelPanel.updateSize();
2 26 Feb 07 jari 312         
2 26 Feb 07 jari 313         if (isColumnHeader == true ) {
2 26 Feb 07 jari 314             getVerticalScrollBar().setValues(190, 10, 100, 200);            
2 26 Feb 07 jari 315         } else {
2 26 Feb 07 jari 316             getHorizontalScrollBar().setValues(190, 10, 100, 200);
2 26 Feb 07 jari 317         }
2 26 Feb 07 jari 318         
2 26 Feb 07 jari 319         
2 26 Feb 07 jari 320         
2 26 Feb 07 jari 321         if (isColumnHeader == true) {
2 26 Feb 07 jari 322             int w = contentWidth + (int) (elementWidth/2);
2 26 Feb 07 jari 323             int h = RECT_HEIGHT + maxColorScaleTextHeight + annotationSize + 2*OFFSET + 10+4;
2 26 Feb 07 jari 324             
2 26 Feb 07 jari 325             this.setSize(w, h);
2 26 Feb 07 jari 326             this.setPreferredSize(new Dimension(w, h));
2 26 Feb 07 jari 327             
2 26 Feb 07 jari 328         } else {
2 26 Feb 07 jari 329             int w = RECT_HEIGHT + maxColorScaleTextWidth + annotationSize + 2*OFFSET + 10+4;
2 26 Feb 07 jari 330             int h = contentHeight + (elementHeight/2);
2 26 Feb 07 jari 331             
2 26 Feb 07 jari 332             this.setSize(w, h);
2 26 Feb 07 jari 333             this.setPreferredSize(new Dimension(w, h));
2 26 Feb 07 jari 334         }
2 26 Feb 07 jari 335         this.getViewport().setViewSize(gdmLabelPanel.getSize());
2 26 Feb 07 jari 336         validate();
2 26 Feb 07 jari 337     }
2 26 Feb 07 jari 338     
2 26 Feb 07 jari 339     
2 26 Feb 07 jari 340     /**
2 26 Feb 07 jari 341      * Sets gradient images.
2 26 Feb 07 jari 342      */
2 26 Feb 07 jari 343     public void setPosColorImages(BufferedImage posColorImage) {
2 26 Feb 07 jari 344         gdmGradientPanel.setPosColorImages(posColorImage);
2 26 Feb 07 jari 345         gdmGradientPanel.repaint();
2 26 Feb 07 jari 346     }
2 26 Feb 07 jari 347     
2 26 Feb 07 jari 348     /**
2 26 Feb 07 jari 349      * Sets left margin
2 26 Feb 07 jari 350      */
2 26 Feb 07 jari 351     public void setLeftInset(int leftMargin){
2 26 Feb 07 jari 352         insets.left = leftMargin;
2 26 Feb 07 jari 353     }
2 26 Feb 07 jari 354     
2 26 Feb 07 jari 355     /**
2 26 Feb 07 jari 356      * Sets top margin
2 26 Feb 07 jari 357      */
2 26 Feb 07 jari 358     public void setTopInset(int topMargin){
2 26 Feb 07 jari 359         insets.top = topMargin;
2 26 Feb 07 jari 360     }
2 26 Feb 07 jari 361     
2 26 Feb 07 jari 362     /**
2 26 Feb 07 jari 363      * returns true if a probe in the current viewer has color
2 26 Feb 07 jari 364      */
2 26 Feb 07 jari 365     public boolean areProbesColored() {
2 26 Feb 07 jari 366         if (indices == null) return false;
2 26 Feb 07 jari 367         
2 26 Feb 07 jari 368         for(int i = 0; i < indices.length; i++){
2 26 Feb 07 jari 369             if( this.expData.getProbeColor(experiment.getGeneIndexMappedToData(indices[i])) != null){
2 26 Feb 07 jari 370                 return true;
2 26 Feb 07 jari 371             }
2 26 Feb 07 jari 372         }
2 26 Feb 07 jari 373         return false;
2 26 Feb 07 jari 374     }
2 26 Feb 07 jari 375     
2 26 Feb 07 jari 376     
2 26 Feb 07 jari 377     private class GDMLabelPanel extends JPanel {
2 26 Feb 07 jari 378         
2 26 Feb 07 jari 379         public GDMLabelPanel() {
2 26 Feb 07 jari 380             setBackground(Color.white);
2 26 Feb 07 jari 381             setOpaque(true);
2 26 Feb 07 jari 382         }
2 26 Feb 07 jari 383         
2 26 Feb 07 jari 384         /**
2 26 Feb 07 jari 385          * Sets the component font size.
2 26 Feb 07 jari 386          */
2 26 Feb 07 jari 387         private void setFontSize(int width) {
2 26 Feb 07 jari 388             if (width > 12) {
2 26 Feb 07 jari 389                 width = 12;
2 26 Feb 07 jari 390             }
2 26 Feb 07 jari 391             setFont(new Font("monospaced", Font.PLAIN, width));
2 26 Feb 07 jari 392         }
2 26 Feb 07 jari 393         
2 26 Feb 07 jari 394         
2 26 Feb 07 jari 395         /**
2 26 Feb 07 jari 396          * GDMLabelPanel: updateSize
2 26 Feb 07 jari 397          */
2 26 Feb 07 jari 398         public void updateSize() {
2 26 Feb 07 jari 399             int w, h;
2 26 Feb 07 jari 400             
2 26 Feb 07 jari 401             if (isColumnHeader == true) {
2 26 Feb 07 jari 402                 w = contentWidth + (int) (elementWidth/2f);
2 26 Feb 07 jari 403                 h = getMaxGeneNameLength() + 10;
2 26 Feb 07 jari 404                 
2 26 Feb 07 jari 405             } else {
2 26 Feb 07 jari 406                 w = getMaxGeneNameLength() + 10;
2 26 Feb 07 jari 407                 h = contentHeight + (int) (elementHeight/2f);
2 26 Feb 07 jari 408             }
2 26 Feb 07 jari 409             
2 26 Feb 07 jari 410             this.setSize(w, h);
2 26 Feb 07 jari 411             this.setMinimumSize(new Dimension(w,h));
2 26 Feb 07 jari 412             this.setPreferredSize(new Dimension(w, h));
2 26 Feb 07 jari 413             
2 26 Feb 07 jari 414         }
2 26 Feb 07 jari 415         
2 26 Feb 07 jari 416         /**
2 26 Feb 07 jari 417          * GDMLabelPanel: paint
2 26 Feb 07 jari 418          */
2 26 Feb 07 jari 419         public void paint(Graphics g1D) {
2 26 Feb 07 jari 420             super.paint(g1D);
2 26 Feb 07 jari 421             if (expData == null || getElementWidth() <= 2) {
2 26 Feb 07 jari 422                 return;
2 26 Feb 07 jari 423             }
2 26 Feb 07 jari 424             Graphics2D g = (Graphics2D)g1D;
2 26 Feb 07 jari 425             if (isAntiAliasing) {
2 26 Feb 07 jari 426                 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
2 26 Feb 07 jari 427                 g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
2 26 Feb 07 jari 428             }
2 26 Feb 07 jari 429             
2 26 Feb 07 jari 430             drawLabelHeader(g);
2 26 Feb 07 jari 431         }
2 26 Feb 07 jari 432         
2 26 Feb 07 jari 433         /**
2 26 Feb 07 jari 434          * GDMLabelPanel: Draws gene names.
2 26 Feb 07 jari 435          */
2 26 Feb 07 jari 436         private void drawLabelHeader(Graphics2D g) {
2 26 Feb 07 jari 437             int tmp;
2 26 Feb 07 jari 438             if (num_genes == 0) {
2 26 Feb 07 jari 439                 return;
2 26 Feb 07 jari 440             }
2 26 Feb 07 jari 441             FontMetrics hfm = g.getFontMetrics();
2 26 Feb 07 jari 442             int descent = hfm.getDescent();
2 26 Feb 07 jari 443             
2 26 Feb 07 jari 444             if (isColumnHeader == true) {
2 26 Feb 07 jari 445                 g.rotate(-Math.PI/2);
2 26 Feb 07 jari 446             }
2 26 Feb 07 jari 447             
2 26 Feb 07 jari 448             String geneName = "";
2 26 Feb 07 jari 449             int x, y, w, h;
2 26 Feb 07 jari 450             int maxLength = 0;
2 26 Feb 07 jari 451             int [] indices = getIndices();
2 26 Feb 07 jari 452             
2 26 Feb 07 jari 453             for (int i = 0; i<num_genes; i++) {
2 26 Feb 07 jari 454                 if (indices != null) {
2 26 Feb 07 jari 455                     if (labelIndex >= 0) {
2 26 Feb 07 jari 456                         geneName = expData.getElementAttribute(experiment.getGeneIndexMappedToData(indices[i]), labelIndex);
2 26 Feb 07 jari 457                     }
2 26 Feb 07 jari 458                 } else {
2 26 Feb 07 jari 459                     if (labelIndex >= 0) {
2 26 Feb 07 jari 460                         geneName = expData.getElementAttribute(i, labelIndex);
2 26 Feb 07 jari 461                     }
2 26 Feb 07 jari 462                 }
2 26 Feb 07 jari 463                 maxLength = Math.max(maxLength, hfm.stringWidth(geneName));
2 26 Feb 07 jari 464                 if (isColumnHeader == true) {
2 26 Feb 07 jari 465                     //x = insets.top - getSize().height + 2;
2 26 Feb 07 jari 466                     x = insets.top - (getMaxGeneNameLength() + 10) + 5;
2 26 Feb 07 jari 467                     y = insets.left + descent + (elementWidth+getSpacing())*i + (int) (elementWidth/2) + 1;
2 26 Feb 07 jari 468                     
2 26 Feb 07 jari 469                 } else {
2 26 Feb 07 jari 470                     x = insets.left + 5;
2 26 Feb 07 jari 471                     y = insets.top + descent + (elementHeight+getSpacing())*i + (int) (elementHeight/2);
2 26 Feb 07 jari 472                 }
2 26 Feb 07 jari 473                 g.drawString(geneName, x, y);
2 26 Feb 07 jari 474             }
2 26 Feb 07 jari 475             
2 26 Feb 07 jari 476             if (isColumnHeader == true) {
2 26 Feb 07 jari 477                 g.rotate(Math.PI/2);
2 26 Feb 07 jari 478             }
2 26 Feb 07 jari 479             
2 26 Feb 07 jari 480             setMaxGeneNameLength(maxLength);
2 26 Feb 07 jari 481         }
2 26 Feb 07 jari 482     }
2 26 Feb 07 jari 483     
2 26 Feb 07 jari 484     public Graphics getColorScaleGraphics(){
2 26 Feb 07 jari 485         return this.gdmGradientPanel.getGraphics();
2 26 Feb 07 jari 486     }
2 26 Feb 07 jari 487     
2 26 Feb 07 jari 488     public Graphics getLabelPanelGraphics(){
2 26 Feb 07 jari 489         return this.gdmLabelPanel.getGraphics();
2 26 Feb 07 jari 490     }
2 26 Feb 07 jari 491     
2 26 Feb 07 jari 492     /**
2 26 Feb 07 jari 493      * The component to display gdm vector.
2 26 Feb 07 jari 494      */
2 26 Feb 07 jari 495     private class GDMGradientPanel extends JPanel {
2 26 Feb 07 jari 496         
2 26 Feb 07 jari 497         private boolean drawBorders = false;
2 26 Feb 07 jari 498         private Color missingColor = new Color(128, 128, 128);
2 26 Feb 07 jari 499         private BufferedImage posColorImage;
2 26 Feb 07 jari 500         private DecimalFormat decFormat;
2 26 Feb 07 jari 501         /**
2 26 Feb 07 jari 502          * GDMGradientPanel: Constructs a <code>GDMGradientPanel</code> with specified codes.
2 26 Feb 07 jari 503          */
2 26 Feb 07 jari 504         public GDMGradientPanel() {
2 26 Feb 07 jari 505             setBackground(Color.white);
2 26 Feb 07 jari 506             setOpaque(true);
2 26 Feb 07 jari 507             decFormat = new DecimalFormat();
2 26 Feb 07 jari 508             decFormat.setMinimumFractionDigits(1);
2 26 Feb 07 jari 509             decFormat.setMaximumFractionDigits(3);
2 26 Feb 07 jari 510         }
2 26 Feb 07 jari 511         
2 26 Feb 07 jari 512         /**
2 26 Feb 07 jari 513          * GDMGradientPanel: Sets gradient images.
2 26 Feb 07 jari 514          */
2 26 Feb 07 jari 515         public void setPosColorImages(BufferedImage posColorImage) {
2 26 Feb 07 jari 516             this.posColorImage = posColorImage;
2 26 Feb 07 jari 517         }
2 26 Feb 07 jari 518         
2 26 Feb 07 jari 519         /**
2 26 Feb 07 jari 520          * GDMGradientPanel: Sets color for NaN values.
2 26 Feb 07 jari 521          */
2 26 Feb 07 jari 522         public void setMissingColor(Color color) {
2 26 Feb 07 jari 523             this.missingColor = color;
2 26 Feb 07 jari 524         }
2 26 Feb 07 jari 525         
2 26 Feb 07 jari 526         /**
2 26 Feb 07 jari 527          * GDMGradientPanel: Sets the draw borders attribute.
2 26 Feb 07 jari 528          */
2 26 Feb 07 jari 529         public void setDrawBorders(boolean draw) {
2 26 Feb 07 jari 530             this.drawBorders = draw;
2 26 Feb 07 jari 531         }
2 26 Feb 07 jari 532         
2 26 Feb 07 jari 533         /**
2 26 Feb 07 jari 534          *  GDMGradientPanel: updateSize.
2 26 Feb 07 jari 535          */
2 26 Feb 07 jari 536         public void updateSize() {
2 26 Feb 07 jari 537             int w, h;
2 26 Feb 07 jari 538             
2 26 Feb 07 jari 539             Graphics2D g = (Graphics2D)getGraphics();
2 26 Feb 07 jari 540             FontMetrics hfm;
2 26 Feb 07 jari 541             int textHeight = 0;
2 26 Feb 07 jari 542             float midValue = (minValue + maxValue)/2f;
2 26 Feb 07 jari 543             
2 26 Feb 07 jari 544             String midString = decFormat.format((double)midValue);
2 26 Feb 07 jari 545             String maxString = decFormat.format((double)maxValue);
2 26 Feb 07 jari 546             String minString = decFormat.format((double)minValue);
2 26 Feb 07 jari 547             int textWidth1;
2 26 Feb 07 jari 548             int textWidth2;
2 26 Feb 07 jari 549             int textWidth3;
2 26 Feb 07 jari 550             
2 26 Feb 07 jari 551             if (g != null) {
2 26 Feb 07 jari 552                 hfm = g.getFontMetrics();
2 26 Feb 07 jari 553                 maxColorScaleTextHeight = hfm.getHeight();
2 26 Feb 07 jari 554                 
2 26 Feb 07 jari 555                 textWidth1 = hfm.stringWidth(midString);
2 26 Feb 07 jari 556                 textWidth2 = hfm.stringWidth(maxString);
2 26 Feb 07 jari 557                 textWidth3 = hfm.stringWidth(minString);
2 26 Feb 07 jari 558                 
2 26 Feb 07 jari 559                 maxColorScaleTextWidth = Math.max(textWidth1, textWidth2);
2 26 Feb 07 jari 560                 maxColorScaleTextWidth = Math.max(maxColorScaleTextWidth, textWidth3);
2 26 Feb 07 jari 561                 
2 26 Feb 07 jari 562             } else {
2 26 Feb 07 jari 563                 maxColorScaleTextHeight = 4;
2 26 Feb 07 jari 564                 maxColorScaleTextWidth = 4;
2 26 Feb 07 jari 565             }
2 26 Feb 07 jari 566             
2 26 Feb 07 jari 567             if (isColumnHeader == true) {
2 26 Feb 07 jari 568                 w = contentWidth + (int) (elementWidth/2f);
2 26 Feb 07 jari 569                 h = 2*OFFSET + RECT_HEIGHT + maxColorScaleTextHeight;
2 26 Feb 07 jari 570                 
2 26 Feb 07 jari 571                 this.setSize(w, h);
2 26 Feb 07 jari 572                 this.setPreferredSize(new Dimension(w, h));
2 26 Feb 07 jari 573             } else {
2 26 Feb 07 jari 574                 w = 2*OFFSET + RECT_HEIGHT + maxColorScaleTextWidth;
2 26 Feb 07 jari 575                 h = contentHeight + (int) (elementHeight/2f);
2 26 Feb 07 jari 576                 
2 26 Feb 07 jari 577                 this.setSize(w, h);
2 26 Feb 07 jari 578                 this.setPreferredSize(new Dimension(w, h));
2 26 Feb 07 jari 579             }
2 26 Feb 07 jari 580         }
2 26 Feb 07 jari 581         
2 26 Feb 07 jari 582         /**
2 26 Feb 07 jari 583          *  GDMGradientPanel: paint.
2 26 Feb 07 jari 584          */
2 26 Feb 07 jari 585         public void paint(Graphics g1D) {
2 26 Feb 07 jari 586             
2 26 Feb 07 jari 587             super.paint(g1D);
2 26 Feb 07 jari 588             if (expData == null || expData.getFeaturesCount() == 0) {
2 26 Feb 07 jari 589                 return;
2 26 Feb 07 jari 590             }
2 26 Feb 07 jari 591             
2 26 Feb 07 jari 592             Graphics2D g = (Graphics2D)g1D;
2 26 Feb 07 jari 593             
2 26 Feb 07 jari 594             if (isColumnHeader == true) {
2 26 Feb 07 jari 595                 g.drawImage(posColorImage, insets.left, insets.top, RECT_WIDTH, RECT_HEIGHT, null);
2 26 Feb 07 jari 596             } else {
2 26 Feb 07 jari 597                 g.rotate(Math.PI/2);
2 26 Feb 07 jari 598                 g.drawImage(posColorImage, insets.top, 0 - RECT_HEIGHT - insets.left, RECT_WIDTH, RECT_HEIGHT, null);
2 26 Feb 07 jari 599             }
2 26 Feb 07 jari 600             
2 26 Feb 07 jari 601             FontMetrics hfm = g.getFontMetrics();
2 26 Feb 07 jari 602             int descent = hfm.getDescent();
2 26 Feb 07 jari 603             
2 26 Feb 07 jari 604             g.setColor(Color.black);
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             int textWidth1;
2 26 Feb 07 jari 611             int textWidth2;
2 26 Feb 07 jari 612             int textWidth3;
2 26 Feb 07 jari 613             
2 26 Feb 07 jari 614             float midValue = (minValue + maxValue)/2f;
2 26 Feb 07 jari 615             
2 26 Feb 07 jari 616             String midString = decFormat.format(midValue);
2 26 Feb 07 jari 617             String minString = decFormat.format(minValue);
2 26 Feb 07 jari 618             String maxString = decFormat.format(maxValue);
2 26 Feb 07 jari 619             
2 26 Feb 07 jari 620             textWidth1 = hfm.stringWidth(minString);
2 26 Feb 07 jari 621             textWidth2 = hfm.stringWidth(maxString);
2 26 Feb 07 jari 622             textWidth3 = hfm.stringWidth(midString);
2 26 Feb 07 jari 623             
2 26 Feb 07 jari 624             if (isColumnHeader == true) {
2 26 Feb 07 jari 625                 g.drawString(minString, insets.left, RECT_HEIGHT + maxColorScaleTextHeight);
2 26 Feb 07 jari 626                 g.drawString(midString, insets.left + (int)(RECT_WIDTH/2f)-textWidth3/2, RECT_HEIGHT + maxColorScaleTextHeight);
2 26 Feb 07 jari 627                 g.drawString(maxString, insets.left + RECT_WIDTH-textWidth2, RECT_HEIGHT + maxColorScaleTextHeight);
2 26 Feb 07 jari 628             } else {
2 26 Feb 07 jari 629                 g.rotate(-Math.PI/2);
2 26 Feb 07 jari 630                 g.drawString(minString, insets.left + RECT_HEIGHT, insets.top + maxColorScaleTextHeight);
2 26 Feb 07 jari 631                 g.drawString(midString, insets.left + RECT_HEIGHT, insets.top + (int)(RECT_WIDTH/2f) + maxColorScaleTextHeight/2.0f);
2 26 Feb 07 jari 632                 g.drawString(maxString, insets.left + RECT_HEIGHT, insets.top + RECT_WIDTH);
2 26 Feb 07 jari 633             }
2 26 Feb 07 jari 634         }
2 26 Feb 07 jari 635         
2 26 Feb 07 jari 636     }
2 26 Feb 07 jari 637     
2 26 Feb 07 jari 638 }