]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
expo: Support building an expo with a textline
authorSimon Glass <sjg@chromium.org>
Mon, 2 Oct 2023 01:13:38 +0000 (19:13 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 11 Oct 2023 19:43:55 +0000 (15:43 -0400)
Add textline to the list of objects which tthe expo builder can build.
This allows them to be provided in the description.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/expo_build.c

index 3a659de57223354f9058089d1a23f62c3c449d06..04d88a2c30815695b1acfafe8d569d860fdfd0dd 100644 (file)
@@ -287,6 +287,49 @@ static int menu_build(struct build_info *info, ofnode node, struct scene *scn,
        return 0;
 }
 
+static int textline_build(struct build_info *info, ofnode node,
+                         struct scene *scn, uint id, struct scene_obj **objp)
+{
+       struct scene_obj_textline *ted;
+       uint ted_id, edit_id;
+       const char *name;
+       u32 max_chars;
+       int ret;
+
+       name = ofnode_get_name(node);
+
+       info->err_prop = "max-chars";
+       ret = ofnode_read_u32(node, "max-chars", &max_chars);
+       if (ret)
+               return log_msg_ret("max", -ENOENT);
+
+       ret = scene_textline(scn, name, id, max_chars, &ted);
+       if (ret < 0)
+               return log_msg_ret("ted", ret);
+       ted_id = ret;
+
+       /* Set the title */
+       ret = add_txt_str(info, node, scn, "title", 0);
+       if (ret < 0)
+               return log_msg_ret("tit", ret);
+       ted->label_id = ret;
+
+       /* Setup the editor */
+       info->err_prop = "edit-id";
+       ret = ofnode_read_u32(node, "edit-id", &id);
+       if (ret)
+               return log_msg_ret("id", -ENOENT);
+       edit_id = ret;
+
+       ret = scene_txt_str(scn, "edit", edit_id, 0, abuf_data(&ted->buf),
+                           NULL);
+       if (ret < 0)
+               return log_msg_ret("add", ret);
+       ted->edit_id = ret;
+
+       return 0;
+}
+
 /**
  * obj_build() - Build an expo object and add it to a scene
  *
@@ -316,6 +359,8 @@ static int obj_build(struct build_info *info, ofnode node, struct scene *scn)
 
        if (!strcmp("menu", type))
                ret = menu_build(info, node, scn, id, &obj);
+       else if (!strcmp("textline", type))
+               ret = textline_build(info, node, scn, id, &obj);
        else
                ret = -EOPNOTSUPP;
        if (ret)