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

Revision 541, 58.1 KB checked in by jdalbey, 6 years ago (diff)

TrafficEventsEditor?: add comments

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