From 27110bb6ff69743500cb1b7bb5b7b730efb99570 Mon Sep 17 00:00:00 2001 From: a2geek Date: Sat, 10 Oct 2026 11:39:21 -0500 Subject: [PATCH] Worked a bit more on image creation wizard. Now creates proper sector device (disk, not HDD). Filename is set more appropriately and carried into the save as dialog. --- .../javafx/FileStoreWindow.java | 5 +- .../javafx/wizard/CreateFileStoreWizard.java | 108 +++++++++++++++--- 2 files changed, 93 insertions(+), 20 deletions(-) diff --git a/app/gui-javafx/src/main/java/org/applecommander/javafx/FileStoreWindow.java b/app/gui-javafx/src/main/java/org/applecommander/javafx/FileStoreWindow.java index 560785f0..26b5060e 100644 --- a/app/gui-javafx/src/main/java/org/applecommander/javafx/FileStoreWindow.java +++ b/app/gui-javafx/src/main/java/org/applecommander/javafx/FileStoreWindow.java @@ -359,6 +359,9 @@ public class FileStoreWindow { fileChooser.getExtensionFilters().add(new ExtensionFilter(extension.description(), extension.extensions())); } + FileStore fileStore = fileStoreSelection.getSelectedItem(); + Source source = fileStore.get(Source.class).orElseThrow(); + fileChooser.setInitialFileName(source.getName()); File selectedFile = fileChooser.showSaveDialog(primaryStage); if (selectedFile == null) { return; @@ -366,8 +369,6 @@ public class FileStoreWindow { Settings.setLastOpenedDirectory(selectedFile.getParentFile()); try { - FileStore fileStore = fileStoreSelection.getSelectedItem(); - Source source = fileStore.get(Source.class).orElseThrow(); Files.write(selectedFile.toPath(), source.readAllBytes().asBytes(), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); Optional newSource = Sources.create(selectedFile); openImage(newSource.orElseThrow(), false); diff --git a/app/gui-javafx/src/main/java/org/applecommander/javafx/wizard/CreateFileStoreWizard.java b/app/gui-javafx/src/main/java/org/applecommander/javafx/wizard/CreateFileStoreWizard.java index 5cf99d1e..ee8a397d 100644 --- a/app/gui-javafx/src/main/java/org/applecommander/javafx/wizard/CreateFileStoreWizard.java +++ b/app/gui-javafx/src/main/java/org/applecommander/javafx/wizard/CreateFileStoreWizard.java @@ -27,14 +27,15 @@ import javafx.geometry.Insets; import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.layout.GridPane; -import org.applecommander.device.DosOrderedTrackSectorDevice; -import org.applecommander.device.TrackSectorDevice; +import org.applecommander.device.*; +import org.applecommander.image.NibbleImage; import org.applecommander.javafx.FXControls; import org.applecommander.os.gamedos.GamedosFileStoreFactory; import org.applecommander.source.DataBufferSource; import org.applecommander.source.Source; import java.util.Map; +import java.util.Optional; public class CreateFileStoreWizard extends WizardDialog { private final ObjectProperty fileStoreSelectionProperty = new SimpleObjectProperty<>(); @@ -47,12 +48,39 @@ public class CreateFileStoreWizard extends WizardDialog { + // TODO + } + case SECTOR -> { + TrackSectorDevice device = createTrackSectorDevice(source); + GamedosFileStoreFactory.create(device); + } + } return source; } + public TrackSectorDevice createTrackSectorDevice(Source source) { + return switch (sectorOrderSelectionProperty.get()) { + case DOS -> new DosOrderedTrackSectorDevice(source); + case PRODOS -> new BlockToTrackSectorAdapter(new ProdosOrderedBlockDevice(source, + BlockDevice.STANDARD_BLOCK_SIZE), new ProdosBlockToTrackSectorAdapterStrategy()); + case NIBBLE -> SkewedTrackSectorDevice.physicalToDosSkew( + TrackSectorNibbleDevice.create(new NibbleImage(source), 16)); + }; + } + public BooleanBinding createNextPageBinding() { return currentPageProperty().isEqualTo(WizardPage.FILESTORE).and(fileStoreSelectionProperty.isNull()) .or(currentPageProperty().isEqualTo(WizardPage.SIZE).and(imageSizeSelectionProperty.isNull())) @@ -131,52 +159,96 @@ public class CreateFileStoreWizard extends WizardDialog getAlternateFileExtension() { + return Optional.ofNullable(alternateFileExtension); + } } + + /// Sector ordering selection. Note that this enum allows an override on the size of the disk; + /// specifically for nibble based images. public enum SectorOrderSelection { - DOS("DOS Ordered"), - PRODOS("ProDOS/Pascal Ordered"), - NIBBLE("Nibble Image"); + DOS("DOS Ordered", -1, "do"), + PRODOS("ProDOS/Pascal Ordered", -1, "po"), + NIBBLE("Nibble Image", DiskConstants.APPLE_140KB_NIBBLE_DISK, "nib"); private final String text; + private final int alternateSize; + private final String fileExtension; - SectorOrderSelection(String text) { + SectorOrderSelection(String text, int alternateSize, String fileExtension) { this.text = text; + this.alternateSize = alternateSize; + this.fileExtension = fileExtension; } public String getText() { return text; } + public Optional getAlternateSize() { + if (alternateSize != -1) { + return Optional.of(alternateSize); + } + return Optional.empty(); + } + public String getFileExtension() { + return fileExtension; + } } }