diff --git a/docs/index.html b/docs/index.html index c9d7a2553..a13b137d8 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2267,23 +2267,8 @@ Go to parent directory (also in other file dialogs) - Backspace, Alt + Up arrow - Backspace, Alt + Up arrow - - - Go to home directory - Alt + Home - Alt + Home - - - Go to previous directory in history - Alt + Left arrow - Alt + Left arrow - - - Go to next directory in history - Alt + Right arrow - Alt + Right arrow + Backspace + Backspace Remove from 'Recently Played' or 'Most Popular' folder diff --git a/src/emucore/CartBUS.cxx b/src/emucore/CartBUS.cxx index 69eae0b0d..d181c7742 100644 --- a/src/emucore/CartBUS.cxx +++ b/src/emucore/CartBUS.cxx @@ -67,9 +67,9 @@ CartridgeBUS::CartridgeBUS(const ByteBuffer& image, size_t size, reinterpret_cast(myImage.get()), reinterpret_cast(myRAM.data()), static_cast(32_KB), - Thumbulator::rom_base + 0x0800, - Thumbulator::rom_base + 0x0808, - Thumbulator::ram_base + 0x1FDC, + 0x00000800, + 0x00000808, + 0x40001FDC, devSettings ? settings.getBool("dev.thumb.trapfatal") : false, devSettings ? static_cast( settings.getFloat("dev.thumb.cyclefactor")) : 1.0, @@ -256,8 +256,8 @@ uInt8 CartridgeBUS::peek(uInt16 address) // get sample value from ROM or RAM if (sampleaddress < 0x8000) peekvalue = myImage[sampleaddress]; - else if (sampleaddress >= Thumbulator::ram_base && sampleaddress < Thumbulator::ram_base + 0x2000) // check for RAM - peekvalue = myRAM[sampleaddress - Thumbulator::ram_base]; + else if (sampleaddress >= 0x40000000 && sampleaddress < 0x40002000) // check for RAM + peekvalue = myRAM[sampleaddress - 0x40000000]; else peekvalue = 0; @@ -707,7 +707,7 @@ uInt32 CartridgeBUS::getWaveform(uInt8 index) const (myRAM[WAVEFORM + index*4 + 2] << 16) + (myRAM[WAVEFORM + index*4 + 3] << 24); // high byte - result -= Thumbulator::ram_base + 0x0800; + result -= 0x40000800; if (result >= 4096) result = 0; diff --git a/src/emucore/CartCDF.cxx b/src/emucore/CartCDF.cxx index 6d9d4b1b1..547e83a50 100644 --- a/src/emucore/CartCDF.cxx +++ b/src/emucore/CartCDF.cxx @@ -90,13 +90,13 @@ CartridgeCDF::CartridgeCDF(const ByteBuffer& image, size_t size, // C addresses uInt32 cBase, cStart, cStack; if (isCDFJplus()) { - cBase = Thumbulator::rom_base + getUInt32(myImage.get(), 0x17F8) & 0x0FFFFFFE; // C Base Address + cBase = getUInt32(myImage.get(), 0x17F8) & 0xFFFFFFFE; // C Base Address cStart = cBase; // C Start Address - cStack = Thumbulator::ram_base + (getUInt32(myImage.get(), 0x17F4) & 0x0FFFFFFF); // C Stack + cStack = getUInt32(myImage.get(), 0x17F4); // C Stack } else { - cBase = Thumbulator::rom_base + 0x800; // C Base Address - cStart = Thumbulator::rom_base + 0x808; // C Start Address (skip ARM header) - cStack = Thumbulator::ram_base + 0x1FDC; // C Stack + cBase = 0x800; // C Base Address + cStart = 0x808; // C Start Address (skip ARM header) + cStack = 0x40001FDC; // C Stack } // Create Thumbulator ARM emulator @@ -296,8 +296,8 @@ uInt8 CartridgeCDF::peek(uInt16 address) // get sample value from ROM or RAM if (sampleaddress < 0x00080000) peekvalue = myImage[sampleaddress]; - else if (sampleaddress >= Thumbulator::ram_base && sampleaddress < Thumbulator::ram_base + 0x8000) // check for RAM - peekvalue = myRAM[sampleaddress - Thumbulator::ram_base]; + else if (sampleaddress >= 0x40000000 && sampleaddress < 0x40008000) // check for RAM + peekvalue = myRAM[sampleaddress - 0x40000000]; else peekvalue = 0; @@ -677,7 +677,7 @@ uInt32 CartridgeCDF::getWaveform(uInt8 index) const (myRAM[address + 2] << 16) + (myRAM[address + 3] << 24); // high byte - result -= (Thumbulator::ram_base + uInt32(2_KB)); + result -= (0x40000000 + uInt32(2_KB)); if (!isCDFJplus()) { if (result >= 4096) { diff --git a/src/emucore/CartDPCPlus.cxx b/src/emucore/CartDPCPlus.cxx index 97586aa65..8d9b99b72 100644 --- a/src/emucore/CartDPCPlus.cxx +++ b/src/emucore/CartDPCPlus.cxx @@ -53,9 +53,9 @@ CartridgeDPCPlus::CartridgeDPCPlus(const ByteBuffer& image, size_t size, (reinterpret_cast(myImage.get()), reinterpret_cast(myDPCRAM.data()), static_cast(32_KB), - Thumbulator::rom_base + 0x0C00, - Thumbulator::rom_base + 0x0C08, - Thumbulator::ram_base + 0x1FDC, + 0x00000C00, + 0x00000C08, + 0x40001FDC, devSettings ? settings.getBool("dev.thumb.trapfatal") : false, devSettings ? static_cast( settings.getFloat("dev.thumb.cyclefactor")) : 1.0, diff --git a/src/emucore/Thumbulator.cxx b/src/emucore/Thumbulator.cxx index 96ac7dd5e..d32881fa7 100644 --- a/src/emucore/Thumbulator.cxx +++ b/src/emucore/Thumbulator.cxx @@ -123,8 +123,6 @@ using Common::Base; #define INC_ARM_CYCLES(m) #endif -//#define UNSAFE_OPTIMIZATIONS - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Thumbulator::Thumbulator(const uInt16* rom_ptr, uInt16* ram_ptr, uInt32 rom_size, const uInt32 c_base, const uInt32 c_start, const uInt32 c_stack, @@ -327,7 +325,7 @@ uInt32 Thumbulator::fetch16(uInt32 addr) switch(addr & 0xF0000000) { - case rom_base: //ROM + case 0x00000000: //ROM addr &= ROMADDMASK; if(addr < 0x50) fatalError("fetch16", addr, "abort"); @@ -336,7 +334,7 @@ uInt32 Thumbulator::fetch16(uInt32 addr) DO_DBUG(statusMsg << "fetch16(" << Base::HEX8 << addr << ")=" << Base::HEX4 << data << endl); return data; - case ram_base: //RAM + case 0x40000000: //RAM addr &= RAMADDMASK; addr >>= 1; data = CONV_RAMROM(ram[addr]); @@ -355,7 +353,7 @@ uInt32 Thumbulator::fetch16(uInt32 addr) void Thumbulator::write16(uInt32 addr, uInt32 data) { #ifndef UNSAFE_OPTIMIZATIONS - if((addr > Thumbulator::ram_base + 0x7fff) && (addr < Thumbulator::ram_base + 0x10000000)) + if((addr > 0x40007fff) && (addr < 0x50000000)) fatalError("write16", addr, "abort - out of range"); if (isProtected(addr)) fatalError("write16", addr, "to driver area"); @@ -371,7 +369,7 @@ void Thumbulator::write16(uInt32 addr, uInt32 data) switch(addr & 0xF0000000) { - case ram_base: //RAM + case 0x40000000: //RAM addr &= RAMADDMASK; addr >>= 1; ram[addr] = CONV_DATA(data); @@ -533,7 +531,7 @@ void Thumbulator::write32(uInt32 addr, uInt32 data) return; #ifndef UNSAFE_OPTIMIZATIONS - case ram_base: //RAM + case 0x40000000: //RAM #else default: #endif @@ -550,8 +548,8 @@ void Thumbulator::write32(uInt32 addr, uInt32 data) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool Thumbulator::isProtected(uInt32 addr) { - if (addr < ram_base) return false; - addr -= ram_base; + if (addr < 0x40000000) return false; + addr -= 0x40000000; switch (configuration) { case ConfigureFor::DPCplus: @@ -580,9 +578,9 @@ uInt32 Thumbulator::read16(uInt32 addr) { uInt32 data; #ifndef UNSAFE_OPTIMIZATIONS - if((addr > Thumbulator::ram_base + 0x7fff) && (addr < Thumbulator::ram_base + 0x10000000)) + if((addr > 0x40007fff) && (addr < 0x50000000)) fatalError("read16", addr, "abort - out of range"); - else if((addr > Thumbulator::rom_base + 0x0007ffff) && (addr < Thumbulator::rom_base + 0x10000000)) + else if((addr > 0x0007ffff) && (addr < 0x10000000)) fatalError("read16", addr, "abort - out of range"); if(addr & 1) fatalError("read16", addr, "abort - misaligned"); @@ -593,16 +591,14 @@ uInt32 Thumbulator::read16(uInt32 addr) switch(addr & 0xF0000000) { - //case 0x00000000: //ROM - case rom_base: //ROM + case 0x00000000: //ROM addr &= ROMADDMASK; addr >>= 1; data = CONV_RAMROM(rom[addr]); DO_DBUG(statusMsg << "read16(" << Base::HEX8 << addr << ")=" << Base::HEX4 << data << endl); return data; - //case 0x40000000: //RAM - case ram_base: //RAM + case 0x40000000: //RAM addr &= RAMADDMASK; addr >>= 1; data = CONV_RAMROM(ram[addr]); @@ -637,10 +633,8 @@ uInt32 Thumbulator::read32(uInt32 addr) uInt32 data; switch(addr & 0xF0000000) { - case rom_base: //ROM - //case 0x00000000: //ROM - case ram_base: //RAM - //case 0x40000000: //RAM + case 0x00000000: //ROM + case 0x40000000: //RAM data = read16(addr+0); data |= (uInt32(read16(addr+2))) << 16; DO_DBUG(statusMsg << "read32(" << Base::HEX8 << addr << ")=" << Base::HEX8 << data << endl); @@ -1067,9 +1061,8 @@ int Thumbulator::execute() Op decodedOp; #ifndef UNSAFE_OPTIMIZATIONS - if ((instructionPtr & 0xF0000000) == rom_base - && instructionPtr >= rom_base && instructionPtr < rom_base + romSize) - decodedOp = decodedRom[(instructionPtr - rom_base) >> 1]; + if ((instructionPtr & 0xF0000000) == 0 && instructionPtr < romSize) + decodedOp = decodedRom[instructionPtr >> 1]; else decodedOp = decodeInstructionWord(inst); #else @@ -1572,10 +1565,10 @@ int Thumbulator::execute() // address to test for is + 4 due to pipelining - #define BUS_SetNote (rom_base + 0x06da + 4) - #define BUS_ResetWave (rom_base + 0x06de + 4) - #define BUS_GetWavePtr (rom_base + 0x06e2 + 4) - #define BUS_SetWaveSize (rom_base + 0x06e6 + 4) + #define BUS_SetNote (0x000006da + 4) + #define BUS_ResetWave (0x000006de + 4) + #define BUS_GetWavePtr (0x000006e2 + 4) + #define BUS_SetWaveSize (0x000006e6 + 4) if (pc == BUS_SetNote) { @@ -1597,7 +1590,7 @@ int Thumbulator::execute() myCartridge->thumbCallback(3, read_register(2), read_register(3)); handled = true; } - else if (pc == Thumbulator::rom_base + 0x083a) + else if (pc == 0x0000083a) { // exiting Custom ARM code, returning to BUS Driver control } @@ -1633,10 +1626,10 @@ int Thumbulator::execute() // address to test for is + 4 due to pipelining - #define CDF_SetNote (rom_base + 0x06e2 + 4) - #define CDF_ResetWave (rom_base + 0x06e6 + 4) - #define CDF_GetWavePtr (rom_base + 0x06ea + 4) - #define CDF_SetWaveSize (rom_base + 0x06ee + 4) + #define CDF_SetNote (0x000006e2 + 4) + #define CDF_ResetWave (0x000006e6 + 4) + #define CDF_GetWavePtr (0x000006ea + 4) + #define CDF_SetWaveSize (0x000006ee + 4) if (pc == CDF_SetNote) { @@ -1658,7 +1651,7 @@ int Thumbulator::execute() myCartridge->thumbCallback(3, read_register(2), read_register(3)); handled = true; } - else if (pc == Thumbulator::rom_base + 0x083a) + else if (pc == 0x0000083a) { // exiting Custom ARM code, returning to CDF Driver control } @@ -1696,10 +1689,10 @@ int Thumbulator::execute() // address to test for is + 4 due to pipelining - #define CDF1_SetNote (rom_base + 0x0752 + 4) - #define CDF1_ResetWave (rom_base + 0x0756 + 4) - #define CDF1_GetWavePtr (rom_base + 0x075a + 4) - #define CDF1_SetWaveSize (rom_base + 0x075e + 4) + #define CDF1_SetNote (0x00000752 + 4) + #define CDF1_ResetWave (0x00000756 + 4) + #define CDF1_GetWavePtr (0x0000075a + 4) + #define CDF1_SetWaveSize (0x0000075e + 4) if (pc == CDF1_SetNote) { @@ -1737,7 +1730,7 @@ int Thumbulator::execute() INC_ARM_CYCLES(2 + _flashCycles + 2); // ARM code ReturnC handled = true; } - else if (pc == Thumbulator::rom_base + 0x083a) + else if (pc == 0x0000083a) { // exiting Custom ARM code, returning to CDFJ Driver control } @@ -2905,9 +2898,9 @@ int Thumbulator::reset() cpsr = 0; handler_mode = false; - systick_ctrl = rom_base + 0x0004; // TODO: not 100% sure about rom_base here - systick_reload = rom_base; - systick_count = rom_base; + systick_ctrl = 0x00000004; + systick_reload = 0x00000000; + systick_count = 0x00000000; systick_calibrate = 0x00ABCDEF; // fxq: don't care about below so much (maybe to guess timing???) diff --git a/src/emucore/Thumbulator.hxx b/src/emucore/Thumbulator.hxx index 09336ec1c..cf60670a0 100644 --- a/src/emucore/Thumbulator.hxx +++ b/src/emucore/Thumbulator.hxx @@ -34,10 +34,6 @@ class Cartridge; #define UNSAFE_OPTIMIZATIONS #endif -// Note: This is still experimental, no guarantees! -// TODO: make selectable from command line -#define STM32F4 // compile for UnoCart/PlusCart using STM32F407xxx CPU - #define ROMADDMASK 0x7FFFF #define RAMADDMASK 0x7FFF @@ -99,15 +95,6 @@ class Thumbulator uInt32 mamDataHits{0}, mamDataMisses{0}; #endif }; -#ifndef STM32F4 - // Harmony/Encore base adresses - static constexpr uInt32 ram_base = 0x40000000; - static constexpr uInt32 rom_base = 0x00000000; -#else - // UnoCart/PlusCart base adresses (TODO!) - static constexpr uInt32 ram_base = 0x10000000; - static constexpr uInt32 rom_base = 0x20000000; -#endif Thumbulator(const uInt16* rom_ptr, uInt16* ram_ptr, uInt32 rom_size, const uInt32 c_base, const uInt32 c_start, const uInt32 c_stack, diff --git a/src/gui/FileListWidget.cxx b/src/gui/FileListWidget.cxx index efe911870..954276580 100644 --- a/src/gui/FileListWidget.cxx +++ b/src/gui/FileListWidget.cxx @@ -58,9 +58,14 @@ void FileListWidget::setDirectory(const FilesystemNode& node, _history.clear(); while(tmp.hasParent()) { - _history.push_back(HistoryType(tmp, fixPath(name))); + if(name.back() == FilesystemNode::PATH_SEPARATOR) + name.pop_back(); + _history.push_back(HistoryType(tmp, name)); name = tmp.getName(); + if(name.back() == FilesystemNode::PATH_SEPARATOR) + name.pop_back(); + tmp = tmp.getParent(); } // History is in reverse order; we need to fix that @@ -186,19 +191,14 @@ void FileListWidget::selectParent() string name = _node.getName(); FilesystemNode parent(_node.getParent()); + if(name.back() == FilesystemNode::PATH_SEPARATOR) + name.pop_back(); _currentHistory->selected = selected().getName(); addHistory(parent); - setLocation(parent, fixPath(name)); + setLocation(parent, name); } } -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void FileListWidget::selectHomeDir() -{ - while(hasPrevHistory()) - selectPrevHistory(); -} - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FileListWidget::selectPrevHistory() { @@ -233,17 +233,6 @@ bool FileListWidget::hasNextHistory() return _currentHistory != std::prev(_history.end(), 1); } -string& FileListWidget::fixPath(string& path) -{ - if(path.back() == FilesystemNode::PATH_SEPARATOR) - { - path.pop_back(); - if(path.length() == 2 && path.back() == ':') - path.pop_back(); - } - return path; -} - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FileListWidget::addHistory(const FilesystemNode& node) { @@ -252,9 +241,11 @@ void FileListWidget::addHistory(const FilesystemNode& node) _history.pop_back(); string select = selected().getName(); - _currentHistory->selected = fixPath(select); + if(select.back() == FilesystemNode::PATH_SEPARATOR) + select.pop_back(); + _currentHistory->selected = select; - _history.push_back(HistoryType(node, "..")); + _history.push_back(HistoryType(node, select)); _currentHistory = std::prev(_history.end(), 1); //_historyIndex++; } diff --git a/src/gui/FileListWidget.hxx b/src/gui/FileListWidget.hxx index f5047253a..2c27507c7 100644 --- a/src/gui/FileListWidget.hxx +++ b/src/gui/FileListWidget.hxx @@ -45,10 +45,7 @@ class FileListWidget : public StringListWidget public: enum { ItemChanged = 'FLic', // Entry in the list is changed (single-click, etc) - ItemActivated = 'FLac', // Entry in the list is activated (double-click, etc) - kHomeDirCmd = 'homc', // go to Home directory - kPrevDirCmd = 'prvc', // go back in history to previous directory - kNextDirCmd = 'nxtc' // go back in history to next directory + ItemActivated = 'FLac' // Entry in the list is activated (double-click, etc) }; using IconTypeFilter = std::function; @@ -86,11 +83,9 @@ class FileListWidget : public StringListWidget virtual void selectDirectory(); /** Select parent directory (if applicable) */ void selectParent(); - /** Select to home directory */ - void selectHomeDir(); /** Select previous directory in history (if applicable) */ void selectPrevHistory(); - /** Select next directory in history (if applicable) */ + /** Select next directory in history */ void selectNextHistory(); /** Check if the there is a previous directory in history */ bool hasPrevHistory(); @@ -152,7 +147,6 @@ class FileListWidget : public StringListWidget virtual const Icon* getIcon(int i) const; int iconWidth() const; virtual bool fullPathToolTip() const { return false; } - string& fixPath(string& path); void addHistory(const FilesystemNode& node); protected: diff --git a/src/gui/LauncherDialog.cxx b/src/gui/LauncherDialog.cxx index ed8da8231..3425a548e 100644 --- a/src/gui/LauncherDialog.cxx +++ b/src/gui/LauncherDialog.cxx @@ -228,25 +228,25 @@ void LauncherDialog::addPathWidgets(int& ypos, WidgetArray& wid) const GUI::Icon& upIcon = smallIcon ? GUI::icon_up_small : GUI::icon_up_large; myHomeButton = new ButtonWidget(this, _font, xpos, ypos, - iconWidth + iconGap - 1, lineHeight + 2, homeIcon, FileListWidget::kHomeDirCmd); + iconWidth + iconGap - 1, lineHeight + 2, homeIcon, kHomeDirCmd); myHomeButton->setToolTip("Go back to Stella's ROM directory."); wid.push_back(myHomeButton); xpos = myHomeButton->getRight() + BTN_GAP; myPrevButton = new ButtonWidget(this, _font, xpos, ypos, - iconWidth + iconGap - 1, lineHeight + 2, prevIcon, FileListWidget::kPrevDirCmd); + iconWidth + iconGap - 1, lineHeight + 2, prevIcon, kPrevDirCmd); myPrevButton->setToolTip("Go back in directory history."); wid.push_back(myPrevButton); xpos = myPrevButton->getRight() + BTN_GAP; myNextButton = new ButtonWidget(this, _font, xpos, ypos, - iconWidth + iconGap - 1, lineHeight + 2, nextIcon, FileListWidget::kNextDirCmd); + iconWidth + iconGap - 1, lineHeight + 2, nextIcon, kNextDirCmd); myNextButton->setToolTip("Go forward in directory history."); wid.push_back(myNextButton); xpos = myNextButton->getRight() + BTN_GAP; myUpButton = new ButtonWidget(this, _font, xpos, ypos, - iconWidth + iconGap - 1, lineHeight + 2, upIcon, ListWidget::kParentDirCmd); + iconWidth + iconGap - 1, lineHeight + 2, upIcon, kParentDirCmd); myUpButton->setToolTip("Go Up"); wid.push_back(myUpButton); xpos = myUpButton->getRight() + BTN_GAP; @@ -358,7 +358,7 @@ void LauncherDialog::addButtonWidgets(int& ypos, WidgetArray& wid) xpos += (buttonWidth + 0) / 4 + BUTTON_GAP; myGoUpButton = new ButtonWidget(this, _font, xpos, ypos, (buttonWidth + 1) / 4, buttonHeight, - "Go Up", ListWidget::kParentDirCmd); + "Go Up", kParentDirCmd); wid.push_back(myGoUpButton); xpos += (buttonWidth + 1) / 4 + BUTTON_GAP; @@ -382,7 +382,7 @@ void LauncherDialog::addButtonWidgets(int& ypos, WidgetArray& wid) xpos += (buttonWidth + 1) / 4 + BUTTON_GAP; myGoUpButton = new ButtonWidget(this, _font, xpos, ypos, (buttonWidth + 2) / 4, buttonHeight, - "Go Up", ListWidget::kParentDirCmd); + "Go Up", kParentDirCmd); wid.push_back(myGoUpButton); xpos += (buttonWidth + 2) / 4 + BUTTON_GAP; @@ -774,7 +774,7 @@ void LauncherDialog::handleContextMenu() else if(cmd == "subdirs") sendCommand(kSubDirsCmd, 0, 0); else if(cmd == "homedir") - sendCommand(FileListWidget::kHomeDirCmd, 0, 0); + sendCommand(kHomeDirCmd, 0, 0); else if(cmd == "highscores") openHighScores(); else if(cmd == "reload") @@ -818,19 +818,19 @@ void LauncherDialog::handleKeyDown(StellaKey key, StellaMod mod, bool repeated) switch(key) { case KBDK_HOME: - sendCommand(FileListWidget::kHomeDirCmd, 0, 0); + sendCommand(kHomeDirCmd, 0, 0); break; case KBDK_LEFT: - sendCommand(FileListWidget::kPrevDirCmd, 0, 0); + sendCommand(kPrevDirCmd, 0, 0); break; case KBDK_RIGHT: - sendCommand(FileListWidget::kNextDirCmd, 0, 0); + sendCommand(kNextDirCmd, 0, 0); break; case KBDK_UP: - sendCommand(ListWidget::kParentDirCmd, 0, 0); + sendCommand(kParentDirCmd, 0, 0); break; case KBDK_DOWN: @@ -1007,22 +1007,23 @@ void LauncherDialog::handleCommand(CommandSender* sender, int cmd, toggleSubDirs(); break; - case FileListWidget::kHomeDirCmd: - myList->selectHomeDir(); + case kHomeDirCmd: + gotoHomeDir(); break; - case FileListWidget::kPrevDirCmd: + case kPrevDirCmd: myList->selectPrevHistory(); break; - case FileListWidget::kNextDirCmd: + case kNextDirCmd: myList->selectNextHistory(); break; - case ListWidget::kParentDirCmd: + case kParentDirCmd: myList->selectParent(); break; + case kLoadROMCmd: if(myList->isDirectory(myList->selected())) { @@ -1313,6 +1314,13 @@ void LauncherDialog::openWhatsNew() myDialog->open(); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void LauncherDialog::gotoHomeDir() +{ + while(myList->hasPrevHistory()) + myList->selectPrevHistory(); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void LauncherDialog::toggleShowAll(bool toggle) { diff --git a/src/gui/LauncherDialog.hxx b/src/gui/LauncherDialog.hxx index 2ae0521fe..2a28dc9cc 100644 --- a/src/gui/LauncherDialog.hxx +++ b/src/gui/LauncherDialog.hxx @@ -174,6 +174,7 @@ class LauncherDialog : public Dialog, CommandSender void showOnlyROMs(bool state); void toggleShowAll(bool toggle = true); void toggleSubDirs(bool toggle = true); + void gotoHomeDir(); void handleContextMenu(); void handleQuit(); void toggleExtensions(); @@ -233,8 +234,12 @@ class LauncherDialog : public Dialog, CommandSender enum { kAllfilesCmd = 'lalf', // show all files (or ROMs only) kSubDirsCmd = 'lred', + kParentDirCmd = 'PARD', kOptionsCmd = 'OPTI', kQuitCmd = 'QUIT', + kHomeDirCmd = 'homc', // go to Home directory + kPrevDirCmd = 'prvc', // go back in history to previous directory + kNextDirCmd = 'nxtc', // go back in history to next directory kReloadCmd = 'relc', kRmAllFav = 'rmaf', kRmAllPop = 'rmap',