mev-4.0.01/source/org/tigr/microarray/mev/script/scriptGUI/ScriptTreeRenderer.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2004, 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  * ScriptTreeRenderer.java
2 26 Feb 07 jari 7  *
2 26 Feb 07 jari 8  * Created on February 28, 2004, 4:42 PM
2 26 Feb 07 jari 9  */
2 26 Feb 07 jari 10
2 26 Feb 07 jari 11 package org.tigr.microarray.mev.script.scriptGUI;
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 import java.awt.AlphaComposite;
2 26 Feb 07 jari 14 import java.awt.Color;
2 26 Feb 07 jari 15 import java.awt.Component;
2 26 Feb 07 jari 16 import java.awt.Composite;
2 26 Feb 07 jari 17 import java.awt.Graphics;
2 26 Feb 07 jari 18 import java.awt.Graphics2D;
2 26 Feb 07 jari 19 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 20 import java.awt.GridBagLayout;
2 26 Feb 07 jari 21 import java.awt.Insets;
2 26 Feb 07 jari 22
2 26 Feb 07 jari 23 import javax.swing.BorderFactory;
2 26 Feb 07 jari 24 import javax.swing.Icon;
2 26 Feb 07 jari 25 import javax.swing.JLabel;
2 26 Feb 07 jari 26 import javax.swing.JPanel;
2 26 Feb 07 jari 27 import javax.swing.JTree;
2 26 Feb 07 jari 28 import javax.swing.tree.TreeCellRenderer;
2 26 Feb 07 jari 29
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.script.util.AlgorithmNode;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.script.util.DataNode;
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.script.util.ScriptConstants;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.script.util.ScriptNode;
2 26 Feb 07 jari 35
2 26 Feb 07 jari 36
2 26 Feb 07 jari 37 /** ScriptTreeRenderer renders the <CODE>ScriptTree</CODE> algorithm and data nodes.
2 26 Feb 07 jari 38  * @author braisted
2 26 Feb 07 jari 39  */
2 26 Feb 07 jari 40
2 26 Feb 07 jari 41 public class ScriptTreeRenderer implements TreeCellRenderer {
2 26 Feb 07 jari 42     
2 26 Feb 07 jari 43     private ScriptNodeLabel label;
2 26 Feb 07 jari 44   // private JLabel label;
2 26 Feb 07 jari 45     
2 26 Feb 07 jari 46     private JPanel labelPanel;
2 26 Feb 07 jari 47     private DataNode algSetRoot = null;
2 26 Feb 07 jari 48     private boolean highlightAlgSet = false;
2 26 Feb 07 jari 49     
2 26 Feb 07 jari 50     boolean showToolTips = true;
2 26 Feb 07 jari 51     
2 26 Feb 07 jari 52     private Icon scriptAnalysisIcon = GUIFactory.getIcon("ScriptAnalysis.gif");
2 26 Feb 07 jari 53     private Icon scriptGeneAnalysisIcon = GUIFactory.getIcon("ScriptGeneAlgorithm.gif");
2 26 Feb 07 jari 54     private Icon scriptExperimentAnalysisIcon = GUIFactory.getIcon("ScriptExperimentAlgorithm.gif");
2 26 Feb 07 jari 55     private Icon scriptClusterSelectionAnalysisIcon = GUIFactory.getIcon("ScriptClusterSelectionAlgorithm.gif");
2 26 Feb 07 jari 56     private Icon scriptAdjustmentAlgIcon = GUIFactory.getIcon("adjustment_algorithm.gif");
2 26 Feb 07 jari 57     private Icon scriptEmptyAnalysisIcon = GUIFactory.getIcon("TreeBallLeaf.gif");
2 26 Feb 07 jari 58     private Icon scriptVisAlgNodeIcon = GUIFactory.getIcon("ScriptVisAlgorithmNode.gif");
2 26 Feb 07 jari 59     
2 26 Feb 07 jari 60     private Icon scriptDataNodeIcon = GUIFactory.getIcon("ScriptDataNode.gif");
2 26 Feb 07 jari 61     private Icon scriptPrimaryDataNodeIcon = GUIFactory.getIcon("ScriptPrimaryDataNode.gif");
2 26 Feb 07 jari 62     private Icon scriptMultiDataNodeIcon = GUIFactory.getIcon("ScriptMultiDataNodeShaded.gif");
2 26 Feb 07 jari 63     
2 26 Feb 07 jari 64     private Color dataNodeColor;
2 26 Feb 07 jari 65     private Color algNodeColor;
2 26 Feb 07 jari 66     
2 26 Feb 07 jari 67     /** Creates a new instance of ScriptTreeRenderer */
2 26 Feb 07 jari 68     public ScriptTreeRenderer() {
2 26 Feb 07 jari 69         label = new ScriptNodeLabel();
2 26 Feb 07 jari 70    
2 26 Feb 07 jari 71         dataNodeColor = new Color(209, 248, 203);
2 26 Feb 07 jari 72         algNodeColor = new Color(255,255,195);
2 26 Feb 07 jari 73
2 26 Feb 07 jari 74         labelPanel = new JPanel(new GridBagLayout());
2 26 Feb 07 jari 75         labelPanel.setBackground(Color.white);
2 26 Feb 07 jari 76         labelPanel.add(label, new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(8,0,0,0), 5, 0));
2 26 Feb 07 jari 77     }
2 26 Feb 07 jari 78     
2 26 Feb 07 jari 79     public void clearHighlights() {
2 26 Feb 07 jari 80         this.highlightAlgSet = false;
2 26 Feb 07 jari 81         label.setScriptNodeHighlighted(false);
2 26 Feb 07 jari 82     }
2 26 Feb 07 jari 83     
2 26 Feb 07 jari 84     public void highlightAlgSet(DataNode algSetRoot) {
2 26 Feb 07 jari 85         this.highlightAlgSet = true;
2 26 Feb 07 jari 86         this.algSetRoot = algSetRoot;
2 26 Feb 07 jari 87     }
2 26 Feb 07 jari 88     
2 26 Feb 07 jari 89     
2 26 Feb 07 jari 90     /** Returns the component to display for a given
2 26 Feb 07 jari 91      * tree node.
2 26 Feb 07 jari 92      */
2 26 Feb 07 jari 93     public Component getTreeCellRendererComponent(JTree tree, Object value,
2 26 Feb 07 jari 94     boolean selected, boolean expanded, boolean isLeaf, int row, boolean hasFocus) {
2 26 Feb 07 jari 95         String text;
2 26 Feb 07 jari 96         
2 26 Feb 07 jari 97         //never show node selection if it's an alg set viewer
2 26 Feb 07 jari 98         if(!highlightAlgSet)
2 26 Feb 07 jari 99             label.setScriptNodeSelected(selected);
2 26 Feb 07 jari 100         else {
2 26 Feb 07 jari 101             label.setScriptNodeSelected(false);
2 26 Feb 07 jari 102             checkHighlight((ScriptNode)value);
2 26 Feb 07 jari 103         }
2 26 Feb 07 jari 104        
2 26 Feb 07 jari 105         if(value instanceof DataNode) {
2 26 Feb 07 jari 106
2 26 Feb 07 jari 107             label.setBackgroundColor(dataNodeColor);
2 26 Feb 07 jari 108             label.setRounded(false);
2 26 Feb 07 jari 109             DataNode dataNode= (DataNode)value;
2 26 Feb 07 jari 110             
2 26 Feb 07 jari 111             text = dataNode.toString();
2 26 Feb 07 jari 112             
2 26 Feb 07 jari 113             //set icon
2 26 Feb 07 jari 114             if(text.indexOf("Primary") != -1)
2 26 Feb 07 jari 115                 label.setIcon(scriptPrimaryDataNodeIcon);
2 26 Feb 07 jari 116             else if(text.indexOf("Multi") != -1)
2 26 Feb 07 jari 117                 label.setIcon(scriptMultiDataNodeIcon);
2 26 Feb 07 jari 118             else
2 26 Feb 07 jari 119                 label.setIcon(scriptDataNodeIcon);
2 26 Feb 07 jari 120
2 26 Feb 07 jari 121             //set text
2 26 Feb 07 jari 122             label.setText(text);
2 26 Feb 07 jari 123
2 26 Feb 07 jari 124         } else if(value instanceof AlgorithmNode){
2 26 Feb 07 jari 125
2 26 Feb 07 jari 126             label.setBackgroundColor(algNodeColor);
2 26 Feb 07 jari 127             label.setRounded(true);
2 26 Feb 07 jari 128             AlgorithmNode algNode = (AlgorithmNode)value;
2 26 Feb 07 jari 129             
2 26 Feb 07 jari 130             text = algNode.toString();
2 26 Feb 07 jari 131             if(text != null && !text.equals("") || !text.equals(" ")) {
2 26 Feb 07 jari 132
2 26 Feb 07 jari 133                 //set icon
2 26 Feb 07 jari 134                 if( algNode.getAlgorithmType().equals(ScriptConstants.ALGORITHM_TYPE_CLUSTER))
2 26 Feb 07 jari 135                     label.setIcon(scriptAnalysisIcon);
2 26 Feb 07 jari 136                 else if(algNode.getAlgorithmType().equals(ScriptConstants.ALGORITHM_TYPE_CLUSTER_GENES))
2 26 Feb 07 jari 137                     label.setIcon(scriptGeneAnalysisIcon);
2 26 Feb 07 jari 138                 else if(algNode.getAlgorithmType().equals(ScriptConstants.ALGORITHM_TYPE_CLUSTER_EXPERIMENTS))
2 26 Feb 07 jari 139                     label.setIcon(scriptExperimentAnalysisIcon);
2 26 Feb 07 jari 140                 else if(algNode.getAlgorithmType().equals(ScriptConstants.ALGORITHM_TYPE_ADJUSTMENT))
2 26 Feb 07 jari 141                     label.setIcon(scriptAdjustmentAlgIcon);
2 26 Feb 07 jari 142                 else if(algNode.getAlgorithmType().equals(ScriptConstants.ALGORITHM_TYPE_VISUALIZATION))
2 26 Feb 07 jari 143                     label.setIcon(scriptVisAlgNodeIcon);
2 26 Feb 07 jari 144                 else if(algNode.getAlgorithmType().equals(ScriptConstants.ALGORITHM_TYPE_CLUSTER_SELECTION))
2 26 Feb 07 jari 145                     label.setIcon(scriptClusterSelectionAnalysisIcon);
2 26 Feb 07 jari 146                     
2 26 Feb 07 jari 147                 //set text
2 26 Feb 07 jari 148                 label.setText(text+" ["+algNode.getDataNodeRef()+","+algNode.getID()+"] ");
2 26 Feb 07 jari 149   
2 26 Feb 07 jari 150             } else {
2 26 Feb 07 jari 151                 label.setText("Empty Algorithm ");
2 26 Feb 07 jari 152                 label.setBorder(BorderFactory.createLineBorder(Color.blue, 3));
2 26 Feb 07 jari 153                 label.setIcon(scriptEmptyAnalysisIcon);
2 26 Feb 07 jari 154             }
2 26 Feb 07 jari 155         }
2 26 Feb 07 jari 156        
2 26 Feb 07 jari 157         label.validate();        
2 26 Feb 07 jari 158         labelPanel.validate();
2 26 Feb 07 jari 159
2 26 Feb 07 jari 160         return labelPanel;
2 26 Feb 07 jari 161     }
2 26 Feb 07 jari 162     
2 26 Feb 07 jari 163     private void checkHighlight(ScriptNode node) {
2 26 Feb 07 jari 164         ScriptNode parent = (ScriptNode)(node.getParent());
2 26 Feb 07 jari 165         
2 26 Feb 07 jari 166         // safety
2 26 Feb 07 jari 167         if(algSetRoot == 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         // direct identity, offspring, or grandchild
2 26 Feb 07 jari 172         else if(node == algSetRoot || (parent != null && parent == algSetRoot) || (parent != null && parent.getParent() != null && parent.getParent() == algSetRoot)) {
2 26 Feb 07 jari 173             label.setScriptNodeHighlighted(true);
2 26 Feb 07 jari 174         }
2 26 Feb 07 jari 175         
2 26 Feb 07 jari 176         //not in highlighted alg set
2 26 Feb 07 jari 177         else {
2 26 Feb 07 jari 178             label.setScriptNodeHighlighted(false);
2 26 Feb 07 jari 179         }
2 26 Feb 07 jari 180         
2 26 Feb 07 jari 181     }
2 26 Feb 07 jari 182     
2 26 Feb 07 jari 183     
2 26 Feb 07 jari 184     /**
2 26 Feb 07 jari 185      */
2 26 Feb 07 jari 186     private class ScriptNodeLabel extends JLabel {
2 26 Feb 07 jari 187         boolean showRound;
2 26 Feb 07 jari 188         boolean sel;
2 26 Feb 07 jari 189         boolean highlighted;
2 26 Feb 07 jari 190         
2 26 Feb 07 jari 191         Color backgroundColor;
2 26 Feb 07 jari 192         
2 26 Feb 07 jari 193         public ScriptNodeLabel() {
2 26 Feb 07 jari 194             setOpaque(false);
2 26 Feb 07 jari 195             setBorder(BorderFactory.createEmptyBorder(3, 6, 3, 8));
2 26 Feb 07 jari 196
2 26 Feb 07 jari 197             backgroundColor = new Color(249,249,112);
2 26 Feb 07 jari 198         }
2 26 Feb 07 jari 199         
2 26 Feb 07 jari 200         public void setBackgroundColor(Color bkg) {
2 26 Feb 07 jari 201             backgroundColor = bkg;
2 26 Feb 07 jari 202         }
2 26 Feb 07 jari 203         
2 26 Feb 07 jari 204         public void setScriptNodeSelected(boolean selected) {
2 26 Feb 07 jari 205             this.sel = selected;
2 26 Feb 07 jari 206         }
2 26 Feb 07 jari 207         
2 26 Feb 07 jari 208         public void setScriptNodeHighlighted(boolean isLit) {
2 26 Feb 07 jari 209             this.highlighted= isLit;
2 26 Feb 07 jari 210             if(isLit && this.sel)
2 26 Feb 07 jari 211                 this.sel = false;
2 26 Feb 07 jari 212         }
2 26 Feb 07 jari 213         
2 26 Feb 07 jari 214         public void setRounded(boolean isRounded) {
2 26 Feb 07 jari 215             showRound = isRounded;
2 26 Feb 07 jari 216         }
2 26 Feb 07 jari 217         
2 26 Feb 07 jari 218         /**
2 26 Feb 07 jari 219          * @param g  */
2 26 Feb 07 jari 220         public void paintComponent(Graphics g) {
2 26 Feb 07 jari 221             int width = getWidth();
2 26 Feb 07 jari 222             int height = getHeight();
2 26 Feb 07 jari 223             g.setColor(backgroundColor);
2 26 Feb 07 jari 224             
2 26 Feb 07 jari 225             Graphics2D g2 = (Graphics2D)g;
2 26 Feb 07 jari 226             g2.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_ON);
2 26 Feb 07 jari 227             
2 26 Feb 07 jari 228             if(showRound) {
2 26 Feb 07 jari 229                 if(sel) {
2 26 Feb 07 jari 230                     g2.fillRoundRect(2, 2, width-4, height-4, 19, 19);
2 26 Feb 07 jari 231                     g2.setColor(Color.blue);
2 26 Feb 07 jari 232                     g2.drawRoundRect(1, 1, width-3, height-3, 19, 19);
2 26 Feb 07 jari 233                     g2.drawRoundRect(0, 0, width-1, height-1, 20, 20);
2 26 Feb 07 jari 234                     g2.setColor(Color.black);
2 26 Feb 07 jari 235                     super.paintComponent(g);
2 26 Feb 07 jari 236                 } else if(highlighted) {
2 26 Feb 07 jari 237                     g2.fillRoundRect(2, 2, width-4, height-4, 19, 19);
2 26 Feb 07 jari 238                     g2.setColor(new Color(176, 23, 54));
2 26 Feb 07 jari 239                     g2.drawRoundRect(1, 1, width-3, height-3, 19, 19);
2 26 Feb 07 jari 240                     g2.drawRoundRect(0, 0, width-1, height-1, 20, 20);
2 26 Feb 07 jari 241                     g2.setColor(Color.black);
2 26 Feb 07 jari 242                     super.paintComponent(g);
2 26 Feb 07 jari 243                 } else {
2 26 Feb 07 jari 244                     if(!highlightAlgSet) {
2 26 Feb 07 jari 245                         g2.fillRoundRect(1, 1, width-2, height-2, 19,19);
2 26 Feb 07 jari 246                         g2.setColor(Color.black);
2 26 Feb 07 jari 247                         g2.drawRoundRect(0, 0, width-1, height-1, 20, 20);
2 26 Feb 07 jari 248                         g2.setColor(Color.black);
2 26 Feb 07 jari 249                         super.paintComponent(g);
2 26 Feb 07 jari 250                     } else {
2 26 Feb 07 jari 251                         Color color = g.getColor();
2 26 Feb 07 jari 252                         
2 26 Feb 07 jari 253                         Composite composite = g2.getComposite();                        
2 26 Feb 07 jari 254                         g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.25f));
2 26 Feb 07 jari 255               
2 26 Feb 07 jari 256                         g2.fillRoundRect(1, 1, width-2, height-2, 19,19);
2 26 Feb 07 jari 257                         g2.setColor(Color.black);
2 26 Feb 07 jari 258                         g2.drawRoundRect(0, 0, width-1, height-1, 20, 20);
2 26 Feb 07 jari 259                         
2 26 Feb 07 jari 260                         g2.setColor(Color.black);
2 26 Feb 07 jari 261                         super.paintComponent(g);
2 26 Feb 07 jari 262                         
2 26 Feb 07 jari 263                         g.setColor(color);
2 26 Feb 07 jari 264                         g2.setComposite(composite);
2 26 Feb 07 jari 265                     }
2 26 Feb 07 jari 266                 }
2 26 Feb 07 jari 267             } else {
2 26 Feb 07 jari 268                 g2.fillRect( 0, 0, width, height);
2 26 Feb 07 jari 269                 if(sel) {
2 26 Feb 07 jari 270                     g2.setColor(Color.blue);
2 26 Feb 07 jari 271                     g2.drawRect(1, 1, width-3, height-3);
2 26 Feb 07 jari 272                     g2.drawRect(0, 0, width-1, height-1);
2 26 Feb 07 jari 273                     g2.setColor(Color.black);
2 26 Feb 07 jari 274                     super.paintComponent(g);
2 26 Feb 07 jari 275                 } else if(highlighted) {
2 26 Feb 07 jari 276                     g2.setColor(new Color(176, 23, 54));
2 26 Feb 07 jari 277                     g2.drawRect(1, 1, width-3, height-3);
2 26 Feb 07 jari 278                     g2.drawRect(0, 0, width-1, height-1);
2 26 Feb 07 jari 279                     g2.setColor(Color.black);
2 26 Feb 07 jari 280                     super.paintComponent(g);
2 26 Feb 07 jari 281                 } else {
2 26 Feb 07 jari 282                     if(!highlightAlgSet) {
2 26 Feb 07 jari 283                         g2.setColor(Color.black);
2 26 Feb 07 jari 284                         g2.drawRect(0, 0, width-1, height-1);
2 26 Feb 07 jari 285                         g2.setColor(Color.black);
2 26 Feb 07 jari 286                         super.paintComponent(g);
2 26 Feb 07 jari 287                     } else {
2 26 Feb 07 jari 288                         Color color = g.getColor();
2 26 Feb 07 jari 289                         
2 26 Feb 07 jari 290                         Composite composite = g2.getComposite();
2 26 Feb 07 jari 291                         
2 26 Feb 07 jari 292                         g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.25f));
2 26 Feb 07 jari 293        
2 26 Feb 07 jari 294                         g2.setColor(Color.black);
2 26 Feb 07 jari 295                         g2.drawRect(0, 0, width-1, height-1);
2 26 Feb 07 jari 296                         
2 26 Feb 07 jari 297                         g2.setColor(Color.black);
2 26 Feb 07 jari 298                         super.paintComponent(g);
2 26 Feb 07 jari 299                         
2 26 Feb 07 jari 300                         g.setColor(color);
2 26 Feb 07 jari 301                         g2.setComposite(composite);
2 26 Feb 07 jari 302                     }
2 26 Feb 07 jari 303                 }
2 26 Feb 07 jari 304             }
2 26 Feb 07 jari 305         }
2 26 Feb 07 jari 306     }
2 26 Feb 07 jari 307     
2 26 Feb 07 jari 308 }