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

Revision 112, 108.7 KB checked in by bmcguffin, 9 years ago (diff)

Changed newIncidentActionPerformed() method to find the lowest new incident number not currently used and default to that value.

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