source: tmcsimulator-scriptbuilder/trunk/src/event/editor/Editor.java @ 76

Revision 76, 27.7 KB checked in by bmcguffin, 9 years ago (diff)

Added javadoc for several files.

Line 
1package event.editor;
2
3import java.awt.BorderLayout;
4import java.awt.Color;
5import java.awt.FlowLayout;
6import javax.swing.*;
7import java.util.*;
8import java.awt.event.*;
9import scriptbuilder.structures.events.*;
10
11enum UpdateType
12{
13
14    Add, Remove, TitleChange
15}
16
17class PropertyUpdate
18{
19
20    private UpdateType type;
21    private PropertyPanel panel;
22    private int position = -1;
23
24    public PropertyUpdate(UpdateType theType, PropertyPanel thePanel)
25    {
26        type = theType;
27        panel = thePanel;
28    }
29
30    public PropertyUpdate(UpdateType theType, PropertyPanel thePanel, int thePosition)
31    {
32        this(theType, thePanel);
33        position = thePosition;
34    }
35
36    public int getPosition()
37    {
38        if (position == -1)
39        {
40            throw new RuntimeException("position unknown");
41        }
42
43        return position;
44    }
45
46    public UpdateType getType()
47    {
48        return type;
49    }
50
51    public PropertyPanel getPanel()
52    {
53        return panel;
54    }
55}
56
57enum PropertyTypes
58{
59
60    Optional, Multiple;
61}
62
63class PropertyPanel
64{
65
66    private final JPanel panel;
67    private final Properties property;
68
69    public PropertyPanel(JPanel thePanel,
70            Properties theProperty)
71    {
72        panel = thePanel;
73        property = theProperty;
74    }
75
76    public JPanel getPanel()
77    {
78        return panel;
79    }
80
81    public Properties getProperty()
82    {
83        return property;
84    }
85
86    public String title()
87    {
88        return property.getTitle();
89    }
90}
91
92class MultPropertyPanel extends PropertyPanel
93{
94
95    private int index;
96
97    public MultPropertyPanel(JPanel thePanel,
98            Properties theProperty,
99            int theIndex)
100    {
101        super(thePanel, theProperty);
102        index = theIndex;
103    }
104
105    public int getIndex()
106    {
107        return index;
108    }
109
110    public void setIndex(int newIndex)
111    {
112        index = newIndex;
113    }
114
115    @Override
116    public String title()
117    {
118        return super.title() + " " + index;
119    }
120}
121
122class PropertyPanels extends Observable
123{
124
125    private Vector<PropertyPanel> properties = new Vector<PropertyPanel>();
126
127    private EnumMap<Properties, Integer> propertyCounter
128            = new EnumMap<Properties, Integer>(Properties.class);
129
130    public PropertyPanels()
131    {
132        for (Properties property : Properties.values())
133        {
134            propertyCounter.put(property, 0);
135        }
136    }
137
138    private int nextIndex(Properties property)
139    {
140        propertyCounter.put(property, propertyCounter.get(property) + 1);
141
142        return propertyCounter.get(property);
143    }
144
145    /**
146     * public Vector<PropertyPanel> getProperties() { return
147     * (Vector<PropertyPanel>) properties.clone(); }
148     */
149    private int add(PropertyPanel panel)
150    {
151        int position = 0;
152
153        for (int i = 0; i < properties.size(); i++)
154        {
155            if (properties.get(i).title().compareTo(panel.title()) < 0)
156            {
157                position = i + 1;
158            }
159        }
160
161        properties.add(position, panel);
162
163        return position;
164    }
165
166    public PropertyPanel addPropertyPanel(Properties property, JPanel panel)
167    {
168        PropertyPanel propertyPanel = null;
169
170        if (property.getType() == PropertyTypes.Multiple)
171        {
172            propertyPanel = new MultPropertyPanel(panel, property, nextIndex(property));
173            //propertyPanel.addObserver(this);
174            int position = add(propertyPanel);
175            setChanged();
176            notifyObservers(new PropertyUpdate(UpdateType.Add, propertyPanel, position));
177
178        }
179        else if (property.getType() == PropertyTypes.Optional)
180        {
181            if (containsProperty(property))
182            {
183                throw new RuntimeException("Property \"" + property + "\" is already added");
184            }
185            else
186            {
187                propertyPanel = new PropertyPanel(panel, property);
188                int position = add(propertyPanel);
189                //propertyPanel.addObserver(this);
190                setChanged();
191                notifyObservers(new PropertyUpdate(UpdateType.Add, propertyPanel, position));
192            }
193        }
194        else
195        {
196            throw new RuntimeException("Property \"" + property + "\" not accounted for");
197        }
198
199        return propertyPanel;
200    }
201
202    private boolean remove(PropertyPanel panel)
203    {
204        boolean result = false;
205
206        if ((result = properties.remove(panel)))
207        {
208            setChanged();
209            notifyObservers(new PropertyUpdate(UpdateType.Remove, panel));
210        }
211        else
212        {
213            throw new RuntimeException("Attempted to remove panel that did not exist");
214        }
215
216        if (panel.getProperty().getType() == PropertyTypes.Multiple)
217        {
218            Vector<MultPropertyPanel> panelsOfSameType = new Vector<MultPropertyPanel>();
219            Vector<MultPropertyPanel> panelsOfGreaterIndex = new Vector<MultPropertyPanel>();
220
221            propertyCounter.put(panel.getProperty(), propertyCounter.get(panel.getProperty()) - 1);
222
223            // extract panels of the same property type
224            for (PropertyPanel pan : properties)
225            {
226                if (pan.getProperty() == panel.getProperty())
227                {
228                    panelsOfSameType.add((MultPropertyPanel) pan);
229                }
230            }
231
232            // extract panels whose index is greater than the index of the panel
233            // being removed
234            for (MultPropertyPanel pan : panelsOfSameType)
235            {
236                if (pan.getIndex() > ((MultPropertyPanel) panel).getIndex())
237                {
238                    panelsOfGreaterIndex.add(pan);
239                }
240            }
241
242            // decrement the index of each of the remaining panels by one
243            for (MultPropertyPanel pan : panelsOfGreaterIndex)
244            {
245                pan.setIndex(pan.getIndex() - 1);
246                setChanged();
247                notifyObservers(new PropertyUpdate(UpdateType.TitleChange, pan));
248            }
249        }
250        else if (panel.getProperty().getType() == PropertyTypes.Optional)
251        {
252            // do nothing
253        }
254        else
255        {
256            throw new RuntimeException("PropertyTypes not accounted for");
257        }
258
259        return result;
260    }
261
262    public PropertyPanel removeProperty(Properties property)
263    {
264        if (property.getType() == PropertyTypes.Multiple)
265        {
266            throw new RuntimeException("Attemping to remove a property of multiple type");
267        }
268
269        PropertyPanel removed = null;
270
271        for (PropertyPanel panel : properties)
272        {
273            if (panel.getProperty() == property)
274            {
275                removed = panel;
276            }
277        }
278
279        if (removed == null)
280        {
281            throw new RuntimeException("Could not find panel with property \"" + property + "\"");
282        }
283
284        remove(removed);
285
286        return removed;
287    }
288
289    public PropertyPanel removeProperty(JPanel jPanel)
290    {
291        PropertyPanel removed = null;
292
293        for (PropertyPanel panel : properties)
294        {
295            if (panel.getPanel() == jPanel)
296            {
297                removed = panel;
298            }
299        }
300
301        if (removed == null)
302        {
303            throw new RuntimeException("Could not find jPanel");
304        }
305
306        remove(removed);
307
308        return removed;
309    }
310
311    public PropertyPanel removeProperty(String title)
312    {
313        PropertyPanel removed = null;
314
315        for (PropertyPanel panel : properties)
316        {
317            if (panel.title().equals(title))
318            {
319                if (removed == null)
320                {
321                    removed = panel;
322                }
323                else
324                {
325                    throw new RuntimeException("Attempted to remove a property by title but the title was not unique");
326                }
327            }
328        }
329
330        if (removed == null)
331        {
332            throw new RuntimeException("Did not find titel \"" + title + "\"");
333        }
334
335        remove(removed);
336
337        return removed;
338    }
339
340    public boolean removeProperty(PropertyPanel panel)
341    {
342        return remove(panel);
343    }
344
345    public boolean containsProperty(Properties property)
346    {
347        boolean contains = false;
348
349        for (PropertyPanel panel : properties)
350        {
351            if (panel.getProperty() == property)
352            {
353                contains = true;
354            }
355        }
356
357        return contains;
358    }
359}
360
361class PropertyModel extends Observable implements Observer
362{
363
364    PropertyPanels properties = new PropertyPanels();
365
366    private EnumMap<Properties, Class> classMap
367            = new EnumMap<Properties, Class>(Properties.class);
368
369    public PropertyModel()
370    {
371        classMap.put(Properties.ATMS, GenericEvaluationPanel.class);
372        classMap.put(Properties.ActivityLog, GenericEvaluationPanel.class);
373        classMap.put(Properties.CAD, GenericEvaluationPanel.class);
374        classMap.put(Properties.Facilitator, GenericEvaluationPanel.class);
375        classMap.put(Properties.Radio, GenericEvaluationPanel.class);
376
377        classMap.put(Properties.MaintenanceRadio, MaintenanceRadioPanel.class);
378        classMap.put(Properties.TMTRadio, TMTRadioPanel.class);
379        classMap.put(Properties.CHPRadio, CHPRadioPanel.class);
380        classMap.put(Properties.Telephone, TelephonePanel.class);
381
382        classMap.put(Properties.Audio, AudioPanel.class);
383        classMap.put(Properties.CADLog, CADLogPanel.class);
384        classMap.put(Properties.CCTV, CCTVPanel.class);
385        classMap.put(Properties.CMS, CMSEvaluationPanel.class);
386        classMap.put(Properties.Paramics, ParamicsPanel.class);
387        classMap.put(Properties.Tow, TowPanel.class);
388        classMap.put(Properties.Unit, UnitPanel.class);
389        classMap.put(Properties.Witness, WitnessPanel.class);
390
391        properties.addObserver(this);
392    }
393
394    public void addProperty(Properties property, I_ScriptEvent se)
395    {
396        try
397        {
398            JPanel panel = (JPanel) classMap.get(property).newInstance();
399
400            final PropertyPanel propertyPanel = properties.addPropertyPanel(property, panel);
401            if (panel instanceof ScriptEventEditorPanel)
402            {
403                ((ScriptEventEditorPanel) panel).getEventObject(se);
404            }
405            if (property.getType() == PropertyTypes.Multiple)
406            {
407
408                if (panel instanceof RemoveablePanel)
409                {
410                    ((RemoveablePanel) panel).setRemoveListener(new ActionListener()
411                    {
412                        public void actionPerformed(ActionEvent evt)
413                        {
414                            properties.removeProperty(propertyPanel);
415                        }
416                    });
417                }
418                else
419                {
420                    throw new RuntimeException("Property was multiple but panel was not removeable");
421                }
422            }
423        }
424        catch (Exception e)
425        {
426            System.err.println("Could not create panel of type \"" + property + "\"");
427        }
428    }
429
430    public void removeProperty(Properties property)
431    {
432        properties.removeProperty(property);
433    }
434
435    public void update(Observable o, Object arg)
436    {
437        setChanged();
438        notifyObservers(arg);
439    }
440
441    /*
442     public Vector<PropertyPanel> getPropertyPanels()
443     {
444     return properties.getProperties();
445     }
446     */
447}
448
449public class Editor extends javax.swing.JFrame implements Observer
450{
451
452    private PropertyModel model = new PropertyModel();
453
454//    public PropertyModel getPropertyModel()
455//    {
456//        return model;
457//    }
458
459    public void addProperty(Properties property, I_ScriptEvent se)
460    {
461        model.addProperty(property, se);
462    }
463
464    private ActionListener optionalChangeListener = new ActionListener()
465    {
466        public void actionPerformed(ActionEvent evt)
467        {
468            JCheckBoxMenuItem src = (JCheckBoxMenuItem) evt.getSource();
469            Properties property = Properties.valueOf(src.getText().replaceAll(" ", ""));
470
471            if (src.isSelected())
472            {
473                model.addProperty(property, new CCTVEvent());
474            }
475            else
476            {
477                model.removeProperty(property);
478            }
479        }
480    };
481
482    private ActionListener multipleChangeListener = new ActionListener()
483    {
484        public void actionPerformed(ActionEvent evt)
485        {
486            JMenuItem src = (JMenuItem) evt.getSource();
487            model.addProperty(Properties.valueOf(src.getText().replaceAll(" ", "")), new CCTVEvent());
488        }
489    };
490
491    /**
492     * Blank constructor for a new editor.
493     */
494    public Editor()
495    {
496        initComponents();
497
498        model.addObserver(this);
499
500        // For each menu
501        for (int menuCtr = 0; menuCtr < jMenuBar1.getMenuCount(); menuCtr++)
502        {
503            // for each menu item
504            for (java.awt.Component comp : jMenuBar1.getMenu(menuCtr).getMenuComponents())
505            {
506                JMenuItem item = (JMenuItem) comp;
507
508                String itemName = item.getText().replaceAll(" ", "");
509
510                Properties property = Properties.valueOf(itemName);
511
512                if (property.getType() == PropertyTypes.Multiple)
513                {
514                    item.addActionListener(multipleChangeListener);
515                }
516                else if (property.getType() == PropertyTypes.Optional)
517                {
518                    item.addActionListener(optionalChangeListener);
519                }
520                else
521                {
522                    throw new RuntimeException("Property type not accounted for");
523                }
524            }
525        }
526    }
527
528    /**
529     * This method is called from within the constructor to initialize the form.
530     * WARNING: Do NOT modify this code. The content of this method is always
531     * regenerated by the Form Editor.
532     */
533    @SuppressWarnings("unchecked")
534    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
535    private void initComponents() {
536
537        jTabbedPane1 = new javax.swing.JTabbedPane();
538        jMenuBar1 = new javax.swing.JMenuBar();
539        jMenu1 = new javax.swing.JMenu();
540        ATMS = new javax.swing.JCheckBoxMenuItem();
541        ActivityLog = new javax.swing.JCheckBoxMenuItem();
542        CAD = new javax.swing.JCheckBoxMenuItem();
543        CMS = new javax.swing.JMenuItem();
544        Facilitator = new javax.swing.JCheckBoxMenuItem();
545        Radio = new javax.swing.JCheckBoxMenuItem();
546        JMenu2 = new javax.swing.JMenu();
547        MaintenanceRadio = new javax.swing.JCheckBoxMenuItem();
548        TMTRadio = new javax.swing.JCheckBoxMenuItem();
549        Telephone = new javax.swing.JCheckBoxMenuItem();
550        jMenu3 = new javax.swing.JMenu();
551        Audio = new javax.swing.JMenuItem();
552        CADLog = new javax.swing.JMenuItem();
553        CCTV = new javax.swing.JMenuItem();
554        CHPRadio = new javax.swing.JCheckBoxMenuItem();
555        Paramics = new javax.swing.JMenuItem();
556        Tow = new javax.swing.JMenuItem();
557        Unit = new javax.swing.JMenuItem();
558        Witness = new javax.swing.JMenuItem();
559
560        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
561        setTitle("Event Editor");
562
563        jMenu1.setText("Evaluations");
564
565        ATMS.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK));
566        ATMS.setText("ATMS");
567        ATMS.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/ATMSEval.png"))); // NOI18N
568        ATMS.addActionListener(new java.awt.event.ActionListener() {
569            public void actionPerformed(java.awt.event.ActionEvent evt) {
570                multipleChange(evt);
571            }
572        });
573        jMenu1.add(ATMS);
574
575        ActivityLog.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.ALT_MASK));
576        ActivityLog.setText("Activity Log");
577        ActivityLog.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/ActivityLogEval.png"))); // NOI18N
578        ActivityLog.addActionListener(new java.awt.event.ActionListener() {
579            public void actionPerformed(java.awt.event.ActionEvent evt) {
580                multipleChange(evt);
581            }
582        });
583        jMenu1.add(ActivityLog);
584
585        CAD.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.ALT_MASK));
586        CAD.setText("CAD");
587        CAD.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CADEval.png"))); // NOI18N
588        CAD.addActionListener(new java.awt.event.ActionListener() {
589            public void actionPerformed(java.awt.event.ActionEvent evt) {
590                multipleChange(evt);
591            }
592        });
593        jMenu1.add(CAD);
594
595        CMS.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
596        CMS.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CMSEval.png"))); // NOI18N
597        CMS.setText("CMS");
598        CMS.addMouseListener(new java.awt.event.MouseAdapter() {
599            public void mouseClicked(java.awt.event.MouseEvent evt) {
600                multipleChangeListener(evt);
601            }
602        });
603        CMS.addActionListener(new java.awt.event.ActionListener() {
604            public void actionPerformed(java.awt.event.ActionEvent evt) {
605                multipleChange(evt);
606            }
607        });
608        jMenu1.add(CMS);
609
610        Facilitator.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.CTRL_MASK));
611        Facilitator.setText("Facilitator");
612        Facilitator.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/FacilitatorEval.png"))); // NOI18N
613        Facilitator.addActionListener(new java.awt.event.ActionListener() {
614            public void actionPerformed(java.awt.event.ActionEvent evt) {
615                optionalChange(evt);
616            }
617        });
618        jMenu1.add(Facilitator);
619
620        Radio.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R, java.awt.event.InputEvent.CTRL_MASK));
621        Radio.setText("Radio");
622        Radio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/RadioEval.png"))); // NOI18N
623        Radio.addActionListener(new java.awt.event.ActionListener() {
624            public void actionPerformed(java.awt.event.ActionEvent evt) {
625                optionalChange(evt);
626            }
627        });
628        jMenu1.add(Radio);
629
630        jMenuBar1.add(jMenu1);
631
632        JMenu2.setText("Instructor Actions");
633
634        MaintenanceRadio.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_M, java.awt.event.InputEvent.CTRL_MASK));
635        MaintenanceRadio.setText("Maintenance Radio");
636        MaintenanceRadio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/MaintenanceRadio.png"))); // NOI18N
637        MaintenanceRadio.addActionListener(new java.awt.event.ActionListener() {
638            public void actionPerformed(java.awt.event.ActionEvent evt) {
639                optionalChange(evt);
640            }
641        });
642        JMenu2.add(MaintenanceRadio);
643
644        TMTRadio.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_T, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
645        TMTRadio.setText("TMT Radio");
646        TMTRadio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/TMTRadio.png"))); // NOI18N
647        TMTRadio.addActionListener(new java.awt.event.ActionListener() {
648            public void actionPerformed(java.awt.event.ActionEvent evt) {
649                optionalChange(evt);
650            }
651        });
652        JMenu2.add(TMTRadio);
653
654        Telephone.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_T, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
655        Telephone.setText("Telephone");
656        Telephone.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Telephone.png"))); // NOI18N
657        Telephone.addActionListener(new java.awt.event.ActionListener() {
658            public void actionPerformed(java.awt.event.ActionEvent evt) {
659                optionalChange(evt);
660            }
661        });
662        JMenu2.add(Telephone);
663
664        jMenuBar1.add(JMenu2);
665
666        jMenu3.setText("Automated Data");
667
668        Audio.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK));
669        Audio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Audio.png"))); // NOI18N
670        Audio.setText("Audio");
671        jMenu3.add(Audio);
672
673        CADLog.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK));
674        CADLog.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CAD.png"))); // NOI18N
675        CADLog.setText("CAD Log");
676        jMenu3.add(CADLog);
677
678        CCTV.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.event.InputEvent.CTRL_MASK));
679        CCTV.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CCTV.png"))); // NOI18N
680        CCTV.setText("CCTV");
681        jMenu3.add(CCTV);
682
683        CHPRadio.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.ALT_MASK));
684        CHPRadio.setText("CHP Radio");
685        CHPRadio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CHPRadio.png"))); // NOI18N
686        CHPRadio.addActionListener(new java.awt.event.ActionListener() {
687            public void actionPerformed(java.awt.event.ActionEvent evt) {
688                optionalChange(evt);
689            }
690        });
691        jMenu3.add(CHPRadio);
692
693        Paramics.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK));
694        Paramics.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Paramics.png"))); // NOI18N
695        Paramics.setText("Paramics");
696        jMenu3.add(Paramics);
697
698        Tow.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_T, java.awt.event.InputEvent.CTRL_MASK));
699        Tow.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Tow.png"))); // NOI18N
700        Tow.setText("Tow");
701        jMenu3.add(Tow);
702
703        Unit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_U, java.awt.event.InputEvent.CTRL_MASK));
704        Unit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Unit.png"))); // NOI18N
705        Unit.setText("Unit");
706        jMenu3.add(Unit);
707
708        Witness.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.CTRL_MASK));
709        Witness.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Witness.png"))); // NOI18N
710        Witness.setText("Witness");
711        jMenu3.add(Witness);
712
713        jMenuBar1.add(jMenu3);
714
715        setJMenuBar(jMenuBar1);
716
717        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
718        getContentPane().setLayout(layout);
719        layout.setHorizontalGroup(
720            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
721            .add(layout.createSequentialGroup()
722                .addContainerGap()
723                .add(jTabbedPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 921, Short.MAX_VALUE)
724                .addContainerGap())
725        );
726        layout.setVerticalGroup(
727            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
728            .add(layout.createSequentialGroup()
729                .addContainerGap()
730                .add(jTabbedPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 580, Short.MAX_VALUE)
731                .addContainerGap())
732        );
733
734        pack();
735    }// </editor-fold>//GEN-END:initComponents
736
737    private void multipleChangeListener(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_multipleChangeListener
738
739    }//GEN-LAST:event_multipleChangeListener
740
741    private void multipleChange(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_multipleChange
742
743    }//GEN-LAST:event_multipleChange
744
745    private void optionalChange(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_optionalChange
746
747    }//GEN-LAST:event_optionalChange
748
749    /**
750     * @param args the command line arguments
751     */
752    public static void main(String args[])
753    {
754        java.awt.EventQueue.invokeLater(new Runnable()
755        {
756            public void run()
757            {
758                new Editor().setVisible(true);
759            }
760        });
761    }
762
763    // Variables declaration - do not modify//GEN-BEGIN:variables
764    private javax.swing.JCheckBoxMenuItem ATMS;
765    private javax.swing.JCheckBoxMenuItem ActivityLog;
766    private javax.swing.JMenuItem Audio;
767    private javax.swing.JCheckBoxMenuItem CAD;
768    private javax.swing.JMenuItem CADLog;
769    private javax.swing.JMenuItem CCTV;
770    private javax.swing.JCheckBoxMenuItem CHPRadio;
771    private javax.swing.JMenuItem CMS;
772    private javax.swing.JCheckBoxMenuItem Facilitator;
773    private javax.swing.JMenu JMenu2;
774    private javax.swing.JCheckBoxMenuItem MaintenanceRadio;
775    private javax.swing.JMenuItem Paramics;
776    private javax.swing.JCheckBoxMenuItem Radio;
777    private javax.swing.JCheckBoxMenuItem TMTRadio;
778    private javax.swing.JCheckBoxMenuItem Telephone;
779    private javax.swing.JMenuItem Tow;
780    private javax.swing.JMenuItem Unit;
781    private javax.swing.JMenuItem Witness;
782    private javax.swing.JMenu jMenu1;
783    private javax.swing.JMenu jMenu3;
784    private javax.swing.JMenuBar jMenuBar1;
785    private javax.swing.JTabbedPane jTabbedPane1;
786    // End of variables declaration//GEN-END:variables
787
788    public void update(Observable o, Object arg)
789    {
790
791        final PropertyUpdate update = (PropertyUpdate) arg;
792        final ImageIcon image = update.getPanel().getProperty().getImage();
793        final String caption = update.getPanel().title();
794
795        final JLabel title = new JLabel(caption, image, JLabel.CENTER);
796
797        /*
798         final BorderLayout layout = new BorderLayout();
799         final JPanel title = new JPanel(layout);
800         title.setOpaque(false);
801         title.add(new JLabel(image), BorderLayout.WEST);
802         title.add(new JLabel(caption), BorderLayout.EAST);
803         */
804        if (update.getType() == UpdateType.Add)
805        {
806            jTabbedPane1.insertTab(null, null,
807                    update.getPanel().getPanel(), null, update.getPosition());
808            jTabbedPane1.setTabComponentAt(update.getPosition(), title);
809            jTabbedPane1.setSelectedIndex(update.getPosition());
810        }
811        else if (update.getType() == UpdateType.Remove)
812        {
813            jTabbedPane1.remove(update.getPanel().getPanel());
814        }
815        else if (update.getType() == UpdateType.TitleChange)
816        {
817            final int index = jTabbedPane1.indexOfComponent(
818                    update.getPanel().getPanel());
819
820            new Thread(new Runnable()
821            {
822                public void run()
823                {
824                    Color c = jTabbedPane1.getForegroundAt(index);
825                    jTabbedPane1.setForegroundAt(index, Color.blue);
826                    try
827                    {
828                        Thread.sleep(350);
829                    }
830                    catch (Exception e)
831                    {
832                    }
833                    jTabbedPane1.setTabComponentAt(index, title);
834                    try
835                    {
836                        Thread.sleep(350);
837                    }
838                    catch (Exception e)
839                    {
840                    }
841                    jTabbedPane1.setForegroundAt(index, c);
842                }
843            }).start();
844        }
845        else
846        {
847            throw new RuntimeException("UpdateType not accounted for");
848        }
849    }
850
851}
Note: See TracBrowser for help on using the repository browser.