Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFE 5604: save refit config from MHQ MekLab tab #5632

Merged
merged 3 commits into from
Jan 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
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
3 changes: 3 additions & 0 deletions MekHQ/resources/mekhq/resources/MekLabTab.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
dialog.saveAs.title=Save As
dialog.saveAs.message.format=%s %s saved to %s
dialog.filter.unitFiles=Unit Files (*.mtf; *.blk; *.hmp)
46 changes: 45 additions & 1 deletion MekHQ/src/mekhq/gui/MekLabTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.io.File;
import java.util.Properties;
import java.util.ResourceBundle;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
Expand All @@ -43,6 +45,7 @@
import megamek.logging.MMLogger;
import megameklab.MMLConstants;
import megameklab.ui.EntitySource;
import megameklab.ui.FileNameManager;
import megameklab.ui.battleArmor.BABuildTab;
import megameklab.ui.battleArmor.BAEquipmentTab;
import megameklab.ui.battleArmor.BAStructureTab;
Expand Down Expand Up @@ -70,6 +73,7 @@
import megameklab.ui.supportVehicle.SVBuildTab;
import megameklab.ui.supportVehicle.SVEquipmentTab;
import megameklab.ui.supportVehicle.SVStructureTab;
import megameklab.ui.util.MegaMekLabFileSaver;
import megameklab.ui.util.RefreshListener;
import megameklab.util.CConfig;
import megameklab.util.UnitUtil;
Expand All @@ -81,6 +85,7 @@

public class MekLabTab extends CampaignGuiTab {
private static final MMLogger logger = MMLogger.create(MekLabTab.class);
protected final ResourceBundle resources = ResourceBundle.getBundle("mekhq.resources.MekLabTab");

CampaignGUI campaignGUI;

Expand All @@ -100,6 +105,7 @@ public class MekLabTab extends CampaignGuiTab {
private JLabel lblCost;

private JButton btnRefit;
private JButton btnSaveForLater;
private JButton btnClear;
private JButton btnRemove;

Expand All @@ -110,11 +116,13 @@ public class MekLabTab extends CampaignGuiTab {
private JLabel lblTons;

private JPanel shoppingPanel;
private MegaMekLabFileSaver fileSaver;

// region Constructors
public MekLabTab(CampaignGUI gui, String name) {
super(gui, name);
this.campaignGUI = gui;
this.fileSaver = new MegaMekLabFileSaver(logger, resources.getString("dialog.saveAs.title"));
this.repaint();
}
// endregion Constructors
Expand All @@ -139,6 +147,16 @@ public void initTab() {
}
campaignGUI.refitUnit(refit, true);
});
btnSaveForLater = new JButton("Save For Later");
btnSaveForLater.addActionListener(evt -> {
Entity entity = labPanel.getEntity();
UnitUtil.compactCriticals(entity);
labPanel.refreshAll(); // The crits may have moved
fileSaver.saveUnitAs(this.getFrame(), entity);
// Refresh unit cache so newly-saved file is available for refits.
MekSummaryCache.refreshUnitData(false);
});

btnClear = new JButton("Clear Changes");
btnClear.addActionListener(evt -> resetUnit());
btnRemove = new JButton("Remove from Lab");
Expand Down Expand Up @@ -189,6 +207,8 @@ public void initTab() {
c.insets = new Insets(0, 5, 2, 5);
summaryPane.add(btnRefit, c);
c.gridy++;
summaryPane.add(btnSaveForLater, c);
c.gridy++;
summaryPane.add(btnClear, c);
c.gridy++;
summaryPane.add(btnRemove, c);
Expand Down Expand Up @@ -333,6 +353,7 @@ public void refreshRefitSummary() {
if (tonnage < testEntity.calculateWeight()) {
btnRefit.setEnabled(false);
btnRefit.setToolTipText("Unit is overweight.");
btnSaveForLater.setEnabled(true);
// } else if (entity.getWeight() > testEntity.calculateWeight()) {
// Taharqa: We are now going to allow users to build underweight
// units, we will just give
Expand All @@ -342,15 +363,19 @@ public void refreshRefitSummary() {
} else if (sb.length() > 0) {
btnRefit.setEnabled(false);
btnRefit.setToolTipText(sb.toString());
btnSaveForLater.setEnabled(true);
} else if (null != refit.checkFixable()) {
btnRefit.setEnabled(false);
btnRefit.setToolTipText(refit.checkFixable());
btnSaveForLater.setEnabled(true);
} else if (refit.getRefitClass() == Refit.NO_CHANGE && entity.getWeight() == testEntity.calculateWeight()) {
btnRefit.setEnabled(false);
btnRefit.setToolTipText("Nothing to change.");
btnSaveForLater.setEnabled(false);
} else {
btnRefit.setEnabled(true);
btnRefit.setToolTipText(null);
btnSaveForLater.setEnabled(true);
}

lblName.setText("<html><b>" + unit.getName() + "</b></html>");
Expand Down Expand Up @@ -482,9 +507,11 @@ private EntityPanel getCorrectLab(Entity en) {
}
}

private abstract static class EntityPanel extends JTabbedPane implements RefreshListener, EntitySource {
private abstract static class EntityPanel extends JTabbedPane implements RefreshListener, EntitySource, FileNameManager {

private boolean refreshRequired = false;
private String fileName = "";
private String originalName = "";

@Override
public abstract Entity getEntity();
Expand All @@ -497,6 +524,23 @@ public void scheduleRefresh() {
SwingUtilities.invokeLater(this::performRefresh);
}

@Override
public String getFileName() {
return fileName;
}

@Override
public boolean hasEntityNameChanged() {
return !MegaMekLabFileSaver.createUnitFilename(getEntity()).equals(originalName);
}

@Override
public void setFileName(String fileName) {
this.fileName = fileName;
// If the filename is reloaded, restart tracking of the unit name changing.
this.originalName = MegaMekLabFileSaver.createUnitFilename(getEntity());
}

private void performRefresh() {
if (refreshRequired) {
refreshRequired = false;
Expand Down
Loading