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()); } }