public void UpdateDisplay(List<TrackBlock> blocks, List<ITrain> trains)
{
if (InvokeRequired)
{
Invoke(m_updateDelegate, blocks, trains);
}
else
{
if (blocks != null)
{
this.SuspendLayout();
for (int i = 0, j = scrollbar.Value; i < m_numRows && j < blocks.Count; i++, j++)
{
//Display the block information
m_labelTable[i].NameLabel.Text = blocks[i].Name;
m_labelTable[i].AuthorityLabel.Text = blocks[i].Authority.Authority.ToString();
m_labelTable[i].SpeedLimitLabel.Text = blocks[i].Authority.SpeedLimitKPH.ToString() + " " + KPH;
m_labelTable[i].StaticLimitLabel.Text = blocks[i].StaticSpeedLimit + " " + KPH;
if (blocks[i].Status.TrainPresent)
{
m_labelTable[i].TrainLabel.Text = "yes";
}
else
{
m_labelTable[i].TrainLabel.Text = "no";
}
m_labelTable[i].SignalLabel.Text = blocks[i].Status.SignalState.ToString();
m_labelTable[i].GradeLabel.Text = blocks[i].Grade.ToString() + "%";
m_labelTable[i].LengthLabel.Text = blocks[i].LengthMeters.ToString() + " " + METERS;
if (blocks[i].HasTunnel)
{
m_labelTable[i].HasTunnelLabel.Text = "yes";
}
else
{
m_labelTable[i].HasTunnelLabel.Text = "no";
}
if (blocks[i].RailroadCrossing)
{
m_labelTable[i].RRCrossingLabel.Text = "yes";
}
else
{
m_labelTable[i].RRCrossingLabel.Text = "yes";
}
if (blocks[i].Transponder != null) //Could use block.HasTransponder property, but check for null to be on the safe side...
{
if (blocks[i].Transponder.DistanceToStation != 0)
{
m_labelTable[i].TransponderLabel.Text = blocks[i].Transponder.StationName + "in " + blocks[i].Transponder.DistanceToStation.ToString() + " block(s)";
}
else
{
m_labelTable[i].TransponderLabel.Text = "At " + blocks[i].Transponder.StationName;
}
}
else
{
m_labelTable[i].TransponderLabel.Text = "none";
}
m_labelTable[i].FailureLabel.Text = GetBlockFailureStateString(blocks[i]);
m_labelTable[i].ShowLabels();
}
//Hide the unused labels
for (int i = blocks.Count; i < m_numRows; i++)
{
m_labelTable[i].HideLabels();
}
}
this.ResumeLayout();
}
}