00001
00002
00003
00004 package DisplayGUI;
00005
00006 import java.awt.Color;
00007 import java.util.Vector;
00008 import java.util.List;
00009 import java.util.ArrayList;
00010 import javax.swing.ListSelectionModel;
00011 import javax.swing.table.TableModel;
00012 import javax.swing.event.*;
00013 import java.util.*;
00014
00015 public class ColorScaleChooser extends javax.swing.JFrame implements displayParams,ListSelectionListener {
00016
00017 private javax.swing.JTable table;
00018 private javax.swing.ButtonGroup buttonGroup1;
00019 private javax.swing.JCheckBox isGradientPaint,isLogScale,isPersisted;
00020 private javax.swing.JLabel title;
00021 private javax.swing.JScrollPane scrollPane;
00022 private javax.swing.JButton defaultButton, applyButton, closeButton;
00023 private javax.swing.JMenuItem removeItem, addItem;
00024 private javax.swing.JMenu dataPopupMenu;
00025
00026 ColorScale thisColorScale;
00027 MyTableModel tableModel = new MyTableModel();
00028 ListSelectionModel rowSM;
00029 ColorScaleManager csm = ColorScaleManager.getInstance();
00030 boolean editValues;
00031
00032 gui guiControl;
00033
00034 public ColorScaleChooser(gui parent, ColorScale colorScale) {
00035 super("Edit Colour Scale");
00036 guiControl=parent;
00037 thisColorScale = new ColorScale(colorScale);
00038 int status = guiControl.displayStatus.getStatus();
00039
00040 editValues = (status==DisplayStatus.TEST_DATA || status==DisplayStatus.SCTDB_DATA || status==DisplayStatus.DCS_DATA || status==DisplayStatus.SCTDB_RODDAQ_DATA);
00041 if(editValues && status!=DisplayStatus.DCS_DATA) editValues = (guiControl.selectorPane.getDisplayParameterIndex()>0);
00042 if(editValues && status==DisplayStatus.TEST_DATA) editValues = (guiControl.selectorPane.getDisplayParameterIndex()<=4);
00043 initComponents();
00044 fillTable();
00045 getTableEditorMenu();
00046 table.addMouseListener(new tableMouseAdapter());
00047 removeItem.setEnabled(false);
00048 addWindowListener(new java.awt.event.WindowAdapter() {
00049 public void windowClosing(java.awt.event.WindowEvent evt) {
00050 closeDialog(evt);
00051 }
00052 });
00053 addItem.setEnabled(editValues);
00054 }
00055
00056 private void initComponents() {
00057
00058 getContentPane().setBackground(backgroundColor);
00059
00060 table = new javax.swing.JTable(tableModel);
00061
00062
00063
00064 scrollPane = new javax.swing.JScrollPane(table);
00065
00066
00067
00068 table.setDefaultRenderer(Color.class,new ColorRenderer(true));
00069
00070 table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
00071 rowSM = table.getSelectionModel();
00072 rowSM.addListSelectionListener(this);
00073
00074 java.awt.GridBagConstraints gridBagConstraints;
00075
00076
00077 title = new javax.swing.JLabel();
00078 isGradientPaint = new javax.swing.JCheckBox();
00079 isLogScale = new javax.swing.JCheckBox();
00080 isPersisted = new javax.swing.JCheckBox();
00081
00082 applyButton = new javax.swing.JButton();
00083 defaultButton = new javax.swing.JButton();
00084 closeButton = new javax.swing.JButton();
00085
00086 getContentPane().setLayout(new java.awt.GridBagLayout());
00087
00088 addWindowListener(new java.awt.event.WindowAdapter() {
00089 public void windowClosing(java.awt.event.WindowEvent evt) {
00090 closeDialog(evt);
00091 }
00092 });
00093
00094 title.setFont(displayBoldFont);
00095 title.setForeground(darkBlueColor);
00096 gridBagConstraints = new java.awt.GridBagConstraints();
00097 gridBagConstraints.gridx = 0;
00098 gridBagConstraints.gridy = 0;
00099 gridBagConstraints.gridwidth = 3;
00100 gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
00101 gridBagConstraints.weighty = 0.1;
00102 getContentPane().add(title, gridBagConstraints);
00103
00104
00105 scrollPane.setBackground(new java.awt.Color(255, 255, 255));
00106 table.setBackground(new java.awt.Color(255, 255, 255));
00107 scrollPane.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.LOWERED));
00108 scrollPane.setMaximumSize(new java.awt.Dimension(500, 500));
00109 scrollPane.setMinimumSize(new java.awt.Dimension(50, 50));
00110 scrollPane.setPreferredSize(new java.awt.Dimension(240, 200));
00111 gridBagConstraints = new java.awt.GridBagConstraints();
00112 gridBagConstraints.gridx = 0;
00113 gridBagConstraints.gridy = 1;
00114 gridBagConstraints.gridwidth = 3;
00115 gridBagConstraints.insets = new java.awt.Insets(0, 3, 3, 3);
00116 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00117 gridBagConstraints.weighty = 0.8;
00118 getContentPane().add(scrollPane, gridBagConstraints);
00119
00120 isGradientPaint.setText("Gradient Scale");
00121 isGradientPaint.setFont(displayScaleFont);
00122 isGradientPaint.setEnabled(editValues);
00123 isGradientPaint.setBackground(backgroundColor);
00124 isGradientPaint.addActionListener(new java.awt.event.ActionListener() {
00125 public void actionPerformed(java.awt.event.ActionEvent evt) {
00126 thisColorScale.setGradientPaint(isGradientPaint.isSelected());
00127 if(!isGradientPaint.isSelected()) {
00128 isLogScale.setSelected(false);
00129 thisColorScale.setLogScale(isLogScale.isSelected());
00130 isLogScale.setEnabled(false);
00131 }
00132 else isLogScale.setEnabled(true);
00133 }
00134 });
00135
00136 gridBagConstraints = new java.awt.GridBagConstraints();
00137 gridBagConstraints.gridx = 0;
00138 gridBagConstraints.gridy = 2;
00139 gridBagConstraints.weighty = 0.1;
00140 gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
00141 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
00142 getContentPane().add(isGradientPaint, gridBagConstraints);
00143
00144 isLogScale.setSelected(true);
00145 isLogScale.setText("Log Scale");
00146 isLogScale.setFont(displayScaleFont);
00147 isLogScale.setEnabled(editValues);
00148 isLogScale.setBackground(backgroundColor);
00149 isLogScale.addActionListener(new java.awt.event.ActionListener() {
00150 public void actionPerformed(java.awt.event.ActionEvent evt) {
00151 thisColorScale.setLogScale(isLogScale.isSelected());
00152 }
00153 });
00154 gridBagConstraints = new java.awt.GridBagConstraints();
00155 gridBagConstraints.gridx = 1;
00156 gridBagConstraints.gridy = 2;
00157 gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
00158 gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER;
00159 getContentPane().add(isLogScale, gridBagConstraints);
00160
00161 isPersisted.setSelected(true);
00162 isPersisted.setText("Persist changes");
00163 isPersisted.setFont(displayScaleFont);
00164 isPersisted.setBackground(backgroundColor);
00165 gridBagConstraints = new java.awt.GridBagConstraints();
00166 gridBagConstraints.gridx = 2;
00167 gridBagConstraints.gridy = 2;
00168 gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
00169 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
00170 getContentPane().add(isPersisted, gridBagConstraints);
00171
00172 applyButton.setText("Apply");
00173 applyButton.setFont(displayScaleFont);
00174 applyButton.addActionListener(new java.awt.event.ActionListener() {
00175 public void actionPerformed(java.awt.event.ActionEvent evt) {
00176 if(thisColorScale.getNoPoints()<2) {
00177 javax.swing.JOptionPane.showMessageDialog(null,"There must be at least 2 points in the scale","Invalid Color Scale",javax.swing.JOptionPane.WARNING_MESSAGE);
00178 return;
00179 }
00180 csm.updateScale(new ColorScale(thisColorScale), isPersisted.isSelected());
00181 guiControl.colorScalePane.setColorScale();
00182 guiControl.displayPane.setDisplayColors();
00183 guiControl.displayPane.refreshDisplay();
00184 }
00185 });
00186 gridBagConstraints = new java.awt.GridBagConstraints();
00187 gridBagConstraints.gridx = 0;
00188 gridBagConstraints.gridy = 3;
00189 gridBagConstraints.weightx = 0.3;
00190 gridBagConstraints.weighty = 0.1;
00191 gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
00192 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
00193 getContentPane().add(applyButton, gridBagConstraints);
00194
00195 defaultButton.setText("Default");
00196 defaultButton.setFont(displayScaleFont);
00197 defaultButton.addActionListener(new java.awt.event.ActionListener() {
00198 public void actionPerformed(java.awt.event.ActionEvent evt) {
00199 thisColorScale = new ColorScale(csm.getDefaultColorScale(thisColorScale.getTitle()));
00200 fillTable();
00201 }
00202 });
00203 gridBagConstraints = new java.awt.GridBagConstraints();
00204 gridBagConstraints.gridx = 1;
00205 gridBagConstraints.gridy = 3;
00206 gridBagConstraints.weightx = 0.3;
00207 gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
00208 gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER;
00209 getContentPane().add(defaultButton, gridBagConstraints);
00210
00211 closeButton.setText("Close");
00212 closeButton.setFont(displayScaleFont);
00213 closeButton.addActionListener(new java.awt.event.ActionListener() {
00214 public void actionPerformed(java.awt.event.ActionEvent evt) {
00215 closeDialog(null);
00216 }
00217 });
00218 gridBagConstraints = new java.awt.GridBagConstraints();
00219 gridBagConstraints.gridx = 2;
00220 gridBagConstraints.gridy = 3;
00221 gridBagConstraints.weightx = 0.4;
00222 gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
00223 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
00224 getContentPane().add(closeButton, gridBagConstraints);
00225
00226
00227 pack();
00228 }
00229
00230 private void fillTable() {
00231
00232 tableModel.reTable();
00233
00234 isGradientPaint.setSelected(thisColorScale.isGradientPaint());
00235 isLogScale.setSelected(thisColorScale.isLogScale());
00236 title.setText("Edit: "+thisColorScale.getTitle());
00237
00238 }
00239
00240 public void showNewScale(ColorScale colorScale) {
00241 thisColorScale=new ColorScale(colorScale);
00242 editValues = (guiControl.displayStatus.getStatus()==DisplayStatus.TEST_DATA || guiControl.displayStatus.getStatus()==DisplayStatus.SCTDB_DATA);
00243 if(editValues) editValues = (guiControl.selectorPane.getDisplayParameterIndex()>0);
00244 removeItem.setEnabled(false);
00245 addItem.setEnabled(editValues);
00246 isLogScale.setEnabled(editValues);
00247 isGradientPaint.setEnabled(editValues);
00248 fillTable();
00249 }
00250
00251 private void closeDialog(java.awt.event.WindowEvent evt) {
00252 setVisible(false);
00253 }
00254
00255 public class MyTableModel extends javax.swing.table.AbstractTableModel {
00256 private String[] columnNames = {"Data","Label","Color"};
00257
00258 public MyTableModel() {
00259 }
00260
00261
00262 public void reTable() {
00263 fireTableChanged(null);
00264 return ;
00265 }
00266
00267
00268
00269
00270
00271 public String getColumnName(int column) {
00272 if (columnNames[column] != null) {
00273 return columnNames[column];
00274 } else {
00275 return "";
00276 }
00277 }
00278
00279 public Class getColumnClass(int column) {
00280 return getValueAt(0, column).getClass();
00281
00282 }
00283
00284 public boolean isCellEditable(int row, int column) {
00285 return false;
00286 }
00287
00288 public int getColumnCount() {
00289 return columnNames.length;
00290 }
00291
00292 public int getRowCount() {
00293 return thisColorScale.getNoPoints();
00294 }
00295
00296 public Object getValueAt(int row, int column) {
00297
00298 ColorScalePoint scalePoint = thisColorScale.getColorScalePoint(row);
00299 return scalePoint.getData(column);
00300 }
00301
00302
00303 public void setValueAt(Object value, int row, int column) {
00304 ColorScalePoint scalePoint = thisColorScale.getColorScalePoint(row);
00305 scalePoint.setData(column,value);
00306 }
00307
00308
00309
00310 }
00311
00312 class tableMouseAdapter extends java.awt.event.MouseAdapter {
00313 public void mouseClicked(java.awt.event.MouseEvent e) {
00314 int rowSelect = table.rowAtPoint(new java.awt.Point(e.getX(),e.getY()));
00315 rowSM.setSelectionInterval(rowSelect,rowSelect);
00316 switch(e.getModifiers()) {
00317 case java.awt.event.InputEvent.BUTTON1_MASK:
00318 ScalePointEditor spe = new ScalePointEditor(ColorScaleChooser.this,true,thisColorScale.getColorScalePoint(rowSelect),editValues);
00319 ColorScalePoint newPoint = spe.getColorScalePoint();
00320 if(newPoint!=null) {
00321 thisColorScale.setColorScalePoint(rowSelect,newPoint);
00322 fillTable();
00323 }
00324 break;
00325 case java.awt.event.InputEvent.BUTTON2_MASK:
00326 case java.awt.event.InputEvent.BUTTON3_MASK:
00327 javax.swing.JPopupMenu pMenu = dataPopupMenu.getPopupMenu();
00328 pMenu.show(e.getComponent(),e.getX(),e.getY());
00329 pMenu.setInvoker(dataPopupMenu);
00330 break;
00331 default:
00332 }
00333 }
00334 }
00335
00336 private void getTableEditorMenu() {
00337 dataPopupMenu = new javax.swing.JMenu("Table Editor");
00338 dataPopupMenu.setFont(menuFont);
00339
00340 removeItem = new javax.swing.JMenuItem("Remove point");
00341 removeItem.setFont(menuFont);
00342 dataPopupMenu.add(removeItem);
00343 removeItem.addActionListener(new java.awt.event.ActionListener() {
00344 public void actionPerformed(java.awt.event.ActionEvent evt) {
00345 thisColorScale.removePoint(rowSM.getMinSelectionIndex());
00346 fillTable();
00347 }
00348 });
00349 addItem = new javax.swing.JMenuItem("Add new point...");
00350 addItem.setFont(menuFont);
00351 dataPopupMenu.add(addItem);
00352 addItem.addActionListener(new java.awt.event.ActionListener() {
00353 public void actionPerformed(java.awt.event.ActionEvent evt) {
00354 ScalePointEditor spe = new ScalePointEditor(ColorScaleChooser.this,true,null,editValues);
00355 ColorScalePoint newPoint = spe.getColorScalePoint();
00356 if(newPoint!=null) {
00357 thisColorScale.add(newPoint);
00358 fillTable();
00359 }
00360 }
00361
00362 });
00363
00364 }
00365
00366 public void valueChanged(ListSelectionEvent e) {
00367
00368
00369 if (e.getValueIsAdjusting()) return;
00370
00371 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
00372
00373 if (lsm.isSelectionEmpty()) {
00374
00375 removeItem.setEnabled(false);
00376 return;
00377 }
00378
00379 removeItem.setEnabled(editValues);
00380 }
00381
00382
00383
00384 }