/******************************************************************************* * Copyright (c) 2015 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *******************************************************************************/ package jsettlers.mapcreator.main.window; import java.util.Date; import javax.swing.GroupLayout; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.SpinnerNumberModel; import jsettlers.common.CommonConstants; import jsettlers.logic.map.loading.newmap.MapFileHeader; import jsettlers.logic.map.loading.newmap.MapFileHeader.MapType; import jsettlers.mapcreator.localization.EditorLabels; /** * This dialog edits the map header. * * @author michael */ public class MapHeaderEditorPanel extends JPanel { private static final long serialVersionUID = 1L; private static final int DEFAULT_MAPSIZE = 300; private static final int MIN_MAPSIZE = 100; private static final int MAX_MAPSIZE = 2000; private SpinnerNumberModel width; private SpinnerNumberModel height; private SpinnerNumberModel minPlayer; private SpinnerNumberModel maxPlayer; /** * Text field with the map name */ private JTextField nameField; private JTextArea descriptionField; /** * Constructor * * @param header * Header to display * @param sizeChangable * If the size is editable or not */ public MapHeaderEditorPanel(MapFileHeader header, boolean sizeChangable) { generate(sizeChangable); setHeader(header); } private void generate(boolean sizeChangable) { nameField = new JTextField(); descriptionField = new JTextArea(5, 40); descriptionField.setLineWrap(true); descriptionField.setWrapStyleWord(true); width = new SpinnerNumberModel(DEFAULT_MAPSIZE, MIN_MAPSIZE, MAX_MAPSIZE, 1); height = new SpinnerNumberModel(DEFAULT_MAPSIZE, MIN_MAPSIZE, MAX_MAPSIZE, 1); minPlayer = new SpinnerNumberModel(1, 1, CommonConstants.MAX_PLAYERS, 1); maxPlayer = new SpinnerNumberModel(1, 1, CommonConstants.MAX_PLAYERS, 1); JSpinner widthField = new JSpinner(width); JSpinner heightField = new JSpinner(height); JSpinner minPlayerField = new JSpinner(minPlayer); JSpinner maxPlayerField = new JSpinner(maxPlayer); JLabel nameLabel = new JLabel(EditorLabels.getLabel("header.map-name")); JLabel descriptionLabel = new JLabel(EditorLabels.getLabel("header.map-description")); JLabel widthLabel = new JLabel(EditorLabels.getLabel("header.width")); JLabel heightLabel = new JLabel(EditorLabels.getLabel("header.height")); JLabel minPlayerLabel = new JLabel(EditorLabels.getLabel("header.map-min-player")); JLabel maxPlayerLabel = new JLabel(EditorLabels.getLabel("header.map-max-player")); add(nameField); add(descriptionField); add(heightField); add(widthField); add(minPlayerField); add(maxPlayerField); add(nameLabel); add(descriptionLabel); add(widthLabel); add(heightLabel); add(maxPlayerLabel); add(minPlayerLabel); GroupLayout layout = new GroupLayout(this); setLayout(layout); layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); // @formatter:off layout.setHorizontalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup() .addComponent(nameLabel) .addComponent(descriptionLabel) .addComponent(heightLabel) .addComponent(widthLabel) .addComponent(maxPlayerLabel) .addComponent(minPlayerLabel)) .addGroup(layout.createParallelGroup() .addComponent(nameField) .addComponent(descriptionField) .addComponent(heightField) .addComponent(widthField) .addComponent(maxPlayerField) .addComponent(minPlayerField))); layout.setVerticalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup() .addComponent(nameLabel) .addComponent(nameField)) .addGroup(layout.createParallelGroup() .addComponent(descriptionLabel) .addComponent(descriptionField)) .addGroup(layout.createParallelGroup() .addComponent(widthLabel) .addComponent(widthField)) .addGroup(layout.createParallelGroup() .addComponent(heightLabel) .addComponent(heightField)) .addGroup(layout.createParallelGroup() .addComponent(minPlayerLabel) .addComponent(minPlayerField)) .addGroup(layout.createParallelGroup() .addComponent(maxPlayerLabel) .addComponent(maxPlayerField))); // @formatter:on if (!sizeChangable) { widthField.setEnabled(false); heightField.setEnabled(false); } } /** * @return Text field with the map name */ public JTextField getNameField() { return nameField; } /** * Load and display a map header * * @param header * Header */ public void setHeader(MapFileHeader header) { nameField.setText(header.getName()); descriptionField.setText(header.getDescription()); width.setValue(Integer.valueOf(header.getWidth())); height.setValue(Integer.valueOf(header.getHeight())); minPlayer.setValue(Integer.valueOf(header.getMinPlayers())); maxPlayer.setValue(Integer.valueOf(header.getMaxPlayers())); } /** * Gets a new header from inputfields * * @return Header */ public MapFileHeader getHeader() { String name = nameField.getText(); String description = descriptionField.getText(); short width = this.width.getNumber().shortValue(); short height = this.height.getNumber().shortValue(); short minPlayer = this.minPlayer.getNumber().shortValue(); short maxPlayer = this.maxPlayer.getNumber().shortValue(); return new MapFileHeader(MapType.NORMAL, name, null, description, width, height, minPlayer, maxPlayer, new Date(), new short[MapFileHeader.PREVIEW_IMAGE_SIZE * MapFileHeader.PREVIEW_IMAGE_SIZE]); } }