diff --git a/repos/gems/src/app/sculpt_manager/deploy.cc b/repos/gems/src/app/sculpt_manager/deploy.cc index ebaab897a2..f1ba5a5fcf 100644 --- a/repos/gems/src/app/sculpt_manager/deploy.cc +++ b/repos/gems/src/app/sculpt_manager/deploy.cc @@ -51,30 +51,11 @@ void Sculpt::Deploy::_gen_missing_dependencies(Xml_generator &xml, Start_name co void Sculpt::Deploy::gen_child_diagnostics(Xml_generator &xml) const { - bool all_children_ok = true; - _children.for_each_unsatisfied_child([&] (Xml_node, Xml_node) { - all_children_ok = false; }); - - if (all_children_ok) - return; - int count = 0; - gen_named_node(xml, "frame", "diagnostics", [&] () { - xml.node("vbox", [&] () { - - xml.node("label", [&] () { - xml.attribute("text", "Diagnostics"); }); - - xml.node("float", [&] () { - xml.node("vbox", [&] () { - _children.for_each_unsatisfied_child([&] (Xml_node start, Xml_node launcher) { - Start_name const name = start.attribute_value("name", Start_name()); - _gen_missing_dependencies(xml, name, start, count); - _gen_missing_dependencies(xml, name, launcher, count); - }); - }); - }); - }); + _children.for_each_unsatisfied_child([&] (Xml_node start, Xml_node launcher) { + Start_name const name = start.attribute_value("name", Start_name()); + _gen_missing_dependencies(xml, name, start, count); + _gen_missing_dependencies(xml, name, launcher, count); }); } diff --git a/repos/gems/src/app/sculpt_manager/deploy.h b/repos/gems/src/app/sculpt_manager/deploy.h index 959bec4732..9e4a6ba001 100644 --- a/repos/gems/src/app/sculpt_manager/deploy.h +++ b/repos/gems/src/app/sculpt_manager/deploy.h @@ -174,6 +174,14 @@ struct Sculpt::Deploy */ bool update_child_conditions(); + bool any_unsatisfied_child() const + { + bool all_satisfied = true; + _children.for_each_unsatisfied_child([&] (Xml_node, Xml_node) { + all_satisfied = false; }); + return !all_satisfied; + } + void _gen_missing_dependencies(Xml_generator &, Start_name const &, Xml_node, int &) const; void gen_child_diagnostics(Xml_generator &xml) const; diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 51a988df40..4724f00657 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -284,7 +284,43 @@ struct Sculpt::Main : Input_event_handler, xml.attribute("font", "title/regular"); }); - _deploy.gen_child_diagnostics(xml); + bool const network_missing = _deploy.update_needed() + && !_network._nic_state.ready(); + bool const show_diagnostics = + _deploy.any_unsatisfied_child() || network_missing; + + auto gen_network_diagnostics = [&] (Xml_generator &xml) + { + if (!network_missing) + return; + + gen_named_node(xml, "hbox", "network", [&] () { + gen_named_node(xml, "float", "left", [&] () { + xml.attribute("west", "yes"); + xml.node("label", [&] () { + xml.attribute("text", "network needed for installation"); + xml.attribute("font", "annotation/regular"); + }); + }); + }); + }; + + if (show_diagnostics) { + gen_named_node(xml, "frame", "diagnostics", [&] () { + xml.node("vbox", [&] () { + + xml.node("label", [&] () { + xml.attribute("text", "Diagnostics"); }); + + xml.node("float", [&] () { + xml.node("vbox", [&] () { + gen_network_diagnostics(xml); + _deploy.gen_child_diagnostics(xml); + }); + }); + }); + }); + } Xml_node const state = _update_state_rom.xml(); if (_update_running() && state.attribute_value("progress", false))