+ boot_editor->widgets.initrd_l = widget_new_label(set, 0, 0,
+ _("Initrd:"));
+ boot_editor->widgets.initrd_f = widget_new_textbox(set, 0, 0,
+ field_size,
+ boot_editor->initrd);
+
+ boot_editor->widgets.dtb_l = widget_new_label(set, 0, 0,
+ _("Device tree:"));
+ boot_editor->widgets.dtb_f = widget_new_textbox(set, 0, 0,
+ field_size, boot_editor->dtb);
+
+ boot_editor->widgets.args_l = widget_new_label(set, 0, 0,
+ _("Boot arguments:"));
+ boot_editor->widgets.args_f = widget_new_textbox(set, 0, 0,
+ field_size, boot_editor->args);
+
+ boot_editor->widgets.ok_b = widget_new_button(set, 0, 0, 6,
+ _("OK"), ok_click, boot_editor);
+ boot_editor->widgets.help_b = widget_new_button(set, 0, 0, 10,
+ _("Help"), help_click, boot_editor);
+ boot_editor->widgets.cancel_b = widget_new_button(set, 0, 0, 10,
+ _("Cancel"), cancel_click, boot_editor);
+}
+
+void boot_editor_update(struct boot_editor *boot_editor,
+ const struct system_info *sysinfo)
+{
+ int height;
+
+ widgetset_unpost(boot_editor->widgetset);
+
+ height = pad_height(sysinfo ? sysinfo->n_blockdevs : 0);
+ if (getmaxy(boot_editor->pad) < height) {
+ delwin(boot_editor->pad);
+ boot_editor->pad = newpad(height, COLS);
+ widgetset_set_windows(boot_editor->widgetset,
+ boot_editor->scr.main_ncw,
+ boot_editor->pad);
+ }
+
+ boot_editor_populate_device_select(boot_editor, sysinfo);
+
+ boot_editor_layout_widgets(boot_editor);
+
+ widgetset_post(boot_editor->widgetset);
+
+ pad_refresh(boot_editor);
+}
+
+/* Return the number of columns required to display a localised string */
+static int strncols(const char *str)
+{
+ int i, wlen, ncols = 0;
+ wchar_t *wstr;
+
+ wlen = mbstowcs(NULL, str, 0);
+ if (wlen <= 0)
+ return wlen;
+
+ wstr = malloc(sizeof(wchar_t) * wlen + 1);
+ if (!wstr)
+ return -1;
+
+ wlen = mbstowcs(wstr, str, wlen);
+ if (wlen <= 0) {
+ free(wstr);
+ return wlen;
+ }
+
+ /* Processing each character individually lets us use the same
+ * check for all languages */
+ for (i = 0; i < wlen; i++) {
+ ncols += wcwidth(wstr[i]);
+ }
+
+ free(wstr);
+ return ncols;