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

Revision 114, 108.8 KB checked in by bmcguffin, 9 years ago (diff)

Set visibility of +15:00 button in ScriptBuilderFrame? to false. This prevents it from appearing in the window.

Line 
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        jMenuItem3 = 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        jMenuItem3.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1293        jMenuItem3.setText("Generate Web Notebook...");
1294        generateMenu.add(jMenuItem3);
1295
1296        generateScorecards.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1297        generateScorecards.setText("Generate Scorecards...");
1298        generateScorecards.addActionListener(new java.awt.event.ActionListener()
1299        {
1300            public void actionPerformed(java.awt.event.ActionEvent evt)
1301            {
1302                generateScorecardsActionPerformed(evt);
1303            }
1304        });
1305        generateMenu.add(generateScorecards);
1306
1307        generateOrganizationChart.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1308        generateOrganizationChart.setText("Generate D14 TMC Org Chart...");
1309        generateOrganizationChart.addActionListener(new java.awt.event.ActionListener()
1310        {
1311            public void actionPerformed(java.awt.event.ActionEvent evt)
1312            {
1313                generateOrganizationChartActionPerformed(evt);
1314            }
1315        });
1316        generateMenu.add(generateOrganizationChart);
1317        generateMenu.add(jSeparator3);
1318
1319        generateProjectRequirements.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
1320        generateProjectRequirements.setText("Generate Project Worklist...");
1321        generateProjectRequirements.addActionListener(new java.awt.event.ActionListener()
1322        {
1323            public void actionPerformed(java.awt.event.ActionEvent evt)
1324            {
1325                generateProjectRequirementsActionPerformed(evt);
1326            }
1327        });
1328        generateMenu.add(generateProjectRequirements);
1329
1330        scriptBuilderMenuBar.add(generateMenu);
1331
1332        incidentMenu.setText("Incidents");
1333        incidentMenu.setMargin(new java.awt.Insets(0, 10, 0, 10));
1334
1335        newIncident.setText("New Incident...");
1336        newIncident.addActionListener(new java.awt.event.ActionListener()
1337        {
1338            public void actionPerformed(java.awt.event.ActionEvent evt)
1339            {
1340                newIncidentActionPerformed(evt);
1341            }
1342        });
1343        incidentMenu.add(newIncident);
1344
1345        deleteIncident.setText("Delete Incident");
1346        deleteIncident.addActionListener(new java.awt.event.ActionListener()
1347        {
1348            public void actionPerformed(java.awt.event.ActionEvent evt)
1349            {
1350                deleteIncidentActionPerformed(evt);
1351            }
1352        });
1353        incidentMenu.add(deleteIncident);
1354        incidentMenu.add(jSeparator4);
1355
1356        saveIncident.setText("Save Incident...");
1357        saveIncident.addActionListener(new java.awt.event.ActionListener()
1358        {
1359            public void actionPerformed(java.awt.event.ActionEvent evt)
1360            {
1361                saveIncidentActionPerformed(evt);
1362            }
1363        });
1364        incidentMenu.add(saveIncident);
1365
1366        loadIncident.setText("Load Incident...");
1367        loadIncident.addActionListener(new java.awt.event.ActionListener()
1368        {
1369            public void actionPerformed(java.awt.event.ActionEvent evt)
1370            {
1371                loadIncidentActionPerformed(evt);
1372            }
1373        });
1374        incidentMenu.add(loadIncident);
1375
1376        scriptBuilderMenuBar.add(incidentMenu);
1377
1378        generateNoiseMenu.setText("Noise");
1379
1380        generateNoiseOption.setText("Generate Noise...");
1381        generateNoiseOption.addActionListener(new java.awt.event.ActionListener()
1382        {
1383            public void actionPerformed(java.awt.event.ActionEvent evt)
1384            {
1385                generateNoiseOptionActionPerformed(evt);
1386            }
1387        });
1388        generateNoiseMenu.add(generateNoiseOption);
1389
1390        scriptBuilderMenuBar.add(generateNoiseMenu);
1391
1392        helpMenu.setText("Help");
1393        helpMenu.setMargin(new java.awt.Insets(0, 10, 0, 10));
1394
1395        helpTutorial.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0));
1396        helpTutorial.setText("Tutorial...");
1397        helpMenu.add(helpTutorial);
1398
1399        helpAbout.setText("About...");
1400        helpAbout.addActionListener(new java.awt.event.ActionListener()
1401        {
1402            public void actionPerformed(java.awt.event.ActionEvent evt)
1403            {
1404                helpAboutActionPerformed(evt);
1405            }
1406        });
1407        helpMenu.add(helpAbout);
1408
1409        scriptBuilderMenuBar.add(helpMenu);
1410
1411        setJMenuBar(scriptBuilderMenuBar);
1412
1413        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
1414        getContentPane().setLayout(layout);
1415        layout.setHorizontalGroup(
1416            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1417            .addGroup(layout.createSequentialGroup()
1418                .addContainerGap()
1419                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1420                    .addComponent(timelinesScrollPane, 0, 0, Short.MAX_VALUE)
1421                    .addComponent(timeStampScrollPane)
1422                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
1423                        .addGap(0, 604, Short.MAX_VALUE)
1424                        .addComponent(zoomOutIcon)
1425                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1426                        .addComponent(zoomSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
1427                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1428                        .addComponent(zoomInIcon)
1429                        .addGap(18, 18, 18)
1430                        .addComponent(btnAddTime)
1431                        .addGap(21, 21, 21)))
1432                .addContainerGap())
1433        );
1434        layout.setVerticalGroup(
1435            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1436            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
1437                .addContainerGap()
1438                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
1439                    .addComponent(zoomOutIcon)
1440                    .addComponent(zoomSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1441                    .addComponent(zoomInIcon)
1442                    .addComponent(btnAddTime))
1443                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1444                .addComponent(timeStampScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
1445                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1446                .addComponent(timelinesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1289, Short.MAX_VALUE)
1447                .addContainerGap())
1448        );
1449
1450        pack();
1451    }// </editor-fold>//GEN-END:initComponents
1452
1453    /**
1454     * Scale the timeline width based on zoom slider position.
1455     *
1456     * @param evt the state change event
1457     */
1458    private void zoomSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_zoomSliderStateChanged
1459        //Changing the zoom level always refreshes the window
1460        ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK = zoomSlider.getValue();
1461        this.update(script, script);
1462        pack();
1463        repaint();
1464    }//GEN-LAST:event_zoomSliderStateChanged
1465
1466    private void cadEventMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_cadEventMousePressed
1467    }//GEN-LAST:event_cadEventMousePressed
1468
1469    private void radioEventMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_radioEventMousePressed
1470    }//GEN-LAST:event_radioEventMousePressed
1471
1472    private void cadEventMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_cadEventMouseReleased
1473    }//GEN-LAST:event_cadEventMouseReleased
1474
1475    private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
1476    }//GEN-LAST:event_okButtonActionPerformed
1477
1478    /**
1479     * If cancel button is pressed, close radio event editor
1480     *
1481     * @param evt the button press event
1482     */
1483    private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
1484        radioMessage.setText("");
1485        radioTypeComboBox.setSelectedIndex(0);
1486        radioEventFrame.setVisible(false);
1487    }//GEN-LAST:event_cancelButtonActionPerformed
1488
1489    private void editEventListActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editEventListActionPerformed
1490    }//GEN-LAST:event_editEventListActionPerformed
1491
1492    /**
1493     * Executed when the "OK" button is pressed on the Incident editor. If
1494     * incident is new, and is valid, adds it to the model and updates. If
1495     * editing existing incident, verifies changes are valid and applies them.
1496     * Then closes editor window.
1497     *
1498     * @param evt the button press event
1499     */
1500    private void incidentOkButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_incidentOkButtonActionPerformed
1501        if (!editingIncident)//adding new incident
1502        {
1503            boolean found = false;
1504            int indx = 0;
1505            // ALERT: Wacky logic follows
1506            // Examine all the incidents contained in this script
1507            for (ScriptIncident inci : script.incidents)
1508            {
1509                // If this spot in the list of incidents hasn't been assigned yet
1510                if (inci == null)
1511                {
1512                    found = true;
1513                    break;
1514                }
1515                ++indx;
1516                // Does the new incident number match an existing one?
1517                if (inci.number == (Integer) addIncidentNumber.getValue())
1518                {
1519                    JOptionPane.showMessageDialog(this, "Incident number already in use.",
1520                            "Unable to Create Incident", JOptionPane.ERROR_MESSAGE);
1521                    incidentFrame.setVisible(true);
1522                    return;
1523                }
1524            }
1525            // We examined all incidents and there wasn't an empty slot
1526            if (!found)
1527            {
1528                JOptionPane.showMessageDialog(this, "Script already has the max number of incidents.",
1529                        "Unable to Create Incident", JOptionPane.ERROR_MESSAGE);
1530                incidentFrame.setVisible(true);
1531                // ALERT: exit from middle of method
1532                return;
1533            }
1534
1535            // We found a spot for the new incident
1536            script.incidents.remove(indx); // remove the null incident placeholder
1537            SimulationScript.incidentColors[indx] = selectedColor;
1538            // Add the new incident to the list
1539            script.incidents.add(indx,
1540                    new ScriptIncident(SimulationScript.incidentColors[indx],
1541                            (Integer) addIncidentNumber.getValue(), addIncidentName.getText(), addIncidentDescription.getText(),
1542                            script));
1543            script.incidents.get(indx).setOffset((Integer) addIncidentStart.getValue() * 60);
1544            script.numberOfIncidents++;
1545            new IncidentEditorFrame(script.incidents.get(indx), this).setVisible(true);
1546        }
1547        else//editing existing incident
1548        {
1549            //adjust incident color
1550            script.incidents.get(oldIncidentIndex).color = selectedColor;
1551            //adjust incident name
1552            script.incidents.get(oldIncidentIndex).name = addIncidentName.getText();
1553            //adjust incident description
1554            script.incidents.get(oldIncidentIndex).description = addIncidentDescription.getText();
1555            //change offset of incident
1556            script.incidents.get(oldIncidentIndex).setOffset(((int) addIncidentStart.getValue()) * 60);
1557            //update incident number, if it was changed
1558            if ((int) addIncidentNumber.getValue() == script.incidents.get(oldIncidentIndex).number
1559                    || !scriptContainsLogNum(script, (int) addIncidentNumber.getValue()))
1560            {
1561                script.incidents.get(oldIncidentIndex).number = (int) addIncidentNumber.getValue();
1562            }
1563            else//if the updated value conflicts with an existing inc number,
1564            //the inc number update fails
1565            {
1566                JOptionPane.showMessageDialog(this, "Incident number already in use.",
1567                        "Unable To Alter Incident Detail", JOptionPane.ERROR_MESSAGE);
1568            }
1569        }
1570
1571        //close this frame
1572        incidentFrame.setVisible(false);
1573        this.update(script, script);
1574        repaint();
1575    }//GEN-LAST:event_incidentOkButtonActionPerformed
1576
1577    /**
1578     * Determine if the given incident number is already present in the script.
1579     *
1580     * @param script the current simulation script
1581     * @param num the incident log number to check
1582     * @return true if one of the existing incidents in the script uses that log
1583     * number
1584     */
1585    private boolean scriptContainsLogNum(SimulationScript script, int num)
1586    {
1587        for (ScriptIncident incident : script.incidents)
1588        {
1589            if (incident != null && incident.number == num)
1590            {
1591                return true;
1592            }
1593        }
1594        return false;
1595    }
1596
1597    /**
1598     * Closes editor window upon click of cancel button.
1599     *
1600     * @param evt the button press event
1601     */
1602    private void incidentCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_incidentCancelButtonActionPerformed
1603        incidentFrame.setVisible(false);
1604    }//GEN-LAST:event_incidentCancelButtonActionPerformed
1605
1606    /**
1607     * Opens incident editor window and preps for addition of new incident, upon
1608     * click of "New Incident" menu option.
1609     *
1610     * @param evt the button press event
1611     */
1612    private void newIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newIncidentActionPerformed
1613        editingIncident = false;
1614
1615        addIncidentName.setText("");
1616       
1617        int newLogNum = 100;
1618        boolean found = false;
1619        while (!found)
1620        {
1621            newLogNum++;
1622            if (!scriptContainsLogNum(script, newLogNum))
1623            {
1624                found = true;
1625                for (ScriptIncident incident : script.incidents)
1626                {
1627                    if (incident != null && incident.number == newLogNum)
1628                    {
1629                        found = false;
1630                    }
1631                }
1632            }
1633        } 
1634       
1635        addIncidentNumber.setValue(newLogNum);
1636        addIncidentStart.setValue(0);
1637        txtIncidentLength.setText("0");
1638        incidentColorField.setBackground(Color.BLACK);
1639        selectedColor = Color.BLACK;
1640        addIncidentDescription.setText("");
1641
1642        incidentFrame.setVisible(true);
1643    }//GEN-LAST:event_newIncidentActionPerformed
1644
1645    private void fileMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileMenuActionPerformed
1646    }//GEN-LAST:event_fileMenuActionPerformed
1647
1648    /**
1649     * Upon click of "Open file" menu option, opens a window to load a new .sim
1650     * file.
1651     *
1652     * @param evt the button press event
1653     */
1654    private void fileOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileOpenActionPerformed
1655        JFileChooser fc = new JFileChooser();
1656
1657        //Search for .xml files
1658        fc.setFileFilter(new ExtensionFileFilter("Simulation Script XML (.xml)",
1659                new String[]
1660                {
1661                    "xml"
1662                }));
1663        if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
1664        {
1665            //make a new script and load it with values from the selected file
1666            script = new SimulationScript();
1667            script.loadScriptFromFile(fc.getSelectedFile());
1668            script.saveFile = fc.getSelectedFile();
1669        }
1670        this.update(script, script);
1671        //zoom out all the way so that the whole imported script is visible
1672        zoomSlider.setValue(zoomSlider.getMinimum());
1673        repaint();
1674    }//GEN-LAST:event_fileOpenActionPerformed
1675
1676    /**
1677     * Upon click of "Save as" menu option, opens a window to choose a .sim file
1678     * to save this as.
1679     *
1680     * @param evt the button press event
1681     */
1682    private void fileSaveAsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSaveAsActionPerformed
1683        JFileChooser fc = new JFileChooser();
1684
1685        fc.setFileFilter(new ExtensionFileFilter("Simulation Script XML (.xml)",
1686                new String[]
1687                {
1688                    "xml"
1689                }));
1690
1691        if (fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
1692        {
1693            script.saveScriptToFile(fc.getSelectedFile());
1694            script.saveFile = fc.getSelectedFile();
1695        }
1696    }//GEN-LAST:event_fileSaveAsActionPerformed
1697
1698    /**
1699     * Upon click of "Save" menu option, opens a window to choose a .sim file to
1700     * save this as.
1701     *
1702     * @param evt the button press event
1703     */
1704    private void fileSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSaveActionPerformed
1705        //If the script has never been saved before, we need to name or create a
1706        //file in which to save it
1707        if (script.saveFile == null)
1708        {
1709            fileSaveAsActionPerformed(evt);
1710        }
1711        //Otherwise, just save to the previously selected save spot
1712        else
1713        {
1714            script.saveScriptToFile(script.saveFile);
1715        }
1716    }//GEN-LAST:event_fileSaveActionPerformed
1717
1718    /**
1719     * Allow this window to refresh itself, after a different window loses
1720     * focus.
1721     */
1722    public void returnFocus()
1723    {
1724        zoomSlider.setValue(zoomSlider.getMinimum());
1725        zoomSliderStateChanged(new ChangeEvent(script));
1726    }
1727
1728    /**
1729     * Set up the incident details/properties window so that it reflects the
1730     * values of the selected incident. Then, make the window visible.
1731     *
1732     * @param i the incident to be represented by this details window
1733     */
1734    public void incidentDetailsScreen(ScriptIncident i)
1735    {
1736        editingIncident = true;
1737        oldIncidentIndex = script.incidents.indexOf(i);
1738
1739        addIncidentName.setText(i.name);
1740        addIncidentNumber.setValue(i.number);
1741        addIncidentStart.setValue(i.offset / 60);
1742        txtIncidentLength.setText("" + (i.length / 60));
1743        txtIncidentLength.setHorizontalTextPosition(SwingConstants.RIGHT);
1744        //addIncidentLength.setValue(i.length / 60);
1745        incidentColorField.setBackground(i.color);
1746        selectedColor = i.color;
1747        addIncidentDescription.setText(i.description);
1748
1749        incidentFrame.setVisible(true);
1750    }
1751
1752    /**
1753     * Brings up the noise generation screen upon click of the "Generate Noise"
1754     * menu option.
1755     *
1756     * @param evt the button press event
1757     */
1758    private void generateNoiseOptionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateNoiseOptionActionPerformed
1759        addNoiseFrame.setVisible(true);
1760    }//GEN-LAST:event_generateNoiseOptionActionPerformed
1761
1762    /**
1763     * Hides the noise generation screen upon click of the "Cancel" button.
1764     *
1765     * @param evt the button press event
1766     */
1767    private void btnCancelNoiseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelNoiseActionPerformed
1768        addNoiseFrame.setVisible(false);
1769    }//GEN-LAST:event_btnCancelNoiseActionPerformed
1770
1771    /**
1772     * Generates random noise upon click of the "Generate" button, then hides
1773     * the noise generation screen.
1774     *
1775     * @param evt the button press event
1776     */
1777    private void btnGenerateNoiseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGenerateNoiseActionPerformed
1778        Random rng = new Random();
1779        ScriptEventType[] eventTypes = ScriptEventType.values();
1780
1781        /* For prototyping purpose, ignore the sliders and average their values */
1782        int total = radioChatterSlider.getValue() + laneClosuresSlider.getValue() + TMCALSlider.getValue() + minorEventsSlider.getValue() + backgroundNoiseSlider.getValue();
1783        total /= 5;
1784
1785        for (int i = 0; i < script.incidents.get(9).slices.size(); i++)
1786        {
1787            script.incidents.get(9).slices.get(i).events.clear();
1788        }
1789
1790        for (int i = 0; i < total; i++)
1791        {
1792            int n = rng.nextInt();
1793            int s = rng.nextInt();
1794            int e = rng.nextInt();
1795            if (n < 0)
1796            {
1797                n *= -1;
1798            }
1799            if (s < 0)
1800            {
1801                s *= -1;
1802            }
1803            if (e < 0)
1804            {
1805                e *= -1;
1806            }
1807
1808            script.incidents.get(9).slices.get(s % (script.incidents.get(9).slices.size())).addEvent(ScriptEvent.factoryByType(eventTypes[e % eventTypes.length]));
1809        }
1810
1811        addNoiseFrame.setVisible(false);
1812
1813        this.update(script, script);
1814        repaint();
1815}//GEN-LAST:event_btnGenerateNoiseActionPerformed
1816
1817    /**
1818     * Allow the user to pick an incident from a dropdown, then save it to an
1819     * XML file.
1820     *
1821     * @param evt the button press event
1822     */
1823    private void saveIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveIncidentActionPerformed
1824        Object[] incidentList = script.incidents.toArray();
1825        String input = "";
1826        ScriptIncident inc = null;
1827
1828        //Pick the incident to save
1829        Object result = JOptionPane.showInputDialog(
1830                this,
1831                "Select Incident:",
1832                "Save Incident",
1833                JOptionPane.PLAIN_MESSAGE,
1834                null,
1835                incidentList,
1836                script.incidents.get(0));
1837        input = result.toString();
1838        int i = 0;
1839        for (ScriptIncident incident : script.incidents)
1840        {
1841            if (incident == null)
1842            {
1843                continue;
1844            }
1845            if (incident.toString().equals(input))
1846            {
1847                inc = incident;
1848            }
1849        }
1850
1851        if (inc == null)
1852        {
1853            return;
1854        }
1855
1856        //Pick the file to save it to
1857        JFileChooser fc = new JFileChooser();
1858        fc.setFileFilter(new ExtensionFileFilter("Script Incident (.xml)", new String[]
1859        {
1860            "xml"
1861        }));
1862        if (fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
1863        {
1864            inc.saveIncidentToFile(fc.getSelectedFile());
1865        }
1866    }//GEN-LAST:event_saveIncidentActionPerformed
1867
1868    /**
1869     * Bring up the incident palette for loading of new incidents.
1870     *
1871     * @param evt the menu click event
1872     */
1873    private void loadIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadIncidentActionPerformed
1874        new IncidentPaletteFrame(script, this).setVisible(true);
1875        zoomSlider.setValue(zoomSlider.getMinimum());
1876    }//GEN-LAST:event_loadIncidentActionPerformed
1877
1878    //Unsupported as of 2017/09/05
1879    private void generateProjectRequirementsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateProjectRequirementsActionPerformed
1880        JFileChooser fc = new JFileChooser();
1881        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1882        {
1883            "pdf"
1884        }));
1885        fc.setSelectedFile(new File("Requirements.pdf"));
1886        fc.showSaveDialog(this);
1887    }//GEN-LAST:event_generateProjectRequirementsActionPerformed
1888
1889    //Unsupported as of 2017/09/05
1890    private void generateNotebooksActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateNotebooksActionPerformed
1891        JFileChooser fc = new JFileChooser();
1892        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1893        {
1894            "pdf"
1895        }));
1896        fc.setSelectedFile(new File("Notebooks.pdf"));
1897        fc.showSaveDialog(this);
1898    }//GEN-LAST:event_generateNotebooksActionPerformed
1899
1900    //Unsupported as of 2017/09/05
1901    private void generateScorecardsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateScorecardsActionPerformed
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("Scorecards.pdf"));
1908        fc.showSaveDialog(this);
1909    }//GEN-LAST:event_generateScorecardsActionPerformed
1910
1911    //Unsupported as of 2017/09/05
1912    private void generateOrganizationChartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateOrganizationChartActionPerformed
1913        JFileChooser fc = new JFileChooser();
1914        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1915        {
1916            "pdf"
1917        }));
1918        fc.setSelectedFile(new File("OrganizationChart.pdf"));
1919        fc.showSaveDialog(this);
1920    }//GEN-LAST:event_generateOrganizationChartActionPerformed
1921
1922    /**
1923     * Increases zoom level upon click of the "Zoom in" icon.
1924     *
1925     * @param evt the mouse event
1926     */
1927    private void zoomInIconMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_zoomInIconMouseClicked
1928        if (script != null && script.numberOfIncidents > 0)
1929        {
1930            zoomSlider.setValue(zoomSlider.getValue() >= 22 ? 22 : zoomSlider.getValue() + 1);
1931        }
1932    }//GEN-LAST:event_zoomInIconMouseClicked
1933
1934    /**
1935     * Decreases zoom level upon click of the "Zoom out" icon.
1936     *
1937     * @param evt the mouse event
1938     */
1939    private void zoomOutIconMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_zoomOutIconMouseClicked
1940        if (script != null && script.numberOfIncidents > 0)
1941        {
1942            zoomSlider.setValue(zoomSlider.getValue() <= 4 ? 4 : zoomSlider.getValue() - 1);
1943        }
1944    }//GEN-LAST:event_zoomOutIconMouseClicked
1945    private Color selectedColor = Color.BLACK;
1946
1947    private void btnChooseColorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnChooseColorActionPerformed
1948        //For whatever reason, this causes the incident properties frame to be hidden
1949        Color newColor = incidentColorChooser.showDialog(this, "Incident Color", incidentColorField.getBackground());
1950        if (newColor != null)
1951        {
1952            //If the user selected a color, apply it to the properties frame
1953            selectedColor = newColor;
1954            incidentColorField.setBackground(newColor);
1955        }
1956        //Return focus to the properties frame
1957        incidentFrame.setVisible(true);
1958    }//GEN-LAST:event_btnChooseColorActionPerformed
1959
1960    /* Help > About simply displays the current SVN revision number so
1961     * the user can determine which version of the source code was used to
1962     * build the executable she is running.
1963     */
1964    private void helpAboutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_helpAboutActionPerformed
1965    {//GEN-HEADEREND:event_helpAboutActionPerformed
1966        JOptionPane.showMessageDialog(rootPane, "Revision: " + getAppVersion(), "About", JOptionPane.INFORMATION_MESSAGE);
1967    }//GEN-LAST:event_helpAboutActionPerformed
1968
1969    /**
1970     * Replaces the current script with a new, blank script.
1971     *
1972     * @param evt the menu selection event
1973     */
1974    private void fileNewActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_fileNewActionPerformed
1975    {//GEN-HEADEREND:event_fileNewActionPerformed
1976        script = new SimulationScript();
1977        script.update();
1978        this.update(null, script);
1979        repaint();
1980    }//GEN-LAST:event_fileNewActionPerformed
1981
1982    /**
1983     * Allows the user to delete an incident from the current script.
1984     *
1985     * @param evt the menu selection event
1986     */
1987    private void deleteIncidentActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_deleteIncidentActionPerformed
1988    {//GEN-HEADEREND:event_deleteIncidentActionPerformed
1989        Object[] incidentList = script.incidents.toArray();
1990        String input = "";
1991        ScriptIncident inc = null;
1992        //Choose the incident to be deleted
1993        Object result = JOptionPane.showInputDialog(
1994                this,
1995                "Select Incident:",
1996                "Delete Incident",
1997                JOptionPane.PLAIN_MESSAGE,
1998                null,
1999                incidentList,
2000                script.incidents.get(0));
2001
2002        if (result != null)
2003        {
2004            input = result.toString();
2005            for (ScriptIncident incident : script.incidents)
2006            {
2007                if (incident == null)
2008                {
2009                    continue;
2010                }
2011                if (incident.toString().equals(input))
2012                {
2013                    inc = incident;
2014                }
2015            }
2016
2017            //Allow user to verify deletion before proceeding
2018            if (inc != null)
2019            {
2020                int confirm = JOptionPane.showConfirmDialog(this,
2021                        "Are you sure you want to delete " + inc.toString() + "?");
2022                if (confirm == JOptionPane.YES_OPTION)
2023                {
2024                    //Remove the incident and replace it with a null placeholder
2025                    script.incidents.remove(inc);
2026                    script.incidents.add(null);
2027                    script.numberOfIncidents--;
2028                }
2029            }
2030        }
2031        //Refresh
2032        this.update(script, script);
2033        repaint();
2034    }//GEN-LAST:event_deleteIncidentActionPerformed
2035    /**
2036     * Add 15 minutes to the end of the visible timeline.
2037     *
2038     * @param evt the button press event.
2039     */
2040    private void btnAddTimeActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnAddTimeActionPerformed
2041    {//GEN-HEADEREND:event_btnAddTimeActionPerformed
2042        IncidentTimelinePanel.requestedScriptBuilderFillerTime += IncidentTimelinePanel.FILLER_INTERVAL_SECONDS;
2043        this.update(script, script);
2044    }//GEN-LAST:event_btnAddTimeActionPerformed
2045
2046    private void cadEventActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cadEventActionPerformed
2047    {//GEN-HEADEREND:event_cadEventActionPerformed
2048        // TODO add your handling code here:
2049    }//GEN-LAST:event_cadEventActionPerformed
2050
2051    /**
2052     * Read the version number from the application properties. The file
2053     * 'application.properties' is generated by build.xml.
2054     *
2055     * @return a version string obtained from application.properties file, or
2056     * "Version: unknown" if an IOerror prevents us from reading the file.
2057     */
2058    private String getAppVersion()
2059    {
2060        String propfilename = "/scriptbuilder/gui/application.properties";
2061        String propKey = "Application.revision";
2062        String version = "unknown";
2063        // Load the application properties (created by build.xml)
2064        try
2065        {
2066            Properties props = new Properties();
2067            props.load(this.getClass().getResourceAsStream(propfilename));
2068            version = (String) props.get(propKey);
2069        }
2070        catch (IOException ex)
2071        {
2072            Logger.getLogger("scriptbuilder.gui").log(Level.SEVERE,
2073                    "ScriptBuilderFrame.getAppVersion()."
2074                    + " IOError reading " + propfilename);
2075        }
2076        catch (NullPointerException npe)
2077        {
2078            Logger.getLogger("scriptbuilder.gui").log(Level.SEVERE,
2079                    "ScriptBuilderFrame.getAppVersion().load."
2080                    + " Missing file: " + propfilename);
2081        }
2082        return version;
2083    }
2084
2085    /**
2086     * Runs the script builder. This is the main method for the whole program.
2087     *
2088     * @param args the command line arguments
2089     */
2090    public static void main(String args[])
2091    {
2092        try
2093        {
2094            UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
2095        }
2096        catch (Exception ex)
2097        {
2098            //Apparently we don't do any special exception processing
2099        }
2100
2101        try
2102        {
2103            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
2104        }
2105        catch (Exception ex)
2106        {
2107            //Apparently we don't do any special exception processing
2108        }
2109
2110        java.awt.EventQueue.invokeLater(
2111                new Runnable()
2112                {
2113                    public void run()
2114                    {
2115                        new ScriptBuilderFrame().setVisible(true);
2116                    }
2117                });
2118    }
2119    // Variables declaration - do not modify//GEN-BEGIN:variables
2120    private javax.swing.JSlider TMCALSlider;
2121    private javax.swing.JTextArea addIncidentDescription;
2122    private javax.swing.JTextField addIncidentName;
2123    private javax.swing.JSpinner addIncidentNumber;
2124    private javax.swing.JSpinner addIncidentStart;
2125    private javax.swing.JFrame addNoiseFrame;
2126    private javax.swing.JSlider backgroundNoiseSlider;
2127    private javax.swing.JButton btnAddTime;
2128    private javax.swing.JButton btnCancelNoise;
2129    private javax.swing.JButton btnChooseColor;
2130    private javax.swing.JButton btnGenerateNoise;
2131    private javax.swing.JMenuItem cadEvent;
2132    private javax.swing.JFrame cadEventFrame;
2133    private javax.swing.JButton cancelButton;
2134    private javax.swing.JMenuItem deleteEventList;
2135    private javax.swing.JMenuItem deleteIncident;
2136    private javax.swing.JMenuItem editEventList;
2137    private javax.swing.JPopupMenu eventListPopupMenu;
2138    private javax.swing.JPopupMenu eventPopupMenu;
2139    private javax.swing.JMenu fileMenu;
2140    private javax.swing.JMenuItem fileNew;
2141    private javax.swing.JMenuItem fileOpen;
2142    private javax.swing.JMenuItem fileSave;
2143    private javax.swing.JMenuItem fileSaveAs;
2144    private javax.swing.JMenu generateMenu;
2145    private javax.swing.JMenu generateNoiseMenu;
2146    private javax.swing.JMenuItem generateNoiseOption;
2147    private javax.swing.JMenuItem generateNotebooks;
2148    private javax.swing.JMenuItem generateOrganizationChart;
2149    private javax.swing.JMenuItem generateProjectRequirements;
2150    private javax.swing.JMenuItem generateScorecards;
2151    private javax.swing.JMenuItem helpAbout;
2152    private javax.swing.JMenu helpMenu;
2153    private javax.swing.JMenuItem helpTutorial;
2154    private javax.swing.JButton incidentCancelButton;
2155    private javax.swing.JColorChooser incidentColorChooser;
2156    private javax.swing.JTextField incidentColorField;
2157    private javax.swing.JFrame incidentFrame;
2158    private javax.swing.JMenu incidentMenu;
2159    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel1;
2160    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel10;
2161    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel2;
2162    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel3;
2163    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel4;
2164    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel5;
2165    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel6;
2166    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel7;
2167    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel8;
2168    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel9;
2169    private javax.swing.JButton incidentOkButton;
2170    private javax.swing.JPopupMenu incidentPopupMenu;
2171    private javax.swing.JScrollPane incidentPropertiesScrollPane;
2172    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel1;
2173    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel10;
2174    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel2;
2175    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel3;
2176    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel4;
2177    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel5;
2178    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel6;
2179    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel7;
2180    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel8;
2181    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel9;
2182    private javax.swing.JMenuItem jMenuItem2;
2183    private javax.swing.JMenuItem jMenuItem3;
2184    private javax.swing.JMenuItem jMenuItem4;
2185    private javax.swing.JMenuItem jMenuItem5;
2186    private javax.swing.JMenuItem jMenuItem6;
2187    private javax.swing.JPopupMenu.Separator jSeparator1;
2188    private javax.swing.JPopupMenu.Separator jSeparator2;
2189    private javax.swing.JPopupMenu.Separator jSeparator3;
2190    private javax.swing.JPopupMenu.Separator jSeparator4;
2191    private javax.swing.JLabel labelBackgroundNoise;
2192    private javax.swing.JLabel labelCADEntry;
2193    private javax.swing.JLabel labelIncidentColor;
2194    private javax.swing.JLabel labelIncidentDescription;
2195    private javax.swing.JLabel labelIncidentLength;
2196    private javax.swing.JLabel labelIncidentName;
2197    private javax.swing.JLabel labelIncidentNumber;
2198    private javax.swing.JLabel labelIncidentStart;
2199    private javax.swing.JLabel labelLaneClosures;
2200    private javax.swing.JLabel labelLeastFreq;
2201    private javax.swing.JLabel labelMinorEvents;
2202    private javax.swing.JLabel labelMostFreq;
2203    private javax.swing.JLabel labelRadioChatter;
2204    private javax.swing.JLabel labelRadioMessage;
2205    private javax.swing.JLabel labelRadioType;
2206    private javax.swing.JLabel labelTMCALLogs;
2207    private javax.swing.JSlider laneClosuresSlider;
2208    private javax.swing.JMenuItem loadIncident;
2209    private javax.swing.JSlider minorEventsSlider;
2210    private javax.swing.JMenuItem newIncident;
2211    private javax.swing.JButton okButton;
2212    private javax.swing.JMenuItem popupDeleteIncident;
2213    private javax.swing.JSlider radioChatterSlider;
2214    private javax.swing.JMenuItem radioEvent;
2215    private javax.swing.JFrame radioEventFrame;
2216    private javax.swing.JTextArea radioMessage;
2217    private javax.swing.JScrollPane radioMessageScrollPane;
2218    private javax.swing.JComboBox radioTypeComboBox;
2219    private javax.swing.JMenuItem saveIncident;
2220    private javax.swing.JMenuBar scriptBuilderMenuBar;
2221    private scriptbuilder.gui.panels.TimeStampPanel timeStampPanel;
2222    private javax.swing.JScrollPane timeStampScrollPane;
2223    private scriptbuilder.gui.panels.TimelineTickPanel timelineTickPanel;
2224    private javax.swing.JScrollPane timelinesScrollPane;
2225    private javax.swing.JLabel txtIncidentLength;
2226    private javax.swing.JTextArea txtNoiseDescription;
2227    private javax.swing.JLabel zoomInIcon;
2228    private javax.swing.JLabel zoomOutIcon;
2229    private javax.swing.JSlider zoomSlider;
2230    // End of variables declaration//GEN-END:variables
2231}
Note: See TracBrowser for help on using the repository browser.