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

Add discord-formatted export support #1517

Merged
merged 3 commits into from
Jun 1, 2024
Merged
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/Menu.properties
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ htmlUnitExportMenu.text=To HTML
textUnitExportMenu.text=To Text
# Clipboard Unit Export Menu
clipboardUnitExportMenu.text=To Clipboard
# Discord Clipboard Unit Export Menu
discordClipboardUnitExportMenu.text=To Clipboard For Discord
## Print Menu
printMenu.text=Print
miPrintUnitQueue.text=Queue Units to Print...
Expand Down
44 changes: 34 additions & 10 deletions megameklab/src/megameklab/ui/MenuBar.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import megamek.client.ui.swing.GUIPreferences;
import megamek.client.ui.swing.UnitLoadingDialog;
import megamek.common.*;
import megamek.common.MechView.ViewFormatting;
import megamek.common.annotations.Nullable;
import megamek.common.loaders.BLKFile;
import megamek.common.templates.TROView;
Expand Down Expand Up @@ -347,6 +348,7 @@ private JMenu createExportMenu() {
exportMenu.add(createHTMLUnitExportMenu());
exportMenu.add(createTextUnitExportMenu());
exportMenu.add(createClipboardUnitExportMenu());
exportMenu.add(createDiscordClipboardUnitExportMenu());

return exportMenu;
}
Expand Down Expand Up @@ -413,7 +415,7 @@ private JMenu createHTMLUnitExportMenu() {
final JMenuItem miExportCurrentUnitToHTML = new JMenuItem(resources.getString("CurrentUnit.text"));
miExportCurrentUnitToHTML.setName("miExportCurrentUnitToHTML");
miExportCurrentUnitToHTML.setMnemonic(KeyEvent.VK_U);
miExportCurrentUnitToHTML.addActionListener(evt -> exportSummary(true));
miExportCurrentUnitToHTML.addActionListener(evt -> exportSummary(ViewFormatting.Html));
miExportCurrentUnitToHTML.setEnabled(isUnitGui());
htmlUnitExportMenu.add(miExportCurrentUnitToHTML);

Expand All @@ -431,7 +433,7 @@ private JMenu createTextUnitExportMenu() {
final JMenuItem miExportCurrentUnitToText = new JMenuItem(resources.getString("CurrentUnit.text"));
miExportCurrentUnitToText.setName("miExportCurrentUnitToText");
miExportCurrentUnitToText.setMnemonic(KeyEvent.VK_U);
miExportCurrentUnitToText.addActionListener(evt -> exportSummary(false));
miExportCurrentUnitToText.addActionListener(evt -> exportSummary(ViewFormatting.None));
miExportCurrentUnitToText.setEnabled(isUnitGui());
textUnitExportMenu.add(miExportCurrentUnitToText);

Expand All @@ -451,7 +453,29 @@ private JMenu createClipboardUnitExportMenu() {
miExportCurrentUnitToClipboard.setMnemonic(KeyEvent.VK_U);
miExportCurrentUnitToClipboard.addActionListener(evt -> {
warnOnInvalid();
StringSelection stringSelection = new StringSelection(entitySummaryText(false));
StringSelection stringSelection = new StringSelection(entitySummaryText(ViewFormatting.None));
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, this);
});
miExportCurrentUnitToClipboard.setEnabled(isUnitGui());
clipboardUnitExportMenu.add(miExportCurrentUnitToClipboard);

return clipboardUnitExportMenu;
}

/**
* @return the created Clipboard Unit Export menu
*/
private JMenu createDiscordClipboardUnitExportMenu() {
final JMenu clipboardUnitExportMenu = new JMenu(resources.getString("discordClipboardUnitExportMenu.text"));
clipboardUnitExportMenu.setName("discordClipboardUnitExportMenu");
clipboardUnitExportMenu.setMnemonic(KeyEvent.VK_D);

final JMenuItem miExportCurrentUnitToClipboard = new JMenuItem(resources.getString("CurrentUnit.text"));
miExportCurrentUnitToClipboard.setName("miExportCurrentUnitToClipboard");
miExportCurrentUnitToClipboard.setMnemonic(KeyEvent.VK_U);
miExportCurrentUnitToClipboard.addActionListener(evt -> {
warnOnInvalid();
StringSelection stringSelection = new StringSelection(entitySummaryText(ViewFormatting.Discord));
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, this);
});
miExportCurrentUnitToClipboard.setEnabled(isUnitGui());
Expand Down Expand Up @@ -1111,32 +1135,32 @@ private boolean saveUnitTo(File file) {
}
}

private String entitySummaryText(boolean html) {
if (CConfig.getBooleanParam(CConfig.MISC_SUMMARY_FORMAT_TRO)) {
TROView view = TROView.createView(owner.getEntity(), html);
private String entitySummaryText(ViewFormatting formatting) {
if (CConfig.getBooleanParam(CConfig.MISC_SUMMARY_FORMAT_TRO) && formatting != ViewFormatting.Discord) {
TROView view = TROView.createView(owner.getEntity(), formatting);
return view.processTemplate();
} else {
MechView view = new MechView(owner.getEntity(), !html, false, html);
MechView view = new MechView(owner.getEntity(), formatting == ViewFormatting.None, false, formatting);
return view.getMechReadout();
}
}

private void exportSummary(boolean html) {
private void exportSummary(ViewFormatting formatting) {
warnOnInvalid();

String unitName = owner.getEntity().getChassis() + ' ' + owner.getEntity().getModel();

MMLFileChooser fileChooser = new MMLFileChooser();
fileChooser.setDialogTitle(resources.getString("dialog.saveAs.title"));
fileChooser.setSelectedFile(new File(unitName + (html ? ".html" : ".txt")));
fileChooser.setSelectedFile(new File(unitName + (formatting == ViewFormatting.Html ? ".html" : ".txt")));
int result = fileChooser.showSaveDialog(owner.getFrame());
if ((result != JFileChooser.APPROVE_OPTION) || (fileChooser.getSelectedFile() == null)) {
return;
}

try (FileOutputStream fos = new FileOutputStream(fileChooser.getSelectedFile());
PrintStream ps = new PrintStream(fos)) {
ps.println(entitySummaryText(html));
ps.println(entitySummaryText(formatting));
} catch (Exception ex) {
PopupMessages.showFileWriteError(owner.getFrame(), ex.getMessage());
LogManager.getLogger().error("", ex);
Expand Down
3 changes: 2 additions & 1 deletion megameklab/src/megameklab/ui/generalUnit/PreviewTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import megamek.client.ui.swing.alphaStrike.ConfigurableASCardPanel;
import megamek.client.ui.swing.calculationReport.FlexibleCalculationReport;
import megamek.common.Entity;
import megamek.common.MechView;
import megamek.common.alphaStrike.conversion.ASConverter;
import megamek.common.templates.TROView;
import megameklab.ui.EntitySource;
Expand Down Expand Up @@ -59,7 +60,7 @@ public void update() {
selectedUnit.recalculateTechAdvancement();
TROView troView = null;
try {
troView = TROView.createView(selectedUnit, true);
troView = TROView.createView(selectedUnit, MechView.ViewFormatting.Html);
} catch (Exception e) {
LogManager.getLogger().error("", e);
// error unit didn't load right. this is bad news.
Expand Down
Loading