diff --git a/Telecom/main_window.cs b/Telecom/main_window.cs index d7664dd..e2a0e09 100644 --- a/Telecom/main_window.cs +++ b/Telecom/main_window.cs @@ -65,9 +65,20 @@ protected override void RenderWindowContents(int window_id) { open_contracts_.Add(contract, false); } } + var ok_style = UnityEngine.GUI.skin.label; + var disconnected_style = principia.ksp_plugin_adapter.Style.Warning(ok_style); + foreach (var contract_connections in telecom_.network.connections_by_contract) { var contract = contract_connections.Key; var connections = contract_connections.Value; + bool all_available = connections.All(connection => { + if (connection is PointToMultipointConnection point_to_multipoint) { + return point_to_multipoint.channel_services.All(service => service.basic.available); + } else if (connection is DuplexConnection duplex) { + return duplex.basic_service.available; + } else { return false; } + }); + var contract_style = all_available ? ok_style : disconnected_style; using (new UnityEngine.GUILayout.HorizontalScope()) { if (UnityEngine.GUILayout.Button( open_contracts_[contract] ? "−" : "+", GUILayoutWidth(1))) { @@ -75,7 +86,7 @@ protected override void RenderWindowContents(int window_id) { ScheduleShrink(); return; } - UnityEngine.GUILayout.Label(contract.Title); + UnityEngine.GUILayout.Label(contract.Title, contract_style); } if (open_contracts_[contract]) { foreach (var connection in connections) { @@ -86,9 +97,11 @@ protected override void RenderWindowContents(int window_id) { var rx = telecom_.network.GetStation(point_to_multipoint.rx_names[0]); bool available = services.basic.available; string status = available ? "OK" : "Disconnected"; + var style = available ? ok_style : disconnected_style; using (new UnityEngine.GUILayout.HorizontalScope()) { UnityEngine.GUILayout.Label( $"From {tx.displaynodeName} to {rx.displaynodeName}: {status}", + style, GUILayoutWidth(15)); connection_inspectors_[connection].RenderButton(); } @@ -104,10 +117,11 @@ protected override void RenderWindowContents(int window_id) { var services = point_to_multipoint.channel_services[i]; bool available = services.basic.available; string status = available ? "OK" : "Disconnected"; + var style = available ? ok_style : disconnected_style; var rx = telecom_.network.GetStation(point_to_multipoint.rx_names[i]); if (point_to_multipoint.rx_names.Length > 1) { UnityEngine.GUILayout.Label( - $@"— {rx.displaynodeName}: {status}"); + $@"— {rx.displaynodeName}: {status}", style); } } } else if (connection is DuplexConnection duplex) { @@ -115,9 +129,11 @@ protected override void RenderWindowContents(int window_id) { var trx1 = telecom_.network.GetStation(duplex.trx_names[1]); bool available = duplex.basic_service.available; string status = available ? "OK" : "Disconnected"; + var style = available ? ok_style : disconnected_style; using (new UnityEngine.GUILayout.HorizontalScope()) { UnityEngine.GUILayout.Label( - $@"Duplex between {trx0.displaynodeName} and {trx1.displaynodeName}: {status}", + $@"Duplex between {trx0.displaynodeName} and {trx1.displaynodeName}: {status}", + style, GUILayoutWidth(15)); connection_inspectors_[connection].RenderButton(); }