/*
* ResolveScenarioWizardDialog.java
*
* Copyright (c) 2009 Jay Lawson <jaylawson39 at yahoo.com>. All rights reserved.
*
* This file is part of MekHQ.
*
* MekHQ is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MekHQ is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MekHQ. If not, see <http://www.gnu.org/licenses/>.
*/
package mekhq.gui.dialog;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.ResourceBundle;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import megamek.client.ui.Messages;
import megamek.client.ui.swing.UnitEditorDialog;
import megamek.client.ui.swing.MechViewPanel;
import megamek.common.Entity;
import megamek.common.GunEmplacement;
import megamek.common.util.EncodeControl;
import mekhq.Utilities;
import mekhq.campaign.ResolveScenarioTracker;
import mekhq.campaign.ResolveScenarioTracker.PersonStatus;
import mekhq.campaign.ResolveScenarioTracker.PrisonerStatus;
import mekhq.campaign.ResolveScenarioTracker.UnitStatus;
import mekhq.campaign.mission.AtBScenario;
import mekhq.campaign.mission.Contract;
import mekhq.campaign.mission.Loot;
import mekhq.campaign.mission.Scenario;
import mekhq.campaign.unit.TestUnit;
import mekhq.campaign.unit.Unit;
/**
*
* @author Taharqa
*/
public class ResolveScenarioWizardDialog extends JDialog {
private static final long serialVersionUID = -8038099101234445018L;
final static String UNITSPANEL = "Unit Status";
final static String PILOTPANEL = "Pilot Status";
final static String SALVAGEPANEL = "Claim Salvage";
final static String PRISONERPANEL= "Captured Personnel Status";
final static String KILLPANEL = "Assign Kills";
final static String REWARDPANEL = "Collect Rewards";
final static String PREVIEWPANEL = "Preview";
/* Used by AtB to determine minor contract breaches and bonus rolls */
final static String ALLYPANEL = "Ally Status";
final static String[] panelOrder = {UNITSPANEL,ALLYPANEL,PILOTPANEL,SALVAGEPANEL,PRISONERPANEL,KILLPANEL,REWARDPANEL,PREVIEWPANEL};
private JFrame frame;
private ResolveScenarioTracker tracker;
private javax.swing.JPanel panButtons;
private javax.swing.JButton btnCancel;
private javax.swing.JButton btnNext;
private javax.swing.JButton btnFinish;
private javax.swing.JButton btnBack;
private javax.swing.JTextArea txtInstructions;
private CardLayout cardLayout;
private String currentPanel;
private JScrollPane scrMain;
private JPanel pnlMain;
private JPanel pnlUnitStatus;
private JPanel pnlAllyStatus;
private JPanel pnlPilotStatus;
private JPanel pnlSalvage;
private JPanel pnlPrisonerStatus;
private JPanel pnlKills;
private JPanel pnlRewards;
private JPanel pnlPreview;
/*
* Unit status panel components
*/
private ArrayList<JCheckBox> chksTotaled;
private ArrayList<JButton> btnsViewUnit;
private ArrayList<JButton> btnsEditUnit;
private ArrayList<UnitStatus> ustatuses;
private ArrayList<JLabel> lblsUnitName;
/*
* Ally status panel components
*/
private ArrayList<JCheckBox> chksAllyLost;
/*
* Pilot status panel components
*/
private ArrayList<JCheckBox> miaBtns = new ArrayList<JCheckBox>();
private ArrayList<JSlider> hitSliders = new ArrayList<JSlider>();
private ArrayList<PersonStatus> pstatuses = new ArrayList<PersonStatus>();
/*
* Prisoner status panel components
*/
private ArrayList<JCheckBox> prisonerBtns = new ArrayList<JCheckBox>();
private ArrayList<JSlider> pr_hitSliders = new ArrayList<JSlider>();
private ArrayList<PrisonerStatus> prstatuses = new ArrayList<PrisonerStatus>();
/*
* Salvage panel components
*/
private ArrayList<JCheckBox> salvageBoxes;
private ArrayList<JCheckBox> escapeBoxes;
private ArrayList<Unit> salvageables;
private ArrayList<JButton> btnsSalvageViewUnit;
private ArrayList<JButton> btnsSalvageEditUnit;
private JLabel lblSalvageValueUnit1;
private JLabel lblSalvageValueEmployer1;
private JLabel lblSalvagePct1;
private JLabel lblSalvageValueUnit2;
private JLabel lblSalvageValueEmployer2;
private JLabel lblSalvagePct2;
private long salvageEmployer;
private long salvageUnit;
private int currentSalvagePct;
private int maxSalvagePct;
DecimalFormat formatter;
/*
* Assign Kills components
*/
private Hashtable<String, JComboBox<String>> killChoices;
/*
* Collect Rewards components
*/
private ArrayList<JCheckBox> lootBoxes;
private ArrayList<Loot> loots;
/*
* Preview Panel components
*/
private javax.swing.JComboBox<String> choiceStatus;
private javax.swing.JScrollPane scrReport;
private javax.swing.JScrollPane scrRecoveredUnits;
private javax.swing.JScrollPane scrRecoveredPilots;
private javax.swing.JScrollPane scrMissingUnits;
private javax.swing.JScrollPane scrMissingPilots;
private javax.swing.JScrollPane scrDeadPilots;
private javax.swing.JScrollPane scrSalvage;
private javax.swing.JTextArea txtReport;
private javax.swing.JTextArea txtRecoveredUnits;
private javax.swing.JTextArea txtRecoveredPilots;
private javax.swing.JTextArea txtMissingUnits;
private javax.swing.JTextArea txtMissingPilots;
private javax.swing.JTextArea txtDeadPilots;
private javax.swing.JTextArea txtSalvage;
private javax.swing.JTextArea txtRewards;
private javax.swing.JLabel lblStatus;
public ResolveScenarioWizardDialog(JFrame parent, boolean modal, ResolveScenarioTracker t) {
super(parent, modal);
this.frame = parent;
this.tracker = t;
loots = tracker.getPotentialLoot();
salvageables = new ArrayList<Unit>();
if(tracker.getMission() instanceof Contract) {
salvageEmployer = ((Contract)tracker.getMission()).getSalvagedByEmployer();
salvageUnit = ((Contract)tracker.getMission()).getSalvagedByUnit();
maxSalvagePct = ((Contract)tracker.getMission()).getSalvagePct();
currentSalvagePct = (int)(100*((double)salvageUnit)/(salvageUnit+salvageEmployer));
}
formatter = new DecimalFormat();
currentPanel = UNITSPANEL;
initComponents();
setLocationRelativeTo(parent);
}
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
cardLayout = new CardLayout();
ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.ResolveScenarioWizardDialog", new EncodeControl()); //$NON-NLS-1$
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setName("Form"); // NOI18N
getContentPane().setLayout(new BorderLayout());
setTitle(resourceMap.getString("title"));
/*
* Instructions at the top
*/
txtInstructions = new javax.swing.JTextArea();
txtInstructions.setText("");
txtInstructions.setEditable(false);
txtInstructions.setLineWrap(true);
txtInstructions.setWrapStyleWord(true);
txtInstructions.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(resourceMap.getString("txtInstructions.title")),
BorderFactory.createEmptyBorder(5,5,5,5)));
txtInstructions.setMinimumSize(new Dimension(590,120));
txtInstructions.setPreferredSize(new Dimension(590,120));
getContentPane().add(txtInstructions, BorderLayout.PAGE_START);
/*
* Set up main panel with cards
*/
pnlMain = new JPanel(cardLayout);
/*
* Unit Status Panel
*/
pnlUnitStatus = new JPanel();
pnlUnitStatus.setLayout(new GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlUnitStatus.add(new JLabel(resourceMap.getString("totaled")), gridBagConstraints);
chksTotaled = new ArrayList<JCheckBox>();
ustatuses = new ArrayList<UnitStatus>();
btnsViewUnit = new ArrayList<JButton>();
btnsEditUnit = new ArrayList<JButton>();
lblsUnitName = new ArrayList<JLabel>();
int i = 2;
int j = 0;
JLabel nameLbl;
JCheckBox chkTotaled;
JButton btnViewUnit;
JButton btnEditUnit;
for(Unit unit : tracker.getUnits()) {
UnitStatus status = tracker.getUnitsStatus().get(unit.getId());
ustatuses.add(status);
nameLbl = new JLabel(status.getDesc());
lblsUnitName.add(nameLbl);
chkTotaled = new JCheckBox("");
chkTotaled.setSelected(status.isTotalLoss());
chkTotaled.setName(Integer.toString(j));
chkTotaled.setActionCommand(unit.getId().toString());
chksTotaled.add(chkTotaled);
chkTotaled.addItemListener(new CheckTotalListener());
btnViewUnit = new JButton("View Unit");
btnViewUnit.setEnabled(!status.isTotalLoss());
btnViewUnit.setActionCommand(unit.getId().toString());
btnViewUnit.addActionListener(new ViewUnitListener());
btnsViewUnit.add(btnViewUnit);
btnEditUnit = new JButton("Edit Unit");
btnEditUnit.setEnabled(!status.isTotalLoss());
btnEditUnit.setActionCommand(unit.getId().toString());
btnEditUnit.setName(Integer.toString(j));
btnEditUnit.addActionListener(new EditUnitListener());
btnsEditUnit.add(btnEditUnit);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = i;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
gridBagConstraints.weightx = 0.0;
j++;
if(j == tracker.getUnits().size()) {
gridBagConstraints.weighty = 1.0;
}
pnlUnitStatus.add(nameLbl, gridBagConstraints);
gridBagConstraints.gridx = 1;
pnlUnitStatus.add(chkTotaled, gridBagConstraints);
gridBagConstraints.gridx = 2;
pnlUnitStatus.add(btnViewUnit, gridBagConstraints);
gridBagConstraints.gridx = 3;
gridBagConstraints.weightx = 1.0;
pnlUnitStatus.add(btnEditUnit, gridBagConstraints);
i++;
}
pnlMain.add(pnlUnitStatus, UNITSPANEL);
/*
* Ally Status Panel
*/
pnlAllyStatus = new JPanel();
if (tracker.getCampaign().getCampaignOptions().getUseAtB() &&
tracker.getScenario() instanceof AtBScenario) {
pnlAllyStatus.setLayout(new GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlAllyStatus.add(new JLabel("Lost"), gridBagConstraints);
chksAllyLost = new ArrayList<JCheckBox>();
i = 2;
j = 0;
JCheckBox chkAllyLost;
AtBScenario scen = (AtBScenario)tracker.getScenario();
List<UUID> allyIds = Stream.concat(scen.getAttachedUnitIds().stream(),
scen.getSurvivalBonusIds().stream())
.filter(id -> scen.getEntity(id) != null)
.collect(Collectors.toList());
for (UUID id : allyIds) {
j++;
chkAllyLost = new JCheckBox();
chksAllyLost.add(chkAllyLost);
UnitStatus status = tracker.getUnitsStatus().get(id);
chkAllyLost.setSelected( status == null
|| status.isTotalLoss()
|| status.isLikelyCaptured());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = i;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
gridBagConstraints.weightx = 0.0;
if (j == allyIds.size()) {
gridBagConstraints.weighty = 1.0;
}
pnlAllyStatus.add(chkAllyLost, gridBagConstraints);
gridBagConstraints.gridx = 1;
pnlAllyStatus.add(new JLabel(((AtBScenario)tracker.getScenario()).getEntity(id).getShortName()), gridBagConstraints);
i++;
}
}
pnlMain.add(pnlAllyStatus, ALLYPANEL);
/*
* Pilot Status Panel
*/
pnlPilotStatus = new JPanel();
pnlPilotStatus.setLayout(new GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPilotStatus.add(new JLabel(resourceMap.getString("hits")), gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPilotStatus.add(new JLabel(resourceMap.getString("mia")), gridBagConstraints);
i = 2;
JCheckBox miaCheck;
JSlider hitSlider;
Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
labelTable.put( new Integer( 0 ), new JLabel("0") );
labelTable.put( new Integer( 1 ), new JLabel("1") );
labelTable.put( new Integer( 2 ), new JLabel("2") );
labelTable.put( new Integer( 3 ), new JLabel("3") );
labelTable.put( new Integer( 4 ), new JLabel("4") );
labelTable.put( new Integer( 5 ), new JLabel("5") );
labelTable.put( new Integer( 6 ), new JLabel(resourceMap.getString("dead")) );
j = 0;
for(PersonStatus status : tracker.getSortedPeople()) {
j++;
pstatuses.add(status);
nameLbl = new JLabel("<html>" + status.getName() + "<br><i> " + status.getUnitName() + "</i></html>");
miaCheck = new JCheckBox("");
miaBtns.add(miaCheck);
hitSlider = new JSlider(JSlider.HORIZONTAL, 0, 6, status.getHits());
hitSlider.setMajorTickSpacing(1);
hitSlider.setPaintTicks(true);
hitSlider.setLabelTable(labelTable);
hitSlider.setPaintLabels(true);
hitSlider.setSnapToTicks(true);
hitSliders.add(hitSlider);
if(status.isMissing()) {
miaCheck.setSelected(true);
}
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = i;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
gridBagConstraints.weightx = 0.0;
if(j == tracker.getPeopleStatus().keySet().size()) {
gridBagConstraints.weighty = 1.0;
}
pnlPilotStatus.add(nameLbl, gridBagConstraints);
gridBagConstraints.gridx = 1;
pnlPilotStatus.add(hitSlider, gridBagConstraints);
gridBagConstraints.gridx = 2;
gridBagConstraints.weightx = 1.0;
pnlPilotStatus.add(miaCheck, gridBagConstraints);
i++;
}
pnlMain.add(pnlPilotStatus, PILOTPANEL);
/*
* Prisoner Status Panel
*/
pnlPrisonerStatus = new JPanel();
pnlPrisonerStatus.setLayout(new GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPrisonerStatus.add(new JLabel(resourceMap.getString("hits")), gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
/*pnlPrisonerStatus.add(new JLabel(resourceMap.getString("mia")), gridBagConstraints);*/
//gridBagConstraints.gridx = 2;
pnlPrisonerStatus.add(new JLabel(resourceMap.getString("prisoner")), gridBagConstraints);
i = 2;
JCheckBox prisonerCheck;
j = 0;
for(PrisonerStatus status : tracker.getSortedPrisoners()) {
j++;
prstatuses.add(status);
nameLbl = new JLabel("<html>" + status.getName() + "<br><i> " + status.getUnitName() + "</i></html>");
miaCheck = new JCheckBox("");
hitSlider = new JSlider(JSlider.HORIZONTAL, 0, 6, status.getHits());
hitSlider.setMajorTickSpacing(1);
hitSlider.setPaintTicks(true);
hitSlider.setLabelTable(labelTable);
hitSlider.setPaintLabels(true);
hitSlider.setSnapToTicks(true);
hitSlider.setName(Integer.toString(j-1));
pr_hitSliders.add(hitSlider);
miaCheck.setSelected(status.isMissing());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = i;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
gridBagConstraints.weightx = 0.0;
if(j == tracker.getPrisonerStatus().keySet().size()) {
gridBagConstraints.weighty = 1.0;
}
pnlPrisonerStatus.add(nameLbl, gridBagConstraints);
gridBagConstraints.gridx = 1;
pnlPrisonerStatus.add(hitSlider, gridBagConstraints);
gridBagConstraints.gridx = 2;
prisonerCheck = new JCheckBox("");
prisonerBtns.add(prisonerCheck);
prisonerCheck.setSelected(status.isCaptured());
gridBagConstraints.weightx = 1.0;
pnlPrisonerStatus.add(prisonerCheck, gridBagConstraints);
i++;
if (status.isCaptured() &&
tracker.getCampaign().getCampaignOptions().getUseAtB() &&
tracker.getCampaign().getCampaignOptions().getUseAtBCapture()) {
boolean wasCaptured = false;
if (status.wasPickedUp()) {
wasCaptured = true;
} else {
for (int n = 0; n < status.getHits() + 1; n++) {
if (Utilities.dice(1, 6) == 1) {
wasCaptured = true;
break;
}
}
}
prisonerCheck.setSelected(wasCaptured);
}
//if the person is dead then ignore them
if(status.isDead()) {
prisonerCheck.setSelected(false);
prisonerCheck.setEnabled(false);
}
hitSlider.addChangeListener(new CheckDeadPrisonerListener());
}
pnlMain.add(pnlPrisonerStatus, PRISONERPANEL);
/*
* Salvage panel
*/
pnlSalvage = new JPanel();
salvageBoxes = new ArrayList<JCheckBox>();
escapeBoxes = new ArrayList<JCheckBox>();
pnlSalvage.setLayout(new GridBagLayout());
btnsSalvageViewUnit = new ArrayList<JButton>();
btnsSalvageEditUnit = new ArrayList<JButton>();
JPanel pnlSalvageValue = new JPanel(new GridBagLayout());
i = 0;
if((tracker.getMission() instanceof Contract) && !tracker.usesSalvageExchange()) {
lblSalvageValueUnit1 = new JLabel(resourceMap.getString("lblSalvageValueUnit1.text"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlSalvageValue.add(lblSalvageValueUnit1, gridBagConstraints);
lblSalvageValueUnit2 = new JLabel(formatter.format(salvageUnit) + " C-Bills");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
gridBagConstraints.weightx = 1.0;
pnlSalvageValue.add(lblSalvageValueUnit2, gridBagConstraints);
i++;
lblSalvageValueEmployer1 = new JLabel(resourceMap.getString("lblSalvageValueEmployer1.text"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
gridBagConstraints.weightx = 0.0;
pnlSalvageValue.add(lblSalvageValueEmployer1, gridBagConstraints);
lblSalvageValueEmployer2 = new JLabel(formatter.format(salvageEmployer) + " C-Bills");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
gridBagConstraints.weightx = 1.0;
pnlSalvageValue.add(lblSalvageValueEmployer2, gridBagConstraints);
i++;
String lead = "<html><font color='black'>";
if(currentSalvagePct > maxSalvagePct) {
lead = "<html><font color='red'>";
}
lblSalvagePct1 = new JLabel(resourceMap.getString("lblSalvagePct1.text"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
gridBagConstraints.weightx = 0.0;
pnlSalvageValue.add(lblSalvagePct1, gridBagConstraints);
lblSalvagePct2 = new JLabel(lead + currentSalvagePct + "%</font> <font color='black'>(max " + maxSalvagePct + "%)</font></html>");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlSalvageValue.add(lblSalvagePct2, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(0, 0, 20, 0);
pnlSalvage.add(pnlSalvageValue, gridBagConstraints);
i++;
}
i++;
j = 0;
JCheckBox box;
JCheckBox escaped;
JButton btnSalvageViewUnit;
JButton btnSalvageEditUnit;
for(TestUnit u : tracker.getPotentialSalvage()) {
j++;
salvageables.add(u);
UnitStatus status = tracker.getSalvageStatus().get(u.getId());
String txtBoxString = status.getDesc(formatter);
box = new JCheckBox(txtBoxString);
box.setSelected(false);
box.setEnabled(!tracker.usesSalvageExchange());
box.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent evt) {
checkSalvageRights();
}
});
salvageBoxes.add(box);
escaped = new JCheckBox("Escapes");
escaped.setSelected(!status.isLikelyCaptured());
escaped.setEnabled(!(u.getEntity().isDestroyed() || u.getEntity().isDoomed()));
escaped.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent evt) {
checkSalvageRights();
}
});
escapeBoxes.add(escaped);
btnSalvageViewUnit = new JButton("View Unit");
btnSalvageViewUnit.setEnabled(true);
btnSalvageViewUnit.setActionCommand(u.getId().toString());
btnSalvageViewUnit.addActionListener(new ViewUnitListener(true));
btnsSalvageViewUnit.add(btnSalvageViewUnit);
btnSalvageEditUnit = new JButton("Edit Unit");
btnSalvageEditUnit.setEnabled(true);
btnSalvageEditUnit.setActionCommand(u.getId().toString());
btnSalvageEditUnit.setName(Integer.toString(j));
btnSalvageEditUnit.addActionListener(new EditUnitListener(true));
btnsSalvageEditUnit.add(btnSalvageEditUnit);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = i;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 0.0;
if(j == tracker.getPotentialSalvage().size()) {
gridBagConstraints.weighty = 1.0;
}
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlSalvage.add(box, gridBagConstraints);
gridBagConstraints.gridx = 1;
pnlSalvage.add(escaped, gridBagConstraints);
gridBagConstraints.gridx = 2;
pnlSalvage.add(btnSalvageViewUnit, gridBagConstraints);
gridBagConstraints.gridx = 3;
gridBagConstraints.weightx = 1.0;
pnlSalvage.add(btnSalvageEditUnit, gridBagConstraints);
i++;
}
checkSalvageRights();
pnlMain.add(pnlSalvage, SALVAGEPANEL);
/*
* Assign Kills panel
*/
pnlKills = new JPanel();
killChoices = new Hashtable<String, JComboBox<String>>();
pnlKills.setLayout(new GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlKills.add(new JLabel(resourceMap.getString("kill")), gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
gridBagConstraints.weightx = 1.0;
pnlKills.add(new JLabel(resourceMap.getString("claim")), gridBagConstraints);
i = 2;
JComboBox<String> comboAssign;
DefaultComboBoxModel<String> assignModel;
j = 0;
for(String killName : tracker.getKillCredits().keySet()) {
j++;
nameLbl = new JLabel(killName);
assignModel = new DefaultComboBoxModel<String>();
assignModel.addElement(resourceMap.getString("none"));
int idx = 0;
int selected = 0;
if(null == tracker.getKillCredits().get(killName)) {
continue;
}
for(Unit u : tracker.getUnits()) {
idx++;
if (u.getEntity() instanceof GunEmplacement) {
assignModel.addElement("AutoTurret, " + u.getName());
} else {
assignModel.addElement(u.getCommander().getFullTitle() + ", " + u.getName());
}
if(u.getId().toString().equals(tracker.getKillCredits().get(killName))) {
selected = idx;
}
}
comboAssign = new JComboBox<String>(assignModel);
comboAssign.setSelectedIndex(selected);
killChoices.put(killName, comboAssign);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = i;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
gridBagConstraints.weightx = 0.0;
if(j == tracker.getKillCredits().keySet().size()) {
gridBagConstraints.weighty = 1.0;
}
pnlKills.add(nameLbl, gridBagConstraints);
gridBagConstraints.weightx = 1.0;
gridBagConstraints.gridx = 1;
pnlKills.add(comboAssign, gridBagConstraints);
i++;
}
pnlMain.add(pnlKills, KILLPANEL);
/*
* Collect Rewards Panel
*/
pnlRewards = new JPanel();
pnlRewards.setLayout(new GridBagLayout());
lootBoxes = new ArrayList<JCheckBox>();
i = 0;
j = 0;
for(Loot loot : loots) {
j++;
box = new JCheckBox(loot.getShortDescription());
box.setSelected(false);
lootBoxes.add(box);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = i;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
if(j == (loots.size())) {
gridBagConstraints.weighty = 1.0;
}
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlRewards.add(box, gridBagConstraints);
i++;
}
pnlMain.add(pnlRewards, REWARDPANEL);
/*
* Preview Panel
*/
pnlPreview = new JPanel();
choiceStatus = new javax.swing.JComboBox<String>();
scrReport = new javax.swing.JScrollPane();
scrRecoveredUnits = new javax.swing.JScrollPane();
scrRecoveredPilots = new javax.swing.JScrollPane();
scrMissingUnits = new javax.swing.JScrollPane();
scrMissingPilots = new javax.swing.JScrollPane();
scrDeadPilots = new javax.swing.JScrollPane();
scrSalvage = new javax.swing.JScrollPane();
txtInstructions = new javax.swing.JTextArea();
txtReport = new javax.swing.JTextArea();
txtRecoveredUnits = new javax.swing.JTextArea();
txtRecoveredPilots = new javax.swing.JTextArea();
txtMissingUnits = new javax.swing.JTextArea();
txtMissingPilots = new javax.swing.JTextArea();
txtDeadPilots = new javax.swing.JTextArea();
txtSalvage = new javax.swing.JTextArea();
txtRewards = new javax.swing.JTextArea();
lblStatus = new javax.swing.JLabel();
pnlPreview.setLayout(new GridBagLayout());
JPanel pnlStatus = new JPanel();
lblStatus.setText(resourceMap.getString("lblStatus.text"));
DefaultComboBoxModel<String> statusModel = new DefaultComboBoxModel<String>();
for (int k = 1; k < Scenario.S_NUM; k++) {
statusModel.addElement(Scenario.getStatusName(k));
}
choiceStatus.setModel(statusModel);
choiceStatus.setName("choiceStatus"); // NOI18N
choiceStatus.setSelectedIndex(0);
pnlStatus.setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));
pnlStatus.add(lblStatus);
pnlStatus.add(choiceStatus);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPreview.add(pnlStatus, gridBagConstraints);
txtRewards.setText(resourceMap.getString("none"));
txtRewards.setEditable(false);
txtRewards.setLineWrap(true);
txtRewards.setWrapStyleWord(true);
txtRewards.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(resourceMap.getString("txtRewards.title")),
BorderFactory.createEmptyBorder(5,5,5,5)));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.weightx = 1;
gridBagConstraints.weighty = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPreview.add(new JScrollPane(txtRewards), gridBagConstraints);
txtReport.setText("");
txtReport.setName("txtReport");
txtReport.setEditable(true);
txtReport.setLineWrap(true);
txtReport.setWrapStyleWord(true);
txtReport.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(resourceMap.getString("txtReport.title")),
BorderFactory.createEmptyBorder(5,5,5,5)));
scrReport.setViewportView(txtReport);
scrReport.setPreferredSize(new Dimension(500,200));
scrReport.setMinimumSize(new Dimension(500,200));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPreview.add(scrReport, gridBagConstraints);
txtRecoveredUnits.setName("txtRecoveredUnits");
txtRecoveredUnits.setText(resourceMap.getString("none"));
txtRecoveredUnits.setEditable(false);
txtRecoveredUnits.setLineWrap(true);
txtRecoveredUnits.setWrapStyleWord(true);
txtRecoveredUnits.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(resourceMap.getString("txtRecoveredUnits.title")),
BorderFactory.createEmptyBorder(5,5,5,5)));
scrRecoveredUnits.setViewportView(txtRecoveredUnits);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.weighty = 0.5;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPreview.add(scrRecoveredUnits, gridBagConstraints);
txtRecoveredPilots.setName("txtRecoveredPilots");
txtRecoveredPilots.setText(resourceMap.getString("none"));
txtRecoveredPilots.setEditable(false);
txtRecoveredPilots.setLineWrap(true);
txtRecoveredPilots.setWrapStyleWord(true);
txtRecoveredPilots.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(resourceMap.getString("txtRecoveredPilots.title")),
BorderFactory.createEmptyBorder(5,5,5,5)));
scrRecoveredPilots.setViewportView(txtRecoveredPilots);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.weighty = 0.5;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPreview.add(scrRecoveredPilots, gridBagConstraints);
txtMissingUnits.setName("txtMissingUnits");
txtMissingUnits.setText(resourceMap.getString("none"));
txtMissingUnits.setEditable(false);
txtMissingUnits.setLineWrap(true);
txtMissingUnits.setWrapStyleWord(true);
txtMissingUnits.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(resourceMap.getString("txtMissingUnits.title")),
BorderFactory.createEmptyBorder(5,5,5,5)));
scrMissingUnits.setViewportView(txtMissingUnits);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.weighty = 0.5;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPreview.add(scrMissingUnits, gridBagConstraints);
txtMissingPilots.setName("txtMissingPilots");
txtMissingPilots.setText(resourceMap.getString("none"));
txtMissingPilots.setEditable(false);
txtMissingPilots.setLineWrap(true);
txtMissingPilots.setWrapStyleWord(true);
txtMissingPilots.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(resourceMap.getString("txtMissingPilots.title")),
BorderFactory.createEmptyBorder(5,5,5,5)));
scrMissingPilots.setViewportView(txtMissingPilots);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.weighty = 0.5;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPreview.add(scrMissingPilots, gridBagConstraints);
txtSalvage.setName("txtSalvage");
txtSalvage.setText("None");
txtSalvage.setEditable(false);
txtSalvage.setLineWrap(true);
txtSalvage.setWrapStyleWord(true);
txtSalvage.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(resourceMap.getString("txtSalvagedUnits.title")),
BorderFactory.createEmptyBorder(5,5,5,5)));
scrSalvage.setViewportView(txtSalvage);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.weighty = 0.5;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPreview.add(scrSalvage, gridBagConstraints);
txtDeadPilots.setName("txtDeadPilots");
txtDeadPilots.setText(resourceMap.getString("none"));
txtDeadPilots.setEditable(false);
txtDeadPilots.setLineWrap(true);
txtDeadPilots.setWrapStyleWord(true);
txtDeadPilots.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(resourceMap.getString("txtDeadPilots.title")),
BorderFactory.createEmptyBorder(5,5,5,5)));
scrDeadPilots.setViewportView(txtDeadPilots);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.weighty = 0.5;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
pnlPreview.add(scrDeadPilots, gridBagConstraints);
pnlMain.add(pnlPreview, PREVIEWPANEL);
scrMain = new JScrollPane(pnlMain);
scrMain.setMinimumSize(new Dimension(600,500));
scrMain.setPreferredSize(new Dimension(600,500));
getContentPane().add(scrMain, BorderLayout.CENTER);
/*
* Set up button panel
*/
panButtons = new JPanel();
panButtons.setName("panButtons");
panButtons.setLayout(new GridBagLayout());
btnCancel = new JButton(resourceMap.getString("btnCancel.text")); // NOI18N
btnCancel.setName("btnClose"); // NOI18N
btnCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancel();
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
panButtons.add(btnCancel, gridBagConstraints);
btnBack = new JButton(resourceMap.getString("btnBack.text")); // NOI18N
btnBack.setName("btnBack"); // NOI18N
btnBack.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
back();
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
panButtons.add(btnBack, gridBagConstraints);
btnNext = new JButton(resourceMap.getString("btnNext.text")); // NOI18N
btnNext.setName("btnNext"); // NOI18N
btnNext.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
next();
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
panButtons.add(btnNext, gridBagConstraints);
btnFinish = new JButton(resourceMap.getString("btnFinish.text")); // NOI18N
btnFinish.setName("btnFinish"); // NOI18N
btnFinish.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
finish();
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
panButtons.add(btnFinish, gridBagConstraints);
getContentPane().add(panButtons, BorderLayout.PAGE_END);
switchPanel(currentPanel);
if(!usePanel(currentPanel)) {
next();
}
btnNext.setEnabled(true);
btnBack.setEnabled(false);
btnFinish.setEnabled(false);
pack();
}
private void switchPanel(String name) {
if(name.equals(PREVIEWPANEL)) {
updatePreviewPanel();
}
currentPanel = name;
setTitle(currentPanel);
cardLayout.show(pnlMain, currentPanel);
switchInstructions();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
scrMain.getVerticalScrollBar().setValue(0);
}
});
}
private void switchInstructions() {
final ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.ResolveScenarioWizardDialog", new EncodeControl()); //$NON-NLS-1$
if(currentPanel.equals(UNITSPANEL)) {
txtInstructions.setText(resourceMap.getString("txtInstructions.text.missingunits"));
}
else if(currentPanel.equals(PILOTPANEL)) {
txtInstructions.setText(resourceMap.getString("txtInstructions.text.personnel"));
}
else if(currentPanel.equals(SALVAGEPANEL)) {
txtInstructions.setText(resourceMap.getString("txtInstructions.text.salvage"));
}
else if(currentPanel.equals(KILLPANEL)) {
txtInstructions.setText(resourceMap.getString("txtInstructions.text.kills"));
}
else if(currentPanel.equals(PRISONERPANEL)) {
txtInstructions.setText(resourceMap.getString("txtInstructions.text.personnel"));
}
else if(currentPanel.equals(PREVIEWPANEL)) {
txtInstructions.setText(resourceMap.getString("txtInstructions.text.preview"));
}
else if(currentPanel.equals(REWARDPANEL)) {
txtInstructions.setText(resourceMap.getString("txtInstructions.text.reward"));
}
else if(currentPanel.equals(ALLYPANEL)) {
txtInstructions.setText(resourceMap.getString("txtInstructions.text.ally"));
}
else {
txtInstructions.setText("");
}
txtInstructions.setEditable(false);
txtInstructions.setLineWrap(true);
txtInstructions.setWrapStyleWord(true);
txtInstructions.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(resourceMap.getString("txtInstructions.title")),
BorderFactory.createEmptyBorder(5,5,5,5)));
txtInstructions.setMinimumSize(new Dimension(590,150));
txtInstructions.setPreferredSize(new Dimension(590,150));
getContentPane().add(txtInstructions, BorderLayout.PAGE_START);
}
private void next() {
btnNext.setEnabled(false);
btnBack.setEnabled(true);
btnFinish.setEnabled(false);
boolean passedCurrent = false;
boolean switchMade = false;
if (currentPanel.equals(ResolveScenarioWizardDialog.SALVAGEPANEL)) {
}
for(int i = 0; i < panelOrder.length; i++) {
String name = panelOrder[i];
if(passedCurrent) {
if(usePanel(name)) {
if(!switchMade) {
switchPanel(name);
switchMade = true;
if(name.equals(PREVIEWPANEL)) {
btnFinish.setEnabled(true);
}
} else {
btnNext.setEnabled(true);
break;
}
}
}
else if(name.equals(currentPanel)) {
passedCurrent = true;
}
}
}
private void back() {
btnNext.setEnabled(true);
btnBack.setEnabled(false);
btnFinish.setEnabled(false);
boolean passedCurrent = false;
boolean switchMade = false;
for(int i = (panelOrder.length-1); i >= 0; i--) {
String name = panelOrder[i];
if(passedCurrent) {
if(passedCurrent) {
if(usePanel(name)) {
if(!switchMade) {
switchPanel(name);
switchMade = true;
} else {
btnBack.setEnabled(true);
break;
}
}
}
}
else if(name.equals(currentPanel)) {
passedCurrent = true;
}
}
}
private void finish() {
//unit status
for(int i = 0; i < chksTotaled.size(); i++) {
JCheckBox box = chksTotaled.get(i);
UUID id = UUID.fromString(box.getActionCommand());
if(null == id || null == tracker.getUnitsStatus().get(id)) {
continue;
}
tracker.getUnitsStatus().get(id).setTotalLoss(box.isSelected());
}
if (tracker.getCampaign().getCampaignOptions().getUseAtB() &&
tracker.getScenario() instanceof AtBScenario) {
AtBScenario scenario = (AtBScenario)tracker.getScenario();
int breaches = 0;
int bonuses = 0;
for (int i = 0; i < chksAllyLost.size(); i++) {
if (i < scenario.getAttachedUnitIds().size()) {
if (chksAllyLost.get(i).isSelected()) {
breaches++;
long etype = scenario.getEntity(scenario.getAttachedUnitIds().get(i)).getEntityType();
if ((etype & megamek.common.Entity.ETYPE_DROPSHIP) != 0) {
breaches += 4;
}
}
} else {
if (!chksAllyLost.get(i).isSelected()) {
bonuses++;
}
}
}
tracker.setContractBreaches(breaches);
tracker.setBonusRolls(bonuses);
}
//now personnel
for(int i = 0; i < pstatuses.size(); i++) {
PersonStatus status = pstatuses.get(i);
status.setMissing(miaBtns.get(i).isSelected());
status.setHits(hitSliders.get(i).getValue());
}
//now prisoners
for(int i = 0; i < prstatuses.size(); i++) {
PrisonerStatus status = prstatuses.get(i);
//status.setMissing(pr_miaBtns.get(i).isSelected());
status.setHits(pr_hitSliders.get(i).getValue());
status.setCaptured(prisonerBtns.get(i).isSelected());
}
//now salvage
for(int i = 0; i < salvageBoxes.size(); i++) {
JCheckBox box = salvageBoxes.get(i);
if(box.isSelected()) {
tracker.salvageUnit(i);
} else if (!escapeBoxes.get(i).isSelected()) { // Only salvage if they don't escape
tracker.dontSalvageUnit(i);
}
}
//now assign kills
for(String killName : tracker.getKillCredits().keySet()) {
if(killChoices.get(killName).getSelectedIndex() == 0) {
tracker.getKillCredits().put(killName, "None");
} else {
Unit u = tracker.getUnits().get(killChoices.get(killName).getSelectedIndex()-1);
if(null != u) {
tracker.getKillCredits().put(killName, u.getId().toString());
}
}
}
tracker.assignKills();
//now get loot
for(int i = 0; i < lootBoxes.size(); i++) {
JCheckBox box = lootBoxes.get(i);
if(box.isSelected()) {
tracker.addLoot(loots.get(i));
}
}
//now process
tracker.resolveScenario(choiceStatus.getSelectedIndex()+1,txtReport.getText());
this.setVisible(false);
}
private void cancel() {
setVisible(false);
}
private boolean usePanel(String panelName) {
if(panelName.equals(UNITSPANEL)) {
return tracker.getUnitsStatus().keySet().size() > 0;
}
else if (panelName.equals(ALLYPANEL)) {
return tracker.getCampaign().getCampaignOptions().getUseAtB() &&
tracker.getScenario() instanceof AtBScenario &&
(((AtBScenario)tracker.getScenario()).getAttachedUnitIds().size() +
((AtBScenario)tracker.getScenario()).getSurvivalBonusIds().size() > 0);
}
else if(panelName.equals(PILOTPANEL)) {
return tracker.getPeopleStatus().keySet().size() > 0;
}
else if(panelName.equals(PRISONERPANEL)) {
return tracker.getPrisonerStatus().keySet().size() > 0;
}
else if(panelName.equals(SALVAGEPANEL)) {
return tracker.getPotentialSalvage().size() > 0
&& (!(tracker.getMission() instanceof Contract) || ((Contract)tracker.getMission()).canSalvage());
}
else if(panelName.equals(KILLPANEL)) {
return !tracker.getKillCredits().isEmpty();
}
if(panelName.equals(REWARDPANEL)) {
return loots.size() > 0;
}
else if(panelName.equals(PREVIEWPANEL)) {
return true;
}
return false;
}
private void checkSalvageRights() {
// Perform a little magic to make sure we aren't trying to do both of these things
for (JCheckBox escaped : escapeBoxes) {
JCheckBox box = salvageBoxes.get(escapeBoxes.indexOf(escaped));
if (escaped.isSelected()) {
box.setSelected(false);
box.setEnabled(false);
} else if (box.isSelected()) {
escaped.setSelected(false);
escaped.setEnabled(false);
} else {
if(!tracker.usesSalvageExchange()) {
box.setEnabled(true);
}
escaped.setEnabled(true);
}
}
if(!(tracker.getMission() instanceof Contract) || tracker.usesSalvageExchange()) {
return;
}
salvageEmployer = ((Contract)tracker.getMission()).getSalvagedByEmployer();
salvageUnit = ((Contract)tracker.getMission()).getSalvagedByUnit();
for(int i = 0; i < salvageBoxes.size(); i++) {
// Skip the escaping units
if (escapeBoxes.get(i).isSelected()) {
continue;
}
// Set up the values
if(salvageBoxes.get(i).isSelected()) {
salvageUnit += salvageables.get(i).getSellValue();
} else {
salvageEmployer += salvageables.get(i).getSellValue();
}
}
currentSalvagePct = (int)(100*((double)salvageUnit)/(salvageUnit+salvageEmployer));
for(JCheckBox box : salvageBoxes) {
if(!box.isSelected() && currentSalvagePct >= maxSalvagePct) {
box.setEnabled(false);
} else {
box.setEnabled(true);
}
}
lblSalvageValueUnit2.setText(formatter.format(salvageUnit) + " C-Bills");
lblSalvageValueEmployer2.setText(formatter.format(salvageEmployer) + " C-Bills");
String lead = "<html><font color='black'>";
if(currentSalvagePct > maxSalvagePct) {
lead = "<html><font color='red'>";
}
lblSalvagePct2.setText(lead + currentSalvagePct + "%</font> <font color='black'>(max " + maxSalvagePct + "%)</font></html>");
}
private void updatePreviewPanel() {
//pilots first
String missingNames = "";
String kiaNames = "";
String recoverNames = "";
for(int i = 0; i < pstatuses.size(); i++) {
PersonStatus status = pstatuses.get(i);
if(hitSliders.get(i).getValue() >= 6) {
kiaNames += status.getName() + "\n";
} else if(miaBtns.get(i).isSelected()) {
missingNames += status.getName() + "\n";
} else {
recoverNames += status.getName() + "\n";
}
}
txtRecoveredPilots.setText(recoverNames);
txtMissingPilots.setText(missingNames);
txtDeadPilots.setText(kiaNames);
//now units
String recoverUnits = "";
String missUnits = "";
for(int i = 0; i < chksTotaled.size(); i++) {
String name = ustatuses.get(i).getName();
if(chksTotaled.get(i).isSelected()) {
missUnits += name + "\n";
} else {
recoverUnits += name + "\n";
}
}
txtRecoveredUnits.setText(recoverUnits);
txtMissingUnits.setText(missUnits);
//now salvage
String salvageUnits = "";
for(int i = 0; i < salvageBoxes.size(); i++) {
JCheckBox box = salvageBoxes.get(i);
if(box.isSelected()) {
salvageUnits += salvageables.get(i).getName() + "\n";
}
}
txtSalvage.setText(salvageUnits);
//now rewards
String claimed = "";
for(int i = 0; i < lootBoxes.size(); i++) {
JCheckBox box = lootBoxes.get(i);
if(box.isSelected()) {
claimed += loots.get(i).getShortDescription() + "\n";
}
}
txtRewards.setText(claimed);
}
@SuppressWarnings("unused") // FIXME
private void showUnit(UUID id) {
showUnit(id, false);
}
private void showUnit(UUID id, boolean salvage) {
//TODO: I am not sure I like the pop up dialog, might just make this a view on this
//dialog
UnitStatus ustatus;
if(salvage) {
ustatus = tracker.getSalvageStatus().get(id);
} else {
ustatus = tracker.getUnitsStatus().get(id);
}
if(null == ustatus || null == ustatus.getEntity()) {
return;
}
Entity entity = ustatus.getEntity();
final JDialog dialog = new JDialog(frame, "Unit View", true); //$NON-NLS-1$
MechViewPanel mvp = new MechViewPanel();
mvp.setMech(entity, true);
JButton btn = new JButton(Messages.getString("Okay")); //$NON-NLS-1$
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
}
});
dialog.getContentPane().setLayout(new GridBagLayout());
GridBagConstraints c;
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.NORTHWEST;
c.weightx = 1.0;
c.weighty = 1.0;
dialog.getContentPane().add(mvp, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1;
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.CENTER;
c.weightx = 0.0;
c.weighty = 0.0;
dialog.getContentPane().add(btn, c);
dialog.setSize(mvp.getBestWidth(), mvp.getBestHeight() + 75);
dialog.validate();
dialog.setLocationRelativeTo(frame);
dialog.setVisible(true);
}
@SuppressWarnings("unused") // FIXME
private void editUnit(UUID id, int idx) {
editUnit(id, idx, false);
}
private void editUnit(UUID id, int idx, boolean salvage) {
UnitStatus ustatus = salvage ? tracker.getSalvageStatus().get(id) : tracker.getUnitsStatus().get(id);
if(null == ustatus || null == ustatus.getEntity()) {
return;
}
Entity entity = ustatus.getEntity();
UnitEditorDialog med = new UnitEditorDialog(frame, entity);
med.setVisible(true);
JLabel name = lblsUnitName.get(idx);
name.setText(ustatus.getDesc());
}
private class CheckTotalListener implements ItemListener {
@Override
public void itemStateChanged(ItemEvent evt) {
int idx = Integer.parseInt(((JCheckBox)evt.getItem()).getName());
btnsViewUnit.get(idx).setEnabled(!chksTotaled.get(idx).isSelected());
btnsEditUnit.get(idx).setEnabled(!chksTotaled.get(idx).isSelected());
}
}
private class CheckDeadPrisonerListener implements ChangeListener {
@Override
public void stateChanged(ChangeEvent evt) {
JSlider hitslider = (JSlider)evt.getSource();
if(hitslider.getValueIsAdjusting()) {
return;
}
int idx = Integer.parseInt(hitslider.getName());
JCheckBox captured = prisonerBtns.get(idx);
if(null == captured) {
return;
}
int hits = hitslider.getValue();
if(hits >= 6) {
captured.setSelected(false);
captured.setEnabled(false);
} else if(!captured.isEnabled()) {
captured.setEnabled(true);
}
}
}
private class ViewUnitListener implements ActionListener {
boolean salvage = false;
public ViewUnitListener(boolean b) {
salvage = b;
}
public ViewUnitListener() {
}
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
UUID id = UUID.fromString(evt.getActionCommand());
showUnit(id, salvage);
}
}
private class EditUnitListener implements ActionListener {
boolean salvage = false;
public EditUnitListener(boolean b) {
salvage = b;
}
public EditUnitListener() {
}
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
UUID id = UUID.fromString(evt.getActionCommand());
int idx = Integer.parseInt(((JButton)evt.getSource()).getName());
editUnit(id, idx, salvage);
}
}
}