/// <summary>
        /// New material selected from the list.
        /// </summary>
        /// <param name="selected">New selected material</param>
        public void SelectMaterial(object selected)
        {
            Data.Material m = null;
            try
            {
                if (selected is System.Collections.Generic.KeyValuePair <string, Data.Material> )
                {
                    m = ((System.Collections.Generic.KeyValuePair <string, Data.Material>)selected).Value;
                }
            }
            catch
            {
                m = null;
            }
#if TRACE_EVENTS
            log.Debug($"Calculator.Material: SelectMaterial(material: {(m != null)})");
#endif
            if (m == null)
            {
                return;
            }

            // Set Use.
            if (m.UseCuttingSpeed)
            {
                // Set Vc.
                material.VcEnabled = true;
                material.Vc.SetValue(DoubleST.Scan(m.CuttingSpeed, 1.0, "mm/s"));
            }
            else
            {
                // Set n.
                material.NEnabled = true;
                material.n.SetValue(DoubleST.Scan(m.SpindleSpeed, 1.0, "rpm"));
            }

            // set fz.
            material.fz.SetValue(DoubleST.Scan(m.FeedPerTooth, 1.0, "mm/tooth"));
        }
        /// <summary>
        /// New tool selected from the list.
        /// </summary>
        /// <param name="selected">Selected tool</param>
        public void SelectTool(object selected)
        {
#if TRACE_EVENTS
            log.Debug($"Calculator.Material: SelectTool(bit: {(selected as Bit)})");
#endif

            var b = (selected as Bit);
            if (b == null)
            {
                return;
            }

            // set h?
            tool.D.SetValue(new DoubleST(1.0, "[mm]"));

            // set D.
            var Ds = b.Parameter.ContainsKey("Diameter") ? b.Parameter["Diameter"] : null;
            tool.D.SetValue(DoubleST.Scan(Ds, 1.0, "mm"));

            // set Z.
            var Zs = b.Parameter.ContainsKey("Flutes") ? b.Parameter["Flutes"] : null;
            tool.Z.SetValue(LongST.Scan(Zs, 1L, "tooth"));
        }