Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions megameklab/resources/megameklab/resources/Views.properties
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ BasicInfoView.txtManualBV.tooltip=Alternative to the calculated Battle Value.
BasicInfoView.cbTechBase.values=Inner Sphere,Clan,Mixed Inner Sphere,Mixed Clan
BasicInfoView.txtRole.text=Role:
BasicInfoView.txtRole.tooltip=The combat role of this unit.
BasicInfoView.chkManualRole.text=Manual
BasicInfoView.chkManualRole.tooltip=Save this role as a manual override. When unchecked, the role is detected automatically and not written to the unit file.
MekChassisView.baseType.values=Standard,Industrial,LAM,QuadVee
MekChassisView.motiveType.values=Biped,Quad,Tripod
MekChassisView.lamType.values=Standard,Bimodal
Expand Down
40 changes: 36 additions & 4 deletions megameklab/src/megameklab/ui/generalUnit/BasicInfoView.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import javax.swing.Box;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
Expand Down Expand Up @@ -135,6 +136,7 @@ public class BasicInfoView extends BuildView implements ITechManager, ActionList
private final JComboBox<String> cbTechLevel = new JComboBox<>();
private final IntRangeTextField txtManualBV = new IntRangeTextField(3);
private final MMComboBox<UnitRole> cbRole = new MMComboBox<>("Role Combo");
private final JCheckBox chkManualRole = new JCheckBox();
private final JLabel lblMulId = createLabel("lblMulId", "");
private final IntRangeTextField txtMulId = new IntRangeTextField(8);
private final JButton browseMul = new JButton(new MulLinkIcon());
Expand Down Expand Up @@ -329,8 +331,14 @@ private void initUI() {
"BasicInfoView.txtRole.tooltip"), gbc);
gbc.gridx = 1;
cbRole.setToolTipText(resourceMap.getString("BasicInfoView.txtRole.tooltip"));
add(cbRole, gbc);
chkManualRole.setText(resourceMap.getString("BasicInfoView.chkManualRole.text"));
chkManualRole.setToolTipText(resourceMap.getString("BasicInfoView.chkManualRole.tooltip"));
var rolePanel = Box.createHorizontalBox();
rolePanel.add(cbRole);
rolePanel.add(chkManualRole);
add(rolePanel, gbc);
cbRole.addActionListener(this);
chkManualRole.addActionListener(this);
cbRole.setPrototypeDisplayValue(UnitRole.ATTACK_FIGHTER);
// Show the role UNDETERMINED as an empty selection to differentiate it from NONE
// UNDETERMINED means that no role at all will be saved to the unit
Expand Down Expand Up @@ -377,14 +385,18 @@ public void setFromEntity(Entity en) {
cbTechLevel.addActionListener(this);
setManualBV(en.getManualBV());
cbRole.removeActionListener(this);
chkManualRole.removeActionListener(this);
cbRole.removeAllItems();
for (UnitRole role : UnitRole.values()) {
if (role.isAvailableTo(en)) {
cbRole.addItem(role);
}
}
cbRole.setSelectedItem(en.getRole());
chkManualRole.setSelected(en.hasRoleOverride());
cbRole.setSelectedItem(chkManualRole.isSelected() ? en.getRoleOverride() : en.getRole());
cbRole.setEnabled(chkManualRole.isSelected());
cbRole.addActionListener(this);
chkManualRole.addActionListener(this);

// Set faction from entity before refreshing visibility
cbFaction.removeActionListener(this);
Expand Down Expand Up @@ -800,13 +812,33 @@ public void actionPerformed(ActionEvent e) {
refreshTechLevel();
} else if (e.getSource() == cbTechLevel) {
listeners.forEach(l -> l.techLevelChanged(getTechLevel()));
} else if (e.getSource() == chkManualRole) {
updateManualRoleOverride();
} else if (e.getSource() == cbRole) {
UnitRole newRole = (cbRole.getSelectedItem() == null) ? UnitRole.UNDETERMINED : cbRole.getSelectedItem();
listeners.forEach(l -> l.roleChanged(newRole));
if (chkManualRole.isSelected()) {
listeners.forEach(l -> l.roleChanged(selectedRole()));
}
}
listeners.forEach(BuildListener::refreshSummary);
}

private UnitRole selectedRole() {
return (cbRole.getSelectedItem() == null) ? UnitRole.UNDETERMINED : cbRole.getSelectedItem();
}

private void updateManualRoleOverride() {
boolean manualRole = chkManualRole.isSelected();
cbRole.setEnabled(manualRole);
if (manualRole) {
listeners.forEach(l -> l.roleChanged(selectedRole()));
} else {
listeners.forEach(l -> l.roleChanged(UnitRole.UNDETERMINED));
cbRole.removeActionListener(this);
cbRole.setSelectedItem((currentEntity == null) ? UnitRole.UNDETERMINED : currentEntity.getRole());
cbRole.addActionListener(this);
}
}

@Override
public boolean unofficialNoYear() {
return CConfig.getBooleanParam(CConfig.TECH_UNOFFICIAL_NO_YEAR);
Expand Down
Loading