diff --git a/megameklab/src/megameklab/printing/PrintRecordSheet.java b/megameklab/src/megameklab/printing/PrintRecordSheet.java
index c2a9eaaef..92e02bce2 100644
--- a/megameklab/src/megameklab/printing/PrintRecordSheet.java
+++ b/megameklab/src/megameklab/printing/PrintRecordSheet.java
@@ -304,7 +304,7 @@ private void shadeTableRows() {
/**
* @return true if the document was created successfully, otherwise false
*/
- protected boolean createDocument(int pageIndex, PageFormat pageFormat, boolean addMargin) {
+ public boolean createDocument(int pageIndex, PageFormat pageFormat, boolean addMargin) {
setSVGDocument(loadTemplate(pageIndex, pageFormat));
if (getSVGDocument() == null) {
return false;
@@ -386,7 +386,7 @@ public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {
return new ByteArrayInputStream(output.toByteArray());
}
- protected GraphicsNode build() {
+ public GraphicsNode build() {
GVTBuilder builder = new GVTBuilder();
BridgeContext ctx = new BridgeContext(new UserAgentAdapter() {
@Override
diff --git a/megameklab/src/megameklab/ui/generalUnit/PreviewTab.java b/megameklab/src/megameklab/ui/generalUnit/PreviewTab.java
index 284868f4d..2c5da59e0 100644
--- a/megameklab/src/megameklab/ui/generalUnit/PreviewTab.java
+++ b/megameklab/src/megameklab/ui/generalUnit/PreviewTab.java
@@ -42,6 +42,7 @@ public class PreviewTab extends ITab {
private final ConfigurableMechViewPanel panelMekView = new ConfigurableMechViewPanel();
private final MechViewPanel panelTROView = new MechViewPanel();
private final ConfigurableASCardPanel cardPanel = new ConfigurableASCardPanel(null);
+ private final RecordSheetPreviewPanel rsPanel = new RecordSheetPreviewPanel();
public PreviewTab(EntitySource eSource) {
super(eSource);
@@ -50,6 +51,7 @@ public PreviewTab(EntitySource eSource) {
panPreview.addTab("Summary", panelMekView);
panPreview.addTab("TRO", panelTROView);
panPreview.addTab("AS Card", cardPanel);
+ panPreview.addTab("Record Sheet", rsPanel);
add(panPreview, BorderLayout.CENTER);
addComponentListener(refreshOnShow);
}
@@ -74,10 +76,12 @@ public void update() {
} else {
cardPanel.setASElement(null);
}
+ rsPanel.setEntity(selectedUnit);
} else {
panelMekView.reset();
panelTROView.reset();
cardPanel.setASElement(null);
+ rsPanel.setEntity(null);
}
}
diff --git a/megameklab/src/megameklab/ui/generalUnit/RecordSheetPreviewPanel.java b/megameklab/src/megameklab/ui/generalUnit/RecordSheetPreviewPanel.java
new file mode 100644
index 000000000..4e916df5c
--- /dev/null
+++ b/megameklab/src/megameklab/ui/generalUnit/RecordSheetPreviewPanel.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2024 - The MegaMek Team. All Rights Reserved.
+ *
+ * This file is part of MegaMek.
+ *
+ * MegaMek is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MegaMek is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with MegaMek. If not, see .
+ */
+
+package megameklab.ui.generalUnit;
+
+import megamek.common.Entity;
+import megameklab.printing.PrintRecordSheet;
+import megameklab.printing.RecordSheetOptions;
+import megameklab.util.UnitPrintManager;
+import org.apache.batik.gvt.GraphicsNode;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.geom.AffineTransform;
+import java.awt.print.PageFormat;
+import java.util.List;
+
+
+/**
+ * @author pavelbraginskiy
+ *
+ * Simply fills itself with the record sheet for the given unit.
+ */
+public class RecordSheetPreviewPanel extends JPanel {
+ private Entity entity;
+
+ public void setEntity(Entity entity) {
+ this.entity = entity;
+ }
+
+ @Override
+ public void paintComponent(Graphics g) {
+ super.paintComponent(g);
+ Graphics2D g2d = (Graphics2D) g;
+
+ // Set render quality, antialiasing is extremely necessary
+ RenderingHints rh = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+ rh.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ rh.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+ g2d.setRenderingHints(rh);
+
+ // White background for image
+ g2d.setColor(Color.WHITE);
+ g2d.clearRect(0, 0, getWidth(), getHeight());
+
+
+ if (entity != null) {
+ RecordSheetOptions options = new RecordSheetOptions();
+ PrintRecordSheet sheet = UnitPrintManager.createSheets(List.of(entity), true, options).get(0);
+
+ // 5-pixel margin around rs
+ PageFormat pf = new PageFormat();
+ pf.setPaper(options.getPaperSize().createPaper(5, 5, 5, 5));
+ sheet.createDocument(0, pf, true);
+
+ GraphicsNode gn = sheet.build();
+
+ // Scale record sheet to the size of the panel, taking into account the 10 pixels taken up by margin
+ var bounds = gn.getBounds();
+ var yscale = (getHeight() - 10) / bounds.getHeight();
+ var xscale = (getWidth() - 10) / bounds.getWidth();
+ var scale = Math.min(yscale, xscale);
+ gn.setTransform(AffineTransform.getScaleInstance(scale, scale));
+
+ // Draw the completed record sheet SVG to the panel
+ gn.paint(g2d);
+ }
+ }
+}
diff --git a/megameklab/src/megameklab/util/UnitPrintManager.java b/megameklab/src/megameklab/util/UnitPrintManager.java
index b09c7c479..a70b6c2ad 100644
--- a/megameklab/src/megameklab/util/UnitPrintManager.java
+++ b/megameklab/src/megameklab/util/UnitPrintManager.java
@@ -113,7 +113,7 @@ private static File getExportFile(Frame parent, String suggestedFileName) {
return f.getSelectedFile();
}
- private static List createSheets(List extends BTObject> entities, boolean singlePrint,
+ public static List createSheets(List extends BTObject> entities, boolean singlePrint,
RecordSheetOptions options) {
List sheets = new ArrayList<>();
List infList = new ArrayList<>();