mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/gdm/GDMColorScaleDialog.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: GDMColorScaleDialog.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 package org.tigr.microarray.mev.cluster.gui.impl.gdm;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.Color;
2 26 Feb 07 jari 15 import java.awt.Dimension;
2 26 Feb 07 jari 16 import java.awt.Font;
2 26 Feb 07 jari 17 import java.awt.FontMetrics;
2 26 Feb 07 jari 18 import java.awt.Frame;
2 26 Feb 07 jari 19 import java.awt.GradientPaint;
2 26 Feb 07 jari 20 import java.awt.Graphics;
2 26 Feb 07 jari 21 import java.awt.Graphics2D;
2 26 Feb 07 jari 22 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 23 import java.awt.GridBagLayout;
2 26 Feb 07 jari 24 import java.awt.GridLayout;
2 26 Feb 07 jari 25 import java.awt.Insets;
2 26 Feb 07 jari 26 import java.awt.Toolkit;
2 26 Feb 07 jari 27 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 28 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 29
2 26 Feb 07 jari 30 import javax.swing.BorderFactory;
2 26 Feb 07 jari 31 import javax.swing.JButton;
2 26 Feb 07 jari 32 import javax.swing.JFrame;
2 26 Feb 07 jari 33 import javax.swing.JLabel;
2 26 Feb 07 jari 34 import javax.swing.JOptionPane;
2 26 Feb 07 jari 35 import javax.swing.JPanel;
2 26 Feb 07 jari 36 import javax.swing.JTextField;
2 26 Feb 07 jari 37 import javax.swing.SwingConstants;
2 26 Feb 07 jari 38 import javax.swing.border.BevelBorder;
2 26 Feb 07 jari 39
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.AlgorithmDialog;
2 26 Feb 07 jari 42 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.DialogListener;
2 26 Feb 07 jari 43 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.dialogHelpUtil.HelpWindow;
2 26 Feb 07 jari 44 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 45
2 26 Feb 07 jari 46 public class GDMColorScaleDialog extends AlgorithmDialog {
2 26 Feb 07 jari 47     
2 26 Feb 07 jari 48     public static final String OK_CMD = "ok-cmd";
2 26 Feb 07 jari 49     public static final String CANCEL_CMD = "cancel-cmd";
2 26 Feb 07 jari 50     public static final String REFRESH_CMD = "refresh-cmd";
2 26 Feb 07 jari 51     public static final String RESET_CMD = "reset-cmd";
2 26 Feb 07 jari 52     public static final int REFRESH_RES = 100;
2 26 Feb 07 jari 53     public static final int RESET_RES = 101;
2 26 Feb 07 jari 54     
2 26 Feb 07 jari 55     private int result;
2 26 Feb 07 jari 56     
2 26 Feb 07 jari 57     private JLabel lowerJL = new JLabel("Lower Limit [0,1):  ", JLabel.RIGHT);
2 26 Feb 07 jari 58     private JLabel upperJL = new JLabel("Upper Limit (0,1]: ", JLabel.RIGHT);
2 26 Feb 07 jari 59     private JLabel saturationJL = new JLabel("% Saturation: ", JLabel.RIGHT);
2 26 Feb 07 jari 60     
2 26 Feb 07 jari 61     private JTextField lowerJTF;
2 26 Feb 07 jari 62     private JTextField upperJTF;
2 26 Feb 07 jari 63     private JTextField saturationJTF;
2 26 Feb 07 jari 64     
2 26 Feb 07 jari 65     private JPanel buttonsPanel;
2 26 Feb 07 jari 66     private JButton refreshBut;
2 26 Feb 07 jari 67     private JButton resetBut;
2 26 Feb 07 jari 68     private JButton cancelBut;
2 26 Feb 07 jari 69     private JButton okBut;
2 26 Feb 07 jari 70     private JButton infoButton;
2 26 Feb 07 jari 71     
2 26 Feb 07 jari 72     private RangePreviewPanel previewPanel;
2 26 Feb 07 jari 73     
2 26 Feb 07 jari 74     private FloatMatrix geneMatrix;
2 26 Feb 07 jari 75     private int num_genes;
2 26 Feb 07 jari 76     
2 26 Feb 07 jari 77     private float origLower;
2 26 Feb 07 jari 78     private float origUpper;
2 26 Feb 07 jari 79     
2 26 Feb 07 jari 80     private GDMScaleListener listener;
2 26 Feb 07 jari 81     
2 26 Feb 07 jari 82     public GDMColorScaleDialog(Frame parent, float lower, float upper, FloatMatrix matrix, int genes, Color lowerColor, Color upperColor) {
2 26 Feb 07 jari 83         
2 26 Feb 07 jari 84         super(parent, "Set Color Scale", true);
2 26 Feb 07 jari 85         this.geneMatrix = matrix;
2 26 Feb 07 jari 86         this.num_genes = genes;
2 26 Feb 07 jari 87         origLower = lower;
2 26 Feb 07 jari 88         origUpper = upper;
2 26 Feb 07 jari 89         Listener listener = new Listener();
2 26 Feb 07 jari 90         addWindowListener(listener);
2 26 Feb 07 jari 91         
2 26 Feb 07 jari 92         JPanel paramsPanel = new JPanel(new GridBagLayout());
2 26 Feb 07 jari 93         
2 26 Feb 07 jari 94         paramsPanel.setBackground(Color.white);
2 26 Feb 07 jari 95         paramsPanel.setBorder(BorderFactory.createLineBorder(Color.black));
2 26 Feb 07 jari 96         
2 26 Feb 07 jari 97         GridBagConstraints gbc = new GridBagConstraints();
2 26 Feb 07 jari 98         gbc.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 99         
2 26 Feb 07 jari 100         gbc.gridx = 0;
2 26 Feb 07 jari 101         gbc.gridy = 0;
2 26 Feb 07 jari 102         gbc.gridwidth = 1;
2 26 Feb 07 jari 103         gbc.insets.left = 40;
2 26 Feb 07 jari 104         gbc.insets.right = 10;
2 26 Feb 07 jari 105         gbc.insets.top = 25;
2 26 Feb 07 jari 106         lowerJL.setBackground(Color.white);
2 26 Feb 07 jari 107         lowerJL.setOpaque(true);
2 26 Feb 07 jari 108         
2 26 Feb 07 jari 109         lowerJL.setHorizontalAlignment(SwingConstants.RIGHT);
2 26 Feb 07 jari 110         lowerJL.setHorizontalTextPosition(SwingConstants.RIGHT);
2 26 Feb 07 jari 111         paramsPanel.add(lowerJL, gbc);
2 26 Feb 07 jari 112         gbc.insets.top = 10;
2 26 Feb 07 jari 113         gbc.gridy = 1;
2 26 Feb 07 jari 114         paramsPanel.add(upperJL, gbc);
2 26 Feb 07 jari 115         gbc.gridy = 2;
2 26 Feb 07 jari 116         gbc.insets.bottom = 25;
2 26 Feb 07 jari 117         paramsPanel.add(saturationJL, gbc);
2 26 Feb 07 jari 118         gbc.insets.bottom = 0;
2 26 Feb 07 jari 119         
2 26 Feb 07 jari 120         gbc.gridx = 1;
2 26 Feb 07 jari 121         gbc.gridy = 0;
2 26 Feb 07 jari 122         gbc.insets.left = 10;
2 26 Feb 07 jari 123         gbc.insets.top = 25;
2 26 Feb 07 jari 124         Float lowerF = new Float(lower);
2 26 Feb 07 jari 125         lowerJTF = new JTextField(lowerF.toString(), 10);
2 26 Feb 07 jari 126         paramsPanel.add(lowerJTF, gbc);
2 26 Feb 07 jari 127         gbc.gridy = 1;
2 26 Feb 07 jari 128         gbc.insets.top = 10;
2 26 Feb 07 jari 129         Float upperF = new Float(upper);
2 26 Feb 07 jari 130         upperJTF = new JTextField(upperF.toString(), 10);
2 26 Feb 07 jari 131         paramsPanel.add(upperJTF, gbc);
2 26 Feb 07 jari 132         
2 26 Feb 07 jari 133         gbc.gridy = 2;
2 26 Feb 07 jari 134         gbc.insets.top = 10;
2 26 Feb 07 jari 135         gbc.insets.bottom = 25;
2 26 Feb 07 jari 136         Float saturationF = new Float(calcPercentSaturation(lower, upper));
2 26 Feb 07 jari 137         saturationJTF = new JTextField(saturationF.toString(), 10);
2 26 Feb 07 jari 138         saturationJTF.setEditable(false);
2 26 Feb 07 jari 139         paramsPanel.add(saturationJTF, gbc);
2 26 Feb 07 jari 140         
2 26 Feb 07 jari 141         gbc.gridx = 2;
2 26 Feb 07 jari 142         gbc.gridwidth = 2;
2 26 Feb 07 jari 143         gbc.insets = new Insets(0,0,0,0);
2 26 Feb 07 jari 144         
2 26 Feb 07 jari 145         JPanel mainButtonPanel = new JPanel(new GridBagLayout());
2 26 Feb 07 jari 146         buttonsPanel = new JPanel(new GridLayout(1, 4, 10, 10));
2 26 Feb 07 jari 147         
2 26 Feb 07 jari 148         refreshBut = new JButton("Preview");
2 26 Feb 07 jari 149         refreshBut.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
2 26 Feb 07 jari 150         refreshBut.setSize(60,30);
2 26 Feb 07 jari 151         refreshBut.setPreferredSize(new Dimension(60,30));
2 26 Feb 07 jari 152         refreshBut.setFocusPainted(false);
2 26 Feb 07 jari 153         refreshBut.setActionCommand(REFRESH_CMD);
2 26 Feb 07 jari 154         refreshBut.addActionListener(listener);
2 26 Feb 07 jari 155         buttonsPanel.add(refreshBut);
2 26 Feb 07 jari 156         
2 26 Feb 07 jari 157         resetBut = new JButton("Reset");
2 26 Feb 07 jari 158         resetBut.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
2 26 Feb 07 jari 159         resetBut.setFocusPainted(false);
2 26 Feb 07 jari 160         resetBut.setActionCommand(RESET_CMD);
2 26 Feb 07 jari 161         resetBut.addActionListener(listener);
2 26 Feb 07 jari 162         
2 26 Feb 07 jari 163         buttonsPanel.add(resetBut);
2 26 Feb 07 jari 164         
2 26 Feb 07 jari 165         cancelBut = new JButton("Cancel");
2 26 Feb 07 jari 166         cancelBut.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
2 26 Feb 07 jari 167         cancelBut.setSize(60,30);
2 26 Feb 07 jari 168         cancelBut.setPreferredSize(new Dimension(60,30));
2 26 Feb 07 jari 169         cancelBut.setFocusPainted(false);
2 26 Feb 07 jari 170         cancelBut.setActionCommand(CANCEL_CMD);
2 26 Feb 07 jari 171         cancelBut.addActionListener(listener);
2 26 Feb 07 jari 172         buttonsPanel.add(cancelBut);
2 26 Feb 07 jari 173         
2 26 Feb 07 jari 174         okBut = new JButton("OK");
2 26 Feb 07 jari 175         okBut.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED, new Color(240,240,240), new Color(180,180,180), new Color(10,0,0), new Color(10,10,10) ));
2 26 Feb 07 jari 176         okBut.setSize(60,30);
2 26 Feb 07 jari 177         okBut.setPreferredSize(new Dimension(60,30));
2 26 Feb 07 jari 178         okBut.setFocusPainted(false);
2 26 Feb 07 jari 179         okBut.setActionCommand(OK_CMD);
2 26 Feb 07 jari 180         okBut.addActionListener(listener);
2 26 Feb 07 jari 181         buttonsPanel.add(okBut);
2 26 Feb 07 jari 182         
2 26 Feb 07 jari 183         infoButton = new JButton(null, GUIFactory.getIcon("Information24.gif"));
2 26 Feb 07 jari 184         infoButton.setActionCommand("info-command");
2 26 Feb 07 jari 185         infoButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
2 26 Feb 07 jari 186         infoButton.setSize(30,30);
2 26 Feb 07 jari 187         infoButton.setPreferredSize(new Dimension(30,30));
2 26 Feb 07 jari 188         infoButton.setFocusPainted(false);
2 26 Feb 07 jari 189         infoButton.addActionListener(listener);
2 26 Feb 07 jari 190         
2 26 Feb 07 jari 191         mainButtonPanel.add(infoButton, new GridBagConstraints(0,0,1,1,1.0,1.0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0),0,0));
2 26 Feb 07 jari 192         mainButtonPanel.add(buttonsPanel, new GridBagConstraints(1,0,1,1,1.0,1.0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0));
2 26 Feb 07 jari 193         
2 26 Feb 07 jari 194         previewPanel = new RangePreviewPanel(lowerColor, upperColor, lower, upper);
2 26 Feb 07 jari 195         gbc.gridx = 0;
2 26 Feb 07 jari 196         gbc.gridy = 3;
2 26 Feb 07 jari 197         gbc.gridheight = 1;
2 26 Feb 07 jari 198         gbc.gridwidth = 2;
2 26 Feb 07 jari 199         gbc.weightx = 1.0;
2 26 Feb 07 jari 200         gbc.weighty = 1.0;
2 26 Feb 07 jari 201         gbc.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 202         gbc.anchor = GridBagConstraints.CENTER;
2 26 Feb 07 jari 203         paramsPanel.add(previewPanel, gbc);
2 26 Feb 07 jari 204         
2 26 Feb 07 jari 205         this.addContent(paramsPanel);
2 26 Feb 07 jari 206         supplantButtonPanel(mainButtonPanel);
2 26 Feb 07 jari 207         pack();
2 26 Feb 07 jari 208     }
2 26 Feb 07 jari 209     
2 26 Feb 07 jari 210     /**
2 26 Feb 07 jari 211      * Sets the color scale listener
2 26 Feb 07 jari 212      */
2 26 Feb 07 jari 213     public void setGDMScaleListener( GDMScaleListener scaleListener){
2 26 Feb 07 jari 214         listener = scaleListener;
2 26 Feb 07 jari 215     }
2 26 Feb 07 jari 216     
2 26 Feb 07 jari 217     /**
2 26 Feb 07 jari 218      * Shows the dialog.
2 26 Feb 07 jari 219      */
2 26 Feb 07 jari 220     public int showModal() {
2 26 Feb 07 jari 221         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 222         setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);
2 26 Feb 07 jari 223         Float lowerF = new Float(lowerJTF.getText());
2 26 Feb 07 jari 224         Float upperF = new Float(upperJTF.getText());
2 26 Feb 07 jari 225         Float satF = new Float(calcPercentSaturation(lowerF.floatValue(), upperF.floatValue()));
2 26 Feb 07 jari 226         saturationJTF.setText(satF.toString());
2 26 Feb 07 jari 227         GDMColorScaleDialog.this.previewPanel.changeLimits(lowerF.floatValue(), upperF.floatValue());
2 26 Feb 07 jari 228         show();
2 26 Feb 07 jari 229         return result;
2 26 Feb 07 jari 230     }
2 26 Feb 07 jari 231     
2 26 Feb 07 jari 232     
2 26 Feb 07 jari 233     /**
2 26 Feb 07 jari 234      * Returns Lower Limit value.
2 26 Feb 07 jari 235      */
2 26 Feb 07 jari 236     public float getLowerLimit() {
2 26 Feb 07 jari 237         return Float.parseFloat(lowerJTF.getText());
2 26 Feb 07 jari 238     }
2 26 Feb 07 jari 239     
2 26 Feb 07 jari 240     /**
2 26 Feb 07 jari 241      * Returns Upper Limit value.
2 26 Feb 07 jari 242      */
2 26 Feb 07 jari 243     public float getUpperLimit() {
2 26 Feb 07 jari 244         return Float.parseFloat(upperJTF.getText());
2 26 Feb 07 jari 245     }
2 26 Feb 07 jari 246     
2 26 Feb 07 jari 247     public float calcPercentSaturation(float lowerf, float upperf) {
2 26 Feb 07 jari 248         int i, j, out_minmax;
2 26 Feb 07 jari 249         float dist, sat;
2 26 Feb 07 jari 250         
2 26 Feb 07 jari 251         out_minmax = 0;
2 26 Feb 07 jari 252         for (i=0; i<this.num_genes; i++) {
2 26 Feb 07 jari 253             for (j=0; j<this.num_genes; j++) {
2 26 Feb 07 jari 254                 dist = geneMatrix.get(i, j);
2 26 Feb 07 jari 255                 if ((dist < lowerf) || (dist > upperf)) {
2 26 Feb 07 jari 256                     out_minmax++;
2 26 Feb 07 jari 257                 }
2 26 Feb 07 jari 258             }
2 26 Feb 07 jari 259         }
2 26 Feb 07 jari 260         
2 26 Feb 07 jari 261         sat = ((float)out_minmax / (float)(num_genes*num_genes)) * 100;
2 26 Feb 07 jari 262         return sat;
2 26 Feb 07 jari 263     }
2 26 Feb 07 jari 264     
2 26 Feb 07 jari 265     /**
2 26 Feb 07 jari 266      *  Verifies that that values are appropriate.
2 26 Feb 07 jari 267      */
2 26 Feb 07 jari 268     private boolean isValidInput(float low, float high){
2 26 Feb 07 jari 269         if(high <= low){
2 26 Feb 07 jari 270             JOptionPane.showMessageDialog(GDMColorScaleDialog.this, "The lower limit must be less than or equal to the upper limit.  Please enter new limits.", "Invalid Range Input", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 271             return false;
2 26 Feb 07 jari 272         }
2 26 Feb 07 jari 273         if(high > 1.0){
2 26 Feb 07 jari 274             JOptionPane.showMessageDialog(GDMColorScaleDialog.this, "The upper limit must be equal to or less than 1.0. Please enter a new value.", "Invalid Range Input", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 275             return false;
2 26 Feb 07 jari 276         }
2 26 Feb 07 jari 277         if(low < 0.0){
2 26 Feb 07 jari 278             JOptionPane.showMessageDialog(GDMColorScaleDialog.this, "The lower limit must be equal to or greater than 0.0. Please enter a new value.", "Invalid Range Input", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 279             return false;
2 26 Feb 07 jari 280         }
2 26 Feb 07 jari 281         return true;
2 26 Feb 07 jari 282     }
2 26 Feb 07 jari 283     
2 26 Feb 07 jari 284     public static void main(String [] args){
2 26 Feb 07 jari 285         FloatMatrix matrix = new FloatMatrix(3,3);
2 26 Feb 07 jari 286         matrix.set(0,0,1.0f );
2 26 Feb 07 jari 287         matrix.set(1,0,0.10f);
2 26 Feb 07 jari 288         matrix.set(2,0,0.80f);
2 26 Feb 07 jari 289         
2 26 Feb 07 jari 290         matrix.set(0,1,1.0f );
2 26 Feb 07 jari 291         matrix.set(1,1,0.134f);
2 26 Feb 07 jari 292         matrix.set(2,1,0.25f);
2 26 Feb 07 jari 293         
2 26 Feb 07 jari 294         matrix.set(0,2,0.430f );
2 26 Feb 07 jari 295         matrix.set(1,2,0.370f);
2 26 Feb 07 jari 296         matrix.set(2,2,0.04f);
2 26 Feb 07 jari 297         
2 26 Feb 07 jari 298         GDMColorScaleDialog dialog = new GDMColorScaleDialog(new Frame(), 0.0f, 0.1f, matrix, matrix.getRowDimension(), Color.black, Color.red);
2 26 Feb 07 jari 299         dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
2 26 Feb 07 jari 300         dialog.showModal();
2 26 Feb 07 jari 301     }
2 26 Feb 07 jari 302     
2 26 Feb 07 jari 303     
2 26 Feb 07 jari 304     /**
2 26 Feb 07 jari 305      *  The Range Preview Panel displays the current color range gradient.
2 26 Feb 07 jari 306      */
2 26 Feb 07 jari 307     private class RangePreviewPanel extends JPanel{
2 26 Feb 07 jari 308         int GRADIENT_HEIGHT = 40;
2 26 Feb 07 jari 309         
2 26 Feb 07 jari 310         Color lowerColor;
2 26 Feb 07 jari 311         Color upperColor;
2 26 Feb 07 jari 312         float lower;
2 26 Feb 07 jari 313         float upper;
2 26 Feb 07 jari 314         JPanel lowerPanel;
2 26 Feb 07 jari 315         JPanel upperPanel;
2 26 Feb 07 jari 316         GradientPanel midPanel;
2 26 Feb 07 jari 317         
2 26 Feb 07 jari 318         JPanel previewPanel;
2 26 Feb 07 jari 319         ScalePanel gradientPanel;
2 26 Feb 07 jari 320         
2 26 Feb 07 jari 321         /** Constructs a new RangePreviewPanel */
2 26 Feb 07 jari 322         public RangePreviewPanel(Color lowerColor, Color upperColor, float lower, float upper){
2 26 Feb 07 jari 323             this.lower = lower;
2 26 Feb 07 jari 324             this.upper = upper;
2 26 Feb 07 jari 325             this.lowerColor = lowerColor;
2 26 Feb 07 jari 326             this.upperColor = upperColor;
2 26 Feb 07 jari 327             this.setBackground(Color.white);
2 26 Feb 07 jari 328             lowerPanel = new JPanel();
2 26 Feb 07 jari 329             lowerPanel.setBackground(lowerColor);
2 26 Feb 07 jari 330             Dimension prefSize = new Dimension(10, 40);
2 26 Feb 07 jari 331             lowerPanel.setPreferredSize(prefSize);
2 26 Feb 07 jari 332             upperPanel = new JPanel();
2 26 Feb 07 jari 333             upperPanel.setBackground(upperColor);
2 26 Feb 07 jari 334             upperPanel.setPreferredSize(prefSize);
2 26 Feb 07 jari 335             
2 26 Feb 07 jari 336             midPanel = new GradientPanel();
2 26 Feb 07 jari 337             midPanel.setPreferredSize(prefSize);
2 26 Feb 07 jari 338             previewPanel = new JPanel(new GridBagLayout());
2 26 Feb 07 jari 339             previewPanel.setBorder(BorderFactory.createTitledBorder("Effective Range Preview"));
2 26 Feb 07 jari 340             previewPanel.setBackground(Color.white);
2 26 Feb 07 jari 341             
2 26 Feb 07 jari 342             gradientPanel = new ScalePanel();
2 26 Feb 07 jari 343             gradientPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 344             gradientPanel.setBackground(Color.white);
2 26 Feb 07 jari 345             gradientPanel.add(lowerPanel, new GridBagConstraints(0,0,1,1,1.0,1.0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10,10,20,0),0,0));
2 26 Feb 07 jari 346             gradientPanel.add(midPanel, new GridBagConstraints(1,0,1,1,1.0,1.0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10,0,20,0),0,0));
2 26 Feb 07 jari 347             gradientPanel.add(upperPanel, new GridBagConstraints(2,0,1,1,1.0,1.0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10,0,20,10),0,0));
2 26 Feb 07 jari 348             
2 26 Feb 07 jari 349             previewPanel.add(gradientPanel, new GridBagConstraints(0,0,1,1,1.0,1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0));
2 26 Feb 07 jari 350             this.setLayout(new GridBagLayout());
2 26 Feb 07 jari 351             add(previewPanel, new GridBagConstraints(0,0,1,1,1.0,1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0));
2 26 Feb 07 jari 352         }
2 26 Feb 07 jari 353         
2 26 Feb 07 jari 354         
2 26 Feb 07 jari 355         public void changeLimits(float low, float high){
2 26 Feb 07 jari 356             this.lower = low;
2 26 Feb 07 jari 357             this.upper = high;
2 26 Feb 07 jari 358             int w = gradientPanel.getWidth()-20;
2 26 Feb 07 jari 359             int h = lowerPanel.getHeight();
2 26 Feb 07 jari 360             lowerPanel.setSize((int)(w*(low)), h);
2 26 Feb 07 jari 361             lowerPanel.setPreferredSize(new Dimension((int)(w*(low)), h));
2 26 Feb 07 jari 362             upperPanel.setSize((int)(w*(1.0 - high)), h);
2 26 Feb 07 jari 363             upperPanel.setPreferredSize(new Dimension((int)(w*(1.0-high)), h));
2 26 Feb 07 jari 364             midPanel.setSize((int)(w*(high-low)), h);
2 26 Feb 07 jari 365             midPanel.setPreferredSize(new Dimension((int)(w*(high-low)), h));
2 26 Feb 07 jari 366             validate();
2 26 Feb 07 jari 367             gradientPanel.repaint();
2 26 Feb 07 jari 368         }
2 26 Feb 07 jari 369         
2 26 Feb 07 jari 370         /** The GradientPanel class displays the color gradient */
2 26 Feb 07 jari 371         private class GradientPanel extends JPanel{
2 26 Feb 07 jari 372             GradientPaint gp;
2 26 Feb 07 jari 373             
2 26 Feb 07 jari 374             public void paint(Graphics g){
2 26 Feb 07 jari 375                 super.paint(g);
2 26 Feb 07 jari 376                 Graphics2D g2 = (Graphics2D)g;
2 26 Feb 07 jari 377                 Dimension dim = this.getSize();
2 26 Feb 07 jari 378                 gp = new GradientPaint(0,dim.height/2, lowerColor,dim.width,dim.height/2,upperColor);
2 26 Feb 07 jari 379                 g2.setPaint(gp);
2 26 Feb 07 jari 380                 g2.fillRect(0,0,dim.width, dim.height);
2 26 Feb 07 jari 381                 g2.setColor(Color.black);
2 26 Feb 07 jari 382             }
2 26 Feb 07 jari 383             
2 26 Feb 07 jari 384         }
2 26 Feb 07 jari 385         
2 26 Feb 07 jari 386         /** The ScalePanel class encapsulates the gradient panel and augments by drawing the
2 26 Feb 07 jari 387          * limit boundries and the scale below the gradient image
2 26 Feb 07 jari 388          */
2 26 Feb 07 jari 389         private class ScalePanel extends JPanel{
2 26 Feb 07 jari 390             int [] x;
2 26 Feb 07 jari 391             int [] y;
2 26 Feb 07 jari 392             
2 26 Feb 07 jari 393             public ScalePanel(){
2 26 Feb 07 jari 394                 super();
2 26 Feb 07 jari 395                 Font font = getFont();
2 26 Feb 07 jari 396                 setFont(new Font(font.getFontName(), Font.BOLD, font.getSize()));
2 26 Feb 07 jari 397                 x = new int[3];
2 26 Feb 07 jari 398                 y = new int[3];
2 26 Feb 07 jari 399             }
2 26 Feb 07 jari 400             
2 26 Feb 07 jari 401             /** Repaints based on current limits */
2 26 Feb 07 jari 402             public void paint(Graphics g){
2 26 Feb 07 jari 403                 super.paint(g);
2 26 Feb 07 jari 404                 int h = this.getHeight();
2 26 Feb 07 jari 405                 int w = this.getWidth()- 20;
2 26 Feb 07 jari 406                 int gradientH = this.getHeight() - 20;
2 26 Feb 07 jari 407                 int xLower = (int)((lower)*w) + 10;
2 26 Feb 07 jari 408                 int xUpper = (int)((upper)*w) + 10;
2 26 Feb 07 jari 409                 x[0] = xLower;
2 26 Feb 07 jari 410                 x[1] = xLower - 5;
2 26 Feb 07 jari 411                 x[2] = xLower + 5;
2 26 Feb 07 jari 412                 
2 26 Feb 07 jari 413                 y[0] = 10;
2 26 Feb 07 jari 414                 y[1] = 1;
2 26 Feb 07 jari 415                 y[2] = 1;
2 26 Feb 07 jari 416                 
2 26 Feb 07 jari 417                 g.setColor(Color.blue);
2 26 Feb 07 jari 418                 g.fillPolygon(x, y, 3);
2 26 Feb 07 jari 419                 
2 26 Feb 07 jari 420                 x[0] = xUpper;
2 26 Feb 07 jari 421                 x[1] = xUpper - 5;
2 26 Feb 07 jari 422                 x[2] = xUpper + 5;
2 26 Feb 07 jari 423                 
2 26 Feb 07 jari 424                 g.fillPolygon(x, y, 3);
2 26 Feb 07 jari 425                 
2 26 Feb 07 jari 426                 g.setColor(upperColor);
2 26 Feb 07 jari 427                 g.fillRect(xLower-1, 10, 3, midPanel.getHeight());
2 26 Feb 07 jari 428                 g.setColor(lowerColor);
2 26 Feb 07 jari 429                 g.fillRect(xUpper-1, 10, 3, midPanel.getHeight());
2 26 Feb 07 jari 430                 g.setColor(Color.black);
2 26 Feb 07 jari 431                 FontMetrics fm = g.getFontMetrics();
2 26 Feb 07 jari 432                 g.drawString("0.0", 10, midPanel.getHeight() + 10 + fm.getHeight());
2 26 Feb 07 jari 433                 g.drawString("0.5", ((getWidth())/2 - fm.stringWidth("0.5")/2), midPanel.getHeight() + 10 + fm.getHeight());
2 26 Feb 07 jari 434                 g.drawString("1.0", getWidth()- 10 - fm.stringWidth("1.0"), midPanel.getHeight() + 10 + fm.getHeight());
2 26 Feb 07 jari 435                 
2 26 Feb 07 jari 436             }
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      * Handles dialog events
2 26 Feb 07 jari 445      */
2 26 Feb 07 jari 446     private class Listener extends DialogListener {
2 26 Feb 07 jari 447         
2 26 Feb 07 jari 448         Float lowerF;
2 26 Feb 07 jari 449         Float upperF;
2 26 Feb 07 jari 450         
2 26 Feb 07 jari 451         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 452             String command = e.getActionCommand();
2 26 Feb 07 jari 453             if (command.equals(OK_CMD)) {
2 26 Feb 07 jari 454                 try {
2 26 Feb 07 jari 455                     lowerF = new Float(lowerJTF.getText());
2 26 Feb 07 jari 456                     upperF = new Float(upperJTF.getText());
2 26 Feb 07 jari 457                 } catch (NumberFormatException nfe){
2 26 Feb 07 jari 458                     JOptionPane.showMessageDialog(GDMColorScaleDialog.this, "The entered values are not valid numberical entries. Please enter new values", "Invalid Range Input", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 459                     return;
2 26 Feb 07 jari 460                 }
2 26 Feb 07 jari 461                 if(!isValidInput(lowerF.floatValue(), upperF.floatValue()))
2 26 Feb 07 jari 462                     return;
2 26 Feb 07 jari 463                 result = JOptionPane.OK_OPTION;
2 26 Feb 07 jari 464                 dispose();
2 26 Feb 07 jari 465             } else if (command.equals(CANCEL_CMD)) {
2 26 Feb 07 jari 466                 result = JOptionPane.CANCEL_OPTION;
2 26 Feb 07 jari 467                 GDMColorScaleDialog.this.lowerJTF.setText(String.valueOf(origLower));
2 26 Feb 07 jari 468                 GDMColorScaleDialog.this.upperJTF.setText(String.valueOf(origUpper));
2 26 Feb 07 jari 469                 lowerF = new Float(lowerJTF.getText());
2 26 Feb 07 jari 470                 upperF = new Float(upperJTF.getText());
2 26 Feb 07 jari 471                 Float satF = new Float(calcPercentSaturation(lowerF.floatValue(), upperF.floatValue()));
2 26 Feb 07 jari 472                 saturationJTF.setText(satF.toString());
2 26 Feb 07 jari 473                 dispose();
2 26 Feb 07 jari 474             } else if (command.equals(RESET_CMD)) {
2 26 Feb 07 jari 475                 result = RESET_RES;
2 26 Feb 07 jari 476                 GDMColorScaleDialog.this.lowerJTF.setText(String.valueOf(origLower));
2 26 Feb 07 jari 477                 GDMColorScaleDialog.this.upperJTF.setText(String.valueOf(origUpper));
2 26 Feb 07 jari 478                 lowerF = new Float(lowerJTF.getText());
2 26 Feb 07 jari 479                 upperF = new Float(upperJTF.getText());
2 26 Feb 07 jari 480                 Float satF = new Float(calcPercentSaturation(lowerF.floatValue(), upperF.floatValue()));
2 26 Feb 07 jari 481                 saturationJTF.setText(satF.toString());
2 26 Feb 07 jari 482                 GDMColorScaleDialog.this.previewPanel.changeLimits(lowerF.floatValue(), upperF.floatValue());
2 26 Feb 07 jari 483             } else if (command.equals(REFRESH_CMD)) {
2 26 Feb 07 jari 484                 try{
2 26 Feb 07 jari 485                     lowerF = new Float(lowerJTF.getText());
2 26 Feb 07 jari 486                     upperF = new Float(upperJTF.getText());
2 26 Feb 07 jari 487                 } catch (NumberFormatException nfe){
2 26 Feb 07 jari 488                     JOptionPane.showMessageDialog(GDMColorScaleDialog.this, "The entered values are not valid numberical entries. Please enter new values", "Invalid Range Input", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 489                     return;
2 26 Feb 07 jari 490                 }
2 26 Feb 07 jari 491                 if(!isValidInput(lowerF.floatValue(), upperF.floatValue()))
2 26 Feb 07 jari 492                     return;
2 26 Feb 07 jari 493                 Float satF = new Float(calcPercentSaturation(lowerF.floatValue(), upperF.floatValue()));
2 26 Feb 07 jari 494                 saturationJTF.setText(satF.toString());
2 26 Feb 07 jari 495                 GDMColorScaleDialog.this.previewPanel.changeLimits(lowerF.floatValue(), upperF.floatValue());
2 26 Feb 07 jari 496                 if(listener != null){
2 26 Feb 07 jari 497                     listener.scaleChanged(lowerF.floatValue(), upperF.floatValue());
2 26 Feb 07 jari 498                 }
2 26 Feb 07 jari 499             } else if(command.equals("info-command")){
2 26 Feb 07 jari 500                 HelpWindow hw = new HelpWindow(GDMColorScaleDialog.this, "GDM Color Range Dialog");
2 26 Feb 07 jari 501                 if(hw.getWindowContent()){
2 26 Feb 07 jari 502                     hw.setSize(450,650);
2 26 Feb 07 jari 503                     hw.setLocation();
2 26 Feb 07 jari 504                     hw.show();
2 26 Feb 07 jari 505                 }
2 26 Feb 07 jari 506                 else {
2 26 Feb 07 jari 507                     hw.setVisible(false);
2 26 Feb 07 jari 508                     hw.dispose();
2 26 Feb 07 jari 509                 }                 
2 26 Feb 07 jari 510             }
2 26 Feb 07 jari 511         }
2 26 Feb 07 jari 512         
2 26 Feb 07 jari 513         public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 514             result = JOptionPane.CLOSED_OPTION;
2 26 Feb 07 jari 515             dispose();
2 26 Feb 07 jari 516         }
2 26 Feb 07 jari 517     }
2 26 Feb 07 jari 518     
2 26 Feb 07 jari 519 }