diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/Editor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/Editor.java index 1f1cc817..3b2e5d35 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/Editor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/Editor.java @@ -52,6 +52,8 @@ public abstract class Editor implements DataObserver { abstract public void copy(); + abstract public void copyData(); + abstract public void paste(); abstract public void select(); diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/GlobalEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/GlobalEditor.java index b374c22d..bd125112 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/GlobalEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/GlobalEditor.java @@ -89,5 +89,10 @@ public class GlobalEditor extends Editor{ private GameData getGameData() { return ApplicationState.getInstance().getGameData(); } + + @Override + public void copyData() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } } diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java index 1654b738..675a32bc 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java @@ -562,6 +562,11 @@ public class MapEditor extends Editor implements EventH return ApplicationState.getInstance().getCurrentPlatform(); } + @Override + public void copyData() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + public static enum DrawMode { Pencil1px, Pencil3px, Pencil5px, FilledRect, TileEraser(false), ScriptPencil(false), Select(false); diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleImageEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleImageEditor.java index 5f0afe82..640f2078 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleImageEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleImageEditor.java @@ -429,7 +429,14 @@ public class AppleImageEditor extends ImageEditor implements EventHandler clip = new HashMap<>(); + clip.put(DataFormat.PLAIN_TEXT, AppleNTSCGraphics.generateHgrMonitorListing(getPlatformData())); + Clipboard.getSystemClipboard().setContent(clip); + } + + byte[] copyBuffer = null; @Override public void copy() { @@ -437,7 +444,7 @@ public class AppleImageEditor extends ImageEditor implements EventHandler d.getPlatform().equals(getPlatform().name())).findFirst().orElse(null); if (platformData == null) { @@ -555,30 +562,14 @@ public class AppleImageEditor extends ImageEditor implements EventHandler> 3) + ((y & 7) << 10); - } - - private int calculateTextOffset(int y) { - return ((y & 7) << 7) + 40 * (y >> 3); - } - @Override public void exportImage() { - byte[] output = new byte[0x02000]; - int counter = 0; - for (int y = 0; y < getHeight(); y++) { - int offset = calculateHiresOffset(y); - for (int x = 0; x < getWidth(); x++) { - output[offset + x] = getImageData()[counter++]; - } - } File out = FileUtils.getFile(null, "Export image", true, FileUtils.Extension.BINARY, FileUtils.Extension.ALL); if (out == null) { return; } try (FileOutputStream outStream = new FileOutputStream(out)) { - outStream.write(output); + outStream.write(AppleNTSCGraphics.getAppleHGRBinary(getPlatformData())); outStream.flush(); } catch (IOException ex) { Logger.getLogger(AppleImageEditor.class.getName()).log(Level.SEVERE, null, ex); diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleNTSCGraphics.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleNTSCGraphics.java index bcfeaf0c..3c50fb31 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleNTSCGraphics.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleNTSCGraphics.java @@ -7,9 +7,10 @@ * ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ - package org.badvision.outlaweditor.apple; +import org.badvision.outlaweditor.data.xml.PlatformData; + /** * * @author brobert @@ -18,7 +19,7 @@ public class AppleNTSCGraphics { // i Range [-0.5957, 0.5957] public static final double MAX_I = 0.5957; - + // q Range [-0.5226, 0.5226] public static final double MAX_Q = 0.5226; public static final double MAX_Y = 1; @@ -122,7 +123,63 @@ public class AppleNTSCGraphics { } } + static public int calculateHiresOffset(int y) { + return calculateTextOffset(y >> 3) + ((y & 7) << 10); + } + + static public int calculateTextOffset(int y) { + return ((y & 7) << 7) + 40 * (y >> 3); + } + static { initPalettes(); } + + public static String generateHgrMonitorListing(PlatformData data) { + StringBuilder listing = new StringBuilder(); + for (int y = 0; y < data.getHeight(); y++) { + int pos = calculateHiresOffset(y) + 0x02000; + listing.append("\n").append(Integer.toHexString(pos)).append(":"); + for (int x = 0; x < data.getWidth(); x++) { + int val = data.getValue()[data.getWidth() * y + x] & 0x0ff; + listing.append(Integer.toHexString(val)).append(" "); + } + } + listing.append("\n"); + return listing.toString(); + } + + static byte[] getAppleHGRBinary(PlatformData platformData) { + byte[] output = new byte[0x02000]; + int counter = 0; + for (int y = 0; y < platformData.getHeight(); y++) { + int offset = calculateHiresOffset(y); + for (int x = 0; x < platformData.getWidth(); x++) { + output[offset + x] = platformData.getValue()[counter++]; + } + } + return output; + } + + public static Object generateDhgrMonitorListing(PlatformData data) { + StringBuilder listing = new StringBuilder(); + for (int y = 0; y < data.getHeight(); y++) { + int pos = calculateHiresOffset(y) + 0x02000; + listing.append("\n").append(Integer.toHexString(pos)).append(":"); + for (int x = 1; x < data.getWidth(); x+=2) { + int val = data.getValue()[data.getWidth() * y + x] & 0x0ff; + listing.append(Integer.toHexString(val)).append(" "); + } + } + for (int y = 0; y < data.getHeight(); y++) { + int pos = calculateHiresOffset(y) + 0x04000; + listing.append("\n").append(Integer.toHexString(pos)).append(":"); + for (int x = 0; x < data.getWidth(); x+=2) { + int val = data.getValue()[data.getWidth() * y + x] & 0x0ff; + listing.append(Integer.toHexString(val)).append(" "); + } + } + listing.append("\n"); + return listing.toString(); + } } diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleTileEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleTileEditor.java index 22c15e12..27e1c7aa 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleTileEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/AppleTileEditor.java @@ -295,4 +295,9 @@ public class AppleTileEditor extends TileEditor { + DataUtilities.getHexValue((int) (color.getGreen() * 255)) + DataUtilities.getHexValue((int) (color.getBlue() * 255)); } + + @Override + public void copyData() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } } diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/dhgr/AppleDHGRImageEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/dhgr/AppleDHGRImageEditor.java index d64591a1..d39f95c4 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/dhgr/AppleDHGRImageEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/dhgr/AppleDHGRImageEditor.java @@ -10,9 +10,12 @@ package org.badvision.outlaweditor.apple.dhgr; +import java.util.HashMap; import org.badvision.outlaweditor.apple.*; import javafx.event.EventHandler; import javafx.scene.control.Menu; +import javafx.scene.input.Clipboard; +import javafx.scene.input.DataFormat; import javafx.scene.input.MouseEvent; import org.badvision.outlaweditor.api.Platform; import org.badvision.outlaweditor.data.DataObserver; @@ -77,5 +80,12 @@ public class AppleDHGRImageEditor extends AppleImageEditor implements EventHandl */ @Override public void crop(int newWidth, int newHeight) { - } + } + + @Override + public void copyData() { + java.util.Map clip = new HashMap<>(); + clip.put(DataFormat.PLAIN_TEXT, AppleNTSCGraphics.generateDhgrMonitorListing(getPlatformData())); + Clipboard.getSystemClipboard().setContent(clip); + } } \ No newline at end of file diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/dhgr/AppleDHGRTileEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/dhgr/AppleDHGRTileEditor.java index 909294cc..41e46866 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/dhgr/AppleDHGRTileEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/apple/dhgr/AppleDHGRTileEditor.java @@ -250,4 +250,9 @@ public class AppleDHGRTileEditor extends TileEditor { TileUtils.redrawTile(getEntity()); } } + + @Override + public void copyData() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } } diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/ApplicationMenuController.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/ApplicationMenuController.java index 0b2b8605..77df44b7 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/ApplicationMenuController.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/ApplicationMenuController.java @@ -41,6 +41,9 @@ public abstract class ApplicationMenuController { @FXML abstract public void onEditCopy(ActionEvent event); + @FXML + abstract public void onEditCopyData(ActionEvent event); + @FXML abstract public void onEditPaste(ActionEvent event); diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/ApplicationMenuControllerImpl.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/ApplicationMenuControllerImpl.java index 1767900d..16778cd0 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/ApplicationMenuControllerImpl.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/ApplicationMenuControllerImpl.java @@ -78,6 +78,14 @@ public class ApplicationMenuControllerImpl extends ApplicationMenuController { } } + @Override + public void onEditCopyData(ActionEvent event) { + ApplicationUIController mainController = ApplicationUIController.getController(); + if (mainController.getVisibleEditor() != null) { + mainController.getVisibleEditor().copyData(); + } + } + @Override public void onEditPaste(ActionEvent event) { ApplicationUIController mainController = ApplicationUIController.getController(); diff --git a/OutlawEditor/src/main/resources/Menubar.fxml b/OutlawEditor/src/main/resources/Menubar.fxml index 446cfc69..aa2100ff 100644 --- a/OutlawEditor/src/main/resources/Menubar.fxml +++ b/OutlawEditor/src/main/resources/Menubar.fxml @@ -19,6 +19,7 @@ +