Warning: Can't use blame annotator:
svn blame failed on trunk/src/scriptbuilder/gui/ScriptBuilderFrame.java: ("Can't find a temporary directory: Internal error", 20014)

source: tmcsimulator-scriptbuilder/trunk/src/scriptbuilder/gui/ScriptBuilderFrame.java @ 128

Revision 128, 111.7 KB checked in by bmcguffin, 9 years ago (diff)

Created stubs for un-implemented features. These features now present a message box which tells the user that the feature hasn't been implemented.

RevLine 
1/*
2 * ScriptBuilderFrame.java
3 *
4 * Created on May 8, 2010, 12:01:46 PM
5 */
6package scriptbuilder.gui;
7
8import java.awt.Adjustable;
9import java.awt.Color;
10import java.awt.event.AdjustmentEvent;
11import java.awt.event.AdjustmentListener;
12import java.awt.event.KeyEvent;
13import java.awt.event.KeyListener;
14import java.io.File;
15import java.io.IOException;
16import java.util.Observable;
17import java.util.Observer;
18import java.util.Properties;
19import java.util.Random;
20import java.util.logging.Level;
21import java.util.logging.Logger;
22import javax.swing.DefaultListModel;
23import javax.swing.JFileChooser;
24import javax.swing.JOptionPane;
25import javax.swing.SwingConstants;
26import javax.swing.UIManager;
27import javax.swing.UnsupportedLookAndFeelException;
28import javax.swing.event.ChangeEvent;
29import scriptbuilder.gui.panels.IncidentTimelinePanel;
30import scriptbuilder.structures.ScriptEvent;
31import scriptbuilder.structures.ScriptEvent.ScriptEventType;
32import scriptbuilder.structures.ScriptIncident;
33import scriptbuilder.structures.ScriptIncident.IncidentFocusedEvent;
34import scriptbuilder.structures.ScriptIncident.SliceChangedEvent;
35import scriptbuilder.structures.SimulationScript;
36import scriptbuilder.structures.TimeSlice;
37import scriptbuilder.structures.events.I_ScriptEvent;
38
39/**
40 * GUI for the script builder. Contains all panels and editor elements. Performs
41 * updates to reflect script model, which it observes.
42 *
43 * @author Greg Eddington
44 * @author Bryan McGuffin
45 */
46public class ScriptBuilderFrame extends javax.swing.JFrame implements Observer
47{
48
49    /**
50     * The script model.
51     */
52    private SimulationScript script;
53    /**
54     * The current type of selected event.
55     */
56    public ScriptEventType currentEventType;
57    /**
58     * True if we are currently editing an incident.
59     */
60    private boolean editingIncident;
61    /**
62     * Index of the previous incident.
63     */
64    private int oldIncidentIndex;
65
66    /**
67     * Get the script currently in use.
68     *
69     * @return the script model object
70     */
71    public SimulationScript getScript()
72    {
73        return script;
74    }
75
76    /**
77     * Listener for the scroll pane.
78     */
79    class MyAdjustmentListener implements AdjustmentListener
80    {
81
82        /**
83         * If the incident timeline is scrolled horizontally, the timestamp
84         * panel is updated to reflect it.
85         *
86         * @param evt the adjustment event
87         */
88        @Override
89        public void adjustmentValueChanged(AdjustmentEvent evt)
90        {
91            if (evt.getAdjustable().getOrientation() == Adjustable.HORIZONTAL)
92            {
93                timeStampScrollPane.getHorizontalScrollBar()
94                        .setValue(timelinesScrollPane.getHorizontalScrollBar().getValue());
95            }
96            else
97            {
98                // Event from vertical scrollbar
99            }
100
101            repaint();
102        }
103    }
104
105    /**
106     * Listener for key presses. Used for hotkeys for different event types.
107     */
108    private class TimelineKeyListener implements KeyListener
109    {
110
111        /**
112         * If a hotkey is pressed, select that type of event.
113         *
114         * @param e the key event
115         */
116        @Override
117        public void keyPressed(KeyEvent e)
118        {
119            repaint();
120        }
121
122        /**
123         * Take no action upon key release.
124         *
125         * @param e the key event
126         */
127        @Override
128        public void keyReleased(KeyEvent e)
129        {
130        }
131
132        /**
133         * Take no action upon key release.
134         *
135         * @param e the key event
136         */
137        @Override
138        public void keyTyped(KeyEvent e)
139        {
140        }
141    }
142
143    /**
144     * Constructor. Prep new script model, initialize the GUI, and add listeners
145     * for all buttons.
146     */
147    public ScriptBuilderFrame()
148    {
149        script = new SimulationScript();
150        script.addObserver(this);
151        initComponents();
152        //We don't currently want the button to be present in this window
153        btnAddTime.setVisible(false);
154        this.update(null, script);
155
156        // Hack to refresh the zoom
157        /*
158         zoomSlider.setValue(zoomSlider.getValue() - 1);
159         zoomSlider.setValue(zoomSlider.getValue() + 1);
160         */
161        // Set listener for scroll pane
162        AdjustmentListener listener = new MyAdjustmentListener();
163        timelinesScrollPane.getHorizontalScrollBar().addAdjustmentListener(listener);
164        timelinesScrollPane.getVerticalScrollBar().addAdjustmentListener(listener);
165        repaint();
166    }
167
168    /**
169     * Update the GUI to reflect the model. If the script changed, update all
170     * the incident panels. If a timeslice changed, add any new events to the
171     * model. If an incident gained focus, update the incident info screen to
172     * display its details.
173     *
174     * @param o The observed object
175     * @param arg Either the script model or an incident event, depending on who
176     * called this update
177     */
178    @Override
179    public void update(Observable o, Object arg)
180    {
181        //Three major update types: whole script, and 2 event updates
182        if (arg instanceof SimulationScript)
183        {
184            script = (SimulationScript) arg;
185
186            //If we don't have exactly 10 events something is wrong
187            if (script.incidents.size() != 10)
188            {
189                return;
190            }
191
192            //Call update on major panels
193            timelineTickPanel.update(script);
194            timeStampPanel.update(script);
195
196            //Call update on all timeline panels
197            incidentTimelinePanel1.timelinePanelUpdate(script.incidents.get(0));
198            incidentTimelinePanel2.timelinePanelUpdate(script.incidents.get(1));
199            incidentTimelinePanel3.timelinePanelUpdate(script.incidents.get(2));
200            incidentTimelinePanel4.timelinePanelUpdate(script.incidents.get(3));
201            incidentTimelinePanel5.timelinePanelUpdate(script.incidents.get(4));
202            incidentTimelinePanel6.timelinePanelUpdate(script.incidents.get(5));
203            incidentTimelinePanel7.timelinePanelUpdate(script.incidents.get(6));
204            incidentTimelinePanel8.timelinePanelUpdate(script.incidents.get(7));
205            incidentTimelinePanel9.timelinePanelUpdate(script.incidents.get(8));
206            incidentTimelinePanel10.timelinePanelUpdate(script.incidents.get(9));
207
208            //Cal update on number panels
209            incidentNumberPanel1.update(script.incidents.get(0));
210            incidentNumberPanel2.update(script.incidents.get(1));
211            incidentNumberPanel3.update(script.incidents.get(2));
212            incidentNumberPanel4.update(script.incidents.get(3));
213            incidentNumberPanel5.update(script.incidents.get(4));
214            incidentNumberPanel6.update(script.incidents.get(5));
215            incidentNumberPanel7.update(script.incidents.get(6));
216            incidentNumberPanel8.update(script.incidents.get(7));
217            incidentNumberPanel9.update(script.incidents.get(8));
218            incidentNumberPanel10.update(script.incidents.get(9));
219
220            /**
221             * DefaultComboBoxModel model = new DefaultComboBoxModel(); for
222             * (ScriptIncident i : script.incidents) { if (i != null)
223             * model.addElement(i); } gotoIncident.setModel(model);*
224             */
225            this.setPreferredSize(this.getSize());
226            pack();
227        }
228        //Mouse has changed focus to a different timeslice
229        else if (arg instanceof SliceChangedEvent)
230        {
231            TimeSlice slice = ((SliceChangedEvent) arg).slice;
232
233            DefaultListModel model = new DefaultListModel();
234            for (I_ScriptEvent e : slice.events)
235            {
236                model.addElement(e);
237            }
238        }
239        //Mouse has changed focus to a different incident timeline panel
240        else if (arg instanceof IncidentFocusedEvent)
241        {
242            ScriptIncident i = ((IncidentFocusedEvent) arg).incident;
243
244            //gotoIncident.setSelectedItem(i);
245        }
246
247        //Regardless of update type, refresh window by doing these things:
248        //Enable "+15:00" button if script is not empty
249        btnAddTime.setEnabled(script != null && script.numberOfIncidents > 0);
250
251        //enable zoom slider if script is not empty
252        zoomSlider.setEnabled(script != null && script.numberOfIncidents > 0);
253
254        //scale the zoom slider such that the most zoomed-out point allows the
255        //entire script to be visible at once
256        zoomSlider.setMinimum(((timelineTickPanel.getVisibleRect().width - 20)
257                * ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION)
258                / Math.max(script.absoluteLength(), ScriptBuilderGuiConstants.TICK_TIMELINE_SMALLEST_LENGTH));
259        zoomSlider.setMaximum(zoomSlider.getMinimum() + 20);
260        repaint();
261    }
262
263    /**
264     * This method is called from within the constructor to initialize the form.
265     * WARNING: Do NOT modify this code. The content of this method is always
266     * regenerated by the Form Editor.
267     */
268    @SuppressWarnings("unchecked")
269    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
270    private void initComponents()
271    {
272
273        incidentPopupMenu = new javax.swing.JPopupMenu();
274        popupDeleteIncident = new javax.swing.JMenuItem();
275        eventPopupMenu = new javax.swing.JPopupMenu();
276        cadEvent = new javax.swing.JMenuItem();
277        jMenuItem2 = new javax.swing.JMenuItem();
278        radioEvent = new javax.swing.JMenuItem();
279        jMenuItem4 = new javax.swing.JMenuItem();
280        jMenuItem5 = new javax.swing.JMenuItem();
281        jMenuItem6 = new javax.swing.JMenuItem();
282        cadEventFrame = new javax.swing.JFrame();
283        labelCADEntry = new javax.swing.JLabel();
284        radioEventFrame = new javax.swing.JFrame();
285        labelRadioType = new javax.swing.JLabel();
286        labelRadioMessage = new javax.swing.JLabel();
287        radioTypeComboBox = new javax.swing.JComboBox();
288        radioMessageScrollPane = new javax.swing.JScrollPane();
289        radioMessage = new javax.swing.JTextArea();
290        okButton = new javax.swing.JButton();
291        cancelButton = new javax.swing.JButton();
292        eventListPopupMenu = new javax.swing.JPopupMenu();
293        editEventList = new javax.swing.JMenuItem();
294        deleteEventList = new javax.swing.JMenuItem();
295        incidentFrame = new javax.swing.JFrame();
296        labelIncidentNumber = new javax.swing.JLabel();
297        labelIncidentName = new javax.swing.JLabel();
298        labelIncidentColor = new javax.swing.JLabel();
299        labelIncidentDescription = new javax.swing.JLabel();
300        incidentPropertiesScrollPane = new javax.swing.JScrollPane();
301        addIncidentDescription = new javax.swing.JTextArea();
302        incidentOkButton = new javax.swing.JButton();
303        incidentCancelButton = new javax.swing.JButton();
304        addIncidentNumber = new javax.swing.JSpinner();
305        addIncidentName = new javax.swing.JTextField();
306        labelIncidentLength = new javax.swing.JLabel();
307        labelIncidentStart = new javax.swing.JLabel();
308        addIncidentStart = new javax.swing.JSpinner();
309        btnChooseColor = new javax.swing.JButton();
310        incidentColorField = new javax.swing.JTextField();
311        txtIncidentLength = new javax.swing.JLabel();
312        addNoiseFrame = new javax.swing.JFrame();
313        labelRadioChatter = new javax.swing.JLabel();
314        radioChatterSlider = new javax.swing.JSlider();
315        laneClosuresSlider = new javax.swing.JSlider();
316        labelLaneClosures = new javax.swing.JLabel();
317        TMCALSlider = new javax.swing.JSlider();
318        labelTMCALLogs = new javax.swing.JLabel();
319        txtNoiseDescription = new javax.swing.JTextArea();
320        backgroundNoiseSlider = new javax.swing.JSlider();
321        labelBackgroundNoise = new javax.swing.JLabel();
322        minorEventsSlider = new javax.swing.JSlider();
323        labelMinorEvents = new javax.swing.JLabel();
324        btnCancelNoise = new javax.swing.JButton();
325        btnGenerateNoise = new javax.swing.JButton();
326        labelLeastFreq = new javax.swing.JLabel();
327        labelMostFreq = new javax.swing.JLabel();
328        incidentColorChooser = new javax.swing.JColorChooser();
329        timelinesScrollPane = new javax.swing.JScrollPane();
330        timelineTickPanel = new scriptbuilder.gui.panels.TimelineTickPanel();
331        incidentTimelinePanel1 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
332        incidentTimelinePanel2 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
333        incidentTimelinePanel8 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
334        incidentTimelinePanel3 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
335        incidentTimelinePanel6 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
336        incidentTimelinePanel5 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
337        incidentTimelinePanel4 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
338        incidentTimelinePanel7 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
339        incidentTimelinePanel10 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
340        incidentTimelinePanel9 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
341        incidentNumberPanel1 = new scriptbuilder.gui.panels.IncidentNumberPanel();
342        incidentNumberPanel2 = new scriptbuilder.gui.panels.IncidentNumberPanel();
343        incidentNumberPanel3 = new scriptbuilder.gui.panels.IncidentNumberPanel();
344        incidentNumberPanel4 = new scriptbuilder.gui.panels.IncidentNumberPanel();
345        incidentNumberPanel5 = new scriptbuilder.gui.panels.IncidentNumberPanel();
346        incidentNumberPanel6 = new scriptbuilder.gui.panels.IncidentNumberPanel();
347        incidentNumberPanel7 = new scriptbuilder.gui.panels.IncidentNumberPanel();
348        incidentNumberPanel8 = new scriptbuilder.gui.panels.IncidentNumberPanel();
349        incidentNumberPanel9 = new scriptbuilder.gui.panels.IncidentNumberPanel();
350        incidentNumberPanel10 = new scriptbuilder.gui.panels.IncidentNumberPanel();
351        zoomSlider = new javax.swing.JSlider();
352        zoomInIcon = new javax.swing.JLabel();
353        zoomOutIcon = new javax.swing.JLabel();
354        timeStampScrollPane = new javax.swing.JScrollPane();
355        timeStampPanel = new scriptbuilder.gui.panels.TimeStampPanel();
356        btnAddTime = new javax.swing.JButton();
357        scriptBuilderMenuBar = new javax.swing.JMenuBar();
358        fileMenu = new javax.swing.JMenu();
359        fileNew = new javax.swing.JMenuItem();
360        jSeparator1 = new javax.swing.JPopupMenu.Separator();
361        fileOpen = new javax.swing.JMenuItem();
362        jSeparator2 = new javax.swing.JPopupMenu.Separator();
363        fileSave = new javax.swing.JMenuItem();
364        fileSaveAs = new javax.swing.JMenuItem();
365        generateMenu = new javax.swing.JMenu();
366        generateNotebooks = new javax.swing.JMenuItem();
367        generateWebNotebook = new javax.swing.JMenuItem();
368        generateScorecards = new javax.swing.JMenuItem();
369        generateOrganizationChart = new javax.swing.JMenuItem();
370        jSeparator3 = new javax.swing.JPopupMenu.Separator();
371        generateProjectRequirements = new javax.swing.JMenuItem();
372        incidentMenu = new javax.swing.JMenu();
373        newIncident = new javax.swing.JMenuItem();
374        deleteIncident = new javax.swing.JMenuItem();
375        jSeparator4 = new javax.swing.JPopupMenu.Separator();
376        saveIncident = new javax.swing.JMenuItem();
377        loadIncident = new javax.swing.JMenuItem();
378        generateNoiseMenu = new javax.swing.JMenu();
379        generateNoiseOption = new javax.swing.JMenuItem();
380        helpMenu = new javax.swing.JMenu();
381        helpTutorial = new javax.swing.JMenuItem();
382        helpAbout = new javax.swing.JMenuItem();
383
384        popupDeleteIncident.setText("Delete Incident...");
385        incidentPopupMenu.add(popupDeleteIncident);
386
387        cadEvent.setText("CAD Event");
388        cadEvent.addMouseListener(new java.awt.event.MouseAdapter()
389        {
390            public void mousePressed(java.awt.event.MouseEvent evt)
391            {
392                cadEventMousePressed(evt);
393            }
394            public void mouseReleased(java.awt.event.MouseEvent evt)
395            {
396                cadEventMouseReleased(evt);
397            }
398        });
399        cadEvent.addActionListener(new java.awt.event.ActionListener()
400        {
401            public void actionPerformed(java.awt.event.ActionEvent evt)
402            {
403                cadEventActionPerformed(evt);
404            }
405        });
406        eventPopupMenu.add(cadEvent);
407
408        jMenuItem2.setText("Paramics Event");
409        eventPopupMenu.add(jMenuItem2);
410
411        radioEvent.setText("Radio Event");
412        radioEvent.addMouseListener(new java.awt.event.MouseAdapter()
413        {
414            public void mousePressed(java.awt.event.MouseEvent evt)
415            {
416                radioEventMousePressed(evt);
417            }
418        });
419        eventPopupMenu.add(radioEvent);
420
421        jMenuItem4.setText("Telephone Event");
422        eventPopupMenu.add(jMenuItem4);
423
424        jMenuItem5.setText("Video Event");
425        eventPopupMenu.add(jMenuItem5);
426
427        jMenuItem6.setText("Evaluation Event");
428        eventPopupMenu.add(jMenuItem6);
429
430        cadEventFrame.setMinimumSize(new java.awt.Dimension(400, 300));
431
432        labelCADEntry.setText("CAD Entry");
433
434        javax.swing.GroupLayout cadEventFrameLayout = new javax.swing.GroupLayout(cadEventFrame.getContentPane());
435        cadEventFrame.getContentPane().setLayout(cadEventFrameLayout);
436        cadEventFrameLayout.setHorizontalGroup(
437            cadEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
438            .addGroup(cadEventFrameLayout.createSequentialGroup()
439                .addContainerGap()
440                .addComponent(labelCADEntry, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)
441                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
442        );
443        cadEventFrameLayout.setVerticalGroup(
444            cadEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
445            .addGroup(cadEventFrameLayout.createSequentialGroup()
446                .addContainerGap()
447                .addComponent(labelCADEntry)
448                .addContainerGap(1357, Short.MAX_VALUE))
449        );
450
451        radioEventFrame.setTitle("Add Radio Event");
452        radioEventFrame.setMinimumSize(new java.awt.Dimension(400, 300));
453
454        labelRadioType.setText("Radio Type:");
455
456        labelRadioMessage.setText("Radio Message:");
457
458        radioTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "TMT", "Maintanence" }));
459
460        radioMessageScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
461
462        radioMessage.setColumns(20);
463        radioMessage.setLineWrap(true);
464        radioMessage.setRows(5);
465        radioMessage.setWrapStyleWord(true);
466        radioMessageScrollPane.setViewportView(radioMessage);
467
468        okButton.setText("OK");
469        okButton.addActionListener(new java.awt.event.ActionListener()
470        {
471            public void actionPerformed(java.awt.event.ActionEvent evt)
472            {
473                okButtonActionPerformed(evt);
474            }
475        });
476
477        cancelButton.setText("Cancel");
478        cancelButton.addActionListener(new java.awt.event.ActionListener()
479        {
480            public void actionPerformed(java.awt.event.ActionEvent evt)
481            {
482                cancelButtonActionPerformed(evt);
483            }
484        });
485
486        javax.swing.GroupLayout radioEventFrameLayout = new javax.swing.GroupLayout(radioEventFrame.getContentPane());
487        radioEventFrame.getContentPane().setLayout(radioEventFrameLayout);
488        radioEventFrameLayout.setHorizontalGroup(
489            radioEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
490            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, radioEventFrameLayout.createSequentialGroup()
491                .addContainerGap()
492                .addGroup(radioEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
493                    .addComponent(radioMessageScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
494                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, radioEventFrameLayout.createSequentialGroup()
495                        .addComponent(labelRadioType)
496                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
497                        .addComponent(radioTypeComboBox, 0, 312, Short.MAX_VALUE))
498                    .addComponent(labelRadioMessage, javax.swing.GroupLayout.Alignment.LEADING)
499                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, radioEventFrameLayout.createSequentialGroup()
500                        .addComponent(cancelButton)
501                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 246, Short.MAX_VALUE)
502                        .addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE)))
503                .addContainerGap())
504        );
505        radioEventFrameLayout.setVerticalGroup(
506            radioEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
507            .addGroup(radioEventFrameLayout.createSequentialGroup()
508                .addContainerGap()
509                .addGroup(radioEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
510                    .addComponent(labelRadioType)
511                    .addComponent(radioTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
512                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
513                .addComponent(labelRadioMessage)
514                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
515                .addComponent(radioMessageScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 198, Short.MAX_VALUE)
516                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
517                .addGroup(radioEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
518                    .addComponent(okButton)
519                    .addComponent(cancelButton))
520                .addContainerGap())
521        );
522
523        editEventList.setText("Edit...");
524        editEventList.addActionListener(new java.awt.event.ActionListener()
525        {
526            public void actionPerformed(java.awt.event.ActionEvent evt)
527            {
528                editEventListActionPerformed(evt);
529            }
530        });
531        eventListPopupMenu.add(editEventList);
532
533        deleteEventList.setText("Delete...");
534        eventListPopupMenu.add(deleteEventList);
535
536        incidentFrame.setTitle("Incident");
537        incidentFrame.setMinimumSize(new java.awt.Dimension(400, 400));
538
539        labelIncidentNumber.setText("Incident Number: ");
540
541        labelIncidentName.setText("Incident Name:");
542
543        labelIncidentColor.setText("Incident Color: ");
544
545        labelIncidentDescription.setText("Incident Description:");
546
547        incidentPropertiesScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
548        incidentPropertiesScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
549
550        addIncidentDescription.setColumns(20);
551        addIncidentDescription.setLineWrap(true);
552        addIncidentDescription.setRows(5);
553        addIncidentDescription.setWrapStyleWord(true);
554        incidentPropertiesScrollPane.setViewportView(addIncidentDescription);
555
556        incidentOkButton.setText("OK");
557        incidentOkButton.addActionListener(new java.awt.event.ActionListener()
558        {
559            public void actionPerformed(java.awt.event.ActionEvent evt)
560            {
561                incidentOkButtonActionPerformed(evt);
562            }
563        });
564
565        incidentCancelButton.setText("Cancel");
566        incidentCancelButton.addActionListener(new java.awt.event.ActionListener()
567        {
568            public void actionPerformed(java.awt.event.ActionEvent evt)
569            {
570                incidentCancelButtonActionPerformed(evt);
571            }
572        });
573
574        addIncidentNumber.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(101), Integer.valueOf(101), null, Integer.valueOf(1)));
575
576        labelIncidentLength.setText("Incident Length in Minutes: ");
577
578        labelIncidentStart.setText("Incident Start Time in Minutes:");
579
580        addIncidentStart.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
581
582        btnChooseColor.setText("Choose...");
583        btnChooseColor.addActionListener(new java.awt.event.ActionListener()
584        {
585            public void actionPerformed(java.awt.event.ActionEvent evt)
586            {
587                btnChooseColorActionPerformed(evt);
588            }
589        });
590
591        incidentColorField.setEditable(false);
592        incidentColorField.setBackground(new java.awt.Color(0, 0, 0));
593
594        txtIncidentLength.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
595        txtIncidentLength.setText("0");
596        txtIncidentLength.setToolTipText("");
597
598        javax.swing.GroupLayout incidentFrameLayout = new javax.swing.GroupLayout(incidentFrame.getContentPane());
599        incidentFrame.getContentPane().setLayout(incidentFrameLayout);
600        incidentFrameLayout.setHorizontalGroup(
601            incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
602            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, incidentFrameLayout.createSequentialGroup()
603                .addContainerGap()
604                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
605                    .addComponent(incidentPropertiesScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 322, Short.MAX_VALUE)
606                    .addComponent(labelIncidentDescription, javax.swing.GroupLayout.Alignment.LEADING)
607                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, incidentFrameLayout.createSequentialGroup()
608                        .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
609                            .addComponent(labelIncidentNumber)
610                            .addComponent(labelIncidentName)
611                            .addComponent(labelIncidentColor))
612                        .addGap(18, 18, 18)
613                        .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
614                            .addComponent(addIncidentName, javax.swing.GroupLayout.DEFAULT_SIZE, 218, Short.MAX_VALUE)
615                            .addComponent(addIncidentNumber, javax.swing.GroupLayout.DEFAULT_SIZE, 218, Short.MAX_VALUE)
616                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, incidentFrameLayout.createSequentialGroup()
617                                .addComponent(incidentColorField, javax.swing.GroupLayout.DEFAULT_SIZE, 119, Short.MAX_VALUE)
618                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
619                                .addComponent(btnChooseColor, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE))))
620                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, incidentFrameLayout.createSequentialGroup()
621                        .addComponent(incidentCancelButton)
622                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 188, Short.MAX_VALUE)
623                        .addComponent(incidentOkButton, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE))
624                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, incidentFrameLayout.createSequentialGroup()
625                        .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
626                            .addComponent(labelIncidentStart)
627                            .addComponent(labelIncidentLength))
628                        .addGap(18, 18, 18)
629                        .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
630                            .addGroup(incidentFrameLayout.createSequentialGroup()
631                                .addGap(6, 6, 6)
632                                .addComponent(txtIncidentLength, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
633                                .addGap(22, 22, 22))
634                            .addComponent(addIncidentStart, javax.swing.GroupLayout.DEFAULT_SIZE, 158, Short.MAX_VALUE))))
635                .addContainerGap())
636        );
637        incidentFrameLayout.setVerticalGroup(
638            incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
639            .addGroup(incidentFrameLayout.createSequentialGroup()
640                .addContainerGap()
641                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
642                    .addComponent(labelIncidentNumber)
643                    .addComponent(addIncidentNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
644                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
645                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
646                    .addComponent(labelIncidentName)
647                    .addComponent(addIncidentName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
648                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
649                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
650                    .addComponent(labelIncidentColor)
651                    .addComponent(btnChooseColor)
652                    .addComponent(incidentColorField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
653                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
654                .addComponent(labelIncidentDescription)
655                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
656                .addComponent(incidentPropertiesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 118, Short.MAX_VALUE)
657                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
658                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
659                    .addComponent(addIncidentStart, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
660                    .addComponent(labelIncidentStart))
661                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
662                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
663                    .addComponent(labelIncidentLength)
664                    .addComponent(txtIncidentLength))
665                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
666                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
667                    .addComponent(incidentCancelButton)
668                    .addComponent(incidentOkButton))
669                .addContainerGap())
670        );
671
672        addNoiseFrame.setTitle("Generate Noise");
673        addNoiseFrame.setMinimumSize(new java.awt.Dimension(395, 315));
674        addNoiseFrame.setResizable(false);
675
676        labelRadioChatter.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
677        labelRadioChatter.setText("Radio Chatter: ");
678
679        labelLaneClosures.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
680        labelLaneClosures.setText("Lane Closures:");
681
682        labelTMCALLogs.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
683        labelTMCALLogs.setText("TMCAL Logs:");
684
685        txtNoiseDescription.setEditable(false);
686        txtNoiseDescription.setColumns(20);
687        txtNoiseDescription.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
688        txtNoiseDescription.setLineWrap(true);
689        txtNoiseDescription.setRows(5);
690        txtNoiseDescription.setText("Noise events will be randomly generated for the simulation with frequencies based on the control selections made below");
691        txtNoiseDescription.setWrapStyleWord(true);
692        txtNoiseDescription.setAutoscrolls(false);
693        txtNoiseDescription.setBorder(null);
694        txtNoiseDescription.setDisabledTextColor(new java.awt.Color(0, 0, 0));
695        txtNoiseDescription.setFocusable(false);
696        txtNoiseDescription.setOpaque(false);
697
698        labelBackgroundNoise.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
699        labelBackgroundNoise.setText("Background Noise: ");
700
701        labelMinorEvents.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
702        labelMinorEvents.setText("Minor Events:");
703
704        btnCancelNoise.setText("Cancel");
705        btnCancelNoise.addActionListener(new java.awt.event.ActionListener()
706        {
707            public void actionPerformed(java.awt.event.ActionEvent evt)
708            {
709                btnCancelNoiseActionPerformed(evt);
710            }
711        });
712
713        btnGenerateNoise.setText("Generate");
714        btnGenerateNoise.addActionListener(new java.awt.event.ActionListener()
715        {
716            public void actionPerformed(java.awt.event.ActionEvent evt)
717            {
718                btnGenerateNoiseActionPerformed(evt);
719            }
720        });
721
722        labelLeastFreq.setText("Least Frequent");
723
724        labelMostFreq.setText("Most Frequent");
725
726        javax.swing.GroupLayout addNoiseFrameLayout = new javax.swing.GroupLayout(addNoiseFrame.getContentPane());
727        addNoiseFrame.getContentPane().setLayout(addNoiseFrameLayout);
728        addNoiseFrameLayout.setHorizontalGroup(
729            addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
730            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, addNoiseFrameLayout.createSequentialGroup()
731                .addContainerGap(21, Short.MAX_VALUE)
732                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
733                    .addComponent(txtNoiseDescription, javax.swing.GroupLayout.Alignment.LEADING)
734                    .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
735                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, addNoiseFrameLayout.createSequentialGroup()
736                            .addComponent(btnCancelNoise)
737                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
738                            .addComponent(btnGenerateNoise))
739                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, addNoiseFrameLayout.createSequentialGroup()
740                            .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
741                                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
742                                    .addComponent(labelBackgroundNoise)
743                                    .addComponent(labelLaneClosures, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
744                                    .addComponent(labelTMCALLogs, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
745                                    .addComponent(labelRadioChatter, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE))
746                                .addComponent(labelMinorEvents, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE))
747                            .addGap(4, 4, 4)
748                            .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
749                                .addComponent(radioChatterSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
750                                .addComponent(laneClosuresSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
751                                .addComponent(TMCALSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
752                                .addComponent(minorEventsSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
753                                .addComponent(backgroundNoiseSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
754                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, addNoiseFrameLayout.createSequentialGroup()
755                                    .addComponent(labelLeastFreq)
756                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
757                                    .addComponent(labelMostFreq))))))
758                .addGap(20, 20, 20))
759        );
760        addNoiseFrameLayout.setVerticalGroup(
761            addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
762            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, addNoiseFrameLayout.createSequentialGroup()
763                .addContainerGap()
764                .addComponent(txtNoiseDescription, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE)
765                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
766                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
767                    .addComponent(labelMostFreq)
768                    .addComponent(labelLeastFreq))
769                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
770                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
771                    .addComponent(labelRadioChatter, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
772                    .addComponent(radioChatterSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
773                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
774                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
775                    .addComponent(labelLaneClosures, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
776                    .addComponent(laneClosuresSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
777                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
778                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
779                    .addComponent(labelTMCALLogs)
780                    .addComponent(TMCALSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
781                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
782                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
783                    .addComponent(backgroundNoiseSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
784                    .addComponent(labelBackgroundNoise, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE))
785                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
786                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
787                    .addComponent(minorEventsSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
788                    .addComponent(labelMinorEvents))
789                .addGap(18, 18, 18)
790                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
791                    .addComponent(btnCancelNoise)
792                    .addComponent(btnGenerateNoise))
793                .addContainerGap())
794        );
795
796        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
797        setTitle("Script Builder");
798        setBounds(new java.awt.Rectangle(0, 23, 800, 700));
799        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
800        setMinimumSize(new java.awt.Dimension(800, 700));
801
802        timelinesScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
803        timelinesScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
804        timelinesScrollPane.setFocusCycleRoot(true);
805        timelinesScrollPane.setFocusTraversalPolicyProvider(true);
806        timelinesScrollPane.setPreferredSize(new java.awt.Dimension(72000, 1341));
807        timelinesScrollPane.setWheelScrollingEnabled(false);
808
809        timelineTickPanel.setMaximumSize(new java.awt.Dimension(7200, 32767));
810        timelineTickPanel.setMinimumSize(new java.awt.Dimension(7200, 0));
811        timelineTickPanel.setPreferredSize(new java.awt.Dimension(7200, 1317));
812
813        incidentTimelinePanel1.setMaximumSize(new java.awt.Dimension(32767, 100));
814        incidentTimelinePanel1.setOpaque(false);
815        incidentTimelinePanel1.setPreferredSize(new java.awt.Dimension(691, 100));
816
817        javax.swing.GroupLayout incidentTimelinePanel1Layout = new javax.swing.GroupLayout(incidentTimelinePanel1);
818        incidentTimelinePanel1.setLayout(incidentTimelinePanel1Layout);
819        incidentTimelinePanel1Layout.setHorizontalGroup(
820            incidentTimelinePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
821            .addGap(0, 691, Short.MAX_VALUE)
822        );
823        incidentTimelinePanel1Layout.setVerticalGroup(
824            incidentTimelinePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
825            .addGap(0, 100, Short.MAX_VALUE)
826        );
827
828        incidentTimelinePanel2.setOpaque(false);
829
830        javax.swing.GroupLayout incidentTimelinePanel2Layout = new javax.swing.GroupLayout(incidentTimelinePanel2);
831        incidentTimelinePanel2.setLayout(incidentTimelinePanel2Layout);
832        incidentTimelinePanel2Layout.setHorizontalGroup(
833            incidentTimelinePanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
834            .addGap(0, 0, Short.MAX_VALUE)
835        );
836        incidentTimelinePanel2Layout.setVerticalGroup(
837            incidentTimelinePanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
838            .addGap(0, 0, Short.MAX_VALUE)
839        );
840
841        incidentTimelinePanel8.setOpaque(false);
842
843        javax.swing.GroupLayout incidentTimelinePanel8Layout = new javax.swing.GroupLayout(incidentTimelinePanel8);
844        incidentTimelinePanel8.setLayout(incidentTimelinePanel8Layout);
845        incidentTimelinePanel8Layout.setHorizontalGroup(
846            incidentTimelinePanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
847            .addGap(0, 0, Short.MAX_VALUE)
848        );
849        incidentTimelinePanel8Layout.setVerticalGroup(
850            incidentTimelinePanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
851            .addGap(0, 0, Short.MAX_VALUE)
852        );
853
854        incidentTimelinePanel3.setOpaque(false);
855
856        javax.swing.GroupLayout incidentTimelinePanel3Layout = new javax.swing.GroupLayout(incidentTimelinePanel3);
857        incidentTimelinePanel3.setLayout(incidentTimelinePanel3Layout);
858        incidentTimelinePanel3Layout.setHorizontalGroup(
859            incidentTimelinePanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
860            .addGap(0, 0, Short.MAX_VALUE)
861        );
862        incidentTimelinePanel3Layout.setVerticalGroup(
863            incidentTimelinePanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
864            .addGap(0, 0, Short.MAX_VALUE)
865        );
866
867        incidentTimelinePanel6.setOpaque(false);
868
869        javax.swing.GroupLayout incidentTimelinePanel6Layout = new javax.swing.GroupLayout(incidentTimelinePanel6);
870        incidentTimelinePanel6.setLayout(incidentTimelinePanel6Layout);
871        incidentTimelinePanel6Layout.setHorizontalGroup(
872            incidentTimelinePanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
873            .addGap(0, 0, Short.MAX_VALUE)
874        );
875        incidentTimelinePanel6Layout.setVerticalGroup(
876            incidentTimelinePanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
877            .addGap(0, 0, Short.MAX_VALUE)
878        );
879
880        incidentTimelinePanel5.setOpaque(false);
881
882        javax.swing.GroupLayout incidentTimelinePanel5Layout = new javax.swing.GroupLayout(incidentTimelinePanel5);
883        incidentTimelinePanel5.setLayout(incidentTimelinePanel5Layout);
884        incidentTimelinePanel5Layout.setHorizontalGroup(
885            incidentTimelinePanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
886            .addGap(0, 0, Short.MAX_VALUE)
887        );
888        incidentTimelinePanel5Layout.setVerticalGroup(
889            incidentTimelinePanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
890            .addGap(0, 0, Short.MAX_VALUE)
891        );
892
893        incidentTimelinePanel4.setOpaque(false);
894
895        javax.swing.GroupLayout incidentTimelinePanel4Layout = new javax.swing.GroupLayout(incidentTimelinePanel4);
896        incidentTimelinePanel4.setLayout(incidentTimelinePanel4Layout);
897        incidentTimelinePanel4Layout.setHorizontalGroup(
898            incidentTimelinePanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
899            .addGap(0, 0, Short.MAX_VALUE)
900        );
901        incidentTimelinePanel4Layout.setVerticalGroup(
902            incidentTimelinePanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
903            .addGap(0, 0, Short.MAX_VALUE)
904        );
905
906        incidentTimelinePanel7.setOpaque(false);
907
908        javax.swing.GroupLayout incidentTimelinePanel7Layout = new javax.swing.GroupLayout(incidentTimelinePanel7);
909        incidentTimelinePanel7.setLayout(incidentTimelinePanel7Layout);
910        incidentTimelinePanel7Layout.setHorizontalGroup(
911            incidentTimelinePanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
912            .addGap(0, 0, Short.MAX_VALUE)
913        );
914        incidentTimelinePanel7Layout.setVerticalGroup(
915            incidentTimelinePanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
916            .addGap(0, 0, Short.MAX_VALUE)
917        );
918
919        incidentTimelinePanel10.setOpaque(false);
920
921        javax.swing.GroupLayout incidentTimelinePanel10Layout = new javax.swing.GroupLayout(incidentTimelinePanel10);
922        incidentTimelinePanel10.setLayout(incidentTimelinePanel10Layout);
923        incidentTimelinePanel10Layout.setHorizontalGroup(
924            incidentTimelinePanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
925            .addGap(0, 0, Short.MAX_VALUE)
926        );
927        incidentTimelinePanel10Layout.setVerticalGroup(
928            incidentTimelinePanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
929            .addGap(0, 0, Short.MAX_VALUE)
930        );
931
932        incidentTimelinePanel9.setOpaque(false);
933
934        javax.swing.GroupLayout incidentTimelinePanel9Layout = new javax.swing.GroupLayout(incidentTimelinePanel9);
935        incidentTimelinePanel9.setLayout(incidentTimelinePanel9Layout);
936        incidentTimelinePanel9Layout.setHorizontalGroup(
937            incidentTimelinePanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
938            .addGap(0, 0, Short.MAX_VALUE)
939        );
940        incidentTimelinePanel9Layout.setVerticalGroup(
941            incidentTimelinePanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
942            .addGap(0, 0, Short.MAX_VALUE)
943        );
944
945        incidentNumberPanel1.setOpaque(false);
946
947        javax.swing.GroupLayout incidentNumberPanel1Layout = new javax.swing.GroupLayout(incidentNumberPanel1);
948        incidentNumberPanel1.setLayout(incidentNumberPanel1Layout);
949        incidentNumberPanel1Layout.setHorizontalGroup(
950            incidentNumberPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
951            .addGap(0, 0, Short.MAX_VALUE)
952        );
953        incidentNumberPanel1Layout.setVerticalGroup(
954            incidentNumberPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
955            .addGap(0, 0, Short.MAX_VALUE)
956        );
957
958        incidentNumberPanel2.setOpaque(false);
959
960        javax.swing.GroupLayout incidentNumberPanel2Layout = new javax.swing.GroupLayout(incidentNumberPanel2);
961        incidentNumberPanel2.setLayout(incidentNumberPanel2Layout);
962        incidentNumberPanel2Layout.setHorizontalGroup(
963            incidentNumberPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
964            .addGap(0, 0, Short.MAX_VALUE)
965        );
966        incidentNumberPanel2Layout.setVerticalGroup(
967            incidentNumberPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
968            .addGap(0, 0, Short.MAX_VALUE)
969        );
970
971        incidentNumberPanel3.setOpaque(false);
972
973        javax.swing.GroupLayout incidentNumberPanel3Layout = new javax.swing.GroupLayout(incidentNumberPanel3);
974        incidentNumberPanel3.setLayout(incidentNumberPanel3Layout);
975        incidentNumberPanel3Layout.setHorizontalGroup(
976            incidentNumberPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
977            .addGap(0, 0, Short.MAX_VALUE)
978        );
979        incidentNumberPanel3Layout.setVerticalGroup(
980            incidentNumberPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
981            .addGap(0, 0, Short.MAX_VALUE)
982        );
983
984        incidentNumberPanel4.setOpaque(false);
985
986        javax.swing.GroupLayout incidentNumberPanel4Layout = new javax.swing.GroupLayout(incidentNumberPanel4);
987        incidentNumberPanel4.setLayout(incidentNumberPanel4Layout);
988        incidentNumberPanel4Layout.setHorizontalGroup(
989            incidentNumberPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
990            .addGap(0, 0, Short.MAX_VALUE)
991        );
992        incidentNumberPanel4Layout.setVerticalGroup(
993            incidentNumberPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
994            .addGap(0, 0, Short.MAX_VALUE)
995        );
996
997        incidentNumberPanel5.setOpaque(false);
998
999        javax.swing.GroupLayout incidentNumberPanel5Layout = new javax.swing.GroupLayout(incidentNumberPanel5);
1000        incidentNumberPanel5.setLayout(incidentNumberPanel5Layout);
1001        incidentNumberPanel5Layout.setHorizontalGroup(
1002            incidentNumberPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1003            .addGap(0, 0, Short.MAX_VALUE)
1004        );
1005        incidentNumberPanel5Layout.setVerticalGroup(
1006            incidentNumberPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1007            .addGap(0, 0, Short.MAX_VALUE)
1008        );
1009
1010        incidentNumberPanel6.setOpaque(false);
1011
1012        javax.swing.GroupLayout incidentNumberPanel6Layout = new javax.swing.GroupLayout(incidentNumberPanel6);
1013        incidentNumberPanel6.setLayout(incidentNumberPanel6Layout);
1014        incidentNumberPanel6Layout.setHorizontalGroup(
1015            incidentNumberPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1016            .addGap(0, 0, Short.MAX_VALUE)
1017        );
1018        incidentNumberPanel6Layout.setVerticalGroup(
1019            incidentNumberPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1020            .addGap(0, 0, Short.MAX_VALUE)
1021        );
1022
1023        incidentNumberPanel7.setOpaque(false);
1024
1025        javax.swing.GroupLayout incidentNumberPanel7Layout = new javax.swing.GroupLayout(incidentNumberPanel7);
1026        incidentNumberPanel7.setLayout(incidentNumberPanel7Layout);
1027        incidentNumberPanel7Layout.setHorizontalGroup(
1028            incidentNumberPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1029            .addGap(0, 0, Short.MAX_VALUE)
1030        );
1031        incidentNumberPanel7Layout.setVerticalGroup(
1032            incidentNumberPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1033            .addGap(0, 0, Short.MAX_VALUE)
1034        );
1035
1036        incidentNumberPanel8.setOpaque(false);
1037
1038        javax.swing.GroupLayout incidentNumberPanel8Layout = new javax.swing.GroupLayout(incidentNumberPanel8);
1039        incidentNumberPanel8.setLayout(incidentNumberPanel8Layout);
1040        incidentNumberPanel8Layout.setHorizontalGroup(
1041            incidentNumberPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1042            .addGap(0, 0, Short.MAX_VALUE)
1043        );
1044        incidentNumberPanel8Layout.setVerticalGroup(
1045            incidentNumberPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1046            .addGap(0, 0, Short.MAX_VALUE)
1047        );
1048
1049        incidentNumberPanel9.setOpaque(false);
1050
1051        javax.swing.GroupLayout incidentNumberPanel9Layout = new javax.swing.GroupLayout(incidentNumberPanel9);
1052        incidentNumberPanel9.setLayout(incidentNumberPanel9Layout);
1053        incidentNumberPanel9Layout.setHorizontalGroup(
1054            incidentNumberPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1055            .addGap(0, 0, Short.MAX_VALUE)
1056        );
1057        incidentNumberPanel9Layout.setVerticalGroup(
1058            incidentNumberPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1059            .addGap(0, 0, Short.MAX_VALUE)
1060        );
1061
1062        incidentNumberPanel10.setOpaque(false);
1063
1064        javax.swing.GroupLayout incidentNumberPanel10Layout = new javax.swing.GroupLayout(incidentNumberPanel10);
1065        incidentNumberPanel10.setLayout(incidentNumberPanel10Layout);
1066        incidentNumberPanel10Layout.setHorizontalGroup(
1067            incidentNumberPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1068            .addGap(0, 0, Short.MAX_VALUE)
1069        );
1070        incidentNumberPanel10Layout.setVerticalGroup(
1071            incidentNumberPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1072            .addGap(0, 0, Short.MAX_VALUE)
1073        );
1074
1075        javax.swing.GroupLayout timelineTickPanelLayout = new javax.swing.GroupLayout(timelineTickPanel);
1076        timelineTickPanel.setLayout(timelineTickPanelLayout);
1077        timelineTickPanelLayout.setHorizontalGroup(
1078            timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1079            .addGroup(timelineTickPanelLayout.createSequentialGroup()
1080                .addContainerGap()
1081                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
1082                    .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1083                        .addComponent(incidentNumberPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1084                        .addComponent(incidentNumberPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1085                    .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1086                        .addComponent(incidentNumberPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1087                        .addComponent(incidentNumberPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1088                        .addComponent(incidentNumberPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1089                        .addComponent(incidentNumberPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1090                        .addComponent(incidentNumberPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1091                        .addComponent(incidentNumberPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1092                        .addComponent(incidentNumberPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1093                    .addComponent(incidentNumberPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1094                .addGap(10, 10, 10)
1095                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1096                    .addComponent(incidentTimelinePanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
1097                    .addComponent(incidentTimelinePanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1098                    .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
1099                        .addComponent(incidentTimelinePanel5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
1100                        .addComponent(incidentTimelinePanel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1101                    .addComponent(incidentTimelinePanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1102                    .addComponent(incidentTimelinePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1103                    .addComponent(incidentTimelinePanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1104                    .addComponent(incidentTimelinePanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1105                    .addComponent(incidentTimelinePanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1106                    .addComponent(incidentTimelinePanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1107                .addGap(190, 190, 190))
1108        );
1109        timelineTickPanelLayout.setVerticalGroup(
1110            timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1111            .addGroup(timelineTickPanelLayout.createSequentialGroup()
1112                .addContainerGap()
1113                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1114                    .addComponent(incidentNumberPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1115                    .addComponent(incidentTimelinePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1116                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1117                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1118                    .addGroup(timelineTickPanelLayout.createSequentialGroup()
1119                        .addComponent(incidentNumberPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1120                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1121                        .addComponent(incidentNumberPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1122                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1123                        .addComponent(incidentNumberPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1124                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1125                        .addComponent(incidentNumberPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1126                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1127                        .addComponent(incidentNumberPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1128                    .addGroup(timelineTickPanelLayout.createSequentialGroup()
1129                        .addComponent(incidentTimelinePanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1130                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1131                        .addComponent(incidentTimelinePanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1132                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1133                        .addComponent(incidentTimelinePanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1134                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1135                        .addComponent(incidentTimelinePanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1136                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1137                        .addComponent(incidentTimelinePanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
1138                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1139                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1140                    .addComponent(incidentTimelinePanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1141                    .addComponent(incidentNumberPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1142                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1143                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1144                    .addGroup(timelineTickPanelLayout.createSequentialGroup()
1145                        .addComponent(incidentTimelinePanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1146                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1147                        .addComponent(incidentTimelinePanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1148                    .addGroup(timelineTickPanelLayout.createSequentialGroup()
1149                        .addComponent(incidentNumberPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1150                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1151                        .addComponent(incidentNumberPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
1152                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1153                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1154                    .addComponent(incidentNumberPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1155                    .addComponent(incidentTimelinePanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1156                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
1157        );
1158
1159        timelinesScrollPane.setViewportView(timelineTickPanel);
1160
1161        zoomSlider.setMaximum(22);
1162        zoomSlider.setMinimum(4);
1163        zoomSlider.setValue(4);
1164        zoomSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
1165        zoomSlider.setFocusable(false);
1166        zoomSlider.addChangeListener(new javax.swing.event.ChangeListener()
1167        {
1168            public void stateChanged(javax.swing.event.ChangeEvent evt)
1169            {
1170                zoomSliderStateChanged(evt);
1171            }
1172        });
1173
1174        zoomInIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/ZoomIn.png"))); // NOI18N
1175        zoomInIcon.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
1176        zoomInIcon.addMouseListener(new java.awt.event.MouseAdapter()
1177        {
1178            public void mouseClicked(java.awt.event.MouseEvent evt)
1179            {
1180                zoomInIconMouseClicked(evt);
1181            }
1182        });
1183
1184        zoomOutIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/ZoomOut.png"))); // NOI18N
1185        zoomOutIcon.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
1186        zoomOutIcon.addMouseListener(new java.awt.event.MouseAdapter()
1187        {
1188            public void mouseClicked(java.awt.event.MouseEvent evt)
1189            {
1190                zoomOutIconMouseClicked(evt);
1191            }
1192        });
1193
1194        timeStampScrollPane.setBorder(null);
1195        timeStampScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
1196        timeStampScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
1197
1198        javax.swing.GroupLayout timeStampPanelLayout = new javax.swing.GroupLayout(timeStampPanel);
1199        timeStampPanel.setLayout(timeStampPanelLayout);
1200        timeStampPanelLayout.setHorizontalGroup(
1201            timeStampPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1202            .addGap(0, 0, Short.MAX_VALUE)
1203        );
1204        timeStampPanelLayout.setVerticalGroup(
1205            timeStampPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1206            .addGap(0, 0, Short.MAX_VALUE)
1207        );
1208
1209        timeStampScrollPane.setViewportView(timeStampPanel);
1210
1211        btnAddTime.setText("+15:00");
1212        btnAddTime.addActionListener(new java.awt.event.ActionListener()
1213        {
1214            public void actionPerformed(java.awt.event.ActionEvent evt)
1215            {
1216                btnAddTimeActionPerformed(evt);
1217            }
1218        });
1219
1220        fileMenu.setText("File");
1221        fileMenu.setMargin(new java.awt.Insets(0, 10, 0, 10));
1222        fileMenu.addActionListener(new java.awt.event.ActionListener()
1223        {
1224            public void actionPerformed(java.awt.event.ActionEvent evt)
1225            {
1226                fileMenuActionPerformed(evt);
1227            }
1228        });
1229
1230        fileNew.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1231        fileNew.setText("New");
1232        fileNew.addActionListener(new java.awt.event.ActionListener()
1233        {
1234            public void actionPerformed(java.awt.event.ActionEvent evt)
1235            {
1236                fileNewActionPerformed(evt);
1237            }
1238        });
1239        fileMenu.add(fileNew);
1240        fileMenu.add(jSeparator1);
1241
1242        fileOpen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1243        fileOpen.setText("Open...");
1244        fileOpen.addActionListener(new java.awt.event.ActionListener()
1245        {
1246            public void actionPerformed(java.awt.event.ActionEvent evt)
1247            {
1248                fileOpenActionPerformed(evt);
1249            }
1250        });
1251        fileMenu.add(fileOpen);
1252        fileMenu.add(jSeparator2);
1253
1254        fileSave.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
1255        fileSave.setText("Save");
1256        fileSave.addActionListener(new java.awt.event.ActionListener()
1257        {
1258            public void actionPerformed(java.awt.event.ActionEvent evt)
1259            {
1260                fileSaveActionPerformed(evt);
1261            }
1262        });
1263        fileMenu.add(fileSave);
1264
1265        fileSaveAs.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1266        fileSaveAs.setText("Save as...");
1267        fileSaveAs.addActionListener(new java.awt.event.ActionListener()
1268        {
1269            public void actionPerformed(java.awt.event.ActionEvent evt)
1270            {
1271                fileSaveAsActionPerformed(evt);
1272            }
1273        });
1274        fileMenu.add(fileSaveAs);
1275
1276        scriptBuilderMenuBar.add(fileMenu);
1277
1278        generateMenu.setLabel("Generate");
1279        generateMenu.setMargin(new java.awt.Insets(0, 10, 0, 10));
1280
1281        generateNotebooks.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1282        generateNotebooks.setText("Generate Notebooks...");
1283        generateNotebooks.addActionListener(new java.awt.event.ActionListener()
1284        {
1285            public void actionPerformed(java.awt.event.ActionEvent evt)
1286            {
1287                generateNotebooksActionPerformed(evt);
1288            }
1289        });
1290        generateMenu.add(generateNotebooks);
1291
1292        generateWebNotebook.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1293        generateWebNotebook.setText("Generate Web Notebook...");
1294        generateWebNotebook.addActionListener(new java.awt.event.ActionListener()
1295        {
1296            public void actionPerformed(java.awt.event.ActionEvent evt)
1297            {
1298                generateWebNotebookActionPerformed(evt);
1299            }
1300        });
1301        generateMenu.add(generateWebNotebook);
1302
1303        generateScorecards.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1304        generateScorecards.setText("Generate Scorecards...");
1305        generateScorecards.addActionListener(new java.awt.event.ActionListener()
1306        {
1307            public void actionPerformed(java.awt.event.ActionEvent evt)
1308            {
1309                generateScorecardsActionPerformed(evt);
1310            }
1311        });
1312        generateMenu.add(generateScorecards);
1313
1314        generateOrganizationChart.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1315        generateOrganizationChart.setText("Generate D14 TMC Org Chart...");
1316        generateOrganizationChart.addActionListener(new java.awt.event.ActionListener()
1317        {
1318            public void actionPerformed(java.awt.event.ActionEvent evt)
1319            {
1320                generateOrganizationChartActionPerformed(evt);
1321            }
1322        });
1323        generateMenu.add(generateOrganizationChart);
1324        generateMenu.add(jSeparator3);
1325
1326        generateProjectRequirements.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1327        generateProjectRequirements.setText("Generate Project Worklist...");
1328        generateProjectRequirements.addActionListener(new java.awt.event.ActionListener()
1329        {
1330            public void actionPerformed(java.awt.event.ActionEvent evt)
1331            {
1332                generateProjectRequirementsActionPerformed(evt);
1333            }
1334        });
1335        generateMenu.add(generateProjectRequirements);
1336
1337        scriptBuilderMenuBar.add(generateMenu);
1338
1339        incidentMenu.setText("Incidents");
1340        incidentMenu.setMargin(new java.awt.Insets(0, 10, 0, 10));
1341
1342        newIncident.setText("New Incident...");
1343        newIncident.addActionListener(new java.awt.event.ActionListener()
1344        {
1345            public void actionPerformed(java.awt.event.ActionEvent evt)
1346            {
1347                newIncidentActionPerformed(evt);
1348            }
1349        });
1350        incidentMenu.add(newIncident);
1351
1352        deleteIncident.setText("Delete Incident");
1353        deleteIncident.addActionListener(new java.awt.event.ActionListener()
1354        {
1355            public void actionPerformed(java.awt.event.ActionEvent evt)
1356            {
1357                deleteIncidentActionPerformed(evt);
1358            }
1359        });
1360        incidentMenu.add(deleteIncident);
1361        incidentMenu.add(jSeparator4);
1362
1363        saveIncident.setText("Save Incident...");
1364        saveIncident.addActionListener(new java.awt.event.ActionListener()
1365        {
1366            public void actionPerformed(java.awt.event.ActionEvent evt)
1367            {
1368                saveIncidentActionPerformed(evt);
1369            }
1370        });
1371        incidentMenu.add(saveIncident);
1372
1373        loadIncident.setText("Load Incident...");
1374        loadIncident.addActionListener(new java.awt.event.ActionListener()
1375        {
1376            public void actionPerformed(java.awt.event.ActionEvent evt)
1377            {
1378                loadIncidentActionPerformed(evt);
1379            }
1380        });
1381        incidentMenu.add(loadIncident);
1382
1383        scriptBuilderMenuBar.add(incidentMenu);
1384
1385        generateNoiseMenu.setText("Noise");
1386
1387        generateNoiseOption.setText("Generate Noise...");
1388        generateNoiseOption.addActionListener(new java.awt.event.ActionListener()
1389        {
1390            public void actionPerformed(java.awt.event.ActionEvent evt)
1391            {
1392                generateNoiseOptionActionPerformed(evt);
1393            }
1394        });
1395        generateNoiseMenu.add(generateNoiseOption);
1396
1397        scriptBuilderMenuBar.add(generateNoiseMenu);
1398
1399        helpMenu.setText("Help");
1400        helpMenu.setMargin(new java.awt.Insets(0, 10, 0, 10));
1401
1402        helpTutorial.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0));
1403        helpTutorial.setText("Tutorial...");
1404        helpMenu.add(helpTutorial);
1405
1406        helpAbout.setText("About...");
1407        helpAbout.addActionListener(new java.awt.event.ActionListener()
1408        {
1409            public void actionPerformed(java.awt.event.ActionEvent evt)
1410            {
1411                helpAboutActionPerformed(evt);
1412            }
1413        });
1414        helpMenu.add(helpAbout);
1415
1416        scriptBuilderMenuBar.add(helpMenu);
1417
1418        setJMenuBar(scriptBuilderMenuBar);
1419
1420        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
1421        getContentPane().setLayout(layout);
1422        layout.setHorizontalGroup(
1423            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1424            .addGroup(layout.createSequentialGroup()
1425                .addContainerGap()
1426                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1427                    .addComponent(timelinesScrollPane, 0, 0, Short.MAX_VALUE)
1428                    .addComponent(timeStampScrollPane)
1429                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
1430                        .addGap(0, 604, Short.MAX_VALUE)
1431                        .addComponent(zoomOutIcon)
1432                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1433                        .addComponent(zoomSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
1434                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1435                        .addComponent(zoomInIcon)
1436                        .addGap(18, 18, 18)
1437                        .addComponent(btnAddTime)
1438                        .addGap(21, 21, 21)))
1439                .addContainerGap())
1440        );
1441        layout.setVerticalGroup(
1442            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1443            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
1444                .addContainerGap()
1445                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
1446                    .addComponent(zoomOutIcon)
1447                    .addComponent(zoomSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1448                    .addComponent(zoomInIcon)
1449                    .addComponent(btnAddTime))
1450                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1451                .addComponent(timeStampScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
1452                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1453                .addComponent(timelinesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1289, Short.MAX_VALUE)
1454                .addContainerGap())
1455        );
1456
1457        pack();
1458    }// </editor-fold>//GEN-END:initComponents
1459
1460    /**
1461     * Scale the timeline width based on zoom slider position.
1462     *
1463     * @param evt the state change event
1464     */
1465    private void zoomSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_zoomSliderStateChanged
1466        //Changing the zoom level always refreshes the window
1467        ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK = zoomSlider.getValue();
1468        this.update(script, script);
1469        pack();
1470        repaint();
1471    }//GEN-LAST:event_zoomSliderStateChanged
1472
1473    private void cadEventMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_cadEventMousePressed
1474    }//GEN-LAST:event_cadEventMousePressed
1475
1476    private void radioEventMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_radioEventMousePressed
1477    }//GEN-LAST:event_radioEventMousePressed
1478
1479    private void cadEventMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_cadEventMouseReleased
1480    }//GEN-LAST:event_cadEventMouseReleased
1481
1482    private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
1483    }//GEN-LAST:event_okButtonActionPerformed
1484
1485    /**
1486     * If cancel button is pressed, close radio event editor
1487     *
1488     * @param evt the button press event
1489     */
1490    private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
1491        radioMessage.setText("");
1492        radioTypeComboBox.setSelectedIndex(0);
1493        radioEventFrame.setVisible(false);
1494    }//GEN-LAST:event_cancelButtonActionPerformed
1495
1496    private void editEventListActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editEventListActionPerformed
1497    }//GEN-LAST:event_editEventListActionPerformed
1498
1499    /**
1500     * Executed when the "OK" button is pressed on the Incident editor. If
1501     * incident is new, and is valid, adds it to the model and updates. If
1502     * editing existing incident, verifies changes are valid and applies them.
1503     * Then closes editor window.
1504     *
1505     * @param evt the button press event
1506     */
1507    private void incidentOkButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_incidentOkButtonActionPerformed
1508        if (!editingIncident)//adding new incident
1509        {
1510            boolean found = false;
1511            int indx = 0;
1512            // ALERT: Wacky logic follows
1513            // Examine all the incidents contained in this script
1514            for (ScriptIncident inci : script.incidents)
1515            {
1516                // If this spot in the list of incidents hasn't been assigned yet
1517                if (inci == null)
1518                {
1519                    found = true;
1520                    break;
1521                }
1522                ++indx;
1523                // Does the new incident number match an existing one?
1524                if (inci.number == (Integer) addIncidentNumber.getValue())
1525                {
1526                    JOptionPane.showMessageDialog(this, "Incident number already in use.",
1527                            "Unable to Create Incident", JOptionPane.ERROR_MESSAGE);
1528                    incidentFrame.setVisible(true);
1529                    return;
1530                }
1531            }
1532            // We examined all incidents and there wasn't an empty slot
1533            if (!found)
1534            {
1535                JOptionPane.showMessageDialog(this, "Script already has the max number of incidents.",
1536                        "Unable to Create Incident", JOptionPane.ERROR_MESSAGE);
1537                incidentFrame.setVisible(true);
1538                // ALERT: exit from middle of method
1539                return;
1540            }
1541
1542            // We found a spot for the new incident
1543            script.incidents.remove(indx); // remove the null incident placeholder
1544            SimulationScript.incidentColors[indx] = selectedColor;
1545            // Add the new incident to the list
1546            script.incidents.add(indx,
1547                    new ScriptIncident(SimulationScript.incidentColors[indx],
1548                            (Integer) addIncidentNumber.getValue(), addIncidentName.getText(), addIncidentDescription.getText(),
1549                            script));
1550            script.incidents.get(indx).setOffset((Integer) addIncidentStart.getValue() * 60);
1551            script.numberOfIncidents++;
1552            IncidentEditorFrame editor = new IncidentEditorFrame(script.incidents.get(indx), this);
1553
1554            editor.setVisible(true);
1555        }
1556        else//editing existing incident
1557        {
1558            //adjust incident color
1559            script.incidents.get(oldIncidentIndex).color = selectedColor;
1560            //adjust incident name
1561            script.incidents.get(oldIncidentIndex).name = addIncidentName.getText();
1562            //adjust incident description
1563            script.incidents.get(oldIncidentIndex).description = addIncidentDescription.getText();
1564            //change offset of incident
1565            script.incidents.get(oldIncidentIndex).setOffset(((int) addIncidentStart.getValue()) * 60);
1566            //update incident number, if it was changed
1567            if ((int) addIncidentNumber.getValue() == script.incidents.get(oldIncidentIndex).number
1568                    || !scriptContainsLogNum(script, (int) addIncidentNumber.getValue()))
1569            {
1570                script.incidents.get(oldIncidentIndex).number = (int) addIncidentNumber.getValue();
1571            }
1572            else//if the updated value conflicts with an existing inc number,
1573            //the inc number update fails
1574            {
1575                JOptionPane.showMessageDialog(this, "Incident number already in use.",
1576                        "Unable To Alter Incident Detail", JOptionPane.ERROR_MESSAGE);
1577            }
1578        }
1579
1580        //close this frame
1581        incidentFrame.setVisible(false);
1582        this.update(script, script);
1583        repaint();
1584    }//GEN-LAST:event_incidentOkButtonActionPerformed
1585
1586    /**
1587     * Determine if the given incident number is already present in the script.
1588     *
1589     * @param script the current simulation script
1590     * @param num the incident log number to check
1591     * @return true if one of the existing incidents in the script uses that log
1592     * number
1593     */
1594    private boolean scriptContainsLogNum(SimulationScript script, int num)
1595    {
1596        for (ScriptIncident incident : script.incidents)
1597        {
1598            if (incident != null && incident.number == num)
1599            {
1600                return true;
1601            }
1602        }
1603        return false;
1604    }
1605
1606    /**
1607     * Closes editor window upon click of cancel button.
1608     *
1609     * @param evt the button press event
1610     */
1611    private void incidentCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_incidentCancelButtonActionPerformed
1612        incidentFrame.setVisible(false);
1613    }//GEN-LAST:event_incidentCancelButtonActionPerformed
1614
1615    /**
1616     * Opens incident editor window and preps for addition of new incident, upon
1617     * click of "New Incident" menu option.
1618     *
1619     * @param evt the button press event
1620     */
1621    private void newIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newIncidentActionPerformed
1622        editingIncident = false;
1623
1624        addIncidentName.setText("");
1625
1626        int newLogNum = 100;
1627        boolean found = false;
1628        while (!found)
1629        {
1630            newLogNum++;
1631            if (!scriptContainsLogNum(script, newLogNum))
1632            {
1633                found = true;
1634                for (ScriptIncident incident : script.incidents)
1635                {
1636                    if (incident != null && incident.number == newLogNum)
1637                    {
1638                        found = false;
1639                    }
1640                }
1641            }
1642        }
1643
1644        addIncidentNumber.setValue(newLogNum);
1645        addIncidentStart.setValue(0);
1646        txtIncidentLength.setText("0");
1647        incidentColorField.setBackground(Color.BLACK);
1648        selectedColor = Color.BLACK;
1649        addIncidentDescription.setText("");
1650
1651        incidentFrame.setVisible(true);
1652    }//GEN-LAST:event_newIncidentActionPerformed
1653
1654    private void fileMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileMenuActionPerformed
1655    }//GEN-LAST:event_fileMenuActionPerformed
1656
1657    /**
1658     * Upon click of "Open file" menu option, opens a window to load a new .sim
1659     * file.
1660     *
1661     * @param evt the button press event
1662     */
1663    private void fileOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileOpenActionPerformed
1664        JFileChooser fc = new JFileChooser();
1665
1666        //Search for .xml files
1667        fc.setFileFilter(new ExtensionFileFilter("Simulation Script XML (.xml)",
1668                new String[]
1669                {
1670                    "xml"
1671                }));
1672        if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
1673        {
1674            //make a new script and load it with values from the selected file
1675            script = new SimulationScript();
1676            script.loadScriptFromFile(fc.getSelectedFile());
1677            script.saveFile = fc.getSelectedFile();
1678        }
1679        this.update(script, script);
1680        //zoom out all the way so that the whole imported script is visible
1681        zoomSlider.setValue(zoomSlider.getMinimum());
1682        repaint();
1683    }//GEN-LAST:event_fileOpenActionPerformed
1684
1685    /**
1686     * Upon click of "Save as" menu option, opens a window to choose a .sim file
1687     * to save this as.
1688     *
1689     * @param evt the button press event
1690     */
1691    private void fileSaveAsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSaveAsActionPerformed
1692        JFileChooser fc = new JFileChooser();
1693
1694        fc.setFileFilter(new ExtensionFileFilter("Simulation Script XML (.xml)",
1695                new String[]
1696                {
1697                    "xml"
1698                }));
1699
1700        if (fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
1701        {
1702            script.saveScriptToFile(fc.getSelectedFile());
1703            script.saveFile = fc.getSelectedFile();
1704        }
1705    }//GEN-LAST:event_fileSaveAsActionPerformed
1706
1707    /**
1708     * Upon click of "Save" menu option, opens a window to choose a .sim file to
1709     * save this as.
1710     *
1711     * @param evt the button press event
1712     */
1713    private void fileSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSaveActionPerformed
1714        //If the script has never been saved before, we need to name or create a
1715        //file in which to save it
1716        if (script.saveFile == null)
1717        {
1718            fileSaveAsActionPerformed(evt);
1719        }
1720        //Otherwise, just save to the previously selected save spot
1721        else
1722        {
1723            script.saveScriptToFile(script.saveFile);
1724        }
1725    }//GEN-LAST:event_fileSaveActionPerformed
1726
1727    /**
1728     * Allow this window to refresh itself, after a different window loses
1729     * focus.
1730     */
1731    public void returnFocus()
1732    {
1733        zoomSlider.setValue(zoomSlider.getMinimum());
1734        zoomSliderStateChanged(new ChangeEvent(script));
1735    }
1736
1737    /**
1738     * Set up the incident details/properties window so that it reflects the
1739     * values of the selected incident. Then, make the window visible.
1740     *
1741     * @param i the incident to be represented by this details window
1742     */
1743    public void incidentDetailsScreen(ScriptIncident i)
1744    {
1745        editingIncident = true;
1746        oldIncidentIndex = script.incidents.indexOf(i);
1747
1748        addIncidentName.setText(i.name);
1749        addIncidentNumber.setValue(i.number);
1750        addIncidentStart.setValue(i.offset / 60);
1751        txtIncidentLength.setText("" + (i.length / 60));
1752        txtIncidentLength.setHorizontalTextPosition(SwingConstants.RIGHT);
1753        //addIncidentLength.setValue(i.length / 60);
1754        incidentColorField.setBackground(i.color);
1755        selectedColor = i.color;
1756        addIncidentDescription.setText(i.description);
1757
1758        incidentFrame.setVisible(true);
1759    }
1760
1761    /**
1762     * Brings up the noise generation screen upon click of the "Generate Noise"
1763     * menu option.
1764     *
1765     * @param evt the button press event
1766     */
1767    private void generateNoiseOptionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateNoiseOptionActionPerformed
1768        addNoiseFrame.setVisible(true);
1769    }//GEN-LAST:event_generateNoiseOptionActionPerformed
1770
1771    /**
1772     * Hides the noise generation screen upon click of the "Cancel" button.
1773     *
1774     * @param evt the button press event
1775     */
1776    private void btnCancelNoiseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelNoiseActionPerformed
1777        addNoiseFrame.setVisible(false);
1778    }//GEN-LAST:event_btnCancelNoiseActionPerformed
1779
1780    /**
1781     * Generates random noise upon click of the "Generate" button, then hides
1782     * the noise generation screen.
1783     *
1784     * @param evt the button press event
1785     */
1786    private void btnGenerateNoiseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGenerateNoiseActionPerformed
1787        Random rng = new Random();
1788        ScriptEventType[] eventTypes = ScriptEventType.values();
1789
1790        /*This feature has not yet been implemented. Show a message and just return.*/
1791        if (true)
1792        {
1793            JOptionPane.showMessageDialog(this, "This feature has not yet been implemented.\n",
1794                    "Feature not implemented", JOptionPane.INFORMATION_MESSAGE);
1795
1796            return;
1797        }
1798
1799        /* For prototyping purpose, ignore the sliders and average their values */
1800        int total = radioChatterSlider.getValue() + laneClosuresSlider.getValue() + TMCALSlider.getValue() + minorEventsSlider.getValue() + backgroundNoiseSlider.getValue();
1801        total /= 5;
1802
1803        for (int i = 0; i < script.incidents.get(9).slices.size(); i++)
1804        {
1805            script.incidents.get(9).slices.get(i).events.clear();
1806        }
1807
1808        for (int i = 0; i < total; i++)
1809        {
1810            int n = rng.nextInt();
1811            int s = rng.nextInt();
1812            int e = rng.nextInt();
1813            if (n < 0)
1814            {
1815                n *= -1;
1816            }
1817            if (s < 0)
1818            {
1819                s *= -1;
1820            }
1821            if (e < 0)
1822            {
1823                e *= -1;
1824            }
1825
1826            script.incidents.get(9).slices.get(s % (script.incidents.get(9).slices.size())).addEvent(ScriptEvent.factoryByType(eventTypes[e % eventTypes.length]));
1827        }
1828
1829        addNoiseFrame.setVisible(false);
1830
1831        this.update(script, script);
1832        repaint();
1833}//GEN-LAST:event_btnGenerateNoiseActionPerformed
1834
1835    /**
1836     * Allow the user to pick an incident from a dropdown, then save it to an
1837     * XML file.
1838     *
1839     * @param evt the button press event
1840     */
1841    private void saveIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveIncidentActionPerformed
1842        Object[] incidentList = script.incidents.toArray();
1843        String input = "";
1844        ScriptIncident inc = null;
1845
1846        //Pick the incident to save
1847        Object result = JOptionPane.showInputDialog(
1848                this,
1849                "Select Incident:",
1850                "Save Incident",
1851                JOptionPane.PLAIN_MESSAGE,
1852                null,
1853                incidentList,
1854                script.incidents.get(0));
1855        if (result == null)
1856        {
1857            return;
1858        }
1859        input = result.toString();
1860        int i = 0;
1861        for (ScriptIncident incident : script.incidents)
1862        {
1863            if (incident == null)
1864            {
1865                continue;
1866            }
1867            if (incident.toString().equals(input))
1868            {
1869                inc = incident;
1870            }
1871        }
1872
1873        if (inc == null)
1874        {
1875            return;
1876        }
1877
1878        //Pick the file to save it to
1879        JFileChooser fc = new JFileChooser();
1880        fc.setFileFilter(new ExtensionFileFilter("Script Incident (.xml)", new String[]
1881        {
1882            "xml"
1883        }));
1884        if (fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
1885        {
1886            inc.saveIncidentToFile(fc.getSelectedFile());
1887        }
1888    }//GEN-LAST:event_saveIncidentActionPerformed
1889
1890    /**
1891     * Bring up the incident palette for loading of new incidents.
1892     *
1893     * @param evt the menu click event
1894     */
1895    private void loadIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadIncidentActionPerformed
1896        new IncidentPaletteFrame(script, this).setVisible(true);
1897        zoomSlider.setValue(zoomSlider.getMinimum());
1898    }//GEN-LAST:event_loadIncidentActionPerformed
1899
1900    //Unsupported as of 2017/09/05
1901    private void generateProjectRequirementsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateProjectRequirementsActionPerformed
1902        JFileChooser fc = new JFileChooser();
1903        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1904        {
1905            "pdf"
1906        }));
1907        fc.setSelectedFile(new File("Requirements.pdf"));
1908        fc.showSaveDialog(this);
1909        /*This feature has not yet been implemented. Show a message and just return.*/
1910        if (true)
1911        {
1912            JOptionPane.showMessageDialog(this, "This feature has not yet been implemented.\n",
1913                    "Feature not implemented", JOptionPane.INFORMATION_MESSAGE);
1914
1915            return;
1916        }
1917    }//GEN-LAST:event_generateProjectRequirementsActionPerformed
1918
1919    //Unsupported as of 2017/09/05
1920    private void generateNotebooksActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateNotebooksActionPerformed
1921        JFileChooser fc = new JFileChooser();
1922        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1923        {
1924            "pdf"
1925        }));
1926        fc.setSelectedFile(new File("Notebooks.pdf"));
1927        fc.showSaveDialog(this);
1928        /*This feature has not yet been implemented. Show a message and just return.*/
1929        if (true)
1930        {
1931            JOptionPane.showMessageDialog(this, "This feature has not yet been implemented.\n",
1932                    "Feature not implemented", JOptionPane.INFORMATION_MESSAGE);
1933
1934            return;
1935        }
1936    }//GEN-LAST:event_generateNotebooksActionPerformed
1937
1938    //Unsupported as of 2017/09/05
1939    private void generateScorecardsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateScorecardsActionPerformed
1940        JFileChooser fc = new JFileChooser();
1941        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1942        {
1943            "pdf"
1944        }));
1945        fc.setSelectedFile(new File("Scorecards.pdf"));
1946        fc.showSaveDialog(this);
1947        /*This feature has not yet been implemented. Show a message and just return.*/
1948        if (true)
1949        {
1950            JOptionPane.showMessageDialog(this, "This feature has not yet been implemented.\n",
1951                    "Feature not implemented", JOptionPane.INFORMATION_MESSAGE);
1952
1953            return;
1954        }
1955    }//GEN-LAST:event_generateScorecardsActionPerformed
1956
1957    //Unsupported as of 2017/09/05
1958    private void generateOrganizationChartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateOrganizationChartActionPerformed
1959        JFileChooser fc = new JFileChooser();
1960        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1961        {
1962            "pdf"
1963        }));
1964        fc.setSelectedFile(new File("OrganizationChart.pdf"));
1965        fc.showSaveDialog(this);
1966        /*This feature has not yet been implemented. Show a message and just return.*/
1967        if (true)
1968        {
1969            JOptionPane.showMessageDialog(this, "This feature has not yet been implemented.\n",
1970                    "Feature not implemented", JOptionPane.INFORMATION_MESSAGE);
1971
1972            return;
1973        }
1974    }//GEN-LAST:event_generateOrganizationChartActionPerformed
1975
1976    /**
1977     * Increases zoom level upon click of the "Zoom in" icon.
1978     *
1979     * @param evt the mouse event
1980     */
1981    private void zoomInIconMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_zoomInIconMouseClicked
1982        if (script != null && script.numberOfIncidents > 0)
1983        {
1984            zoomSlider.setValue(zoomSlider.getValue() >= 22 ? 22 : zoomSlider.getValue() + 1);
1985        }
1986    }//GEN-LAST:event_zoomInIconMouseClicked
1987
1988    /**
1989     * Decreases zoom level upon click of the "Zoom out" icon.
1990     *
1991     * @param evt the mouse event
1992     */
1993    private void zoomOutIconMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_zoomOutIconMouseClicked
1994        if (script != null && script.numberOfIncidents > 0)
1995        {
1996            zoomSlider.setValue(zoomSlider.getValue() <= 4 ? 4 : zoomSlider.getValue() - 1);
1997        }
1998    }//GEN-LAST:event_zoomOutIconMouseClicked
1999    private Color selectedColor = Color.BLACK;
2000
2001    private void btnChooseColorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnChooseColorActionPerformed
2002        //For whatever reason, this causes the incident properties frame to be hidden
2003        Color newColor = incidentColorChooser.showDialog(this, "Incident Color", incidentColorField.getBackground());
2004        if (newColor != null)
2005        {
2006            //If the user selected a color, apply it to the properties frame
2007            selectedColor = newColor;
2008            incidentColorField.setBackground(newColor);
2009        }
2010        //Return focus to the properties frame
2011        incidentFrame.setVisible(true);
2012    }//GEN-LAST:event_btnChooseColorActionPerformed
2013
2014    /* Help > About simply displays the current SVN revision number so
2015     * the user can determine which version of the source code was used to
2016     * build the executable she is running.
2017     */
2018    private void helpAboutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_helpAboutActionPerformed
2019    {//GEN-HEADEREND:event_helpAboutActionPerformed
2020        JOptionPane.showMessageDialog(rootPane, "Revision: " + getAppVersion(), "About", JOptionPane.INFORMATION_MESSAGE);
2021    }//GEN-LAST:event_helpAboutActionPerformed
2022
2023    /**
2024     * Replaces the current script with a new, blank script.
2025     *
2026     * @param evt the menu selection event
2027     */
2028    private void fileNewActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_fileNewActionPerformed
2029    {//GEN-HEADEREND:event_fileNewActionPerformed
2030        script = new SimulationScript();
2031        script.update();
2032        this.update(null, script);
2033        repaint();
2034    }//GEN-LAST:event_fileNewActionPerformed
2035
2036    /**
2037     * Allows the user to delete an incident from the current script.
2038     *
2039     * @param evt the menu selection event
2040     */
2041    private void deleteIncidentActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_deleteIncidentActionPerformed
2042    {//GEN-HEADEREND:event_deleteIncidentActionPerformed
2043        Object[] incidentList = script.incidents.toArray();
2044        String input = "";
2045        ScriptIncident inc = null;
2046        //Choose the incident to be deleted
2047        Object result = JOptionPane.showInputDialog(
2048                this,
2049                "Select Incident:",
2050                "Delete Incident",
2051                JOptionPane.PLAIN_MESSAGE,
2052                null,
2053                incidentList,
2054                script.incidents.get(0));
2055
2056        if (result != null)
2057        {
2058            input = result.toString();
2059            for (ScriptIncident incident : script.incidents)
2060            {
2061                if (incident == null)
2062                {
2063                    continue;
2064                }
2065                if (incident.toString().equals(input))
2066                {
2067                    inc = incident;
2068                }
2069            }
2070
2071            //Allow user to verify deletion before proceeding
2072            if (inc != null)
2073            {
2074                int confirm = JOptionPane.showConfirmDialog(this,
2075                        "Are you sure you want to delete " + inc.toString() + "?");
2076                if (confirm == JOptionPane.YES_OPTION)
2077                {
2078                    //Remove the incident and replace it with a null placeholder
2079                    script.incidents.remove(inc);
2080                    script.incidents.add(null);
2081                    script.numberOfIncidents--;
2082                }
2083            }
2084        }
2085        //Refresh
2086        this.update(script, script);
2087        repaint();
2088    }//GEN-LAST:event_deleteIncidentActionPerformed
2089    /**
2090     * Add 15 minutes to the end of the visible timeline.
2091     *
2092     * @param evt the button press event.
2093     */
2094    private void btnAddTimeActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnAddTimeActionPerformed
2095    {//GEN-HEADEREND:event_btnAddTimeActionPerformed
2096        IncidentTimelinePanel.requestedScriptBuilderFillerTime += IncidentTimelinePanel.FILLER_INTERVAL_SECONDS;
2097        this.update(script, script);
2098    }//GEN-LAST:event_btnAddTimeActionPerformed
2099
2100    private void cadEventActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cadEventActionPerformed
2101    {//GEN-HEADEREND:event_cadEventActionPerformed
2102        /*This feature has not yet been implemented. Show a message and just return.*/
2103        if (true)
2104        {
2105            JOptionPane.showMessageDialog(this, "This feature has not yet been implemented.\n",
2106                    "Feature not implemented", JOptionPane.INFORMATION_MESSAGE);
2107
2108            return;
2109        }
2110    }//GEN-LAST:event_cadEventActionPerformed
2111
2112    private void generateWebNotebookActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_generateWebNotebookActionPerformed
2113    {//GEN-HEADEREND:event_generateWebNotebookActionPerformed
2114        /*This feature has not yet been implemented. Show a message and just return.*/
2115        if (true)
2116        {
2117            JOptionPane.showMessageDialog(this, "This feature has not yet been implemented.\n",
2118                    "Feature not implemented", JOptionPane.INFORMATION_MESSAGE);
2119
2120            return;
2121        }
2122    }//GEN-LAST:event_generateWebNotebookActionPerformed
2123
2124    /**
2125     * Read the version number from the application properties. The file
2126     * 'application.properties' is generated by build.xml.
2127     *
2128     * @return a version string obtained from application.properties file, or
2129     * "Version: unknown" if an IOerror prevents us from reading the file.
2130     */
2131    private String getAppVersion()
2132    {
2133        String propfilename = "/scriptbuilder/gui/application.properties";
2134        String propKey = "Application.revision";
2135        String version = "unknown";
2136        // Load the application properties (created by build.xml)
2137        try
2138        {
2139            Properties props = new Properties();
2140            props.load(this.getClass().getResourceAsStream(propfilename));
2141            version = (String) props.get(propKey);
2142        }
2143        catch (IOException ex)
2144        {
2145            Logger.getLogger("scriptbuilder.gui").log(Level.SEVERE,
2146                    "ScriptBuilderFrame.getAppVersion()."
2147                    + " IOError reading " + propfilename);
2148        }
2149        catch (NullPointerException npe)
2150        {
2151            Logger.getLogger("scriptbuilder.gui").log(Level.SEVERE,
2152                    "ScriptBuilderFrame.getAppVersion().load."
2153                    + " Missing file: " + propfilename);
2154        }
2155        return version;
2156    }
2157
2158    /**
2159     * Runs the script builder. This is the main method for the whole program.
2160     *
2161     * @param args the command line arguments
2162     */
2163    public static void main(String args[])
2164    {
2165        try
2166        {
2167            UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
2168        }
2169        catch (Exception ex)
2170        {
2171            //Apparently we don't do any special exception processing
2172        }
2173
2174        try
2175        {
2176            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
2177        }
2178        catch (Exception ex)
2179        {
2180            //Apparently we don't do any special exception processing
2181        }
2182
2183        java.awt.EventQueue.invokeLater(
2184                new Runnable()
2185                {
2186                    public void run()
2187                    {
2188                        new ScriptBuilderFrame().setVisible(true);
2189                    }
2190                });
2191    }
2192    // Variables declaration - do not modify//GEN-BEGIN:variables
2193    private javax.swing.JSlider TMCALSlider;
2194    private javax.swing.JTextArea addIncidentDescription;
2195    private javax.swing.JTextField addIncidentName;
2196    private javax.swing.JSpinner addIncidentNumber;
2197    private javax.swing.JSpinner addIncidentStart;
2198    private javax.swing.JFrame addNoiseFrame;
2199    private javax.swing.JSlider backgroundNoiseSlider;
2200    private javax.swing.JButton btnAddTime;
2201    private javax.swing.JButton btnCancelNoise;
2202    private javax.swing.JButton btnChooseColor;
2203    private javax.swing.JButton btnGenerateNoise;
2204    private javax.swing.JMenuItem cadEvent;
2205    private javax.swing.JFrame cadEventFrame;
2206    private javax.swing.JButton cancelButton;
2207    private javax.swing.JMenuItem deleteEventList;
2208    private javax.swing.JMenuItem deleteIncident;
2209    private javax.swing.JMenuItem editEventList;
2210    private javax.swing.JPopupMenu eventListPopupMenu;
2211    private javax.swing.JPopupMenu eventPopupMenu;
2212    private javax.swing.JMenu fileMenu;
2213    private javax.swing.JMenuItem fileNew;
2214    private javax.swing.JMenuItem fileOpen;
2215    private javax.swing.JMenuItem fileSave;
2216    private javax.swing.JMenuItem fileSaveAs;
2217    private javax.swing.JMenu generateMenu;
2218    private javax.swing.JMenu generateNoiseMenu;
2219    private javax.swing.JMenuItem generateNoiseOption;
2220    private javax.swing.JMenuItem generateNotebooks;
2221    private javax.swing.JMenuItem generateOrganizationChart;
2222    private javax.swing.JMenuItem generateProjectRequirements;
2223    private javax.swing.JMenuItem generateScorecards;
2224    private javax.swing.JMenuItem generateWebNotebook;
2225    private javax.swing.JMenuItem helpAbout;
2226    private javax.swing.JMenu helpMenu;
2227    private javax.swing.JMenuItem helpTutorial;
2228    private javax.swing.JButton incidentCancelButton;
2229    private javax.swing.JColorChooser incidentColorChooser;
2230    private javax.swing.JTextField incidentColorField;
2231    private javax.swing.JFrame incidentFrame;
2232    private javax.swing.JMenu incidentMenu;
2233    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel1;
2234    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel10;
2235    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel2;
2236    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel3;
2237    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel4;
2238    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel5;
2239    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel6;
2240    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel7;
2241    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel8;
2242    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel9;
2243    private javax.swing.JButton incidentOkButton;
2244    private javax.swing.JPopupMenu incidentPopupMenu;
2245    private javax.swing.JScrollPane incidentPropertiesScrollPane;
2246    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel1;
2247    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel10;
2248    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel2;
2249    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel3;
2250    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel4;
2251    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel5;
2252    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel6;
2253    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel7;
2254    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel8;
2255    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel9;
2256    private javax.swing.JMenuItem jMenuItem2;
2257    private javax.swing.JMenuItem jMenuItem4;
2258    private javax.swing.JMenuItem jMenuItem5;
2259    private javax.swing.JMenuItem jMenuItem6;
2260    private javax.swing.JPopupMenu.Separator jSeparator1;
2261    private javax.swing.JPopupMenu.Separator jSeparator2;
2262    private javax.swing.JPopupMenu.Separator jSeparator3;
2263    private javax.swing.JPopupMenu.Separator jSeparator4;
2264    private javax.swing.JLabel labelBackgroundNoise;
2265    private javax.swing.JLabel labelCADEntry;
2266    private javax.swing.JLabel labelIncidentColor;
2267    private javax.swing.JLabel labelIncidentDescription;
2268    private javax.swing.JLabel labelIncidentLength;
2269    private javax.swing.JLabel labelIncidentName;
2270    private javax.swing.JLabel labelIncidentNumber;
2271    private javax.swing.JLabel labelIncidentStart;
2272    private javax.swing.JLabel labelLaneClosures;
2273    private javax.swing.JLabel labelLeastFreq;
2274    private javax.swing.JLabel labelMinorEvents;
2275    private javax.swing.JLabel labelMostFreq;
2276    private javax.swing.JLabel labelRadioChatter;
2277    private javax.swing.JLabel labelRadioMessage;
2278    private javax.swing.JLabel labelRadioType;
2279    private javax.swing.JLabel labelTMCALLogs;
2280    private javax.swing.JSlider laneClosuresSlider;
2281    private javax.swing.JMenuItem loadIncident;
2282    private javax.swing.JSlider minorEventsSlider;
2283    private javax.swing.JMenuItem newIncident;
2284    private javax.swing.JButton okButton;
2285    private javax.swing.JMenuItem popupDeleteIncident;
2286    private javax.swing.JSlider radioChatterSlider;
2287    private javax.swing.JMenuItem radioEvent;
2288    private javax.swing.JFrame radioEventFrame;
2289    private javax.swing.JTextArea radioMessage;
2290    private javax.swing.JScrollPane radioMessageScrollPane;
2291    private javax.swing.JComboBox radioTypeComboBox;
2292    private javax.swing.JMenuItem saveIncident;
2293    private javax.swing.JMenuBar scriptBuilderMenuBar;
2294    private scriptbuilder.gui.panels.TimeStampPanel timeStampPanel;
2295    private javax.swing.JScrollPane timeStampScrollPane;
2296    private scriptbuilder.gui.panels.TimelineTickPanel timelineTickPanel;
2297    private javax.swing.JScrollPane timelinesScrollPane;
2298    private javax.swing.JLabel txtIncidentLength;
2299    private javax.swing.JTextArea txtNoiseDescription;
2300    private javax.swing.JLabel zoomInIcon;
2301    private javax.swing.JLabel zoomOutIcon;
2302    private javax.swing.JSlider zoomSlider;
2303    // End of variables declaration//GEN-END:variables
2304}
Note: See TracBrowser for help on using the repository browser.