Warning: Can't use blame annotator:
svn blame failed on trunk/src/scriptbuilder/gui/IncidentPaletteFrame.java: ("Can't find a temporary directory: Internal error", 20014)

source: tmcsimulator-scriptbuilder/trunk/src/scriptbuilder/gui/IncidentPaletteFrame.java @ 69

Revision 69, 14.9 KB checked in by bmcguffin, 9 years ago (diff)

Updated palette to describe number of incidents currently in script as well as listed in palette.

RevLine 
1/*
2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
5 */
6package scriptbuilder.gui;
7
8import java.awt.GridLayout;
9import java.io.File;
10import java.io.FileFilter;
11import java.text.SimpleDateFormat;
12import java.time.LocalDate;
13import java.util.ArrayList;
14import java.util.Date;
15import java.util.TimeZone;
16import javax.swing.JPanel;
17import javax.swing.JScrollPane;
18import javax.swing.JViewport;
19import scriptbuilder.gui.panels.IncidentPaletteAddPanel;
20import scriptbuilder.structures.*;
21
22/**
23 *
24 * @author Bryan McGuffin
25 */
26public class IncidentPaletteFrame extends javax.swing.JFrame
27{
28
29    private SimulationScript script;
30
31    private SimulationScript dummyScript;
32
33    public ArrayList<ScriptIncident> incidentList;
34
35    JPanel panelAdd;
36
37    private int incidentCount;
38
39    /**
40     * Creates new form IncidentPaletteFrame
41     */
42    public IncidentPaletteFrame(SimulationScript s)
43    {
44        script = s;
45
46        panelAdd = new JPanel();
47
48        dummyScript = new SimulationScript();
49
50        incidentList = new ArrayList<ScriptIncident>();
51
52        incidentCount = 0;
53
54        panelAdd.setLayout(new GridLayout(0, 1));
55
56        initComponents();
57
58        incidentList = loadIncidentsFromFiles("Incidents");
59
60        recalculateList();
61
62    }
63
64    private ArrayList<ScriptIncident> loadIncidentsFromFiles(String directoryName)
65    {
66
67        ArrayList<ScriptIncident> newList = new ArrayList<ScriptIncident>();
68        File folder = new File(directoryName);
69
70        File[] incidentFiles;
71
72        ExtensionFileFilter filter = new ExtensionFileFilter("Script Incident (.xml)", new String[]
73        {
74            "xml"
75        });
76
77        incidentFiles = folder.listFiles();
78
79        for (File file : incidentFiles)
80        {
81            if (filter.accept(file))
82            {
83                dummyScript = new SimulationScript();
84                dummyScript.loadScriptFromFile(file);
85
86                newList.add(dummyScript.incidents.get(0));
87            }
88        }
89
90        return newList;
91    }
92
93    private ArrayList<ScriptIncident> filterIncidentsInScript(ArrayList<ScriptIncident> list)
94    {
95        ArrayList<ScriptIncident> newList = new ArrayList<ScriptIncident>();
96
97        for (ScriptIncident inc : list)
98        {
99            if (!scriptContainsLogNum(script, inc.number))
100            {
101                newList.add(inc);
102            }
103        }
104
105        return newList;
106    }
107
108    private boolean scriptContainsLogNum(SimulationScript script, int num)
109    {
110        for (ScriptIncident incident : script.incidents)
111        {
112            if (incident != null && incident.number == num)
113            {
114                return true;
115            }
116        }
117
118        return false;
119    }
120
121    private void loadPanels(ArrayList<ScriptIncident> incList)
122    {
123        incidentCount = 0;
124        scrollAddPanels.setViewport(new JViewport());
125        panelAdd.removeAll();
126        labelFileCount.setText("Found "+incList.size()+" available incidents.");
127        for (ScriptIncident inc : incList)
128        {
129            ++incidentCount;
130
131            panelAdd.add(new IncidentPaletteAddPanel(inc, this));
132        }
133        scrollAddPanels.getViewport().add(panelAdd);
134    }
135
136    private void recalculateList()
137    {
138
139        incidentList = filterIncidentsInScript(incidentList);
140        loadPanels(incidentList);
141        getCurrentlyLoadedIncidents();
142    }
143
144    public void addIncidentToScript(IncidentPaletteAddPanel incPanel)
145    {
146        if (script.addIncident(incPanel.incident))
147        {
148            recalculateList();
149        }
150    }
151
152    private void getCurrentlyLoadedIncidents()
153    {
154        tableCurrentIncidents.removeAll();
155        int currentRow = 0;
156        for (ScriptIncident inc : script.incidents)
157        {
158            if (inc != null)
159            {
160                SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
161                df.setTimeZone(TimeZone.getTimeZone("GMT"));
162                String incStart = df.format(new Date(inc.offset * 1000));
163                tableCurrentIncidents.getModel().setValueAt(inc.number, currentRow, 0);
164                tableCurrentIncidents.getModel().setValueAt(incStart, currentRow, 1);
165                tableCurrentIncidents.getModel().setValueAt(inc.name, currentRow, 2);
166                currentRow++;
167            }
168        }
169        labelIncidentCount.setText(currentRow + " incidents currently in script.");
170    }
171
172    /**
173     * This method is called from within the constructor to initialize the form.
174     * WARNING: Do NOT modify this code. The content of this method is always
175     * regenerated by the Form Editor.
176     */
177    @SuppressWarnings("unchecked")
178    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
179    private void initComponents()
180    {
181
182        jPanel1 = new javax.swing.JPanel();
183        btnCreateIncident = new javax.swing.JButton();
184        txtSearchFilter = new javax.swing.JTextField();
185        jPanel2 = new javax.swing.JPanel();
186        jScrollPane2 = new javax.swing.JScrollPane();
187        tableCurrentIncidents = new javax.swing.JTable();
188        labelIncidentCount = new javax.swing.JLabel();
189        scrollAddPanels = new javax.swing.JScrollPane();
190        jPanel3 = new javax.swing.JPanel();
191        btnClosePalette = new javax.swing.JButton();
192        labelFileCount = new javax.swing.JLabel();
193
194        btnCreateIncident.setText("Create New...");
195        btnCreateIncident.addActionListener(new java.awt.event.ActionListener()
196        {
197            public void actionPerformed(java.awt.event.ActionEvent evt)
198            {
199                btnCreateIncidentActionPerformed(evt);
200            }
201        });
202
203        txtSearchFilter.setText("Search...");
204
205        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
206        jPanel1.setLayout(jPanel1Layout);
207        jPanel1Layout.setHorizontalGroup(
208            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
209            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
210                .addContainerGap()
211                .addComponent(txtSearchFilter)
212                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
213                .addComponent(btnCreateIncident, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
214                .addGap(23, 23, 23))
215        );
216        jPanel1Layout.setVerticalGroup(
217            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
218            .addGroup(jPanel1Layout.createSequentialGroup()
219                .addContainerGap()
220                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
221                    .addComponent(txtSearchFilter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
222                    .addComponent(btnCreateIncident))
223                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
224        );
225
226        tableCurrentIncidents.setModel(new javax.swing.table.DefaultTableModel(
227            new Object [][]
228            {
229                {null, null, null},
230                {null, null, null},
231                {null, null, null},
232                {null, null, null},
233                {null, null, null},
234                {null, null, null},
235                {null, null, null},
236                {null, null, null},
237                {null, null, null},
238                {null, null, null},
239                {null, null, null}
240            },
241            new String []
242            {
243                "Incident #", "Start Time", "Title"
244            }
245        )
246        {
247            Class[] types = new Class []
248            {
249                java.lang.Integer.class, java.lang.String.class, java.lang.String.class
250            };
251            boolean[] canEdit = new boolean []
252            {
253                false, false, false
254            };
255
256            public Class getColumnClass(int columnIndex)
257            {
258                return types [columnIndex];
259            }
260
261            public boolean isCellEditable(int rowIndex, int columnIndex)
262            {
263                return canEdit [columnIndex];
264            }
265        });
266        tableCurrentIncidents.setToolTipText("");
267        tableCurrentIncidents.getTableHeader().setReorderingAllowed(false);
268        jScrollPane2.setViewportView(tableCurrentIncidents);
269
270        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
271        jPanel2.setLayout(jPanel2Layout);
272        jPanel2Layout.setHorizontalGroup(
273            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
274            .addGroup(jPanel2Layout.createSequentialGroup()
275                .addContainerGap()
276                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
277                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
278                .addComponent(labelIncidentCount, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
279                .addContainerGap())
280        );
281        jPanel2Layout.setVerticalGroup(
282            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
283            .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)
284            .addComponent(labelIncidentCount, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)
285        );
286
287        scrollAddPanels.setMaximumSize(new java.awt.Dimension(99999, 99999));
288        scrollAddPanels.setMinimumSize(new java.awt.Dimension(566, 387));
289        scrollAddPanels.setPreferredSize(new java.awt.Dimension(566, 387));
290
291        btnClosePalette.setText("Done");
292        btnClosePalette.addActionListener(new java.awt.event.ActionListener()
293        {
294            public void actionPerformed(java.awt.event.ActionEvent evt)
295            {
296                btnClosePaletteActionPerformed(evt);
297            }
298        });
299
300        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
301        jPanel3.setLayout(jPanel3Layout);
302        jPanel3Layout.setHorizontalGroup(
303            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
304            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
305                .addContainerGap()
306                .addComponent(labelFileCount, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
307                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
308                .addComponent(btnClosePalette)
309                .addContainerGap())
310        );
311        jPanel3Layout.setVerticalGroup(
312            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
313            .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
314                .addComponent(btnClosePalette)
315                .addComponent(labelFileCount))
316        );
317
318        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
319        getContentPane().setLayout(layout);
320        layout.setHorizontalGroup(
321            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
322            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
323            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
324            .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
325            .addGroup(layout.createSequentialGroup()
326                .addContainerGap()
327                .addComponent(scrollAddPanels, javax.swing.GroupLayout.DEFAULT_SIZE, 687, Short.MAX_VALUE)
328                .addContainerGap())
329        );
330        layout.setVerticalGroup(
331            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
332            .addGroup(layout.createSequentialGroup()
333                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
334                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
335                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
336                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
337                .addComponent(scrollAddPanels, javax.swing.GroupLayout.DEFAULT_SIZE, 437, Short.MAX_VALUE)
338                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
339                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
340        );
341
342        pack();
343    }// </editor-fold>//GEN-END:initComponents
344
345    private void btnCreateIncidentActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnCreateIncidentActionPerformed
346    {//GEN-HEADEREND:event_btnCreateIncidentActionPerformed
347        int newLogNum = 100;
348        boolean found = false;
349        while (!found)
350        {
351            newLogNum++;
352            if (!scriptContainsLogNum(script, newLogNum))
353            {
354                found = true;
355                for (ScriptIncident incident : incidentList)
356                {
357                    if (incident.number == newLogNum)
358                    {
359                        found = false;
360                    }
361                }
362            }
363        }
364
365        ScriptIncident newInc = new ScriptIncident(newLogNum, "New Incident", LocalDate.now().toString(), script);
366        if (script.addIncident(newInc))
367        {
368            new IncidentEditorFrame(newInc).setVisible(true);
369            this.dispose();
370        }
371
372    }//GEN-LAST:event_btnCreateIncidentActionPerformed
373
374    private void btnClosePaletteActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnClosePaletteActionPerformed
375    {//GEN-HEADEREND:event_btnClosePaletteActionPerformed
376        script.update();
377        this.dispose();
378    }//GEN-LAST:event_btnClosePaletteActionPerformed
379
380
381    // Variables declaration - do not modify//GEN-BEGIN:variables
382    private javax.swing.JButton btnClosePalette;
383    private javax.swing.JButton btnCreateIncident;
384    private javax.swing.JPanel jPanel1;
385    private javax.swing.JPanel jPanel2;
386    private javax.swing.JPanel jPanel3;
387    private javax.swing.JScrollPane jScrollPane2;
388    private javax.swing.JLabel labelFileCount;
389    private javax.swing.JLabel labelIncidentCount;
390    private javax.swing.JScrollPane scrollAddPanels;
391    private javax.swing.JTable tableCurrentIncidents;
392    private javax.swing.JTextField txtSearchFilter;
393    // End of variables declaration//GEN-END:variables
394
395}
Note: See TracBrowser for help on using the repository browser.