--- /dev/null
+package tim.prune.gui;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import tim.prune.I18nManager;
+import tim.prune.config.Config;
+import tim.prune.threedee.TerrainDefinition;
+
+/**
+ * Gui component for defining the 3d terrain,
+ * including whether to use one or not, and if so
+ * what resolution to use for the grid
+ */
+public class TerrainDefinitionPanel extends JPanel
+{
+ /** Checkbox to use a terrain or not */
+ private JCheckBox _useCheckbox = null;
+ /** Field for entering the grid size */
+ private WholeNumberField _gridSizeField = null;
+
+
+ /**
+ * Constructor
+ */
+ public TerrainDefinitionPanel()
+ {
+ setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
+ // Components
+ _useCheckbox = new JCheckBox(I18nManager.getText("dialog.3d.useterrain"));
+ _useCheckbox.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent arg0) {
+ activateGridField();
+ }
+ });
+ add(_useCheckbox);
+ add(Box.createHorizontalGlue());
+ JLabel label = new JLabel(I18nManager.getText("dialog.3d.terraingridsize") + ": ");
+ add(label);
+ _gridSizeField = new WholeNumberField(4);
+ _gridSizeField.setValue(Config.getConfigInt(Config.KEY_TERRAIN_GRID_SIZE)); // default grid size
+ _gridSizeField.setMaximumSize(new Dimension(100, 50));
+ _gridSizeField.setEnabled(false);
+ add(_gridSizeField);
+ }
+
+ /**
+ * @param inDefinition terrain parameters to set
+ */
+ public void initTerrainParameters(TerrainDefinition inDefinition)
+ {
+ _useCheckbox.setSelected(inDefinition != null && inDefinition.getUseTerrain());
+ if (inDefinition != null && inDefinition.getGridSize() > 0) {
+ _gridSizeField.setValue(inDefinition.getGridSize());
+ }
+ activateGridField();
+ }
+
+ /**
+ * @return true if the terrain is selected
+ */
+ public boolean getUseTerrain() {
+ return _useCheckbox.isSelected() && getGridSize() > 2;
+ }
+
+ /**
+ * @return number of nodes along each side of the grid
+ */
+ public int getGridSize() {
+ return _gridSizeField.getValue();
+ }
+
+ /**
+ * Set the grid field to be enabled or not based on the checkbox
+ */
+ private void activateGridField() {
+ _gridSizeField.setEnabled(_useCheckbox.isSelected());
+ }
+}