mev-4.0.01/source/org/tigr/microarray/mev/cgh/CGHGuiObj/CGHPositionGraph/CytoBandsCanvas.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * CytoBandsPanel.java
2 26 Feb 07 jari 3  *
2 26 Feb 07 jari 4  * Created on March 18, 2003, 7:02 PM
2 26 Feb 07 jari 5  */
2 26 Feb 07 jari 6
2 26 Feb 07 jari 7 package org.tigr.microarray.mev.cgh.CGHGuiObj.CGHPositionGraph;
2 26 Feb 07 jari 8
2 26 Feb 07 jari 9 import java.awt.Color;
2 26 Feb 07 jari 10 import java.awt.Dimension;
2 26 Feb 07 jari 11 import java.awt.Font;
2 26 Feb 07 jari 12 import java.awt.Graphics;
2 26 Feb 07 jari 13 import java.awt.Graphics2D;
2 26 Feb 07 jari 14 import java.awt.Insets;
2 26 Feb 07 jari 15 import java.awt.geom.RoundRectangle2D;
2 26 Feb 07 jari 16
2 26 Feb 07 jari 17 import org.tigr.microarray.mev.cgh.CGHDataModel.CytoBandsModel;
2 26 Feb 07 jari 18 import org.tigr.microarray.mev.cgh.CGHDataObj.CytoBand;
2 26 Feb 07 jari 19
2 26 Feb 07 jari 20 /**
2 26 Feb 07 jari 21  *
2 26 Feb 07 jari 22  * @author  Adam Margolin
2 26 Feb 07 jari 23  * @author Raktim Sinha
2 26 Feb 07 jari 24  */
2 26 Feb 07 jari 25
2 26 Feb 07 jari 26 public class CytoBandsCanvas extends javax.swing.JPanel {
2 26 Feb 07 jari 27
2 26 Feb 07 jari 28     private Insets insets;
2 26 Feb 07 jari 29
2 26 Feb 07 jari 30     private double unitLength;
2 26 Feb 07 jari 31     int rectWidth = 80;
2 26 Feb 07 jari 32
2 26 Feb 07 jari 33     int origXOffset = 5;
2 26 Feb 07 jari 34     int origYOffset = 5;
2 26 Feb 07 jari 35
2 26 Feb 07 jari 36     int rectSpacing = 5;
2 26 Feb 07 jari 37
2 26 Feb 07 jari 38     int cytoBandWidth = 60;
2 26 Feb 07 jari 39
2 26 Feb 07 jari 40     int fontSize = 12;
2 26 Feb 07 jari 41
2 26 Feb 07 jari 42     CytoBandsModel model;
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44     int chromosomeIndex = 0;
2 26 Feb 07 jari 45
2 26 Feb 07 jari 46     int rulerOffset;
2 26 Feb 07 jari 47     int cytoBandsOffset;
2 26 Feb 07 jari 48
2 26 Feb 07 jari 49     public CytoBandsCanvas(Insets insets){
2 26 Feb 07 jari 50         //this.insets = new Insets(insets.top, 0, insets.bottom, 0);
2 26 Feb 07 jari 51         this.insets = insets;
2 26 Feb 07 jari 52         rulerOffset = insets.left + 20;
2 26 Feb 07 jari 53         cytoBandsOffset = rulerOffset + 10;
2 26 Feb 07 jari 54
2 26 Feb 07 jari 55         initComponents();
2 26 Feb 07 jari 56     }
2 26 Feb 07 jari 57
2 26 Feb 07 jari 58     private void initComponents(){
2 26 Feb 07 jari 59         setBackground(Color.black);
2 26 Feb 07 jari 60         //setPreferredSize(new Dimension(cytoBandWidth + insets.left + insets.right, 400));
2 26 Feb 07 jari 61         //setMaximumSize(new Dimension(cytoBandWidth + insets.left + insets.right, 10000));
2 26 Feb 07 jari 62         setPreferredSize(new Dimension(cytoBandWidth + cytoBandsOffset + insets.right, 400));
2 26 Feb 07 jari 63         setMaximumSize(new Dimension(cytoBandWidth + cytoBandsOffset + insets.right, 10000));
2 26 Feb 07 jari 64     }
2 26 Feb 07 jari 65
2 26 Feb 07 jari 66
2 26 Feb 07 jari 67     public void paint(Graphics g) {
2 26 Feb 07 jari 68         super.paint(g);
2 26 Feb 07 jari 69         Graphics2D g2 = (Graphics2D)g;
2 26 Feb 07 jari 70
2 26 Feb 07 jari 71         Dimension d = getSize();
2 26 Feb 07 jari 72
2 26 Feb 07 jari 73         double width = d.width;
2 26 Feb 07 jari 74         double height = d.height;
2 26 Feb 07 jari 75         //Draw the ruler on the side
2 26 Feb 07 jari 76         g2.setPaint(Color.white);
2 26 Feb 07 jari 77
2 26 Feb 07 jari 78         //int rulerX = (int) origXOffset - 15;
2 26 Feb 07 jari 79
2 26 Feb 07 jari 80
2 26 Feb 07 jari 81         g2.drawLine(rulerOffset, insets.top, rulerOffset, (int)height);
2 26 Feb 07 jari 82         //g2.setFont(new Font("", 0, 12));
2 26 Feb 07 jari 83         //g2.drawString("Position x 1,000,000", 5f, 15f);
2 26 Feb 07 jari 84         g2.setFont(new Font("", 0, 10));
2 26 Feb 07 jari 85         for(int i = 0; i < model.getMaxPosition(); i+= 10000000){
2 26 Feb 07 jari 86             String pos = i + "";
2 26 Feb 07 jari 87             String trimmedPos;
2 26 Feb 07 jari 88             if(pos.length() < 6){
2 26 Feb 07 jari 89                 trimmedPos = pos;
2 26 Feb 07 jari 90             }else{
2 26 Feb 07 jari 91                 trimmedPos = pos.substring(0, pos.length() - 6);
2 26 Feb 07 jari 92             }
2 26 Feb 07 jari 93             g2.drawString(trimmedPos, insets.left, (int) (insets.top + i * unitLength));
2 26 Feb 07 jari 94         }
2 26 Feb 07 jari 95
2 26 Feb 07 jari 96
2 26 Feb 07 jari 97         CytoBand curCytoBand;
2 26 Feb 07 jari 98         //Rectangle curRect;
2 26 Feb 07 jari 99         RoundRectangle2D curRect;
2 26 Feb 07 jari 100         for(int bandIndex = 0; bandIndex < model.getNumCytoBands(); bandIndex++){
2 26 Feb 07 jari 101             curCytoBand =  model.getCytoBandAt(bandIndex);
2 26 Feb 07 jari 102             int bandStart = curCytoBand.getChromStart();
2 26 Feb 07 jari 103             int bandStop = curCytoBand.getChromEnd();
2 26 Feb 07 jari 104
2 26 Feb 07 jari 105             int rectY = (int) (insets.top + bandStart * unitLength);
2 26 Feb 07 jari 106             double dRectHeight = (bandStop - bandStart) * unitLength;
2 26 Feb 07 jari 107             int rectHeight;
2 26 Feb 07 jari 108             if(dRectHeight < 1 && dRectHeight > 0){
2 26 Feb 07 jari 109                 rectHeight = 1;
2 26 Feb 07 jari 110             }else{
2 26 Feb 07 jari 111                 rectHeight = (int)dRectHeight;
2 26 Feb 07 jari 112             }
2 26 Feb 07 jari 113
2 26 Feb 07 jari 114             //curRect = new Rectangle(insets.left, rectY, cytoBandWidth, rectHeight);
2 26 Feb 07 jari 115             cytoBandsOffset = rulerOffset + 5;
2 26 Feb 07 jari 116             //curRect = new RoundRectangle2D.Float((float)insets.left, (float) rectY, (float) cytoBandWidth, (float) rectHeight,
2 26 Feb 07 jari 117             //    5f,5f);
2 26 Feb 07 jari 118             curRect = new RoundRectangle2D.Float(cytoBandsOffset, (float) rectY, (float) cytoBandWidth, (float) rectHeight,
2 26 Feb 07 jari 119                 5f,5f);
2 26 Feb 07 jari 120
2 26 Feb 07 jari 121             Color curCytoColor = model.getDataPointColor(bandIndex);
2 26 Feb 07 jari 122             g2.setPaint(curCytoColor);
2 26 Feb 07 jari 123             g2.fill(curRect);
2 26 Feb 07 jari 124
2 26 Feb 07 jari 125             if(curCytoColor == Color.darkGray){
2 26 Feb 07 jari 126                 g2.setColor(Color.white);
2 26 Feb 07 jari 127             }else{
2 26 Feb 07 jari 128                 g2.setColor(Color.black);
2 26 Feb 07 jari 129             }
2 26 Feb 07 jari 130
2 26 Feb 07 jari 131             int fontSize = 10;
2 26 Feb 07 jari 132             if(rectHeight < fontSize + 1){
2 26 Feb 07 jari 133                 fontSize = rectHeight - 1;
2 26 Feb 07 jari 134             }
2 26 Feb 07 jari 135
2 26 Feb 07 jari 136             int stringY = rectY + (rectHeight / 2) + (fontSize / 2);
2 26 Feb 07 jari 137
2 26 Feb 07 jari 138             g2.setFont(new Font("", 0, fontSize));
2 26 Feb 07 jari 139             //g2.drawString(curCytoBand.getName(), insets.left, stringY);
2 26 Feb 07 jari 140             g2.drawString(curCytoBand.getName(), cytoBandsOffset, stringY);
2 26 Feb 07 jari 141
2 26 Feb 07 jari 142         }
2 26 Feb 07 jari 143
2 26 Feb 07 jari 144         curCytoBand = null;
2 26 Feb 07 jari 145     }
2 26 Feb 07 jari 146
2 26 Feb 07 jari 147     /** Getter for property model.
2 26 Feb 07 jari 148      * @return Value of property model.
2 26 Feb 07 jari 149      */
2 26 Feb 07 jari 150     public CytoBandsModel getModel() {
2 26 Feb 07 jari 151         return model;
2 26 Feb 07 jari 152     }
2 26 Feb 07 jari 153
2 26 Feb 07 jari 154     /** Setter for property model.
2 26 Feb 07 jari 155      * @param model New value of property model.
2 26 Feb 07 jari 156      */
2 26 Feb 07 jari 157     public void setModel(CytoBandsModel model) {
2 26 Feb 07 jari 158         this.model = model;
2 26 Feb 07 jari 159     }
2 26 Feb 07 jari 160
2 26 Feb 07 jari 161     /** Getter for property chromosomeIndex.
2 26 Feb 07 jari 162      * @return Value of property chromosomeIndex.
2 26 Feb 07 jari 163      */
2 26 Feb 07 jari 164     public int getChromosomeIndex() {
2 26 Feb 07 jari 165         return chromosomeIndex;
2 26 Feb 07 jari 166     }
2 26 Feb 07 jari 167
2 26 Feb 07 jari 168     /** Setter for property chromosomeIndex.
2 26 Feb 07 jari 169      * @param chromosomeIndex New value of property chromosomeIndex.
2 26 Feb 07 jari 170      */
2 26 Feb 07 jari 171     public void setChromosomeIndex(int chromosomeIndex) {
2 26 Feb 07 jari 172         this.chromosomeIndex = chromosomeIndex;
2 26 Feb 07 jari 173     }
2 26 Feb 07 jari 174
2 26 Feb 07 jari 175     public void onSelected(){
2 26 Feb 07 jari 176         model.setChromosomeIndex(chromosomeIndex);
2 26 Feb 07 jari 177     }
2 26 Feb 07 jari 178
2 26 Feb 07 jari 179     /** Getter for property unitLength.
2 26 Feb 07 jari 180      * @return Value of property unitLength.
2 26 Feb 07 jari 181      */
2 26 Feb 07 jari 182     public double getUnitLength() {
2 26 Feb 07 jari 183         return unitLength;
2 26 Feb 07 jari 184     }
2 26 Feb 07 jari 185
2 26 Feb 07 jari 186     /** Setter for property unitLength.
2 26 Feb 07 jari 187      * @param unitLength New value of property unitLength.
2 26 Feb 07 jari 188      */
2 26 Feb 07 jari 189     public void setUnitLength(double unitLength) {
2 26 Feb 07 jari 190         this.unitLength = unitLength;
2 26 Feb 07 jari 191     }
2 26 Feb 07 jari 192
2 26 Feb 07 jari 193 }