package mekhq.gui.adapter;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.event.MouseInputAdapter;
import megamek.common.Entity;
import mekhq.MekHQ;
import mekhq.campaign.event.ProcurementEvent;
import mekhq.campaign.parts.Part;
import mekhq.campaign.work.IAcquisitionWork;
import mekhq.gui.CampaignGUI;
import mekhq.gui.model.ProcurementTableModel;
public class ProcurementTableMouseAdapter extends MouseInputAdapter {
private CampaignGUI gui;
public ProcurementTableMouseAdapter(CampaignGUI gui) {
super();
this.gui = gui;
}
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
@SuppressWarnings("serial")
private void maybeShowPopup(MouseEvent e) {
JPopupMenu popup = new JPopupMenu();
JMenuItem menuItem;
JMenu menu;
final JTable table = (JTable) e.getSource();
final ProcurementTableModel model = (ProcurementTableModel) table
.getModel();
if (table.getSelectedRow() < 0) {
return;
}
if (table.getSelectedRowCount() == 0) {
return;
}
final int row = table
.convertRowIndexToModel(table.getSelectedRow());
final int[] rows = table.getSelectedRows();
final boolean oneSelected = table.getSelectedRowCount() == 1;
if (e.isPopupTrigger()) {
// **lets fill the pop up menu**//
// GM mode
menu = new JMenu("GM Mode");
menuItem = new JMenuItem("Procure single item now");
menuItem.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (row < 0) {
return;
}
if (oneSelected) {
IAcquisitionWork acquisition = model
.getAcquisition(row);
Object equipment = acquisition.getNewEquipment();
if (equipment instanceof Part) {
if (gui.getCampaign().buyPart(
(Part) equipment,
gui.getCampaign().calculatePartTransitTime(
0))) {
gui.getCampaign()
.addReport(
"<font color='Green'><b>"
+ acquisition
.getAcquisitionName()
+ " found.</b></font>");
acquisition.decrementQuantity();
} else {
gui.getCampaign()
.addReport(
"<font color='red'><b>You cannot afford to purchase "
+ acquisition
.getAcquisitionName()
+ "</b></font>");
}
} else if (equipment instanceof Entity) {
if (gui.getCampaign().buyUnit(
(Entity) equipment,
gui.getCampaign().calculatePartTransitTime(
0))) {
gui.getCampaign()
.addReport(
"<font color='Green'><b>"
+ acquisition
.getAcquisitionName()
+ " found.</b></font>");
acquisition.decrementQuantity();
} else {
gui.getCampaign()
.addReport(
"<font color='red'><b>You cannot afford to purchase "
+ acquisition
.getAcquisitionName()
+ "</b></font>");
}
}
} else {
for (int curRow : rows) {
if (curRow < 0) {
continue;
}
int row = table.convertRowIndexToModel(curRow);
IAcquisitionWork acquisition = model
.getAcquisition(row);
Object equipment = acquisition
.getNewEquipment();
if (equipment instanceof Part) {
if (gui.getCampaign()
.buyPart(
(Part) equipment,
gui.getCampaign()
.calculatePartTransitTime(
0))) {
gui.getCampaign()
.addReport(
"<font color='Green'><b>"
+ acquisition
.getAcquisitionName()
+ " found.</b></font>");
acquisition.decrementQuantity();
} else {
gui.getCampaign()
.addReport(
"<font color='red'><b>You cannot afford to purchase "
+ acquisition
.getAcquisitionName()
+ "</b></font>");
}
} else if (equipment instanceof Entity) {
if (gui.getCampaign()
.buyUnit(
(Entity) equipment,
gui.getCampaign()
.calculatePartTransitTime(
0))) {
gui.getCampaign()
.addReport(
"<font color='Green'><b>"
+ acquisition
.getAcquisitionName()
+ " found.</b></font>");
acquisition.decrementQuantity();
} else {
gui.getCampaign()
.addReport(
"<font color='red'><b>You cannot afford to purchase "
+ acquisition
.getAcquisitionName()
+ "</b></font>");
}
}
}
}
}
});
menuItem.setEnabled(gui.getCampaign().isGM());
menu.add(menuItem);
menuItem = new JMenuItem("Procure all items now");
menuItem.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (row < 0) {
return;
}
if (oneSelected) {
IAcquisitionWork acquisition = model
.getAcquisition(row);
boolean canAfford = true;
while (canAfford && acquisition.getQuantity() > 0) {
Object equipment = acquisition
.getNewEquipment();
if (equipment instanceof Part) {
if (gui.getCampaign()
.buyPart(
(Part) equipment,
gui.getCampaign()
.calculatePartTransitTime(
0))) {
gui.getCampaign()
.addReport(
"<font color='Green'><b>"
+ acquisition
.getAcquisitionName()
+ " found.</b></font>");
acquisition.decrementQuantity();
} else {
gui.getCampaign()
.addReport(
"<font color='red'><b>You cannot afford to purchase "
+ acquisition
.getAcquisitionName()
+ "</b></font>");
canAfford = false;
}
} else if (equipment instanceof Entity) {
if (gui.getCampaign()
.buyUnit(
(Entity) equipment,
gui.getCampaign()
.calculatePartTransitTime(
0))) {
gui.getCampaign()
.addReport(
"<font color='Green'><b>"
+ acquisition
.getAcquisitionName()
+ " found.</b></font>");
acquisition.decrementQuantity();
} else {
gui.getCampaign()
.addReport(
"<font color='red'><b>You cannot afford to purchase "
+ acquisition
.getAcquisitionName()
+ "</b></font>");
canAfford = false;
}
}
}
} else {
for (int curRow : rows) {
if (curRow < 0) {
continue;
}
int row = table.convertRowIndexToModel(curRow);
IAcquisitionWork acquisition = model
.getAcquisition(row);
boolean canAfford = true;
while (canAfford
&& acquisition.getQuantity() > 0) {
Object equipment = acquisition
.getNewEquipment();
if (equipment instanceof Part) {
if (gui.getCampaign()
.buyPart(
(Part) equipment,
gui.getCampaign()
.calculatePartTransitTime(
0))) {
gui.getCampaign()
.addReport(
"<font color='Green'><b>"
+ acquisition
.getAcquisitionName()
+ " found.</b></font>");
acquisition.decrementQuantity();
} else {
gui.getCampaign()
.addReport(
"<font color='red'><b>You cannot afford to purchase "
+ acquisition
.getAcquisitionName()
+ "</b></font>");
canAfford = false;
}
} else if (equipment instanceof Entity) {
if (gui.getCampaign()
.buyUnit(
(Entity) equipment,
gui.getCampaign()
.calculatePartTransitTime(
0))) {
gui.getCampaign()
.addReport(
"<font color='Green'><b>"
+ acquisition
.getAcquisitionName()
+ " found.</b></font>");
acquisition.decrementQuantity();
} else {
gui.getCampaign()
.addReport(
"<font color='red'><b>You cannot afford to purchase "
+ acquisition
.getAcquisitionName()
+ "</b></font>");
canAfford = false;
}
}
}
}
}
}
});
menuItem.setEnabled(gui.getCampaign().isGM());
menu.add(menuItem);
menuItem = new JMenuItem("Clear From the List");
menuItem.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (row < 0) {
return;
}
if (oneSelected) {
IAcquisitionWork acquisition = model
.getAcquisition(row);
model.removeRow(row);
MekHQ.triggerEvent(new ProcurementEvent(acquisition));
} else {
for (int curRow : rows) {
if (curRow < 0) {
continue;
}
int row = table.convertRowIndexToModel(curRow);
IAcquisitionWork acquisition = model
.getAcquisition(row);
model.removeRow(row);
MekHQ.triggerEvent(new ProcurementEvent(acquisition));
}
}
}
});
menuItem.setEnabled(gui.getCampaign().isGM());
menu.add(menuItem);
// end
popup.addSeparator();
popup.add(menu);
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
}