/*
* ProvinceEditorPanel.java
*
* Created on May 31, 2007, 2:29 PM
*/
package editor;
import eug.parser.EUGFileIO;
import eug.parser.ParserSettings;
import eug.shared.GenericObject;
import eug.shared.ObjectVariable;
import eug.specific.eu3.EU3History;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.swing.JCheckBox;
/**
*
* @author Michael Myers
*/
public class ProvinceEditorPanel extends javax.swing.JPanel {
private int provId;
private GenericObject provData;
private String date;
private static final List<String> techGroups = initGroups();
/**
* Tech group check boxes (for discoveries) are dynamically created based
* on data loaded from common/technology.txt . This map keeps track of them
* so that we can set them when we load province data.
*/
private final java.util.Map<String, JCheckBox> techGroupCheckBoxes =
new HashMap<String, JCheckBox>();
private static List<String> initGroups() {
final List<String> ret = new ArrayList<String>();
final GenericObject techFile =
EUGFileIO.load(Main.filenameResolver.resolveFilename("common/technology.txt"));
for (ObjectVariable var : techFile.getChild("groups").values) {
ret.add(var.varname);
}
return ret;
}
/** Creates new form ProvinceEditorPanel */
public ProvinceEditorPanel(int provId) {
date = "1453.1.1";
this.provId = provId;
loadData();
initComponents();
}
public int getProvId() {
return provId;
}
public void setProvId(int provId) {
this.provId = provId;
loadData();
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
loadData();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
private void initComponents() {
javax.swing.JPanel controlledByPanel;
javax.swing.JPanel coreOfPanel;
javax.swing.JPanel discoveredByPanel;
javax.swing.JComboBox jComboBox1;
javax.swing.JComboBox jComboBox2;
javax.swing.JTextField jTextField1;
javax.swing.JPanel ownedByPanel;
discoveredByPanel = new javax.swing.JPanel();
countryDiscoveriesTextField = new javax.swing.JTextField();
ownedByPanel = new javax.swing.JPanel();
jComboBox1 = new javax.swing.JComboBox();
controlledByPanel = new javax.swing.JPanel();
jComboBox2 = new javax.swing.JComboBox();
coreOfPanel = new javax.swing.JPanel();
jTextField1 = new javax.swing.JTextField();
discoveredByPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Discovered by"));
for (String group : techGroups) {
JCheckBox checkBox = new JCheckBox(group);
techGroupCheckBoxes.put(group, checkBox);
discoveredByPanel.add(checkBox);
}
countryDiscoveriesTextField.setPreferredSize(new java.awt.Dimension(200, 20));
discoveredByPanel.add(countryDiscoveriesTextField);
ownedByPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Owned by"));
javax.swing.GroupLayout ownedByPanelLayout = new javax.swing.GroupLayout(ownedByPanel);
ownedByPanel.setLayout(ownedByPanelLayout);
ownedByPanelLayout.setHorizontalGroup(
ownedByPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ownedByPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jComboBox1, 0, 63, Short.MAX_VALUE)
.addContainerGap())
);
ownedByPanelLayout.setVerticalGroup(
ownedByPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ownedByPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
controlledByPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Controlled by"));
javax.swing.GroupLayout controlledByPanelLayout = new javax.swing.GroupLayout(controlledByPanel);
controlledByPanel.setLayout(controlledByPanelLayout);
controlledByPanelLayout.setHorizontalGroup(
controlledByPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(controlledByPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jComboBox2, 0, 80, Short.MAX_VALUE)
.addContainerGap())
);
controlledByPanelLayout.setVerticalGroup(
controlledByPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(controlledByPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
coreOfPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Core of"));
javax.swing.GroupLayout coreOfPanelLayout = new javax.swing.GroupLayout(coreOfPanel);
coreOfPanel.setLayout(coreOfPanelLayout);
coreOfPanelLayout.setHorizontalGroup(
coreOfPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(coreOfPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 73, Short.MAX_VALUE)
.addContainerGap())
);
coreOfPanelLayout.setVerticalGroup(
coreOfPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(coreOfPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(discoveredByPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 336, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(ownedByPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(controlledByPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(coreOfPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(discoveredByPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(controlledByPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(coreOfPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(ownedByPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(140, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTextField countryDiscoveriesTextField;
// End of variables declaration//GEN-END:variables
private void loadData() {
clear();
String filename = Main.filenameResolver.getProvinceHistoryFile(provId);
if (filename == null) {
// must be terra incognita.
return;
}
provData = EUGFileIO.load(filename, ParserSettings.getDefaults().setPrintTimingInfo(false));
// Discoveries
List<String> discoveredBy = EU3History.getHistStrings(provData, "discovered_by", date);
for (String groupOrTag : discoveredBy) {
if (!groupOrTag.matches("\\w{3}")) {
// not a tag, so it must be a tech group
JCheckBox box = techGroupCheckBoxes.get(groupOrTag);
if (box != null) {
box.setSelected(true);
} else {
System.out.println("Can't find checkbox for group " + groupOrTag);
}
} else {
String text = countryDiscoveriesTextField.getText();
if (text.length() == 0 || text.endsWith(" ")) {
countryDiscoveriesTextField.setText(text + groupOrTag);
} else {
countryDiscoveriesTextField.setText(text + " " + groupOrTag);
}
}
}
}
private void clear() {
for (JCheckBox box : techGroupCheckBoxes.values()) {
box.setSelected(false);
}
if (countryDiscoveriesTextField != null)
countryDiscoveriesTextField.setText("");
}
}