package tools.map.xml.creator;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import games.strategy.ui.SwingAction;
import games.strategy.ui.Util;
import tools.image.FileOpen;
public class MapPropertiesPanel {
public static void layout(final MapXmlCreator mapXmlCreator) {
if (!MapXmlHelper.getXmlStringsMap().containsKey("info_@name")) {
for (final String newKey : new String[] {"info_@name", "info_@version"}) {
MapXmlHelper.putXmlStrings(newKey, "");
}
}
if (MapXmlHelper.getResourceList().isEmpty()) {
MapXmlHelper.addResourceList("");
}
final JTextField textFieldMapName = new JTextField(MapXmlHelper.getXmlStringsMap().get("info_@name"));
final JTextField textFieldMapVersion = new JTextField(MapXmlHelper.getXmlStringsMap().get("info_@version"));
final JTextField textFieldResourceName = new JTextField(MapXmlHelper.getResourceList().get(0));
final JTextField textFieldMapImageFile =
new JTextField((MapXmlCreator.mapImageFile == null ? "" : MapXmlCreator.mapImageFile.getAbsolutePath()));
final JTextField textFieldCentersFile = new JTextField(
(MapXmlCreator.mapCentersFile == null ? "" : MapXmlCreator.mapCentersFile.getAbsolutePath()));
final JTextField textFieldWaterFilter = new JTextField(MapXmlCreator.waterFilterString);
final JLabel labelMapName = new JLabel("Map Name:");
final JLabel labelMapNameExample = new JLabel("e.g. 'Revised'");
final JLabel labelMapVersion = new JLabel("Map Version:");
final JLabel labelMapVersionExample = new JLabel("e.g. '1.2.0.1'");
final JLabel labelResourceName = new JLabel("Resource Name:");
final JLabel labelResourceNameExample = new JLabel("e.g. 'PUs'");
final JLabel labelMapImageFile = new JLabel("Map Image File:");
final JButton buttonSelectMapImageFile = new JButton("Browse");
final JLabel labelCentersFile = new JLabel("Map Centers File:");
final JButton buttonSelectCentersFile = new JButton("Browse");
final JLabel labelWaterFilter = new JLabel("Water Territory Filter");
final JLabel labelWaterFilterExample = new JLabel("e.g. '" + Util.TERRITORY_SEA_ZONE_INFIX + "'");
final GridBagLayout gridBadConstLabelPanel = new GridBagLayout();
gridBadConstLabelPanel.rowHeights = getRowHeights();
gridBadConstLabelPanel.rowWeights = getRowWeights();
final JPanel stepActionPanel = mapXmlCreator.getStepActionPanel();
stepActionPanel.setLayout(gridBadConstLabelPanel);
// Map Name
final GridBagConstraints gridBadConstLabelMapName = new GridBagConstraints();
gridBadConstLabelMapName.insets = new Insets(0, 0, 5, 5);
gridBadConstLabelMapName.anchor = GridBagConstraints.NORTHEAST;
gridBadConstLabelMapName.gridheight = 32;
gridBadConstLabelMapName.gridy = 1;
gridBadConstLabelMapName.gridx = 0;
stepActionPanel.add(labelMapName, gridBadConstLabelMapName);
textFieldMapName.addFocusListener(FocusListenerFocusLost
.withAction(() -> MapXmlHelper.putXmlStrings("info_@name", textFieldMapName.getText())));
textFieldMapName.setMaximumSize(new Dimension(0, 0));
final int columns = 30;
textFieldMapName.setColumns(columns);
final GridBagConstraints gridBadConstTextFieldMapName = (GridBagConstraints) gridBadConstLabelMapName.clone();
gridBadConstTextFieldMapName.anchor = GridBagConstraints.NORTH;
gridBadConstTextFieldMapName.gridx = 1;
textFieldMapName.setMaximumSize(textFieldMapName.getPreferredSize());
stepActionPanel.add(textFieldMapName, gridBadConstTextFieldMapName);
final GridBagConstraints gridBadConstLabelMapNameExample = (GridBagConstraints) gridBadConstLabelMapName.clone();
gridBadConstLabelMapNameExample.anchor = GridBagConstraints.NORTHWEST;
gridBadConstLabelMapNameExample.gridx = 2;
stepActionPanel.add(labelMapNameExample, gridBadConstLabelMapNameExample);
// Map Version
stepActionPanel.add(labelMapVersion, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapName, 2, 2));
textFieldMapVersion.addFocusListener(FocusListenerFocusLost
.withAction(() -> MapXmlHelper.putXmlStrings("info_@version", textFieldMapVersion.getText())));
textFieldMapVersion.setMaximumSize(new Dimension(0, 0));
textFieldMapVersion.setColumns(columns);
stepActionPanel.add(textFieldMapVersion, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapName, 1, 2));
stepActionPanel.add(labelMapVersionExample, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapNameExample, 2, 2));
// Resource Name
stepActionPanel.add(labelResourceName, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapName, 0, 3));
textFieldResourceName.addFocusListener(FocusListenerFocusLost
.withAction(() -> MapXmlHelper.addResourceList(0, textFieldResourceName.getText())));
textFieldResourceName.setMaximumSize(new Dimension(0, 0));
textFieldResourceName.setColumns(columns);
stepActionPanel.add(textFieldResourceName, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapName, 1, 3));
stepActionPanel.add(labelResourceNameExample,
MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapNameExample, 2, 3));
// Map Image File
stepActionPanel.add(labelMapImageFile, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapName, 0, 4));
textFieldMapImageFile.setEnabled(false);
textFieldMapImageFile.setMaximumSize(new Dimension(0, 0));
textFieldMapImageFile.setColumns(columns);
textFieldMapImageFile.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
buttonSelectMapImageFile.doClick();
}
});
stepActionPanel.add(textFieldMapImageFile, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapName, 1, 4));
buttonSelectMapImageFile.addActionListener(SwingAction.of("Select Map Image File", e -> {
selectMapImageFile();
if (MapXmlCreator.mapImageFile != null) {
textFieldMapImageFile.setText(MapXmlCreator.mapImageFile.getAbsolutePath());
if (MapXmlCreator.mapFolderLocation != null && MapXmlCreator.mapCentersFile == null) {
final File fileGuess = new File(MapXmlCreator.mapFolderLocation, "centers.txt");
if (fileGuess.exists()
&& JOptionPane.showConfirmDialog(new JPanel(),
"A centers.txt file was found in the map's folder, do you want to use the file to supply the "
+ "territories names?",
"File Suggestion", 1) == 0) {
MapXmlCreator.mapCentersFile = fileGuess;
textFieldCentersFile.setText(MapXmlCreator.mapCentersFile.getAbsolutePath());
textFieldWaterFilter.setEnabled(true);
}
}
if (MapXmlCreator.mapImageFile != null && textFieldMapName.getText().isEmpty()) {
String mapFileName = MapXmlCreator.mapImageFile.getName();
mapFileName = mapFileName.substring(0, mapFileName.lastIndexOf("."));
textFieldMapName.setText(mapFileName);
MapXmlHelper.putXmlStrings("info_@name", mapFileName);
}
}
}));
stepActionPanel.add(buttonSelectMapImageFile,
MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapNameExample, 2, 4));
// Map Centers File
stepActionPanel.add(labelCentersFile, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapName, 0, 5));
textFieldCentersFile.setEnabled(false);
textFieldCentersFile.setMaximumSize(new Dimension(0, 0));
textFieldCentersFile.setColumns(columns);
textFieldCentersFile.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
buttonSelectCentersFile.doClick();
}
});
stepActionPanel.add(textFieldCentersFile, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapName, 1, 5));
buttonSelectCentersFile.addActionListener(SwingAction.of("Select Centers File", e -> {
selectCentersFile();
if (MapXmlCreator.mapCentersFile != null) {
textFieldWaterFilter.setEnabled(true);
}
}));
stepActionPanel.add(buttonSelectCentersFile, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapNameExample, 2, 5));
// Water Territory Filter
stepActionPanel.add(labelWaterFilter,
MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapName, 0, 6, GridBagConstraints.NORTHWEST));
textFieldWaterFilter.setEnabled(MapXmlCreator.mapCentersFile != null);
textFieldWaterFilter.addFocusListener(
FocusListenerFocusLost.withAction(() -> MapXmlCreator.waterFilterString = textFieldWaterFilter.getText()));
textFieldWaterFilter.setColumns(columns);
textFieldWaterFilter.setMaximumSize(textFieldWaterFilter.getPreferredSize());
stepActionPanel.add(textFieldWaterFilter, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapName, 1, 6));
stepActionPanel.add(labelWaterFilterExample, MapXmlUIHelper.getGBCCloneWith(gridBadConstLabelMapNameExample, 2, 6));
mapXmlCreator.setAutoFillActionListener(null);
}
private static double[] getRowWeights() {
return new double[] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
}
private static int[] getRowHeights() {
return new int[] {32, 32, 32, 32, 32, 32, 32, 0};
}
public static void selectCentersFile() {
final FileOpen centersSelection = new FileOpen("Select center.txte File", MapXmlCreator.mapImageFile, ".txt");
if (centersSelection.getFile() != null) {
final File mapCentersFile = centersSelection.getFile();
if (mapCentersFile.exists()) {
if (MapXmlCreator.mapFolderLocation == null) {
MapXmlCreator.mapFolderLocation = mapCentersFile.getParentFile();
System.setProperty(MapXmlCreator.TRIPLEA_MAP_FOLDER, MapXmlCreator.mapFolderLocation.getPath());
}
MapXmlCreator.mapCentersFile = mapCentersFile;
}
}
}
public static void selectMapImageFile() {
final FileOpen mapSelection = new FileOpen("Select Map Image File", MapXmlCreator.mapImageFile, ".gif", ".png");
if (mapSelection.getFile() != null) {
final File mapImageFile = mapSelection.getFile();
if (mapImageFile.exists()) {
if (MapXmlCreator.mapFolderLocation == null) {
MapXmlCreator.mapFolderLocation = mapImageFile.getParentFile();
System.setProperty(MapXmlCreator.TRIPLEA_MAP_FOLDER, MapXmlCreator.mapFolderLocation.getPath());
}
MapXmlCreator.mapImageFile = mapImageFile;
}
}
}
}