fix(color): Limit label lengths, improve lbl display, prevent inv. char (#2287)

* (cpn) Add bullets & length warning

* (fw) Show labels with bullet separators

* (fw) Check all running twice. Remove from here

* (fw) Correct buffer overflow when labels too long

* (fw) Rem bullets in model label string

* (fw, cpn) Labels length

cpn,fw Limit label length
cpn Check correct model on rename length
cpn Focus issues
cpn Add rename,  move up/down.. still has an issue with selection. TODO...
cpn Switch to utf8 encoding
cpn Rename button ;)

* (cpn) Move up down working

re-Fix Checkbox, partially isn't what I thought (not greyed)

* (fw) Add CSV string funcs

Limit length of model edit shorter in portrait mode

* (cpn) Correct Label option showing on B&W

* (fw) Radio filename set but no file exists don't create

* (cpn) Simplify wording

* (fw) Correct debug values

* (fw) Reduce truncation length

* (both) Don't allow special chars in label name

(cpn) Prevent move when at top and bottom
(fw) Remove multiple label length defines
(fw) Shorten truncate length even more

* (fw) Close model_select on new model
This commit is contained in:
Cliff
2022-09-18 10:47:21 +10:00
committed by GitHub
parent c3660ab931
commit 333c2828ea
16 changed files with 405 additions and 248 deletions
+9 -12
View File
@@ -383,7 +383,6 @@ void ModelsPageBody::selectModel(ModelCell *model)
storageCheck(true);
modelslist.setCurrentModel(model);
checkAll();
// Exit to main view
auto w = Layer::back();
@@ -496,8 +495,8 @@ class LabelDialog : public Dialog
Dialog(parent, STR_ENTER_LABEL, rect_t{}),
saveHandler(std::move(_saveHandler))
{
strncpy(this->label, label, MAX_LABEL_SIZE);
this->label[MAX_LABEL_SIZE] = '\0';
strncpy(this->label, label, LABEL_LENGTH);
this->label[LABEL_LENGTH] = '\0';
auto form = &content->form;
form->padRow(lv_dpx(8));
@@ -505,7 +504,7 @@ class LabelDialog : public Dialog
auto form_obj = form->getLvObj();
lv_obj_set_style_flex_cross_place(form_obj, LV_FLEX_ALIGN_CENTER, 0);
new TextEdit(form, rect_t{}, label, MAX_LABEL_SIZE);
new TextEdit(form, rect_t{}, label, LABEL_LENGTH);
auto box = new FormGroup(form, rect_t{});
box->setFlexLayout(LV_FLEX_FLOW_ROW);
@@ -538,7 +537,7 @@ class LabelDialog : public Dialog
protected:
std::function<void(std::string label)> saveHandler;
char label[MAX_LABEL_SIZE + 1];
char label[LABEL_LENGTH + 1];
};
//-----------------------------------------------------------------------------
@@ -625,11 +624,9 @@ void ModelLabelsWindow::newModel()
// On complete update the current cell's data
modelslist.updateCurrentModelCell();
auto labels = getLabels();
lblselector->setNames(labels);
lblselector->setSelected(modelslabels.getLabels().size());
mdlselector->update(0);
setTitle();
// Close Window
auto w = Layer::back();
if (w) w->onCancel();
});
}
@@ -778,8 +775,8 @@ void ModelLabelsWindow::buildBody(FormWindow *window)
menu->setTitle(selectedLabel);
menu->addLine(STR_RENAME_LABEL, [=]() {
auto oldLabel = labels[selected];
strncpy(tmpLabel, oldLabel.c_str(), MAX_LABEL_SIZE);
tmpLabel[MAX_LABEL_SIZE] = '\0';
strncpy(tmpLabel, oldLabel.c_str(), LABEL_LENGTH);
tmpLabel[LABEL_LENGTH] = '\0';
new LabelDialog(this, tmpLabel, [=](std::string newLabel) {
auto rndialog =
new ProgressDialog(this, STR_RENAME_LABEL, [=]() {});
+1 -3
View File
@@ -30,8 +30,6 @@
#include "storage/modelslist.h"
#include "tabsgroup.h"
constexpr int MAX_LABEL_SIZE = 20;
class ModelButton;
class ModelsPageBody : public FormWindow
@@ -78,7 +76,7 @@ class ModelLabelsWindow : public Page
protected:
ModelsSortBy sort = DEFAULT_MODEL_SORT;
char tmpLabel[MAX_LABEL_SIZE + 1] = "\0";
char tmpLabel[LABEL_LENGTH + 1] = "\0";
ListBox *lblselector;
ModelsPageBody *mdlselector;
std::string currentLabel;
+9 -8
View File
@@ -127,7 +127,7 @@ void SubScreenButton::event_cb(lv_event_t* e)
auto btn = (SubScreenButton*)lv_obj_get_user_data(obj);
if (!btn) return;
lv_event_code_t code = lv_event_get_code(e);
lv_event_code_t code = lv_event_get_code(e);
if (code == LV_EVENT_DRAW_PART_BEGIN) {
lv_obj_draw_part_dsc_t* dsc = lv_event_get_draw_part_dsc(e);
@@ -142,7 +142,7 @@ void SubScreenButton::event_cb(lv_event_t* e)
} else if (code == LV_EVENT_DRAW_PART_END) {
if (btn->text.empty()) return;
lv_obj_draw_part_dsc_t* dsc = lv_event_get_draw_part_dsc(e);
if (dsc->part != LV_PART_MAIN) return;
@@ -243,7 +243,7 @@ void ModelSetupPage::build(FormWindow * window)
new StaticText(line, rect_t{}, STR_LABELS, 0, COLOR_THEME_PRIMARY1);
auto curmod = modelslist.getCurrentModel();
labelTextButton =
new TextButton(line, rect_t{}, modelslabels.getLabelString(curmod ,STR_UNLABELEDMODEL), [=] () {
new TextButton(line, rect_t{}, modelslabels.getBulletLabelString(curmod ,STR_UNLABELEDMODEL), [=] () {
Menu *menu = new Menu(window, true);
menu->setTitle(STR_LABELS);
for (auto &label: modelslabels.getLabels()) {
@@ -253,8 +253,9 @@ void ModelSetupPage::build(FormWindow * window)
modelslabels.addLabelToModel(label, curmod);
else
modelslabels.removeLabelFromModel(label, curmod);
labelTextButton->setText(modelslabels.getLabelString(curmod,STR_UNLABELEDMODEL));
strcpy(g_model.header.labels, modelslabels.getLabelString(curmod,STR_UNLABELEDMODEL).c_str());
labelTextButton->setText(modelslabels.getBulletLabelString(curmod,STR_UNLABELEDMODEL));
strncpy(g_model.header.labels, ModelMap::toCSV(modelslabels.getLabelsByModel(curmod)).c_str(),sizeof(g_model.header.labels));
g_model.header.labels[sizeof(g_model.header.labels)-1] = '\0';
SET_DIRTY();
}, [=] () {
return modelslabels.isLabelSelected(label, curmod);
@@ -285,7 +286,7 @@ void ModelSetupPage::build(FormWindow * window)
form->setFlexLayout(LV_FLEX_FLOW_ROW_WRAP, lv_dpx(8));
lv_obj_set_style_flex_main_place(form->getLvObj(), LV_FLEX_ALIGN_SPACE_EVENLY, 0);
form->padAll(lv_dpx(8));
Window* btn = new IntmoduleButton(form);
lv_obj_set_style_min_width(btn->getLvObj(), LV_DPI_DEF, 0);
@@ -342,11 +343,11 @@ TimerBtnMatrix::TimerBtnMatrix(Window* parent, const rect_t& r) :
setText(1, TR_TIMER "2");
setText(2, TR_TIMER "3");
update();
lv_btnmatrix_set_btn_width(lvobj, 3, 2);
lv_obj_set_width(lvobj, lv_pct(100));
lv_obj_set_height(lvobj, LV_DPI_DEF / 2);
lv_obj_set_style_bg_opa(lvobj, LV_OPA_0, 0);
lv_obj_set_style_pad_all(lvobj, lv_dpx(8), 0);