mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/gdm/GDMColorSelectionDialog.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: GDMColorSelectionDialog.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.3 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 20:22:00 $
2 26 Feb 07 jari 9  * $Author: braistedj $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 package org.tigr.microarray.mev.cluster.gui.impl.gdm;
2 26 Feb 07 jari 14
2 26 Feb 07 jari 15 import java.awt.BorderLayout;
2 26 Feb 07 jari 16 import java.awt.Color;
2 26 Feb 07 jari 17 import java.awt.Dimension;
2 26 Feb 07 jari 18 import java.awt.GradientPaint;
2 26 Feb 07 jari 19 import java.awt.Graphics;
2 26 Feb 07 jari 20 import java.awt.Graphics2D;
2 26 Feb 07 jari 21 import java.awt.Toolkit;
2 26 Feb 07 jari 22 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 23 import java.awt.event.ActionListener;
2 26 Feb 07 jari 24 import java.awt.image.BufferedImage;
2 26 Feb 07 jari 25
2 26 Feb 07 jari 26 import javax.swing.JOptionPane;
2 26 Feb 07 jari 27 import javax.swing.JPanel;
2 26 Feb 07 jari 28 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 29 import javax.swing.border.TitledBorder;
2 26 Feb 07 jari 30 import javax.swing.event.ChangeListener;
2 26 Feb 07 jari 31
2 26 Feb 07 jari 32
2 26 Feb 07 jari 33 /** Supplies option dialog for selection of
2 26 Feb 07 jari 34  * expression color scheme
2 26 Feb 07 jari 35  */
2 26 Feb 07 jari 36 public class GDMColorSelectionDialog extends javax.swing.JDialog {
2 26 Feb 07 jari 37     
2 26 Feb 07 jari 38     /**
2 26 Feb 07 jari 39      * Creates new form GDMColorSelectionDialog
2 26 Feb 07 jari 40      * @param parent parent Frame
2 26 Feb 07 jari 41      * @param modal modal selection for dialog
2 26 Feb 07 jari 42      * @param posImage initial positive gradient image
2 26 Feb 07 jari 43      */
2 26 Feb 07 jari 44     public GDMColorSelectionDialog(java.awt.Frame parent, boolean modal, BufferedImage posImage) {
2 26 Feb 07 jari 45
2 26 Feb 07 jari 46         super(parent, modal);
2 26 Feb 07 jari 47         this.setTitle("Gene Distance Matrix Color Scheme Selection");
2 26 Feb 07 jari 48         previewer = new PreviewPanel(posImage);
2 26 Feb 07 jari 49
2 26 Feb 07 jari 50         initComponents();
2 26 Feb 07 jari 51         this.maxColorButton.setFocusPainted(false);
2 26 Feb 07 jari 52   this.minColorButton.setFocusPainted(false);
2 26 Feb 07 jari 53         this.colorChooser.setPreviewPanel(new JPanel());
2 26 Feb 07 jari 54         this.gradientPreviewPanel.add(this.previewer, BorderLayout.CENTER);
2 26 Feb 07 jari 55         this.colorChooser.getSelectionModel().addChangeListener(previewer);
2 26 Feb 07 jari 56         setSize(450, 465);
2 26 Feb 07 jari 57         
2 26 Feb 07 jari 58         this.okButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 59             public void actionPerformed(ActionEvent e){
2 26 Feb 07 jari 60                 result = JOptionPane.OK_OPTION;
2 26 Feb 07 jari 61                 setVisible(false);
2 26 Feb 07 jari 62             }
2 26 Feb 07 jari 63         });
2 26 Feb 07 jari 64         
2 26 Feb 07 jari 65         this.cancelButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 66             public void actionPerformed(ActionEvent e){
2 26 Feb 07 jari 67                 result = JOptionPane.CANCEL_OPTION;
2 26 Feb 07 jari 68                 setVisible(false);
2 26 Feb 07 jari 69             }
2 26 Feb 07 jari 70         });
2 26 Feb 07 jari 71     }
2 26 Feb 07 jari 72     
2 26 Feb 07 jari 73     /** This method is called from within the constructor to
2 26 Feb 07 jari 74      * initialize the form.
2 26 Feb 07 jari 75      */
2 26 Feb 07 jari 76     private void initComponents() {//GEN-BEGIN:initComponents
2 26 Feb 07 jari 77         chanelSelectionGroup = new javax.swing.ButtonGroup();
2 26 Feb 07 jari 78         channelSelectionPanel = new javax.swing.JPanel();
2 26 Feb 07 jari 79         minColorButton = new javax.swing.JRadioButton();
2 26 Feb 07 jari 80         maxColorButton = new javax.swing.JRadioButton();
2 26 Feb 07 jari 81         actionButtonPanel = new javax.swing.JPanel();
2 26 Feb 07 jari 82         okButton = new javax.swing.JButton();
2 26 Feb 07 jari 83         cancelButton = new javax.swing.JButton();
2 26 Feb 07 jari 84         colorChooser = new javax.swing.JColorChooser();
2 26 Feb 07 jari 85         this.colorChooser.setPreviewPanel(previewer);
2 26 Feb 07 jari 86         gradientPreviewPanel = new javax.swing.JPanel();
2 26 Feb 07 jari 87         
2 26 Feb 07 jari 88         
2 26 Feb 07 jari 89         getContentPane().setLayout(new java.awt.GridBagLayout());
2 26 Feb 07 jari 90         java.awt.GridBagConstraints gridBagConstraints1;
2 26 Feb 07 jari 91         
2 26 Feb 07 jari 92         setModal(true);
2 26 Feb 07 jari 93         setResizable(false);
2 26 Feb 07 jari 94         addWindowListener(new java.awt.event.WindowAdapter() {
2 26 Feb 07 jari 95             public void windowClosing(java.awt.event.WindowEvent evt) {
2 26 Feb 07 jari 96                 closeDialog(evt);
2 26 Feb 07 jari 97             }
2 26 Feb 07 jari 98         });
2 26 Feb 07 jari 99         
2 26 Feb 07 jari 100         channelSelectionPanel.setLayout(new java.awt.GridBagLayout());
2 26 Feb 07 jari 101         java.awt.GridBagConstraints gridBagConstraints2;
2 26 Feb 07 jari 102         
2 26 Feb 07 jari 103         minColorButton.setSelected(true);
2 26 Feb 07 jari 104         minColorButton.setText("Select Minimum Distance Color");
2 26 Feb 07 jari 105         chanelSelectionGroup.add(minColorButton);
2 26 Feb 07 jari 106         gridBagConstraints2 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 107         channelSelectionPanel.add(minColorButton, gridBagConstraints2);
2 26 Feb 07 jari 108         
2 26 Feb 07 jari 109         maxColorButton.setText("Select Maximum Distance Color");
2 26 Feb 07 jari 110         chanelSelectionGroup.add(maxColorButton);
2 26 Feb 07 jari 111         gridBagConstraints2 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 112         channelSelectionPanel.add(maxColorButton, gridBagConstraints2);
2 26 Feb 07 jari 113         
2 26 Feb 07 jari 114         gridBagConstraints1 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 115         gridBagConstraints1.gridx = 0;
2 26 Feb 07 jari 116         gridBagConstraints1.gridy = 0;
2 26 Feb 07 jari 117         gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
2 26 Feb 07 jari 118         getContentPane().add(channelSelectionPanel, gridBagConstraints1);
2 26 Feb 07 jari 119         
2 26 Feb 07 jari 120         actionButtonPanel.setLayout(new java.awt.GridBagLayout());
2 26 Feb 07 jari 121         java.awt.GridBagConstraints gridBagConstraints3;
2 26 Feb 07 jari 122         
2 26 Feb 07 jari 123         okButton.setText(" Apply Color Scheme");
2 26 Feb 07 jari 124         okButton.setFocusPainted(false);
2 26 Feb 07 jari 125         okButton.setSelected(true);
2 26 Feb 07 jari 126         gridBagConstraints3 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 127         gridBagConstraints3.gridx = 0;
2 26 Feb 07 jari 128         gridBagConstraints3.gridy = 0;
2 26 Feb 07 jari 129         gridBagConstraints3.insets = new java.awt.Insets(10, 0, 10, 10);
2 26 Feb 07 jari 130         actionButtonPanel.add(okButton, gridBagConstraints3);
2 26 Feb 07 jari 131         
2 26 Feb 07 jari 132         cancelButton.setText("Cancel");
2 26 Feb 07 jari 133         gridBagConstraints3 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 134         gridBagConstraints3.gridx = 1;
2 26 Feb 07 jari 135         gridBagConstraints3.gridy = 0;
2 26 Feb 07 jari 136         gridBagConstraints3.insets = new java.awt.Insets(10, 10, 10, 0);
2 26 Feb 07 jari 137         actionButtonPanel.add(cancelButton, gridBagConstraints3);
2 26 Feb 07 jari 138         
2 26 Feb 07 jari 139         gridBagConstraints1 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 140         gridBagConstraints1.gridx = 0;
2 26 Feb 07 jari 141         gridBagConstraints1.gridy = 3;
2 26 Feb 07 jari 142         gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
2 26 Feb 07 jari 143         getContentPane().add(actionButtonPanel, gridBagConstraints1);
2 26 Feb 07 jari 144         
2 26 Feb 07 jari 145         gridBagConstraints1 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 146         gridBagConstraints1.gridx = 0;
2 26 Feb 07 jari 147         gridBagConstraints1.gridy = 1;
2 26 Feb 07 jari 148         gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
2 26 Feb 07 jari 149         getContentPane().add(colorChooser, gridBagConstraints1);
2 26 Feb 07 jari 150         
2 26 Feb 07 jari 151         gradientPreviewPanel.setLayout(new java.awt.BorderLayout());
2 26 Feb 07 jari 152         
2 26 Feb 07 jari 153         gradientPreviewPanel.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), "Gradient Preview"));
2 26 Feb 07 jari 154         gradientPreviewPanel.setPreferredSize(new java.awt.Dimension(200, 70));
2 26 Feb 07 jari 155         gradientPreviewPanel.setMinimumSize(new java.awt.Dimension(200, 70));
2 26 Feb 07 jari 156         gridBagConstraints1 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 157         gridBagConstraints1.gridx = 0;
2 26 Feb 07 jari 158         gridBagConstraints1.gridy = 2;
2 26 Feb 07 jari 159         gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
2 26 Feb 07 jari 160         getContentPane().add(gradientPreviewPanel, gridBagConstraints1);
2 26 Feb 07 jari 161         
2 26 Feb 07 jari 162         pack();
2 26 Feb 07 jari 163     }//GEN-END:initComponents
2 26 Feb 07 jari 164     
2 26 Feb 07 jari 165     /** Closes the dialog */
2 26 Feb 07 jari 166     private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog
2 26 Feb 07 jari 167         setVisible(false);
2 26 Feb 07 jari 168         dispose();
2 26 Feb 07 jari 169     }//GEN-LAST:event_closeDialog
2 26 Feb 07 jari 170     
2 26 Feb 07 jari 171     /**
2 26 Feb 07 jari 172      * Shows the dialog.
2 26 Feb 07 jari 173      */
2 26 Feb 07 jari 174     public int showModal() {
2 26 Feb 07 jari 175         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 176         setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);
2 26 Feb 07 jari 177         show();
2 26 Feb 07 jari 178         return result;
2 26 Feb 07 jari 179     }
2 26 Feb 07 jari 180     
2 26 Feb 07 jari 181     /**
2 26 Feb 07 jari 182      * Returns the current positive gradient image
2 26 Feb 07 jari 183      * @return Returns positive color gradient
2 26 Feb 07 jari 184      */
2 26 Feb 07 jari 185     public BufferedImage getPositiveGradient(){
2 26 Feb 07 jari 186         return previewer.getPositiveGradient();
2 26 Feb 07 jari 187     }    
2 26 Feb 07 jari 188     
2 26 Feb 07 jari 189     // Variables declaration - do not modify//GEN-BEGIN:variables
2 26 Feb 07 jari 190     private javax.swing.ButtonGroup chanelSelectionGroup;
2 26 Feb 07 jari 191     private javax.swing.JPanel channelSelectionPanel;
2 26 Feb 07 jari 192     private javax.swing.JRadioButton minColorButton;
2 26 Feb 07 jari 193     private javax.swing.JRadioButton maxColorButton;
2 26 Feb 07 jari 194     private javax.swing.JPanel actionButtonPanel;
2 26 Feb 07 jari 195     private javax.swing.JButton okButton;
2 26 Feb 07 jari 196     private javax.swing.JButton cancelButton;
2 26 Feb 07 jari 197     private javax.swing.JColorChooser colorChooser;
2 26 Feb 07 jari 198     private javax.swing.JPanel gradientPreviewPanel;
2 26 Feb 07 jari 199     // End of variables declaration//GEN-END:variables
2 26 Feb 07 jari 200     private Color maxColor = Color.red;
2 26 Feb 07 jari 201     private Color minColor = Color.black;
2 26 Feb 07 jari 202     private PreviewPanel previewer;
2 26 Feb 07 jari 203     private int result = 0;
2 26 Feb 07 jari 204     
2 26 Feb 07 jari 205     /**
2 26 Feb 07 jari 206      * Panel which displays the current color scheme gradient
2 26 Feb 07 jari 207      */
2 26 Feb 07 jari 208     public class PreviewPanel extends JPanel implements ChangeListener{
2 26 Feb 07 jari 209         
2 26 Feb 07 jari 210         BufferedImage currentPosGradient;
2 26 Feb 07 jari 211         
2 26 Feb 07 jari 212         /**
2 26 Feb 07 jari 213          * Creates a new PreviewPanel
2 26 Feb 07 jari 214          * @param posImage initial positive gradient image
2 26 Feb 07 jari 215          */
2 26 Feb 07 jari 216         public PreviewPanel(BufferedImage posImage){
2 26 Feb 07 jari 217
2 26 Feb 07 jari 218             currentPosGradient = posImage;
2 26 Feb 07 jari 219             maxColor = new Color(posImage.getRGB(posImage.getWidth()-1, 0));
2 26 Feb 07 jari 220             minColor = new Color(posImage.getRGB(0,0));
2 26 Feb 07 jari 221             
2 26 Feb 07 jari 222             super.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Gradient Preview"));
2 26 Feb 07 jari 223             setSize(200, 70);
2 26 Feb 07 jari 224             setPreferredSize(new Dimension(200, 70));
2 26 Feb 07 jari 225             setVisible(true);
2 26 Feb 07 jari 226         }
2 26 Feb 07 jari 227         
2 26 Feb 07 jari 228         /**
2 26 Feb 07 jari 229          * Handles color change events
2 26 Feb 07 jari 230          */
2 26 Feb 07 jari 231         public void stateChanged(javax.swing.event.ChangeEvent changeEvent) {
2 26 Feb 07 jari 232             Color newColor = colorChooser.getColor();
2 26 Feb 07 jari 233             if(newColor == null) return;
2 26 Feb 07 jari 234             
2 26 Feb 07 jari 235             if(maxColorButton.isSelected()){
2 26 Feb 07 jari 236                 maxColor = newColor;
2 26 Feb 07 jari 237             }
2 26 Feb 07 jari 238             else if(minColorButton.isSelected()){
2 26 Feb 07 jari 239                 minColor = newColor;
2 26 Feb 07 jari 240             }
2 26 Feb 07 jari 241       setPositiveGradient(createGradientImage(minColor, maxColor));
2 26 Feb 07 jari 242             
2 26 Feb 07 jari 243             repaint();
2 26 Feb 07 jari 244         }
2 26 Feb 07 jari 245         
2 26 Feb 07 jari 246         /**
2 26 Feb 07 jari 247          * Refreshes gradients with current color
2 26 Feb 07 jari 248          */
2 26 Feb 07 jari 249         public void refreshPreview() {
2 26 Feb 07 jari 250       setPositiveGradient(createGradientImage(minColor, maxColor));
2 26 Feb 07 jari 251             repaint();
2 26 Feb 07 jari 252         }
2 26 Feb 07 jari 253         /**
2 26 Feb 07 jari 254          * Paints dialog
2 26 Feb 07 jari 255          */
2 26 Feb 07 jari 256         public void paint(Graphics g){
2 26 Feb 07 jari 257             super.paintComponent(g);
2 26 Feb 07 jari 258             g.drawImage(currentPosGradient, 0, 0, this.getWidth(), this.getHeight(), null);
2 26 Feb 07 jari 259         }
2 26 Feb 07 jari 260         
2 26 Feb 07 jari 261         /**
2 26 Feb 07 jari 262          * Creates a gradient image given specified <CODE>Color</CODE>(s)
2 26 Feb 07 jari 263          * @param color1 <CODE>Color</CODE> to display at left side of gradient
2 26 Feb 07 jari 264          * @param color2 <CODE>Color</CODE> to display at right side of gradient
2 26 Feb 07 jari 265          * @return returns a gradient image
2 26 Feb 07 jari 266          */
2 26 Feb 07 jari 267         private BufferedImage createGradientImage(Color color1, Color color2) {
2 26 Feb 07 jari 268             BufferedImage image = new BufferedImage(256, 1, BufferedImage.TYPE_3BYTE_BGR);
2 26 Feb 07 jari 269             Graphics2D graphics = image.createGraphics();
2 26 Feb 07 jari 270             GradientPaint gp = new GradientPaint(0, 0, color1, 255, 0, color2);
2 26 Feb 07 jari 271             graphics.setPaint(gp);
2 26 Feb 07 jari 272             graphics.drawRect(0, 0, 255, 1);
2 26 Feb 07 jari 273             return image;
2 26 Feb 07 jari 274         }
2 26 Feb 07 jari 275         
2 26 Feb 07 jari 276         /**
2 26 Feb 07 jari 277          * Returns the current positive gradient image
2 26 Feb 07 jari 278          * @return Returned positive gradient
2 26 Feb 07 jari 279          */
2 26 Feb 07 jari 280         public BufferedImage getPositiveGradient(){
2 26 Feb 07 jari 281             return currentPosGradient;
2 26 Feb 07 jari 282         }
2 26 Feb 07 jari 283
2 26 Feb 07 jari 284         public void setPositiveGradient(BufferedImage gradient){
2 26 Feb 07 jari 285             currentPosGradient = gradient;
2 26 Feb 07 jari 286         }
2 26 Feb 07 jari 287                 
2 26 Feb 07 jari 288     }
2 26 Feb 07 jari 289     
2 26 Feb 07 jari 290 }