package com.buttware.eu3view;
import editor.mapmode.CountryMode;
import editor.mapmode.CtryReligionMode;
import editor.mapmode.CustomMode;
import editor.mapmode.DiscreteScalingMapMode;
import editor.mapmode.MapMode;
import editor.mapmode.OwnerControllerMode;
import editor.mapmode.ReligionMode;
import eug.parser.EUGFileIO;
import eug.parser.ParserSettings;
import eug.shared.GenericObject;
import eug.specific.eu3.EU3SaveGame;
import java.io.File;
import java.io.FileNotFoundException;
import java.text.NumberFormat;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
public class EU3View extends javax.swing.JFrame {
private String startYear = "1399";
private String endYear = "1820";
private EU3SaveGame save = null;
private static final ParserSettings defaultSettings =
ParserSettings.getNoCommentSettings().setPrintTimingInfo(false);
public EU3View() {
initComponents();
if (new File(Main.filenameResolver.resolveFilename("common/faction.txt")).exists()) {
// DW
jComboBox1.setSelectedIndex(2); // bigger map
}
}
/** 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() {
loadFromField = new javax.swing.JTextField();
loadBrowseButton = new javax.swing.JButton();
modeComboBox = new javax.swing.JComboBox();
showBordersCheckbox = new javax.swing.JCheckBox();
jLabel1 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
startYearField = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
endYearField = new javax.swing.JTextField();
resetButton = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
yearIntervalField = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
frameDelayField = new javax.swing.JTextField();
jLabel8 = new javax.swing.JLabel();
renderToField = new javax.swing.JTextField();
renderBrowseButton = new javax.swing.JButton();
renderButton = new javax.swing.JButton();
jComboBox1 = new javax.swing.JComboBox();
jLabel2 = new javax.swing.JLabel();
showDateCheckbox = new javax.swing.JCheckBox();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("EU3View 1.1");
loadFromField.setText(Main.filenameResolver.getModDirName() + "save games");
loadBrowseButton.setText("Browse");
loadBrowseButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
loadBrowseButtonActionPerformed(evt);
}
});
modeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Country", "Owner/Controller", "Religion", "State religion", "Tax value", "Manpower", "Population", "Native size", "Centers of trade" }));
showBordersCheckbox.setText("Show borders");
jLabel1.setText("Scale:");
jLabel3.setText("Years:");
startYearField.setEditable(false);
startYearField.setText("1399");
jLabel4.setText("to");
endYearField.setEditable(false);
endYearField.setText("1820");
resetButton.setText("Reset");
resetButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
resetButtonActionPerformed(evt);
}
});
jLabel5.setText("Year interval:");
yearIntervalField.setText("1");
jLabel6.setText("Frame delay:");
frameDelayField.setText("200");
jLabel8.setText("Render to:");
renderBrowseButton.setText("Browse");
renderBrowseButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
renderBrowseButtonActionPerformed(evt);
}
});
renderButton.setText("Render");
renderButton.setEnabled(false);
renderButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
renderButtonActionPerformed(evt);
}
});
jComboBox1.setEditable(true);
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "6.25%", "12.5%", "25%", "33.333%", "50%", "66.666%", "100%", "200%", "400%" }));
jComboBox1.setSelectedIndex(4);
jComboBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox1ActionPerformed(evt);
}
});
jLabel2.setText("milliseconds");
showDateCheckbox.setSelected(true);
showDateCheckbox.setText("Show date");
jMenu1.setText("Help");
jMenuItem1.setText("About");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(showDateCheckbox)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(modeComboBox, 0, 199, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(showBordersCheckbox)
.addGap(33, 33, 33))
.addGroup(layout.createSequentialGroup()
.addComponent(loadFromField, javax.swing.GroupLayout.DEFAULT_SIZE, 358, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
.addComponent(loadBrowseButton))
.addComponent(jLabel8)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(renderToField, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(renderBrowseButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(renderButton))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel6)
.addComponent(jLabel5))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(yearIntervalField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 99, Short.MAX_VALUE)
.addComponent(frameDelayField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 99, Short.MAX_VALUE))
.addGap(7, 7, 7))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jComboBox1, 0, 0, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(startYearField, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(3, 3, 3)
.addComponent(jLabel4)
.addGap(4, 4, 4)
.addComponent(endYearField, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(resetButton))
.addGap(151, 151, 151)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(loadBrowseButton)
.addComponent(loadFromField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(modeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(showBordersCheckbox))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(resetButton)
.addComponent(jLabel4)
.addComponent(startYearField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(endYearField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel5)
.addComponent(yearIntervalField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(frameDelayField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(showDateCheckbox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(renderButton)
.addComponent(renderBrowseButton)
.addComponent(renderToField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed
startYearField.setText(startYear);
endYearField.setText(endYear);
}//GEN-LAST:event_resetButtonActionPerformed
private void renderBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_renderBrowseButtonActionPerformed
JFileChooser f = new JFileChooser(renderToField.getText());
File fi = new File(renderToField.getText());
if(fi.isDirectory()) {
f.setCurrentDirectory(fi);
}
else {
f.setSelectedFile(fi);
}
f.setDialogTitle("Render To File");
class GIFFileFilter extends FileFilter {
public boolean accept(File f) {
if (f.isDirectory()) return true;
return f.getName().toLowerCase().endsWith("gif");
}
public String getDescription()
{
return "GIF files";
}
}
f.addChoosableFileFilter(new GIFFileFilter());
f.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = f.showSaveDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
fi = f.getSelectedFile();
String s = fi.getPath();
if(!s.equals("")) {
if (!s.endsWith(".gif")) {
s = s + ".gif";
}
renderToField.setText(s);
}
}
}//GEN-LAST:event_renderBrowseButtonActionPerformed
private void renderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_renderButtonActionPerformed
try {
if (save == null) {
JOptionPane.showMessageDialog(null, "nothing loaded", "nothing loaded", JOptionPane.ERROR_MESSAGE);
return;
}
int start = Integer.parseInt(startYearField.getText());
if(start < Integer.parseInt(startYear)) {
JOptionPane.showMessageDialog(null, "too early", "too early", JOptionPane.ERROR_MESSAGE);
return;
}
int end = Integer.parseInt(endYearField.getText());
if(end > Integer.parseInt(endYear)) {
JOptionPane.showMessageDialog(null, "too late", "too late", JOptionPane.ERROR_MESSAGE);
return;
}
int interval = Integer.parseInt(yearIntervalField.getText());
if(interval <= 0) {
JOptionPane.showMessageDialog(null, "too small of an interval", "too small of an interval", JOptionPane.ERROR_MESSAGE);
return;
}
int delay = Integer.parseInt(frameDelayField.getText());
if(delay <= 0) {
JOptionPane.showMessageDialog(null, "too small of a delay", "too small of a delay", JOptionPane.ERROR_MESSAGE);
return;
}
String sc = jComboBox1.getSelectedItem().toString();
double scale = NumberFormat.getPercentInstance().parse(sc).doubleValue();
boolean showBorders = showBordersCheckbox.isSelected();
String renderTo = renderToField.getText();
MapMode m = new CountryMode();
Object s = modeComboBox.getSelectedItem();
if(s.equals("Religion")) {
m = new ReligionMode();
} else if(s.equals("State religion")) {
m = new CtryReligionMode();
} else if(s.equals("Owner/Controller")) {
m = new OwnerControllerMode();
} else if(s.equals("Tax value")) {
m = new DiscreteScalingMapMode("base_tax", 0, 18, 1);
} else if(s.equals("Manpower")) {
m = new DiscreteScalingMapMode("manpower", 0, 10, 1);
} else if(s.equals("Population")) {
m = new DiscreteScalingMapMode("citysize", 0, 900000, 20000);
} else if(s.equals("Native size")) {
m = new DiscreteScalingMapMode("native_size", 0, 100, 1);
} else if(s.equals("Centers of trade")) {
m = new CustomMode("cot", "yes");
System.out.println("OM");
}
boolean showDate = showDateCheckbox.isSelected();
Render.render(save, start, end, interval, delay, showBorders, renderTo, m, scale, showDate);
}
catch (Exception e) {
e.printStackTrace();
}
}//GEN-LAST:event_renderButtonActionPerformed
private void loadBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadBrowseButtonActionPerformed
JFileChooser f = new JFileChooser(loadFromField.getText());
File fi = new File(loadFromField.getText());
if(fi.isDirectory()) {
f.setCurrentDirectory(fi);
}
else {
f.setSelectedFile(fi);
}
class SaveGameFileFilter extends javax.swing.filechooser.FileFilter {
public boolean accept(File f) {
return f.isDirectory() || f.getName().toLowerCase().endsWith(".eu3");
}
public String getDescription() {
return "Europa Universalis 3 saved game files";
}
}
f.addChoosableFileFilter(new SaveGameFileFilter());
f.setDialogTitle("Open File");
f.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = f.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
fi = f.getSelectedFile();
loadFromField.setText(fi.getPath());
save = EU3SaveGame.loadSaveGame(fi.getPath(), Main.filenameResolver);
//get date stuff
String[] date = save.getDate().split("\\.");
endYear = date[0];
endYearField.setText(endYear);
endYearField.setEditable(true);
GenericObject defines =
EUGFileIO.load(Main.filenameResolver.resolveFilename("common/defines.txt"), defaultSettings);
if(defines.contains("start_date")) {
String sd = defines.getString("start_date");
int dotpos = sd.indexOf("."); // dates are in format 1399.10.14
startYear = sd.substring(0, dotpos);
} else if (defines.containsChild("start_date")) {
startYear = Integer.toString(defines.getChild("start_date").getInt("year"));
} else { //not In Nomine
startYear = "1453";
}
startYearField.setText(startYear);
startYearField.setEditable(true);
renderButton.setEnabled(true);
}
}//GEN-LAST:event_loadBrowseButtonActionPerformed
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
new AboutDialog().setVisible(true);
}//GEN-LAST:event_jMenuItem1ActionPerformed
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBox1ActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_jComboBox1ActionPerformed
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new EU3View().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTextField endYearField;
private javax.swing.JTextField frameDelayField;
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel8;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JButton loadBrowseButton;
private javax.swing.JTextField loadFromField;
private javax.swing.JComboBox modeComboBox;
private javax.swing.JButton renderBrowseButton;
private javax.swing.JButton renderButton;
private javax.swing.JTextField renderToField;
private javax.swing.JButton resetButton;
private javax.swing.JCheckBox showBordersCheckbox;
private javax.swing.JCheckBox showDateCheckbox;
private javax.swing.JTextField startYearField;
private javax.swing.JTextField yearIntervalField;
// End of variables declaration//GEN-END:variables
}