mev-4.0.01/source/org/tigr/microarray/mev/Thumbnail.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: Thumbnail.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.4 $
2 26 Feb 07 jari 8  * $Date: 2006/02/23 20:59:41 $
2 26 Feb 07 jari 9  * $Author: caliente $
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;
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.Graphics;
2 26 Feb 07 jari 17 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 18 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 19 import java.awt.event.MouseListener;
2 26 Feb 07 jari 20 import java.awt.event.WindowListener;
2 26 Feb 07 jari 21
2 26 Feb 07 jari 22 import javax.swing.JFrame;
2 26 Feb 07 jari 23 import javax.swing.JPanel;
2 26 Feb 07 jari 24
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.cluster.gui.IDisplayMenu;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29 public class Thumbnail extends JFrame {
2 26 Feb 07 jari 30     
2 26 Feb 07 jari 31     private Canvas canvas;
2 26 Feb 07 jari 32     
2 26 Feb 07 jari 33     /**
2 26 Feb 07 jari 34      * Constructs a <code>Thumbnail</code> for specified framework.
2 26 Feb 07 jari 35      */
2 26 Feb 07 jari 36     public Thumbnail(IFramework framework, WindowListener windowListener) {
2 26 Feb 07 jari 37   super("Thumbnail");
2 26 Feb 07 jari 38   addWindowListener(windowListener);
2 26 Feb 07 jari 39   Listener listener = new Listener();
2 26 Feb 07 jari 40   this.canvas = createCanvas(framework, listener);
2 26 Feb 07 jari 41   getContentPane().add(this.canvas, BorderLayout.CENTER);
2 26 Feb 07 jari 42   setSize(100, 200);
2 26 Feb 07 jari 43     }
2 26 Feb 07 jari 44     
2 26 Feb 07 jari 45     /**
2 26 Feb 07 jari 46      * Updates the canvas data.
2 26 Feb 07 jari 47      */
2 26 Feb 07 jari 48     public void onDataChanged(IData data) {
2 26 Feb 07 jari 49   this.canvas.onDataChanged(data);
2 26 Feb 07 jari 50     }
2 26 Feb 07 jari 51     
2 26 Feb 07 jari 52     /**
2 26 Feb 07 jari 53      * Delegates the call to its canvas.
2 26 Feb 07 jari 54      */
2 26 Feb 07 jari 55     public void onMenuChanged(IDisplayMenu menu) {
2 26 Feb 07 jari 56   this.canvas.onMenuChanged(menu);
2 26 Feb 07 jari 57     }
2 26 Feb 07 jari 58     
2 26 Feb 07 jari 59     /**
2 26 Feb 07 jari 60      * Creates the tumbnail canvas.
2 26 Feb 07 jari 61      */
2 26 Feb 07 jari 62     private Canvas createCanvas(IFramework framework, MouseListener listener) {
2 26 Feb 07 jari 63   Canvas canvas = new Canvas(framework);
2 26 Feb 07 jari 64   canvas.setBackground(Color.white);
2 26 Feb 07 jari 65   canvas.addMouseListener(listener);
2 26 Feb 07 jari 66   return canvas;
2 26 Feb 07 jari 67     }
2 26 Feb 07 jari 68     
2 26 Feb 07 jari 69     /**
2 26 Feb 07 jari 70      * The class to draw microarrays data.
2 26 Feb 07 jari 71      */
2 26 Feb 07 jari 72     private class Canvas extends JPanel {
2 26 Feb 07 jari 73   private IFramework framework;
2 26 Feb 07 jari 74   private IData data;
2 26 Feb 07 jari 75   private int elementHeight = 5;
2 26 Feb 07 jari 76   private float maxRatio;
2 26 Feb 07 jari 77   private float minRatio;
2 26 Feb 07 jari 78   
2 26 Feb 07 jari 79   /**
2 26 Feb 07 jari 80    * Constructs a <code>Canvas</code> with specified reference to the framework.
2 26 Feb 07 jari 81    */
2 26 Feb 07 jari 82   public Canvas(IFramework framework) {
2 26 Feb 07 jari 83       this.framework = framework;
2 26 Feb 07 jari 84       this.data = framework.getData();
2 26 Feb 07 jari 85       this.maxRatio = framework.getDisplayMenu().getMaxRatioScale();
2 26 Feb 07 jari 86       this.minRatio = framework.getDisplayMenu().getMinRatioScale();
2 26 Feb 07 jari 87   }
2 26 Feb 07 jari 88   
2 26 Feb 07 jari 89   /**
2 26 Feb 07 jari 90    * Updates the canvas data.
2 26 Feb 07 jari 91    */
2 26 Feb 07 jari 92   public void onDataChanged(IData data) {
2 26 Feb 07 jari 93       this.data = data;
2 26 Feb 07 jari 94       repaint();
2 26 Feb 07 jari 95   }
2 26 Feb 07 jari 96   
2 26 Feb 07 jari 97   /**
2 26 Feb 07 jari 98    * Updates the canvas attributies.
2 26 Feb 07 jari 99    */
2 26 Feb 07 jari 100   public void onMenuChanged(IDisplayMenu menu) {
2 26 Feb 07 jari 101       this.elementHeight = menu.getElementSize().height;
2 26 Feb 07 jari 102       this.maxRatio = menu.getMaxRatioScale();
2 26 Feb 07 jari 103       this.minRatio = menu.getMinRatioScale();
2 26 Feb 07 jari 104       repaint();
2 26 Feb 07 jari 105   }
2 26 Feb 07 jari 106   
2 26 Feb 07 jari 107   /**
2 26 Feb 07 jari 108    * Sets the framework content position into a specified y coordinate.
2 26 Feb 07 jari 109    */
2 26 Feb 07 jari 110   private void setContentPosition(int mouseY) {
2 26 Feb 07 jari 111       framework.setContentLocation(0, (this.elementHeight*this.data.getFeaturesSize()*mouseY)/getHeight());
2 26 Feb 07 jari 112   }
2 26 Feb 07 jari 113   
2 26 Feb 07 jari 114   /**
2 26 Feb 07 jari 115    * Paints the canvas into specified graphics.
2 26 Feb 07 jari 116    */
2 26 Feb 07 jari 117   public void paint(Graphics g) {
2 26 Feb 07 jari 118       super.paint(g);
2 26 Feb 07 jari 119       final int COLUMNS = this.data.getFeaturesCount();
2 26 Feb 07 jari 120       final int ROWS    = this.data.getFeaturesSize();
2 26 Feb 07 jari 121       float width  = (float)getWidth()/(float)COLUMNS;
2 26 Feb 07 jari 122       float height = (float)getHeight()/(float)ROWS;
2 26 Feb 07 jari 123       int eHeight = (int)height > 0 ? (int)height : 1;
2 26 Feb 07 jari 124       int[] indices;
2 26 Feb 07 jari 125       int x, y;
2 26 Feb 07 jari 126       float ratio;
2 26 Feb 07 jari 127       for (int column=0; column<COLUMNS; column++) {
2 26 Feb 07 jari 128     indices = data.getSortedIndices(column);
2 26 Feb 07 jari 129     for (int row=0; row<ROWS; row++) {
2 26 Feb 07 jari 130         x = Math.round(width*column);
2 26 Feb 07 jari 131         y = Math.round(height*row);
2 26 Feb 07 jari 132         ratio = data.getRatio(column, indices[row], IData.LOG);
2 26 Feb 07 jari 133         drawElement(g, x, y, Math.round(width), eHeight, ratio);
2 26 Feb 07 jari 134     }
2 26 Feb 07 jari 135       }
2 26 Feb 07 jari 136   }
2 26 Feb 07 jari 137   
2 26 Feb 07 jari 138   /**
2 26 Feb 07 jari 139    * Draws an element with specified parameters.
2 26 Feb 07 jari 140    */
2 26 Feb 07 jari 141   private void drawElement(Graphics g, int x, int y, int width, int height, float ratio) {
2 26 Feb 07 jari 142       Color holdColor;
2 26 Feb 07 jari 143       if (ratio > 0) {
2 26 Feb 07 jari 144     ratio = (float)Math.abs(ratio/this.maxRatio);
2 26 Feb 07 jari 145     ratio = ratio > 1f ? 1f : ratio;
2 26 Feb 07 jari 146     holdColor = new Color(ratio, 0, 0);
2 26 Feb 07 jari 147       } else if (ratio < 0) {
2 26 Feb 07 jari 148     ratio = (float)Math.abs(ratio/this.minRatio);
2 26 Feb 07 jari 149     ratio = ratio > 1f ? 1f : ratio;
2 26 Feb 07 jari 150     holdColor = new Color(0, ratio, 0);
2 26 Feb 07 jari 151       } else {
2 26 Feb 07 jari 152     //holdColor = new Color(0, 0, 0);
2 26 Feb 07 jari 153     holdColor = new Color(128, 128, 128);
2 26 Feb 07 jari 154       }
2 26 Feb 07 jari 155       g.setColor(holdColor);
2 26 Feb 07 jari 156       g.fillRect(x, y, width, height);
2 26 Feb 07 jari 157   }
2 26 Feb 07 jari 158     }
2 26 Feb 07 jari 159     
2 26 Feb 07 jari 160     /**
2 26 Feb 07 jari 161      * Mouse events listener.
2 26 Feb 07 jari 162      */
2 26 Feb 07 jari 163     private class Listener extends MouseAdapter {
2 26 Feb 07 jari 164   public void mouseClicked(MouseEvent event) {
2 26 Feb 07 jari 165       canvas.setContentPosition(event.getY());
2 26 Feb 07 jari 166   }
2 26 Feb 07 jari 167     }
2 26 Feb 07 jari 168 }