From ef0a3f5be1d9922c8128977d9e0e8c715cbe5904 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 4 Mar 2019 13:47:30 +0100 Subject: [PATCH] menu_view: hidden dependencies in When specifying the attribute 'dep_visible="false"' for a primary dependency or the attribute 'visible="false"' for a secondary dependency, the dependency is used for the layout calculation but not displayed in the graph. --- .../gems/src/app/menu_view/depgraph_widget.h | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/repos/gems/src/app/menu_view/depgraph_widget.h b/repos/gems/src/app/menu_view/depgraph_widget.h index c360ecb24c..3fe0e4b8a0 100644 --- a/repos/gems/src/app/menu_view/depgraph_widget.h +++ b/repos/gems/src/app/menu_view/depgraph_widget.h @@ -81,6 +81,8 @@ struct Menu_view::Depgraph_widget : Widget { Anchor::Type const _type; + enum Visible { VISIBLE, HIDDEN } visible; + /* * Dependencies are marked as out of date at the beginning of the * update procedure. Each dependency visited during the update is @@ -97,9 +99,10 @@ struct Menu_view::Depgraph_widget : Widget Registered _anchor_at_server; Registered _anchor_at_client; - Dependency(Node &client, Node &server, Anchor::Type type) + Dependency(Node &client, Node &server, Anchor::Type type, + Visible visible) : - _type(type), _server(server), + _type(type), visible(visible), _server(server), _anchor_at_server(server._server_anchors, client, type), _anchor_at_client(client._client_anchors, server, type) { } @@ -253,18 +256,20 @@ struct Menu_view::Depgraph_widget : Widget _deps.for_each([&] (Dependency &dep) { dep.up_to_date = false; }); } - void depends_on(Node &node, Anchor::Type type) + void depends_on(Node &node, Anchor::Type type, Dependency::Visible visible) { bool dependency_exists = false; _deps.for_each([&] (Dependency &dep) { if (dep.depends_on(node)) { + dep.visible = visible; dep.up_to_date = true; /* skip in 'destroy_stale_deps' */ dependency_exists = true; } }); if (!dependency_exists) - new (_alloc) Registered(_deps, *this, node, type); + new (_alloc) + Registered(_deps, *this, node, type, visible); } void destroy_stale_deps() @@ -470,12 +475,15 @@ struct Menu_view::Depgraph_widget : Widget typedef String<64> Node_name; Node_name client_name, server_name; + bool dep_visible = true; if (primary) { client_name = node.attribute_value("name", Node_name()); server_name = node.attribute_value("dep", Node_name()); + dep_visible = node.attribute_value("dep_visible", true); } else { client_name = node.attribute_value("node", Node_name()); server_name = node.attribute_value("on", Node_name()); + dep_visible = node.attribute_value("visible", true); } if (!server_name.valid()) @@ -488,8 +496,11 @@ struct Menu_view::Depgraph_widget : Widget }); if (client && server && client != server) - client->depends_on(*server, primary ? Node::Anchor::PRIMARY - : Node::Anchor::SECONDARY); + client->depends_on(*server, + primary ? Node::Anchor::PRIMARY + : Node::Anchor::SECONDARY, + dep_visible ? Node::Dependency::VISIBLE + : Node::Dependency::HIDDEN); if (client && !server) { warning("node '", client_name, "' depends on " "non-existing node '", server_name, "'"); @@ -618,6 +629,9 @@ struct Menu_view::Depgraph_widget : Widget client._deps.for_each([&] (Node::Dependency const &dep) { + if (dep.visible == Node::Dependency::HIDDEN) + return; + Color color; if (shadow) {