fix(color): selected label, model list not correctly updating in single select mode (#5049)

This commit is contained in:
philmoz
2024-05-24 09:51:13 +10:00
committed by GitHub
parent 2d8e43400d
commit 32d94343f9
2 changed files with 50 additions and 15 deletions
+48 -15
View File
@@ -497,6 +497,11 @@ class LabelDialog : public ModalWindow
});
}
void onCancel() override
{
deleteLater();
}
protected:
std::function<void(std::string)> saveHandler;
char label[LABEL_LENGTH + 1];
@@ -671,7 +676,7 @@ 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;
@@ -679,6 +684,8 @@ void ModelLabelsWindow::newLabel()
auto labels = getLabels();
lblselector->setNames(labels);
lblselector->setSelected(newset);
if (g_eeGeneral.labelSingleSelect)
lblselector->setActiveItem(newlabindex);
updateFilteredLabels(newset);
}
});
@@ -895,6 +902,8 @@ 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;
@@ -902,25 +911,13 @@ void ModelLabelsWindow::buildBody(Window *window)
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;
});
}
@@ -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)
{
+2
View File
@@ -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;