diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties
index cfbec730b..7dafb51f5 100644
--- a/core/resources/l10n/messages.properties
+++ b/core/resources/l10n/messages.properties
@@ -455,10 +455,7 @@ simedtdlg.title.MultiSimEdit.ttip = You are editing the following simulati
simedtdlg.lbl.Simname = Name:
simedtdlg.tab.Launchcond = Launch conditions
simedtdlg.tab.Simopt = Simulation options
-simedtdlg.tab.Settings = Settings
-simedtdlg.tab.Plotdata = Plot data
simedtdlg.tab.CustomExpressions = Custom expressions
-simedtdlg.tab.Exportdata = Export data
simedtdlg.lbl.Flightcfg = Flight configuration:
simedtdlg.lbl.ttip.Flightcfg = Select the flight configuration to use.
simedtdlg.combo.ttip.Flightcfg = Select the flight configuration to use.
@@ -536,6 +533,10 @@ simedtdlg.IntensityDesc.Veryhigh = Very high
simedtdlg.IntensityDesc.Extreme = Extreme
! SimulationConfigDialog
+SimulationConfigDialog.tab.Settings = Settings
+SimulationConfigDialog.tab.Warnings = Warnings
+SimulationConfigDialog.tab.Plotdata = Plot data
+SimulationConfigDialog.tab.Exportdata = Export data
SimulationConfigDialog.btn.plot = Plot
SimulationConfigDialog.btn.export = Export
SimulationConfigDialog.btn.OK.ttip = Keep changes and close the dialog
@@ -544,9 +545,15 @@ SimulationConfigDialog.CancelOperation.msg.discardChanges = Are you sure y
SimulationConfigDialog.CancelOperation.msg.undoAdd = Are you sure you want to undo adding this simulation?
SimulationConfigDialog.CancelOperation.title = Cancel operation
SimulationConfigDialog.CancelOperation.checkbox.dontAskAgain = Don't ask me again
+SimulationConfigDialog.tab.warnDis.ttip = Warnings not supported for multi-simulation editing
SimulationConfigDialog.tab.plotDis.ttip = Plotting not supported for multi-simulation editing
SimulationConfigDialog.tab.expDis.ttip = Exporting not supported for multi-simulation editing
+! SimulationWarningsPanel
+SimulationWarningsPanel.lbl.CriticalWarnings = Critical Warning(s)
+SimulationWarningsPanel.lbl.NormalWarnings = Warning(s)
+SimulationWarningsPanel.lbl.InformativeWarnings = Informative Warning(s)
+
SimulationExtension.airstart.name.alt = Air-start ({alt})
SimulationExtension.airstart.name.altvel = Air-start ({alt}, {vel})
SimulationExtension.javacode.name = Java code
diff --git a/core/resources/l10n/messages_ar.properties b/core/resources/l10n/messages_ar.properties
index 81396868d..60c54af7e 100644
--- a/core/resources/l10n/messages_ar.properties
+++ b/core/resources/l10n/messages_ar.properties
@@ -385,9 +385,9 @@ simedtdlg.title.Editsim = تعديل Ø§Ù„Ù…ØØ§ÙƒØ§Ø©
simedtdlg.lbl.Simname = :إسم Ø§Ù„Ù…ØØ§ÙƒØ§Ø©
simedtdlg.tab.Launchcond = شروط الإطلاق
simedtdlg.tab.Simopt = خيارات Ø§Ù„Ù…ØØ§ÙƒØ§Ø©
-simedtdlg.tab.Plotdata = عرض البيانات
+SimulationConfigDialog.tab.Plotdata = عرض البيانات
simedtdlg.tab.CustomExpressions = التعبيرات المخصصة
-simedtdlg.tab.Exportdata = تصدير البيانات
+SimulationConfigDialog.tab.Exportdata = تصدير البيانات
simedtdlg.lbl.Flightcfg = :إعدادات الطيران
simedtdlg.lbl.ttip.Flightcfg = .ØØ¯Ø¯ إعدادات الرØÙ„Ø© لإستخدامها
simedtdlg.combo.ttip.Flightcfg = .ØØ¯Ø¯ إعدادات الرØÙ„Ø© لإستخدامها
diff --git a/core/resources/l10n/messages_cs.properties b/core/resources/l10n/messages_cs.properties
index 99a8b8c79..c80c94083 100644
--- a/core/resources/l10n/messages_cs.properties
+++ b/core/resources/l10n/messages_cs.properties
@@ -283,8 +283,8 @@ simedtdlg.title.Editsim = Uprav simulaci
simedtdlg.lbl.Simname = Jméno simulace:
simedtdlg.tab.Launchcond = Startovací podmínky
simedtdlg.tab.Simopt = Parametry simulace
-simedtdlg.tab.Plotdata = Zobraz data
-simedtdlg.tab.Exportdata = Exportuj data
+SimulationConfigDialog.tab.Plotdata = Zobraz data
+SimulationConfigDialog.tab.Exportdata = Exportuj data
simedtdlg.lbl.Motorcfg = Nastavení motoru:
simedtdlg.lbl.ttip.Motorcfg = Nastav konfiguraci motoru k pouziti.
simedtdlg.combo.ttip.motorconf = Nastav konfiguraci motoru k pouziti.
diff --git a/core/resources/l10n/messages_de.properties b/core/resources/l10n/messages_de.properties
index 033a8ff48..85a7bd0bb 100644
--- a/core/resources/l10n/messages_de.properties
+++ b/core/resources/l10n/messages_de.properties
@@ -285,9 +285,9 @@ simedtdlg.title.Editsim = Simulation bearbeiten
simedtdlg.lbl.Simname = Name der Simulation:
simedtdlg.tab.Launchcond = Startbedingungen
simedtdlg.tab.Simopt = Simulationsoptionen
-simedtdlg.tab.Plotdata = Daten plotten
+SimulationConfigDialog.tab.Plotdata = Daten plotten
simedtdlg.tab.CustomExpressions = Benutzerdefinierte Ausdrücke
-simedtdlg.tab.Exportdata = Daten exportieren
+SimulationConfigDialog.tab.Exportdata = Daten exportieren
simedtdlg.lbl.Motorcfg = Motorkonfiguration:
simedtdlg.lbl.ttip.Motorcfg = Motorkonfiguration auswählen
simedtdlg.combo.ttip.motorconf = Die Motorkonfiguration auswählen.
diff --git a/core/resources/l10n/messages_es.properties b/core/resources/l10n/messages_es.properties
index 4e46a2adc..190f0e3da 100644
--- a/core/resources/l10n/messages_es.properties
+++ b/core/resources/l10n/messages_es.properties
@@ -1787,9 +1787,9 @@ simedtdlg.lbl.ttip.Turbulenceintensity1 = La intensidad de la turbulen
simedtdlg.lbl.ttip.Turbulenceintensity2 = Valores t\u00edpicos en el campo
simedtdlg.lbl.ttip.Turbulenceintensity3 = a
simedtdlg.tab.CustomExpressions = Expresiones personalizadas
-simedtdlg.tab.Exportdata = Exportar datos
+SimulationConfigDialog.tab.Exportdata = Exportar datos
simedtdlg.tab.Launchcond = Condiciones del lanzamiento
-simedtdlg.tab.Plotdata = Datos del gr\u00e1fico
+SimulationConfigDialog.tab.Plotdata = Datos del gr\u00e1fico
simedtdlg.tab.Simopt = Opciones de simulaci\u00f3n
simedtdlg.title.Editsim = Mostrar la simulaci\u00f3n
simedtdlg.txt.longA1 = Extensiones del simulador es una caracter\u00edstica avanzada que permite que el c\u00f3digo escrito por un usuario pueda conectar e interactuar con la simulaci\u00f3n mientras \u00e9sta se est\u00e1 ejecutando.
diff --git a/core/resources/l10n/messages_fr.properties b/core/resources/l10n/messages_fr.properties
index 7f95564f2..a5a17319d 100644
--- a/core/resources/l10n/messages_fr.properties
+++ b/core/resources/l10n/messages_fr.properties
@@ -1779,9 +1779,9 @@ simedtdlg.lbl.ttip.Turbulenceintensity1 = L'intensit\u00E9 de la turbu
simedtdlg.lbl.ttip.Turbulenceintensity2 = Les valeurs typiques vont de
simedtdlg.lbl.ttip.Turbulenceintensity3 = \u00E0
simedtdlg.tab.CustomExpressions = Expressions personnalis\u00E9es
-simedtdlg.tab.Exportdata = Exporter les donn\u00E9es
+SimulationConfigDialog.tab.Exportdata = Exporter les donn\u00E9es
simedtdlg.tab.Launchcond = Conditions de lancement
-simedtdlg.tab.Plotdata = Tracer les donn\u00E9es
+SimulationConfigDialog.tab.Plotdata = Tracer les donn\u00E9es
simedtdlg.tab.Simopt = Options de simulation
simedtdlg.title.Editsim = Modifier la simulation
simedtdlg.txt.longA1 = Les auditeurs de simulation sont une fonction avanc\u00E9e qui permet \u00E0 l'utilisateur d'\u00E9crire du code pour suivre et interagir avec la simulation.
diff --git a/core/resources/l10n/messages_it.properties b/core/resources/l10n/messages_it.properties
index a12bb136a..d50d6e4f5 100644
--- a/core/resources/l10n/messages_it.properties
+++ b/core/resources/l10n/messages_it.properties
@@ -287,9 +287,9 @@ simedtdlg.title.Editsim = Modifica simulazione
simedtdlg.lbl.Simname = Nome della simulazione:
simedtdlg.tab.Launchcond = Condizioni di lancio
simedtdlg.tab.Simopt = Opzioni di simulazione
-simedtdlg.tab.Plotdata = Grafico
+SimulationConfigDialog.tab.Plotdata = Grafico
simedtdlg.tab.CustomExpressions = Custom expressions
-simedtdlg.tab.Exportdata = Esporta i dati
+SimulationConfigDialog.tab.Exportdata = Esporta i dati
simedtdlg.lbl.Motorcfg = Configurazione del motore:
simedtdlg.lbl.ttip.Motorcfg = Seleziona la configurazione del motore da usare.
simedtdlg.combo.ttip.motorconf = Seleziona la configurazione del motore da usare.
diff --git a/core/resources/l10n/messages_ja.properties b/core/resources/l10n/messages_ja.properties
index f069e0746..da7f6a90f 100644
--- a/core/resources/l10n/messages_ja.properties
+++ b/core/resources/l10n/messages_ja.properties
@@ -284,9 +284,9 @@ simedtdlg.title.Editsim = \u30B7\u30DF\u30E5\u30EC\u30FC\u30B7\u30E7\u30F3\u306
simedtdlg.lbl.Simname = \u30B7\u30DF\u30E5\u30EC\u30FC\u30B7\u30E7\u30F3\u306E\u540D\u524D\uFF1A
simedtdlg.tab.Launchcond = \u30ED\u30FC\u30F3\u30C1\u30B3\u30F3\u30C7\u30A3\u30B7\u30E7\u30F3
simedtdlg.tab.Simopt = \u30B7\u30DF\u30E5\u30EC\u30FC\u30B7\u30E7\u30F3\u30AA\u30D7\u30B7\u30E7\u30F3
-simedtdlg.tab.Plotdata = \u30C7\u30FC\u30BF\u30D7\u30ED\u30C3\u30C8
+SimulationConfigDialog.tab.Plotdata = \u30C7\u30FC\u30BF\u30D7\u30ED\u30C3\u30C8
simedtdlg.tab.CustomExpressions = \u30AB\u30B9\u30BF\u30E0\u5F0F
-simedtdlg.tab.Exportdata = \u30C7\u30FC\u30BF\u306E\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
+SimulationConfigDialog.tab.Exportdata = \u30C7\u30FC\u30BF\u306E\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
simedtdlg.lbl.Motorcfg = \u30E2\u30FC\u30BF\u30FC\u30B3\u30F3\u30D5\u30A3\u30AE\u30E5\u30EC\u30FC\u30B7\u30E7\u30F3\uFF1A
simedtdlg.lbl.ttip.Motorcfg = \u4F7F\u7528\u3059\u308B\u30E2\u30FC\u30BF\u30FC\u30B3\u30F3\u30D5\u30A3\u30AE\u30E5\u30EC\u30FC\u30B7\u30E7\u30F3\u306E\u9078\u629E
simedtdlg.combo.ttip.motorconf = \u4F7F\u7528\u3059\u308B\u30E2\u30FC\u30BF\u30FC\u30B3\u30F3\u30D5\u30A3\u30AE\u30E5\u30EC\u30FC\u30B7\u30E7\u30F3\u306E\u9078\u629E
diff --git a/core/resources/l10n/messages_nl.properties b/core/resources/l10n/messages_nl.properties
index aa89bc969..b29d9c9c9 100644
--- a/core/resources/l10n/messages_nl.properties
+++ b/core/resources/l10n/messages_nl.properties
@@ -365,9 +365,9 @@ simedtdlg.title.Editsim = Bewerk simulatie
simedtdlg.lbl.Simname = Simulatienaam:
simedtdlg.tab.Launchcond = Lanceeromstandigheden
simedtdlg.tab.Simopt = Simulatie-opties
-simedtdlg.tab.Plotdata = Gegevens plotten
+SimulationConfigDialog.tab.Plotdata = Gegevens plotten
simedtdlg.tab.CustomExpressions = Aangepaste uitdrukkingen
-simedtdlg.tab.Exportdata = Exporteer data
+SimulationConfigDialog.tab.Exportdata = Exporteer data
simedtdlg.lbl.Flightcfg = Vluchtconfiguratie:
simedtdlg.lbl.ttip.Flightcfg = Selecteer de te gebruiken vluchtconfiguratie.
simedtdlg.combo.ttip.Flightcfg = Selecteer de te gebruiken vluchtconfiguratie.
diff --git a/core/resources/l10n/messages_pl.properties b/core/resources/l10n/messages_pl.properties
index 5d5a762ab..c677e482b 100644
--- a/core/resources/l10n/messages_pl.properties
+++ b/core/resources/l10n/messages_pl.properties
@@ -285,8 +285,8 @@ update.dlg.latestVersion = Korzystasz z najnowszej wersji OpenRocket: %s.
simedtdlg.lbl.Simname = Nazwa symulacji:
simedtdlg.tab.Launchcond = Warunki startowe
simedtdlg.tab.Simopt = Opcje symulacji
- simedtdlg.tab.Plotdata = Poka\u017C wykres
- simedtdlg.tab.Exportdata = Eksportuj dane
+ SimulationConfigDialog.tab.Plotdata = Poka\u017C wykres
+ SimulationConfigDialog.tab.Exportdata = Eksportuj dane
simedtdlg.lbl.Motorcfg = Konfiguracja silnika:
simedtdlg.lbl.ttip.Motorcfg = Wybierz konfiguracj\u0119 silnika.
simedtdlg.combo.ttip.motorconf = Wybierz konfiguracj\u0119 silnika.
diff --git a/core/resources/l10n/messages_pt.properties b/core/resources/l10n/messages_pt.properties
index 4bf0268df..717e992c9 100644
--- a/core/resources/l10n/messages_pt.properties
+++ b/core/resources/l10n/messages_pt.properties
@@ -1731,9 +1731,9 @@ simedtdlg.lbl.ttip.Turbulenceintensity1 = A intensidade de turbul\u00e
simedtdlg.lbl.ttip.Turbulenceintensity2 = Os valores t\u00edpicos variam entre
simedtdlg.lbl.ttip.Turbulenceintensity3 = a
simedtdlg.tab.CustomExpressions = Express\u00f5es personalizadas
-simedtdlg.tab.Exportdata = Exportar dados
+SimulationConfigDialog.tab.Exportdata = Exportar dados
simedtdlg.tab.Launchcond = Condi\u00e7\u00f5es do lan\u00e7amento
-simedtdlg.tab.Plotdata = Plotar dados
+SimulationConfigDialog.tab.Plotdata = Plotar dados
simedtdlg.tab.Simopt = Op\u00e7\u00f5es de simula\u00e7\u00e3o
simedtdlg.title.Editsim = Editar simula\u00e7\u00e3o
simedtdlg.txt.longA1 = Observa\u00e7\u00e3o da simula\u00e7\u00e3o \u00e9 um recurso avan\u00e7ado que permite que o usu\u00e1rio escreva c\u00f3digo para observar e interagir com a simula\u00e7\u00e3o.
diff --git a/core/resources/l10n/messages_ru.properties b/core/resources/l10n/messages_ru.properties
index ae15eeb25..630f56a4f 100644
--- a/core/resources/l10n/messages_ru.properties
+++ b/core/resources/l10n/messages_ru.properties
@@ -374,9 +374,9 @@ simedtdlg.title.Editsim = \u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435
simedtdlg.lbl.Simname = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u0430:
simedtdlg.tab.Launchcond = \u0423\u0441\u043B\u043E\u0432\u0438\u044F \u0437\u0430\u043F\u0443\u0441\u043A\u0430
simedtdlg.tab.Simopt = \u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0440\u0430\u0441\u0447\u0435\u0442\u0430
-simedtdlg.tab.Plotdata = \u0413\u0440\u0430\u0444\u0438\u043A\u0438 \u0434\u0430\u043D\u043D\u044B\u0445
+SimulationConfigDialog.tab.Plotdata = \u0413\u0440\u0430\u0444\u0438\u043A\u0438 \u0434\u0430\u043D\u043D\u044B\u0445
simedtdlg.tab.CustomExpressions = \u0421\u0432\u043E\u0438 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F
-simedtdlg.tab.Exportdata = \u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u0434\u0430\u043D\u043D\u044B\u0445
+SimulationConfigDialog.tab.Exportdata = \u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u0434\u0430\u043D\u043D\u044B\u0445
simedtdlg.lbl.Flightcfg = \u041F\u043E\u043B\u0435\u0442\u043D\u0430\u044F \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F:
simedtdlg.lbl.ttip.Flightcfg = \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u0443\u044E \u043F\u043E\u043B\u0435\u0442\u043D\u0443\u044E \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044E.
simedtdlg.combo.ttip.Flightcfg = \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u0443\u044E \u043F\u043E\u043B\u0435\u0442\u043D\u0443\u044E \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044E.
diff --git a/core/resources/l10n/messages_uk_UA.properties b/core/resources/l10n/messages_uk_UA.properties
index 8352f0757..c5921c339 100644
--- a/core/resources/l10n/messages_uk_UA.properties
+++ b/core/resources/l10n/messages_uk_UA.properties
@@ -324,9 +324,9 @@ simedtdlg.title.Editsim = Edit simulation
simedtdlg.lbl.Simname = Name:
simedtdlg.tab.Launchcond = Launch conditions
simedtdlg.tab.Simopt = Simulation options
-simedtdlg.tab.Plotdata = Plot data
+SimulationConfigDialog.tab.Plotdata = Plot data
simedtdlg.tab.CustomExpressions = Custom expressions
-simedtdlg.tab.Exportdata = Export data
+SimulationConfigDialog.tab.Exportdata = Export data
simedtdlg.lbl.Flightcfg = Flight configuration:
simedtdlg.lbl.ttip.Flightcfg = Select the flight configuration to use.
simedtdlg.combo.ttip.Flightcfg = Select the flight configuration to use.
diff --git a/core/resources/l10n/messages_zh_CN.properties b/core/resources/l10n/messages_zh_CN.properties
index 0fa2d9800..c594ac8ce 100644
--- a/core/resources/l10n/messages_zh_CN.properties
+++ b/core/resources/l10n/messages_zh_CN.properties
@@ -1877,9 +1877,9 @@ simedtdlg.lbl.ttip.Turbulenceintensity2 = \u5178\u578B\u53D6\u503C\u8303\u56
simedtdlg.lbl.ttip.Turbulenceintensity3 = \u5230
simedtdlg.lbl.ttip.Winddirection = \u98CE\u5411, 0-360\u5EA6.
0 \u662F\u5317\u98CE,
90 \u662F\u4E1C\u98CE
simedtdlg.tab.CustomExpressions = \u81EA\u5B9A\u4E49\u8868\u8FBE\u5F0F
-simedtdlg.tab.Exportdata = \u8F93\u51FA\u6570\u636E
+SimulationConfigDialog.tab.Exportdata = \u8F93\u51FA\u6570\u636E
simedtdlg.tab.Launchcond = \u53D1\u5C04\u6761\u4EF6
-simedtdlg.tab.Plotdata = \u6570\u636E\u7ED8\u56FE
+SimulationConfigDialog.tab.Plotdata = \u6570\u636E\u7ED8\u56FE
simedtdlg.tab.Simopt = \u6A21\u62DF\u9009\u9879
simedtdlg.title.Editsim = \u7F16\u8F91\u4EFF\u771F
simedtdlg.txt.longA1 = \u4EFF\u771F\u76D1\u542C\u5668(Simulation Listener)\u662F\u4E00\u4E2A\u9AD8\u7EA7\u7279\u6027,\u5141\u8BB8\u7528\u6237\u81EA\u5B9A\u4E49\u4EE3\u7801\u4E0E\u4EFF\u771F\u8FC7\u7A0B\u4EA4\u4E92
diff --git a/core/src/net/sf/openrocket/logging/WarningSet.java b/core/src/net/sf/openrocket/logging/WarningSet.java
index e4688f1c0..98a80cc93 100644
--- a/core/src/net/sf/openrocket/logging/WarningSet.java
+++ b/core/src/net/sf/openrocket/logging/WarningSet.java
@@ -2,6 +2,9 @@ package net.sf.openrocket.logging;
import net.sf.openrocket.util.BugException;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* A set that contains multiple Warnings. When adding a
* {@link Warning} to this set, the contents is checked for a warning of the
@@ -39,6 +42,29 @@ public class WarningSet extends MessageSet {
return getNrOfMessagesWithPriority(MessagePriority.LOW);
}
+ public List getCriticalWarnings() {
+ List list = getMessagesWithPriority(MessagePriority.HIGH);
+ return convertMessageListToWarningList(list);
+ }
+
+ public List getNormalWarnings() {
+ List list = getMessagesWithPriority(MessagePriority.NORMAL);
+ return convertMessageListToWarningList(list);
+ }
+
+ public List getInformativeWarnings() {
+ List list = getMessagesWithPriority(MessagePriority.LOW);
+ return convertMessageListToWarningList(list);
+ }
+
+ private static List convertMessageListToWarningList(List list) {
+ List warnings = new ArrayList<>(list.size());
+ for (Message m : list) {
+ warnings.add((Warning) m);
+ }
+ return warnings;
+ }
+
@Override
public WarningSet clone() {
try {
diff --git a/swing/src/net/sf/openrocket/gui/components/StyledLabel.java b/swing/src/net/sf/openrocket/gui/components/StyledLabel.java
index bf2a29314..60bda798c 100644
--- a/swing/src/net/sf/openrocket/gui/components/StyledLabel.java
+++ b/swing/src/net/sf/openrocket/gui/components/StyledLabel.java
@@ -1,8 +1,11 @@
package net.sf.openrocket.gui.components;
+import net.sf.openrocket.gui.util.Icons;
+
import java.awt.Color;
import java.awt.Font;
+import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
@@ -57,6 +60,10 @@ public class StyledLabel extends JLabel {
resizeFont(size);
checkPreferredSize(size, Style.PLAIN);
}
+
+ public StyledLabel(Icon icon, float size) {
+ super(Icons.getScaledIcon(icon, size));
+ }
diff --git a/swing/src/net/sf/openrocket/gui/dialogs/ErrorWarningDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/ErrorWarningDialog.java
index 3fc386d14..6a4979b00 100644
--- a/swing/src/net/sf/openrocket/gui/dialogs/ErrorWarningDialog.java
+++ b/swing/src/net/sf/openrocket/gui/dialogs/ErrorWarningDialog.java
@@ -57,7 +57,7 @@ public abstract class ErrorWarningDialog {
Error[] e = errors.toArray(new Error[0]);
final JList errorList = new JList<>(e);
errorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- errorList.setCellRenderer(new ErrorListCellRenderer());
+ errorList.setCellRenderer(new BetterListCellRenderer(darkErrorColor));
JScrollPane errorPane = new JScrollPane(errorList);
errorList.setBorder(border);
content.add(errorPane, "wrap, growx");
@@ -99,21 +99,4 @@ public abstract class ErrorWarningDialog {
title, JOptionPane.WARNING_MESSAGE);
}
-
- private static class ErrorListCellRenderer extends BetterListCellRenderer {
- @Override
- public Component getListCellRendererComponent(JList> list, Object value, int index,
- boolean isSelected, boolean cellHasFocus) {
- JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-
- // Text color
- if (isSelected) {
- label.setForeground(textSelectionForegroundColor);
- } else {
- label.setForeground(darkErrorColor);
- }
-
- return label;
- }
- }
}
diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java
index 4a10abb00..c58576657 100644
--- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java
+++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java
@@ -196,7 +196,7 @@ public class BasicFrame extends JFrame {
log.debug("Constructing the BasicFrame UI");
//// Top segment, tabbed pane
- simulationPanel = new SimulationPanel(document);
+ simulationPanel = new SimulationPanel(this, document);
{
// Obtain the simulation selection model that will be used
simulationSelectionModel = simulationPanel.getSimulationListSelectionModel();
diff --git a/swing/src/net/sf/openrocket/gui/main/SimulationPanel.java b/swing/src/net/sf/openrocket/gui/main/SimulationPanel.java
index 7a2ee0cfb..218447971 100644
--- a/swing/src/net/sf/openrocket/gui/main/SimulationPanel.java
+++ b/swing/src/net/sf/openrocket/gui/main/SimulationPanel.java
@@ -7,6 +7,7 @@ import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
+import java.awt.Window;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
@@ -53,7 +54,7 @@ import net.sf.openrocket.gui.util.SwingPreferences;
import net.sf.openrocket.gui.util.UITheme;
import net.sf.openrocket.gui.widgets.SaveFileChooser;
import net.sf.openrocket.logging.Message;
-import net.sf.openrocket.logging.MessagePriority;
+import net.sf.openrocket.logging.Warning;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -73,7 +74,6 @@ import net.sf.openrocket.gui.adaptors.ColumnTableRowSorter;
import net.sf.openrocket.gui.adaptors.ValueColumn;
import net.sf.openrocket.gui.components.StyledLabel;
import net.sf.openrocket.gui.simulation.SimulationRunDialog;
-import net.sf.openrocket.gui.simulation.SimulationWarningDialog;
import net.sf.openrocket.gui.util.Icons;
import net.sf.openrocket.gui.widgets.IconButton;
import net.sf.openrocket.l10n.Translator;
@@ -101,6 +101,7 @@ public class SimulationPanel extends JPanel {
private RocketDescriptor descriptor = Application.getInjector().getInstance(RocketDescriptor.class);
+ private final Window parent;
private final OpenRocketDocument document;
private final ColumnTableModel simulationTableModel;
@@ -136,9 +137,10 @@ public class SimulationPanel extends JPanel {
initColors();
}
- public SimulationPanel(OpenRocketDocument doc) {
+ public SimulationPanel(Window parent, OpenRocketDocument doc) {
super(new MigLayout("fill", "[grow][][][][][][grow]"));
+ this.parent = parent;
this.document = doc;
@@ -261,7 +263,10 @@ public class SimulationPanel extends JPanel {
int selected = simulationTable.convertRowIndexToModel(selectedRow);
// Show the warnings for the simulation
if (column == 1) {
- SimulationWarningDialog.showWarningDialog(SimulationPanel.this, document.getSimulations().get(selected));
+ SimulationConfigDialog dialog = new SimulationConfigDialog(parent, document, false,
+ document.getSimulations().get(selected));
+ dialog.switchToWarningsTab();
+ dialog.setVisible(true);
}
// Edit the simulation or plot/export
else if (column > 1) {
@@ -844,9 +849,9 @@ public class SimulationPanel extends JPanel {
return tip.toString();
}
- List criticalWarnings = warnings.getMessagesWithPriority(MessagePriority.HIGH);
- List normalWarnings = warnings.getMessagesWithPriority(MessagePriority.NORMAL);
- List informativeWarnings = warnings.getMessagesWithPriority(MessagePriority.LOW);
+ List criticalWarnings = warnings.getCriticalWarnings();
+ List normalWarnings = warnings.getNormalWarnings();
+ List informativeWarnings = warnings.getInformativeWarnings();
// Critical warnings
if (!criticalWarnings.isEmpty()) {
diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationConfigDialog.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationConfigDialog.java
index 4f98d88b7..2fdcd8ea9 100644
--- a/swing/src/net/sf/openrocket/gui/simulation/SimulationConfigDialog.java
+++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationConfigDialog.java
@@ -64,8 +64,9 @@ public class SimulationConfigDialog extends JDialog {
private final boolean isNewSimulation; // Whether you are editing a new simulation, or an existing one
private static final int SETTINGS_IDX = 0;
- private static final int PLOT_IDX = 1;
- private static final int EXPORT_IDX = 2;
+ private static final int WARNINGS_IDX = 1;
+ private static final int PLOT_IDX = 2;
+ private static final int EXPORT_IDX = 3;
private final SimulationPlotPanel plotTab;
private final SimulationExportPanel exportTab;
@@ -106,11 +107,19 @@ public class SimulationConfigDialog extends JDialog {
//// Simulation Settings
final SimulationSettingsPanel settingsTab = new SimulationSettingsPanel(document, simulationList[0]);
- tabbedPane.addTab(trans.get("simedtdlg.tab.Settings"), settingsTab);
+ tabbedPane.addTab(trans.get("SimulationConfigDialog.tab.Settings"), settingsTab);
+
+ //// Simulation Warnings
+ final SimulationWarningsPanel warningsTab = new SimulationWarningsPanel(simulationList[0]);
+ tabbedPane.addTab(trans.get("SimulationConfigDialog.tab.Warnings"), warningsTab);
+ if (isMultiCompEdit()) {
+ tabbedPane.setEnabledAt(WARNINGS_IDX, false);
+ tabbedPane.setToolTipTextAt(WARNINGS_IDX, trans.get("SimulationConfigDialog.tab.warnDis.ttip"));
+ }
//// Plot data
this.plotTab = new SimulationPlotPanel(simulationList[0]);
- tabbedPane.addTab(trans.get("simedtdlg.tab.Plotdata"), plotTab);
+ tabbedPane.addTab(trans.get("SimulationConfigDialog.tab.Plotdata"), plotTab);
if (isMultiCompEdit()) {
tabbedPane.setEnabledAt(PLOT_IDX, false);
tabbedPane.setToolTipTextAt(PLOT_IDX, trans.get("SimulationConfigDialog.tab.plotDis.ttip"));
@@ -118,7 +127,7 @@ public class SimulationConfigDialog extends JDialog {
//// Export data
this.exportTab = new SimulationExportPanel(simulationList[0]);
- tabbedPane.addTab(trans.get("simedtdlg.tab.Exportdata"), exportTab);
+ tabbedPane.addTab(trans.get("SimulationConfigDialog.tab.Exportdata"), exportTab);
if (isMultiCompEdit()) {
tabbedPane.setEnabledAt(EXPORT_IDX, false);
tabbedPane.setToolTipTextAt(EXPORT_IDX, trans.get("SimulationConfigDialog.tab.expDis.ttip"));
@@ -143,16 +152,24 @@ public class SimulationConfigDialog extends JDialog {
case SETTINGS_IDX:
okButton.setText(trans.get("dlg.but.ok"));
cancelButton.setText(trans.get("dlg.but.cancel"));
+ cancelButton.setVisible(true);
+ SimulationConfigDialog.this.revalidate();
+ break;
+ case WARNINGS_IDX:
+ okButton.setText(trans.get("dlg.but.close"));
+ cancelButton.setVisible(false);
SimulationConfigDialog.this.revalidate();
break;
case PLOT_IDX:
okButton.setText(trans.get("SimulationConfigDialog.btn.plot"));
cancelButton.setText(trans.get("dlg.but.close"));
+ cancelButton.setVisible(true);
SimulationConfigDialog.this.revalidate();
break;
case EXPORT_IDX:
okButton.setText(trans.get("SimulationConfigDialog.btn.export"));
cancelButton.setText(trans.get("dlg.but.close"));
+ cancelButton.setVisible(true);
SimulationConfigDialog.this.revalidate();
break;
}
@@ -190,6 +207,10 @@ public class SimulationConfigDialog extends JDialog {
tabbedPane.setSelectedIndex(SETTINGS_IDX);
}
+ public void switchToWarningsTab() {
+ tabbedPane.setSelectedIndex(WARNINGS_IDX);
+ }
+
public void switchToPlotTab() {
tabbedPane.setSelectedIndex(PLOT_IDX);
}
diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationWarningDialog.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationWarningDialog.java
deleted file mode 100644
index cdb3706a4..000000000
--- a/swing/src/net/sf/openrocket/gui/simulation/SimulationWarningDialog.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package net.sf.openrocket.gui.simulation;
-
-import java.awt.Component;
-import java.util.ArrayList;
-
-import javax.swing.JOptionPane;
-
-import net.sf.openrocket.logging.Warning;
-import net.sf.openrocket.document.Simulation;
-import net.sf.openrocket.gui.dialogs.DetailDialog;
-import net.sf.openrocket.l10n.Translator;
-import net.sf.openrocket.startup.Application;
-
-public class SimulationWarningDialog {
-
- private static final Translator trans = Application.getTranslator();
-
- public static void showWarningDialog(Component parent, Simulation simulation) {
-
- if (simulation.getSimulatedWarnings() != null && simulation.getSimulatedWarnings().size() > 0) {
- ArrayList messages = new ArrayList();
- messages.add(trans.get("SimuRunDlg.msg.errorOccurred"));
- for (Warning m : simulation.getSimulatedWarnings()) {
- messages.add(m.toString());
- }
- DetailDialog.showDetailedMessageDialog(parent,
- messages.toArray(),
- null, simulation.getName(), JOptionPane.ERROR_MESSAGE);
- }
-
- }
-}
diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationWarningsPanel.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationWarningsPanel.java
new file mode 100644
index 000000000..ffcc75763
--- /dev/null
+++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationWarningsPanel.java
@@ -0,0 +1,111 @@
+package net.sf.openrocket.gui.simulation;
+
+import net.miginfocom.swing.MigLayout;
+import net.sf.openrocket.document.Simulation;
+import net.sf.openrocket.gui.components.StyledLabel;
+import net.sf.openrocket.gui.util.BetterListCellRenderer;
+import net.sf.openrocket.gui.util.GUIUtil;
+import net.sf.openrocket.gui.util.Icons;
+import net.sf.openrocket.gui.util.UITheme;
+import net.sf.openrocket.l10n.Translator;
+import net.sf.openrocket.logging.Warning;
+import net.sf.openrocket.logging.WarningSet;
+import net.sf.openrocket.startup.Application;
+
+import javax.swing.DefaultListSelectionModel;
+import javax.swing.Icon;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.border.Border;
+import java.awt.Color;
+import java.util.List;
+
+public class SimulationWarningsPanel extends JPanel {
+ private static final Translator trans = Application.getTranslator();
+
+ private static Border border;
+ private static Color darkErrorColor;
+ private static Color warningColor;
+ private static Color informationColor;
+
+ static {
+ initColors();
+ }
+
+ public SimulationWarningsPanel(final Simulation simulation) {
+ super(new MigLayout("fill"));
+
+ WarningSet warnings = simulation.getSimulatedWarnings();
+ List criticalWarnings = warnings.getCriticalWarnings();
+ List normalWarnings = warnings.getNormalWarnings();
+ List informativeWarnings = warnings.getInformativeWarnings();
+
+ // Critical warnings
+ JPanel criticalPanel = createWarningsPanel(criticalWarnings, Icons.WARNING_HIGH, trans.get("SimulationWarningsPanel.lbl.CriticalWarnings"), darkErrorColor);
+ this.add(criticalPanel, "spanx, grow, wrap 3lp");
+
+ // Normal warnings
+ JPanel normalPanel = createWarningsPanel(normalWarnings, Icons.WARNING_NORMAL, trans.get("SimulationWarningsPanel.lbl.NormalWarnings"), warningColor);
+ this.add(normalPanel, "spanx, grow, wrap 5lp");
+
+ // Informative warnings
+ //JPanel infoPanel = createWarningsPanel(informativeWarnings, Icons.WARNING_LOW, trans.get("SimulationWarningsPanel.lbl.InformativeWarnings"), informationColor);
+ //this.add(infoPanel, "spanx, grow, wrap 5lp");
+
+ JPanel filler = new JPanel();
+ this.add(filler, "grow, spanx, pushy");
+ }
+
+ private static void initColors() {
+ updateColors();
+ UITheme.Theme.addUIThemeChangeListener(SimulationWarningsPanel::updateColors);
+ }
+
+ private static void updateColors() {
+ border = GUIUtil.getUITheme().getBorder();
+ darkErrorColor = GUIUtil.getUITheme().getDarkErrorColor();
+ warningColor = GUIUtil.getUITheme().getWarningColor();
+ informationColor = GUIUtil.getUITheme().getInformationColor();
+ }
+
+ private static JPanel createWarningsPanel(final List warnings, final Icon icon, final String titleText, Color textColor) {
+ JPanel panel = new JPanel(new MigLayout("fillx"));
+
+ // Title
+ float size = 1.1f;
+ StyledLabel title = new StyledLabel(warnings.size() + " " + titleText, size, StyledLabel.Style.BOLD);
+ title.setFontColor(textColor);
+ panel.add(title, "wrap, spanx");
+
+ if (warnings.isEmpty()) {
+ return panel;
+ }
+
+ // Warning list
+ Warning[] w = warnings.toArray(new Warning[0]);
+ final JList warningList = new JList<>(w);
+ warningList.setSelectionModel(new NoSelectionModel()); // Disable selection
+ warningList.setCellRenderer(new BetterListCellRenderer(icon));
+ JScrollPane warningPane = new JScrollPane(warningList);
+ warningList.setBorder(border);
+ panel.add(warningPane, "wrap, spanx, growx");
+
+ return panel;
+ }
+
+ private static class NoSelectionModel extends DefaultListSelectionModel {
+
+ @Override
+ public void setAnchorSelectionIndex(final int anchorIndex) {}
+
+ @Override
+ public void setLeadAnchorNotificationEnabled(final boolean flag) {}
+
+ @Override
+ public void setLeadSelectionIndex(final int leadIndex) {}
+
+ @Override
+ public void setSelectionInterval(final int index0, final int index1) { }
+ }
+}
diff --git a/swing/src/net/sf/openrocket/gui/util/BetterListCellRenderer.java b/swing/src/net/sf/openrocket/gui/util/BetterListCellRenderer.java
index dfbb02be0..2f826a60d 100644
--- a/swing/src/net/sf/openrocket/gui/util/BetterListCellRenderer.java
+++ b/swing/src/net/sf/openrocket/gui/util/BetterListCellRenderer.java
@@ -2,6 +2,7 @@ package net.sf.openrocket.gui.util;
import javax.swing.DefaultListCellRenderer;
+import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JList;
import java.awt.Color;
@@ -17,16 +18,41 @@ public class BetterListCellRenderer extends DefaultListCellRenderer {
private static Color rowBackgroundLighterColor;
private static Color textSelectionForegroundColor;
private static Color textColor;
+ private final Color textColorOverride;
+ private final Icon icon;
static {
initColors();
}
+ public BetterListCellRenderer(Icon icon, Color textColor) {
+ this.icon = icon;
+ this.textColorOverride = textColor;
+ }
+
+ public BetterListCellRenderer(Icon icon) {
+ this(icon, null);
+ }
+
+ public BetterListCellRenderer(Color textColor) {
+ this(null, textColor);
+ }
+
+ public BetterListCellRenderer() {
+ this.icon = null;
+ this.textColorOverride = null;
+ }
+
@Override
public Component getListCellRendererComponent(JList> list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+ if (icon != null) {
+ label.setIcon(icon);
+ label.setIconTextGap(10);
+ }
+
// Alternating row colors
if (!isSelected) {
if (index % 2 == 0) {
@@ -39,7 +65,7 @@ public class BetterListCellRenderer extends DefaultListCellRenderer {
if (isSelected) {
label.setForeground(textSelectionForegroundColor);
} else {
- label.setForeground(textColor);
+ label.setForeground(textColorOverride != null ? textColorOverride : textColor);
}
return label;
}
diff --git a/swing/src/net/sf/openrocket/gui/util/UITheme.java b/swing/src/net/sf/openrocket/gui/util/UITheme.java
index 210901ab9..a35dc066c 100644
--- a/swing/src/net/sf/openrocket/gui/util/UITheme.java
+++ b/swing/src/net/sf/openrocket/gui/util/UITheme.java
@@ -230,7 +230,7 @@ public class UITheme {
@Override
public Color getWarningColor() {
- return new Color(192, 135, 0);
+ return new Color(217, 152, 0);
}
@Override