ui/ncurses: Re-add autoboot selection to config screen
authorSam Mendoza-Jonas <sam@mendozajonas.com>
Fri, 11 Mar 2016 05:11:31 +0000 (16:11 +1100)
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>
Tue, 22 Mar 2016 21:59:53 +0000 (08:59 +1100)
The new boot order interface removed the autoboot enable/disable buttons.
However this means the only way to disable autoboot is to remove all
options from the boot order list, or know that you can manually set the
`auto-boot?` flag in nvram.

This re-introduces an autoboot enable/disable widget so that autoboot
can be disabled without losing an existing boot order. The translated
strings for "Autoboot" are salvaged from earlier use, and two new
untranslated strings are introduced.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
12 files changed:
po/de.po
po/en.po
po/es.po
po/fr.po
po/it.po
po/ja.po
po/ko.po
po/pt_BR.po
po/ru.po
po/zh_CN.po
po/zh_TW.po
ui/ncurses/nc-config.c

index 0580e7b8ea60055bbd610e1f09639c14709ac6db..8ee9d8bd8f75ae7a9c2e18debe27964f03773568 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -198,6 +198,15 @@ msgstr "Wählen Sie eine Booteinheit aus, die hinzugefügt werden soll"
 msgid "Waiting for configuration data..."
 msgstr "Warten auf Konfigurationsdaten..."
 
+msgid "Autoboot:"
+msgstr "Autom. Booten:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "Einheit hinzufügen"
 
@@ -686,9 +695,6 @@ msgstr ""
 msgid "Usage"
 msgstr "Verwendung"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index 2be6372ba86f023840a5c1272ac170a4703cfa93..588ea5542ba6bd1e16f59db9238c819636e9778f 100644 (file)
--- a/po/en.po
+++ b/po/en.po
@@ -196,6 +196,15 @@ msgstr ""
 msgid "Waiting for configuration data..."
 msgstr "Waiting for configuration data..."
 
+msgid "Autoboot:"
+msgstr "Autoboot:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "Add Device:"
 
@@ -621,9 +630,6 @@ msgstr ""
 msgid "Usage"
 msgstr "Usage"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index abe0cbabb01a10c7d6d706ef9e8a34f0bb4437c5..0bb413770f4e2d8996326872b4539c52a6338784 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -196,6 +196,15 @@ msgstr "Seleccione un dispositivo de arranque para añadirlo"
 msgid "Waiting for configuration data..."
 msgstr "Esperando datos de configuración..."
 
+msgid "Autoboot:"
+msgstr "Arranque automático:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "Añadir dispositivo"
 
@@ -675,9 +684,6 @@ msgstr ""
 msgid "Usage"
 msgstr "Uso"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index eac32bcfd8f5c5290452dc24128d443079def77e..e9c2d8b245473c7eadeea05030a84566a6580f56 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -196,6 +196,15 @@ msgstr "Sélectionner une unité d'amorçage à ajouter"
 msgid "Waiting for configuration data..."
 msgstr "Attente de données de configuration..."
 
+msgid "Autoboot:"
+msgstr "Amorçage auto:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "Ajouter une unité"
 
@@ -676,9 +685,6 @@ msgstr ""
 msgid "Usage"
 msgstr "Utilisation"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index 9f77a5630901ef0af6d25ad254c7fea96e8e8e4a..2195e807d172e5c0f2bf99a96c3327b95d7603dc 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -197,6 +197,15 @@ msgstr "Selezionare un dispositivo di avvio da aggiungere"
 msgid "Waiting for configuration data..."
 msgstr "In attesa dei dati di configurazione..."
 
+msgid "Autoboot:"
+msgstr "Avvio automatico:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "Aggiungi dispositivo"
 
@@ -678,9 +687,6 @@ msgstr ""
 msgid "Usage"
 msgstr "Utilizzo"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index 6fe061b9495e8bf51463f0c8b275178bfde2c672..427016a7c32bddd07b1750a52886fdac12205995 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -196,6 +196,15 @@ msgstr "追加するブート・デバイスの選択"
 msgid "Waiting for configuration data..."
 msgstr "構成データを待っています..."
 
+msgid "Autoboot:"
+msgstr "自動ブート:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "デバイスの追加"
 
@@ -675,9 +684,6 @@ msgstr ""
 msgid "Usage"
 msgstr "使用法"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index e1bcd0fb932ae5ef90471fbc33794c4a3aaff2bb..fc450b6d1cc7ea1773168e8387417742175f643c 100644 (file)
--- a/po/ko.po
+++ b/po/ko.po
@@ -196,6 +196,15 @@ msgstr "추가할 부트 장치를 선택하십시오. "
 msgid "Waiting for configuration data..."
 msgstr "구성 데이터 대기 중..."
 
+msgid "Autoboot:"
+msgstr "자동 부트:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "장치 추가"
 
@@ -660,9 +669,6 @@ msgstr ""
 msgid "Usage"
 msgstr "사용법"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index 48bc5de5dd55ea70e8ec9c84a63d3c21b223d5e6..62c943cdbcc120d92b9cee7fdd27f6dae0af9bbd 100644 (file)
@@ -196,6 +196,15 @@ msgstr "Selecione um dispositivo de inicialização a incluir."
 msgid "Waiting for configuration data..."
 msgstr "Aguardando dados de configuração..."
 
+msgid "Autoboot:"
+msgstr "Inicialização automática:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "Incluir dispositivo"
 
@@ -678,9 +687,6 @@ msgstr ""
 msgid "Usage"
 msgstr "Uso"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index bfe68d1acb08db9367a13c0f216f5665ebca0f90..0a68bc9a5ece896913efe76a19f792a0c7c5d24d 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -197,6 +197,15 @@ msgstr "Выберите загрузочное устройство для до
 msgid "Waiting for configuration data..."
 msgstr "Ожидание данных конфигурации..."
 
+msgid "Autoboot:"
+msgstr "Автоматическая загрузка:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "Добавить устройство"
 
@@ -670,9 +679,6 @@ msgstr ""
 msgid "Usage"
 msgstr "Использование"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index 13ab6a61d2e52d360399c116209b76bd2772f79f..12d7785b7a2ac8e2b0bd172b060121b585aaafb9 100644 (file)
@@ -196,6 +196,15 @@ msgstr "选择要添加的引导设备"
 msgid "Waiting for configuration data..."
 msgstr "正在等待配置数据..."
 
+msgid "Autoboot:"
+msgstr "自动引导:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "添加设备"
 
@@ -645,9 +654,6 @@ msgstr ""
 msgid "Usage"
 msgstr "用法"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index f9b48f9365ff6344a9d8af5949c223b69d55d9b8..c9f1f7f2ec17c8f7df4e1fbceacc020e87f52400 100644 (file)
@@ -196,6 +196,15 @@ msgstr "選取要新增的啟動裝置"
 msgid "Waiting for configuration data..."
 msgstr "正在等待配置資料..."
 
+msgid "Autoboot:"
+msgstr "自動啟動:"
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
 msgid "Add Device"
 msgstr "新增裝置"
 
@@ -648,9 +657,6 @@ msgstr ""
 msgid "Usage"
 msgstr "用法"
 
-#~ msgid "Autoboot:"
-#~ msgstr "Autoboot:"
-
 #~ msgid "Don't autoboot"
 #~ msgstr "Don't autoboot"
 
index e7451bb5dc08fda57d54cd9a73e9bbcd32a60711..c0df762f155a236f0736fb577e09f99c7fa9a1e8 100644 (file)
@@ -33,7 +33,7 @@
 #include "nc-config.h"
 #include "nc-widgets.h"
 
-#define N_FIELDS       37
+#define N_FIELDS       39
 
 extern struct help_text config_help_text;
 
@@ -69,6 +69,8 @@ struct config_screen {
        bool                    ipmi_override;
 
        struct {
+               struct nc_widget_label          *autoboot_l;
+               struct nc_widget_select         *autoboot_f;
                struct nc_widget_label          *boot_order_l;
                struct nc_widget_subset         *boot_order_f;
                struct nc_widget_label          *boot_empty_l;
@@ -191,11 +193,11 @@ static int screen_process_form(struct config_screen *screen)
        const struct system_info *sysinfo = screen->cui->sysinfo;
        enum net_conf_type net_conf_type;
        struct interface_config *iface;
+       bool allow_write, autoboot;
        char *str, *end;
        struct config *config;
        int i, n_boot_opts, rc, idx;
        unsigned int *order;
-       bool allow_write;
        char mac[20];
 
        config = config_copy(screen, screen->cui->config);
@@ -206,7 +208,8 @@ static int screen_process_form(struct config_screen *screen)
        n_boot_opts = widget_subset_get_order(config, &order,
                                              screen->widgets.boot_order_f);
 
-       config->autoboot_enabled = n_boot_opts > 0;
+       autoboot = widget_select_get_value(screen->widgets.autoboot_f);
+       config->autoboot_enabled = autoboot || (autoboot && n_boot_opts);
 
        config->n_autoboot_opts = n_boot_opts;
        config->autoboot_opts = talloc_array(config, struct autoboot_option,
@@ -387,41 +390,59 @@ static void config_screen_layout_widgets(struct config_screen *screen)
        help_x = screen->field_x + 2 +
                widget_width(widget_textbox_base(screen->widgets.dns_f));
 
-       wl = widget_label_base(screen->widgets.boot_order_l);
+       wl = widget_label_base(screen->widgets.autoboot_l);
        widget_set_visible(wl, true);
        widget_move(wl, y, screen->label_x);
 
+       wf = widget_select_base(screen->widgets.autoboot_f);
+       widget_move(wf, y, screen->field_x);
+       y += widget_height(wf);
+
+       show = screen->autoboot_enabled;
+
+       if (show)
+               y += 1;
+
+       wl = widget_label_base(screen->widgets.boot_order_l);
+       widget_set_visible(wl, show);
+       widget_move(wl, y, screen->label_x);
+
        wf = widget_subset_base(screen->widgets.boot_order_f);
        widget_move(wf, y, screen->field_x);
        wl = widget_label_base(screen->widgets.boot_empty_l);
        widget_move(wl, y, screen->field_x);
 
        if (widget_subset_height(screen->widgets.boot_order_f)) {
-               widget_set_visible(wf, true);
                widget_set_visible(wl, false);
-               y += widget_height(wf);
+               widget_set_visible(wf, show);
+               y += show ? widget_height(wf) : 0;
        } else {
-               widget_set_visible(wl, true);
+               widget_set_visible(wl, show);
                widget_set_visible(wf, false);
-               y += 1;
+               y += show ? 1 : 0;
        }
 
-       y += 1;
-
-       widget_move(widget_button_base(screen->widgets.boot_add_b),
-                       y++, screen->field_x);
-       widget_move(widget_button_base(screen->widgets.boot_any_b),
-                       y++, screen->field_x);
-       widget_move(widget_button_base(screen->widgets.boot_none_b),
-                       y, screen->field_x);
+       if (show) {
+               y += 1;
+               widget_move(widget_button_base(screen->widgets.boot_add_b),
+                               y++, screen->field_x);
+               widget_move(widget_button_base(screen->widgets.boot_any_b),
+                               y++, screen->field_x);
+               widget_move(widget_button_base(screen->widgets.boot_none_b),
+                               y, screen->field_x);
+       }
 
        wf = widget_button_base(screen->widgets.boot_add_b);
-       if (widget_subset_n_inactive(screen->widgets.boot_order_f))
+       if (widget_subset_n_inactive(screen->widgets.boot_order_f) && show)
                widget_set_visible(wf, true);
        else
                widget_set_visible(wf, false);
 
-       y += 2;
+       if (show)
+               y += 2;
+
+       widget_set_visible(widget_button_base(screen->widgets.boot_any_b), show);
+       widget_set_visible(widget_button_base(screen->widgets.boot_none_b), show);
 
        wf = widget_textbox_base(screen->widgets.timeout_f);
        wl = widget_label_base(screen->widgets.timeout_l);
@@ -584,6 +605,15 @@ static void config_screen_boot_order_change(void *arg, int value)
        widgetset_post(screen->widgetset);
 }
 
+static void config_screen_autoboot_change(void *arg, int value)
+{
+       struct config_screen *screen = arg;
+       screen->autoboot_enabled = !!value;
+       widgetset_unpost(screen->widgetset);
+       config_screen_layout_widgets(screen);
+       widgetset_post(screen->widgetset);
+}
+
 static void config_screen_add_device(void *arg)
 {
        struct config_screen *screen = arg;
@@ -722,6 +752,21 @@ static void config_screen_setup_widgets(struct config_screen *screen,
        type = screen->net_conf_type;
        ifcfg = first_active_interface(config);
 
+       screen->autoboot_enabled = config->autoboot_enabled;
+
+       screen->widgets.autoboot_l = widget_new_label(set, 0, 0,
+                                       _("Autoboot:"));
+       screen->widgets.autoboot_f = widget_new_select(set, 0, 0,
+                                       COLS - screen->field_x - 1);
+
+       widget_select_add_option(screen->widgets.autoboot_f, 0, _("Disabled"),
+                                !screen->autoboot_enabled);
+       widget_select_add_option(screen->widgets.autoboot_f, 1, _("Enabled"),
+                                screen->autoboot_enabled);
+
+       widget_select_on_change(screen->widgets.autoboot_f,
+                       config_screen_autoboot_change, screen);
+
        add_len = max(min_len, strncols(_("Add Device")));
        clear_len = max(min_len, strncols(_("Clear")));
        any_len = max(min_len, strncols(_("Clear & Boot Any")));
@@ -783,7 +828,6 @@ static void config_screen_setup_widgets(struct config_screen *screen,
                widget_subset_add_option(screen->widgets.boot_order_f, label);
        }
 
-       screen->autoboot_enabled = config->n_autoboot_opts;
        for (i = 0; i < config->n_autoboot_opts; i++) {
                struct autoboot_option *opt = &config->autoboot_opts[i];
                int idx;