Enhance flight configuration UI

This commit is contained in:
Sampo Niskanen 2013-01-27 22:36:21 +02:00
parent 6f0cf6826a
commit b3b2303f27
12 changed files with 254 additions and 167 deletions

View File

@ -172,21 +172,16 @@ debuglogdlg.lbl.Stacktrace = Stack trace:
MotorChooserDialog.title = Select a rocket motor MotorChooserDialog.title = Select a rocket motor
! Edit Motor configuration dialog ! Edit Motor configuration dialog
edtmotorconfdlg.but.removemotor = Remove motor
edtmotorconfdlg.but.Selectmotor = Select motor
edtmotorconfdlg.but.Removeconfiguration = Remove edtmotorconfdlg.but.Removeconfiguration = Remove
edtmotorconfdlg.but.Renameconfiguration = Rename edtmotorconfdlg.but.Renameconfiguration = Rename
edtmotorconfdlg.but.Newconfiguration = New edtmotorconfdlg.but.Newconfiguration = New
edtmotorconfdlg.but.Copyconfiguration = Copy edtmotorconfdlg.but.Copyconfiguration = Copy
edtmotorconfdlg.but.Selectignition = Select ignition
edtmotorconfdlg.lbl.Motormounts = <html><b>Motor mounts:</b>
edtmotorconfdlg.title.Editmotorconf = Edit Flight configurations edtmotorconfdlg.title.Editmotorconf = Edit Flight configurations
edtmotorconfdlg.title.Renameconf = Rename Flight Configuration edtmotorconfdlg.title.Renameconf = Rename Flight Configuration
edtmotorconfdlg.title.Selectdeploymentconf = Select Deployment Configuration edtmotorconfdlg.title.Selectdeploymentconf = Select Deployment Configuration
edtmotorconfdlg.title.Selectignitionconf = Select Ignition Configuration edtmotorconfdlg.title.Selectignitionconf = Select Ignition Configuration
edtmotorconfdlg.title.Selectseparationconf = Select Separation Configuration edtmotorconfdlg.title.Selectseparationconf = Select Separation Configuration
edtmotorconfdlg.selectcomp = <html>Select which components function as motor mounts: edtmotorconfdlg.selectcomp = <html>Select which components function as motor mounts:
edtmotorconfdlg.lbl.Motorconfig = <html><b>Motor configurations:</b>
edtmotorconfdlg.lbl.Configname = Configuration name: edtmotorconfdlg.lbl.Configname = Configuration name:
edtmotorconfdlg.lbl.Motortab = Motors edtmotorconfdlg.lbl.Motortab = Motors
edtmotorconfdlg.lbl.Recoverytab = Recovery edtmotorconfdlg.lbl.Recoverytab = Recovery
@ -1326,6 +1321,13 @@ MotorMount.IgnitionEvent.EJECTION_CHARGE = First ejection charge of previous sta
MotorMount.IgnitionEvent.BURNOUT = First burnout of previous stage MotorMount.IgnitionEvent.BURNOUT = First burnout of previous stage
MotorMount.IgnitionEvent.NEVER = Never MotorMount.IgnitionEvent.NEVER = Never
MotorMount.IgnitionEvent.short.AUTOMATIC = Automatic
MotorMount.IgnitionEvent.short.LAUNCH = Launch
MotorMount.IgnitionEvent.short.EJECTION_CHARGE = Ejection charge
MotorMount.IgnitionEvent.short.BURNOUT = Burnout
MotorMount.IgnitionEvent.short.NEVER = Never
!ComponentIcons !ComponentIcons
ComponentIcons.Nosecone = Nose cone ComponentIcons.Nosecone = Nose cone
ComponentIcons.Bodytube = Body tube ComponentIcons.Bodytube = Body tube
@ -1816,3 +1818,15 @@ EditDecalDialog.lbl.always = Always use these settings
EditDecalDialog.btn.chooser = Select Graphics Editor Program EditDecalDialog.btn.chooser = Select Graphics Editor Program
MotorConfigurationPanel.lbl.motorMounts = Motor mounts:
MotorConfigurationPanel.lbl.motorConfiguration = Motor configurations:
MotorConfigurationPanel.btn.removeMotor = Remove motor
MotorConfigurationPanel.btn.selectMotor = Select motor
MotorConfigurationPanel.btn.selectIgnition = Select ignition
MotorConfigurationPanel.btn.resetIgnition = Reset ignition
MotorConfigurationPanel.table.ignition.default = Default ({0})
MotorConfigurationPanel.description = <b>Select the motors and motor ignition events of your rocket.</b><br> <em>Motor mounts:</em> Select which components function as motor mounts.<br> <em>Motor configurations:</em> Select the motor and ignition event for each motor mount.

View File

@ -170,14 +170,14 @@ debuglogdlg.lbl.Stacktrace = Tracov
! Edit Motor configuration dialog ! Edit Motor configuration dialog
edtmotorconfdlg.but.removemotor = Odeber motor MotorConfigurationPanel.btn.removeMotor = Odeber motor
edtmotorconfdlg.but.Selectmotor = Vyber motor MotorConfigurationPanel.btn.selectMotor = Vyber motor
edtmotorconfdlg.but.Removeconfiguration = Odeber nastavení edtmotorconfdlg.but.Removeconfiguration = Odeber nastavení
edtmotorconfdlg.but.Newconfiguration = Nové nastavení edtmotorconfdlg.but.Newconfiguration = Nové nastavení
edtmotorconfdlg.lbl.Motormounts = <html><b>Pripojení motoru:</b> MotorConfigurationPanel.lbl.motorMounts = <html><b>Pripojení motoru:</b>
edtmotorconfdlg.title.Editmotorconf = Úprava nastavení motoru edtmotorconfdlg.title.Editmotorconf = Úprava nastavení motoru
edtmotorconfdlg.selectcomp = <html>Vyber ke kterým komponentám se má motor pripojit: edtmotorconfdlg.selectcomp = <html>Vyber ke kterým komponentám se má motor pripojit:
edtmotorconfdlg.lbl.Motorconfig = <html><b>Nastavení motoru:</b> MotorConfigurationPanel.lbl.motorConfiguration = <html><b>Nastavení motoru:</b>
edtmotorconfdlg.lbl.Configname = Jméno nastavení: edtmotorconfdlg.lbl.Configname = Jméno nastavení:
edtmotorconfdlg.lbl.Leavenamedefault = Nechej prázdné polícko jako výchozí hodnotu. edtmotorconfdlg.lbl.Leavenamedefault = Nechej prázdné polícko jako výchozí hodnotu.

View File

@ -171,14 +171,14 @@ debuglogdlg.lbl.Stacktrace = Stacktrace:
! Edit Motor configuration dialog ! Edit Motor configuration dialog
edtmotorconfdlg.but.removemotor = Motor entfernen MotorConfigurationPanel.btn.removeMotor = Motor entfernen
edtmotorconfdlg.but.Selectmotor = Motor auswählen MotorConfigurationPanel.btn.selectMotor = Motor auswählen
edtmotorconfdlg.but.Removeconfiguration = Konfiguration entfernen edtmotorconfdlg.but.Removeconfiguration = Konfiguration entfernen
edtmotorconfdlg.but.Newconfiguration = Neue Konfiguration edtmotorconfdlg.but.Newconfiguration = Neue Konfiguration
edtmotorconfdlg.lbl.Motormounts = <html><b>Motorhalterungen:</b> MotorConfigurationPanel.lbl.motorMounts = <html><b>Motorhalterungen:</b>
edtmotorconfdlg.title.Editmotorconf = Motorkonfiguration bearbeiten edtmotorconfdlg.title.Editmotorconf = Motorkonfiguration bearbeiten
edtmotorconfdlg.selectcomp = <html>Auswählen, welche Komponenten Motorhalterungen sind: edtmotorconfdlg.selectcomp = <html>Auswählen, welche Komponenten Motorhalterungen sind:
edtmotorconfdlg.lbl.Motorconfig = <html><b>Motorkonfigurationen:</b> MotorConfigurationPanel.lbl.motorConfiguration = <html><b>Motorkonfigurationen:</b>
edtmotorconfdlg.lbl.Configname = Name der Konfiguration: edtmotorconfdlg.lbl.Configname = Name der Konfiguration:
edtmotorconfdlg.lbl.Leavenamedefault = Leer lassen für Standardwert. edtmotorconfdlg.lbl.Leavenamedefault = Leer lassen für Standardwert.

View File

@ -179,14 +179,14 @@ debuglogdlg.lbl.Stacktrace = Trazabilidad de la pila:
! Edit Motor configuration dialog ! Edit Motor configuration dialog
edtmotorconfdlg.but.removemotor = Quitar motor MotorConfigurationPanel.btn.removeMotor = Quitar motor
edtmotorconfdlg.but.Selectmotor = Seleccionar motor MotorConfigurationPanel.btn.selectMotor = Seleccionar motor
edtmotorconfdlg.but.Removeconfiguration = Quitar configuración edtmotorconfdlg.but.Removeconfiguration = Quitar configuración
edtmotorconfdlg.but.Newconfiguration = Nueva configuración edtmotorconfdlg.but.Newconfiguration = Nueva configuración
edtmotorconfdlg.lbl.Motormounts = <html><b>Porta motor:</b> MotorConfigurationPanel.lbl.motorMounts = <html><b>Porta motor:</b>
edtmotorconfdlg.title.Editmotorconf = Mostrar las configuraciones de motor edtmotorconfdlg.title.Editmotorconf = Mostrar las configuraciones de motor
edtmotorconfdlg.selectcomp = <html>Seleccionar qué componentes tienen la función de porta motor: edtmotorconfdlg.selectcomp = <html>Seleccionar qué componentes tienen la función de porta motor:
edtmotorconfdlg.lbl.Motorconfig = <html><b>Configuraciones del motor:</b> MotorConfigurationPanel.lbl.motorConfiguration = <html><b>Configuraciones del motor:</b>
edtmotorconfdlg.lbl.Configname = Nombre de la configuración: edtmotorconfdlg.lbl.Configname = Nombre de la configuración:
edtmotorconfdlg.lbl.Leavenamedefault = Dejar el nombre por defecto. edtmotorconfdlg.lbl.Leavenamedefault = Dejar el nombre por defecto.

View File

@ -173,14 +173,14 @@ debuglogdlg.lbl.Stacktrace = Stack trace:
MotorChooserDialog.title = Selectionnez un moteur fusée MotorChooserDialog.title = Selectionnez un moteur fusée
! Edit Motor configuration dialog ! Edit Motor configuration dialog
edtmotorconfdlg.but.removemotor = Enlever le moteur MotorConfigurationPanel.btn.removeMotor = Enlever le moteur
edtmotorconfdlg.but.Selectmotor = Choisir le moteur MotorConfigurationPanel.btn.selectMotor = Choisir le moteur
edtmotorconfdlg.but.Removeconfiguration = Supprimer la configuration edtmotorconfdlg.but.Removeconfiguration = Supprimer la configuration
edtmotorconfdlg.but.Newconfiguration = Nouvelle configuration edtmotorconfdlg.but.Newconfiguration = Nouvelle configuration
edtmotorconfdlg.lbl.Motormounts = <html><b>Portes moteur:</b> MotorConfigurationPanel.lbl.motorMounts = <html><b>Portes moteur:</b>
edtmotorconfdlg.title.Editmotorconf = Changer la configuration moteur edtmotorconfdlg.title.Editmotorconf = Changer la configuration moteur
edtmotorconfdlg.selectcomp = <html>Choisir les pièces utilisées par le porte moteur: edtmotorconfdlg.selectcomp = <html>Choisir les pièces utilisées par le porte moteur:
edtmotorconfdlg.lbl.Motorconfig = <html><b>Configurations moteur:</b> MotorConfigurationPanel.lbl.motorConfiguration = <html><b>Configurations moteur:</b>
edtmotorconfdlg.lbl.Configname = Nom de la configuration: edtmotorconfdlg.lbl.Configname = Nom de la configuration:
edtmotorconfdlg.lbl.Leavenamedefault = Laisser le champ vide par défaut. edtmotorconfdlg.lbl.Leavenamedefault = Laisser le champ vide par défaut.

View File

@ -173,14 +173,14 @@ debuglogdlg.lbl.Stacktrace = traccia della memoria:
! Edit Motor configuration dialog ! Edit Motor configuration dialog
edtmotorconfdlg.but.removemotor = Rimuovi il motore MotorConfigurationPanel.btn.removeMotor = Rimuovi il motore
edtmotorconfdlg.but.Selectmotor = Seleziona il motore MotorConfigurationPanel.btn.selectMotor = Seleziona il motore
edtmotorconfdlg.but.Removeconfiguration = Rimuovi la configurazione edtmotorconfdlg.but.Removeconfiguration = Rimuovi la configurazione
edtmotorconfdlg.but.Newconfiguration = Nuova configurazione edtmotorconfdlg.but.Newconfiguration = Nuova configurazione
edtmotorconfdlg.lbl.Motormounts = <html><b>Alloggiamenti motore:</b> MotorConfigurationPanel.lbl.motorMounts = <html><b>Alloggiamenti motore:</b>
edtmotorconfdlg.title.Editmotorconf = Modifica la configurazione del motore edtmotorconfdlg.title.Editmotorconf = Modifica la configurazione del motore
edtmotorconfdlg.selectcomp = <html>Seleziona quali componenti fungono da alloggiamenti per il motore: edtmotorconfdlg.selectcomp = <html>Seleziona quali componenti fungono da alloggiamenti per il motore:
edtmotorconfdlg.lbl.Motorconfig = <html><b>Configurazione dei motori:</b> MotorConfigurationPanel.lbl.motorConfiguration = <html><b>Configurazione dei motori:</b>
edtmotorconfdlg.lbl.Configname = Nome della configurazione: edtmotorconfdlg.lbl.Configname = Nome della configurazione:
edtmotorconfdlg.lbl.Leavenamedefault = Lascia il campo vuoto per il nome prestabilito. edtmotorconfdlg.lbl.Leavenamedefault = Lascia il campo vuoto per il nome prestabilito.

View File

@ -171,14 +171,14 @@
! Edit Motor configuration dialog ! Edit Motor configuration dialog
edtmotorconfdlg.but.removemotor = Usu\u0144 silnik MotorConfigurationPanel.btn.removeMotor = Usu\u0144 silnik
edtmotorconfdlg.but.Selectmotor = Wybierz silnik MotorConfigurationPanel.btn.selectMotor = Wybierz silnik
edtmotorconfdlg.but.Removeconfiguration = Usu\u0144 konfiguracj\u0119 edtmotorconfdlg.but.Removeconfiguration = Usu\u0144 konfiguracj\u0119
edtmotorconfdlg.but.Newconfiguration = Nowa konfiguracja edtmotorconfdlg.but.Newconfiguration = Nowa konfiguracja
edtmotorconfdlg.lbl.Motormounts = <html><b>Gniazda silnikowe:</b> MotorConfigurationPanel.lbl.motorMounts = <html><b>Gniazda silnikowe:</b>
edtmotorconfdlg.title.Editmotorconf = Edytuj konfiguracje silnika edtmotorconfdlg.title.Editmotorconf = Edytuj konfiguracje silnika
edtmotorconfdlg.selectcomp = <html>Wybierz cz\u0119\u015Bci, które pe\u0142ni\u0105 funkcj\u0119 gniazd silnikowych: edtmotorconfdlg.selectcomp = <html>Wybierz cz\u0119\u015Bci, które pe\u0142ni\u0105 funkcj\u0119 gniazd silnikowych:
edtmotorconfdlg.lbl.Motorconfig = <html><b>Konfiguracje silników:</b> MotorConfigurationPanel.lbl.motorConfiguration = <html><b>Konfiguracje silników:</b>
edtmotorconfdlg.lbl.Configname = Nazwa konfiguracji: edtmotorconfdlg.lbl.Configname = Nazwa konfiguracji:
edtmotorconfdlg.lbl.Leavenamedefault = Pozostaw bez nazwy w celu u\u017Cycia nazwy domy\u015Blnej. edtmotorconfdlg.lbl.Leavenamedefault = Pozostaw bez nazwy w celu u\u017Cycia nazwy domy\u015Blnej.

View File

@ -173,14 +173,14 @@ debuglogdlg.lbl.Stacktrace = \u0421\u0442\u0435\u043a \u0432\u044b\u0437\u043e\u
MotorChooserDialog.title = \u0412\u044b\u0431\u043e\u0440 \u0440\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f MotorChooserDialog.title = \u0412\u044b\u0431\u043e\u0440 \u0440\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f
! Edit Motor configuration dialog ! Edit Motor configuration dialog
edtmotorconfdlg.but.removemotor = \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c MotorConfigurationPanel.btn.removeMotor = \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c
edtmotorconfdlg.but.Selectmotor = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c MotorConfigurationPanel.btn.selectMotor = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c
edtmotorconfdlg.but.Removeconfiguration = \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e edtmotorconfdlg.but.Removeconfiguration = \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e
edtmotorconfdlg.but.Newconfiguration = \u041d\u043e\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f edtmotorconfdlg.but.Newconfiguration = \u041d\u043e\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f
edtmotorconfdlg.lbl.Motormounts = <html><b>\u041a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439:</b> MotorConfigurationPanel.lbl.motorMounts = <html><b>\u041a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439:</b>
edtmotorconfdlg.title.Editmotorconf = \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 edtmotorconfdlg.title.Editmotorconf = \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439
edtmotorconfdlg.selectcomp = <html>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439: edtmotorconfdlg.selectcomp = <html>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439:
edtmotorconfdlg.lbl.Motorconfig = <html><b>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439:</b> MotorConfigurationPanel.lbl.motorConfiguration = <html><b>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439:</b>
edtmotorconfdlg.lbl.Configname = \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438: edtmotorconfdlg.lbl.Configname = \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:
edtmotorconfdlg.lbl.Leavenamedefault = \u041e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u044b\u043c \u0434\u043b\u044f \u0438\u043c\u0435\u043d\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. edtmotorconfdlg.lbl.Leavenamedefault = \u041e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u044b\u043c \u0434\u043b\u044f \u0438\u043c\u0435\u043d\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.

View File

@ -20,7 +20,6 @@ import net.sf.openrocket.gui.main.BasicFrame;
import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.gui.util.GUIUtil;
import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.Rocket; import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
import net.sf.openrocket.rocketvisitors.CopyFlightConfigurationVisitor; import net.sf.openrocket.rocketvisitors.CopyFlightConfigurationVisitor;
import net.sf.openrocket.startup.Application; import net.sf.openrocket.startup.Application;
@ -55,16 +54,17 @@ public class FlightConfigurationDialog extends JDialog {
JPanel panel = new JPanel(new MigLayout("fill")); JPanel panel = new JPanel(new MigLayout("fill"));
JLabel label = new JLabel("Selected Configuration: "); // FIXME: Localize
JLabel label = new JLabel("Selected Configuration:");
panel.add(label); panel.add(label);
flightConfigurationModel = new FlightConfigurationModel(this, rocket.getDefaultConfiguration()); flightConfigurationModel = new FlightConfigurationModel(this, rocket.getDefaultConfiguration());
JComboBox configSelector = new JComboBox(flightConfigurationModel); JComboBox configSelector = new JComboBox(flightConfigurationModel);
panel.add(configSelector,"gapright para"); panel.add(configSelector, "gapright para");
JButton newConfButton = new JButton(trans.get("edtmotorconfdlg.but.Newconfiguration")); JButton newConfButton = new JButton(trans.get("edtmotorconfdlg.but.Newconfiguration"));
newConfButton.addActionListener( new ActionListener() { newConfButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
addConfiguration(); addConfiguration();
@ -75,10 +75,10 @@ public class FlightConfigurationDialog extends JDialog {
panel.add(newConfButton); panel.add(newConfButton);
renameConfButton = new JButton(trans.get("edtmotorconfdlg.but.Renameconfiguration")); renameConfButton = new JButton(trans.get("edtmotorconfdlg.but.Renameconfiguration"));
renameConfButton.addActionListener( new ActionListener() { renameConfButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
new RenameConfigDialog( rocket, FlightConfigurationDialog.this).setVisible(true); new RenameConfigDialog(rocket, FlightConfigurationDialog.this).setVisible(true);
} }
}); });
panel.add(renameConfButton); panel.add(renameConfButton);
@ -101,25 +101,25 @@ public class FlightConfigurationDialog extends JDialog {
copyConfiguration(); copyConfiguration();
} }
}); });
panel.add(copyConfButton,"wrap"); panel.add(copyConfButton, "wrap");
//// Tabs for advanced view. //// Tabs for advanced view.
JTabbedPane tabs = new JTabbedPane(); JTabbedPane tabs = new JTabbedPane();
panel.add( tabs, "grow, spanx, w 700lp, h 500lp, wrap"); panel.add(tabs, "grow, spanx, w 700lp, h 500lp, wrap");
//// Motor tabs //// Motor tabs
motorConfigurationPanel = new MotorConfigurationPanel(this,rocket); motorConfigurationPanel = new MotorConfigurationPanel(this, rocket);
tabs.add(trans.get("edtmotorconfdlg.lbl.Motortab"), motorConfigurationPanel); tabs.add(trans.get("edtmotorconfdlg.lbl.Motortab"), motorConfigurationPanel);
//// Recovery tab //// Recovery tab
recoveryConfigurationPanel = new RecoveryConfigurationPanel(this,rocket); recoveryConfigurationPanel = new RecoveryConfigurationPanel(this, rocket);
tabs.add(trans.get("edtmotorconfdlg.lbl.Recoverytab"), recoveryConfigurationPanel ); tabs.add(trans.get("edtmotorconfdlg.lbl.Recoverytab"), recoveryConfigurationPanel);
//// Stage tab //// Stage tab
separationConfigurationPanel = new SeparationConfigurationPanel(this,rocket); separationConfigurationPanel = new SeparationConfigurationPanel(this, rocket);
if ( rocket.getStageCount() > 1 ) { if (rocket.getStageCount() > 1) {
tabs.add(trans.get("edtmotorconfdlg.lbl.Stagetab"), separationConfigurationPanel ); tabs.add(trans.get("edtmotorconfdlg.lbl.Stagetab"), separationConfigurationPanel);
} }
//// Close button //// Close button
@ -155,7 +155,7 @@ public class FlightConfigurationDialog extends JDialog {
} }
} }
public void selectConfiguration( String id ) { public void selectConfiguration(String id) {
currentID = id; currentID = id;
rocket.getDefaultConfiguration().setFlightConfigurationID(currentID); rocket.getDefaultConfiguration().setFlightConfigurationID(currentID);
motorConfigurationPanel.fireTableDataChanged(); motorConfigurationPanel.fireTableDataChanged();
@ -191,7 +191,7 @@ public class FlightConfigurationDialog extends JDialog {
updateButtonState(); updateButtonState();
} }
public void changeConfigurationName( String newName ) { public void changeConfigurationName(String newName) {
rocket.setFlightConfigurationName(currentID, newName); rocket.setFlightConfigurationName(currentID, newName);
flightConfigurationModel.fireContentsUpdated(); flightConfigurationModel.fireContentsUpdated();
} }

View File

@ -17,22 +17,30 @@ import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel; import javax.swing.table.TableColumnModel;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.gui.components.DescriptionArea;
import net.sf.openrocket.gui.components.StyledLabel;
import net.sf.openrocket.gui.components.StyledLabel.Style;
import net.sf.openrocket.gui.dialogs.motor.MotorChooserDialog; import net.sf.openrocket.gui.dialogs.motor.MotorChooserDialog;
import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.gui.util.GUIUtil;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.Motor;
import net.sf.openrocket.rocketcomponent.MotorConfiguration; import net.sf.openrocket.rocketcomponent.MotorConfiguration;
import net.sf.openrocket.rocketcomponent.MotorConfiguration.IgnitionEvent;
import net.sf.openrocket.rocketcomponent.MotorMount; import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.Rocket; import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.Chars; import net.sf.openrocket.util.Chars;
public class MotorConfigurationPanel extends JPanel { public class MotorConfigurationPanel extends JPanel {
private static final Translator trans = Application.getTranslator();
private final FlightConfigurationDialog flightConfigurationDialog; private final FlightConfigurationDialog flightConfigurationDialog;
private final Rocket rocket; private final Rocket rocket;
private final MotorConfigurationTableModel configurationTableModel; private final MotorConfigurationTableModel configurationTableModel;
private final JButton selectMotorButton, removeMotorButton, selectIgnitionButton; private final JButton selectMotorButton, removeMotorButton, selectIgnitionButton, resetIgnitionButton;
private MotorMount currentMount = null; private MotorMount currentMount = null;
final MotorMount[] mounts; final MotorMount[] mounts;
@ -42,21 +50,19 @@ public class MotorConfigurationPanel extends JPanel {
this.flightConfigurationDialog = flightConfigurationDialog; this.flightConfigurationDialog = flightConfigurationDialog;
this.rocket = rocket; this.rocket = rocket;
DescriptionArea desc = new DescriptionArea(trans.get("description"), 3, -1);
this.add(desc, "spanx, growx, wrap para");
mounts = getPotentialMotorMounts(); mounts = getPotentialMotorMounts();
//// Motor mount selection //// Motor mount selection
//// <html><b>Motor mounts:</b> JLabel label = new StyledLabel(trans.get("lbl.motorMounts"), Style.BOLD);
JLabel label = new JLabel(FlightConfigurationDialog.trans.get("edtmotorconfdlg.lbl.Motormounts")); this.add(label, "");
this.add(label, "gapbottom para");
//// Motor selection //// Motor selection
//// <html><b>Motor configurations:</b> label = new StyledLabel(trans.get("lbl.motorConfiguration"), Style.BOLD);
label = new JLabel(FlightConfigurationDialog.trans.get("edtmotorconfdlg.lbl.Motorconfig")); this.add(label, "wrap rel");
this.add(label, "gapbottom para, wrap");
//// <html>Select which components function as motor mounts:
label = new JLabel(FlightConfigurationDialog.trans.get("edtmotorconfdlg.selectcomp"));
this.add(label, "ay 100%, w 1px, growx, wrap");
//// Motor Mount selection //// Motor Mount selection
JTable table = new JTable(new MotorMountTableModel(this)); JTable table = new JTable(new MotorMountTableModel(this));
@ -76,6 +82,7 @@ public class MotorConfigurationPanel extends JPanel {
JScrollPane scroll = new JScrollPane(table); JScrollPane scroll = new JScrollPane(table);
this.add(scroll, "w 200lp, h 150lp, grow"); this.add(scroll, "w 200lp, h 150lp, grow");
//// Motor selection table. //// Motor selection table.
configurationTableModel = new MotorConfigurationTableModel(this, true); configurationTableModel = new MotorConfigurationTableModel(this, true);
final JTable configurationTable = new JTable(configurationTableModel); final JTable configurationTable = new JTable(configurationTableModel);
@ -87,7 +94,7 @@ public class MotorConfigurationPanel extends JPanel {
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
int row = configurationTable.getSelectedRow(); int row = configurationTable.getSelectedRow();
if ( row >= 0 ) { if (row >= 0) {
currentMount = findMount(row); currentMount = findMount(row);
} else { } else {
currentMount = null; currentMount = null;
@ -112,7 +119,7 @@ public class MotorConfigurationPanel extends JPanel {
this.add(scroll, "w 500lp, h 150lp, grow, wrap"); this.add(scroll, "w 500lp, h 150lp, grow, wrap");
//// Select motor //// Select motor
selectMotorButton = new JButton(FlightConfigurationDialog.trans.get("edtmotorconfdlg.but.Selectmotor")); selectMotorButton = new JButton(trans.get("MotorConfigurationPanel.btn.selectMotor"));
selectMotorButton.addActionListener(new ActionListener() { selectMotorButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -122,24 +129,35 @@ public class MotorConfigurationPanel extends JPanel {
this.add(selectMotorButton, "skip, split, sizegroup button"); this.add(selectMotorButton, "skip, split, sizegroup button");
//// Remove motor button //// Remove motor button
removeMotorButton = new JButton(FlightConfigurationDialog.trans.get("edtmotorconfdlg.but.removemotor")); removeMotorButton = new JButton(trans.get("MotorConfigurationPanel.btn.removeMotor"));
removeMotorButton.addActionListener(new ActionListener() { removeMotorButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
removeMotor(); removeMotor();
} }
}); });
this.add(removeMotorButton,"sizegroup button"); this.add(removeMotorButton, "sizegroup button");
//// Select Ignition button //// Select Ignition button
selectIgnitionButton = new JButton(FlightConfigurationDialog.trans.get("edtmotorconfdlg.but.Selectignition")); selectIgnitionButton = new JButton(trans.get("MotorConfigurationPanel.btn.selectIgnition"));
selectIgnitionButton.addActionListener(new ActionListener() { selectIgnitionButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
selectIgnition(); selectIgnition();
} }
}); });
this.add(selectIgnitionButton,"sizegroup button, wrap"); this.add(selectIgnitionButton, "sizegroup button");
//// Reset Ignition button
resetIgnitionButton = new JButton(trans.get("MotorConfigurationPanel.btn.resetIgnition"));
resetIgnitionButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// FIXME
selectIgnition();
}
});
this.add(resetIgnitionButton, "sizegroup button, wrap");
} }
@ -154,6 +172,7 @@ public class MotorConfigurationPanel extends JPanel {
selectMotorButton.setEnabled(currentMount != null && currentID != null); selectMotorButton.setEnabled(currentMount != null && currentID != null);
removeMotorButton.setEnabled(currentMount != null && currentID != null); removeMotorButton.setEnabled(currentMount != null && currentID != null);
selectIgnitionButton.setEnabled(currentMount != null && currentID != null); selectIgnitionButton.setEnabled(currentMount != null && currentID != null);
resetIgnitionButton.setEnabled(currentMount != null && currentID != null);
} }
@ -201,7 +220,7 @@ public class MotorConfigurationPanel extends JPanel {
SelectIgnitionConfigDialog dialog = new SelectIgnitionConfigDialog( SelectIgnitionConfigDialog dialog = new SelectIgnitionConfigDialog(
this.flightConfigurationDialog, this.flightConfigurationDialog,
rocket, rocket,
currentMount ); currentMount);
dialog.setVisible(true); dialog.setVisible(true);
flightConfigurationDialog.fireContentsUpdated(); flightConfigurationDialog.fireContentsUpdated();
@ -209,8 +228,8 @@ public class MotorConfigurationPanel extends JPanel {
updateButtonState(); updateButtonState();
} }
public void makeMotorMount( MotorMount mount, boolean isMotorMount ) { public void makeMotorMount(MotorMount mount, boolean isMotorMount) {
mount.setMotorMount( isMotorMount ); mount.setMotorMount(isMotorMount);
configurationTableModel.fireTableStructureChanged(); configurationTableModel.fireTableStructureChanged();
updateButtonState(); updateButtonState();
} }
@ -244,7 +263,7 @@ public class MotorConfigurationPanel extends JPanel {
return mount; return mount;
} }
public String findMotorForDisplay( int row ) { public String findMotorForDisplay(int row) {
String currentID = rocket.getDefaultConfiguration().getFlightConfigurationID(); String currentID = rocket.getDefaultConfiguration().getFlightConfigurationID();
MotorMount mount = findMount(row); MotorMount mount = findMount(row);
Motor motor = mount.getMotor(currentID); Motor motor = mount.getMotor(currentID);
@ -259,24 +278,32 @@ public class MotorConfigurationPanel extends JPanel {
return str; return str;
} }
public String findIgnitionForDisplay( int row ) { public String findIgnitionForDisplay(int row) {
String currentID = rocket.getDefaultConfiguration().getFlightConfigurationID(); String currentID = rocket.getDefaultConfiguration().getFlightConfigurationID();
MotorMount mount = findMount(row); MotorMount mount = findMount(row);
MotorConfiguration motorConfig = mount.getFlightConfiguration(currentID); MotorConfiguration motorConfig = mount.getFlightConfiguration(currentID);
if (motorConfig == null) if (motorConfig == null) {
//// None // No motor exists
return null; return null;
}
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
MotorConfiguration.IgnitionEvent ignition = motorConfig.getIgnitionEvent(); MotorConfiguration.IgnitionEvent ignition = motorConfig.getIgnitionEvent();
if ( ignition == null ) { if (ignition == null) {
sb.append("[").append(ellipsizeString(mount.getDefaultIgnitionEvent().toString(),15)).append("]");
// Default ignition event
IgnitionEvent event = mount.getDefaultIgnitionEvent();
String def = trans.get("table.ignition.default");
String value = trans.get("MotorMount.IgnitionEvent.short." + event.name());
return def.replace("{0}", value);
} else { } else {
sb.append(ellipsizeString(ignition.toString(),15)); sb.append(ellipsizeString(ignition.toString(), 15));
} }
Double ignitionDelay = motorConfig.getIgnitionDelay(); Double ignitionDelay = motorConfig.getIgnitionDelay();
if ( ignitionDelay == null ) { if (ignitionDelay == null) {
double defaultdelay = mount.getDefaultIgnitionDelay(); double defaultdelay = mount.getDefaultIgnitionDelay();
if ( defaultdelay > 0 ) { if (defaultdelay > 0) {
sb.append(" + [").append(defaultdelay).append("s]"); sb.append(" + [").append(defaultdelay).append("s]");
} }
} else { } else {
@ -286,8 +313,8 @@ public class MotorConfigurationPanel extends JPanel {
} }
private static String ellipsizeString( String s, int length ) { private static String ellipsizeString(String s, int length) {
if ( s.length() < length ) { if (s.length() < length) {
return s; return s;
} }
String newString = s.substring(0, length) + "..."; String newString = s.substring(0, length) + "...";

View File

@ -1,15 +1,61 @@
package net.sf.openrocket.rocketcomponent; package net.sf.openrocket.rocketcomponent;
/**
* An interface defining that specific parameters of a component are
* configurable on a per-flight-configuration basis.
*
* TODO: This should be refactored and redesigned. In the current
* implementation there can be only one object that is overridable,
* while it should be possible to have independent variables being
* overridden. For example:
* - motor selection and ignition selection
* - parachute diameter and parachute deployment
*
* @param <T> The configuration variable type
*/
public interface FlightConfigurable<T> { public interface FlightConfigurable<T> {
public T getFlightConfiguration( String configId ); /**
* Return the parameters for the provided flight configuration, or
* <code>null</code> if they are not overridden.
*
* @param configId the flight configuration ID
* @return the overridden parameters or <code>null</code>
*/
public T getFlightConfiguration(String configId);
public void setFlightConfiguration( String configId, T config ); /**
* Set or removing the overriding parameters for a specific flight configuration.
* If the configuration is <code>null</code> the overriding parameters are removed.
*
* @param configId the flight configuration ID.
* @param config the configuration which will override the default values.
*/
public void setFlightConfiguration(String configId, T config);
public void cloneFlightConfiguration( String oldConfigId, String newConfigId ); /**
* Clone a flight configuration to a new flight configuration ID.
* This functions also in case there is no overridden values for the
* configuration ID.
*
* @param oldConfigId the old configuration ID
* @param newConfigId the new configuration ID
*/
public void cloneFlightConfiguration(String oldConfigId, String newConfigId);
/**
* Return the default flight configuration to use if the values are not
* overridden.
*
* @return the default configuration (never <code>null</code>)
*/
public T getDefaultFlightConfiguration(); public T getDefaultFlightConfiguration();
public void setDefaultFlightConfiguration( T config ); /**
* Set the default flight configuration to use if the values are not overridden.
*
* @param config the default configuration (must not be <code>null</code>)
*/
public void setDefaultFlightConfiguration(T config);
} }

View File

@ -8,7 +8,7 @@ import net.sf.openrocket.util.BugException;
public class EnumName<E extends Enum<E>> { public class EnumName<E extends Enum<E>> {
public static final EnumConversion NAME = new EnumConversion() { private static final EnumConversion NAME = new EnumConversion() {
@Override @Override
public String convert(Enum<?> e) { public String convert(Enum<?> e) {
return e.name(); return e.name();