package mekhq.gui.adapter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.text.DecimalFormat;
import java.util.UUID;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.event.MouseInputAdapter;
import mekhq.MekHQ;
import mekhq.campaign.event.LoanRemovedEvent;
import mekhq.campaign.event.PartRemovedEvent;
import mekhq.campaign.finances.Loan;
import mekhq.campaign.parts.Part;
import mekhq.gui.CampaignGUI;
import mekhq.gui.dialog.PayCollateralDialog;
import mekhq.gui.model.LoanTableModel;
public class LoanTableMouseAdapter extends MouseInputAdapter implements
ActionListener {
private CampaignGUI gui;
private JTable loanTable;
private LoanTableModel loanModel;
public LoanTableMouseAdapter(CampaignGUI gui, JTable loanTable,
LoanTableModel loanModel) {
super();
this.gui = gui;
this.loanTable = loanTable;
this.loanModel = loanModel;
}
public void actionPerformed(ActionEvent action) {
String command = action.getActionCommand();
int row = loanTable.getSelectedRow();
if (row < 0) {
return;
}
Loan selectedLoan = loanModel.getLoan(loanTable
.convertRowIndexToModel(row));
if (null == selectedLoan) {
return;
}
if (command.equalsIgnoreCase("DEFAULT")) {
if (0 == JOptionPane
.showConfirmDialog(
null,
"Defaulting on this loan will affect your unit rating the same as a contract breach.\nDo you wish to proceed?",
"Default on " + selectedLoan.getDescription()
+ "?", JOptionPane.YES_NO_OPTION)) {
PayCollateralDialog pcd = new PayCollateralDialog(
gui.getFrame(), true, gui.getCampaign(), selectedLoan);
pcd.setVisible(true);
if (pcd.wasCancelled()) {
return;
}
gui.getCampaign().getFinances().defaultOnLoan(selectedLoan,
pcd.wasPaid());
if (pcd.wasPaid()) {
for (UUID id : pcd.getUnits()) {
gui.getCampaign().removeUnit(id);
}
for (int[] part : pcd.getParts()) {
Part p = gui.getCampaign().getPart(part[0]);
if (null != p) {
int quantity = part[1];
while (quantity > 0 && p.getQuantity() > 0) {
p.decrementQuantity();
quantity--;
MekHQ.triggerEvent(new PartRemovedEvent(p));
}
}
}
gui.getCampaign().getFinances().setAssets(
pcd.getRemainingAssets());
}
}
} else if (command.equalsIgnoreCase("PAY_BALANCE")) {
gui.getCampaign().payOffLoan(selectedLoan);
} else if (command.equalsIgnoreCase("REMOVE")) {
gui.getCampaign().getFinances().removeLoan(selectedLoan);
MekHQ.triggerEvent(new LoanRemovedEvent(selectedLoan));
}
}
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
private void maybeShowPopup(MouseEvent e) {
JPopupMenu popup = new JPopupMenu();
if (e.isPopupTrigger()) {
if (loanTable.getSelectedRowCount() == 0) {
return;
}
int row = loanTable.getSelectedRow();
Loan loan = loanModel.getLoan(loanTable
.convertRowIndexToModel(row));
JMenuItem menuItem = null;
JMenu menu = null;
// **lets fill the pop up menu**//
menuItem = new JMenuItem("Pay Off Full Balance ("
+ DecimalFormat.getInstance().format(
loan.getRemainingValue()) + ")");
menuItem.setActionCommand("PAY_BALANCE");
menuItem.setEnabled(gui.getCampaign().getFunds() >= loan
.getRemainingValue());
menuItem.addActionListener(this);
popup.add(menuItem);
menuItem = new JMenuItem("Default on This Loan");
menuItem.setActionCommand("DEFAULT");
menuItem.addActionListener(this);
popup.add(menuItem);
// GM mode
menu = new JMenu("GM Mode");
// remove part
menuItem = new JMenuItem("Remove Loan");
menuItem.setActionCommand("REMOVE");
menuItem.addActionListener(this);
menuItem.setEnabled(gui.getCampaign().isGM());
menu.add(menuItem);
// end
popup.addSeparator();
popup.add(menu);
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
}