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

Revision 123, 108.9 KB checked in by bmcguffin, 9 years ago (diff)

Fixed a bug in saveIncidentActionPerformed() which caused a null pointer exception if the user didn't select an incident to save.

Changed the color of the absolute-time TimeStamp? panel to a more neutral color.

Added "Script:" and "Incident:" labels at the beginning of the absolute-time and relative-time TimeStamp? panels, respectively.

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            IncidentEditorFrame editor = new IncidentEditorFrame(script.incidents.get(indx), this);
1546
1547            editor.setVisible(true);
1548        }
1549        else//editing existing incident
1550        {
1551            //adjust incident color
1552            script.incidents.get(oldIncidentIndex).color = selectedColor;
1553            //adjust incident name
1554            script.incidents.get(oldIncidentIndex).name = addIncidentName.getText();
1555            //adjust incident description
1556            script.incidents.get(oldIncidentIndex).description = addIncidentDescription.getText();
1557            //change offset of incident
1558            script.incidents.get(oldIncidentIndex).setOffset(((int) addIncidentStart.getValue()) * 60);
1559            //update incident number, if it was changed
1560            if ((int) addIncidentNumber.getValue() == script.incidents.get(oldIncidentIndex).number
1561                    || !scriptContainsLogNum(script, (int) addIncidentNumber.getValue()))
1562            {
1563                script.incidents.get(oldIncidentIndex).number = (int) addIncidentNumber.getValue();
1564            }
1565            else//if the updated value conflicts with an existing inc number,
1566            //the inc number update fails
1567            {
1568                JOptionPane.showMessageDialog(this, "Incident number already in use.",
1569                        "Unable To Alter Incident Detail", JOptionPane.ERROR_MESSAGE);
1570            }
1571        }
1572
1573        //close this frame
1574        incidentFrame.setVisible(false);
1575        this.update(script, script);
1576        repaint();
1577    }//GEN-LAST:event_incidentOkButtonActionPerformed
1578
1579    /**
1580     * Determine if the given incident number is already present in the script.
1581     *
1582     * @param script the current simulation script
1583     * @param num the incident log number to check
1584     * @return true if one of the existing incidents in the script uses that log
1585     * number
1586     */
1587    private boolean scriptContainsLogNum(SimulationScript script, int num)
1588    {
1589        for (ScriptIncident incident : script.incidents)
1590        {
1591            if (incident != null && incident.number == num)
1592            {
1593                return true;
1594            }
1595        }
1596        return false;
1597    }
1598
1599    /**
1600     * Closes editor window upon click of cancel button.
1601     *
1602     * @param evt the button press event
1603     */
1604    private void incidentCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_incidentCancelButtonActionPerformed
1605        incidentFrame.setVisible(false);
1606    }//GEN-LAST:event_incidentCancelButtonActionPerformed
1607
1608    /**
1609     * Opens incident editor window and preps for addition of new incident, upon
1610     * click of "New Incident" menu option.
1611     *
1612     * @param evt the button press event
1613     */
1614    private void newIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newIncidentActionPerformed
1615        editingIncident = false;
1616
1617        addIncidentName.setText("");
1618
1619        int newLogNum = 100;
1620        boolean found = false;
1621        while (!found)
1622        {
1623            newLogNum++;
1624            if (!scriptContainsLogNum(script, newLogNum))
1625            {
1626                found = true;
1627                for (ScriptIncident incident : script.incidents)
1628                {
1629                    if (incident != null && incident.number == newLogNum)
1630                    {
1631                        found = false;
1632                    }
1633                }
1634            }
1635        }
1636
1637        addIncidentNumber.setValue(newLogNum);
1638        addIncidentStart.setValue(0);
1639        txtIncidentLength.setText("0");
1640        incidentColorField.setBackground(Color.BLACK);
1641        selectedColor = Color.BLACK;
1642        addIncidentDescription.setText("");
1643
1644        incidentFrame.setVisible(true);
1645    }//GEN-LAST:event_newIncidentActionPerformed
1646
1647    private void fileMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileMenuActionPerformed
1648    }//GEN-LAST:event_fileMenuActionPerformed
1649
1650    /**
1651     * Upon click of "Open file" menu option, opens a window to load a new .sim
1652     * file.
1653     *
1654     * @param evt the button press event
1655     */
1656    private void fileOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileOpenActionPerformed
1657        JFileChooser fc = new JFileChooser();
1658
1659        //Search for .xml files
1660        fc.setFileFilter(new ExtensionFileFilter("Simulation Script XML (.xml)",
1661                new String[]
1662                {
1663                    "xml"
1664                }));
1665        if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
1666        {
1667            //make a new script and load it with values from the selected file
1668            script = new SimulationScript();
1669            script.loadScriptFromFile(fc.getSelectedFile());
1670            script.saveFile = fc.getSelectedFile();
1671        }
1672        this.update(script, script);
1673        //zoom out all the way so that the whole imported script is visible
1674        zoomSlider.setValue(zoomSlider.getMinimum());
1675        repaint();
1676    }//GEN-LAST:event_fileOpenActionPerformed
1677
1678    /**
1679     * Upon click of "Save as" menu option, opens a window to choose a .sim file
1680     * to save this as.
1681     *
1682     * @param evt the button press event
1683     */
1684    private void fileSaveAsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSaveAsActionPerformed
1685        JFileChooser fc = new JFileChooser();
1686
1687        fc.setFileFilter(new ExtensionFileFilter("Simulation Script XML (.xml)",
1688                new String[]
1689                {
1690                    "xml"
1691                }));
1692
1693        if (fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
1694        {
1695            script.saveScriptToFile(fc.getSelectedFile());
1696            script.saveFile = fc.getSelectedFile();
1697        }
1698    }//GEN-LAST:event_fileSaveAsActionPerformed
1699
1700    /**
1701     * Upon click of "Save" menu option, opens a window to choose a .sim file to
1702     * save this as.
1703     *
1704     * @param evt the button press event
1705     */
1706    private void fileSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSaveActionPerformed
1707        //If the script has never been saved before, we need to name or create a
1708        //file in which to save it
1709        if (script.saveFile == null)
1710        {
1711            fileSaveAsActionPerformed(evt);
1712        }
1713        //Otherwise, just save to the previously selected save spot
1714        else
1715        {
1716            script.saveScriptToFile(script.saveFile);
1717        }
1718    }//GEN-LAST:event_fileSaveActionPerformed
1719
1720    /**
1721     * Allow this window to refresh itself, after a different window loses
1722     * focus.
1723     */
1724    public void returnFocus()
1725    {
1726        zoomSlider.setValue(zoomSlider.getMinimum());
1727        zoomSliderStateChanged(new ChangeEvent(script));
1728    }
1729
1730    /**
1731     * Set up the incident details/properties window so that it reflects the
1732     * values of the selected incident. Then, make the window visible.
1733     *
1734     * @param i the incident to be represented by this details window
1735     */
1736    public void incidentDetailsScreen(ScriptIncident i)
1737    {
1738        editingIncident = true;
1739        oldIncidentIndex = script.incidents.indexOf(i);
1740
1741        addIncidentName.setText(i.name);
1742        addIncidentNumber.setValue(i.number);
1743        addIncidentStart.setValue(i.offset / 60);
1744        txtIncidentLength.setText("" + (i.length / 60));
1745        txtIncidentLength.setHorizontalTextPosition(SwingConstants.RIGHT);
1746        //addIncidentLength.setValue(i.length / 60);
1747        incidentColorField.setBackground(i.color);
1748        selectedColor = i.color;
1749        addIncidentDescription.setText(i.description);
1750
1751        incidentFrame.setVisible(true);
1752    }
1753
1754    /**
1755     * Brings up the noise generation screen upon click of the "Generate Noise"
1756     * menu option.
1757     *
1758     * @param evt the button press event
1759     */
1760    private void generateNoiseOptionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateNoiseOptionActionPerformed
1761        addNoiseFrame.setVisible(true);
1762    }//GEN-LAST:event_generateNoiseOptionActionPerformed
1763
1764    /**
1765     * Hides the noise generation screen upon click of the "Cancel" button.
1766     *
1767     * @param evt the button press event
1768     */
1769    private void btnCancelNoiseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelNoiseActionPerformed
1770        addNoiseFrame.setVisible(false);
1771    }//GEN-LAST:event_btnCancelNoiseActionPerformed
1772
1773    /**
1774     * Generates random noise upon click of the "Generate" button, then hides
1775     * the noise generation screen.
1776     *
1777     * @param evt the button press event
1778     */
1779    private void btnGenerateNoiseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGenerateNoiseActionPerformed
1780        Random rng = new Random();
1781        ScriptEventType[] eventTypes = ScriptEventType.values();
1782
1783        /* For prototyping purpose, ignore the sliders and average their values */
1784        int total = radioChatterSlider.getValue() + laneClosuresSlider.getValue() + TMCALSlider.getValue() + minorEventsSlider.getValue() + backgroundNoiseSlider.getValue();
1785        total /= 5;
1786
1787        for (int i = 0; i < script.incidents.get(9).slices.size(); i++)
1788        {
1789            script.incidents.get(9).slices.get(i).events.clear();
1790        }
1791
1792        for (int i = 0; i < total; i++)
1793        {
1794            int n = rng.nextInt();
1795            int s = rng.nextInt();
1796            int e = rng.nextInt();
1797            if (n < 0)
1798            {
1799                n *= -1;
1800            }
1801            if (s < 0)
1802            {
1803                s *= -1;
1804            }
1805            if (e < 0)
1806            {
1807                e *= -1;
1808            }
1809
1810            script.incidents.get(9).slices.get(s % (script.incidents.get(9).slices.size())).addEvent(ScriptEvent.factoryByType(eventTypes[e % eventTypes.length]));
1811        }
1812
1813        addNoiseFrame.setVisible(false);
1814
1815        this.update(script, script);
1816        repaint();
1817}//GEN-LAST:event_btnGenerateNoiseActionPerformed
1818
1819    /**
1820     * Allow the user to pick an incident from a dropdown, then save it to an
1821     * XML file.
1822     *
1823     * @param evt the button press event
1824     */
1825    private void saveIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveIncidentActionPerformed
1826        Object[] incidentList = script.incidents.toArray();
1827        String input = "";
1828        ScriptIncident inc = null;
1829
1830        //Pick the incident to save
1831        Object result = JOptionPane.showInputDialog(
1832                this,
1833                "Select Incident:",
1834                "Save Incident",
1835                JOptionPane.PLAIN_MESSAGE,
1836                null,
1837                incidentList,
1838                script.incidents.get(0));
1839        if (result == null)
1840        {
1841            return;
1842        }
1843        input = result.toString();
1844        int i = 0;
1845        for (ScriptIncident incident : script.incidents)
1846        {
1847            if (incident == null)
1848            {
1849                continue;
1850            }
1851            if (incident.toString().equals(input))
1852            {
1853                inc = incident;
1854            }
1855        }
1856
1857        if (inc == null)
1858        {
1859            return;
1860        }
1861
1862        //Pick the file to save it to
1863        JFileChooser fc = new JFileChooser();
1864        fc.setFileFilter(new ExtensionFileFilter("Script Incident (.xml)", new String[]
1865        {
1866            "xml"
1867        }));
1868        if (fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
1869        {
1870            inc.saveIncidentToFile(fc.getSelectedFile());
1871        }
1872    }//GEN-LAST:event_saveIncidentActionPerformed
1873
1874    /**
1875     * Bring up the incident palette for loading of new incidents.
1876     *
1877     * @param evt the menu click event
1878     */
1879    private void loadIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadIncidentActionPerformed
1880        new IncidentPaletteFrame(script, this).setVisible(true);
1881        zoomSlider.setValue(zoomSlider.getMinimum());
1882    }//GEN-LAST:event_loadIncidentActionPerformed
1883
1884    //Unsupported as of 2017/09/05
1885    private void generateProjectRequirementsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateProjectRequirementsActionPerformed
1886        JFileChooser fc = new JFileChooser();
1887        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1888        {
1889            "pdf"
1890        }));
1891        fc.setSelectedFile(new File("Requirements.pdf"));
1892        fc.showSaveDialog(this);
1893    }//GEN-LAST:event_generateProjectRequirementsActionPerformed
1894
1895    //Unsupported as of 2017/09/05
1896    private void generateNotebooksActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateNotebooksActionPerformed
1897        JFileChooser fc = new JFileChooser();
1898        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1899        {
1900            "pdf"
1901        }));
1902        fc.setSelectedFile(new File("Notebooks.pdf"));
1903        fc.showSaveDialog(this);
1904    }//GEN-LAST:event_generateNotebooksActionPerformed
1905
1906    //Unsupported as of 2017/09/05
1907    private void generateScorecardsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateScorecardsActionPerformed
1908        JFileChooser fc = new JFileChooser();
1909        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1910        {
1911            "pdf"
1912        }));
1913        fc.setSelectedFile(new File("Scorecards.pdf"));
1914        fc.showSaveDialog(this);
1915    }//GEN-LAST:event_generateScorecardsActionPerformed
1916
1917    //Unsupported as of 2017/09/05
1918    private void generateOrganizationChartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateOrganizationChartActionPerformed
1919        JFileChooser fc = new JFileChooser();
1920        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[]
1921        {
1922            "pdf"
1923        }));
1924        fc.setSelectedFile(new File("OrganizationChart.pdf"));
1925        fc.showSaveDialog(this);
1926    }//GEN-LAST:event_generateOrganizationChartActionPerformed
1927
1928    /**
1929     * Increases zoom level upon click of the "Zoom in" icon.
1930     *
1931     * @param evt the mouse event
1932     */
1933    private void zoomInIconMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_zoomInIconMouseClicked
1934        if (script != null && script.numberOfIncidents > 0)
1935        {
1936            zoomSlider.setValue(zoomSlider.getValue() >= 22 ? 22 : zoomSlider.getValue() + 1);
1937        }
1938    }//GEN-LAST:event_zoomInIconMouseClicked
1939
1940    /**
1941     * Decreases zoom level upon click of the "Zoom out" icon.
1942     *
1943     * @param evt the mouse event
1944     */
1945    private void zoomOutIconMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_zoomOutIconMouseClicked
1946        if (script != null && script.numberOfIncidents > 0)
1947        {
1948            zoomSlider.setValue(zoomSlider.getValue() <= 4 ? 4 : zoomSlider.getValue() - 1);
1949        }
1950    }//GEN-LAST:event_zoomOutIconMouseClicked
1951    private Color selectedColor = Color.BLACK;
1952
1953    private void btnChooseColorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnChooseColorActionPerformed
1954        //For whatever reason, this causes the incident properties frame to be hidden
1955        Color newColor = incidentColorChooser.showDialog(this, "Incident Color", incidentColorField.getBackground());
1956        if (newColor != null)
1957        {
1958            //If the user selected a color, apply it to the properties frame
1959            selectedColor = newColor;
1960            incidentColorField.setBackground(newColor);
1961        }
1962        //Return focus to the properties frame
1963        incidentFrame.setVisible(true);
1964    }//GEN-LAST:event_btnChooseColorActionPerformed
1965
1966    /* Help > About simply displays the current SVN revision number so
1967     * the user can determine which version of the source code was used to
1968     * build the executable she is running.
1969     */
1970    private void helpAboutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_helpAboutActionPerformed
1971    {//GEN-HEADEREND:event_helpAboutActionPerformed
1972        JOptionPane.showMessageDialog(rootPane, "Revision: " + getAppVersion(), "About", JOptionPane.INFORMATION_MESSAGE);
1973    }//GEN-LAST:event_helpAboutActionPerformed
1974
1975    /**
1976     * Replaces the current script with a new, blank script.
1977     *
1978     * @param evt the menu selection event
1979     */
1980    private void fileNewActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_fileNewActionPerformed
1981    {//GEN-HEADEREND:event_fileNewActionPerformed
1982        script = new SimulationScript();
1983        script.update();
1984        this.update(null, script);
1985        repaint();
1986    }//GEN-LAST:event_fileNewActionPerformed
1987
1988    /**
1989     * Allows the user to delete an incident from the current script.
1990     *
1991     * @param evt the menu selection event
1992     */
1993    private void deleteIncidentActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_deleteIncidentActionPerformed
1994    {//GEN-HEADEREND:event_deleteIncidentActionPerformed
1995        Object[] incidentList = script.incidents.toArray();
1996        String input = "";
1997        ScriptIncident inc = null;
1998        //Choose the incident to be deleted
1999        Object result = JOptionPane.showInputDialog(
2000                this,
2001                "Select Incident:",
2002                "Delete Incident",
2003                JOptionPane.PLAIN_MESSAGE,
2004                null,
2005                incidentList,
2006                script.incidents.get(0));
2007
2008        if (result != null)
2009        {
2010            input = result.toString();
2011            for (ScriptIncident incident : script.incidents)
2012            {
2013                if (incident == null)
2014                {
2015                    continue;
2016                }
2017                if (incident.toString().equals(input))
2018                {
2019                    inc = incident;
2020                }
2021            }
2022
2023            //Allow user to verify deletion before proceeding
2024            if (inc != null)
2025            {
2026                int confirm = JOptionPane.showConfirmDialog(this,
2027                        "Are you sure you want to delete " + inc.toString() + "?");
2028                if (confirm == JOptionPane.YES_OPTION)
2029                {
2030                    //Remove the incident and replace it with a null placeholder
2031                    script.incidents.remove(inc);
2032                    script.incidents.add(null);
2033                    script.numberOfIncidents--;
2034                }
2035            }
2036        }
2037        //Refresh
2038        this.update(script, script);
2039        repaint();
2040    }//GEN-LAST:event_deleteIncidentActionPerformed
2041    /**
2042     * Add 15 minutes to the end of the visible timeline.
2043     *
2044     * @param evt the button press event.
2045     */
2046    private void btnAddTimeActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnAddTimeActionPerformed
2047    {//GEN-HEADEREND:event_btnAddTimeActionPerformed
2048        IncidentTimelinePanel.requestedScriptBuilderFillerTime += IncidentTimelinePanel.FILLER_INTERVAL_SECONDS;
2049        this.update(script, script);
2050    }//GEN-LAST:event_btnAddTimeActionPerformed
2051
2052    private void cadEventActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cadEventActionPerformed
2053    {//GEN-HEADEREND:event_cadEventActionPerformed
2054        // TODO add your handling code here:
2055    }//GEN-LAST:event_cadEventActionPerformed
2056
2057    /**
2058     * Read the version number from the application properties. The file
2059     * 'application.properties' is generated by build.xml.
2060     *
2061     * @return a version string obtained from application.properties file, or
2062     * "Version: unknown" if an IOerror prevents us from reading the file.
2063     */
2064    private String getAppVersion()
2065    {
2066        String propfilename = "/scriptbuilder/gui/application.properties";
2067        String propKey = "Application.revision";
2068        String version = "unknown";
2069        // Load the application properties (created by build.xml)
2070        try
2071        {
2072            Properties props = new Properties();
2073            props.load(this.getClass().getResourceAsStream(propfilename));
2074            version = (String) props.get(propKey);
2075        }
2076        catch (IOException ex)
2077        {
2078            Logger.getLogger("scriptbuilder.gui").log(Level.SEVERE,
2079                    "ScriptBuilderFrame.getAppVersion()."
2080                    + " IOError reading " + propfilename);
2081        }
2082        catch (NullPointerException npe)
2083        {
2084            Logger.getLogger("scriptbuilder.gui").log(Level.SEVERE,
2085                    "ScriptBuilderFrame.getAppVersion().load."
2086                    + " Missing file: " + propfilename);
2087        }
2088        return version;
2089    }
2090
2091    /**
2092     * Runs the script builder. This is the main method for the whole program.
2093     *
2094     * @param args the command line arguments
2095     */
2096    public static void main(String args[])
2097    {
2098        try
2099        {
2100            UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
2101        }
2102        catch (Exception ex)
2103        {
2104            //Apparently we don't do any special exception processing
2105        }
2106
2107        try
2108        {
2109            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
2110        }
2111        catch (Exception ex)
2112        {
2113            //Apparently we don't do any special exception processing
2114        }
2115
2116        java.awt.EventQueue.invokeLater(
2117                new Runnable()
2118                {
2119                    public void run()
2120                    {
2121                        new ScriptBuilderFrame().setVisible(true);
2122                    }
2123                });
2124    }
2125    // Variables declaration - do not modify//GEN-BEGIN:variables
2126    private javax.swing.JSlider TMCALSlider;
2127    private javax.swing.JTextArea addIncidentDescription;
2128    private javax.swing.JTextField addIncidentName;
2129    private javax.swing.JSpinner addIncidentNumber;
2130    private javax.swing.JSpinner addIncidentStart;
2131    private javax.swing.JFrame addNoiseFrame;
2132    private javax.swing.JSlider backgroundNoiseSlider;
2133    private javax.swing.JButton btnAddTime;
2134    private javax.swing.JButton btnCancelNoise;
2135    private javax.swing.JButton btnChooseColor;
2136    private javax.swing.JButton btnGenerateNoise;
2137    private javax.swing.JMenuItem cadEvent;
2138    private javax.swing.JFrame cadEventFrame;
2139    private javax.swing.JButton cancelButton;
2140    private javax.swing.JMenuItem deleteEventList;
2141    private javax.swing.JMenuItem deleteIncident;
2142    private javax.swing.JMenuItem editEventList;
2143    private javax.swing.JPopupMenu eventListPopupMenu;
2144    private javax.swing.JPopupMenu eventPopupMenu;
2145    private javax.swing.JMenu fileMenu;
2146    private javax.swing.JMenuItem fileNew;
2147    private javax.swing.JMenuItem fileOpen;
2148    private javax.swing.JMenuItem fileSave;
2149    private javax.swing.JMenuItem fileSaveAs;
2150    private javax.swing.JMenu generateMenu;
2151    private javax.swing.JMenu generateNoiseMenu;
2152    private javax.swing.JMenuItem generateNoiseOption;
2153    private javax.swing.JMenuItem generateNotebooks;
2154    private javax.swing.JMenuItem generateOrganizationChart;
2155    private javax.swing.JMenuItem generateProjectRequirements;
2156    private javax.swing.JMenuItem generateScorecards;
2157    private javax.swing.JMenuItem helpAbout;
2158    private javax.swing.JMenu helpMenu;
2159    private javax.swing.JMenuItem helpTutorial;
2160    private javax.swing.JButton incidentCancelButton;
2161    private javax.swing.JColorChooser incidentColorChooser;
2162    private javax.swing.JTextField incidentColorField;
2163    private javax.swing.JFrame incidentFrame;
2164    private javax.swing.JMenu incidentMenu;
2165    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel1;
2166    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel10;
2167    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel2;
2168    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel3;
2169    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel4;
2170    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel5;
2171    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel6;
2172    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel7;
2173    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel8;
2174    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel9;
2175    private javax.swing.JButton incidentOkButton;
2176    private javax.swing.JPopupMenu incidentPopupMenu;
2177    private javax.swing.JScrollPane incidentPropertiesScrollPane;
2178    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel1;
2179    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel10;
2180    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel2;
2181    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel3;
2182    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel4;
2183    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel5;
2184    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel6;
2185    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel7;
2186    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel8;
2187    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel9;
2188    private javax.swing.JMenuItem jMenuItem2;
2189    private javax.swing.JMenuItem jMenuItem3;
2190    private javax.swing.JMenuItem jMenuItem4;
2191    private javax.swing.JMenuItem jMenuItem5;
2192    private javax.swing.JMenuItem jMenuItem6;
2193    private javax.swing.JPopupMenu.Separator jSeparator1;
2194    private javax.swing.JPopupMenu.Separator jSeparator2;
2195    private javax.swing.JPopupMenu.Separator jSeparator3;
2196    private javax.swing.JPopupMenu.Separator jSeparator4;
2197    private javax.swing.JLabel labelBackgroundNoise;
2198    private javax.swing.JLabel labelCADEntry;
2199    private javax.swing.JLabel labelIncidentColor;
2200    private javax.swing.JLabel labelIncidentDescription;
2201    private javax.swing.JLabel labelIncidentLength;
2202    private javax.swing.JLabel labelIncidentName;
2203    private javax.swing.JLabel labelIncidentNumber;
2204    private javax.swing.JLabel labelIncidentStart;
2205    private javax.swing.JLabel labelLaneClosures;
2206    private javax.swing.JLabel labelLeastFreq;
2207    private javax.swing.JLabel labelMinorEvents;
2208    private javax.swing.JLabel labelMostFreq;
2209    private javax.swing.JLabel labelRadioChatter;
2210    private javax.swing.JLabel labelRadioMessage;
2211    private javax.swing.JLabel labelRadioType;
2212    private javax.swing.JLabel labelTMCALLogs;
2213    private javax.swing.JSlider laneClosuresSlider;
2214    private javax.swing.JMenuItem loadIncident;
2215    private javax.swing.JSlider minorEventsSlider;
2216    private javax.swing.JMenuItem newIncident;
2217    private javax.swing.JButton okButton;
2218    private javax.swing.JMenuItem popupDeleteIncident;
2219    private javax.swing.JSlider radioChatterSlider;
2220    private javax.swing.JMenuItem radioEvent;
2221    private javax.swing.JFrame radioEventFrame;
2222    private javax.swing.JTextArea radioMessage;
2223    private javax.swing.JScrollPane radioMessageScrollPane;
2224    private javax.swing.JComboBox radioTypeComboBox;
2225    private javax.swing.JMenuItem saveIncident;
2226    private javax.swing.JMenuBar scriptBuilderMenuBar;
2227    private scriptbuilder.gui.panels.TimeStampPanel timeStampPanel;
2228    private javax.swing.JScrollPane timeStampScrollPane;
2229    private scriptbuilder.gui.panels.TimelineTickPanel timelineTickPanel;
2230    private javax.swing.JScrollPane timelinesScrollPane;
2231    private javax.swing.JLabel txtIncidentLength;
2232    private javax.swing.JTextArea txtNoiseDescription;
2233    private javax.swing.JLabel zoomInIcon;
2234    private javax.swing.JLabel zoomOutIcon;
2235    private javax.swing.JSlider zoomSlider;
2236    // End of variables declaration//GEN-END:variables
2237}
Note: See TracBrowser for help on using the repository browser.