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