/// <summary>
        /// Registers the control and adds it to a visible form</summary>
        /// <param name="control">Control</param>
        /// <param name="controlInfo">Control display information</param>
        /// <param name="client">Client that owns the control and receives notifications
        /// about its status, or null if no notifications are needed</param>
        /// <remarks>If IControlHostClient.Close() has been called, the IControlHostService
        /// also calls UnregisterControl. Call RegisterControl again to re-register the Control.</remarks>
        public void RegisterControl(System.Windows.Forms.Control control, Sce.Atf.Applications.ControlInfo controlInfo, Sce.Atf.Applications.IControlHostClient client)
        {
            var clientAdapter = GetOrCreateClientAdapter(client);

            // WPF control host service requires a unique control ID in order to be able to reload window layouts
            // on app startup.
            // This is a problem as we do not have one here.
            // The best we can do is try and generate a unique hash
            int uniqueId = GenerateId(control, controlInfo, client);

            IControlInfo contentInfo = m_adaptee.RegisterControl(control, controlInfo.Name, controlInfo.Description, controlInfo.Group, uniqueId.ToString(), clientAdapter);

            controlInfo.Control = control;

            m_info.Add(controlInfo, contentInfo);
            TransferControlInfoValues(controlInfo);
            controlInfo.Changed += (s, e) => TransferControlInfoValues(s as Sce.Atf.Applications.ControlInfo);
        }
        private void TransferControlInfoValues(Sce.Atf.Applications.ControlInfo controlInfo)
        {
            IControlInfo contentInfo;

            if (m_info.TryGetValue(controlInfo, out contentInfo))
            {
                contentInfo.Name           = controlInfo.Name;
                contentInfo.Description    = controlInfo.Description;
                contentInfo.ImageSourceKey = controlInfo.Image;

                if (controlInfo.Image != null)
                {
                    // Creates a WPF image source resource and adds it to App resources
                    // with key or old image
                    Util.GetOrCreateResourceForEmbeddedImage(controlInfo.Image);
                }
            }
        }