1 package org.opentrafficsim.editor;
2
3 import java.io.File;
4 import java.util.Date;
5 import java.util.Optional;
6
7 import javax.swing.Icon;
8 import javax.swing.JOptionPane;
9
10 import org.opentrafficsim.animation.data.util.IconUtil;
11 import org.opentrafficsim.swing.gui.OtsSimulationPanel;
12
13
14
15
16
17
18
19
20
21 public class Dialogs
22 {
23
24
25 private static final Icon QUESTION_ICON = IconUtil.of("Question24.png").get();
26
27
28 private static final Icon DESCRIPTION_ICON = IconUtil.of("Information24.png").get();
29
30
31 private static final Icon WARNING_ICON = IconUtil.of("Warning24.png").get();;
32
33
34 private final OtsEditor editor;
35
36
37
38
39
40 public Dialogs(final OtsEditor editor)
41 {
42 this.editor = editor;
43 }
44
45
46
47
48
49
50
51
52 public boolean confirmNodeRemoval(final XsdTreeNode node)
53 {
54 return JOptionPane.showConfirmDialog(this.editor, "Remove `" + node + "`?", "Remove?", JOptionPane.OK_CANCEL_OPTION,
55 JOptionPane.QUESTION_MESSAGE, QUESTION_ICON) == JOptionPane.OK_OPTION;
56 }
57
58
59
60
61
62 public boolean confirmDiscardChanges()
63 {
64 return JOptionPane.showConfirmDialog(this.editor, "Discard unsaved changes?", "Discard unsaved changes?",
65 JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, QUESTION_ICON) == JOptionPane.OK_OPTION;
66 }
67
68
69
70
71
72
73 public boolean confirmGeneral(final String message)
74 {
75 return JOptionPane.showConfirmDialog(this.editor, message, "Please confirm",
76 JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, QUESTION_ICON) == JOptionPane.OK_OPTION;
77 }
78
79
80
81
82
83
84 public void showDescription(final String description, final String title)
85 {
86 JOptionPane.showMessageDialog(this.editor, "<html><body><p style='width: 400px;'>" + description + "</p></body></html>",
87 title == null ? "Description" : OtsSimulationPanel.separatedName(title), JOptionPane.INFORMATION_MESSAGE,
88 DESCRIPTION_ICON);
89 }
90
91
92
93
94
95
96 public void showInvalidMessage(final String invalidMessage, final String title)
97 {
98 JOptionPane.showMessageDialog(this.editor, invalidMessage,
99 title == null ? "Invalid" : OtsSimulationPanel.separatedName(title), JOptionPane.INFORMATION_MESSAGE,
100 DESCRIPTION_ICON);
101 }
102
103
104
105
106 public void showInvalidToRunMessage()
107 {
108 JOptionPane.showMessageDialog(this.editor, "The setup is not valid. Make sure no red nodes remain.",
109 "Setup is not valid", JOptionPane.INFORMATION_MESSAGE, DESCRIPTION_ICON);
110 }
111
112
113
114
115
116 public void showCircularInputParameters(final String message)
117 {
118 JOptionPane.showMessageDialog(this.editor, "Input parameters have a circular dependency: " + message,
119 "Circular input parameter", JOptionPane.INFORMATION_MESSAGE, WARNING_ICON);
120 }
121
122
123
124
125
126 public void showInvalidExpression(final String message)
127 {
128 JOptionPane.showMessageDialog(this.editor, "An expression is not valid: " + message, "Expression not valid",
129 JOptionPane.INFORMATION_MESSAGE, WARNING_ICON);
130 }
131
132
133
134
135 public void showUnableToRunFromTempFile()
136 {
137 JOptionPane.showMessageDialog(this.editor, "Unable to run, temporary file could not be saved.", "Unable to run",
138 JOptionPane.INFORMATION_MESSAGE, WARNING_ICON);
139 }
140
141
142
143
144
145 public boolean confirmRemoveRecentFile()
146 {
147 return JOptionPane.showConfirmDialog(this.editor,
148 "File could not be loaded. Do you want to remove it from recent files?", "Remove from recent files?",
149 JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, QUESTION_ICON) == JOptionPane.OK_OPTION;
150 }
151
152
153
154
155
156 public boolean confirmClearRecentFiles()
157 {
158 return JOptionPane.showConfirmDialog(this.editor, "Are you sure you want to clear the recent files?",
159 "Clear recent files?", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
160 QUESTION_ICON) == JOptionPane.OK_OPTION;
161 }
162
163
164
165
166
167
168 public Optional<Boolean> confirmLoadAutosaveFile(final File file)
169 {
170 int userInput = JOptionPane.showConfirmDialog(this.editor,
171 "Autosave file " + file.getName() + " (" + new Date(file.lastModified())
172 + ") detected. Do you want to load this file? ('No' removes the file)",
173 "Autosave file detected", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, QUESTION_ICON);
174 return Optional.ofNullable(userInput == JOptionPane.OK_OPTION ? Boolean.TRUE
175 : (userInput == JOptionPane.NO_OPTION ? Boolean.FALSE : null));
176 }
177
178
179
180
181
182 public boolean confirmRemoveAutosaveFile()
183 {
184 return JOptionPane.showConfirmDialog(this.editor, "Autosave file could not be loaded. Do you want to remove it?",
185 "Remove autosave?", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
186 QUESTION_ICON) == JOptionPane.YES_OPTION;
187 }
188
189
190
191
192
193 public void notification(final String notification)
194 {
195 notification(notification, notification);
196 }
197
198
199
200
201
202
203 public void notification(final String notification, final String title)
204 {
205 JOptionPane.showMessageDialog(this.editor, notification, OtsSimulationPanel.separatedName(title),
206 JOptionPane.WARNING_MESSAGE, DESCRIPTION_ICON);
207 }
208
209 }