using Hi.Cbtr; using Hi.Common; using Hi.Common.XmlUtils; using Hi.MachiningSteps; using Hi.NcMech.Fixtures; using Hi.NcMech.Workpieces; using System.Collections.Generic; using System.Linq; using System.Xml; using System.Xml.Linq; namespace Sample.Common; /// /// User Configuration. /// /// /// Sample-owned copy of the per-GUI user configuration, kept so the /// step-present demo still compiles. Each /// GUI/APP keeps its own version; the core engine package (HiNc) no longer /// carries any GUI configuration type. /// public class UserConfig : IMakeXmlSource { /// /// Registers this type's deserializer with the given /// (or when is /// null). Idempotent. /// public static void Reg(XFactory factory = null) { factory ??= XFactory.Default; factory.Generators.TryAdd(XName, (xml, baseDirectory, relFile, progress, res) => new UserConfig(xml, baseDirectory)); } #region XML IO /// /// Name for XML IO. /// public static string XName => nameof(UserConfig); /// /// Initializes a new instance of the class from XML data. /// /// XML element containing configuration data /// Base directory for resolving relative paths public UserConfig(XElement src, string baseDirectory) { if (src == null) return; src.Element(nameof(ShowPhysicsOptions))?.Value?.SelfInvoke( v => ShowPhysicsOptions = XmlConvert.ToBoolean(v)); src.Element(nameof(LanguageCode))?.Value?.SelfInvoke(v => LanguageCode = v); src.Element(nameof(EnableFullControl))?.Value?.SelfInvoke( v => EnableFullControl = XmlConvert.ToBoolean(v)); src.Element(nameof(GraphicCacheLowerLimitMb))?.Value?.SelfInvoke( v => GraphicCacheLowerLimitMb = XmlConvert.ToDouble(v)); src.Element(nameof(GraphicCacheUpperLimitMb))?.Value?.SelfInvoke( v => GraphicCacheUpperLimitMb = XmlConvert.ToDouble(v)); src.Element(nameof(GraphicCacheMb))?.Value?.SelfInvoke( v => GraphicCacheMb = XmlConvert.ToInt64(v)); src.Element(nameof(DisplayedStepPresentKeyList))?.SelfInvoke(ee => { DisplayedStepPresentKeyList = ee.Elements("Item").Select(e => e.Value).ToList(); }); // Load FixtureSetupDisplayeeConfig src.Element(nameof(FixtureSetupDisplayeeConfig))?.SelfInvoke(e => { FixtureSetupDisplayeeConfig = new FixtureEditorDisplayeeConfig(e); }); // Load EquipmentWorkpieceSetupDisplayeeConfig src.Element(nameof(EquipmentWorkpieceSetupDisplayeeConfig))?.SelfInvoke(e => { EquipmentWorkpieceSetupDisplayeeConfig = new WorkpieceEditorDisplayeeConfig(e); }); // Load PlayerDivConfig src.Element(nameof(PlayerDivConfig))?.SelfInvoke(e => { PlayerDivConfig = new PlayerDivConfig(e); }); } /// public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) { XElement dst = new XElement(XName, new XElement(nameof(ShowPhysicsOptions), ShowPhysicsOptions), new XElement(nameof(LanguageCode), LanguageCode), new XElement(nameof(EnableFullControl), EnableFullControl), new XElement(nameof(GraphicCacheLowerLimitMb), GraphicCacheLowerLimitMb), new XElement(nameof(GraphicCacheUpperLimitMb), GraphicCacheUpperLimitMb), new XElement(nameof(GraphicCacheMb), GraphicCacheMb), new XElement(nameof(DisplayedStepPresentKeyList), DisplayedStepPresentKeyList.Select(v => new XElement("Item", v))), new XElement(nameof(FixtureSetupDisplayeeConfig), FixtureSetupDisplayeeConfig?.MakeXmlSource(baseDirectory, relFile, exhibitionOnly)), new XElement(nameof(EquipmentWorkpieceSetupDisplayeeConfig), EquipmentWorkpieceSetupDisplayeeConfig?.MakeXmlSource(baseDirectory, relFile, exhibitionOnly)), PlayerDivConfig?.MakeXmlSource(baseDirectory, relFile, exhibitionOnly) ); return dst; } #endregion /// /// Gets or sets whether to show physics options in the UI. /// public bool ShowPhysicsOptions { get; set; } = false; /// /// Gets or sets the language code for the application UI. /// public string LanguageCode { get; set; } = "en"; /// /// Enable Full control of the application. /// Eanble System.Diagnostics.Process in GUI Script Command. /// Not used yet. /// public bool EnableFullControl { get; set; } /// /// Gets or sets the lower limit of graphic cache in megabytes. /// public double GraphicCacheLowerLimitMb { get; set; } = 10; /// /// Gets or sets the upper limit of graphic cache in megabytes. /// public double GraphicCacheUpperLimitMb { get; set; } = 1200; /// /// Gets or sets the graphic cache size in megabytes. /// public long GraphicCacheMb { get => CubeTree.DispCacheMb; set => CubeTree.DispCacheMb = value; } /// /// Step infomation key list to show. /// public List DisplayedStepPresentKeyList { get; set; } = new List([ nameof(MachiningStep.StepIndex), nameof(MachiningStep.FileNo), nameof(MachiningStep.LineNo), nameof(MachiningStep.FilePath),nameof(MachiningStep.EndTimecode), nameof(MachiningStep.LineText),nameof(MachiningStep.FlagsText), nameof(MachiningStep.ToolId), nameof(MachiningStep.SpindleSpeed_rpm),nameof(MachiningStep.Feedrate_mmdmin), nameof(MachiningStep.Mrr_mm3ds), nameof(MachiningStep.AvgAbsTorque_Nm), ]); /// /// Configuration for FixtureSetupDisplayee /// public FixtureEditorDisplayeeConfig FixtureSetupDisplayeeConfig { get; set; } = new FixtureEditorDisplayeeConfig(); /// /// Configuration for EquipmentWorkpieceSetupDisplayee /// public WorkpieceEditorDisplayeeConfig EquipmentWorkpieceSetupDisplayeeConfig { get; set; } = new WorkpieceEditorDisplayeeConfig(); /// /// Per-user visibility flags for the Player page's divisions (charts and info panels). /// Persisted alongside the rest of this . /// public PlayerDivConfig PlayerDivConfig { get; set; } = new PlayerDivConfig(); /// /// Default constructor /// public UserConfig() { } }