/// <summary> /// Add information from Trainpaths /// </summary> /// <param name="trackViewer"></param> private void AddTrainpathStatus(TrackViewer trackViewer) { if (Properties.Settings.Default.statusShowTrainpath && (trackViewer.PathEditor != null)) { if (trackViewer.PathEditor.HasValidPath) { //gather some info on path status List <string> statusItems = new List <string>(); if (trackViewer.PathEditor.HasEndingPath) { statusItems.Add("good end"); } if (trackViewer.PathEditor.HasBrokenPath) { statusItems.Add("broken"); } if (trackViewer.PathEditor.HasModifiedPath) { statusItems.Add("modified"); } if (trackViewer.PathEditor.HasStoredTail) { statusItems.Add("stored tail"); } string pathStatus = String.Join(", ", statusItems.ToArray()); ORTS.TrackViewer.Editing.TrainpathNode curNode = trackViewer.PathEditor.CurrentNode; statusAdditional.Text += string.Format(System.Globalization.CultureInfo.CurrentCulture, " {0} ({4}): TVNs=[{1} {2}] (type={3})", trackViewer.PathEditor.FileName, curNode.NextMainTvnIndex, curNode.NextSidingTvnIndex, curNode.NodeType, pathStatus); if (curNode.IsBroken) { statusAdditional.Text += string.Format(System.Globalization.CultureInfo.CurrentCulture, " Broken: {0} ", curNode.BrokenStatusString()); } TrainpathVectorNode curVectorNode = curNode as TrainpathVectorNode; if (curVectorNode != null && curNode.NodeType == TrainpathNodeType.Stop) { statusAdditional.Text += string.Format(System.Globalization.CultureInfo.CurrentCulture, " (wait-time={0}s)", curVectorNode.WaitTimeS); } } else { statusAdditional.Text += "Invalid path"; } } }