Skip to content

Commit

Permalink
#17 Drag and drop support for .CRT
Browse files Browse the repository at this point in the history
  • Loading branch information
hagronnestad committed Apr 25, 2020
1 parent 109a82a commit 799cbac
Showing 1 changed file with 32 additions and 19 deletions.
51 changes: 32 additions & 19 deletions ComputerSystems/Commodore64/FormC64Screen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -264,22 +264,25 @@ private void BtnReset_Click(object sender, EventArgs e) {
C64.Cpu.Reset();
}


private async void pScreen_DragDropAsync(object sender, DragEventArgs e) {
if (e.Data.GetData(DataFormats.FileDrop) is string[] d && d.Length > 0) {
if (!File.Exists(d.First())) return;

await C64.Cpu.Pause();
LoadPrg(d.First());
C64.Cpu.Resume();
var fileName = d.First();
if (!File.Exists(fileName)) return;

switch (Path.GetExtension(fileName).ToLower()) {
case ".prg":
await C64.Cpu.Pause();
LoadPrg(fileName);
C64.Cpu.Resume();
// TODO: Auto run program
break;

// TODO: Fix this RUN hack
while (!Focused) {
Focus();
case ".crt":
await InsertCartridge(fileName);
break;
}
SendKeys.SendWait("r");
SendKeys.SendWait("u");
SendKeys.SendWait("n");
SendKeys.SendWait("{ENTER}");
}
}

Expand Down Expand Up @@ -361,20 +364,30 @@ private void btnToggleFullscreen_Click(object sender, EventArgs e) {
}

private async void btnInsertCartridge_ClickAsync(object sender, EventArgs e) {

if (!btnInsertCartridge.Checked) {
if (ofdInsertCartridge.ShowDialog() == DialogResult.OK) {
var crt = CrtFile.FromFile(ofdInsertCartridge.FileName);
C64.Cartridge = crt;
btnInsertCartridge.Text = $"{crt.Name}";
btnInsertCartridge.Checked = true;
await InsertCartridge(ofdInsertCartridge.FileName);
}

} else {
C64.Cartridge = null;
btnInsertCartridge.Text = "";
btnInsertCartridge.Checked = false;
await RemoveCartridge();
}
}

private async Task InsertCartridge(string fileName) {
var crt = CrtFile.FromFile(fileName);
C64.Cartridge = crt;
btnInsertCartridge.Text = $"{crt.Name}";
btnInsertCartridge.Checked = true;

await C64.PowerOff();
C64.PowerOn();
}

private async Task RemoveCartridge() {
C64.Cartridge = null;
btnInsertCartridge.Text = "";
btnInsertCartridge.Checked = false;

await C64.PowerOff();
C64.PowerOn();
Expand Down

0 comments on commit 799cbac

Please sign in to comment.