using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using CK.SCP.Utils; using DevComponents.DotNetBar.Controls; namespace CK.SCP.Common { public static class SettingHelper { public static T SetConfigValues(List groupList, string filename) where T : new() { var t = new T(); var properties = t.GetType().GetProperties(); foreach (var group in groupList) { if (group.GetType() != typeof(GroupPanel)) continue; if (group.Name != GetPureName(filename)) continue; foreach (var ctrl in group.Controls) { if (ctrl.GetType() == typeof(CktTextBox)) { var textbox = (CktTextBox)ctrl; foreach (var pi in properties) { var piName = pi.Name; if (textbox.Name != piName) continue; if (string.IsNullOrEmpty(textbox.Text.Trim())) { throw new Exception($"{piName} 不能为空"); } var value = ListHelper.ConvertToType(textbox.Text, pi.PropertyType); if (textbox.UserSystemPasswordChar) value = EncryptHelper.Encrypt(textbox.Text); if (!pi.CanWrite) continue; pi.SetValue(t, value, null); break; } } if (ctrl.GetType() == typeof(CktSwitchButton)) { var switchButton = (CktSwitchButton)ctrl; foreach (var pi in properties) { var piName = pi.Name; if (switchButton.Name != piName) continue; var value = ListHelper.ConvertToType(switchButton.Value, pi.PropertyType); if (!pi.CanWrite) continue; pi.SetValue(t, value, null); break; } } } break; } JsonHelper.WriteConfigToFile(filename, t); return t; } public static GroupPanel GetConfigValues(string filename) where T : new() { var t = FileHelper.Exists(filename) ? JsonHelper.ReadConfigFromFile(filename) : new T(); var properties = t.GetType().GetProperties(); var group = CreateGroupPanel(filename, properties.Length); foreach (var pi in properties) { var piValue = pi.GetValue(t, null); var piName = pi.Name; if (pi.PropertyType == typeof(Boolean)) { var switchButton = CreateSwitchButton(piName); switchButton.Value = Convert.ToBoolean(piValue); @group.Controls.Add(switchButton); switchButton.BringToFront(); } else { var textbox = CreateTextbox(piName); if (piName.Contains("密码")) { textbox.UserSystemPasswordChar = true; textbox.Text = piValue == null ? "" : EncryptHelper.Decrypt(piValue.ToString()); } else { textbox.Text = piValue?.ToString() ?? ""; } @group.Controls.Add(textbox); textbox.BringToFront(); } } return group; } private static CktTextBox CreateTextbox(string piName) where T : new() { return new CktTextBox() { LblText = piName, LblTextAlign = StringAlignment.Far, LblWidth = 150, Dock = DockStyle.Top, Name = piName, }; } private static CktSwitchButton CreateSwitchButton(string piName) where T : new() { return new CktSwitchButton() { LblText = piName, LblTextAlign = StringAlignment.Far, LblWidth = 100, Dock = DockStyle.Top, Name = piName, }; } public static string GetPureName(string filename) { return filename.Replace(".ini", ""); } private static GroupPanel CreateGroupPanel(string filename, int pQty) { var group = new GroupPanel { CanvasColor = System.Drawing.SystemColors.Control, ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007, DisabledBackColor = System.Drawing.Color.Empty, Location = new System.Drawing.Point(3, 3), Height = 25 * (pQty + 1), Width = 300, }; group.Name = GetPureName(filename); group.Text = GetPureName(filename); group.Style.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; group.Style.BackColorGradientAngle = 90; group.Style.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; group.Style.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Solid; group.Style.BorderBottomWidth = 1; group.Style.BorderColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; group.Style.BorderLeft = DevComponents.DotNetBar.eStyleBorderType.Solid; group.Style.BorderLeftWidth = 1; group.Style.BorderRight = DevComponents.DotNetBar.eStyleBorderType.Solid; group.Style.BorderRightWidth = 1; group.Style.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; group.Style.BorderTopWidth = 1; group.Style.CornerDiameter = 4; group.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; group.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; group.Style.TextColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; group.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; group.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; group.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; group.Visible = false; return group; } } }