// {0} {1:D2} | #{text} | @{C065F955-1FAD-40df-B2FC-285D62F14E0A} public static ConfigItemVersion ToConfigItemVersion(object value) { if (value == null) throw new ConfigException("Cannot convert null"); int type; ConfigItemVersion ver = null; string name = value.GetType().FullName; switch (name) { case "System.String": type = StringWithArgs.IsMatch((string)value) ? ConfigValueType.StringWithArgs : ConfigValueType.StringLiteral; ver = new CfgText { VersionValue = value, ValueType = type }; break; case "System.Boolean": ver = new CfgBool { VersionValue = value }; break; case "System.Drawing.Color": ver = new CfgColor { VersionValue = value }; break; case "System.Decimal": ver = new CfgNumber{ VersionValue = value, ValueType = ConfigValueType.Decimal }; break; case "System.Double": case "System.Float": ver = new CfgNumber{ VersionValue = value, ValueType = ConfigValueType.Real }; break; case "System.Uri": //TODO ConfigurationService: CfgURI to be implemented break; case "Imarda.Lib.Measurement": ver = new CfgMeasurement { VersionValue = value, ValueType = ConfigValueType.Measurement }; break; default: if (name.StartsWith("System.Xml.Xml")) { ver = new CfgXml { VersionValue = value }; } else if (name.StartsWith("System.Int") || name.StartsWith("System.UInt")) { ver = new CfgNumber { VersionValue = value }; } break; } return ver; }
public override ConfigItemVersion Insert(ConfigItemVersion specific) { if (specific == null) return this; ConfigItemVersion result; IMeasurement generalValue = (IMeasurement)VersionValue; switch (specific.ValueType) { // Multiply by a scalar. case ConfigValueType.Integer: case ConfigValueType.Decimal: case ConfigValueType.Real: double d = Convert.ToDouble(specific.VersionValue); result = Clone(this); result.VersionValue = generalValue.AsMeasurement() * d; return result; // If specific string is something like "Speed:kph" then convert the Measurement // to a speed and then to a string using the format specifier behind ':'. This // format specifier is interpreted by the MeasurementFormatInfo.Default. // The resulting item is a CfgText, no longer a CfgMeasurement! // You can pass a CfgText as an Application Parameter and influence the formatting // using application preferences. case ConfigValueType.StringLiteral: case ConfigValueType.StringWithArgs: string s = (string)specific.VersionValue; int p = s.IndexOf(':'); string name = s.Substring(0, p); string unit = s.Substring(p + 1); result = new CfgText(ConfigValueType.StringLiteral) { Combine = this.Combine, UID = specific.UID, VersionValue = generalValue.AsMeasurement().ToString(name, unit) }; return result; } return null; }
private static ConfigItemVersion Create(int type) { ConfigItemVersion result; switch (type) { case ConfigValueType.StringLiteral: case ConfigValueType.StringWithArgs: result = new CfgText(type); break; case ConfigValueType.Bool: result = new CfgBool(); break; case ConfigValueType.Integer: case ConfigValueType.Decimal: case ConfigValueType.Real: result = new CfgNumber(type); break; case ConfigValueType.Color: result = new CfgColor(); break; case ConfigValueType.Parameters: result = new CfgParams(); break; case ConfigValueType.Xml: result = new CfgXml(); break; case ConfigValueType.Measurement: result = new CfgMeasurement(); break; //case ConfigValueType.Uri: //case ConfigValueType.Font: //case ConfigValueType.RichText: default: throw new ConfigException(type + ": data type is not yet supported"); } return result; }