Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/ui/viewmodels/TriggerConditionViewModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,9 @@ const rc_condition_t* TriggerConditionViewModel::GetFirstCondition() const
// find the condset associated to the selected group
if (nIndex == 0)
{
if (!pTrigger->requirement)
return nullptr;

pFirstCondition = pTrigger->requirement->conditions;
}
else
Expand Down
43 changes: 27 additions & 16 deletions src/ui/viewmodels/TriggerViewModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ void TriggerViewModel::PasteFromClipboard()
sNarrowText.insert(0, "M:");
}

const auto nResult = AppendMemRefChain(sNarrowText);
const auto nResult = AppendMemRefChain(sNarrowText, true);
if (nResult != RC_OK)
{
if (nResult == RC_MULTIPLE_GROUPS)
Expand All @@ -354,7 +354,7 @@ void TriggerViewModel::PasteFromClipboard()
}
}

int TriggerViewModel::AppendMemRefChain(const std::string& sTrigger)
int TriggerViewModel::AppendMemRefChain(const std::string& sTrigger, bool bSelect)
{
// have to use internal parsing functions to decode conditions without full trigger/value
// restriction validation (full validation will occur after new conditions are added)
Expand Down Expand Up @@ -391,14 +391,19 @@ int TriggerViewModel::AppendMemRefChain(const std::string& sTrigger)

m_bInitializingConditions = true;

DeselectAllConditions();
if (bSelect)
DeselectAllConditions();

const auto nCountBefore = GetValue(ScrollMaximumProperty);
UpdateConditions(pGroup);
const auto nCountAfter = GetValue(ScrollMaximumProperty);
EnsureVisible(nCountBefore, nCountAfter - nCountBefore);

SelectRange(nCountBefore, gsl::narrow_cast<gsl::index>(nCountAfter) - 1, true);
if (bSelect)
{
const auto nCountAfter = GetValue(ScrollMaximumProperty);
EnsureVisible(nCountBefore, nCountAfter - nCountBefore);

SelectRange(nCountBefore, gsl::narrow_cast<gsl::index>(nCountAfter) - 1, true);
}

m_bInitializingConditions = false;

Expand Down Expand Up @@ -706,7 +711,7 @@ void TriggerViewModel::NewCondition()
}
}

AppendMemRefChain(sMemRef);
AppendMemRefChain(sMemRef, true);
}

void TriggerViewModel::AddAltGroup(int nId, rc_condset_t* pConditionSet)
Expand Down Expand Up @@ -815,17 +820,23 @@ void TriggerViewModel::InitializeFrom(const std::string& sTrigger)
{
InitializeGroups(*m_pTrigger);
}
else if (m_bIsValue)
{
rc_value_t pValue;
memset(&pValue, 0, sizeof(pValue));
InitializeFrom(pValue);
}
else
{
rc_trigger_t pTrigger;
memset(&pTrigger, 0, sizeof(pTrigger));
InitializeFrom(pTrigger);
if (m_bIsValue)
{
rc_value_t pValue;
memset(&pValue, 0, sizeof(pValue));
InitializeFrom(pValue);
}
else
{
rc_trigger_t pTrigger;
memset(&pTrigger, 0, sizeof(pTrigger));
InitializeFrom(pTrigger);
}

if (!sTrigger.empty())
AppendMemRefChain(sTrigger, false);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/ui/viewmodels/TriggerViewModel.hh
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ private:
void UpdateConditions(const GroupViewModel* pGroup);
void UpdateTotalHits(const GroupViewModel* pGroup);

int AppendMemRefChain(const std::string& sTrigger);
int AppendMemRefChain(const std::string& sTrigger, bool bSelect);

void DeselectAllConditions();
rc_trigger_t* ParseTrigger(const std::string& sTrigger);
Expand Down
2 changes: 2 additions & 0 deletions tests/ui/viewmodels/TriggerViewModel_Tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,8 @@ TEST_CLASS(TriggerViewModel_Tests)
ParseAndRegenerateValue("M:0xS2345$M:0xS2346"); // bit6 in alts
ParseAndRegenerateValue("A:0xH1234&31_M:0"); // bitwise and
ParseAndRegenerateValue("A:0xH1234^129_M:0"); // bitwise or

ParseAndRegenerateValue("I:0xH1234_0x 2345"); // missing measured
}

TEST_METHOD(TestTriggerUpdateConditionModified)
Expand Down
Loading