00001 package DisplayGUI;
00002
00003 import java.awt.*;
00004 import java.awt.event.*;
00005 import java.awt.image.*;
00006 import javax.swing.*;
00007 import java.awt.Graphics2D.*;
00008 import java.awt.geom.*;
00009 import java.util.Hashtable;
00010 import java.util.Enumeration;
00011 import java.util.Vector;
00012
00013 class ColorScalePane extends JPanel implements displayParams {
00014 gui guiControl;
00015
00016 FontMetrics metrics;
00017
00018 int maxWidth,maxHeight;
00019 Dimension dim;
00020 Rectangle area;
00021 Rectangle2D.Double drawRect;
00022 GradientPaint colorGradient;
00023 boolean firstTime=true;
00024 int x,y;
00025
00026 ColorScale colorScale;
00027 String scaleDescription;
00028
00029 JMenu dataPopupMenu;
00030 ColorScaleManager csm;
00031
00032 ColorScaleChooser colorScaleChooser;
00033
00034 public ColorScalePane(gui parent){
00035 guiControl=parent;
00036 colorScale=null;
00037 setBackground(backgroundColor);
00038 dim = getSize();
00039 maxWidth = (int)dim.getWidth();
00040
00041 setMinimumSize(new Dimension(300,60));
00042 setPreferredSize(new Dimension(300,60));
00043 setBorder(new javax.swing.border.TitledBorder(null, "Display Colour Scale", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 0, 11), new java.awt.Color(0, 0, 153)));
00044
00045 csm = ColorScaleManager.getInstance();
00046
00047 getColorEditorMenu();
00048 addMouseListener(new colorScaleMouseAdapter());
00049
00050 }
00051
00052
00053 public void setColorScale() {
00054 TestSelection testSelection = guiControl.tablesDisplayPane.getTestSelection();
00055 int testIndex = (testSelection!=null) ? testSelection.getTestIndex() : -1;
00056 int noScans = (testSelection!=null) ? testSelection.getNoScans() : 0;
00057 String selectedParam = guiControl.selectorPane.getDisplayParameter();
00058 if(selectedParam!=null && selectedParam.equals("Analysed Data")) noScans=1;
00059 int parameterIndex = guiControl.selectorPane.getDisplayParameterIndex();
00060 int mouseOption = guiControl.selectorPane.getMouseClickIndex();
00061 int displayOption = guiControl.displayPane.getDisplayOption();
00062 int display = guiControl.displayStatus.getStatus();
00063
00064 colorScale = csm.getColorScale(guiControl.displayStatus.getStatus(),testIndex,parameterIndex,mouseOption,displayOption);
00065
00066 if(colorScale!=null && display==DisplayStatus.IS_MONITOR) {
00067 switch(noScans) {
00068 case 0:
00069 colorScale=null;
00070 break;
00071 case 1:
00072 colorScale.setLastPoint(1);
00073 colorScale.setGradientPaint(false);
00074 break;
00075 default:
00076 colorScale.setLastPoint(noScans);
00077 colorScale.setGradientPaint(true);
00078 }
00079 }
00080
00081
00082 repaint();
00083 }
00084 public void setColorScale(ColorScale colorScale) {
00085 this.colorScale=colorScale;
00086 repaint();
00087 }
00088 public ColorScale getColorScale() {
00089 return colorScale;
00090 }
00091
00092
00093 public void mousePressed(MouseEvent e){
00094 }
00095
00096
00097
00098 public void mouseDragged(MouseEvent e){
00099 }
00100
00101
00102 public void mouseReleased(MouseEvent e){
00103
00104 }
00105
00106
00107 public void mouseMoved(MouseEvent e){
00108
00109 }
00110
00111
00112 public void mouseClicked(MouseEvent e){
00113 }
00114
00115 public void mouseExited(MouseEvent e){}
00116 public void mouseEntered(MouseEvent e){}
00117
00118
00119
00120
00121 public void paintComponent(Graphics g){
00122
00123 super.paintComponent(g);
00124
00125
00126
00127 Graphics2D g2 = (Graphics2D)g;
00128 g2.setStroke(new BasicStroke(1.0f));
00129
00130 if ( firstTime ) {
00131 dim = getSize();
00132 area = new Rectangle(dim);
00133 maxWidth = (int)dim.getWidth();
00134 maxHeight = (int)dim.getHeight();
00135 firstTime = false;
00136 g2.setFont(displayTextFont);
00137 metrics = g2.getFontMetrics();
00138 x = (int)(maxWidth/2.)-colorBoxWidth/2;
00139 y = (int)(maxHeight/2.)-colorBoxHeight/2;
00140
00141
00142 }
00143
00144 g2.setPaint(Color.white);
00145 g2.fill(area);
00146
00147 if(colorScale!=null) {
00148 colorScale.drawColorScale(g2, x, y);
00149 scaleDescription = colorScale.getTitle();
00150 g2.setFont(displayScaleFont);
00151 g2.setPaint(darkBlueColor);
00152 metrics = g2.getFontMetrics();
00153 String thisString = "Scale: "+scaleDescription;
00154 int stringWidth = metrics.stringWidth(thisString);
00155 int stringHeight = metrics.getHeight();
00156 int thisX = (int)(maxWidth/2.)-stringWidth/2;
00157 int thisY = (int)(maxHeight/2.)+ colorBoxHeight/2 + stringHeight + 2;
00158 g2.drawString(thisString,thisX,thisY);
00159 }
00160
00161
00162 }
00163
00164 class colorScaleMouseAdapter extends java.awt.event.MouseAdapter {
00165 public void mouseClicked(java.awt.event.MouseEvent e) {
00166 switch(e.getModifiers()) {
00167 case java.awt.event.InputEvent.BUTTON2_MASK:
00168 case java.awt.event.InputEvent.BUTTON3_MASK:
00169 JPopupMenu pMenu = dataPopupMenu.getPopupMenu();
00170 pMenu.show(e.getComponent(),e.getX(),e.getY());
00171 pMenu.setInvoker(dataPopupMenu);
00172 break;
00173 default:
00174 }
00175 }
00176 }
00177
00178 private void getColorEditorMenu() {
00179 dataPopupMenu = new JMenu("Color Editor");
00180 dataPopupMenu.setFont(menuFont);
00181
00182 JMenuItem item1 = new JMenuItem("Edit Display Colours/Scale...");
00183 item1.setFont(menuFont);
00184 dataPopupMenu.add(item1);
00185 item1.addActionListener(new java.awt.event.ActionListener() {
00186 public void actionPerformed(java.awt.event.ActionEvent evt) {
00187 if(colorScale==null) return;
00188 if(colorScaleChooser==null) {
00189 colorScaleChooser = new ColorScaleChooser(guiControl, colorScale);
00190 colorScaleChooser.setLocationRelativeTo(guiControl);
00191 }
00192 else colorScaleChooser.showNewScale(colorScale);
00193 colorScaleChooser.setVisible(true);
00194
00195 }
00196
00197 });
00198
00199 }
00200
00201
00202 }