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 (#5049)
  • Loading branch information
philmoz authored May 23, 2024
1 parent 2d8e434 commit 32d9434
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 15 deletions.
63 changes: 48 additions & 15 deletions radio/src/gui/colorlcd/model_select.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,11 @@ class LabelDialog : public ModalWindow
});
}

void onCancel() override
{
deleteLater();
}

protected:
std::function<void(std::string)> saveHandler;
char label[LABEL_LENGTH + 1];
Expand Down Expand Up @@ -671,14 +676,16 @@ void ModelLabelsWindow::newModel()
void ModelLabelsWindow::newLabel()
{
tmpLabel[0] = '\0';
new LabelDialog(parent, tmpLabel, [=](std::string label) {
new LabelDialog(this, tmpLabel, [=](std::string label) {
int newlabindex = modelslabels.addLabel(label);
if (newlabindex >= 0) {
std::set<uint32_t> newset;
newset.insert(newlabindex);
auto labels = getLabels();
lblselector->setNames(labels);
lblselector->setSelected(newset);
if (g_eeGeneral.labelSingleSelect)
lblselector->setActiveItem(newlabindex);
updateFilteredLabels(newset);
}
});
Expand Down Expand Up @@ -895,32 +902,22 @@ void ModelLabelsWindow::buildBody(Window *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 @@ -930,6 +927,42 @@ void ModelLabelsWindow::buildBody(Window *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 @@ -57,6 +57,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 32d9434

Please sign in to comment.