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

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * CGHPositionGraphCanvas.java
2 26 Feb 07 jari 3  *
2 26 Feb 07 jari 4  * Created on March 18, 2003, 9:30 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.Dimension;
2 26 Feb 07 jari 10 import java.awt.Graphics;
2 26 Feb 07 jari 11 import java.awt.Graphics2D;
2 26 Feb 07 jari 12 import java.awt.Insets;
2 26 Feb 07 jari 13 import java.awt.Point;
2 26 Feb 07 jari 14 import java.awt.Rectangle;
2 26 Feb 07 jari 15 import java.awt.event.ActionListener;
2 26 Feb 07 jari 16 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 import org.tigr.microarray.mev.cgh.CGHDataObj.CGHDataRegionInfo;
2 26 Feb 07 jari 19 import org.tigr.microarray.mev.cgh.CGHDataObj.FlankingRegion;
2 26 Feb 07 jari 20 import org.tigr.microarray.mev.cgh.CGHGuiObj.GuiUtil.PositionDataRegionClickedPopup;
2 26 Feb 07 jari 21
2 26 Feb 07 jari 22 /**
2 26 Feb 07 jari 23  *
2 26 Feb 07 jari 24  * @author  Adam Margolin
2 26 Feb 07 jari 25  * @author Raktim Sinha
2 26 Feb 07 jari 26  */
2 26 Feb 07 jari 27
2 26 Feb 07 jari 28 public class CGHPositionGraphSeparatedCanvas extends CGHPositionGraphCanvas implements ActionListener{
2 26 Feb 07 jari 29
2 26 Feb 07 jari 30     PositionDataRegionClickedPopup regionClickedPopup;
2 26 Feb 07 jari 31
2 26 Feb 07 jari 32     public static final int AMPLIFICATIONS = 0;
2 26 Feb 07 jari 33     public static final int DELETIONS = 1;
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35     boolean isReversed = false;
2 26 Feb 07 jari 36     private int flankingRegionType = AMPLIFICATIONS;
2 26 Feb 07 jari 37
2 26 Feb 07 jari 38     /** Creates a new instance of CGHPositionGraphCanvas */
2 26 Feb 07 jari 39     public CGHPositionGraphSeparatedCanvas(Insets insets) {
2 26 Feb 07 jari 40         super(insets);
2 26 Feb 07 jari 41         regionClickedPopup = new PositionDataRegionClickedPopup(this);
2 26 Feb 07 jari 42     }
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44     public CGHPositionGraphSeparatedCanvas(Insets insets, boolean isReversed, int flankingRegionType) {
2 26 Feb 07 jari 45         super(insets);
2 26 Feb 07 jari 46         regionClickedPopup = new PositionDataRegionClickedPopup(this);
2 26 Feb 07 jari 47         this.flankingRegionType = flankingRegionType;
2 26 Feb 07 jari 48         this.isReversed = isReversed;
2 26 Feb 07 jari 49     }
2 26 Feb 07 jari 50
2 26 Feb 07 jari 51     public void paint(Graphics g) {
2 26 Feb 07 jari 52         super.paint(g);
2 26 Feb 07 jari 53         Graphics2D g2D = (Graphics2D)g;
2 26 Feb 07 jari 54         drawColumns(g2D);
2 26 Feb 07 jari 55     }
2 26 Feb 07 jari 56
2 26 Feb 07 jari 57     private void drawColumns(Graphics2D g) {
2 26 Feb 07 jari 58         for (int column = 0; column < model.getNumExperiments(); column++) {
2 26 Feb 07 jari 59             drawColumn(g, model.getExperimentIndexAt(column));
2 26 Feb 07 jari 60         }
2 26 Feb 07 jari 61     }
2 26 Feb 07 jari 62
2 26 Feb 07 jari 63     /**
2 26 Feb 07 jari 64      * Draws a specified column.
2 26 Feb 07 jari 65      */
2 26 Feb 07 jari 66     private void drawColumn(Graphics2D g, int column) {
2 26 Feb 07 jari 67         int columnIndex = model.getExperimentIndexAt(column);
2 26 Feb 07 jari 68         //if(isReversed){
2 26 Feb 07 jari 69         //    for(int flankingRegion = model.getNumFlankingRegions(columnIndex) - 1; flankingRegion >= 0; flankingRegion--){
2 26 Feb 07 jari 70         //        drawFlankingRegion(g, flankingRegion, column, columnIndex);
2 26 Feb 07 jari 71         //    }
2 26 Feb 07 jari 72         //}else{
2 26 Feb 07 jari 73             for(int flankingRegion = 0; flankingRegion < model.getNumFlankingRegions(columnIndex); flankingRegion++){
2 26 Feb 07 jari 74                 drawFlankingRegion(g, flankingRegion, column, columnIndex);
2 26 Feb 07 jari 75             }
2 26 Feb 07 jari 76         //}
2 26 Feb 07 jari 77     }
2 26 Feb 07 jari 78
2 26 Feb 07 jari 79
2 26 Feb 07 jari 80     private void drawFlankingRegion(Graphics2D g2, int frIndex, int column, int columnIndex){
2 26 Feb 07 jari 81
2 26 Feb 07 jari 82         FlankingRegion fr = model.getFlankingRegionAt(columnIndex, frIndex);
2 26 Feb 07 jari 83
2 26 Feb 07 jari 84         if(flankingRegionType == DELETIONS && fr.getType() == FlankingRegion.AMPLIFICATION){
2 26 Feb 07 jari 85             return;
2 26 Feb 07 jari 86         }
2 26 Feb 07 jari 87
2 26 Feb 07 jari 88         if(flankingRegionType == AMPLIFICATIONS && fr.getType() == FlankingRegion.DELETION){
2 26 Feb 07 jari 89             return;
2 26 Feb 07 jari 90         }
2 26 Feb 07 jari 91
2 26 Feb 07 jari 92         int frStart = fr.getStart();
2 26 Feb 07 jari 93         int frStop = fr.getStop();
2 26 Feb 07 jari 94
2 26 Feb 07 jari 95         Dimension d = getSize();
2 26 Feb 07 jari 96
2 26 Feb 07 jari 97         double width = d.width;
2 26 Feb 07 jari 98         double height = d.height - 50;
2 26 Feb 07 jari 99
2 26 Feb 07 jari 100         double maxVal = model.getMaxClonePosition();
2 26 Feb 07 jari 101
2 26 Feb 07 jari 102         int rectX = insets.left + column * (elementWidth + rectSpacing);
2 26 Feb 07 jari 103
2 26 Feb 07 jari 104         if(isReversed){
2 26 Feb 07 jari 105             //System.out.println("Panel width " + getWidth());
2 26 Feb 07 jari 106             //System.out.println("Panel preferred width " + getPreferredSize().getWidth());
2 26 Feb 07 jari 107             //System.out.println("Panel size width " + getSize().getWidth());
2 26 Feb 07 jari 108             //rectX = getWidth() - rectX - elementWidth;
2 26 Feb 07 jari 109             //rectX = getWidth() - ( (model.getNumExperiments() - column - 1)* (elementWidth + rectSpacing) ) - insets.right;
2 26 Feb 07 jari 110
2 26 Feb 07 jari 111             rectX = getWidth() - elementWidth - insets.right - ( (model.getNumExperiments() - column - 1)* (elementWidth + rectSpacing) );
2 26 Feb 07 jari 112         }
2 26 Feb 07 jari 113
2 26 Feb 07 jari 114         int rectY = (int) (insets.top + frStart * unitLength);
2 26 Feb 07 jari 115         double dRectHeight = (frStop - frStart) * unitLength;
2 26 Feb 07 jari 116         int rectHeight;
2 26 Feb 07 jari 117         if(dRectHeight < 1 && dRectHeight > 0){
2 26 Feb 07 jari 118             rectHeight = 1;
2 26 Feb 07 jari 119         }else{
2 26 Feb 07 jari 120             rectHeight = (int)dRectHeight;
2 26 Feb 07 jari 121         }
2 26 Feb 07 jari 122
2 26 Feb 07 jari 123         Rectangle curRect = new Rectangle(rectX, rectY, elementWidth, rectHeight);
2 26 Feb 07 jari 124
2 26 Feb 07 jari 125         g2.setPaint(model.getFlankingRegionColor(columnIndex, frIndex));
2 26 Feb 07 jari 126         g2.fill(curRect);
2 26 Feb 07 jari 127     }
2 26 Feb 07 jari 128
2 26 Feb 07 jari 129     /** Getter for property isReversed.
2 26 Feb 07 jari 130      * @return Value of property isReversed.
2 26 Feb 07 jari 131      */
2 26 Feb 07 jari 132     public boolean isIsReversed() {
2 26 Feb 07 jari 133         return isReversed;
2 26 Feb 07 jari 134     }
2 26 Feb 07 jari 135
2 26 Feb 07 jari 136     /** Setter for property isReversed.
2 26 Feb 07 jari 137      * @param isReversed New value of property isReversed.
2 26 Feb 07 jari 138      */
2 26 Feb 07 jari 139     public void setIsReversed(boolean isReversed) {
2 26 Feb 07 jari 140         this.isReversed = isReversed;
2 26 Feb 07 jari 141     }
2 26 Feb 07 jari 142
2 26 Feb 07 jari 143     /** Getter for property flankingRegionType.
2 26 Feb 07 jari 144      * @return Value of property flankingRegionType.
2 26 Feb 07 jari 145      */
2 26 Feb 07 jari 146     public int getFlankingRegionType() {
2 26 Feb 07 jari 147         return flankingRegionType;
2 26 Feb 07 jari 148     }
2 26 Feb 07 jari 149
2 26 Feb 07 jari 150     /** Setter for property flankingRegionType.
2 26 Feb 07 jari 151      * @param flankingRegionType New value of property flankingRegionType.
2 26 Feb 07 jari 152      */
2 26 Feb 07 jari 153     public void setFlankingRegionType(int flankingRegionType) {
2 26 Feb 07 jari 154         this.flankingRegionType = flankingRegionType;
2 26 Feb 07 jari 155     }
2 26 Feb 07 jari 156
2 26 Feb 07 jari 157
2 26 Feb 07 jari 158     protected void formMouseClicked(java.awt.event.MouseEvent evt) {
2 26 Feb 07 jari 159         if(evt.getButton() == MouseEvent.BUTTON3  ){
2 26 Feb 07 jari 160         //if(evt.isPopupTrigger() ){
2 26 Feb 07 jari 161             Point point = evt.getPoint();
2 26 Feb 07 jari 162
2 26 Feb 07 jari 163             int selectedColumn = getSelectedColumn(point.x);
2 26 Feb 07 jari 164             int selectedPosition = getSelectedPosition(point.y);
2 26 Feb 07 jari 165
2 26 Feb 07 jari 166             if(selectedColumn == -1  || selectedPosition < 0 || selectedPosition > model.getMaxClonePosition()){
2 26 Feb 07 jari 167                 selectedDataRegion = null;
2 26 Feb 07 jari 168                 return;
2 26 Feb 07 jari 169             }
2 26 Feb 07 jari 170
2 26 Feb 07 jari 171             int experimentIndex = model.getExperimentIndexAt(selectedColumn);
2 26 Feb 07 jari 172
2 26 Feb 07 jari 173             selectedDataRegion = getFlankingRegionAtLocation(experimentIndex, selectedPosition);
2 26 Feb 07 jari 174
2 26 Feb 07 jari 175             if(selectedDataRegion != null){
2 26 Feb 07 jari 176                 regionClickedPopup.show(evt.getComponent(), evt.getX(), evt.getY());
2 26 Feb 07 jari 177             }
2 26 Feb 07 jari 178
2 26 Feb 07 jari 179         }
2 26 Feb 07 jari 180         /*
2 26 Feb 07 jari 181         if(selectedDataRegion != null){
2 26 Feb 07 jari 182             System.out.println("Type " + selectedDataRegion.getDataRegion().getClass());
2 26 Feb 07 jari 183             System.out.println("Exp Index " + selectedDataRegion.getExperimentIndex());
2 26 Feb 07 jari 184         }else{
2 26 Feb 07 jari 185             System.out.println("Null");
2 26 Feb 07 jari 186         }*/
2 26 Feb 07 jari 187     }
2 26 Feb 07 jari 188
2 26 Feb 07 jari 189     private int getSelectedColumn(int xCoord){
2 26 Feb 07 jari 190         //Calculate if the point falls in any column
2 26 Feb 07 jari 191         if(!isReversed){
2 26 Feb 07 jari 192             for(int column = 0; column < model.getNumExperiments(); column++){
2 26 Feb 07 jari 193                 int rectX = insets.left + column * (elementWidth + rectSpacing);
2 26 Feb 07 jari 194                 if(xCoord >= rectX && xCoord <= rectX + elementWidth){
2 26 Feb 07 jari 195                     return column;
2 26 Feb 07 jari 196                 }
2 26 Feb 07 jari 197             }
2 26 Feb 07 jari 198         }else{
2 26 Feb 07 jari 199             for(int column = 0; column < model.getNumExperiments(); column++){
2 26 Feb 07 jari 200                 //int rectX = insets.left + column * (elementWidth + rectSpacing);
2 26 Feb 07 jari 201                 //rectX = getWidth() - rectX - elementWidth;
2 26 Feb 07 jari 202
2 26 Feb 07 jari 203                 int rectX = getWidth() - elementWidth - insets.right - ( (model.getNumExperiments() - column - 1)* (elementWidth + rectSpacing) );
2 26 Feb 07 jari 204
2 26 Feb 07 jari 205                 if(xCoord >= rectX && xCoord <= rectX + elementWidth){
2 26 Feb 07 jari 206                     return column;
2 26 Feb 07 jari 207                 }
2 26 Feb 07 jari 208             }
2 26 Feb 07 jari 209         }
2 26 Feb 07 jari 210         return -1;
2 26 Feb 07 jari 211     }
2 26 Feb 07 jari 212
2 26 Feb 07 jari 213     private int getSelectedPosition(int yCoord){
2 26 Feb 07 jari 214         return (int) ((yCoord - insets.top) / unitLength);
2 26 Feb 07 jari 215     }
2 26 Feb 07 jari 216
2 26 Feb 07 jari 217     private CGHDataRegionInfo getFlankingRegionAtLocation(int experimentIndex, int selectedPosition){
2 26 Feb 07 jari 218
2 26 Feb 07 jari 219         int selectedFrIndex = -1;
2 26 Feb 07 jari 220         for(int i = 0; i < model.getNumFlankingRegions(experimentIndex); i++){
2 26 Feb 07 jari 221             FlankingRegion fr = model.getFlankingRegionAt(experimentIndex, i);
2 26 Feb 07 jari 222             if(selectedPosition >= fr.getStart() && selectedPosition <= fr.getStop() && fr.getType() == this.flankingRegionType){
2 26 Feb 07 jari 223                 selectedFrIndex = i;
2 26 Feb 07 jari 224             }
2 26 Feb 07 jari 225         }
2 26 Feb 07 jari 226
2 26 Feb 07 jari 227         if(selectedFrIndex != -1){
2 26 Feb 07 jari 228             FlankingRegion fr = model.getFlankingRegionAt(experimentIndex, selectedFrIndex);
2 26 Feb 07 jari 229             return new CGHDataRegionInfo(fr, experimentIndex);
2 26 Feb 07 jari 230         }
2 26 Feb 07 jari 231
2 26 Feb 07 jari 232         return null;
2 26 Feb 07 jari 233     }
2 26 Feb 07 jari 234
2 26 Feb 07 jari 235  }