Signed-off-by: Andrea Odetti <mariofutire@gmail.com>
This commit is contained in:
Andrea Odetti 2021-05-22 15:20:12 +01:00
parent 8a14c7e974
commit 16c70e4cde
3 changed files with 40 additions and 32 deletions

View file

@ -8,49 +8,57 @@
#include "Core.h" #include "Core.h"
#include "Harddisk.h" #include "Harddisk.h"
namespace
{
void insertDisk(sa2::SDLFrame * frame, const char * filename, const size_t dragAndDropSlot, const size_t dragAndDropDrive)
{
CardManager & cardManager = GetCardMgr();
const SS_CARDTYPE cardInSlot = cardManager.QuerySlot(dragAndDropSlot);
switch (cardInSlot)
{
case CT_Disk2:
{
Disk2InterfaceCard * card2 = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(dragAndDropSlot));
const ImageError_e error = card2->InsertDisk(dragAndDropDrive, filename, IMAGE_USE_FILES_WRITE_PROTECT_STATUS, IMAGE_DONT_CREATE);
if (error != eIMAGE_ERROR_NONE)
{
card2->NotifyInvalidImage(dragAndDropDrive, filename, error);
}
break;
}
case CT_GenericHDD:
{
if (!HD_Insert(dragAndDropDrive, filename))
{
frame->FrameMessageBox("Invalid HD image", "ERROR", MB_OK);
}
break;
}
default:
{
frame->FrameMessageBox("Invalid D&D target", "ERROR", MB_OK);
}
}
}
}
namespace sa2 namespace sa2
{ {
void processFile(SDLFrame * frame, const char * filename, const size_t dragAndDropSlot) void processFile(SDLFrame * frame, const char * filename, const size_t dragAndDropSlot, const size_t dragAndDropDrive)
{ {
const char * yaml = ".yaml"; const char * yaml = ".yaml";
if (strlen(filename) > strlen(yaml) && !strcmp(filename + strlen(filename) - strlen(yaml), yaml)) if (strlen(filename) > strlen(yaml) && !strcmp(filename + strlen(filename) - strlen(yaml), yaml))
{ {
common2::setSnapshotFilename(filename, true); common2::setSnapshotFilename(filename, true);
frame->ResetSpeed();
} }
else else
{ {
CardManager & cardManager = GetCardMgr(); insertDisk(frame, filename, dragAndDropSlot, dragAndDropDrive);
SS_CARDTYPE cardInSlot = cardManager.QuerySlot(dragAndDropSlot);
switch (cardInSlot)
{
case CT_Disk2:
{
// for now we insert in DRIVE_1
Disk2InterfaceCard * card2 = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(dragAndDropSlot));
const ImageError_e error = card2->InsertDisk(dragAndDropSlot, filename, IMAGE_USE_FILES_WRITE_PROTECT_STATUS, IMAGE_DONT_CREATE);
if (error != eIMAGE_ERROR_NONE)
{
card2->NotifyInvalidImage(dragAndDropSlot, filename, error);
}
break;
}
case CT_GenericHDD:
{
if (!HD_Insert(dragAndDropSlot, filename))
{
frame->FrameMessageBox("Invalid HD image", "ERROR", MB_OK);
}
break;
}
default:
{
frame->FrameMessageBox("Invalid D&D target", "ERROR", MB_OK);
}
}
} }
frame->ResetSpeed();
} }
} }

View file

@ -2,5 +2,5 @@ namespace sa2
{ {
class SDLFrame; class SDLFrame;
void processFile(SDLFrame * frame, const char * filename, const size_t dragAndDropSlot); void processFile(SDLFrame * frame, const char * filename, const size_t dragAndDropSlot, const size_t dragAndDropDrive);
} }

View file

@ -317,7 +317,7 @@ namespace sa2
void SDLFrame::ProcessDropEvent(const SDL_DropEvent & drop) void SDLFrame::ProcessDropEvent(const SDL_DropEvent & drop)
{ {
processFile(this, drop.file, myDragAndDropSlot); processFile(this, drop.file, myDragAndDropSlot, myDragAndDropDrive);
} }
void SDLFrame::ProcessKeyDown(const SDL_KeyboardEvent & key) void SDLFrame::ProcessKeyDown(const SDL_KeyboardEvent & key)