mev-4.0.01/source/org/tigr/microarray/util/awt/ColorSchemeSelectionDialog.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2005, 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: ColorSchemeSelectionDialog.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.3 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 15:39:20 $
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.util.awt;
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.GridBagConstraints;
2 26 Feb 07 jari 22 import java.awt.GridBagLayout;
2 26 Feb 07 jari 23 import java.awt.Insets;
2 26 Feb 07 jari 24 import java.awt.Toolkit;
2 26 Feb 07 jari 25 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 26 import java.awt.event.ActionListener;
2 26 Feb 07 jari 27 import java.awt.image.BufferedImage;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29 import javax.swing.BorderFactory;
2 26 Feb 07 jari 30 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 31 import javax.swing.JButton;
2 26 Feb 07 jari 32 import javax.swing.JCheckBox;
2 26 Feb 07 jari 33 import javax.swing.JColorChooser;
2 26 Feb 07 jari 34 import javax.swing.JDialog;
2 26 Feb 07 jari 35 import javax.swing.JOptionPane;
2 26 Feb 07 jari 36 import javax.swing.JPanel;
2 26 Feb 07 jari 37 import javax.swing.JRadioButton;
2 26 Feb 07 jari 38 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 39 import javax.swing.border.TitledBorder;
2 26 Feb 07 jari 40 import javax.swing.event.ChangeListener;
2 26 Feb 07 jari 41
2 26 Feb 07 jari 42
2 26 Feb 07 jari 43 /** Supplies option dialog for selection of
2 26 Feb 07 jari 44  * expression color scheme
2 26 Feb 07 jari 45  */
2 26 Feb 07 jari 46 public class ColorSchemeSelectionDialog extends JDialog {
2 26 Feb 07 jari 47         
2 26 Feb 07 jari 48     private ButtonGroup chanelSelectionGroup;
2 26 Feb 07 jari 49     private JPanel channelSelectionPanel;
2 26 Feb 07 jari 50     private JRadioButton negativeColorButton;
2 26 Feb 07 jari 51     private JRadioButton positiveColorButton;
2 26 Feb 07 jari 52     private JPanel actionButtonPanel;
2 26 Feb 07 jari 53     private JButton okButton;
2 26 Feb 07 jari 54     private JButton cancelButton;
2 26 Feb 07 jari 55     private JColorChooser colorChooser;
2 26 Feb 07 jari 56     private JPanel gradientPreviewPanel;
2 26 Feb 07 jari 57     private Color posColor = Color.red;
2 26 Feb 07 jari 58     private Color negColor = Color.green;
2 26 Feb 07 jari 59     private Color neutralColor = Color.black;
2 26 Feb 07 jari 60     private PreviewPanel previewer;
2 26 Feb 07 jari 61     private JCheckBox neutralColorCheckBox;
2 26 Feb 07 jari 62
2 26 Feb 07 jari 63     private JRadioButton doubleGradientButton, singleGradientButton;
2 26 Feb 07 jari 64     
2 26 Feb 07 jari 65     private boolean useDoubleGradient;
2 26 Feb 07 jari 66     
2 26 Feb 07 jari 67     private int result = 0;
2 26 Feb 07 jari 68       
2 26 Feb 07 jari 69     /**
2 26 Feb 07 jari 70      * Creates new form ColorSchemeSelectionDialog
2 26 Feb 07 jari 71      * @param parent parent Frame
2 26 Feb 07 jari 72      * @param modal modal selection for dialog
2 26 Feb 07 jari 73      * @param negImage initial negative gradient image
2 26 Feb 07 jari 74      * @param posImage initial positive gradient image
2 26 Feb 07 jari 75      */
2 26 Feb 07 jari 76     public ColorSchemeSelectionDialog(java.awt.Frame parent, boolean modal, BufferedImage negImage, BufferedImage posImage, boolean useDouble) {
2 26 Feb 07 jari 77         super(parent, modal);
2 26 Feb 07 jari 78         this.useDoubleGradient = useDouble;
2 26 Feb 07 jari 79         this.setTitle("Color Scheme Selection");
2 26 Feb 07 jari 80         this.previewer = new PreviewPanel(negImage, posImage);
2 26 Feb 07 jari 81         initComponents();
2 26 Feb 07 jari 82         this.negativeColorButton.setFocusPainted(false);
2 26 Feb 07 jari 83         this.positiveColorButton.setFocusPainted(false);
2 26 Feb 07 jari 84         
2 26 Feb 07 jari 85         neutralColorCheckBox = new javax.swing.JCheckBox("Use Black as Neutral Color", true);
2 26 Feb 07 jari 86         neutralColorCheckBox.setFocusPainted(false);
2 26 Feb 07 jari 87         neutralColorCheckBox.setOpaque(false);
2 26 Feb 07 jari 88         neutralColorCheckBox.setEnabled(useDouble);
2 26 Feb 07 jari 89         
2 26 Feb 07 jari 90         if((posImage.getRGB(0,0)) == ((Color.white).getRGB())) { //if neutral is white, then set to neutral = white
2 26 Feb 07 jari 91             neutralColorCheckBox.setSelected(false);
2 26 Feb 07 jari 92             neutralColor = Color.white;
2 26 Feb 07 jari 93         }
2 26 Feb 07 jari 94         else
2 26 Feb 07 jari 95             neutralColor = Color.black;
2 26 Feb 07 jari 96             
2 26 Feb 07 jari 97         neutralColorCheckBox.addActionListener( new ActionListener(){
2 26 Feb 07 jari 98             public void actionPerformed(ActionEvent ae){
2 26 Feb 07 jari 99                 if(neutralColorCheckBox.isSelected())
2 26 Feb 07 jari 100                     neutralColor = Color.black;
2 26 Feb 07 jari 101                 else
2 26 Feb 07 jari 102                     neutralColor = Color.white;
2 26 Feb 07 jari 103                 previewer.alterNeutralColor();
2 26 Feb 07 jari 104             }
2 26 Feb 07 jari 105         });
2 26 Feb 07 jari 106         
2 26 Feb 07 jari 107         this.channelSelectionPanel.add(neutralColorCheckBox, new GridBagConstraints(0,1,2,0,0.0,0.0,GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL, new Insets(0,50,0,0), 0,0));
2 26 Feb 07 jari 108         this.channelSelectionPanel.validate();
2 26 Feb 07 jari 109             
2 26 Feb 07 jari 110         this.colorChooser.setPreviewPanel(new JPanel());
2 26 Feb 07 jari 111         this.gradientPreviewPanel.add(this.previewer, BorderLayout.CENTER);
2 26 Feb 07 jari 112         this.colorChooser.getSelectionModel().addChangeListener(previewer);
2 26 Feb 07 jari 113         //setSize(450, 465);
2 26 Feb 07 jari 114         
2 26 Feb 07 jari 115         pack();
2 26 Feb 07 jari 116         
2 26 Feb 07 jari 117         this.okButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 118             public void actionPerformed(ActionEvent e){
2 26 Feb 07 jari 119                 result = JOptionPane.OK_OPTION;
2 26 Feb 07 jari 120                 setVisible(false);
2 26 Feb 07 jari 121             }
2 26 Feb 07 jari 122         });
2 26 Feb 07 jari 123         
2 26 Feb 07 jari 124         this.cancelButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 125             public void actionPerformed(ActionEvent e){
2 26 Feb 07 jari 126                 result = JOptionPane.CANCEL_OPTION;
2 26 Feb 07 jari 127                 setVisible(false);
2 26 Feb 07 jari 128             }
2 26 Feb 07 jari 129         });
2 26 Feb 07 jari 130     }
2 26 Feb 07 jari 131     
2 26 Feb 07 jari 132     /** This method is called from within the constructor to
2 26 Feb 07 jari 133      * initialize the form.
2 26 Feb 07 jari 134      */
2 26 Feb 07 jari 135     private void initComponents() {//GEN-BEGIN:initComponents
2 26 Feb 07 jari 136
2 26 Feb 07 jari 137       Listener listener = new Listener();
2 26 Feb 07 jari 138       
2 26 Feb 07 jari 139         ButtonGroup bg = new ButtonGroup();
2 26 Feb 07 jari 140     doubleGradientButton = new JRadioButton("Double Gradient", useDoubleGradient);
2 26 Feb 07 jari 141     doubleGradientButton.setActionCommand("change-gradient-command");
2 26 Feb 07 jari 142     doubleGradientButton.addActionListener(listener);
2 26 Feb 07 jari 143     doubleGradientButton.setFocusPainted(false);
2 26 Feb 07 jari 144     doubleGradientButton.setOpaque(false);
2 26 Feb 07 jari 145     bg.add(doubleGradientButton);
2 26 Feb 07 jari 146     
2 26 Feb 07 jari 147     singleGradientButton = new JRadioButton("Single Gradient", !useDoubleGradient);
2 26 Feb 07 jari 148     singleGradientButton.setActionCommand("change-gradient-command");
2 26 Feb 07 jari 149     singleGradientButton.addActionListener(listener);
2 26 Feb 07 jari 150     singleGradientButton.setFocusPainted(false);
2 26 Feb 07 jari 151     singleGradientButton.setOpaque(false);
2 26 Feb 07 jari 152     bg.add(singleGradientButton);
2 26 Feb 07 jari 153     
2 26 Feb 07 jari 154       JPanel gradientStylePanel = new JPanel(new GridBagLayout());
2 26 Feb 07 jari 155       gradientStylePanel.setBackground(Color.white);
2 26 Feb 07 jari 156         gradientStylePanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black), "Gradient Style"));
2 26 Feb 07 jari 157
2 26 Feb 07 jari 158     gradientStylePanel.add(doubleGradientButton, new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5,0,5,20),0,0));
2 26 Feb 07 jari 159     gradientStylePanel.add(singleGradientButton, new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5,20,5,0),0,0));    
2 26 Feb 07 jari 160         
2 26 Feb 07 jari 161       chanelSelectionGroup = new javax.swing.ButtonGroup();
2 26 Feb 07 jari 162         channelSelectionPanel = new javax.swing.JPanel();
2 26 Feb 07 jari 163         channelSelectionPanel.setBackground(Color.white);
2 26 Feb 07 jari 164         channelSelectionPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black), "Gradient Selection"));
2 26 Feb 07 jari 165         
2 26 Feb 07 jari 166         negativeColorButton = new javax.swing.JRadioButton();
2 26 Feb 07 jari 167         positiveColorButton = new javax.swing.JRadioButton();
2 26 Feb 07 jari 168         actionButtonPanel = new javax.swing.JPanel();
2 26 Feb 07 jari 169         okButton = new javax.swing.JButton();
2 26 Feb 07 jari 170         cancelButton = new javax.swing.JButton();
2 26 Feb 07 jari 171         colorChooser = new javax.swing.JColorChooser();
2 26 Feb 07 jari 172         this.colorChooser.setPreviewPanel(previewer);
2 26 Feb 07 jari 173         gradientPreviewPanel = new javax.swing.JPanel();
2 26 Feb 07 jari 174         
2 26 Feb 07 jari 175         
2 26 Feb 07 jari 176         getContentPane().setLayout(new java.awt.GridBagLayout());
2 26 Feb 07 jari 177         java.awt.GridBagConstraints gridBagConstraints1;
2 26 Feb 07 jari 178         
2 26 Feb 07 jari 179         setModal(true);
2 26 Feb 07 jari 180         setResizable(false);
2 26 Feb 07 jari 181         addWindowListener(new java.awt.event.WindowAdapter() {
2 26 Feb 07 jari 182             public void windowClosing(java.awt.event.WindowEvent evt) {
2 26 Feb 07 jari 183                 closeDialog(evt);
2 26 Feb 07 jari 184             }
2 26 Feb 07 jari 185         });
2 26 Feb 07 jari 186         
2 26 Feb 07 jari 187         channelSelectionPanel.setLayout(new java.awt.GridBagLayout());
2 26 Feb 07 jari 188         java.awt.GridBagConstraints gridBagConstraints2;
2 26 Feb 07 jari 189         
2 26 Feb 07 jari 190         negativeColorButton.setSelected(true);
2 26 Feb 07 jari 191         negativeColorButton.setText("Select Low End Color");
2 26 Feb 07 jari 192         negativeColorButton.setOpaque(false);
2 26 Feb 07 jari 193         chanelSelectionGroup.add(negativeColorButton);
2 26 Feb 07 jari 194         gridBagConstraints2 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 195         channelSelectionPanel.add(negativeColorButton, gridBagConstraints2);
2 26 Feb 07 jari 196         
2 26 Feb 07 jari 197         positiveColorButton.setText("Select High End Color");
2 26 Feb 07 jari 198         positiveColorButton.setOpaque(false);
2 26 Feb 07 jari 199         chanelSelectionGroup.add(positiveColorButton);
2 26 Feb 07 jari 200         gridBagConstraints2 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 201         channelSelectionPanel.add(positiveColorButton, gridBagConstraints2);
2 26 Feb 07 jari 202         
2 26 Feb 07 jari 203         gridBagConstraints1 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 204         gridBagConstraints1.gridx = 0;
2 26 Feb 07 jari 205         gridBagConstraints1.gridy = 0;
2 26 Feb 07 jari 206         gridBagConstraints1.gridwidth = 1;
2 26 Feb 07 jari 207         gridBagConstraints1.gridheight = 1;        
2 26 Feb 07 jari 208         gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;        
2 26 Feb 07 jari 209         getContentPane().add(gradientStylePanel, gridBagConstraints1);
2 26 Feb 07 jari 210                 
2 26 Feb 07 jari 211         actionButtonPanel.setLayout(new java.awt.GridBagLayout());
2 26 Feb 07 jari 212         java.awt.GridBagConstraints gridBagConstraints3;
2 26 Feb 07 jari 213         
2 26 Feb 07 jari 214         okButton.setText(" Apply Color Scheme");
2 26 Feb 07 jari 215         okButton.setFocusPainted(false);
2 26 Feb 07 jari 216         okButton.setSelected(true);
2 26 Feb 07 jari 217         gridBagConstraints3 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 218                         
2 26 Feb 07 jari 219         gridBagConstraints3.gridx = 0;
2 26 Feb 07 jari 220         gridBagConstraints3.gridy = 0;
2 26 Feb 07 jari 221         gridBagConstraints3.insets = new java.awt.Insets(10, 0, 10, 10);
2 26 Feb 07 jari 222         actionButtonPanel.add(okButton, gridBagConstraints3);
2 26 Feb 07 jari 223         
2 26 Feb 07 jari 224         cancelButton.setText("Cancel");
2 26 Feb 07 jari 225         gridBagConstraints3 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 226         gridBagConstraints3.gridx = 1;
2 26 Feb 07 jari 227         gridBagConstraints3.gridy = 0;
2 26 Feb 07 jari 228         gridBagConstraints3.insets = new java.awt.Insets(10, 10, 10, 0);
2 26 Feb 07 jari 229         actionButtonPanel.add(cancelButton, gridBagConstraints3);
2 26 Feb 07 jari 230         
2 26 Feb 07 jari 231         gridBagConstraints1 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 232         gridBagConstraints1.gridx = 0;
2 26 Feb 07 jari 233         gridBagConstraints1.gridy = 4;
2 26 Feb 07 jari 234         gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
2 26 Feb 07 jari 235         getContentPane().add(actionButtonPanel, gridBagConstraints1);
2 26 Feb 07 jari 236         
2 26 Feb 07 jari 237         gridBagConstraints1 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 238         gridBagConstraints1.gridx = 0;
2 26 Feb 07 jari 239         gridBagConstraints1.gridy = 1;
2 26 Feb 07 jari 240         gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
2 26 Feb 07 jari 241         getContentPane().add(channelSelectionPanel, gridBagConstraints1);
2 26 Feb 07 jari 242
2 26 Feb 07 jari 243         gridBagConstraints1 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 244         gridBagConstraints1.gridx = 0;
2 26 Feb 07 jari 245         gridBagConstraints1.gridy = 2;
2 26 Feb 07 jari 246         gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;      
2 26 Feb 07 jari 247         getContentPane().add(colorChooser, gridBagConstraints1);
2 26 Feb 07 jari 248         
2 26 Feb 07 jari 249         gradientPreviewPanel.setLayout(new java.awt.BorderLayout());
2 26 Feb 07 jari 250         
2 26 Feb 07 jari 251         gradientPreviewPanel.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), "Gradient Preview"));
2 26 Feb 07 jari 252         gradientPreviewPanel.setPreferredSize(new java.awt.Dimension(200, 70));
2 26 Feb 07 jari 253         gradientPreviewPanel.setMinimumSize(new java.awt.Dimension(200, 70));
2 26 Feb 07 jari 254         gradientPreviewPanel.setBackground(Color.white);
2 26 Feb 07 jari 255         gridBagConstraints1 = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 256         gridBagConstraints1.gridx = 0;
2 26 Feb 07 jari 257         gridBagConstraints1.gridy = 3;
2 26 Feb 07 jari 258         gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
2 26 Feb 07 jari 259         getContentPane().add(gradientPreviewPanel, gridBagConstraints1);
2 26 Feb 07 jari 260         
2 26 Feb 07 jari 261         pack();
2 26 Feb 07 jari 262     }//GEN-END:initComponents
2 26 Feb 07 jari 263     
2 26 Feb 07 jari 264     /** Closes the dialog */
2 26 Feb 07 jari 265     private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog
2 26 Feb 07 jari 266         setVisible(false);
2 26 Feb 07 jari 267         dispose();
2 26 Feb 07 jari 268     }//GEN-LAST:event_closeDialog
2 26 Feb 07 jari 269     
2 26 Feb 07 jari 270     /**
2 26 Feb 07 jari 271      * Shows the dialog.
2 26 Feb 07 jari 272      */
2 26 Feb 07 jari 273     public int showModal() {
2 26 Feb 07 jari 274         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 275         setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);
2 26 Feb 07 jari 276         show();
2 26 Feb 07 jari 277         return result;
2 26 Feb 07 jari 278     }
2 26 Feb 07 jari 279     
2 26 Feb 07 jari 280     /**
2 26 Feb 07 jari 281      * Returns the current positive gradient image
2 26 Feb 07 jari 282      * @return Returns positive color gradient
2 26 Feb 07 jari 283      */
2 26 Feb 07 jari 284     public BufferedImage getPositiveGradient(){
2 26 Feb 07 jari 285         return previewer.getPositiveGradient();
2 26 Feb 07 jari 286     }
2 26 Feb 07 jari 287     
2 26 Feb 07 jari 288     /**
2 26 Feb 07 jari 289      * Returns the current positive gradient image
2 26 Feb 07 jari 290      * @return Returns negative color gradient
2 26 Feb 07 jari 291      */
2 26 Feb 07 jari 292     public BufferedImage getNegativeGradient(){
2 26 Feb 07 jari 293         return previewer.getNegativeGradient();
2 26 Feb 07 jari 294     }
2 26 Feb 07 jari 295     
2 26 Feb 07 jari 296     public boolean getUseDoubleGradient() {
2 26 Feb 07 jari 297       return doubleGradientButton.isSelected();
2 26 Feb 07 jari 298     }
2 26 Feb 07 jari 299     
2 26 Feb 07 jari 300     public BufferedImage getPosImage() {
2 26 Feb 07 jari 301       return previewer.getPositiveGradient();    
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      * Panel which displays the current color scheme gradient
2 26 Feb 07 jari 309      */
2 26 Feb 07 jari 310     public class PreviewPanel extends JPanel implements ChangeListener {
2 26 Feb 07 jari 311         
2 26 Feb 07 jari 312         BufferedImage currentPosGradient;
2 26 Feb 07 jari 313         BufferedImage currentNegGradient;
2 26 Feb 07 jari 314         
2 26 Feb 07 jari 315         /**
2 26 Feb 07 jari 316          * Creates a new PreviewPanel
2 26 Feb 07 jari 317          * @param negImage initial negative gradient image
2 26 Feb 07 jari 318          * @param posImage initial positive gradient image
2 26 Feb 07 jari 319          */
2 26 Feb 07 jari 320         public PreviewPanel(BufferedImage negImage, BufferedImage posImage){
2 26 Feb 07 jari 321             currentNegGradient = negImage;
2 26 Feb 07 jari 322             currentPosGradient = posImage;
2 26 Feb 07 jari 323             posColor = new Color(posImage.getRGB(posImage.getWidth()-1, 0));
2 26 Feb 07 jari 324             negColor = new Color(negImage.getRGB(0,0));
2 26 Feb 07 jari 325             super.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Gradient Preview"));
2 26 Feb 07 jari 326             setSize(200, 70);
2 26 Feb 07 jari 327             setPreferredSize(new Dimension(200, 70));
2 26 Feb 07 jari 328             setVisible(true);
2 26 Feb 07 jari 329         }
2 26 Feb 07 jari 330         
2 26 Feb 07 jari 331         /**
2 26 Feb 07 jari 332          * Handles color change events
2 26 Feb 07 jari 333          */
2 26 Feb 07 jari 334         public void stateChanged(javax.swing.event.ChangeEvent changeEvent) {
2 26 Feb 07 jari 335             Color newColor = colorChooser.getColor();
2 26 Feb 07 jari 336             if(newColor == null) return;
2 26 Feb 07 jari 337             
2 26 Feb 07 jari 338             if(positiveColorButton.isSelected()){
2 26 Feb 07 jari 339                   posColor = newColor;
2 26 Feb 07 jari 340                   if(useDoubleGradient)
2 26 Feb 07 jari 341                     currentPosGradient = createGradientImage(neutralColor, posColor);
2 26 Feb 07 jari 342                   else
2 26 Feb 07 jari 343                     currentPosGradient = createGradientImage(negColor, posColor);
2 26 Feb 07 jari 344             }
2 26 Feb 07 jari 345               else if(negativeColorButton.isSelected()){
2 26 Feb 07 jari 346                   negColor = newColor;
2 26 Feb 07 jari 347                   if(useDoubleGradient)
2 26 Feb 07 jari 348                     currentNegGradient = createGradientImage(negColor, neutralColor);
2 26 Feb 07 jari 349                   else  //single gradient, modify positive gradient only
2 26 Feb 07 jari 350                     currentPosGradient = createGradientImage(negColor, posColor);                    
2 26 Feb 07 jari 351               }           
2 26 Feb 07 jari 352             repaint();
2 26 Feb 07 jari 353         }
2 26 Feb 07 jari 354         
2 26 Feb 07 jari 355         public void alterNeutralColor() {
2 26 Feb 07 jari 356             if(useDoubleGradient) {
2 26 Feb 07 jari 357               currentPosGradient = createGradientImage(neutralColor, posColor);
2 26 Feb 07 jari 358               currentNegGradient = createGradientImage(negColor, neutralColor);
2 26 Feb 07 jari 359                 repaint();       
2 26 Feb 07 jari 360             }
2 26 Feb 07 jari 361         }
2 26 Feb 07 jari 362         
2 26 Feb 07 jari 363       public void onSwitchGradientStyle() {
2 26 Feb 07 jari 364         if(useDoubleGradient)
2 26 Feb 07 jari 365           refreshPreview();
2 26 Feb 07 jari 366         else { //modify for single gradient
2 26 Feb 07 jari 367               currentPosGradient = createGradientImage(negColor, posColor);          
2 26 Feb 07 jari 368         }          
2 26 Feb 07 jari 369         repaint();
2 26 Feb 07 jari 370       }
2 26 Feb 07 jari 371       
2 26 Feb 07 jari 372         /**
2 26 Feb 07 jari 373          * Refreshes gradients with current color
2 26 Feb 07 jari 374          */
2 26 Feb 07 jari 375         public void refreshPreview() {
2 26 Feb 07 jari 376             currentPosGradient = createGradientImage(neutralColor, posColor);
2 26 Feb 07 jari 377             currentNegGradient = createGradientImage(negColor, neutralColor);
2 26 Feb 07 jari 378             repaint();
2 26 Feb 07 jari 379         }
2 26 Feb 07 jari 380         /**
2 26 Feb 07 jari 381          * Paints dialog
2 26 Feb 07 jari 382          */
2 26 Feb 07 jari 383         public void paint(Graphics g){
2 26 Feb 07 jari 384             super.paintComponent(g);
2 26 Feb 07 jari 385             if(useDoubleGradient) {
2 26 Feb 07 jari 386               g.drawImage(currentNegGradient, 0, 0, this.getWidth()/2, this.getHeight(), null);
2 26 Feb 07 jari 387               g.drawImage(currentPosGradient, this.getWidth()/2, 0, this.getWidth()/2, this.getHeight(), null);
2 26 Feb 07 jari 388             } else {
2 26 Feb 07 jari 389               g.drawImage(currentPosGradient, 0, 0, this.getWidth(), this.getHeight(), null);                          
2 26 Feb 07 jari 390             }
2 26 Feb 07 jari 391         }
2 26 Feb 07 jari 392         
2 26 Feb 07 jari 393         /**
2 26 Feb 07 jari 394          * Creates a gradient image given specified <CODE>Color</CODE>(s)
2 26 Feb 07 jari 395          * @param color1 <CODE>Color</CODE> to display at left side of gradient
2 26 Feb 07 jari 396          * @param color2 <CODE>Color</CODE> to display at right side of gradient
2 26 Feb 07 jari 397          * @return returns a gradient image
2 26 Feb 07 jari 398          */
2 26 Feb 07 jari 399         private BufferedImage createGradientImage(Color color1, Color color2) {
2 26 Feb 07 jari 400         BufferedImage image = (BufferedImage)java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().createCompatibleImage(256,1);       
2 26 Feb 07 jari 401             Graphics2D graphics = image.createGraphics();
2 26 Feb 07 jari 402             GradientPaint gp = new GradientPaint(0, 0, color1, 255, 0, color2);
2 26 Feb 07 jari 403             graphics.setPaint(gp);
2 26 Feb 07 jari 404             graphics.drawRect(0, 0, 255, 1);
2 26 Feb 07 jari 405             return image;
2 26 Feb 07 jari 406         }
2 26 Feb 07 jari 407         
2 26 Feb 07 jari 408         /**
2 26 Feb 07 jari 409          * Returns the current positive gradient image
2 26 Feb 07 jari 410          * @return Returned positive gradient
2 26 Feb 07 jari 411          */
2 26 Feb 07 jari 412         public BufferedImage getPositiveGradient(){
2 26 Feb 07 jari 413             return currentPosGradient;
2 26 Feb 07 jari 414         }
2 26 Feb 07 jari 415         
2 26 Feb 07 jari 416         /**
2 26 Feb 07 jari 417          * Returns the current positive gradient image
2 26 Feb 07 jari 418          * @return negative gradient image
2 26 Feb 07 jari 419          */
2 26 Feb 07 jari 420         public BufferedImage getNegativeGradient(){
2 26 Feb 07 jari 421             return currentNegGradient;
2 26 Feb 07 jari 422         }
2 26 Feb 07 jari 423         
2 26 Feb 07 jari 424     }
2 26 Feb 07 jari 425     
2 26 Feb 07 jari 426     public class Listener implements ActionListener {
2 26 Feb 07 jari 427
2 26 Feb 07 jari 428     /* (non-Javadoc)
2 26 Feb 07 jari 429      * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
2 26 Feb 07 jari 430      */
2 26 Feb 07 jari 431     public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 432       String command = e.getActionCommand();
2 26 Feb 07 jari 433       if(command.equals("change-gradient-command")) {
2 26 Feb 07 jari 434         useDoubleGradient = doubleGradientButton.isSelected();
2 26 Feb 07 jari 435         neutralColorCheckBox.setEnabled(useDoubleGradient);
2 26 Feb 07 jari 436         previewer.onSwitchGradientStyle();        
2 26 Feb 07 jari 437       }
2 26 Feb 07 jari 438       
2 26 Feb 07 jari 439     }
2 26 Feb 07 jari 440       
2 26 Feb 07 jari 441     
2 26 Feb 07 jari 442     }
2 26 Feb 07 jari 443     
2 26 Feb 07 jari 444 }