]> git.ozlabs.org Git - petitboot/blobdiff - ui/ncurses/nc-cui.c
nui/ncurses: Allow config screen updates
[petitboot] / ui / ncurses / nc-cui.c
index 6aa2a2869cf0b971c9e41fd6684cf4ba1f5838c5..268060c8d36eeab786af3835da2dcf820b945b0d 100644 (file)
@@ -34,6 +34,7 @@
 #include "process/process.h"
 #include "ui/common/discover-client.h"
 #include "nc-cui.h"
+#include "nc-config.h"
 #include "nc-sysinfo.h"
 
 static struct cui_opt_data *cod_from_item(struct pmenu_item *item)
@@ -251,6 +252,20 @@ void cui_show_sysinfo(struct cui *cui)
        cui_set_current(cui, sysinfo_screen_scr(cui->sysinfo_screen));
 }
 
+static void cui_config_exit(struct cui *cui)
+{
+       cui_set_current(cui, &cui->main->scr);
+       talloc_free(cui->config_screen);
+       cui->config_screen = NULL;
+}
+
+void cui_show_config(struct cui *cui)
+{
+       cui->config_screen = config_screen_init(cui, cui->config,
+                       cui->sysinfo, cui_config_exit);
+       cui_set_current(cui, config_screen_scr(cui->config_screen));
+}
+
 /**
  * cui_set_current - Set the currently active screen and redraw it.
  */
@@ -527,6 +542,10 @@ static void cui_update_sysinfo(struct system_info *sysinfo, void *arg)
        if (cui->sysinfo_screen)
                sysinfo_screen_update(cui->sysinfo_screen, sysinfo);
 
+       /* ... and do the same with the config screen */
+       if (cui->config_screen)
+               config_screen_update(cui->config_screen, cui->config, sysinfo);
+
        cui_update_mm_title(cui);
 }
 
@@ -534,6 +553,14 @@ static void cui_update_config(struct config *config, void *arg)
 {
        struct cui *cui = cui_from_arg(arg);
        cui->config = talloc_steal(cui, config);
+
+       if (cui->config_screen)
+               config_screen_update(cui->config_screen, config, cui->sysinfo);
+}
+
+int cui_send_config(struct cui *cui, struct config *config)
+{
+       return discover_client_send_config(cui->client, config);
 }
 
 static struct discover_client_ops cui_client_ops = {