View Javadoc

1   package org.lsst.ccs.plugin.jas3.trending.timeselection;
2   
3   import java.awt.Component;
4   import java.awt.Window;
5   import java.awt.event.ActionEvent;
6   import java.awt.event.ActionListener;
7   import javax.swing.JButton;
8   import javax.swing.JList;
9   import javax.swing.JOptionPane;
10  import javax.swing.JScrollPane;
11  import javax.swing.JTable;
12  import javax.swing.ListSelectionModel;
13  import javax.swing.SwingUtilities;
14  import javax.swing.event.ListSelectionEvent;
15  import javax.swing.event.ListSelectionListener;
16  
17  /**
18   * Dialog for managing time window presets.
19   * 
20   * @author onoprien
21   */
22  public class PresetsDialog {
23  
24  // -- Private parts : ----------------------------------------------------------
25      
26      private final int VSPACE = 5;
27      private final int HSPACE = 10;
28      
29      private final JScrollPane root;
30      private final JButton editButton, deleteButton, newButton, okButton;
31      private final JTable table;
32      
33      private final PresetList timeWindowList;
34      private TimeSelection selectedTimeWindow;
35  
36  
37  // -- Construction and initialization : ----------------------------------------
38      
39      private PresetsDialog(PresetList data) {
40          
41          timeWindowList = data;
42          
43          editButton = new JButton("Edit...");
44          editButton.addActionListener(new ActionListener() {
45              public void actionPerformed(ActionEvent e) {
46                  TimeSelection ts = getSelectedPreset();
47                  ts = TimeSelectionPanel.editTimeWindow(editButton, ts);
48                  if (ts != null) {
49                      timeWindowList.insert(ts);
50                      setSelectedPreset(ts);
51                  }
52              }
53          });
54          
55          deleteButton = new JButton("Delete");
56          deleteButton.addActionListener(new ActionListener() {
57              public void actionPerformed(ActionEvent e) {
58                  TimeSelection ts = getSelectedPreset();
59                  if (ts != null) timeWindowList.delete(ts);
60              }
61          });
62          
63          newButton = new JButton("New...");
64          newButton.addActionListener(new ActionListener() {
65              public void actionPerformed(ActionEvent e) {
66                  TimeSelection ts = TimeSelectionPanel.editTimeWindow(newButton, null);
67                  if (ts != null) {
68                      timeWindowList.insert(ts);
69                      setSelectedPreset(ts);
70                  }
71              }
72          });
73          
74          okButton = new JButton("  OK  ");
75          okButton.addActionListener(new ActionListener() {
76              public void actionPerformed(ActionEvent e) {
77                  selectedTimeWindow = getSelectedPreset();
78                  Window w = SwingUtilities.getWindowAncestor(okButton);
79                  if (w != null) w.setVisible(false);
80              }
81          });
82          
83          table = new JTable(timeWindowList);
84          table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
85          table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
86              public void valueChanged(ListSelectionEvent e) {
87                  TimeSelection ts = getSelectedPreset();
88                  editButton.setEnabled(ts != null);
89                  deleteButton.setEnabled(ts != null);
90              }
91          });
92          
93          
94          root = new JScrollPane(table);
95      }
96      
97  // -- Showing the dialog : -----------------------------------------------------
98      
99      /**
100      * Displays the dialog for managing time window presets.
101      * 
102      * @param parent Parent component.
103      * @param data List of presets known to the application.
104      * @return Preset selected by the user, or <tt>null</tt> if no preset was selected or if the dialog was canceled.
105      */
106     static public TimeSelection managePresets(Component parent, PresetList data) {
107         PresetsDialog dialog = new PresetsDialog(data);
108         int out = JOptionPane.showOptionDialog(parent, dialog.root, "Trending Time Window Presets", 
109                        JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, 
110                        new JButton[] {dialog.editButton, dialog.deleteButton, dialog.newButton, dialog.okButton}, dialog.okButton);
111         return dialog.selectedTimeWindow;
112     }
113     
114     
115 // -- Local methods : ----------------------------------------------------------
116     
117     private TimeSelection getSelectedPreset() {
118         int index = table.getSelectedRow();
119         return index == -1 ? null : timeWindowList.get(index);
120     }
121     
122     private void setSelectedPreset(TimeSelection ts) {
123         int index = timeWindowList.indexOf(ts);
124         if (index == -1) {
125             table.getSelectionModel().clearSelection();
126         } else {
127             table.getSelectionModel().setSelectionInterval(index, index);
128         }
129     }
130 }