Skip to content

Commit

Permalink
fix(color): selected label, model list not correctly updating in sing…
Browse files Browse the repository at this point in the history
…le select mode (#5048)
  • Loading branch information
philmoz authored May 23, 2024
1 parent bf0f8ff commit 074224a
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 14 deletions.
56 changes: 42 additions & 14 deletions radio/src/gui/colorlcd/model_select.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -709,6 +709,8 @@ void ModelLabelsWindow::newLabel()
auto labels = getLabels();
lblselector->setNames(labels);
lblselector->setSelected(newset);
if (g_eeGeneral.labelSingleSelect)
lblselector->setActiveItem(newlabindex);
updateFilteredLabels(newset);
}
});
Expand Down Expand Up @@ -927,32 +929,22 @@ void ModelLabelsWindow::buildBody(FormWindow *window)
std::set<uint32_t> newset;
lblselector->setNames(labels);
lblselector->setSelected(newset);
if (g_eeGeneral.labelSingleSelect && selected == lblselector->getActiveItem())
lblselector->setActiveItem(-1);
updateFilteredLabels(newset);
});
return 0;
});
if (modelslabels.getLabels().size() > 1) {
if (selected != 0) {
menu->addLine(STR_MOVE_UP, [=]() {
modelslabels.moveLabelTo(selected, selected - 1);
std::set<uint32_t> newset;
newset.insert(selected - 1);
auto labels = getLabels();
lblselector->setNames(labels);
lblselector->setSelected(newset);
updateFilteredLabels(newset);
moveLabel(selected, -1);
return 0;
});
}
if (selected != (int)modelslabels.getLabels().size() - 1) {
menu->addLine(STR_MOVE_DOWN, [=]() {
modelslabels.moveLabelTo(selected, selected + 1);
std::set<uint32_t> newset;
newset.insert(selected + 1);
auto labels = getLabels();
lblselector->setNames(labels);
lblselector->setSelected(newset);
updateFilteredLabels(newset);
moveLabel(selected, 1);
return 0;
});
}
Expand All @@ -962,6 +954,42 @@ void ModelLabelsWindow::buildBody(FormWindow *window)
});
}

void ModelLabelsWindow::moveLabel(int selected, int direction)
{
int swapSelected = selected + direction;

modelslabels.moveLabelTo(selected, swapSelected);

std::set<uint32_t> newset = lblselector->getSelection();
bool isSelected = newset.find(selected) != newset.end();
bool isSwapSelected = newset.find(swapSelected) != newset.end();
if (isSelected && !isSwapSelected) {
newset.erase(newset.find(selected));
newset.insert(swapSelected);
} else if (isSwapSelected && !isSelected) {
newset.erase(newset.find(swapSelected));
newset.insert(selected);
}

lblselector->setNames(getLabels());

if (g_eeGeneral.labelSingleSelect) {
int active = lblselector->getActiveItem();
if (active == selected) {
lblselector->setActiveItem(swapSelected);
newset.insert(swapSelected);
} else if (active == swapSelected) {
lblselector->setActiveItem(selected);
newset.insert(selected);
} else if (active >= 0) {
newset.insert(active);
}
}

lblselector->setSelected(newset);
updateFilteredLabels(newset);
}

void ModelLabelsWindow::updateFilteredLabels(std::set<uint32_t> selected,
bool setdirty)
{
Expand Down
2 changes: 2 additions & 0 deletions radio/src/gui/colorlcd/model_select.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ class ModelLabelsWindow : public Page
void labelRefreshRequest();
void setTitle();

void moveLabel(int selected, int direction);

#if defined(HARDWARE_KEYS)
void onPressSYS() override;
void onLongPressSYS() override;
Expand Down

0 comments on commit 074224a

Please sign in to comment.