diff --git a/src/ui/viewmodels/TriggerConditionViewModel.cpp b/src/ui/viewmodels/TriggerConditionViewModel.cpp index cc3b7fa9a..a48e78ab8 100644 --- a/src/ui/viewmodels/TriggerConditionViewModel.cpp +++ b/src/ui/viewmodels/TriggerConditionViewModel.cpp @@ -850,7 +850,11 @@ std::wstring TriggerConditionViewModel::GetAddressTooltip(ra::data::ByteAddress pNote = pCodeNotes->FindCodeNoteModel(nNoteStart); if (sPointerChain.empty()) - sAddress = ra::util::String::Printf(L"%s (%s+%u)", pMemoryContext.FormatAddress(nAddress), pMemoryContext.FormatAddress(nNoteStart), nAddress - nNoteStart); + { + const auto nOffset = nAddress - nNoteStart; + const wchar_t* sFormat = nOffset < 10 ? L"%s (%s+%u)" : L"%s (%s+0x%02x)"; + sAddress = ra::util::String::Printf(sFormat, pMemoryContext.FormatAddress(nAddress), pMemoryContext.FormatAddress(nNoteStart), nOffset); + } } } } diff --git a/tests/ui/viewmodels/TriggerConditionViewModel_Tests.cpp b/tests/ui/viewmodels/TriggerConditionViewModel_Tests.cpp index 3abc7c13c..e8f4bceec 100644 --- a/tests/ui/viewmodels/TriggerConditionViewModel_Tests.cpp +++ b/tests/ui/viewmodels/TriggerConditionViewModel_Tests.cpp @@ -723,6 +723,24 @@ TEST_CLASS(TriggerConditionViewModel_Tests) Assert::AreEqual(std::wstring(L"0x000c (0x0008+4)\r\n[8 bytes] This is a note."), condition.GetTooltip(TriggerConditionViewModel::SourceValueProperty)); } + TEST_METHOD(TestTooltipAddressLargeArrayNote) + { + TriggerConditionViewModelHarness condition; + condition.mockGameContext.SetCodeNote({ 8U }, L"[100 bytes] This is a note."); + + condition.Parse("0xH0008=3"); + Assert::AreEqual(std::wstring(L"0x0008\r\n[100 bytes] This is a note."), condition.GetTooltip(TriggerConditionViewModel::SourceValueProperty)); + + condition.Parse("0xH000C=3"); + Assert::AreEqual(std::wstring(L"0x000c (0x0008+4)\r\n[100 bytes] This is a note."), condition.GetTooltip(TriggerConditionViewModel::SourceValueProperty)); + + condition.Parse("0xH0016=3"); + Assert::AreEqual(std::wstring(L"0x0016 (0x0008+0x0e)\r\n[100 bytes] This is a note."), condition.GetTooltip(TriggerConditionViewModel::SourceValueProperty)); + + condition.Parse("0xH003E=3"); + Assert::AreEqual(std::wstring(L"0x003e (0x0008+0x36)\r\n[100 bytes] This is a note."), condition.GetTooltip(TriggerConditionViewModel::SourceValueProperty)); + } + TEST_METHOD(TestTooltipAddressBitNote) { TriggerConditionViewModelHarness condition;