public int Add(Object hlControl)
        {
            HitbaseControlData newControl = new HitbaseControlData();

            newControl.ControlName = hlControl.GetType().Name;

            AddProperties(newControl.Properties, hlControl);

            return(Controls.Add(newControl));
        }
        public void AddProperties(List <Property> props, Object hlControl)
        {
            HitbaseControlData newControl = new HitbaseControlData();

            newControl.ControlName = hlControl.GetType().Name;

            // Jetzt per Reflection alle Hitbase-Properties auslesen

            PropertyInfo[] propInfo = hlControl.GetType().GetProperties();
            foreach (PropertyInfo prop in propInfo)
            {
                // Handelt es sich um ein Hitbase-Attribut?
                CategoryAttribute[] attribs = (CategoryAttribute[])prop.GetCustomAttributes(typeof(CategoryAttribute), true);

                if (attribs != null && attribs.Length > 0 && attribs[0].Category == "Hitbase")
                {
                    object objValue = prop.GetValue(hlControl, null);

                    if (objValue != null)
                    {
                        if (objValue is System.Drawing.Color)
                        {
                            if (!((System.Drawing.Color)objValue).IsEmpty)
                            {
                                System.Drawing.Color col = ((System.Drawing.Color)objValue);
                                String colValue;

                                if (col.IsNamedColor)
                                {
                                    colValue = col.Name;
                                }
                                else
                                {
                                    colValue = String.Format("#{0:x2}{1:x2}{2:x2}", col.R, col.G, col.B);
                                }

                                props.Add(new Property(prop.Name, colValue));
                            }
                        }
                        else
                        {
                            if (objValue is System.Drawing.Font)
                            {
                                props.Add(new Property(prop.Name, GetStringFromFont((System.Drawing.Font)objValue)));
                            }
                            else
                            {
                                props.Add(new Property(prop.Name, objValue));
                            }
                        }
                    }
                }
            }
        }
        public void SaveDialogToXMLRecursive(HitbaseControlData ctlData, FrameworkElement parent)
        {
            // Von hinten nach vorne laufen, weil sonst die Reihenfolge umgedreht wird.

            /*TODO_WPF!!!!!!!!!!!!!!!!!for (int i = parent.Controls.Count - 1; i >= 0; i--)
             * {
             *  if (parent.Controls[i] is IHitbaseControl)
             *  {
             *      int index = ctlData.Add(((IHitbaseControl)parent.Controls[i]).HitbaseControl);
             *
             *      SaveDialogToXMLRecursive((HitbaseControlData)ctlData.Controls[index], parent.Controls[i]);
             *  }
             * }*/
        }
        public bool ReadDialogFromDialogData(HitbaseControl parent, HitbaseControlData hitbaseControlData)
        {
            //int controlIndex = 0;
            foreach (HitbaseControlData ctl in hitbaseControlData.Controls)
            {
                Object newControl = null;

                if (ctl.ControlName != "MainWindowCDUserControl")
                {
                    switch (ctl.ControlName)
                    {
                    case "HitbaseTextBox": newControl = new HitbaseTextBox(this); break;

                    case "HitbaseLabel": newControl = new HitbaseLabel(this); break;

                    case "HitbaseButton": newControl = new HitbaseButton(this); break;

                    case "HitbaseComboBox": newControl = new HitbaseComboBox(this); break;

                    case "HitbaseCheckBox": newControl = new HitbaseCheckBox(this); break;

                    case "HitbaseRating": newControl = new HitbaseRating(this); break;

                    //TODO_WPF!!!!!!!!!!!!!!!!case "HitbaseTrackList": newControl = new HitbaseTrackList(this); break;
                    //TODO_WPF!!!!!!!!!!!!!!!!case "HitbaseParticipants": newControl = new HitbaseParticipants(this); break;
                    case "HitbaseSeperator": newControl = new HitbaseSeperator(this); break;

                    //TODO_WPF!!!!!!!!!!!!!!!!case "HitbaseCover": newControl = new HitbaseCover(this); break;
                    default:
                        //MessageBox.Show("unknown hitbase Control " + ctl.ControlName, System.Windows.Forms.Application.ProductName, MessageBoxButton.OK, MessageBoxImage.Error);
                        break;
                    }
                }
                else
                {
                    newControl = this;
                }

                if (newControl != null)
                {
                    foreach (HitbaseControlData.Property prop in ctl.Properties)
                    {
                        PropertyInfo property = newControl.GetType().GetProperty(prop.Name);
                        if (property != null)
                        {
                            if (property.PropertyType == typeof(System.Drawing.Color))
                            {
                                string colorString = prop.Value.ToString();
                                if (colorString.StartsWith("#"))
                                {
                                    int R, G, B;
                                    R = Convert.ToInt32(colorString.Substring(1, 2), 16);
                                    G = Convert.ToInt32(colorString.Substring(3, 2), 16);
                                    B = Convert.ToInt32(colorString.Substring(5, 2), 16);

                                    //TODO_WPF!!!!!!!!!!!!!!!!!property.SetValue(newControl, Color.FromArgb(R, G, B), null);
                                }
                                else
                                {
                                    //TODO_WPF!!!!!!!!!!!!!!!!!property.SetValue(newControl, Color.FromName(colorString), null);
                                }
                            }
                            else
                            {
                                if (property.PropertyType == typeof(System.Drawing.Font) && prop.Value != null)
                                {
                                    property.SetValue(newControl, GetFontFromString(prop.Value.ToString()), null);
                                }
                                else
                                {
                                    property.SetValue(newControl, prop.Value, null);
                                }
                            }
                        }
                    }

                    if (newControl is HitbaseControl)
                    {
                        AddHitbaseControl(parent, 0, (HitbaseControl)newControl);

                        ReadDialogFromDialogData((HitbaseControl)newControl, ctl);
                    }
                }
            }

            return(true);
        }