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

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

Redesigned the method by which the first event in an event is added to relative time 00:00:00.

Added a second timestamp panel to the incident editor screen, which displays absolute script time in red. The original timestamp panel displays time relative to the start of the incident, in black.

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