1 package org.opentrafficsim.swing.gui;
2
3 import java.awt.Color;
4 import java.awt.Frame;
5 import java.awt.event.WindowAdapter;
6 import java.awt.event.WindowEvent;
7 import java.awt.geom.Rectangle2D;
8 import java.util.List;
9
10 import javax.swing.JPanel;
11 import javax.swing.WindowConstants;
12
13 import org.opentrafficsim.animation.gtu.colorer.AccelerationGtuColorer;
14 import org.opentrafficsim.animation.gtu.colorer.IdGtuColorer;
15 import org.opentrafficsim.animation.gtu.colorer.SpeedGtuColorer;
16 import org.opentrafficsim.core.dsol.OtsModelInterface;
17 import org.opentrafficsim.core.gtu.Gtu;
18 import org.opentrafficsim.draw.colorer.Colorer;
19 import org.opentrafficsim.draw.colorer.FixedColorer;
20
21
22
23
24
25
26
27
28
29
30
31
32 public class OtsSwingApplication<T extends OtsModelInterface> extends AppearanceApplication
33 {
34
35 private static final long serialVersionUID = 20141216L;
36
37
38 private final T model;
39
40
41 @SuppressWarnings("checkstyle:visibilitymodifier")
42 protected boolean closed = false;
43
44
45 public static final List<Colorer<? super Gtu>> DEFAULT_GTU_COLORERS = List.of(new FixedColorer<>(Color.BLUE, "Blue"),
46 new IdGtuColorer(), new SpeedGtuColorer(), new AccelerationGtuColorer());
47
48
49
50
51
52
53 public OtsSwingApplication(final T model, final JPanel panel)
54 {
55 super(panel);
56 this.model = model;
57 setTitle("OTS | The Open Traffic Simulator | " + model.getDescription());
58 pack();
59 setExtendedState(Frame.MAXIMIZED_BOTH);
60 setVisible(true);
61
62 setExitOnClose(true);
63 addWindowListener(new WindowAdapter()
64 {
65 @Override
66 public void windowClosing(final WindowEvent windowEvent)
67 {
68 OtsSwingApplication.this.closed = true;
69 super.windowClosing(windowEvent);
70 }
71 });
72 }
73
74
75
76
77
78
79 @SuppressWarnings("checkstyle:designforextension")
80 protected Rectangle2D makeAnimationRectangle()
81 {
82 return this.model.getNetwork().getExtent();
83 }
84
85
86
87
88
89 public final void setExitOnClose(final boolean exitOnClose)
90 {
91 if (exitOnClose)
92 {
93 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
94 }
95 else
96 {
97 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
98 }
99 }
100
101
102
103
104
105 public final boolean isClosed()
106 {
107 return this.closed;
108 }
109
110
111
112
113
114 public final T getModel()
115 {
116 return this.model;
117 }
118
119 }