Buttons in browse mode can change the selected ROM

Holding down the first button and pressing one of the other buttons will select different ROMs (if they have been specified in the options.txt file)
This commit is contained in:
Stephen White 2018-07-29 14:22:14 +10:00
parent 369e2ff800
commit 5ac2fe8c45
5 changed files with 102 additions and 49 deletions

View File

@ -386,6 +386,7 @@ FileBrowser::FileBrowser(DiskCaddy* diskCaddy, ROMs* roms, u8* deviceID, bool di
, deviceID(deviceID) , deviceID(deviceID)
, displayPNGIcons(displayPNGIcons) , displayPNGIcons(displayPNGIcons)
, buttonChangedDevice(false) , buttonChangedDevice(false)
, buttonSelectROM(false)
, screenMain(screenMain) , screenMain(screenMain)
, screenLCD(screenLCD) , screenLCD(screenLCD)
, scrollHighlightRate(scrollHighlightRate) , scrollHighlightRate(scrollHighlightRate)
@ -825,14 +826,12 @@ void FileBrowser::UpdateInputFolders()
{ {
if (inputMappings->BrowseSelect()) if (inputMappings->BrowseSelect())
{ {
DEBUG_LOG("DEv8\r\n");
GlobalSetDeviceID(8); GlobalSetDeviceID(8);
ShowDeviceAndROM(); ShowDeviceAndROM();
buttonChangedDevice = true; buttonChangedDevice = true;
} }
else if (inputMappings->BrowseUp()) else if (inputMappings->BrowseUp())
{ {
DEBUG_LOG("DEv9\r\n");
GlobalSetDeviceID(9); GlobalSetDeviceID(9);
ShowDeviceAndROM(); ShowDeviceAndROM();
buttonChangedDevice = true; buttonChangedDevice = true;
@ -850,6 +849,29 @@ void FileBrowser::UpdateInputFolders()
buttonChangedDevice = true; buttonChangedDevice = true;
} }
} }
else if (IEC_Bus::GetInputButtonHeld(0))
{
if (inputMappings->BrowseUp())
{
SelectROM(0);
buttonSelectROM = true;
}
else if (inputMappings->BrowseDown())
{
SelectROM(1);
buttonSelectROM = true;
}
else if (inputMappings->BrowseBack())
{
SelectROM(2);
buttonSelectROM = true;
}
else if (inputMappings->BrowseInsert())
{
SelectROM(3);
buttonSelectROM = true;
}
}
else else
{ {
if (folder.entries.size() > 0) if (folder.entries.size() > 0)
@ -859,49 +881,56 @@ void FileBrowser::UpdateInputFolders()
if (inputMappings->BrowseSelect()) if (inputMappings->BrowseSelect())
{ {
FileBrowser::BrowsableList::Entry* current = folder.current; if (buttonSelectROM)
if (current)
{ {
if (current->filImage.fattrib & AM_DIR) buttonSelectROM = false;
}
else
{
FileBrowser::BrowsableList::Entry* current = folder.current;
if (current)
{ {
if (strcmp(current->filImage.fname, "..") == 0) if (current->filImage.fattrib & AM_DIR)
{ {
PopFolder(); if (strcmp(current->filImage.fname, "..") == 0)
}
else if (strcmp(current->filImage.fname, ".") != 0)
{
f_chdir(current->filImage.fname);
RefreshFolderEntries();
}
dirty = true;
}
else
{
if (strcmp(current->filImage.fname, "..") == 0)
{
PopFolder();
}
else if (DiskImage::IsDiskImageExtention(current->filImage.fname))
{
DiskImage::DiskType diskType = DiskImage::GetDiskImageTypeViaExtention(current->filImage.fname);
// Should also be able to create a LST file from all the images currently selected in the caddy
if (diskType == DiskImage::LST)
{ {
selectionsMade = SelectLST(current->filImage.fname); PopFolder();
} }
else else if (strcmp(current->filImage.fname, ".") != 0)
{ {
// Add the current selected f_chdir(current->filImage.fname);
AddToCaddy(current); RefreshFolderEntries();
selectionsMade = FillCaddyWithSelections();
} }
if (selectionsMade)
lastSelectionName = current->filImage.fname;
dirty = true; dirty = true;
} }
else
{
if (strcmp(current->filImage.fname, "..") == 0)
{
PopFolder();
}
else if (DiskImage::IsDiskImageExtention(current->filImage.fname))
{
DiskImage::DiskType diskType = DiskImage::GetDiskImageTypeViaExtention(current->filImage.fname);
// Should also be able to create a LST file from all the images currently selected in the caddy
if (diskType == DiskImage::LST)
{
selectionsMade = SelectLST(current->filImage.fname);
}
else
{
// Add the current selected
AddToCaddy(current);
selectionsMade = FillCaddyWithSelections();
}
if (selectionsMade)
lastSelectionName = current->filImage.fname;
dirty = true;
}
}
} }
} }
} }
@ -957,12 +986,8 @@ void FileBrowser::UpdateInputFolders()
|| keyboard->KeyPressed(FileBrowser::SwapKeys[keySetIndexBase + 1]) || keyboard->KeyPressed(FileBrowser::SwapKeys[keySetIndexBase + 1])
|| keyboard->KeyPressed(FileBrowser::SwapKeys[keySetIndexBase + 2])) || keyboard->KeyPressed(FileBrowser::SwapKeys[keySetIndexBase + 2]))
{ {
if ( (keySetIndex < ROMs::MAX_ROMS) && (roms->ROMValid[keySetIndex]) ) if (SelectROM(keySetIndex))
{ {
roms->currentROMIndex = keySetIndex;
roms->lastManualSelectedROMIndex = keySetIndex;
DEBUG_LOG("Swap ROM %d %s\r\n", keySetIndex, roms->ROMNames[keySetIndex]);
ShowDeviceAndROM();
} }
else if ( (keySetIndex >= 7) && (keySetIndex <= 10 ) ) else if ( (keySetIndex >= 7) && (keySetIndex <= 10 ) )
{ {
@ -985,6 +1010,20 @@ void FileBrowser::UpdateInputFolders()
} }
} }
bool FileBrowser::SelectROM(u32 index)
{
if ((index < ROMs::MAX_ROMS) && (roms->ROMValid[index]))
{
roms->currentROMIndex = index;
roms->lastManualSelectedROMIndex = index;
DEBUG_LOG("Swap ROM %d %s\r\n", index, roms->ROMNames[index]);
ShowDeviceAndROM();
return true;
}
return false;
}
bool FileBrowser::SelectLST(const char* filenameLST) bool FileBrowser::SelectLST(const char* filenameLST)
{ {
bool validImage = false; bool validImage = false;

View File

@ -217,6 +217,8 @@ private:
bool CheckForPNG(const char* filename, FILINFO& filIcon); bool CheckForPNG(const char* filename, FILINFO& filIcon);
void DisplayPNG(); void DisplayPNG();
bool SelectROM(u32 index);
enum State enum State
{ {
State_Folders, State_Folders,
@ -231,6 +233,7 @@ private:
u8* deviceID; u8* deviceID;
bool displayPNGIcons; bool displayPNGIcons;
bool buttonChangedDevice; bool buttonChangedDevice;
bool buttonSelectROM;
BrowsableList caddySelections; BrowsableList caddySelections;

View File

@ -35,15 +35,18 @@ InputMappings::InputMappings()
: keyboardBrowseLCDScreen(false) : keyboardBrowseLCDScreen(false)
, insertButtonPressedPrev(false) , insertButtonPressedPrev(false)
, insertButtonPressed(false) , insertButtonPressed(false)
, enterButtonPressedPrev(false)
, enterButtonPressed(false)
{ {
} }
bool InputMappings::CheckButtonsBrowseMode() bool InputMappings::CheckButtonsBrowseMode()
{ {
buttonFlags = 0; buttonFlags = 0;
if (IEC_Bus::GetInputButtonPressed(0)) //if (IEC_Bus::GetInputButtonPressed(0))
SetButtonFlag(ENTER_FLAG); // SetButtonFlag(ENTER_FLAG);
else if (IEC_Bus::GetInputButtonRepeating(1)) //else
if (IEC_Bus::GetInputButtonRepeating(1))
SetButtonFlag(UP_FLAG); SetButtonFlag(UP_FLAG);
else if (IEC_Bus::GetInputButtonRepeating(2)) else if (IEC_Bus::GetInputButtonRepeating(2))
SetButtonFlag(DOWN_FLAG); SetButtonFlag(DOWN_FLAG);
@ -57,6 +60,11 @@ bool InputMappings::CheckButtonsBrowseMode()
SetButtonFlag(INSERT_FLAG); SetButtonFlag(INSERT_FLAG);
insertButtonPressedPrev = insertButtonPressed; insertButtonPressedPrev = insertButtonPressed;
enterButtonPressed = !IEC_Bus::GetInputButtonReleased(0);
if (enterButtonPressedPrev && !enterButtonPressed)
SetButtonFlag(ENTER_FLAG);
enterButtonPressedPrev = enterButtonPressed;
return buttonFlags != 0; return buttonFlags != 0;
} }

View File

@ -53,6 +53,9 @@ protected:
bool insertButtonPressedPrev; bool insertButtonPressedPrev;
bool insertButtonPressed; bool insertButtonPressed;
bool enterButtonPressedPrev;
bool enterButtonPressed;
//inline void SetUartFlag(unsigned flag) { uartFlags |= flag; } //inline void SetUartFlag(unsigned flag) { uartFlags |= flag; }
//inline bool UartFlag(unsigned flag) { return (uartFlags & flag) != 0; } //inline bool UartFlag(unsigned flag) { return (uartFlags & flag) != 0; }
inline void SetKeyboardFlag(unsigned flag) { keyboardFlags |= flag; } inline void SetKeyboardFlag(unsigned flag) { keyboardFlags |= flag; }

View File

@ -51,12 +51,12 @@ bool IEC_Bus::ignoreReset = false;
u32 IEC_Bus::myOutsGPFSEL1 = 0; u32 IEC_Bus::myOutsGPFSEL1 = 0;
u32 IEC_Bus::myOutsGPFSEL0 = 0; u32 IEC_Bus::myOutsGPFSEL0 = 0;
bool IEC_Bus::InputButton[5]; bool IEC_Bus::InputButton[5] = { 0 };
bool IEC_Bus::InputButtonPrev[5]; bool IEC_Bus::InputButtonPrev[5] = { 0 };
u32 IEC_Bus::validInputCount[5]; u32 IEC_Bus::validInputCount[5] = { 0 };
u32 IEC_Bus::inputRepeatThreshold[5]; u32 IEC_Bus::inputRepeatThreshold[5];
u32 IEC_Bus::inputRepeat[5]; u32 IEC_Bus::inputRepeat[5] = { 0 };
u32 IEC_Bus::inputRepeatPrev[5]; u32 IEC_Bus::inputRepeatPrev[5] = { 0 };
m6522* IEC_Bus::VIA = 0; m6522* IEC_Bus::VIA = 0;