/*
* LootDialog.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.Frame;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SpinnerNumberModel;
import megamek.common.Entity;
import mekhq.campaign.Campaign;
import mekhq.campaign.mission.Loot;
import mekhq.campaign.parts.Part;
/**
*
* @author Taharqa
*/
public class LootDialog extends javax.swing.JDialog {
private static final long serialVersionUID = -8038099101234445018L;
private Frame frame;
private Loot loot;
private boolean cancelled;
private ArrayList<Entity> units;
private ArrayList<Part> parts;
private Campaign campaign;
private JButton btnOK;
private JButton btnCancel;
private JTextField txtName;
private JSpinner spnCash;
private JButton btnAddUnit;
private JButton btnRemoveUnit;
private JButton btnAddPart;
private JButton btnRemovePart;
private JList<String> listUnits;
private JList<String> listParts;
private JScrollPane scrUnits;
private JScrollPane scrParts;
/** Creates new form NewTeamDialog */
public LootDialog(java.awt.Frame parent, boolean modal, Loot l, Campaign c) {
super(parent, modal);
this.frame = parent;
this.loot = l;
this.campaign = c;
cancelled = true;
units = new ArrayList<Entity>();
parts = new ArrayList<Part>();
for(Entity e : l.getUnits()) {
units.add(e);
}
for(Part p : l.getParts()) {
parts.add(p);
}
initComponents();
setLocationRelativeTo(parent);
}
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
txtName = new JTextField();
btnOK = new JButton("Done");
btnCancel = new JButton("Cancel");
btnAddUnit = new JButton("Add");
btnRemoveUnit = new JButton("Remove");
btnAddPart = new JButton("Add");
btnRemovePart = new JButton("Remove");
listUnits = new JList<String>(new DefaultListModel<String>());
listParts = new JList<String>(new DefaultListModel<String>());
//ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.KillDialog", new EncodeControl());
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Potential Rewards");
getContentPane().setLayout(new java.awt.GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
getContentPane().add(new JLabel("Name:"), gridBagConstraints);
txtName.setText(loot.getName());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
getContentPane().add(txtName, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
getContentPane().add(new JLabel("Cash"), gridBagConstraints);
spnCash = new JSpinner(new SpinnerNumberModel(loot.getCash(), 0, 300000000, 10000));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
getContentPane().add(spnCash, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
getContentPane().add(new JLabel("Units"), gridBagConstraints);
btnAddUnit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addUnit();
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
getContentPane().add(btnAddUnit, gridBagConstraints);
btnRemoveUnit.setEnabled(false);
btnRemoveUnit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeUnit();
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
getContentPane().add(btnRemoveUnit, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
scrUnits = new JScrollPane(listUnits);
listUnits.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
listUnits.getSelectionModel().addListSelectionListener(
new javax.swing.event.ListSelectionListener() {
public void valueChanged(
javax.swing.event.ListSelectionEvent evt) {
listUnitsValueChanged();
}
});
refreshUnitList();
getContentPane().add(scrUnits, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
getContentPane().add(new JLabel("Parts"), gridBagConstraints);
btnAddPart.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addPart();
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
getContentPane().add(btnAddPart, gridBagConstraints);
btnRemovePart.setEnabled(false);
btnRemovePart.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removePart();
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
getContentPane().add(btnRemovePart, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
scrParts = new JScrollPane(listParts);
listParts.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
listParts.getSelectionModel().addListSelectionListener(
new javax.swing.event.ListSelectionListener() {
public void valueChanged(
javax.swing.event.ListSelectionEvent evt) {
listPartsValueChanged();
}
});
refreshPartList();
getContentPane().add(scrParts, gridBagConstraints);
btnOK.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
done();
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 6;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
getContentPane().add(btnOK, gridBagConstraints);
btnCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
setVisible(false);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 6;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
getContentPane().add(btnCancel, gridBagConstraints);
pack();
}
public Loot getLoot() {
if(cancelled) {
return null;
}
return loot;
}
private void addUnit() {
UnitSelectorDialog usd = new UnitSelectorDialog(frame, campaign, false);
usd.setVisible(true);
Entity e = usd.getEntity();
if(null != e) {
units.add(e);
}
refreshUnitList();
}
private void removeUnit() {
int row = listUnits.getSelectedIndex();
if(-1 != row) {
units.remove(row);
}
refreshUnitList();
}
private void addPart() {
PartsStoreDialog psd = new PartsStoreDialog(frame, true, null, campaign, false);
psd.setVisible(true);
Part p = psd.getPart();
if(null != p) {
parts.add(p);
}
refreshPartList();
}
private void removePart() {
int row = listParts.getSelectedIndex();
if(-1 != row) {
parts.remove(row);
}
refreshPartList();
}
private void done() {
loot.setName(txtName.getText());
loot.setCash((int)Math.ceil((Double)spnCash.getModel().getValue()));
cancelled = false;
loot.clearUnits();
loot.clearParts();
for(Entity e : units) {
loot.addUnit(e);
}
for(Part p : parts) {
loot.addPart(p);
}
this.setVisible(false);
}
private void refreshUnitList() {
int selectedRow = listUnits.getSelectedIndex();
DefaultListModel<String> model = (DefaultListModel<String>)listUnits.getModel();
model.removeAllElements();
//listUnits.removeAll();
for(Entity e : units) {
model.addElement(e.getShortName());
//listUnits.add(e.getDisplayName());
}
scrUnits.setViewportView(listUnits);
if(selectedRow != -1) {
if(((DefaultListModel<String>)listUnits.getModel()).getSize() > 0) {
if(((DefaultListModel<String>)listUnits.getModel()).getSize() == selectedRow) {
listUnits.setSelectedIndex(selectedRow-1);
} else {
listUnits.setSelectedIndex(selectedRow);
}
}
}
}
private void refreshPartList() {
int selectedRow = listParts.getSelectedIndex();
DefaultListModel<String> model = (DefaultListModel<String>)listParts.getModel();
model.removeAllElements();
//listUnits.removeAll();
for(Part p : parts) {
model.addElement(p.getName());
//listParts.add(e.getDisplayName());
}
scrParts.setViewportView(listParts);
if(selectedRow != -1) {
if(((DefaultListModel<String>)listParts.getModel()).getSize() > 0) {
if(((DefaultListModel<String>)listParts.getModel()).getSize() == selectedRow) {
listParts.setSelectedIndex(selectedRow-1);
} else {
listParts.setSelectedIndex(selectedRow);
}
}
}
}
private void listUnitsValueChanged() {
int row = listUnits.getSelectedIndex();
btnRemoveUnit.setEnabled(row != -1);
}
private void listPartsValueChanged() {
int row = listParts.getSelectedIndex();
btnRemovePart.setEnabled(row != -1);
}
}