diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 6c877351a..e7d4f1e47 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -115,10 +115,11 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) "Console info overlay"); wid.push_back(myFrameStatsWidget); - myDetectedInfoWidget = new CheckboxWidget(myTab, font, myFrameStatsWidget->getRight() + fontWidth * 2.5, ypos + 1, "Detected settings info"); + myDetectedInfoWidget->setToolTip("Display detected controllers, bankswitching\n" + "and TV types at ROM start."); wid.push_back(myDetectedInfoWidget); ypos += lineHeight + VGAP; @@ -131,6 +132,8 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) myConsoleWidget = new PopUpWidget(myTab, font, HBORDER + INDENT * 1, ypos, pwidth, lineHeight, items, "Console ", lwidth, kConsole); + myConsoleWidget->setToolTip("Emulate Color/B&W/Pause key and zero\n" + "page RAM initialization differenly."); wid.push_back(myConsoleWidget); ypos += lineHeight + VGAP; @@ -141,6 +144,8 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) myRandomBankWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, "Random startup bank"); + myRandomBankWidget->setToolTip("Randomize the startup bank for\n" + "most classic bankswitching types."); wid.push_back(myRandomBankWidget); ypos += lineHeight + VGAP; @@ -168,17 +173,23 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) // How to handle undriven TIA pins myUndrivenPinsWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Drive unused TIA pins randomly on a read/peek"); + myUndrivenPinsWidget->setToolTip("Read TIA pins random instead of last databus values.\n" + "Helps detecting missing '#' for immediate loads."); wid.push_back(myUndrivenPinsWidget); ypos += lineHeight + VGAP; #ifdef DEBUGGER_SUPPORT myRWPortBreakWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Break on reads from write ports"); + myRWPortBreakWidget->setToolTip("Cause reads from write ports to interrupt\n" + "emulation and enter debugger."); wid.push_back(myRWPortBreakWidget); ypos += lineHeight + VGAP; myWRPortBreakWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Break on writes to read ports"); + myWRPortBreakWidget->setToolTip("Cause writes to read ports to interrupt\n" + "emulation and enter debugger."); wid.push_back(myWRPortBreakWidget); ypos += lineHeight + VGAP; #endif @@ -186,12 +197,16 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) // Thumb ARM emulation exception myThumbExceptionWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Fatal ARM emulation error throws exception"); + myThumbExceptionWidget->setToolTip("Cause Thumb ARM emulation to throw exceptions\n" + "on fatal errors and enter the debugger."); wid.push_back(myThumbExceptionWidget); ypos += lineHeight + VGAP; // AtariVox/SaveKey EEPROM access myEEPROMAccessWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Display AtariVox/SaveKey EEPROM R/W access"); + myEEPROMAccessWidget->setToolTip("Cause message display when AtariVox/\n" + "SaveKey EEPROM is read or written."); wid.push_back(myEEPROMAccessWidget); // Add items for tab 0 @@ -239,11 +254,15 @@ void DeveloperDialog::addTiaTab(const GUI::Font& font) VarList::push_back(items, "Custom", "custom"); myTIATypeWidget = new PopUpWidget(myTab, font, HBORDER + INDENT, ypos - 1, pwidth, lineHeight, items, "Chip type ", 0, kTIAType); + myTIATypeWidget->setToolTip("Select which TIA chip type to emulate.\n" + "Some types cause defined glitches."); wid.push_back(myTIATypeWidget); ypos += lineHeight + VGAP * 1; myInvPhaseLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, "Inverted HMOVE clock phase for"); + myInvPhaseLabel->setToolTip("Objects react different to too\n" + "early HM" + ELLIPSIS + " after HMOVE changes."); wid.push_back(myInvPhaseLabel); ypos += lineHeight + VGAP * 1; @@ -262,6 +281,7 @@ void DeveloperDialog::addTiaTab(const GUI::Font& font) myPlayfieldLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, "Delayed playfield"); + myPlayfieldLabel->setToolTip("Playfield reacts one color clock slower to updates."); wid.push_back(myPlayfieldLabel); ypos += lineHeight + VGAP * 1; @@ -275,6 +295,7 @@ void DeveloperDialog::addTiaTab(const GUI::Font& font) myBackgroundLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, "Delayed background"); + myBackgroundLabel->setToolTip("Background color reacts one color clock slower to updates."); wid.push_back(myBackgroundLabel); ypos += lineHeight + VGAP * 1; @@ -285,6 +306,7 @@ void DeveloperDialog::addTiaTab(const GUI::Font& font) ostringstream ss; ss << "Delayed VDEL" << ELLIPSIS << " swap for"; mySwapLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, ss.str()); + mySwapLabel->setToolTip("VDELed objects react one color clock slower to updates."); wid.push_back(mySwapLabel); ypos += lineHeight + VGAP * 1; @@ -332,12 +354,14 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) // TV jitter effect myTVJitterWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Jitter/roll effect", kTVJitter); + myTVJitterWidget->setToolTip("Enable to emulate TV loss of sync."); wid.push_back(myTVJitterWidget); myTVJitterRecWidget = new SliderWidget(myTab, font, myTVJitterWidget->getRight() + fontWidth * 3, ypos - 1, "Recovery ", 0, kTVJitterChanged); myTVJitterRecWidget->setMinValue(1); myTVJitterRecWidget->setMaxValue(20); myTVJitterRecWidget->setTickmarkIntervals(5); + myTVJitterRecWidget->setToolTip("Define speed of sync revovery."); wid.push_back(myTVJitterRecWidget); myTVJitterRecLabelWidget = new StaticTextWidget(myTab, font, myTVJitterRecWidget->getRight() + 4, @@ -347,6 +371,8 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) myColorLossWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "PAL color-loss"); + myColorLossWidget->setToolTip("PAL games with odd scanline count\n" + "will be displayed without color."); wid.push_back(myColorLossWidget); ypos += lineHeight + VGAP; @@ -485,6 +511,7 @@ void DeveloperDialog::addTimeMachineTab(const GUI::Font& font) #endif myStateSizeWidget->setStepValue(20); myStateSizeWidget->setTickmarkIntervals(5); + myStateSizeWidget->setToolTip("Define the total Time Machine buffer size."); wid.push_back(myStateSizeWidget); ypos += lineHeight + VGAP; @@ -498,6 +525,9 @@ void DeveloperDialog::addTimeMachineTab(const GUI::Font& font) #endif myUncompressedWidget->setStepValue(20); myUncompressedWidget->setTickmarkIntervals(5); + myUncompressedWidget->setToolTip("Define the number of completely kept states.\n" + "States beyond this number will be slowly removed\n" + "to fit the requested horizon into the buffer."); wid.push_back(myUncompressedWidget); ypos += lineHeight + VGAP; @@ -507,6 +537,7 @@ void DeveloperDialog::addTimeMachineTab(const GUI::Font& font) int pwidth = font.getStringWidth("10 seconds"); myStateIntervalWidget = new PopUpWidget(myTab, font, xpos, ypos, pwidth, lineHeight, items, "Interval ", 0, kIntervalChanged); + myStateIntervalWidget->setToolTip("Define the interval between each saved state."); wid.push_back(myStateIntervalWidget); ypos += lineHeight + VGAP; @@ -515,6 +546,8 @@ void DeveloperDialog::addTimeMachineTab(const GUI::Font& font) VarList::push_back(items, HORIZONS[i], HOR_SETTINGS[i]); myStateHorizonWidget = new PopUpWidget(myTab, font, xpos, ypos, pwidth, lineHeight, items, "Horizon ~ ", 0, kHorizonChanged); + myStateHorizonWidget->setToolTip("Define how far the Time Machine\n" + "will allow moving back in time."); wid.push_back(myStateHorizonWidget); // Add message concerning usage @@ -598,6 +631,7 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) myGhostReadsTrapWidget = new CheckboxWidget(myTab, font, HBORDER, ypos + 1, "Trap on 'ghost' reads"); + myGhostReadsTrapWidget->setToolTip("Traps will consider CPU 'ghost' reads too."); wid.push_back(myGhostReadsTrapWidget); // Add message concerning usage