mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/pca/PCADummyViewer.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * PCADummyViewer.java
2 26 Feb 07 jari 3  *
2 26 Feb 07 jari 4  * Created on December 16, 2004, 10:47 AM
2 26 Feb 07 jari 5  */
2 26 Feb 07 jari 6
2 26 Feb 07 jari 7 package org.tigr.microarray.mev.cluster.gui.impl.pca;
2 26 Feb 07 jari 8
2 26 Feb 07 jari 9 import java.awt.Component;
2 26 Feb 07 jari 10 import java.awt.Frame;
2 26 Feb 07 jari 11 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 12 import java.awt.event.ActionListener;
2 26 Feb 07 jari 13 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 14 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 15 import java.beans.Expression;
2 26 Feb 07 jari 16
2 26 Feb 07 jari 17 import javax.swing.JFrame;
2 26 Feb 07 jari 18 import javax.swing.JMenuItem;
2 26 Feb 07 jari 19 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 20 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 21
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.gui.LeafInfo;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.gui.impl.ViewerAdapter;
2 26 Feb 07 jari 26 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 27
2 26 Feb 07 jari 28 /**
2 26 Feb 07 jari 29  *
2 26 Feb 07 jari 30  * @author  nbhagaba
2 26 Feb 07 jari 31  */
2 26 Feb 07 jari 32 public class PCADummyViewer extends ViewerAdapter {
2 26 Feb 07 jari 33    
2 26 Feb 07 jari 34     private static final String ADD_NEW_3D_CMD = "add-new-3d-cmd";
2 26 Feb 07 jari 35     private static final String ADD_NEW_2D_CMD = "add-new-2d-cmd";    
2 26 Feb 07 jari 36     private JPopupMenu popup;
2 26 Feb 07 jari 37     private IFramework framework;    
2 26 Feb 07 jari 38     private FloatMatrix U, S;
2 26 Feb 07 jari 39     private int mode;
2 26 Feb 07 jari 40     //private Experiment experiment;    
2 26 Feb 07 jari 41     
2 26 Feb 07 jari 42     /** Creates a new instance of PCADummyViewer */
2 26 Feb 07 jari 43     public PCADummyViewer(FloatMatrix U, FloatMatrix S, int mode) {
2 26 Feb 07 jari 44         //this.experiment = experiment;
2 26 Feb 07 jari 45         this.U = U;
2 26 Feb 07 jari 46         this.S = S;
2 26 Feb 07 jari 47         this.mode = mode;
2 26 Feb 07 jari 48         popup = createJPopupMenu();
2 26 Feb 07 jari 49     }
2 26 Feb 07 jari 50     
2 26 Feb 07 jari 51     public PCADummyViewer(FloatMatrix U, FloatMatrix S, Integer mode){
2 26 Feb 07 jari 52       this(U, S, mode.intValue());
2 26 Feb 07 jari 53
2 26 Feb 07 jari 54     }    
2 26 Feb 07 jari 55     /**
2 26 Feb 07 jari 56      * @inheritDoc
2 26 Feb 07 jari 57      */
2 26 Feb 07 jari 58     public Expression getExpression(){
2 26 Feb 07 jari 59       return new Expression(this, this.getClass(), "new", 
2 26 Feb 07 jari 60           new Object[]{U, S, new Integer(mode)});
2 26 Feb 07 jari 61     }  
2 26 Feb 07 jari 62     
2 26 Feb 07 jari 63     public void onSelected(IFramework framework) {
2 26 Feb 07 jari 64         this.framework = framework;        
2 26 Feb 07 jari 65         //In case it is viewed after serialization
2 26 Feb 07 jari 66         if(popup == null){
2 26 Feb 07 jari 67             popup = createJPopupMenu(); 
2 26 Feb 07 jari 68             DefaultMutableTreeNode node = framework.getCurrentNode();
2 26 Feb 07 jari 69             if(node != null){
2 26 Feb 07 jari 70                 if(node.getUserObject() instanceof LeafInfo){
2 26 Feb 07 jari 71                     LeafInfo leafInfo = (LeafInfo) node.getUserObject();
2 26 Feb 07 jari 72                     leafInfo.setPopupMenu(this.popup);
2 26 Feb 07 jari 73                 }
2 26 Feb 07 jari 74             }
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      * Returns the viewer popup menu.
2 26 Feb 07 jari 80      */
2 26 Feb 07 jari 81     public JPopupMenu getJPopupMenu() {
2 26 Feb 07 jari 82         return popup;
2 26 Feb 07 jari 83     }   
2 26 Feb 07 jari 84     
2 26 Feb 07 jari 85     /**
2 26 Feb 07 jari 86      * Creates the viewer popup menu.
2 26 Feb 07 jari 87      */
2 26 Feb 07 jari 88     private JPopupMenu createJPopupMenu() {
2 26 Feb 07 jari 89         JPopupMenu popup = new JPopupMenu();
2 26 Feb 07 jari 90         addMenuItems(popup);
2 26 Feb 07 jari 91         return popup;
2 26 Feb 07 jari 92     }    
2 26 Feb 07 jari 93     
2 26 Feb 07 jari 94     private void addMenuItems(JPopupMenu menu) {  
2 26 Feb 07 jari 95         Listener listener = new Listener();
2 26 Feb 07 jari 96         
2 26 Feb 07 jari 97         JMenuItem menuItem;
2 26 Feb 07 jari 98         menuItem = new JMenuItem("Add new 3-axis projections");
2 26 Feb 07 jari 99         menuItem.setActionCommand("add-new-3d-cmd");
2 26 Feb 07 jari 100         menuItem.addActionListener(listener);
2 26 Feb 07 jari 101         menu.add(menuItem);
2 26 Feb 07 jari 102                 
2 26 Feb 07 jari 103         menuItem = new JMenuItem("Add new 2-axis projections");
2 26 Feb 07 jari 104         menuItem.setActionCommand("add-new-2d-cmd");
2 26 Feb 07 jari 105         menuItem.addActionListener(listener);        
2 26 Feb 07 jari 106         menu.add(menuItem);    
2 26 Feb 07 jari 107     }  
2 26 Feb 07 jari 108     
2 26 Feb 07 jari 109     /**
2 26 Feb 07 jari 110      * Returns a menu item by specified action command.
2 26 Feb 07 jari 111      */
2 26 Feb 07 jari 112     private JMenuItem getJMenuItem(String command) {
2 26 Feb 07 jari 113         JMenuItem item;
2 26 Feb 07 jari 114         Component[] components = popup.getComponents();
2 26 Feb 07 jari 115         for (int i=0; i<components.length; i++) {
2 26 Feb 07 jari 116             if (components[i] instanceof JMenuItem) {
2 26 Feb 07 jari 117                 if (((JMenuItem)components[i]).getActionCommand().equals(command))
2 26 Feb 07 jari 118                     return(JMenuItem)components[i];
2 26 Feb 07 jari 119             }
2 26 Feb 07 jari 120         }
2 26 Feb 07 jari 121         return null;
2 26 Feb 07 jari 122     }    
2 26 Feb 07 jari 123     
2 26 Feb 07 jari 124    private void add2DViewNode(DefaultMutableTreeNode node, Experiment experiment, int xAxis, int yAxis, int zAxis) {
2 26 Feb 07 jari 125        boolean geneViewer = false;
2 26 Feb 07 jari 126        
2 26 Feb 07 jari 127        if (mode == 1) 
2 26 Feb 07 jari 128            geneViewer = true;
2 26 Feb 07 jari 129        else if (mode == 3)
2 26 Feb 07 jari 130            geneViewer = false;
2 26 Feb 07 jari 131        
2 26 Feb 07 jari 132        PCA2DViewer pcaxy = new PCA2DViewer(experiment, U, geneViewer, xAxis, yAxis);
2 26 Feb 07 jari 133        PCA2DViewer pcayz = new PCA2DViewer(experiment, U, geneViewer, yAxis, zAxis);
2 26 Feb 07 jari 134        PCA2DViewer pcaxz = new PCA2DViewer(experiment, U, geneViewer, xAxis, zAxis);
2 26 Feb 07 jari 135        
2 26 Feb 07 jari 136        node.add(new DefaultMutableTreeNode(new LeafInfo("" + (xAxis + 1) + ", " + (yAxis + 1), pcaxy, pcaxy.getJPopupMenu())));
2 26 Feb 07 jari 137        node.add(new DefaultMutableTreeNode(new LeafInfo("" + (yAxis + 1) + ", " + (zAxis + 1), pcayz, pcayz.getJPopupMenu())));
2 26 Feb 07 jari 138        node.add(new DefaultMutableTreeNode(new LeafInfo("" + (xAxis + 1) + ", " + (zAxis + 1), pcaxz, pcaxz.getJPopupMenu()))); 
2 26 Feb 07 jari 139    }    
2 26 Feb 07 jari 140    
2 26 Feb 07 jari 141     private void add3DViewNode(Frame frame, DefaultMutableTreeNode node, Experiment experiment, int xAxis, int yAxis, int zAxis) {
2 26 Feb 07 jari 142         if (U == null || U.getColumnDimension() < 3) {
2 26 Feb 07 jari 143             return;
2 26 Feb 07 jari 144         }
2 26 Feb 07 jari 145         PCA3DViewer pca3DViewer;
2 26 Feb 07 jari 146         if(mode == 1)
2 26 Feb 07 jari 147             pca3DViewer = new PCA3DViewer(frame, mode, U, experiment, true, xAxis, yAxis, zAxis);
2 26 Feb 07 jari 148         else
2 26 Feb 07 jari 149             pca3DViewer = new PCA3DViewer(frame, mode, U, experiment, false, xAxis, yAxis, zAxis);
2 26 Feb 07 jari 150         
2 26 Feb 07 jari 151         node.add(new DefaultMutableTreeNode(new LeafInfo("3D view", pca3DViewer, pca3DViewer.getJPopupMenu())));
2 26 Feb 07 jari 152     }   
2 26 Feb 07 jari 153     
2 26 Feb 07 jari 154     private void addNew3DNode() {
2 26 Feb 07 jari 155         if (S == null) {
2 26 Feb 07 jari 156             return;
2 26 Feb 07 jari 157         }
2 26 Feb 07 jari 158         PCAAdditional3DAxesDialog pd = new PCAAdditional3DAxesDialog((JFrame)framework.getFrame(), true, S.getRowDimension());
2 26 Feb 07 jari 159         pd.setVisible(true);
2 26 Feb 07 jari 160         if (!pd.isOkPressed()) {
2 26 Feb 07 jari 161             return;
2 26 Feb 07 jari 162         } else {
2 26 Feb 07 jari 163             int selectedX = pd.getXAxis();
2 26 Feb 07 jari 164             int selectedY = pd.getYAxis();
2 26 Feb 07 jari 165             int selectedZ = pd.getZAxis();
2 26 Feb 07 jari 166             
2 26 Feb 07 jari 167             DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("Components " + (selectedX + 1) + ", " + (selectedY + 1) + ", " + (selectedZ + 1));
2 26 Feb 07 jari 168             add3DViewNode(framework.getFrame(), newNode, framework.getData().getExperiment(), selectedX, selectedY, selectedZ);
2 26 Feb 07 jari 169             DefaultMutableTreeNode twoDNode = new DefaultMutableTreeNode("2D Views");
2 26 Feb 07 jari 170             add2DViewNode(twoDNode, framework.getData().getExperiment(), selectedX, selectedY, selectedZ);
2 26 Feb 07 jari 171             newNode.add(twoDNode);   
2 26 Feb 07 jari 172             framework.addNode(framework.getCurrentNode(), newNode);
2 26 Feb 07 jari 173         }
2 26 Feb 07 jari 174     }
2 26 Feb 07 jari 175     
2 26 Feb 07 jari 176     private void addNew2DNode() {
2 26 Feb 07 jari 177         if (S == null) {
2 26 Feb 07 jari 178             return;
2 26 Feb 07 jari 179         }
2 26 Feb 07 jari 180         PCAAdditional3DAxesDialog pd = new PCAAdditional3DAxesDialog((JFrame)framework.getFrame(), true, S.getRowDimension());
2 26 Feb 07 jari 181         pd.setZBoxInvisible(true);
2 26 Feb 07 jari 182         pd.setVisible(true);  
2 26 Feb 07 jari 183         if (!pd.isOkPressed()) {
2 26 Feb 07 jari 184             return;
2 26 Feb 07 jari 185         } else {
2 26 Feb 07 jari 186             int selectedX = pd.getXAxis();
2 26 Feb 07 jari 187             int selectedY = pd.getYAxis();
2 26 Feb 07 jari 188             //DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("Components " + (selectedX + 1) + ", " + (selectedY + 1));
2 26 Feb 07 jari 189             boolean geneViewer = false;            
2 26 Feb 07 jari 190             if (mode == 1)
2 26 Feb 07 jari 191                 geneViewer = true;
2 26 Feb 07 jari 192             else if (mode == 3)
2 26 Feb 07 jari 193                 geneViewer = false;
2 26 Feb 07 jari 194             
2 26 Feb 07 jari 195             PCA2DViewer pcaxy = new PCA2DViewer(framework.getData().getExperiment(), U, geneViewer, selectedX, selectedY); 
2 26 Feb 07 jari 196             framework.addNode(framework.getCurrentNode(), new DefaultMutableTreeNode(new LeafInfo("Components " + (selectedX + 1) + ", " + (selectedY + 1), pcaxy, pcaxy.getJPopupMenu())));
2 26 Feb 07 jari 197         }
2 26 Feb 07 jari 198     }    
2 26 Feb 07 jari 199     
2 26 Feb 07 jari 200     /**
2 26 Feb 07 jari 201      * The class to listen to dialog and algorithm events.
2 26 Feb 07 jari 202      */
2 26 Feb 07 jari 203     private class Listener extends MouseAdapter implements ActionListener {
2 26 Feb 07 jari 204         
2 26 Feb 07 jari 205         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 206             String command = e.getActionCommand();
2 26 Feb 07 jari 207             if (command.equals("add-new-3d-cmd")) {
2 26 Feb 07 jari 208                 addNew3DNode();
2 26 Feb 07 jari 209             } else if (command.equals("add-new-2d-cmd")) {
2 26 Feb 07 jari 210                 addNew2DNode();
2 26 Feb 07 jari 211             }
2 26 Feb 07 jari 212         }
2 26 Feb 07 jari 213         
2 26 Feb 07 jari 214   public void mouseReleased(MouseEvent event) {
2 26 Feb 07 jari 215       maybeShowPopup(event);
2 26 Feb 07 jari 216   }
2 26 Feb 07 jari 217   
2 26 Feb 07 jari 218   public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 219       maybeShowPopup(event);
2 26 Feb 07 jari 220   }
2 26 Feb 07 jari 221   
2 26 Feb 07 jari 222   private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 223             //System.out.println("maybeShowPopup");
2 26 Feb 07 jari 224       //if (!e.isPopupTrigger() || getCluster() == null || getCluster().length == 0) {
2 26 Feb 07 jari 225            if (!e.isPopupTrigger()) { 
2 26 Feb 07 jari 226     return;
2 26 Feb 07 jari 227       }
2 26 Feb 07 jari 228       popup.show(e.getComponent(), e.getX(), e.getY());
2 26 Feb 07 jari 229   }          
2 26 Feb 07 jari 230         
2 26 Feb 07 jari 231     }     
2 26 Feb 07 jari 232     
2 26 Feb 07 jari 233 }