public void MarkOperation(string key, CarTimestamp ts)
        {
            RunRateDataItemSource item = items[key] as RunRateDataItemSource;

            if (item == null)
            {
                throw new KeyNotFoundException();
            }

            item.Mark(ts);
        }
        private void InitItems(string group)
        {
            items = new Dictionary <string, IDataItemSource>(new CaseInsensitiveStringComparer());

            Type diGenType = typeof(DataItemSource <>);

            DatasetXmlParser.ParseConfig(delegate(DataItemDescriptor ds, string specialType, List <KeyValuePair <string, string> > attributes) {
                if (specialType == "runrate")
                {
                    RunRateDataItemSource runRate = new RunRateDataItemSource(ds, attributes);
                    Add(ds.Name, runRate);
                }
                else
                {
                    Type diType     = diGenType.MakeGenericType(ds.DataType);
                    object dataItem = Activator.CreateInstance(diType, ds);
                    Add(ds.Name, (IDataItemSource)dataItem);
                }
            }, group);
        }