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