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

Revision 100, 108.2 KB checked in by bmcguffin, 9 years ago (diff)

Added statements to disable zoom slider, zoom icons, and add time button if script contains no incidents.

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