Skip to content

Commit 119a17a

Browse files
committed
fix enum matching for values when prefer decimal checked
1 parent 841f0ca commit 119a17a

3 files changed

Lines changed: 61 additions & 15 deletions

File tree

src/ui/viewmodels/TriggerConditionViewModel.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ std::wstring TriggerConditionViewModel::GetTooltip(const StringModelProperty& nP
434434
if (nType == TriggerOperandType::Value)
435435
{
436436
if (IsAddressType(GetTargetType()) && ra::data::Memory::SizeBits(GetTargetSize()) >= 8)
437-
return GetPotentialEnumValueTooltip(GetSourceAddress(), GetTargetAddress());
437+
return GetPotentialEnumValueTooltip(GetSourceValue(), GetTargetAddress());
438438

439439
return GetValueTooltip(GetSourceAddress());
440440
}
@@ -463,7 +463,7 @@ std::wstring TriggerConditionViewModel::GetTooltip(const StringModelProperty& nP
463463
if (nType == TriggerOperandType::Value)
464464
{
465465
if (IsAddressType(GetSourceType()) && ra::data::Memory::SizeBits(GetSourceSize()) >= 8)
466-
return GetPotentialEnumValueTooltip(GetTargetAddress(), GetSourceAddress());
466+
return GetPotentialEnumValueTooltip(GetTargetValue(), GetSourceAddress());
467467

468468
return GetValueTooltip(GetTargetAddress());
469469
}
@@ -508,10 +508,19 @@ std::wstring TriggerConditionViewModel::GetTooltip(const IntModelProperty& nProp
508508
return L"";
509509
}
510510

511-
std::wstring TriggerConditionViewModel::GetPotentialEnumValueTooltip(unsigned int nValue, ra::data::ByteAddress nCompareAddress) const
511+
std::wstring TriggerConditionViewModel::GetPotentialEnumValueTooltip(const std::wstring& sValue, ra::data::ByteAddress nCompareAddress) const
512512
{
513513
const ra::data::models::MemoryNoteModel* pNote = nullptr;
514514

515+
uint32_t nValue;
516+
std::wstring sError;
517+
518+
const auto& pConfiguration = ra::services::ServiceLocator::Get<ra::services::IConfiguration>();
519+
if (pConfiguration.IsFeatureEnabled(ra::services::Feature::PreferDecimal))
520+
ra::ParseUnsignedInt(sValue, 0xFFFFFFFF, nValue, sError);
521+
else
522+
ra::ParseHex(sValue, 0xFFFFFFFF, nValue, sError);
523+
515524
if (IsIndirect())
516525
{
517526
std::wstring sPointerChain;

src/ui/viewmodels/TriggerConditionViewModel.hh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private:
119119

120120
void SerializeAppendOperand(std::string& sBuffer, TriggerOperandType nType, ra::data::Memory::Size nSize, const std::wstring& nValue) const;
121121

122-
std::wstring GetPotentialEnumValueTooltip(unsigned int nValue, ra::data::ByteAddress nCompareAddress) const;
122+
std::wstring GetPotentialEnumValueTooltip(const std::wstring& sValue, ra::data::ByteAddress nCompareAddress) const;
123123
static std::wstring GetValueTooltip(unsigned int nValue);
124124
std::wstring GetAddressTooltip(ra::data::ByteAddress nAddress, ra::data::Memory::Size nSize, const std::wstring& sPointerChain, const ra::data::models::MemoryNoteModel* pNote) const;
125125
std::wstring GetRecallTooltip(bool bOperand2) const;

tests/ui/viewmodels/TriggerConditionViewModel_Tests.cpp

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -772,17 +772,6 @@ TEST_CLASS(TriggerConditionViewModel_Tests)
772772
Assert::AreEqual(std::wstring(L""), condition.GetTooltip(TriggerConditionViewModel::TargetValueProperty));
773773
}
774774

775-
TEST_METHOD(TestTooltipValueEnum)
776-
{
777-
TriggerConditionViewModelHarness condition;
778-
condition.mockGameContext.SetNote({ 0x0099U }, L"Color {02=Red, 06=Brown}");
779-
condition.mockConfiguration.SetFeatureEnabled(ra::services::Feature::PreferDecimal, true);
780-
condition.Parse("0xH0099=2");
781-
782-
Assert::AreEqual(std::wstring(L"0x0099\r\nColor {02=Red, 06=Brown}"), condition.GetTooltip(TriggerConditionViewModel::SourceValueProperty));
783-
Assert::AreEqual(std::wstring(L"02=Red"), condition.GetTooltip(TriggerConditionViewModel::TargetValueProperty));
784-
}
785-
786775
TEST_METHOD(TestTooltipValueHex)
787776
{
788777
TriggerConditionViewModelHarness condition;
@@ -795,6 +784,54 @@ TEST_CLASS(TriggerConditionViewModel_Tests)
795784
Assert::AreEqual(std::wstring(L"99"), condition.GetTooltip(TriggerConditionViewModel::TargetValueProperty));
796785
}
797786

787+
TEST_METHOD(TestTooltipValueEnumPreferDecimal)
788+
{
789+
TriggerConditionViewModelHarness condition;
790+
condition.mockGameContext.SetNote({ 0x0099U }, L"Color {20=Red, 24=Brown}");
791+
condition.mockConfiguration.SetFeatureEnabled(ra::services::Feature::PreferDecimal, true);
792+
condition.Parse("0xH0099=20");
793+
794+
Assert::AreEqual(std::wstring(L"20"), condition.GetTargetValue());
795+
Assert::AreEqual(std::wstring(L"0x0099\r\nColor {20=Red, 24=Brown}"), condition.GetTooltip(TriggerConditionViewModel::SourceValueProperty));
796+
Assert::AreEqual(std::wstring(L"20=Red"), condition.GetTooltip(TriggerConditionViewModel::TargetValueProperty));
797+
}
798+
799+
TEST_METHOD(TestTooltipValueEnumPreferHex)
800+
{
801+
TriggerConditionViewModelHarness condition;
802+
condition.mockGameContext.SetNote({ 0x0099U }, L"Color {20=Red, 24=Brown}");
803+
condition.mockConfiguration.SetFeatureEnabled(ra::services::Feature::PreferDecimal, false);
804+
condition.Parse("0xH0099=20");
805+
806+
Assert::AreEqual(std::wstring(L"0x14"), condition.GetTargetValue());
807+
Assert::AreEqual(std::wstring(L"0x0099\r\nColor {20=Red, 24=Brown}"), condition.GetTooltip(TriggerConditionViewModel::SourceValueProperty));
808+
Assert::AreEqual(std::wstring(L"20=Red"), condition.GetTooltip(TriggerConditionViewModel::TargetValueProperty));
809+
}
810+
811+
TEST_METHOD(TestTooltipValueEnumPreferDecimalHexNote)
812+
{
813+
TriggerConditionViewModelHarness condition;
814+
condition.mockGameContext.SetNote({ 0x0099U }, L"Color {0x14=Red, 0x18=Brown}");
815+
condition.mockConfiguration.SetFeatureEnabled(ra::services::Feature::PreferDecimal, true);
816+
condition.Parse("0xH0099=20");
817+
818+
Assert::AreEqual(std::wstring(L"20"), condition.GetTargetValue());
819+
Assert::AreEqual(std::wstring(L"0x0099\r\nColor {0x14=Red, 0x18=Brown}"), condition.GetTooltip(TriggerConditionViewModel::SourceValueProperty));
820+
Assert::AreEqual(std::wstring(L"0x14=Red"), condition.GetTooltip(TriggerConditionViewModel::TargetValueProperty));
821+
}
822+
823+
TEST_METHOD(TestTooltipValueEnumPreferHexHexNote)
824+
{
825+
TriggerConditionViewModelHarness condition;
826+
condition.mockGameContext.SetNote({ 0x0099U }, L"Color {0x14=Red, 0x18=Brown}");
827+
condition.mockConfiguration.SetFeatureEnabled(ra::services::Feature::PreferDecimal, false);
828+
condition.Parse("0xH0099=20");
829+
830+
Assert::AreEqual(std::wstring(L"0x14"), condition.GetTargetValue());
831+
Assert::AreEqual(std::wstring(L"0x0099\r\nColor {0x14=Red, 0x18=Brown}"), condition.GetTooltip(TriggerConditionViewModel::SourceValueProperty));
832+
Assert::AreEqual(std::wstring(L"0x14=Red"), condition.GetTooltip(TriggerConditionViewModel::TargetValueProperty));
833+
}
834+
798835
private:
799836
class IndirectAddressTriggerViewModelHarness : public TriggerViewModel
800837
{

0 commit comments

Comments
 (0)