Apply translation to photo studio

This commit is contained in:
bkuker 2014-01-26 16:05:57 -05:00
parent ae1655e78c
commit 1d38fb93db
4 changed files with 163 additions and 125 deletions

View File

@ -1177,8 +1177,6 @@ main.menu.analyze.optimization = Rocket optimization
main.menu.analyze.optimization.desc = General rocket design optimization
main.menu.analyze.customExpressions = Custom expressions
main.menu.analyze.customExpressions.desc = Define new flight data types by writing custom mathematical expressions
main.menu.analyze.photo = 3D Rendering
main.menu.analyze.photo.desc = Create realistic 3D images of the rocket
main.menu.help = Help
main.menu.help.desc = Information about OpenRocket
@ -1894,3 +1892,56 @@ SeparationSelectionDialog.opt.override = Override for the {0} flight configurati
MotorConfigurationPanel.description = <b>Select the motors and motor ignition events of the selected flight configuration.</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.
MotorDescriptionSubstitutor.description = Motors in the configuration
!Photo Panel
PhotoFrame.title = Photo Studio
PhotoFrame.desc = Create realistic 3D images of the rocket
PhotoFrame.menu.file.save = Save Image...
PhotoFrame.fileFilter.png = PNG Image
PhotoFrame.menu.edit.copy = Copy Image
PhotoFrame.menu.edit.copy.desc = Copy image to clipboard
PhotoFrame.menu.edit.settings = Photo Settings
PhotoFrame.menu.window = Window
PhotoFrame.menu.window.size = Size
PhotoFrame.menu.window.size.portrait = {0} Portrait
!Photo Settings
PhotoSettingsConfig.title = Settings
PhotoSettingsConfig.colorChooser.title = Color Chooser
PhotoSettingsConfig.tab.orientation = Orientation
PhotoSettingsConfig.lbl.rocket = Rocket
PhotoSettingsConfig.lbl.pitch = Pitch
PhotoSettingsConfig.lbl.yaw = Yaw
PhotoSettingsConfig.lbl.roll = Roll
PhotoSettingsConfig.lbl.advance = Advance
PhotoSettingsConfig.lbl.camera = Camera
PhotoSettingsConfig.lbl.vAz = View Azimuth
PhotoSettingsConfig.lbl.vAlt = View Altitude
PhotoSettingsConfig.lbl.vDist = View Distance
PhotoSettingsConfig.lbl.fov = FoV
PhotoSettingsConfig.tab.environment = Environment
PhotoSettingsConfig.lbl.light = Light
PhotoSettingsConfig.lbl.sun = Sun Light
PhotoSettingsConfig.lbl.amb = Ambiance
PhotoSettingsConfig.lbl.lightAz = Light Azimuth
PhotoSettingsConfig.lbl.lightAlt = Light Altitude
PhotoSettingsConfig.lbl.sky = Sky
PhotoSettingsConfig.lbl.skyColor = Sky Color
PhotoSettingsConfig.lbl.skyImage = Sky Image
PhotoSettingsConfig.lbl.skyCredit = Image Credit:
PhotoSettingsConfig.tab.effects = Effects
PhotoSettingsConfig.lbl.smokeFlame = Smoke & Flame
PhotoSettingsConfig.lbl.smoke = Smoke
PhotoSettingsConfig.lbl.smokeOpacity = Smoke Opacity
PhotoSettingsConfig.lbl.flame = Flame
PhotoSettingsConfig.lbl.flameAspect = Flame Aspect Ratio
PhotoSettingsConfig.lbl.sparks = Sparks
PhotoSettingsConfig.lbl.sparkConcentration = Spark Concentration
PhotoSettingsConfig.lbl.sparkWeight = Spark Weight
PhotoSettingsConfig.lbl.exhaustScale = Exhaust Scale
PhotoSettingsConfig.lbl.effects = Effects
PhotoSettingsConfig.lbl.speed = Speed

View File

@ -61,7 +61,7 @@ public class PhotoFrame extends JFrame {
public PhotoFrame(OpenRocketDocument document, Window parent) {
this(false);
setTitle("Photo - " + document.getRocket().getName());
setTitle(trans.get("PhotoFrame.title") + " - " + document.getRocket().getName());
photoPanel.setDoc(document);
}
@ -77,7 +77,7 @@ public class PhotoFrame extends JFrame {
GUIUtil.rememberWindowPosition(this);
GUIUtil.setWindowIcons(this);
settings = new JDialog(this, "Settings") {
settings = new JDialog(this, trans.get("PhotoSettingsConfig.title")) {
{
setContentPane(new PhotoSettingsConfig(photoPanel.getSettings()));
pack();
@ -142,11 +142,10 @@ public class PhotoFrame extends JFrame {
menu.add(item);
}
item = new JMenuItem("Save Image...", KeyEvent.VK_S); // TODO Trans
item = new JMenuItem(trans.get("PhotoFrame.menu.file.save"), KeyEvent.VK_S);
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, SHORTCUT_KEY));
// // Open a rocket design
item.getAccessibleContext().setAccessibleDescription("Save Image"); // TODO
// Trans
item.getAccessibleContext().setAccessibleDescription(trans.get("PhotoFrame.menu.file.save"));
item.setIcon(Icons.FILE_OPEN);
item.addActionListener(new ActionListener() {
@Override
@ -160,8 +159,8 @@ public class PhotoFrame extends JFrame {
public void run() {
log.info("Got image {} to save...", image);
final FileFilter png = new SimpleFileFilter("PNG Image", ".png"); // TODO
// Trans
final FileFilter png = new SimpleFileFilter(trans.get("PhotoFrame.fileFilter.png"),
".png");
final JFileChooser chooser = new JFileChooser();
@ -210,7 +209,7 @@ public class PhotoFrame extends JFrame {
menu.getAccessibleContext().setAccessibleDescription(trans.get("BasicFrame.menu.Rocketedt"));
menubar.add(menu);
Action action = new AbstractAction("Copy") {
Action action = new AbstractAction(trans.get("PhotoFrame.menu.edit.copy")) {
@Override
public void actionPerformed(ActionEvent e) {
photoPanel.addImageCallback(new PhotoPanel.ImageCallback() {
@ -253,10 +252,10 @@ public class PhotoFrame extends JFrame {
item = new JMenuItem(action);
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, SHORTCUT_KEY));
item.setMnemonic(KeyEvent.VK_C);
item.getAccessibleContext().setAccessibleDescription("Copy image to clipboard");
item.getAccessibleContext().setAccessibleDescription(trans.get("PhotoFrame.menu.edit.copy.desc"));
menu.add(item);
menu.add(new JMenuItem(new AbstractAction("Photo Settings") {
menu.add(new JMenuItem(new AbstractAction(trans.get("PhotoSettingsConfig.title")) {
@Override
public void actionPerformed(ActionEvent e) {
settings.setVisible(true);
@ -264,9 +263,9 @@ public class PhotoFrame extends JFrame {
}));
// Window
menu = new JMenu("Window");
menu = new JMenu(trans.get("PhotoFrame.menu.window"));
menubar.add(menu);
JMenu sizeMenu = new JMenu("Size");
JMenu sizeMenu = new JMenu(trans.get("PhotoFrame.menu.window.size"));
menu.add(sizeMenu);
sizeMenu.add(new JMenuItem(new SizeAction(320, 240, "QVGA")));
@ -275,9 +274,10 @@ public class PhotoFrame extends JFrame {
sizeMenu.addSeparator();
sizeMenu.add(new JMenuItem(new SizeAction(240, 320, "QVGA Portrait")));
sizeMenu.add(new JMenuItem(new SizeAction(480, 640, "VGA Portrait")));
sizeMenu.add(new JMenuItem(new SizeAction(768, 1024, "XGA Portrait")));
final String s = trans.get("PhotoFrame.menu.window.size.portrait");
sizeMenu.add(new JMenuItem(new SizeAction(240, 320, s.replace("{0}", "QVGA"))));
sizeMenu.add(new JMenuItem(new SizeAction(480, 640, s.replace("{0}", "VGA"))));
sizeMenu.add(new JMenuItem(new SizeAction(768, 1024, s.replace("{0}", "XGA"))));
sizeMenu.addSeparator();

View File

@ -37,23 +37,26 @@ import net.sf.openrocket.gui.figure3d.photo.sky.builtin.Mountains;
import net.sf.openrocket.gui.figure3d.photo.sky.builtin.Orbit;
import net.sf.openrocket.gui.figure3d.photo.sky.builtin.Storm;
import net.sf.openrocket.gui.util.ColorConversion;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.StateChangeListener;
@SuppressWarnings("serial")
public class PhotoSettingsConfig extends JTabbedPane {
private final Translator trans = Application.getTranslator();
private static final JColorChooser colorChooser = new JColorChooser();
private class ColorActionListener implements ActionListener {
private final String valueName;
private final Object o;
ColorActionListener(final Object o, final String valueName) {
this.valueName = valueName;
this.o = o;
}
@Override
public void actionPerformed(ActionEvent colorClickEvent) {
try {
@ -63,7 +66,7 @@ public class PhotoSettingsConfig extends JTabbedPane {
Color awtColor = ColorConversion.toAwtColor(c);
colorChooser.setColor(awtColor);
JDialog d = JColorChooser.createDialog(PhotoSettingsConfig.this,
"Color Chooser", true, colorChooser, new ActionListener() {
trans.get("PhotoSettingsConfig.colorChooser.title"), true, colorChooser, new ActionListener() {
@Override
public void actionPerformed(ActionEvent okEvent) {
Color selected = colorChooser.getColor();
@ -82,29 +85,29 @@ public class PhotoSettingsConfig extends JTabbedPane {
}
}
}
public PhotoSettingsConfig(final PhotoSettings p) {
super();
setPreferredSize(new Dimension(240, 320));
final JButton sunLightColorButton = new JButton();
sunLightColorButton.setMaximumSize(new Dimension(35, 25));
final JButton skyColorButton = new JButton();
skyColorButton.setMaximumSize(new Dimension(35, 25));
final JButton smokeColorButton = new JButton();
smokeColorButton.setMaximumSize(new Dimension(35, 25));
final JButton flameColorButton = new JButton();
flameColorButton.setMaximumSize(new Dimension(35, 25));
p.addChangeListener(new StateChangeListener() {
{
stateChanged(null);
}
@Override
public void stateChanged(EventObject e) {
sunLightColorButton.setIcon(new ColorIcon(p.getSunlight()));
@ -117,97 +120,88 @@ public class PhotoSettingsConfig extends JTabbedPane {
skyColorButton.addActionListener(new ColorActionListener(p, "SkyColor"));
smokeColorButton.addActionListener(new ColorActionListener(p, "SmokeColor"));
flameColorButton.addActionListener(new ColorActionListener(p, "FlameColor"));
addTab("Orientation", new JPanel(new MigLayout("fill")) {
addTab(trans.get("PhotoSettingsConfig.tab.orientation"), new JPanel(new MigLayout("fill")) {
{
add(new StyledLabel("Rocket", Style.BOLD));
add(new StyledLabel(trans.get("PhotoSettingsConfig.lbl.rocket"), Style.BOLD));
add(new JSeparator(SwingConstants.HORIZONTAL), "span, wrap, growx");
add(new JLabel("Pitch"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.pitch")));
DoubleModel pitchModel = new DoubleModel(p, "Pitch", UnitGroup.UNITS_ANGLE);
add(new JSpinner(pitchModel.getSpinnerModel()), "w 40");
add(new UnitSelector(pitchModel), "wrap");
add(new JLabel("Yaw"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.yaw")));
DoubleModel yawModel = new DoubleModel(p, "Yaw", UnitGroup.UNITS_ANGLE);
add(new JSpinner(yawModel.getSpinnerModel()), "w 40");
add(new UnitSelector(yawModel), "wrap");
add(new JLabel("Roll"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.roll")));
DoubleModel rollModel = new DoubleModel(p, "Roll", UnitGroup.UNITS_ANGLE);
add(new JSpinner(rollModel.getSpinnerModel()), "w 40");
add(new UnitSelector(rollModel), "wrap");
add(new JLabel("Advance"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.advance")));
DoubleModel advanceModel = new DoubleModel(p, "Advance", UnitGroup.UNITS_LENGTH);
add(new JSpinner(advanceModel.getSpinnerModel()), "w 40");
add(new UnitSelector(advanceModel), "wrap");
add(new StyledLabel("Camera", Style.BOLD));
add(new StyledLabel(trans.get("PhotoSettingsConfig.lbl.camera"), Style.BOLD));
add(new JSeparator(SwingConstants.HORIZONTAL), "span, wrap, growx");
add(new JLabel("View Azimuth"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.vAz")));
DoubleModel viewAzModel = new DoubleModel(p, "ViewAz", UnitGroup.UNITS_ANGLE);
add(new JSpinner(viewAzModel.getSpinnerModel()), "w 40");
add(new UnitSelector(viewAzModel), "wrap");
add(new JLabel("View Altitude"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.vAlt")));
DoubleModel viewAltModle = new DoubleModel(p, "ViewAlt", UnitGroup.UNITS_ANGLE);
add(new JSpinner(viewAltModle.getSpinnerModel()), "w 40");
add(new UnitSelector(viewAltModle), "wrap");
add(new JLabel("View Distance"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.vDist")));
DoubleModel viewDistanceModel = new DoubleModel(p, "ViewDistance", UnitGroup.UNITS_LENGTH);
add(new JSpinner(viewDistanceModel.getSpinnerModel()), "w 40");
add(new UnitSelector(viewDistanceModel), "wrap");
add(new JLabel("FoV"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.fov")));
DoubleModel fovModel = new DoubleModel(p, "Fov", UnitGroup.UNITS_ANGLE);
add(new JSpinner(fovModel.getSpinnerModel()), "w 40");
add(new UnitSelector(fovModel), "wrap");
}
});
addTab("Environment", new JPanel(new MigLayout("fill")) {
addTab(trans.get("PhotoSettingsConfig.tab.environment"), new JPanel(new MigLayout("fill")) {
{
add(new StyledLabel("Light", Style.BOLD));
add(new StyledLabel(trans.get("PhotoSettingsConfig.lbl.light"), Style.BOLD));
add(new JSeparator(SwingConstants.HORIZONTAL), "span, wrap, growx");
add(new JLabel("Sun Light"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.sun")));
add(sunLightColorButton, "wrap");
add(new JLabel("Ambiance"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.amb")));
DoubleModel ambianceModel = new DoubleModel(p, "Ambiance", 100, UnitGroup.UNITS_NONE, 0, 100);
add(new JSpinner(ambianceModel.getSpinnerModel()), "wrap");
add(new JLabel("Light Azimuth"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.lightAz")));
DoubleModel lightAzModel = new DoubleModel(p, "LightAz", UnitGroup.UNITS_ANGLE);
add(new JSpinner(lightAzModel.getSpinnerModel()), "w 40");
add(new UnitSelector(lightAzModel), "wrap");
add(new JLabel("Light Altitude"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.lightAlt")));
DoubleModel lightAltModle = new DoubleModel(p, "LightAlt", UnitGroup.UNITS_ANGLE);
add(new JSpinner(lightAltModle.getSpinnerModel()), "wrap");
add(new StyledLabel("Sky", Style.BOLD));
add(new StyledLabel(trans.get("PhotoSettingsConfig.lbl.sky"), Style.BOLD));
add(new JSeparator(SwingConstants.HORIZONTAL), "span, wrap, growx");
add(new JLabel("Sky Color"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.skyColor")));
add(skyColorButton, "wrap");
add(new JLabel("Sky Image"));
add(new JComboBox(new DefaultComboBoxModel(new Object[] {
null,
Mountains.instance,
Meadow.instance,
Storm.instance,
Lake.instance,
Orbit.instance,
Miramar.instance
}) {
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.skyImage")));
add(new JComboBox(new DefaultComboBoxModel(new Object[] { null, Mountains.instance, Meadow.instance,
Storm.instance, Lake.instance, Orbit.instance, Miramar.instance }) {
}) {
{
addActionListener(new ActionListener() {
@ -223,14 +217,14 @@ public class PhotoSettingsConfig extends JTabbedPane {
}
}
});
setSelectedItem(p.getSky());
}
}, "wrap");
final JLabel creditLabel = new JLabel("Image Credit:");
final JLabel creditLabel = new JLabel(trans.get("PhotoSettingsConfig.lbl.skyCredit"));
add(creditLabel, "wrap");
final JTextArea credit = new JTextArea();
credit.setEditable(false);
credit.setCursor(null);
@ -238,7 +232,7 @@ public class PhotoSettingsConfig extends JTabbedPane {
credit.setFocusable(false);
credit.setFont(creditLabel.getFont());
add(credit, "span, gap left 10px");
final StateChangeListener skyChange = new StateChangeListener() {
@Override
public void stateChanged(EventObject e) {
@ -250,81 +244,74 @@ public class PhotoSettingsConfig extends JTabbedPane {
}
};
p.addChangeListener(skyChange);
skyChange.stateChanged(null);
}
});
addTab("Effects", new JPanel(new MigLayout("fill")) {
addTab(trans.get("PhotoSettingsConfig.tab.effects"), new JPanel(new MigLayout("fill")) {
{
add(new StyledLabel("Smoke & Flame", Style.BOLD));
add(new StyledLabel(trans.get("PhotoSettingsConfig.lbl.smokeFlame"), Style.BOLD));
add(new JSeparator(SwingConstants.HORIZONTAL), "span, wrap, growx");
add(new JLabel("Smoke"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.smoke")));
BooleanModel smokeModel = new BooleanModel(p, "Smoke");
add(new JCheckBox(smokeModel), "split 2, w 15");
add(smokeColorButton, "wrap");
smokeModel.addEnableComponent(smokeColorButton);
add(new JLabel("Smoke Opacity"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.smokeOpacity")));
DoubleModel smokeAlphaModel = new DoubleModel(p, "SmokeAlpha", 100, UnitGroup.UNITS_NONE, 0, 100);
JSpinner opacitySpinner = new JSpinner(smokeAlphaModel.getSpinnerModel());
add(opacitySpinner, "wrap");
smokeModel.addEnableComponent(opacitySpinner);
add(new JLabel("Flame"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.flame")));
BooleanModel fireModel = new BooleanModel(p, "Flame");
add(new JCheckBox(fireModel), "split 2, w 15");
add(flameColorButton, "wrap");
fireModel.addEnableComponent(flameColorButton);
add(new JLabel("Flame Aspect Ratio"));
DoubleModel flameAspectModel = new DoubleModel(p, "FlameAspectRatio", 100, UnitGroup.UNITS_NONE, 25, 250);
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.flameAspect")));
DoubleModel flameAspectModel = new DoubleModel(p, "FlameAspectRatio", 100, UnitGroup.UNITS_NONE, 25,
250);
JSpinner flameAspectSpinner = new JSpinner(flameAspectModel.getSpinnerModel());
add(flameAspectSpinner, "wrap");
fireModel.addEnableComponent(flameAspectSpinner);
add(new JLabel("Sparks"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.sparks")));
BooleanModel sparksModel = new BooleanModel(p, "Sparks");
JCheckBox sparksCheck = new JCheckBox(sparksModel);
add(sparksCheck, "wrap");
fireModel.addEnableComponent(sparksCheck);
add(new JLabel("Spark Concentration"));
DoubleModel sparkConcentrationModel = new DoubleModel(p, "SparkConcentration", 100, UnitGroup.UNITS_NONE, 0, 100);
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.sparkConcentration")));
DoubleModel sparkConcentrationModel = new DoubleModel(p, "SparkConcentration", 100,
UnitGroup.UNITS_NONE, 0, 100);
JSpinner sparkConcentrationSpinner = new JSpinner(sparkConcentrationModel.getSpinnerModel());
add(sparkConcentrationSpinner, "wrap");
sparksModel.addEnableComponent(sparkConcentrationSpinner);
add(new JLabel("Spark Weight"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.sparkWeight")));
DoubleModel sparkWeightModel = new DoubleModel(p, "SparkWeight", 100, UnitGroup.UNITS_NONE, 0, 100);
JSpinner sparkWeightSpinner = new JSpinner(sparkWeightModel.getSpinnerModel());
add(sparkWeightSpinner, "wrap");
sparksModel.addEnableComponent(sparkWeightSpinner);
add(new JLabel("Exhaust Scale"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.exhaustScale")));
DoubleModel exhaustScaleModel = new DoubleModel(p, "ExhaustScale", 100, UnitGroup.UNITS_NONE, 0, 1000);
add(new JSpinner(exhaustScaleModel.getSpinnerModel()), "wrap");
add(new StyledLabel("Effects", Style.BOLD));
add(new StyledLabel(trans.get("PhotoSettingsConfig.lbl.effects"), Style.BOLD));
add(new JSeparator(SwingConstants.HORIZONTAL), "span, wrap, growx");
add(new JLabel("Speed"));
add(new JLabel(trans.get("PhotoSettingsConfig.lbl.speed")));
add(new JCheckBox(new BooleanModel(p, "MotionBlurred")), "wrap");
}
});
}
}

View File

@ -686,8 +686,8 @@ public class BasicFrame extends JFrame {
});
menu.add(item);
item = new JMenuItem(trans.get("main.menu.analyze.photo"), KeyEvent.VK_P);
item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.analyze.photo.desc"));
item = new JMenuItem(trans.get("PhotoFrame.title"), KeyEvent.VK_P);
item.getAccessibleContext().setAccessibleDescription(trans.get("PhotoFrame.desc"));
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {