Skip to content
20 changes: 2 additions & 18 deletions src/megameklab/com/printing/PrintDropship.java
Original file line number Diff line number Diff line change
Expand Up @@ -345,15 +345,8 @@ public String formatFeatures() {
int drones = 0;
Map<String, Integer> eqCount = new HashMap<>();
for (Mounted mount : ship.getMisc()) {
// MASH and DCC use an additional MiscType to expand their capacity.
// Present them as a single piece of equipment and show size.
if (mount.getType().hasFlag(MiscType.F_MASH) || mount.getType().hasFlag(MiscType.F_MASH_EXTRA)) {
mashTheaters++;
} else if (mount.getType().hasFlag(MiscType.F_DRONE_CARRIER_CONTROL)
|| mount.getType().hasFlag(MiscType.F_DRONE_EXTRA)){
drones++;
} else if (UnitUtil.isPrintableEquipment(mount.getType())) {
eqCount.merge(mount.getType().getShortName(), 1, Integer::sum);
if (UnitUtil.isPrintableEquipment(mount.getType())) {
eqCount.merge(mount.getShortName(), 1, Integer::sum);
}
}
if (ship instanceof Jumpship && ((Jumpship) ship).hasLF()) {
Expand All @@ -366,15 +359,6 @@ public String formatFeatures() {
sj.add(eq);
}
}
if (mashTheaters > 1) {
sj.add("MASH (" + mashTheaters + " theaters)");
} else if (mashTheaters == 1) {
sj.add("MASH");
}
if (drones > 0) {
sj.add("Drone Carrier Control System (" + drones
+ ((drones > 1) ? " drones)" : " drone)"));
}
return sj.toString();
}

Expand Down
4 changes: 2 additions & 2 deletions src/megameklab/com/printing/StandardInventoryEntry.java
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,9 @@ private String[][] atmAV() {
}

private String formatName() {
String eqName = mount.getType().getName();
String eqName = mount.getName();
if (eqName.length() > 20) {
eqName = mount.getType().getShortName();
eqName = mount.getShortName();
}
// Remove trailing IS or Clan tag in brackets or parentheses, including possible leading space
StringBuilder name = new StringBuilder(eqName.replaceAll(" ?[\\[(](Clan|IS)[])]", ""));
Expand Down
13 changes: 12 additions & 1 deletion src/megameklab/com/ui/Aero/tabs/EquipmentTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -157,15 +157,26 @@ public EquipmentTab(EntitySource eSource) {
equipmentTable.setShowGrid(false);
equipmentTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
equipmentTable.setDoubleBuffered(true);
equipmentTable.setRowHeight((int) (equipmentTable.getRowHeight() * 1.2));
TableColumn column = null;
for (int i = 0; i < equipmentList.getColumnCount(); i++) {
column = equipmentTable.getColumnModel().getColumn(i);
if(i == 0) {
if (i == CriticalTableModel.NAME) {
column.setPreferredWidth(200);
} else if (i == CriticalTableModel.SIZE) {
column.setCellEditor(equipmentList.new SpinnerCellEditor());
}
column.setCellRenderer(equipmentList.getRenderer());

}
equipmentList.addTableModelListener(ev -> {
if (refresh != null) {
refresh.refreshStatus();
refresh.refreshPreview();
refresh.refreshBuild();
refresh.refreshSummary();
}
});
equipmentScroll.setViewportView(equipmentTable);
equipmentScroll.setMinimumSize(new java.awt.Dimension(300, 200));
equipmentScroll.setPreferredSize(new java.awt.Dimension(300, 200));
Expand Down
12 changes: 11 additions & 1 deletion src/megameklab/com/ui/BattleArmor/tabs/EquipmentTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -151,12 +151,22 @@ public EquipmentTab(EntitySource eSource) {
TableColumn column = null;
for (int i = 0; i < equipmentList.getColumnCount(); i++) {
column = equipmentTable.getColumnModel().getColumn(i);
if(i == 0) {
if (i == CriticalTableModel.NAME) {
column.setPreferredWidth(200);
} else if (i == CriticalTableModel.SIZE) {
column.setCellEditor(equipmentList.new SpinnerCellEditor());
}
column.setCellRenderer(equipmentList.getRenderer());

}
equipmentList.addTableModelListener(ev -> {
if (refresh != null) {
refresh.refreshStatus();
refresh.refreshPreview();
refresh.refreshBuild();
refresh.refreshSummary();
}
});
equipmentScroll.setViewportView(equipmentTable);
equipmentScroll.setMinimumSize(new java.awt.Dimension(300, 200));
equipmentScroll.setPreferredSize(new java.awt.Dimension(300, 200));
Expand Down
12 changes: 11 additions & 1 deletion src/megameklab/com/ui/Mek/tabs/EquipmentTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -153,12 +153,22 @@ public EquipmentTab(EntitySource eSource) {
TableColumn column = null;
for (int i = 0; i < equipmentList.getColumnCount(); i++) {
column = equipmentTable.getColumnModel().getColumn(i);
if(i == 0) {
if (i == CriticalTableModel.NAME) {
column.setPreferredWidth(200);
} else if (i == CriticalTableModel.SIZE) {
column.setCellEditor(equipmentList.new SpinnerCellEditor());
}
column.setCellRenderer(equipmentList.getRenderer());

}
equipmentList.addTableModelListener(ev -> {
if (refresh != null) {
refresh.refreshStatus();
refresh.refreshPreview();
refresh.refreshBuild();
refresh.refreshSummary();
}
});
equipmentScroll.setViewportView(equipmentTable);
equipmentScroll.setMinimumSize(new java.awt.Dimension(300, 200));
equipmentScroll.setPreferredSize(new java.awt.Dimension(300, 200));
Expand Down
12 changes: 11 additions & 1 deletion src/megameklab/com/ui/Vehicle/tabs/EquipmentTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -151,12 +151,22 @@ public EquipmentTab(EntitySource eSource) {
TableColumn column = null;
for (int i = 0; i < equipmentList.getColumnCount(); i++) {
column = equipmentTable.getColumnModel().getColumn(i);
if(i == 0) {
if (i == CriticalTableModel.NAME) {
column.setPreferredWidth(200);
} else if (i == CriticalTableModel.SIZE) {
column.setCellEditor(equipmentList.new SpinnerCellEditor());
}
column.setCellRenderer(equipmentList.getRenderer());

}
equipmentList.addTableModelListener(ev -> {
if (refresh != null) {
refresh.refreshStatus();
refresh.refreshPreview();
refresh.refreshBuild();
refresh.refreshSummary();
}
});
equipmentScroll.setViewportView(equipmentTable);
equipmentScroll.setMinimumSize(new java.awt.Dimension(300, 200));
equipmentScroll.setPreferredSize(new java.awt.Dimension(300, 200));
Expand Down
14 changes: 12 additions & 2 deletions src/megameklab/com/ui/tabs/EquipmentTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -186,16 +186,26 @@ public EquipmentTab(EntitySource eSource) {
equipmentTable.setIntercellSpacing(new Dimension(0, 0));
equipmentTable.setShowGrid(false);
equipmentTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
equipmentTable.setDoubleBuffered(true);
equipmentTable.setRowHeight((int) (equipmentTable.getRowHeight() * 1.2));
TableColumn column;
for (int i = 0; i < equipmentList.getColumnCount(); i++) {
column = equipmentTable.getColumnModel().getColumn(i);
if(i == 0) {
if (i == CriticalTableModel.NAME) {
column.setPreferredWidth(200);
} else if (i == CriticalTableModel.SIZE) {
column.setCellEditor(equipmentList.new SpinnerCellEditor());
}
column.setCellRenderer(equipmentList.getRenderer());

}
equipmentList.addTableModelListener(ev -> {
if (refresh != null) {
refresh.refreshStatus();
refresh.refreshPreview();
refresh.refreshBuild();
refresh.refreshSummary();
}
});
JScrollPane equipmentScroll = new JScrollPane();
equipmentScroll.setViewportView(equipmentTable);
equipmentScroll.setMinimumSize(new java.awt.Dimension(300, 200));
Expand Down
102 changes: 78 additions & 24 deletions src/megameklab/com/util/CriticalTableModel.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* MegaMekLab - Copyright (C) 2008
* MegaMekLab - Copyright (C) 2008-2020 The MegaMek Team
*
* Original author - jtighe (torren@users.sourceforge.net)
*
Expand All @@ -17,25 +17,24 @@
package megameklab.com.util;

import java.awt.Component;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;

import megamek.common.AmmoType;
import megamek.common.BattleArmor;
import megamek.common.Entity;
import megamek.common.Mech;
import megamek.common.MiscType;
import megamek.common.Mounted;
import megamek.common.Tank;
import megamek.common.WeaponType;
import megamek.common.*;
import megamek.common.verifier.BayData;
import megamek.common.verifier.TestEntity;
import megamek.common.verifier.TestProtomech;
import megameklab.com.ui.tabs.TransportTab;

public class CriticalTableModel extends AbstractTableModel {

Expand All @@ -45,22 +44,23 @@ public class CriticalTableModel extends AbstractTableModel {
private static final long serialVersionUID = 7615555055651822051L;

private Mounted[] sortedEquipment = {};
public Vector<Mounted> crits = new Vector<Mounted>();
public List<Mounted> crits = new ArrayList<>();
public Entity unit;

public final static int NAME = 0;
public final static int TONNAGE = 1;
public final static int CRITS = 2;
public final static int HEAT = 3;
public final static int LOCATION = 4;
public final static int EQUIPMENT = 5;
public final static int SIZE = 5;
public final static int EQUIPMENT = 6;

public final static int EQUIPMENTTABLE = 0;
public final static int WEAPONTABLE = 1;
public final static int BUILDTABLE = 2;

private int tableType = EQUIPMENTTABLE;
private boolean kgStandard = false;
private int tableType;
private boolean kgStandard;

private String[] columnNames = { "Name", "Tons", "Crits"};

Expand All @@ -77,9 +77,9 @@ public CriticalTableModel(Entity unit, int tableType) {

if (tableType == WEAPONTABLE) {
longValues = new String[] { "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX",
"XXXXXXXXX", "XXX" };
"XXXXXXXXX", "XXX", "XXXX" };
columnNames = new String[] { "Name", "Tons", "Slots", "Heat",
"Loc" };
"Loc", "Size" };
}

if (kgStandard) {
Expand Down Expand Up @@ -133,7 +133,8 @@ public String getColumnName(int col) {

@Override
public boolean isCellEditable(int row, int col) {
return false;
return (col == SIZE) && (row >= 0) && (row < sortedEquipment.length)
&& sortedEquipment[row].getType().isVariableTonnage();
}

@Override
Expand Down Expand Up @@ -191,7 +192,7 @@ public Object getValueAt(int row, int col) {
return crit;
case HEAT:
if (crit.getType() instanceof WeaponType) {
return ((WeaponType) crit.getType()).getHeat();
return crit.getType().getHeat();
}
return 0;
case LOCATION:
Expand All @@ -201,10 +202,25 @@ public Object getValueAt(int row, int col) {
} else {
return unit.getLocationAbbr(crit.getLocation());
}
case SIZE:
if (crit.getType().isVariableTonnage()) {
return NumberFormat.getInstance().format(crit.getSize());
} else {
return null;
}
}
return "";
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if ((columnIndex == SIZE) && (rowIndex >= 0) && (rowIndex < getRowCount())) {
Mounted crit = sortedEquipment[rowIndex];
crit.setSize(Double.parseDouble(aValue.toString()));
fireTableDataChanged();
}
}

public CriticalTableModel.Renderer getRenderer() {
return new Renderer();
}
Expand Down Expand Up @@ -286,12 +302,50 @@ public Component getTableCellRendererComponent(JTable table,
}
}

/**
* Cell editor for the size column
*/
public class SpinnerCellEditor extends AbstractCellEditor implements TableCellEditor, ChangeListener {

private static final long serialVersionUID = 1949617773287631727L;

private final JSpinner spinner = new JSpinner();
private int rowIndex = 0;

public SpinnerCellEditor() {
spinner.addChangeListener(this);
}

@Override
public Object getCellEditorValue() {
return spinner.getValue();
}

@Override
public void stateChanged(ChangeEvent e) {
setValueAt(getCellEditorValue(), rowIndex, SIZE);
}

@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row,
int column) {
this.rowIndex = row;
Mounted mounted = (Mounted) getValueAt(row, EQUIPMENT);
spinner.removeChangeListener(this);
spinner.setModel(new SpinnerNumberModel(Double.valueOf(mounted.getSize()),
mounted.getType().variableStepSize(), mounted.getType().variableMaxSize(),
mounted.getType().variableStepSize()));
spinner.addChangeListener(this);
return spinner;
}
}

public void addCrit(Mounted mount) {
crits.add(mount);
}

public void removeCrit(int location) {
crits.removeElementAt(location);
crits.remove(location);
}

/**
Expand All @@ -302,21 +356,21 @@ public void removeCrit(int location) {
public void removeCrits(int[] locs) {
Vector<Mounted> mounts = new Vector<>(locs.length);
for (Integer l : locs){
mounts.add(crits.elementAt(l));
mounts.add(crits.get(l));
}
crits.removeAll(mounts);
}

public void removeAllCrits() {
crits.removeAllElements();
crits.clear();
}

public void removeMounted(int row) {
UnitUtil.removeMounted(unit,
(Mounted) getValueAt(row, CriticalTableModel.EQUIPMENT));
}

public Vector<Mounted> getCrits() {
public List<Mounted> getCrits() {
return crits;
}

Expand Down
Loading