source: tmcsimulator/trunk/src/tmcsim/highwaymodel/trafficeventseditor/TrafficEventsEditor.java @ 457

Revision 457, 57.8 KB checked in by jdalbey, 7 years ago (diff)

Source file re-org. Move files from obsolete atmsdriver package to highwaymodel package.

Line 
1package tmcsim.highwaymodel.trafficeventseditor;
2
3import tmcsim.highwaymodel.Highway;
4import tmcsim.highwaymodel.LoopDetector;
5import tmcsim.highwaymodel.LoopDetector.DOTCOLOR;
6import tmcsim.highwaymodel.Station;
7import timeselector.*;
8import java.io.File;
9import java.util.ArrayList;
10import java.util.Enumeration;
11import java.util.Observable;
12import java.util.Observer;
13import javax.swing.AbstractButton;
14import javax.swing.AbstractListModel;
15import javax.swing.ButtonGroup;
16import javax.swing.DefaultListSelectionModel;
17import javax.swing.JComboBox;
18import javax.swing.JDialog;
19import javax.swing.JFileChooser;
20import javax.swing.JFrame;
21import javax.swing.JList;
22import javax.swing.JOptionPane;
23import javax.swing.JPanel;
24import javax.swing.JTable;
25import javax.swing.JTextField;
26import javax.swing.ListSelectionModel;
27import javax.swing.event.ListSelectionEvent;
28import javax.swing.event.ListSelectionListener;
29import javax.swing.table.AbstractTableModel;
30
31/**
32 *
33 * @author jtorres
34 */
35public class TrafficEventsEditor extends javax.swing.JFrame implements Observer
36{
37   
38    TimeFrames timeFrames;
39   
40    /**
41     * Creates new form BatchBuilderGUI
42     */
43    public TrafficEventsEditor(TimeFrames timeFrames)
44    {
45        initComponents();
46        this.timeFrames = timeFrames;
47       
48        HighwayList.setModel(new HighwaysListModel());
49        HighwayList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
50        HighwayList.addListSelectionListener(new HighwaysListSelectionListener());
51       
52        StationTable.setModel(new StationTableModel());
53        StationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
54        StationTable.getSelectionModel().addListSelectionListener(
55                new StationTableListSelectionListener());
56       
57        TimeFrameList.setModel(new TimeFrameListModel());
58        TimeFrameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
59        TimeFrameList.addListSelectionListener(new TimeFrameListSelectionListener());
60       
61        LoopDetectorTable.setModel(new LoopDetectorTableModel());
62        LoopDetectorTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
63        LoopDetectorTable.getSelectionModel().addListSelectionListener(
64                new LoopDetectorTableListSelectionListener());
65       
66        TrafficLaneEventsTable.setModel(new TrafficLaneEventsTableModel());
67        TrafficLaneEventsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
68        TrafficLaneEventsTable.getSelectionModel().addListSelectionListener(
69                new TrafficLaneEventsTableSelectionListener());
70       
71        GreenButton.setSelected(true);
72    }
73   
74    private class TrafficLaneEventsTableModel extends AbstractTableModel
75    {
76        String[] columnNames = {"Route", "StationID", "Postmile", "LoopID", "LoopType", 
77            "LoopDesc", "Color"};
78        int rows;
79        int cols;
80        String[][] data;
81        TimeFrame currFrame;
82        public TrafficLaneEventsTableModel()
83        {           
84            currFrame = timeFrames.currentTimeFrame;
85            rows = currFrame != null ? currFrame.events.size() : 0;
86            cols = columnNames.length;
87            data = new String[rows][cols];
88            for(int i = 0; i < rows; i++)
89            {
90                TrafficLaneEvent currEvent = currFrame.events.get(i);
91                data[i][0] = Integer.toString(currEvent.routeNum);
92                data[i][1] = Integer.toString(currEvent.station.vdsID);
93                data[i][2] = Double.toString(currEvent.station.postmile);
94                data[i][3] = Integer.toString(currEvent.loopDetector.loopID);
95                data[i][4] = currEvent.loopDetector.loopLocationID;
96                data[i][5] = currEvent.loopDetector.loopLocation;
97                data[i][6] = currEvent.color.getLetter();
98            }
99        }
100       
101        @Override
102        public String getColumnName(int col)
103        {
104            return columnNames[col];
105        }
106       
107        @Override
108        public int getRowCount()
109        {
110            return rows;
111        }
112
113        @Override
114        public int getColumnCount()
115        {
116            return cols;
117        }
118
119        @Override
120        public Object getValueAt(int rowIndex, int columnIndex)
121        {
122            return data[rowIndex][columnIndex];
123        }
124       
125    }
126   
127    private class LoopDetectorTableModel extends AbstractTableModel
128    {
129        String[] columnnames = {"Loop_ID", "Loop_Type", "Loop_Desc"};
130        int rows;
131        int cols;
132        String[][] data;
133        Station currStn;
134       
135        public LoopDetectorTableModel()
136        {
137            currStn = timeFrames.currentStation;
138            rows = currStn != null ? currStn.loops.size() : 0;
139            cols = columnnames.length;
140            data = new String[rows][cols];
141            for(int i = 0; i < rows; i++)
142            {
143                data[i][0] = Integer.toString(currStn.loops.get(i).loopID);
144                data[i][1] = currStn.loops.get(i).loopLocationID;
145                data[i][2] = currStn.loops.get(i).loopLocation;
146            }
147        }
148       
149        @Override
150        public String getColumnName(int col)
151        {
152            return columnnames[col];
153        }
154       
155        @Override
156        public int getRowCount()
157        {
158            return rows;
159        }
160
161        @Override
162        public int getColumnCount()
163        {
164            return cols;
165        }
166
167        @Override
168        public Object getValueAt(int rowIndex, int columnIndex)
169        {
170            return data[rowIndex][columnIndex];
171        }
172       
173    }
174   
175    private class TimeFrameListModel extends AbstractListModel
176    {
177        ArrayList<TimeFrame> frames;
178       
179        public TimeFrameListModel()
180        {
181            frames = (ArrayList<TimeFrame>) timeFrames.frames;
182        }
183
184        @Override
185        public int getSize()
186        {
187            return frames.size();
188        }
189
190        @Override
191        public Object getElementAt(int index)
192        {
193            return frames.get(index);
194        }
195       
196    }
197
198    private class TrafficLaneEventsTableSelectionListener implements ListSelectionListener
199    {
200        @Override
201        public void valueChanged(ListSelectionEvent e)
202        {
203            if(e.getValueIsAdjusting())
204                return;
205            DefaultListSelectionModel mod = (DefaultListSelectionModel) e.getSource();
206            int index = mod.getMaxSelectionIndex();
207            if(index >= 0)
208                timeFrames.setCurrentTrafficLaneEvent(index);
209        }
210    }
211   
212    private class HighwaysListSelectionListener implements ListSelectionListener
213    {
214        @Override
215        public void valueChanged(ListSelectionEvent e)
216        {
217            if(e.getValueIsAdjusting())
218                return;
219            JList source = (JList) e.getSource();
220            timeFrames.setCurrentHighway(source.getSelectedIndex());
221        }
222    }
223   
224    private class TimeFrameListSelectionListener implements ListSelectionListener
225    {
226        @Override
227        public void valueChanged(ListSelectionEvent e)
228        {
229            if(e.getValueIsAdjusting())
230                return;
231            JList source = (JList) e.getSource();
232            int index = source.getSelectedIndex();
233            if(index >= 0)
234            {
235                timeFrames.setCurrentTimeFrame(index);
236            }
237        }
238    }
239   
240    private class StationTableListSelectionListener implements ListSelectionListener
241    {
242
243        @Override
244        public void valueChanged(ListSelectionEvent e)
245        {
246            if(e.getValueIsAdjusting())
247                return;
248            DefaultListSelectionModel mod = (DefaultListSelectionModel) e.getSource();
249            int index = mod.getMaxSelectionIndex();
250            if(index >= 0)
251                timeFrames.setCurrentStation(index);
252        }
253    }
254   
255    private class LoopDetectorTableListSelectionListener implements ListSelectionListener
256    {
257
258        @Override
259        public void valueChanged(ListSelectionEvent e)
260        {
261            if(e.getValueIsAdjusting())
262                return;
263            DefaultListSelectionModel mod = (DefaultListSelectionModel) e.getSource();
264            int index = mod.getMaxSelectionIndex();
265            if(index >= 0)
266                timeFrames.setCurrentLoopDetector(index);
267        }
268       
269    }
270   
271    private class StationTableModel extends AbstractTableModel
272    {
273        String[] columnNames = {"lds_id", "direction", "postmile", "location"};
274        String[][] data;
275        Highway hwy;
276        int rows;
277        int cols;
278       
279        public StationTableModel()
280        {
281            hwy = TrafficEventsEditor.this.timeFrames.currentHighway;
282            cols = columnNames.length;
283            rows = hwy != null ? hwy.stations.size() : 0;
284            data = new String[rows][cols];
285            for(int i = 0; i < rows; i++)
286            {
287                data[i][0] = Integer.toString(hwy.stations.get(i).vdsID);
288                data[i][1] = hwy.stations.get(i).direction.getLetter();
289                data[i][2] = Double.toString(hwy.stations.get(i).postmile);
290                data[i][3] = hwy.stations.get(i).location;
291            }
292        }
293       
294        @Override
295        public String getColumnName(int col)
296        {
297            return columnNames[col];
298        }
299
300        @Override
301        public int getRowCount()
302        {
303            return rows;
304        }
305
306        @Override
307        public int getColumnCount()
308        {
309            return cols;
310        }
311
312        @Override
313        public Object getValueAt(int rowIndex, int columnIndex)
314        {
315            return data[rowIndex][columnIndex];
316        }
317    }
318   
319    private class HighwaysListModel extends AbstractListModel
320    {
321       
322        @Override
323        public int getSize()
324        {
325            return TrafficEventsEditor.this.timeFrames.highways.highways.size();
326        }
327
328        @Override
329        public Object getElementAt(int index)
330        {
331            return TrafficEventsEditor.this.timeFrames.highways.highways.get(index);
332        }
333    }
334
335    /**
336     * This method is called from within the constructor to initialize the form.
337     * WARNING: Do NOT modify this code. The content of this method is always
338     * regenerated by the Form Editor.
339     */
340    @SuppressWarnings("unchecked")
341    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
342    private void initComponents() {
343
344        colorRadioButtons = new javax.swing.ButtonGroup();
345        jPanel6 = new javax.swing.JPanel();
346        jPanel2 = new javax.swing.JPanel();
347        HighwayScrollPane = new javax.swing.JScrollPane();
348        HighwayList = new javax.swing.JList();
349        jPanel4 = new javax.swing.JPanel();
350        StationScrollPane = new javax.swing.JScrollPane();
351        StationTable = new javax.swing.JTable();
352        jPanel5 = new javax.swing.JPanel();
353        LoopDetectorScrollPane = new javax.swing.JScrollPane();
354        LoopDetectorTable = new javax.swing.JTable();
355        jPanel1 = new javax.swing.JPanel();
356        jPanel9 = new javax.swing.JPanel();
357        jLabel1 = new javax.swing.JLabel();
358        CurrentTimeFrameLabel = new javax.swing.JLabel();
359        CurrentHighwayLabel = new javax.swing.JLabel();
360        jLabel2 = new javax.swing.JLabel();
361        jLabel3 = new javax.swing.JLabel();
362        CurrentStationLabel = new javax.swing.JLabel();
363        CurrentStationPostmileLabel = new javax.swing.JLabel();
364        jLabel4 = new javax.swing.JLabel();
365        jLabel5 = new javax.swing.JLabel();
366        CurrentStationLocationLabel = new javax.swing.JLabel();
367        CurrentLoopDetectorLabel = new javax.swing.JLabel();
368        jLabel6 = new javax.swing.JLabel();
369        jLabel7 = new javax.swing.JLabel();
370        CurrentLoopDetectorTypeLabel = new javax.swing.JLabel();
371        CurrentLoopDetectorDescLabel = new javax.swing.JLabel();
372        jLabel8 = new javax.swing.JLabel();
373        jLabel9 = new javax.swing.JLabel();
374        CurrentStationDirectionLabel = new javax.swing.JLabel();
375        jPanel7 = new javax.swing.JPanel();
376        GreenButton = new javax.swing.JRadioButton();
377        YellowButton = new javax.swing.JRadioButton();
378        RedButton = new javax.swing.JRadioButton();
379        AddNewEventButton = new javax.swing.JButton();
380        DeleteEventButton = new javax.swing.JButton();
381        jPanel11 = new javax.swing.JPanel();
382        jPanel12 = new javax.swing.JPanel();
383        SinglePreviewStationButton = new javax.swing.JButton();
384        SinglePreviewHighwaysButton = new javax.swing.JButton();
385        jPanel13 = new javax.swing.JPanel();
386        CumulativePreviewStationButton = new javax.swing.JButton();
387        CumulativePreviewHighwaysButton = new javax.swing.JButton();
388        jPanel15 = new javax.swing.JPanel();
389        jPanel3 = new javax.swing.JPanel();
390        TimeFrameScrollPane = new javax.swing.JScrollPane();
391        TimeFrameList = new javax.swing.JList();
392        jPanel10 = new javax.swing.JPanel();
393        AddNewTimeFrameButton = new javax.swing.JButton();
394        DeleteTimeFrameButton = new javax.swing.JButton();
395        jPanel8 = new javax.swing.JPanel();
396        jScrollPane1 = new javax.swing.JScrollPane();
397        TrafficLaneEventsTable = new javax.swing.JTable();
398        jPanel14 = new javax.swing.JPanel();
399        jButton1 = new javax.swing.JButton();
400        btnSave = new javax.swing.JButton();
401        jButton3 = new javax.swing.JButton();
402
403        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
404        setTitle("Traffic Events Editor");
405
406        jPanel6.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Lane Selection Panel"));
407
408        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Highway"));
409
410        HighwayList.setModel(new javax.swing.AbstractListModel() {
411            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
412            public int getSize() { return strings.length; }
413            public Object getElementAt(int i) { return strings[i]; }
414        });
415        HighwayScrollPane.setViewportView(HighwayList);
416
417        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
418        jPanel2.setLayout(jPanel2Layout);
419        jPanel2Layout.setHorizontalGroup(
420            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
421            .addComponent(HighwayScrollPane, javax.swing.GroupLayout.Alignment.TRAILING)
422        );
423        jPanel2Layout.setVerticalGroup(
424            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
425            .addComponent(HighwayScrollPane)
426        );
427
428        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Station"));
429
430        StationTable.setModel(new javax.swing.table.DefaultTableModel(
431            new Object [][] {
432                {null, null, null, null},
433                {null, null, null, null},
434                {null, null, null, null},
435                {null, null, null, null}
436            },
437            new String [] {
438                "Title 1", "Title 2", "Title 3", "Title 4"
439            }
440        ));
441        StationScrollPane.setViewportView(StationTable);
442
443        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
444        jPanel4.setLayout(jPanel4Layout);
445        jPanel4Layout.setHorizontalGroup(
446            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
447            .addComponent(StationScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 546, Short.MAX_VALUE)
448        );
449        jPanel4Layout.setVerticalGroup(
450            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
451            .addComponent(StationScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
452        );
453
454        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Loop Detector"));
455
456        LoopDetectorTable.setModel(new javax.swing.table.DefaultTableModel(
457            new Object [][] {
458                {null, null, null, null},
459                {null, null, null, null},
460                {null, null, null, null},
461                {null, null, null, null}
462            },
463            new String [] {
464                "Title 1", "Title 2", "Title 3", "Title 4"
465            }
466        ));
467        LoopDetectorScrollPane.setViewportView(LoopDetectorTable);
468
469        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
470        jPanel5.setLayout(jPanel5Layout);
471        jPanel5Layout.setHorizontalGroup(
472            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
473            .addComponent(LoopDetectorScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 479, Short.MAX_VALUE)
474        );
475        jPanel5Layout.setVerticalGroup(
476            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
477            .addComponent(LoopDetectorScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
478        );
479
480        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
481        jPanel6.setLayout(jPanel6Layout);
482        jPanel6Layout.setHorizontalGroup(
483            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
484            .addGroup(jPanel6Layout.createSequentialGroup()
485                .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
486                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
487                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
488                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
489                .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
490        );
491        jPanel6Layout.setVerticalGroup(
492            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
493            .addGroup(jPanel6Layout.createSequentialGroup()
494                .addGap(6, 6, 6)
495                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
496                    .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
497                    .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
498                    .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
499        );
500
501        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Current Selection"));
502        jPanel1.setLayout(new java.awt.GridLayout(1, 0));
503
504        jLabel1.setText("TimeFrame:");
505
506        CurrentTimeFrameLabel.setText("null");
507
508        CurrentHighwayLabel.setText("null");
509
510        jLabel2.setText("Highway:");
511
512        jLabel3.setText("Station:");
513
514        CurrentStationLabel.setText("null");
515
516        CurrentStationPostmileLabel.setText("null");
517
518        jLabel4.setText("Postmile:");
519
520        jLabel5.setText("Location:");
521
522        CurrentStationLocationLabel.setText("null");
523
524        CurrentLoopDetectorLabel.setText("null");
525
526        jLabel6.setText("Loop:");
527
528        jLabel7.setText("Type:");
529
530        CurrentLoopDetectorTypeLabel.setText("null");
531
532        CurrentLoopDetectorDescLabel.setText("null");
533
534        jLabel8.setText("Desc:");
535
536        jLabel9.setText("Direction:");
537
538        CurrentStationDirectionLabel.setText("null");
539
540        javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9);
541        jPanel9.setLayout(jPanel9Layout);
542        jPanel9Layout.setHorizontalGroup(
543            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
544            .addGroup(jPanel9Layout.createSequentialGroup()
545                .addContainerGap()
546                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
547                    .addComponent(jLabel1)
548                    .addComponent(jLabel2)
549                    .addComponent(jLabel3)
550                    .addComponent(jLabel6)
551                    .addGroup(jPanel9Layout.createSequentialGroup()
552                        .addGap(6, 6, 6)
553                        .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
554                            .addComponent(jLabel9)
555                            .addComponent(jLabel5)
556                            .addComponent(jLabel4)
557                            .addComponent(jLabel7)
558                            .addComponent(jLabel8))))
559                .addGap(18, 18, 18)
560                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
561                    .addComponent(CurrentLoopDetectorTypeLabel)
562                    .addComponent(CurrentLoopDetectorLabel)
563                    .addComponent(CurrentStationLocationLabel)
564                    .addComponent(CurrentStationDirectionLabel)
565                    .addComponent(CurrentStationLabel)
566                    .addComponent(CurrentHighwayLabel)
567                    .addComponent(CurrentTimeFrameLabel)
568                    .addComponent(CurrentStationPostmileLabel)
569                    .addComponent(CurrentLoopDetectorDescLabel))
570                .addContainerGap(239, Short.MAX_VALUE))
571        );
572        jPanel9Layout.setVerticalGroup(
573            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
574            .addGroup(jPanel9Layout.createSequentialGroup()
575                .addContainerGap()
576                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
577                    .addComponent(jLabel1)
578                    .addComponent(CurrentTimeFrameLabel))
579                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
580                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
581                    .addComponent(jLabel2)
582                    .addComponent(CurrentHighwayLabel))
583                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
584                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
585                    .addComponent(jLabel3)
586                    .addComponent(CurrentStationLabel))
587                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
588                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
589                    .addComponent(jLabel9)
590                    .addComponent(CurrentStationDirectionLabel))
591                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
592                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
593                    .addComponent(jLabel4)
594                    .addComponent(CurrentStationPostmileLabel))
595                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
596                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
597                    .addComponent(jLabel5)
598                    .addComponent(CurrentStationLocationLabel))
599                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
600                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
601                    .addComponent(jLabel6)
602                    .addComponent(CurrentLoopDetectorLabel))
603                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
604                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
605                    .addComponent(jLabel7)
606                    .addComponent(CurrentLoopDetectorTypeLabel))
607                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
608                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
609                    .addComponent(jLabel8)
610                    .addComponent(CurrentLoopDetectorDescLabel))
611                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
612        );
613
614        jPanel1.add(jPanel9);
615
616        jPanel7.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
617
618        colorRadioButtons.add(GreenButton);
619        GreenButton.setText("Green");
620
621        colorRadioButtons.add(YellowButton);
622        YellowButton.setText("Yellow");
623
624        colorRadioButtons.add(RedButton);
625        RedButton.setText("Red");
626
627        AddNewEventButton.setText("Add New Event");
628        AddNewEventButton.addActionListener(new java.awt.event.ActionListener() {
629            public void actionPerformed(java.awt.event.ActionEvent evt) {
630                AddLaneEventButtonActionPerformed(evt);
631            }
632        });
633
634        DeleteEventButton.setText("Delete Selected Event");
635        DeleteEventButton.addActionListener(new java.awt.event.ActionListener() {
636            public void actionPerformed(java.awt.event.ActionEvent evt) {
637                DeleteEventButtonActonPerformed(evt);
638            }
639        });
640
641        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
642        jPanel7.setLayout(jPanel7Layout);
643        jPanel7Layout.setHorizontalGroup(
644            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
645            .addGroup(jPanel7Layout.createSequentialGroup()
646                .addContainerGap()
647                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
648                    .addComponent(DeleteEventButton, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
649                    .addGroup(jPanel7Layout.createSequentialGroup()
650                        .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
651                            .addComponent(RedButton)
652                            .addComponent(YellowButton)
653                            .addComponent(GreenButton))
654                        .addGap(0, 0, Short.MAX_VALUE))
655                    .addComponent(AddNewEventButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
656                .addContainerGap())
657        );
658        jPanel7Layout.setVerticalGroup(
659            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
660            .addGroup(jPanel7Layout.createSequentialGroup()
661                .addContainerGap()
662                .addComponent(GreenButton)
663                .addGap(12, 12, 12)
664                .addComponent(YellowButton)
665                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
666                .addComponent(RedButton)
667                .addGap(18, 18, 18)
668                .addComponent(AddNewEventButton)
669                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
670                .addComponent(DeleteEventButton)
671                .addContainerGap(25, Short.MAX_VALUE))
672        );
673
674        jPanel1.add(jPanel7);
675
676        jPanel11.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Preview Lane Events on ATMS"));
677        jPanel11.setLayout(new java.awt.BorderLayout());
678
679        jPanel12.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED), "Selected Time Frame Preview"));
680
681        SinglePreviewStationButton.setText("Send Selected Station Events");
682        SinglePreviewStationButton.addActionListener(new java.awt.event.ActionListener() {
683            public void actionPerformed(java.awt.event.ActionEvent evt) {
684                SinglePreviewStationButtonActionPerformed(evt);
685            }
686        });
687
688        SinglePreviewHighwaysButton.setText("Send All Events");
689        SinglePreviewHighwaysButton.addActionListener(new java.awt.event.ActionListener() {
690            public void actionPerformed(java.awt.event.ActionEvent evt) {
691                SinglePreviewHighwaysButtonActionPerformed(evt);
692            }
693        });
694
695        javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12);
696        jPanel12.setLayout(jPanel12Layout);
697        jPanel12Layout.setHorizontalGroup(
698            jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
699            .addGroup(jPanel12Layout.createSequentialGroup()
700                .addContainerGap()
701                .addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
702                    .addComponent(SinglePreviewHighwaysButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
703                    .addComponent(SinglePreviewStationButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
704                .addContainerGap(10, Short.MAX_VALUE))
705        );
706        jPanel12Layout.setVerticalGroup(
707            jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
708            .addGroup(jPanel12Layout.createSequentialGroup()
709                .addContainerGap()
710                .addComponent(SinglePreviewStationButton)
711                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
712                .addComponent(SinglePreviewHighwaysButton)
713                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
714        );
715
716        jPanel11.add(jPanel12, java.awt.BorderLayout.CENTER);
717
718        jPanel13.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED), "Cumulative Preview"));
719
720        CumulativePreviewStationButton.setText("Send Selected Station Events");
721        CumulativePreviewStationButton.addActionListener(new java.awt.event.ActionListener() {
722            public void actionPerformed(java.awt.event.ActionEvent evt) {
723                CumulativeStationPreviewButtonActionPerformed(evt);
724            }
725        });
726
727        CumulativePreviewHighwaysButton.setText("Send All Events");
728        CumulativePreviewHighwaysButton.addActionListener(new java.awt.event.ActionListener() {
729            public void actionPerformed(java.awt.event.ActionEvent evt) {
730                CumulativeHighwaysPreviewButtonActionPerformed(evt);
731            }
732        });
733
734        javax.swing.GroupLayout jPanel13Layout = new javax.swing.GroupLayout(jPanel13);
735        jPanel13.setLayout(jPanel13Layout);
736        jPanel13Layout.setHorizontalGroup(
737            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
738            .addGroup(jPanel13Layout.createSequentialGroup()
739                .addContainerGap()
740                .addGroup(jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
741                    .addComponent(CumulativePreviewHighwaysButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
742                    .addComponent(CumulativePreviewStationButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
743                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
744        );
745        jPanel13Layout.setVerticalGroup(
746            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
747            .addGroup(jPanel13Layout.createSequentialGroup()
748                .addContainerGap()
749                .addComponent(CumulativePreviewStationButton)
750                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
751                .addComponent(CumulativePreviewHighwaysButton)
752                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
753        );
754
755        jPanel11.add(jPanel13, java.awt.BorderLayout.PAGE_START);
756
757        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Time Frame"));
758
759        TimeFrameList.setModel(new javax.swing.AbstractListModel() {
760            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
761            public int getSize() { return strings.length; }
762            public Object getElementAt(int i) { return strings[i]; }
763        });
764        TimeFrameScrollPane.setViewportView(TimeFrameList);
765
766        jPanel10.setBorder(javax.swing.BorderFactory.createEtchedBorder());
767
768        AddNewTimeFrameButton.setText("New");
769        AddNewTimeFrameButton.setActionCommand("addTimeFrame");
770        AddNewTimeFrameButton.addActionListener(new java.awt.event.ActionListener() {
771            public void actionPerformed(java.awt.event.ActionEvent evt) {
772                addNewTimeFrameButtonClicked(evt);
773            }
774        });
775
776        DeleteTimeFrameButton.setText("Delete");
777        DeleteTimeFrameButton.addActionListener(new java.awt.event.ActionListener() {
778            public void actionPerformed(java.awt.event.ActionEvent evt) {
779                DeleteTimeFrameButtonActionPerformed(evt);
780            }
781        });
782
783        javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10);
784        jPanel10.setLayout(jPanel10Layout);
785        jPanel10Layout.setHorizontalGroup(
786            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
787            .addGroup(jPanel10Layout.createSequentialGroup()
788                .addContainerGap()
789                .addComponent(AddNewTimeFrameButton, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE)
790                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 40, Short.MAX_VALUE)
791                .addComponent(DeleteTimeFrameButton, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
792                .addContainerGap())
793        );
794        jPanel10Layout.setVerticalGroup(
795            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
796            .addGroup(jPanel10Layout.createSequentialGroup()
797                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
798                .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
799                    .addComponent(AddNewTimeFrameButton)
800                    .addComponent(DeleteTimeFrameButton))
801                .addContainerGap())
802        );
803
804        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
805        jPanel3.setLayout(jPanel3Layout);
806        jPanel3Layout.setHorizontalGroup(
807            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
808            .addComponent(TimeFrameScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)
809            .addComponent(jPanel10, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
810        );
811        jPanel3Layout.setVerticalGroup(
812            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
813            .addGroup(jPanel3Layout.createSequentialGroup()
814                .addComponent(TimeFrameScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
815                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
816                .addComponent(jPanel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
817                .addGap(76, 76, 76))
818        );
819
820        jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Traffic Lane Events"));
821
822        TrafficLaneEventsTable.setModel(new javax.swing.table.DefaultTableModel(
823            new Object [][] {
824                {null, null, null, null},
825                {null, null, null, null},
826                {null, null, null, null},
827                {null, null, null, null}
828            },
829            new String [] {
830                "Title 1", "Title 2", "Title 3", "Title 4"
831            }
832        ));
833        jScrollPane1.setViewportView(TrafficLaneEventsTable);
834
835        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
836        jPanel8.setLayout(jPanel8Layout);
837        jPanel8Layout.setHorizontalGroup(
838            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
839            .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING)
840        );
841        jPanel8Layout.setVerticalGroup(
842            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
843            .addGroup(jPanel8Layout.createSequentialGroup()
844                .addContainerGap()
845                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
846                .addContainerGap())
847        );
848
849        javax.swing.GroupLayout jPanel15Layout = new javax.swing.GroupLayout(jPanel15);
850        jPanel15.setLayout(jPanel15Layout);
851        jPanel15Layout.setHorizontalGroup(
852            jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
853            .addGroup(jPanel15Layout.createSequentialGroup()
854                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
855                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
856                .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
857                .addContainerGap())
858        );
859        jPanel15Layout.setVerticalGroup(
860            jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
861            .addGroup(jPanel15Layout.createSequentialGroup()
862                .addContainerGap()
863                .addGroup(jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
864                    .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
865                    .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
866                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
867        );
868
869        jPanel14.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Export/Import Scripts"));
870
871        jButton1.setText("Load Script");
872
873        btnSave.setText("Save Script");
874        btnSave.addActionListener(new java.awt.event.ActionListener() {
875            public void actionPerformed(java.awt.event.ActionEvent evt) {
876                btnSaveActionPerformed(evt);
877            }
878        });
879
880        jButton3.setText("Save Script As");
881
882        javax.swing.GroupLayout jPanel14Layout = new javax.swing.GroupLayout(jPanel14);
883        jPanel14.setLayout(jPanel14Layout);
884        jPanel14Layout.setHorizontalGroup(
885            jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
886            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel14Layout.createSequentialGroup()
887                .addContainerGap(28, Short.MAX_VALUE)
888                .addGroup(jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
889                    .addComponent(btnSave, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
890                    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
891                    .addComponent(jButton3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
892                .addGap(27, 27, 27))
893        );
894        jPanel14Layout.setVerticalGroup(
895            jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
896            .addGroup(jPanel14Layout.createSequentialGroup()
897                .addContainerGap()
898                .addComponent(jButton1)
899                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
900                .addComponent(btnSave)
901                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
902                .addComponent(jButton3)
903                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
904        );
905
906        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
907        getContentPane().setLayout(layout);
908        layout.setHorizontalGroup(
909            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
910            .addGroup(layout.createSequentialGroup()
911                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
912                    .addGroup(layout.createSequentialGroup()
913                        .addGap(12, 12, 12)
914                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
915                            .addComponent(jPanel15, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
916                            .addGroup(layout.createSequentialGroup()
917                                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 730, javax.swing.GroupLayout.PREFERRED_SIZE)
918                                .addGap(18, 18, 18)
919                                .addComponent(jPanel11, javax.swing.GroupLayout.PREFERRED_SIZE, 261, javax.swing.GroupLayout.PREFERRED_SIZE)
920                                .addGap(18, 18, 18)
921                                .addComponent(jPanel14, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
922                    .addGroup(layout.createSequentialGroup()
923                        .addContainerGap()
924                        .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
925                .addContainerGap())
926        );
927        layout.setVerticalGroup(
928            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
929            .addGroup(layout.createSequentialGroup()
930                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
931                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
932                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
933                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
934                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
935                        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
936                        .addComponent(jPanel11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
937                    .addComponent(jPanel14, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
938                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
939                .addComponent(jPanel15, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
940        );
941
942        pack();
943    }// </editor-fold>//GEN-END:initComponents
944
945    private void AddLaneEventButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_AddLaneEventButtonActionPerformed
946    {//GEN-HEADEREND:event_AddLaneEventButtonActionPerformed
947        int rows[] = LoopDetectorTable.getSelectedRows();
948        timeFrames.addEventsToTimeFrame(rows, getDotColorFromText(
949                getSelectedButtonText(colorRadioButtons)));
950    }//GEN-LAST:event_AddLaneEventButtonActionPerformed
951
952    private void DeleteTimeFrameButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_DeleteTimeFrameButtonActionPerformed
953    {//GEN-HEADEREND:event_DeleteTimeFrameButtonActionPerformed
954        timeFrames.deleteTimeFrame(TimeFrameList.getSelectedIndex());
955    }//GEN-LAST:event_DeleteTimeFrameButtonActionPerformed
956
957    private String[] getTimeChoices()
958    {
959        String[] choices = new String[60];
960        for(int i = 0; i < 60; i++)
961        {
962            choices[i] = String.format("%02d", i);
963        }
964        return choices;
965    }
966   
967    private void addNewTimeFrameButtonClicked(java.awt.event.ActionEvent evt)//GEN-FIRST:event_addNewTimeFrameButtonClicked
968    {//GEN-HEADEREND:event_addNewTimeFrameButtonClicked
969        // Show a dialog for the user to select a time in HH:MM:SS
970        TimeSelectionDialog dialog;
971        // Obtain the time of the previous time frame
972        int size = timeFrames.frames.size();
973        // if a previous frame exists, use its time for default dialog time
974        if (timeFrames.frames.size() > 0)
975        {
976            String prevTime = timeFrames.frames.get(size-1).toString();
977            dialog = new TimeSelectionDialog((JFrame)this, prevTime);
978        }
979        else  // start with no time default
980        {
981            dialog = new TimeSelectionDialog((JFrame)this);
982        }
983
984        dialog.setLocation(200,400);
985        dialog.setVisible(true);
986        // Add the new time frame
987        timeFrames.addTimeFrame(dialog.getSelectedTime());
988        dialog.dispose();
989           
990    }//GEN-LAST:event_addNewTimeFrameButtonClicked
991
992    private void DeleteEventButtonActonPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_DeleteEventButtonActonPerformed
993    {//GEN-HEADEREND:event_DeleteEventButtonActonPerformed
994        timeFrames.deleteTrafficLaneEvent(TrafficLaneEventsTable
995                .getSelectionModel().getMaxSelectionIndex());
996    }//GEN-LAST:event_DeleteEventButtonActonPerformed
997
998    private void SinglePreviewStationButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_SinglePreviewStationButtonActionPerformed
999    {//GEN-HEADEREND:event_SinglePreviewStationButtonActionPerformed
1000        timeFrames.singlePreviewStation();
1001    }//GEN-LAST:event_SinglePreviewStationButtonActionPerformed
1002
1003    private void SinglePreviewHighwaysButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_SinglePreviewHighwaysButtonActionPerformed
1004    {//GEN-HEADEREND:event_SinglePreviewHighwaysButtonActionPerformed
1005        timeFrames.singlePreviewHighways();
1006    }//GEN-LAST:event_SinglePreviewHighwaysButtonActionPerformed
1007
1008    private void CumulativeStationPreviewButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_CumulativeStationPreviewButtonActionPerformed
1009    {//GEN-HEADEREND:event_CumulativeStationPreviewButtonActionPerformed
1010        timeFrames.cumulativePreviewStation();
1011    }//GEN-LAST:event_CumulativeStationPreviewButtonActionPerformed
1012
1013    private void CumulativeHighwaysPreviewButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_CumulativeHighwaysPreviewButtonActionPerformed
1014    {//GEN-HEADEREND:event_CumulativeHighwaysPreviewButtonActionPerformed
1015        timeFrames.cumulativePreviewHighways();
1016    }//GEN-LAST:event_CumulativeHighwaysPreviewButtonActionPerformed
1017
1018     /**
1019     * Shows the dialog for choosing a file to save the script data to.
1020     * @author jdalbey
1021     */
1022    private void btnSaveActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnSaveActionPerformed
1023    {//GEN-HEADEREND:event_btnSaveActionPerformed
1024        boolean saved = false;
1025        JFileChooser chooser = new JFileChooser(".");
1026        int choice = chooser.showSaveDialog(chooser);
1027        if (choice == JFileChooser.APPROVE_OPTION)
1028        {
1029            File selectedFile = chooser.getSelectedFile();
1030            //TODO: Save the script to the selected file
1031            JOptionPane.showMessageDialog(null, "Saving Not Implemented Yet");
1032        }
1033//        return choice == JFileChooser.APPROVE_OPTION && saved;
1034    }//GEN-LAST:event_btnSaveActionPerformed
1035
1036    private DOTCOLOR getDotColorFromText(String text)
1037    {
1038        return DOTCOLOR.toDotColor(text);
1039    }
1040   
1041    private String getSelectedButtonText(ButtonGroup buttonGroup)
1042    {
1043        for(Enumeration<AbstractButton> buttons = buttonGroup.getElements(); buttons.hasMoreElements();)
1044        {
1045            AbstractButton button = buttons.nextElement();
1046            if(button.isSelected())
1047            {
1048                return button.getText();
1049            }
1050        }
1051        return null;
1052    }
1053   
1054    /**
1055     * @param args the command line arguments
1056     */
1057    public static void main(String args[])
1058    {
1059        /* Set the Nimbus look and feel */
1060        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
1061        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
1062         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
1063         */
1064        try
1065        {
1066            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
1067            {
1068                if ("Nimbus".equals(info.getName()))
1069                {
1070                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
1071                    break;
1072                }
1073            }
1074        } catch (ClassNotFoundException ex)
1075        {
1076            java.util.logging.Logger.getLogger(TrafficEventsEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1077        } catch (InstantiationException ex)
1078        {
1079            java.util.logging.Logger.getLogger(TrafficEventsEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1080        } catch (IllegalAccessException ex)
1081        {
1082            java.util.logging.Logger.getLogger(TrafficEventsEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1083        } catch (javax.swing.UnsupportedLookAndFeelException ex)
1084        {
1085            java.util.logging.Logger.getLogger(TrafficEventsEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1086        }
1087        //</editor-fold>
1088        //</editor-fold>
1089        //</editor-fold>
1090        //</editor-fold>
1091       
1092        TimeFrames timeFrames = new TimeFrames();
1093        final TrafficEventsEditor gui = new TrafficEventsEditor(timeFrames);
1094        timeFrames.addObserver(gui);
1095       
1096        /* Create and display the form */
1097        java.awt.EventQueue.invokeLater(new Runnable()
1098        {
1099            public void run()
1100            {
1101                gui.update(null, null);
1102                gui.setVisible(true);
1103            }
1104        });
1105    }
1106
1107    // Variables declaration - do not modify//GEN-BEGIN:variables
1108    private javax.swing.JButton AddNewEventButton;
1109    private javax.swing.JButton AddNewTimeFrameButton;
1110    private javax.swing.JButton CumulativePreviewHighwaysButton;
1111    private javax.swing.JButton CumulativePreviewStationButton;
1112    private javax.swing.JLabel CurrentHighwayLabel;
1113    private javax.swing.JLabel CurrentLoopDetectorDescLabel;
1114    private javax.swing.JLabel CurrentLoopDetectorLabel;
1115    private javax.swing.JLabel CurrentLoopDetectorTypeLabel;
1116    private javax.swing.JLabel CurrentStationDirectionLabel;
1117    private javax.swing.JLabel CurrentStationLabel;
1118    private javax.swing.JLabel CurrentStationLocationLabel;
1119    private javax.swing.JLabel CurrentStationPostmileLabel;
1120    private javax.swing.JLabel CurrentTimeFrameLabel;
1121    private javax.swing.JButton DeleteEventButton;
1122    private javax.swing.JButton DeleteTimeFrameButton;
1123    private javax.swing.JRadioButton GreenButton;
1124    private javax.swing.JList HighwayList;
1125    private javax.swing.JScrollPane HighwayScrollPane;
1126    private javax.swing.JScrollPane LoopDetectorScrollPane;
1127    private javax.swing.JTable LoopDetectorTable;
1128    private javax.swing.JRadioButton RedButton;
1129    private javax.swing.JButton SinglePreviewHighwaysButton;
1130    private javax.swing.JButton SinglePreviewStationButton;
1131    private javax.swing.JScrollPane StationScrollPane;
1132    private javax.swing.JTable StationTable;
1133    private javax.swing.JList TimeFrameList;
1134    private javax.swing.JScrollPane TimeFrameScrollPane;
1135    private javax.swing.JTable TrafficLaneEventsTable;
1136    private javax.swing.JRadioButton YellowButton;
1137    private javax.swing.JButton btnSave;
1138    private javax.swing.ButtonGroup colorRadioButtons;
1139    private javax.swing.JButton jButton1;
1140    private javax.swing.JButton jButton3;
1141    private javax.swing.JLabel jLabel1;
1142    private javax.swing.JLabel jLabel2;
1143    private javax.swing.JLabel jLabel3;
1144    private javax.swing.JLabel jLabel4;
1145    private javax.swing.JLabel jLabel5;
1146    private javax.swing.JLabel jLabel6;
1147    private javax.swing.JLabel jLabel7;
1148    private javax.swing.JLabel jLabel8;
1149    private javax.swing.JLabel jLabel9;
1150    private javax.swing.JPanel jPanel1;
1151    private javax.swing.JPanel jPanel10;
1152    private javax.swing.JPanel jPanel11;
1153    private javax.swing.JPanel jPanel12;
1154    private javax.swing.JPanel jPanel13;
1155    private javax.swing.JPanel jPanel14;
1156    private javax.swing.JPanel jPanel15;
1157    private javax.swing.JPanel jPanel2;
1158    private javax.swing.JPanel jPanel3;
1159    private javax.swing.JPanel jPanel4;
1160    private javax.swing.JPanel jPanel5;
1161    private javax.swing.JPanel jPanel6;
1162    private javax.swing.JPanel jPanel7;
1163    private javax.swing.JPanel jPanel8;
1164    private javax.swing.JPanel jPanel9;
1165    private javax.swing.JScrollPane jScrollPane1;
1166    // End of variables declaration//GEN-END:variables
1167   
1168    private void updateStatusLabels()
1169    {
1170        CurrentTimeFrameLabel.setText(timeFrames.currentTimeFrame != null
1171                ? timeFrames.currentTimeFrame.toString()
1172                : "");
1173       
1174        CurrentStationLabel.setText(timeFrames.currentStation != null
1175                ? timeFrames.currentStation.toString()
1176                : "");
1177       
1178        CurrentHighwayLabel.setText(timeFrames.currentHighway != null
1179                ? timeFrames.currentHighway.toString()
1180                : "");
1181        CurrentStationPostmileLabel.setText(timeFrames.currentStation != null
1182                ? Double.toString(timeFrames.currentStation.postmile)
1183                : "");
1184        CurrentStationDirectionLabel.setText(timeFrames.currentStation != null
1185                ? timeFrames.currentStation.direction.getLetter()
1186                : "");
1187        CurrentStationLocationLabel.setText(timeFrames.currentStation != null
1188                ? timeFrames.currentStation.location
1189                : "");
1190       
1191        CurrentLoopDetectorLabel.setText(timeFrames.currentLoopDetector != null
1192                ? Integer.toString(timeFrames.currentLoopDetector.loopID)
1193                : "");
1194        CurrentLoopDetectorTypeLabel.setText(timeFrames.currentLoopDetector != null
1195                ? timeFrames.currentLoopDetector.loopLocationID
1196                : "");
1197        CurrentLoopDetectorDescLabel.setText(timeFrames.currentLoopDetector != null
1198                ? timeFrames.currentLoopDetector.loopLocation
1199                : "");
1200    }
1201   
1202    private void updateButtonEnabled()
1203    {
1204        // add event button
1205        this.AddNewEventButton.setEnabled(
1206                timeFrames.currentTimeFrame != null 
1207                && timeFrames.currentHighway != null
1208                && timeFrames.currentStation != null 
1209                && timeFrames.currentLoopDetector != null
1210        );
1211       
1212        // delete event button
1213        DeleteEventButton.setEnabled(
1214                !TrafficLaneEventsTable.getSelectionModel().isSelectionEmpty());
1215       
1216        // delete time frame button
1217        DeleteTimeFrameButton.setEnabled(!TimeFrameList.isSelectionEmpty());
1218       
1219        // single preview buttons
1220        SinglePreviewStationButton.setEnabled(
1221                timeFrames.currentStation != null
1222                && timeFrames.currentTimeFrame != null
1223        );
1224       
1225        SinglePreviewHighwaysButton.setEnabled(
1226                timeFrames.currentTimeFrame != null
1227        );
1228       
1229        // cumulative preview buttons
1230        CumulativePreviewHighwaysButton.setEnabled(
1231                timeFrames.currentTimeFrame != null
1232        );
1233       
1234        CumulativePreviewStationButton.setEnabled(
1235                timeFrames.currentTimeFrame != null
1236                && timeFrames.currentStation != null
1237        );
1238    }
1239   
1240    @Override
1241    public void update(Observable o, Object arg)
1242    {
1243        String updateArg = (String) arg;
1244        updateStatusLabels();
1245        if(updateArg != null)
1246        {
1247            if(updateArg.equals("add frame") || updateArg.equals("delete frame"))
1248            {
1249                TimeFrameList.setModel(new TimeFrameListModel());
1250                TimeFrameList.setSelectedIndex(
1251                        timeFrames.getCurrentTimeFrameIndex());
1252                TrafficLaneEventsTable.setModel(new TrafficLaneEventsTableModel());
1253            }
1254            else if(updateArg.equals("select hwy"))
1255            {
1256                StationTable.setModel(new StationTableModel());
1257                LoopDetectorTable.setModel(new LoopDetectorTableModel());
1258            }
1259            else if(updateArg.equals("select station"))
1260            {
1261                LoopDetectorTable.setModel(new LoopDetectorTableModel());
1262            }
1263            else if(updateArg.equals("select frame"))
1264            {
1265                TrafficLaneEventsTable.setModel(
1266                        new TrafficLaneEventsTableModel());
1267            }
1268            else if(updateArg.equals("add event") 
1269                    || updateArg.equals("delete event"))
1270            {
1271                TrafficLaneEventsTable.setModel(
1272                        new TrafficLaneEventsTableModel());
1273                TrafficLaneEventsTable.getSelectionModel()
1274                        .setSelectionInterval(
1275                                timeFrames.getCurrentTrafficEventIndex(), 
1276                                timeFrames.getCurrentTrafficEventIndex());
1277            }
1278        }
1279        updateButtonEnabled();
1280    }
1281}
Note: See TracBrowser for help on using the repository browser.