void InsertOrUpdate(Measurement meas)
{
if (indexToRow.ContainsKey(meas.Index))
{
var row = indexToRow[meas.Index];
this.listView.Items[row] = CreateItem(meas);
}
else
{
// figure out where to insert
var entry = indexToRow.FirstOrDefault(kvp => kvp.Key > meas.Index);
if (entry.Equals(default(KeyValuePair<ushort, int>)))
{
var row = listView.Items.Count;
listView.Items.Add(CreateItem(meas));
indexToRow[meas.Index] = row;
}
else
{
listView.Items.Insert(entry.Value, CreateItem(meas));
indexToRow[meas.Index] = entry.Value;
var rows = indexToRow.Select(kvp => kvp.Key > meas.Index);
foreach (var kvp in indexToRow)
{
if (kvp.Key > meas.Index)
{
indexToRow[kvp.Key] = kvp.Value + 1;
}
}
}
}
}