diff --git a/PowerPlanSwitcher/App.config b/PowerPlanSwitcher/App.config index 9f4c3bd..1d18558 100644 --- a/PowerPlanSwitcher/App.config +++ b/PowerPlanSwitcher/App.config @@ -34,6 +34,12 @@ False + + 00000000-0000-0000-0000-000000000000 + + + 00000000-0000-0000-0000-000000000000 + \ No newline at end of file diff --git a/PowerPlanSwitcher/BatteryMonitor.cs b/PowerPlanSwitcher/BatteryMonitor.cs index 84f4179..c7f15f7 100644 --- a/PowerPlanSwitcher/BatteryMonitor.cs +++ b/PowerPlanSwitcher/BatteryMonitor.cs @@ -1,90 +1,80 @@ -namespace PowerPlanSwitcher +namespace PowerPlanSwitcher { - using System.Runtime.InteropServices; - + using PowerPlanSwitcher.Properties; + using static Vanara.PInvoke.Kernel32; + public class BatteryMonitor { - // 定义SYSTEM_POWER_STATUS结构体 - [StructLayout(LayoutKind.Sequential)] - public struct SYSTEM_POWER_STATUS - { - public byte ACLineStatus; // AC 电源线状态:0 表示离线(电池供电),1 表示在线(插电) - public byte BatteryFlag; // 电池标志 - public byte BatteryLifePercent; // 电池剩余百分比 - public byte Reserved1; // 保留 - public int BatteryLifeTime; // 电池剩余时间(以秒为单位) - public int BatteryFullLifeTime; // 电池满电使用时间(以秒为单位) - } - - // 引入GetSystemPowerStatus函数 - [DllImport("kernel32.dll")] //和GetSystemPowerStatus有关 - private static extern bool GetSystemPowerStatus(out SYSTEM_POWER_STATUS lpSystemPowerStatus); - private static bool ToggleMark = true; // 切换标记 - // private static PowerRule ACListData; - // private static PowerRule BatteryListData; - private static Guid? BatteryGuid; // 电池供电时的电源计划GUID - private static Guid? AcPowerGuid; // 插电时的电源计划GUID - public static PowerStatus BatteryNull; - private static SYSTEM_POWER_STATUS powerStatus; - - public static void PlanValue() + private static Guid AcPowerSchemeGuid => + Settings.Default.AcPowerSchemeGuid; + private static Guid BatterPowerSchemeGuid => + Settings.Default.BatterPowerSchemeGuid; + + private static bool toggleMark = true; + + public static bool HasSystemBattery() => + SystemInformation.PowerStatus.BatteryChargeStatus + != BatteryChargeStatus.NoSystemBattery; + + public static void Initialize() { - BatteryNull = SystemInformation.PowerStatus; - if (BatteryNull.BatteryChargeStatus != BatteryChargeStatus.NoSystemBattery) - { - // 调用SettingsHelper.GetGuidsWithVisibility()方法并解构返回的元组 - var (_acGuid, _batteryGuid) = PowerSchemeSettings.GetGuidsWithVisibility(); - - // 将解构得到的GUID值赋给对应的静态字段 - AcPowerGuid = _acGuid; - BatteryGuid = _batteryGuid; + if (!GetSystemPowerStatus(out var powerStatus)) + { + return; } - } - - public static void BatteryMonitorInitialization() - { - PlanValue(); - MonitorBatterySwitcInitialization(); - } - - private static void MonitorBatterySwitcInitialization() - { - if (!ToggleMark && BatteryGuid != Guid.Empty && AcPowerGuid == Guid.Empty && powerStatus.ACLineStatus == 1) // 插电状态 02 + + if (!toggleMark + && BatterPowerSchemeGuid != Guid.Empty + && AcPowerSchemeGuid == Guid.Empty + && powerStatus.ACLineStatus == AC_STATUS.AC_ONLINE) { - ToggleMark = true; + toggleMark = true; } - else if (ToggleMark && AcPowerGuid != Guid.Empty && BatteryGuid == Guid.Empty && powerStatus.ACLineStatus == 0) //电池供电 01 + + if (toggleMark + && AcPowerSchemeGuid != Guid.Empty + && BatterPowerSchemeGuid == Guid.Empty + && powerStatus.ACLineStatus == AC_STATUS.AC_OFFLINE) { - ToggleMark = false; - } + toggleMark = false; + } } - - // 监测电池状态并切换电源计划的方法 - public static void MonitorBatterySwitc() + + public static Guid GetPowerPlanGuid() { - if (BatteryNull.BatteryChargeStatus != BatteryChargeStatus.NoSystemBattery) + if (!HasSystemBattery()) { - GetSystemPowerStatus(out powerStatus); - var PMGAPSG = PowerManager.GetActivePowerSchemeGuid(); - - if (!ToggleMark && AcPowerGuid != Guid.Empty && powerStatus.ACLineStatus == 1 && PMGAPSG != AcPowerGuid) // 插电状态 01 03 - { - PowerManager.SetActivePowerScheme(AcPowerGuid.Value); // 激活插电时的电源计划 - ProcessMonitor.baselinePowerSchemeGuid = AcPowerGuid.Value; // 电池供电时的电源计划GUID - ToggleMark = true; - } - else if (ToggleMark && BatteryGuid != Guid.Empty && powerStatus.ACLineStatus == 0 && PMGAPSG != BatteryGuid) //电池供电 02 03 - { - PowerManager.SetActivePowerScheme(BatteryGuid.Value); // 激活电池供电时的电源计划 - ProcessMonitor.baselinePowerSchemeGuid = BatteryGuid.Value; - ToggleMark = false; - } - else - { - MonitorBatterySwitcInitialization(); - } + return Guid.Empty; + } + if (!GetSystemPowerStatus(out var powerStatus)) + { + return Guid.Empty; } + + var activePowerSchemeGuid = PowerManager.GetActivePowerSchemeGuid(); + + if (!toggleMark + && AcPowerSchemeGuid != Guid.Empty + && powerStatus.ACLineStatus == AC_STATUS.AC_ONLINE + && activePowerSchemeGuid != AcPowerSchemeGuid) + { + toggleMark = true; + return AcPowerSchemeGuid; + } + + if (toggleMark + && BatterPowerSchemeGuid != Guid.Empty + && powerStatus.ACLineStatus == AC_STATUS.AC_OFFLINE + && activePowerSchemeGuid != BatterPowerSchemeGuid) + { + toggleMark = false; + return BatterPowerSchemeGuid; + } + + Initialize(); + + return Guid.Empty; } } } diff --git a/PowerPlanSwitcher/PowerSchemeSettings.cs b/PowerPlanSwitcher/PowerSchemeSettings.cs index b7f50ff..849e6f7 100644 --- a/PowerPlanSwitcher/PowerSchemeSettings.cs +++ b/PowerPlanSwitcher/PowerSchemeSettings.cs @@ -62,8 +62,6 @@ public override bool CanConvert(Type objectType) => public class Setting { - public bool AcPowerVisible { get; set; } = false; - public bool BatteryVisible { get; set; } = false; public bool Visible { get; set; } = true; [JsonConverter(typeof(ImageConverter))] public Image? Icon { get; set; } @@ -95,26 +93,14 @@ public class Setting } return null; } - - public static (Guid? AcPowerGuid, Guid? BatteryGuid) GetGuidsWithVisibility() - { - LoadSettings(); // 确保设置已经被加载 - - Guid? acPowerGuid = settings - .Where(kvp => kvp.Value != null && kvp.Value.AcPowerVisible) - .Select(kvp => kvp.Key) - .FirstOrDefault(); - - Guid? batteryGuid = settings - .Where(kvp => kvp.Value != null && kvp.Value.BatteryVisible) - .Select(kvp => kvp.Key) - .FirstOrDefault(); - - return (acPowerGuid, batteryGuid); - } public static void SetSetting(Guid schemaGuid, Setting setting) { + if (schemaGuid == Guid.Empty) + { + return; + } + LoadSettings(); settings![schemaGuid] = setting; } diff --git a/PowerPlanSwitcher/ProcessMonitor.cs b/PowerPlanSwitcher/ProcessMonitor.cs index 11d8ce9..2fac216 100644 --- a/PowerPlanSwitcher/ProcessMonitor.cs +++ b/PowerPlanSwitcher/ProcessMonitor.cs @@ -11,7 +11,7 @@ internal class ProcessMonitor : IDisposable private DateTime lastUpdate; private readonly Timer? updateTimer; private bool disposedValue; - public static Guid baselinePowerSchemeGuid; + private static Guid baselinePowerSchemeGuid; private PowerRule? previouslyAppliedPowerRule; @@ -32,8 +32,8 @@ private void HandleUpdateTimerTick(object? _) { try { - BatteryMonitor.MonitorBatterySwitc(); - + baselinePowerSchemeGuid = BatteryMonitor.GetPowerPlanGuid(); + if (DateTime.Now - lastUpdate < TimeSpan.FromSeconds(Settings.Default.PowerRuleCheckInterval)) { diff --git a/PowerPlanSwitcher/Program.cs b/PowerPlanSwitcher/Program.cs index 56faac5..fa7b92d 100644 --- a/PowerPlanSwitcher/Program.cs +++ b/PowerPlanSwitcher/Program.cs @@ -112,7 +112,6 @@ private static void Main() RegisterHotkeys(); HotkeyManager.HotkeyPressed += HotkeyManager_HotkeyPressed; - BatteryMonitor.PlanValue(); using var trayIcon = new TrayIcon(); SystemEvents.EventsThreadShutdown += (s, e) => Application.Exit(); diff --git a/PowerPlanSwitcher/Properties/Settings.Designer.cs b/PowerPlanSwitcher/Properties/Settings.Designer.cs index b96c627..ced5487 100644 --- a/PowerPlanSwitcher/Properties/Settings.Designer.cs +++ b/PowerPlanSwitcher/Properties/Settings.Designer.cs @@ -130,5 +130,29 @@ public bool CycleOnlyVisible { this["CycleOnlyVisible"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")] + public global::System.Guid AcPowerSchemeGuid { + get { + return ((global::System.Guid)(this["AcPowerSchemeGuid"])); + } + set { + this["AcPowerSchemeGuid"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")] + public global::System.Guid BatterPowerSchemeGuid { + get { + return ((global::System.Guid)(this["BatterPowerSchemeGuid"])); + } + set { + this["BatterPowerSchemeGuid"] = value; + } + } } } diff --git a/PowerPlanSwitcher/Properties/Settings.settings b/PowerPlanSwitcher/Properties/Settings.settings index 637a025..621056a 100644 --- a/PowerPlanSwitcher/Properties/Settings.settings +++ b/PowerPlanSwitcher/Properties/Settings.settings @@ -29,5 +29,11 @@ False + + 00000000-0000-0000-0000-000000000000 + + + 00000000-0000-0000-0000-000000000000 + \ No newline at end of file diff --git a/PowerPlanSwitcher/SettingsDlg.Designer.cs b/PowerPlanSwitcher/SettingsDlg.Designer.cs index fcb2fd0..e82ee9b 100644 --- a/PowerPlanSwitcher/SettingsDlg.Designer.cs +++ b/PowerPlanSwitcher/SettingsDlg.Designer.cs @@ -28,14 +28,12 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - var dataGridViewCellStyle5 = new DataGridViewCellStyle(); + var dataGridViewCellStyle1 = new DataGridViewCellStyle(); var resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsDlg)); DgvPowerSchemes = new DataGridView(); DgcVisible = new DataGridViewCheckBoxColumn(); DgcIcon = new DataGridViewImageColumn(); DgcName = new DataGridViewTextBoxColumn(); - AcPowerCheckBox = new DataGridViewCheckBoxColumn(); - BatteryCheckBox = new DataGridViewCheckBoxColumn(); DgcHotkey = new DataGridViewTextBoxColumn(); BtnOk = new Button(); BtnCancel = new Button(); @@ -57,14 +55,17 @@ private void InitializeComponent() CmbColorTheme = new ComboBox(); tableLayoutPanel1 = new TableLayoutPanel(); tableLayoutPanel2 = new TableLayoutPanel(); - BtnSetHotkey = new Button(); + ChbActivateInitialPowerScheme = new CheckBox(); + BtnRemoveIcon = new Button(); BtnSetIcon = new Button(); + BtnSetHotkey = new Button(); BtnRemoveHotkey = new Button(); - BtnRemoveIcon = new Button(); + CmbInitialPowerScheme = new ComboBox(); tabControl1 = new TabControl(); tabPage1 = new TabPage(); tabPage2 = new TabPage(); tabPage3 = new TabPage(); + tableLayoutPanel5 = new TableLayoutPanel(); groupBox4 = new GroupBox(); tableLayoutPanel4 = new TableLayoutPanel(); RdbCycleAll = new RadioButton(); @@ -72,13 +73,16 @@ private void InitializeComponent() RdbCycleVisible = new RadioButton(); BtnRemoveCycleHotkey = new Button(); BtnSetCycleHotkey = new Button(); - ChbActivateInitialPowerScheme = new CheckBox(); - CmbInitialPowerScheme = new ComboBox(); - tableLayoutPanel5 = new TableLayoutPanel(); groupBox1 = new GroupBox(); tableLayoutPanel6 = new TableLayoutPanel(); groupBox2 = new GroupBox(); tableLayoutPanel7 = new TableLayoutPanel(); + GrbBatteryManagement = new GroupBox(); + tableLayoutPanel3 = new TableLayoutPanel(); + CmbAcPowerScheme = new ComboBox(); + label1 = new Label(); + label3 = new Label(); + CmbBatteryPowerScheme = new ComboBox(); ((System.ComponentModel.ISupportInitialize)DgvPowerSchemes).BeginInit(); ((System.ComponentModel.ISupportInitialize)DgvPowerRules).BeginInit(); ((System.ComponentModel.ISupportInitialize)NudPowerRuleCheckInterval).BeginInit(); @@ -88,13 +92,15 @@ private void InitializeComponent() tabPage1.SuspendLayout(); tabPage2.SuspendLayout(); tabPage3.SuspendLayout(); + tableLayoutPanel5.SuspendLayout(); groupBox4.SuspendLayout(); tableLayoutPanel4.SuspendLayout(); - tableLayoutPanel5.SuspendLayout(); groupBox1.SuspendLayout(); tableLayoutPanel6.SuspendLayout(); groupBox2.SuspendLayout(); tableLayoutPanel7.SuspendLayout(); + GrbBatteryManagement.SuspendLayout(); + tableLayoutPanel3.SuspendLayout(); SuspendLayout(); // // DgvPowerSchemes @@ -104,7 +110,7 @@ private void InitializeComponent() DgvPowerSchemes.AllowUserToResizeColumns = false; DgvPowerSchemes.AllowUserToResizeRows = false; DgvPowerSchemes.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - DgvPowerSchemes.Columns.AddRange(new DataGridViewColumn[] { DgcVisible, DgcIcon, DgcName, AcPowerCheckBox, BatteryCheckBox, DgcHotkey }); + DgvPowerSchemes.Columns.AddRange(new DataGridViewColumn[] { DgcVisible, DgcIcon, DgcName, DgcHotkey }); tableLayoutPanel2.SetColumnSpan(DgvPowerSchemes, 2); DgvPowerSchemes.Dock = DockStyle.Fill; DgvPowerSchemes.Location = new Point(3, 3); @@ -114,7 +120,7 @@ private void InitializeComponent() tableLayoutPanel2.SetRowSpan(DgvPowerSchemes, 2); DgvPowerSchemes.RowTemplate.Height = 26; DgvPowerSchemes.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - DgvPowerSchemes.Size = new Size(455, 154); + DgvPowerSchemes.Size = new Size(455, 195); DgvPowerSchemes.TabIndex = 0; DgvPowerSchemes.CellMouseDown += HandleDgvPowerSchemesCellMouseDown; // @@ -143,27 +149,11 @@ private void InitializeComponent() DgcName.Name = "DgcName"; DgcName.ReadOnly = true; // - // AcPowerCheckBox - // - AcPowerCheckBox.HeaderText = "AC"; - AcPowerCheckBox.Name = "AcPowerCheckBox"; - AcPowerCheckBox.Resizable = DataGridViewTriState.True; - AcPowerCheckBox.SortMode = DataGridViewColumnSortMode.Automatic; - AcPowerCheckBox.Width = 30; - // - // BatteryCheckBox - // - BatteryCheckBox.HeaderText = "BA"; - BatteryCheckBox.Name = "BatteryCheckBox"; - BatteryCheckBox.Resizable = DataGridViewTriState.True; - BatteryCheckBox.SortMode = DataGridViewColumnSortMode.Automatic; - BatteryCheckBox.Width = 30; - // // DgcHotkey // DgcHotkey.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewCellStyle5.Alignment = DataGridViewContentAlignment.MiddleCenter; - DgcHotkey.DefaultCellStyle = dataGridViewCellStyle5; + dataGridViewCellStyle1.Alignment = DataGridViewContentAlignment.MiddleCenter; + DgcHotkey.DefaultCellStyle = dataGridViewCellStyle1; DgcHotkey.HeaderText = "Hotkey"; DgcHotkey.Name = "DgcHotkey"; DgcHotkey.ReadOnly = true; @@ -172,7 +162,7 @@ private void InitializeComponent() // BtnOk // BtnOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - BtnOk.Location = new Point(537, 243); + BtnOk.Location = new Point(537, 284); BtnOk.Name = "BtnOk"; BtnOk.Size = new Size(75, 23); BtnOk.TabIndex = 1; @@ -184,7 +174,7 @@ private void InitializeComponent() // BtnCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; BtnCancel.DialogResult = DialogResult.Cancel; - BtnCancel.Location = new Point(618, 243); + BtnCancel.Location = new Point(618, 284); BtnCancel.Name = "BtnCancel"; BtnCancel.Size = new Size(75, 23); BtnCancel.TabIndex = 2; @@ -194,7 +184,7 @@ private void InitializeComponent() // BtnCreateRuleFromProcess // BtnCreateRuleFromProcess.Image = (Image)resources.GetObject("BtnCreateRuleFromProcess.Image"); - BtnCreateRuleFromProcess.Location = new Point(118, 126); + BtnCreateRuleFromProcess.Location = new Point(118, 167); BtnCreateRuleFromProcess.Name = "BtnCreateRuleFromProcess"; BtnCreateRuleFromProcess.Size = new Size(109, 74); BtnCreateRuleFromProcess.TabIndex = 6; @@ -219,7 +209,7 @@ private void InitializeComponent() DgvPowerRules.RowHeadersVisible = false; DgvPowerRules.RowTemplate.Height = 26; DgvPowerRules.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - DgvPowerRules.Size = new Size(685, 117); + DgvPowerRules.Size = new Size(685, 158); DgvPowerRules.TabIndex = 7; // // DgcRuleIndex @@ -273,7 +263,7 @@ private void InitializeComponent() // BtnAddPowerRule // BtnAddPowerRule.Image = (Image)resources.GetObject("BtnAddPowerRule.Image"); - BtnAddPowerRule.Location = new Point(3, 126); + BtnAddPowerRule.Location = new Point(3, 167); BtnAddPowerRule.Name = "BtnAddPowerRule"; BtnAddPowerRule.Size = new Size(109, 74); BtnAddPowerRule.TabIndex = 8; @@ -285,7 +275,7 @@ private void InitializeComponent() // BtnEditPowerRule // BtnEditPowerRule.Image = (Image)resources.GetObject("BtnEditPowerRule.Image"); - BtnEditPowerRule.Location = new Point(233, 126); + BtnEditPowerRule.Location = new Point(233, 167); BtnEditPowerRule.Name = "BtnEditPowerRule"; BtnEditPowerRule.Size = new Size(109, 74); BtnEditPowerRule.TabIndex = 9; @@ -297,7 +287,7 @@ private void InitializeComponent() // BtnAscentPowerRule // BtnAscentPowerRule.Image = (Image)resources.GetObject("BtnAscentPowerRule.Image"); - BtnAscentPowerRule.Location = new Point(463, 126); + BtnAscentPowerRule.Location = new Point(463, 167); BtnAscentPowerRule.Name = "BtnAscentPowerRule"; BtnAscentPowerRule.Size = new Size(109, 74); BtnAscentPowerRule.TabIndex = 10; @@ -309,7 +299,7 @@ private void InitializeComponent() // BtnDescentPowerRule // BtnDescentPowerRule.Image = (Image)resources.GetObject("BtnDescentPowerRule.Image"); - BtnDescentPowerRule.Location = new Point(578, 126); + BtnDescentPowerRule.Location = new Point(578, 167); BtnDescentPowerRule.Name = "BtnDescentPowerRule"; BtnDescentPowerRule.Size = new Size(109, 74); BtnDescentPowerRule.TabIndex = 10; @@ -321,7 +311,7 @@ private void InitializeComponent() // BtnDeletePowerRule // BtnDeletePowerRule.Image = (Image)resources.GetObject("BtnDeletePowerRule.Image"); - BtnDeletePowerRule.Location = new Point(348, 126); + BtnDeletePowerRule.Location = new Point(348, 167); BtnDeletePowerRule.Name = "BtnDeletePowerRule"; BtnDeletePowerRule.Size = new Size(109, 74); BtnDeletePowerRule.TabIndex = 9; @@ -333,7 +323,7 @@ private void InitializeComponent() // NudPowerRuleCheckInterval // NudPowerRuleCheckInterval.Anchor = AnchorStyles.Right; - NudPowerRuleCheckInterval.Location = new Point(80, 22); + NudPowerRuleCheckInterval.Location = new Point(80, 8); NudPowerRuleCheckInterval.Maximum = new decimal(new int[] { 600, 0, 0, 0 }); NudPowerRuleCheckInterval.Name = "NudPowerRuleCheckInterval"; NudPowerRuleCheckInterval.Size = new Size(84, 23); @@ -343,7 +333,7 @@ private void InitializeComponent() // label2.Anchor = AnchorStyles.Left; label2.AutoSize = true; - label2.Location = new Point(170, 26); + label2.Location = new Point(170, 12); label2.Name = "label2"; label2.Size = new Size(51, 15); label2.TabIndex = 13; @@ -354,7 +344,7 @@ private void InitializeComponent() CmbColorTheme.Anchor = AnchorStyles.None; CmbColorTheme.DropDownStyle = ComboBoxStyle.DropDownList; CmbColorTheme.FormattingEnabled = true; - CmbColorTheme.Location = new Point(65, 22); + CmbColorTheme.Location = new Point(65, 8); CmbColorTheme.Name = "CmbColorTheme"; CmbColorTheme.Size = new Size(202, 23); CmbColorTheme.TabIndex = 17; @@ -382,7 +372,7 @@ private void InitializeComponent() tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); tableLayoutPanel1.RowStyles.Add(new RowStyle()); tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F)); - tableLayoutPanel1.Size = new Size(691, 203); + tableLayoutPanel1.Size = new Size(691, 244); tableLayoutPanel1.TabIndex = 0; // // tableLayoutPanel2 @@ -406,20 +396,32 @@ private void InitializeComponent() tableLayoutPanel2.RowStyles.Add(new RowStyle()); tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); tableLayoutPanel2.RowStyles.Add(new RowStyle()); - tableLayoutPanel2.Size = new Size(691, 203); + tableLayoutPanel2.Size = new Size(691, 244); tableLayoutPanel2.TabIndex = 1; // - // BtnSetHotkey + // ChbActivateInitialPowerScheme // - BtnSetHotkey.Image = (Image)resources.GetObject("BtnSetHotkey.Image"); - BtnSetHotkey.Location = new Point(464, 83); - BtnSetHotkey.Name = "BtnSetHotkey"; - BtnSetHotkey.Size = new Size(109, 74); - BtnSetHotkey.TabIndex = 6; - BtnSetHotkey.Text = "Set Hotkey"; - BtnSetHotkey.TextImageRelation = TextImageRelation.ImageAboveText; - BtnSetHotkey.UseVisualStyleBackColor = true; - BtnSetHotkey.Click += BtnSetHotkey_Click; + ChbActivateInitialPowerScheme.AutoSize = true; + ChbActivateInitialPowerScheme.Dock = DockStyle.Fill; + ChbActivateInitialPowerScheme.Location = new Point(10, 211); + ChbActivateInitialPowerScheme.Margin = new Padding(10); + ChbActivateInitialPowerScheme.Name = "ChbActivateInitialPowerScheme"; + ChbActivateInitialPowerScheme.Size = new Size(199, 23); + ChbActivateInitialPowerScheme.TabIndex = 24; + ChbActivateInitialPowerScheme.Text = "Activate this Power Plan on start:"; + ChbActivateInitialPowerScheme.UseVisualStyleBackColor = true; + // + // BtnRemoveIcon + // + BtnRemoveIcon.Image = (Image)resources.GetObject("BtnRemoveIcon.Image"); + BtnRemoveIcon.Location = new Point(579, 3); + BtnRemoveIcon.Name = "BtnRemoveIcon"; + BtnRemoveIcon.Size = new Size(109, 74); + BtnRemoveIcon.TabIndex = 21; + BtnRemoveIcon.Text = "Remove Icon"; + BtnRemoveIcon.TextImageRelation = TextImageRelation.ImageAboveText; + BtnRemoveIcon.UseVisualStyleBackColor = true; + BtnRemoveIcon.Click += BtnRemoveIcon_Click; // // BtnSetIcon // @@ -433,6 +435,18 @@ private void InitializeComponent() BtnSetIcon.UseVisualStyleBackColor = true; BtnSetIcon.Click += BtnSetIcon_Click; // + // BtnSetHotkey + // + BtnSetHotkey.Image = (Image)resources.GetObject("BtnSetHotkey.Image"); + BtnSetHotkey.Location = new Point(464, 83); + BtnSetHotkey.Name = "BtnSetHotkey"; + BtnSetHotkey.Size = new Size(109, 74); + BtnSetHotkey.TabIndex = 6; + BtnSetHotkey.Text = "Set Hotkey"; + BtnSetHotkey.TextImageRelation = TextImageRelation.ImageAboveText; + BtnSetHotkey.UseVisualStyleBackColor = true; + BtnSetHotkey.Click += BtnSetHotkey_Click; + // // BtnRemoveHotkey // BtnRemoveHotkey.Image = (Image)resources.GetObject("BtnRemoveHotkey.Image"); @@ -445,17 +459,17 @@ private void InitializeComponent() BtnRemoveHotkey.UseVisualStyleBackColor = true; BtnRemoveHotkey.Click += BtnRemoveHotkey_Click; // - // BtnRemoveIcon + // CmbInitialPowerScheme // - BtnRemoveIcon.Image = (Image)resources.GetObject("BtnRemoveIcon.Image"); - BtnRemoveIcon.Location = new Point(579, 3); - BtnRemoveIcon.Name = "BtnRemoveIcon"; - BtnRemoveIcon.Size = new Size(109, 74); - BtnRemoveIcon.TabIndex = 21; - BtnRemoveIcon.Text = "Remove Icon"; - BtnRemoveIcon.TextImageRelation = TextImageRelation.ImageAboveText; - BtnRemoveIcon.UseVisualStyleBackColor = true; - BtnRemoveIcon.Click += BtnRemoveIcon_Click; + CmbInitialPowerScheme.Anchor = AnchorStyles.Left; + tableLayoutPanel2.SetColumnSpan(CmbInitialPowerScheme, 2); + CmbInitialPowerScheme.DropDownStyle = ComboBoxStyle.DropDownList; + CmbInitialPowerScheme.FormattingEnabled = true; + CmbInitialPowerScheme.Location = new Point(229, 211); + CmbInitialPowerScheme.Margin = new Padding(10); + CmbInitialPowerScheme.Name = "CmbInitialPowerScheme"; + CmbInitialPowerScheme.Size = new Size(269, 23); + CmbInitialPowerScheme.TabIndex = 25; // // tabControl1 // @@ -466,7 +480,7 @@ private void InitializeComponent() tabControl1.Location = new Point(0, 0); tabControl1.Name = "tabControl1"; tabControl1.SelectedIndex = 0; - tabControl1.Size = new Size(705, 237); + tabControl1.Size = new Size(705, 278); tabControl1.TabIndex = 21; // // tabPage1 @@ -475,7 +489,7 @@ private void InitializeComponent() tabPage1.Location = new Point(4, 24); tabPage1.Name = "tabPage1"; tabPage1.Padding = new Padding(3); - tabPage1.Size = new Size(697, 209); + tabPage1.Size = new Size(697, 250); tabPage1.TabIndex = 0; tabPage1.Text = "Power Plans"; tabPage1.UseVisualStyleBackColor = true; @@ -486,7 +500,7 @@ private void InitializeComponent() tabPage2.Location = new Point(4, 24); tabPage2.Name = "tabPage2"; tabPage2.Padding = new Padding(3); - tabPage2.Size = new Size(697, 209); + tabPage2.Size = new Size(697, 250); tabPage2.TabIndex = 1; tabPage2.Text = "Rules"; tabPage2.UseVisualStyleBackColor = true; @@ -497,11 +511,30 @@ private void InitializeComponent() tabPage3.Location = new Point(4, 24); tabPage3.Name = "tabPage3"; tabPage3.Padding = new Padding(3); - tabPage3.Size = new Size(697, 209); + tabPage3.Size = new Size(697, 250); tabPage3.TabIndex = 2; tabPage3.Text = "Other Settings"; tabPage3.UseVisualStyleBackColor = true; // + // tableLayoutPanel5 + // + tableLayoutPanel5.ColumnCount = 2; + tableLayoutPanel5.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel5.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel5.Controls.Add(groupBox4, 0, 0); + tableLayoutPanel5.Controls.Add(groupBox1, 0, 1); + tableLayoutPanel5.Controls.Add(groupBox2, 1, 1); + tableLayoutPanel5.Controls.Add(GrbBatteryManagement, 0, 2); + tableLayoutPanel5.Dock = DockStyle.Fill; + tableLayoutPanel5.Location = new Point(3, 3); + tableLayoutPanel5.Name = "tableLayoutPanel5"; + tableLayoutPanel5.RowCount = 3; + tableLayoutPanel5.RowStyles.Add(new RowStyle()); + tableLayoutPanel5.RowStyles.Add(new RowStyle()); + tableLayoutPanel5.RowStyles.Add(new RowStyle()); + tableLayoutPanel5.Size = new Size(691, 244); + tableLayoutPanel5.TabIndex = 30; + // // groupBox4 // tableLayoutPanel5.SetColumnSpan(groupBox4, 2); @@ -530,8 +563,8 @@ private void InitializeComponent() tableLayoutPanel4.Location = new Point(3, 19); tableLayoutPanel4.Name = "tableLayoutPanel4"; tableLayoutPanel4.RowCount = 2; - tableLayoutPanel4.RowStyles.Add(new RowStyle()); - tableLayoutPanel4.RowStyles.Add(new RowStyle()); + tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); + tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutPanel4.Size = new Size(679, 80); tableLayoutPanel4.TabIndex = 0; // @@ -541,7 +574,7 @@ private void InitializeComponent() RdbCycleAll.Dock = DockStyle.Left; RdbCycleAll.Location = new Point(433, 3); RdbCycleAll.Name = "RdbCycleAll"; - RdbCycleAll.Size = new Size(226, 19); + RdbCycleAll.Size = new Size(226, 34); RdbCycleAll.TabIndex = 26; RdbCycleAll.TabStop = true; RdbCycleAll.Text = "Cycle through all existing Power Plans"; @@ -565,9 +598,9 @@ private void InitializeComponent() // RdbCycleVisible.AutoSize = true; RdbCycleVisible.Dock = DockStyle.Left; - RdbCycleVisible.Location = new Point(433, 28); + RdbCycleVisible.Location = new Point(433, 43); RdbCycleVisible.Name = "RdbCycleVisible"; - RdbCycleVisible.Size = new Size(229, 49); + RdbCycleVisible.Size = new Size(229, 34); RdbCycleVisible.TabIndex = 27; RdbCycleVisible.TabStop = true; RdbCycleVisible.Text = "Cycle only through visible Power Plans"; @@ -599,54 +632,13 @@ private void InitializeComponent() BtnSetCycleHotkey.TextImageRelation = TextImageRelation.ImageAboveText; BtnSetCycleHotkey.UseVisualStyleBackColor = true; // - // ChbActivateInitialPowerScheme - // - ChbActivateInitialPowerScheme.AutoSize = true; - ChbActivateInitialPowerScheme.Dock = DockStyle.Fill; - ChbActivateInitialPowerScheme.Location = new Point(10, 170); - ChbActivateInitialPowerScheme.Margin = new Padding(10); - ChbActivateInitialPowerScheme.Name = "ChbActivateInitialPowerScheme"; - ChbActivateInitialPowerScheme.Size = new Size(199, 23); - ChbActivateInitialPowerScheme.TabIndex = 24; - ChbActivateInitialPowerScheme.Text = "Activate this Power Plan on start:"; - ChbActivateInitialPowerScheme.UseVisualStyleBackColor = true; - // - // CmbInitialPowerScheme - // - CmbInitialPowerScheme.Anchor = AnchorStyles.Left; - tableLayoutPanel2.SetColumnSpan(CmbInitialPowerScheme, 2); - CmbInitialPowerScheme.DropDownStyle = ComboBoxStyle.DropDownList; - CmbInitialPowerScheme.FormattingEnabled = true; - CmbInitialPowerScheme.Location = new Point(229, 170); - CmbInitialPowerScheme.Margin = new Padding(10); - CmbInitialPowerScheme.Name = "CmbInitialPowerScheme"; - CmbInitialPowerScheme.Size = new Size(269, 23); - CmbInitialPowerScheme.TabIndex = 25; - // - // tableLayoutPanel5 - // - tableLayoutPanel5.ColumnCount = 2; - tableLayoutPanel5.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); - tableLayoutPanel5.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); - tableLayoutPanel5.Controls.Add(groupBox4, 0, 0); - tableLayoutPanel5.Controls.Add(groupBox1, 0, 1); - tableLayoutPanel5.Controls.Add(groupBox2, 1, 1); - tableLayoutPanel5.Dock = DockStyle.Fill; - tableLayoutPanel5.Location = new Point(3, 3); - tableLayoutPanel5.Name = "tableLayoutPanel5"; - tableLayoutPanel5.RowCount = 2; - tableLayoutPanel5.RowStyles.Add(new RowStyle()); - tableLayoutPanel5.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); - tableLayoutPanel5.Size = new Size(691, 203); - tableLayoutPanel5.TabIndex = 30; - // // groupBox1 // groupBox1.Controls.Add(tableLayoutPanel6); groupBox1.Dock = DockStyle.Fill; groupBox1.Location = new Point(3, 111); groupBox1.Name = "groupBox1"; - groupBox1.Size = new Size(339, 89); + groupBox1.Size = new Size(339, 62); groupBox1.TabIndex = 30; groupBox1.TabStop = false; groupBox1.Text = "Color Theme"; @@ -663,7 +655,7 @@ private void InitializeComponent() tableLayoutPanel6.RowCount = 1; tableLayoutPanel6.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutPanel6.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); - tableLayoutPanel6.Size = new Size(333, 67); + tableLayoutPanel6.Size = new Size(333, 40); tableLayoutPanel6.TabIndex = 0; // // groupBox2 @@ -672,7 +664,7 @@ private void InitializeComponent() groupBox2.Dock = DockStyle.Fill; groupBox2.Location = new Point(348, 111); groupBox2.Name = "groupBox2"; - groupBox2.Size = new Size(340, 89); + groupBox2.Size = new Size(340, 62); groupBox2.TabIndex = 31; groupBox2.TabStop = false; groupBox2.Text = "Check for Rules to apply every"; @@ -690,24 +682,99 @@ private void InitializeComponent() tableLayoutPanel7.RowCount = 1; tableLayoutPanel7.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutPanel7.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); - tableLayoutPanel7.Size = new Size(334, 67); + tableLayoutPanel7.Size = new Size(334, 40); tableLayoutPanel7.TabIndex = 0; // + // GrbBatteryManagement + // + tableLayoutPanel5.SetColumnSpan(GrbBatteryManagement, 2); + GrbBatteryManagement.Controls.Add(tableLayoutPanel3); + GrbBatteryManagement.Dock = DockStyle.Fill; + GrbBatteryManagement.Location = new Point(3, 179); + GrbBatteryManagement.Name = "GrbBatteryManagement"; + GrbBatteryManagement.Size = new Size(685, 62); + GrbBatteryManagement.TabIndex = 32; + GrbBatteryManagement.TabStop = false; + GrbBatteryManagement.Text = "Battery Management"; + // + // tableLayoutPanel3 + // + tableLayoutPanel3.ColumnCount = 4; + tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F)); + tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F)); + tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F)); + tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F)); + tableLayoutPanel3.Controls.Add(CmbAcPowerScheme, 1, 0); + tableLayoutPanel3.Controls.Add(label1, 0, 0); + tableLayoutPanel3.Controls.Add(label3, 2, 0); + tableLayoutPanel3.Controls.Add(CmbBatteryPowerScheme, 3, 0); + tableLayoutPanel3.Dock = DockStyle.Fill; + tableLayoutPanel3.Location = new Point(3, 19); + tableLayoutPanel3.Name = "tableLayoutPanel3"; + tableLayoutPanel3.RowCount = 1; + tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); + tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F)); + tableLayoutPanel3.Size = new Size(679, 40); + tableLayoutPanel3.TabIndex = 0; + // + // CmbAcPowerScheme + // + CmbAcPowerScheme.Anchor = AnchorStyles.Left; + CmbAcPowerScheme.DropDownStyle = ComboBoxStyle.DropDownList; + CmbAcPowerScheme.FormattingEnabled = true; + CmbAcPowerScheme.Location = new Point(179, 10); + CmbAcPowerScheme.Margin = new Padding(10); + CmbAcPowerScheme.Name = "CmbAcPowerScheme"; + CmbAcPowerScheme.Size = new Size(149, 23); + CmbAcPowerScheme.TabIndex = 26; + // + // label1 + // + label1.Anchor = AnchorStyles.Right; + label1.AutoSize = true; + label1.Location = new Point(10, 5); + label1.Name = "label1"; + label1.Size = new Size(156, 30); + label1.TabIndex = 0; + label1.Text = "Default Power Plan when on AC:"; + label1.TextAlign = ContentAlignment.MiddleRight; + // + // label3 + // + label3.Anchor = AnchorStyles.Right; + label3.AutoSize = true; + label3.Location = new Point(348, 5); + label3.Name = "label3"; + label3.Size = new Size(156, 30); + label3.TabIndex = 0; + label3.Text = "Default Power Plan when on Battery:"; + label3.TextAlign = ContentAlignment.MiddleRight; + // + // CmbBatteryPowerScheme + // + CmbBatteryPowerScheme.Anchor = AnchorStyles.Left; + CmbBatteryPowerScheme.DropDownStyle = ComboBoxStyle.DropDownList; + CmbBatteryPowerScheme.FormattingEnabled = true; + CmbBatteryPowerScheme.Location = new Point(517, 10); + CmbBatteryPowerScheme.Margin = new Padding(10); + CmbBatteryPowerScheme.Name = "CmbBatteryPowerScheme"; + CmbBatteryPowerScheme.Size = new Size(152, 23); + CmbBatteryPowerScheme.TabIndex = 26; + // // SettingsDlg // AcceptButton = BtnOk; AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; CancelButton = BtnCancel; - ClientSize = new Size(705, 278); + ClientSize = new Size(705, 319); Controls.Add(tabControl1); Controls.Add(BtnCancel); Controls.Add(BtnOk); Icon = (Icon)resources.GetObject("$this.Icon"); - MinimumSize = new Size(721, 317); + MinimumSize = new Size(721, 358); Name = "SettingsDlg"; Text = "PowerPlanSwitcher - Settings"; - Load += SettingsDlg_Load; ((System.ComponentModel.ISupportInitialize)DgvPowerSchemes).EndInit(); ((System.ComponentModel.ISupportInitialize)DgvPowerRules).EndInit(); ((System.ComponentModel.ISupportInitialize)NudPowerRuleCheckInterval).EndInit(); @@ -718,15 +785,18 @@ private void InitializeComponent() tabPage1.ResumeLayout(false); tabPage2.ResumeLayout(false); tabPage3.ResumeLayout(false); + tableLayoutPanel5.ResumeLayout(false); groupBox4.ResumeLayout(false); tableLayoutPanel4.ResumeLayout(false); tableLayoutPanel4.PerformLayout(); - tableLayoutPanel5.ResumeLayout(false); groupBox1.ResumeLayout(false); tableLayoutPanel6.ResumeLayout(false); groupBox2.ResumeLayout(false); tableLayoutPanel7.ResumeLayout(false); tableLayoutPanel7.PerformLayout(); + GrbBatteryManagement.ResumeLayout(false); + tableLayoutPanel3.ResumeLayout(false); + tableLayoutPanel3.PerformLayout(); ResumeLayout(false); } @@ -757,12 +827,6 @@ private void InitializeComponent() private DataGridViewImageColumn DgcRuleSchemeIcon; private DataGridViewTextBoxColumn DgcRuleSchemeName; private DataGridViewCheckBoxColumn DgcActive; - private DataGridViewCheckBoxColumn DgcVisible; - private DataGridViewImageColumn DgcIcon; - private DataGridViewTextBoxColumn DgcName; - private DataGridViewCheckBoxColumn AcPowerCheckBox; - private DataGridViewCheckBoxColumn BatteryCheckBox; - private DataGridViewTextBoxColumn DgcHotkey; private TabControl tabControl1; private TabPage tabPage1; private TabPage tabPage2; @@ -781,5 +845,15 @@ private void InitializeComponent() private TableLayoutPanel tableLayoutPanel6; private GroupBox groupBox2; private TableLayoutPanel tableLayoutPanel7; + private GroupBox GrbBatteryManagement; + private TableLayoutPanel tableLayoutPanel3; + private ComboBox CmbAcPowerScheme; + private Label label1; + private Label label3; + private ComboBox CmbBatteryPowerScheme; + private DataGridViewCheckBoxColumn DgcVisible; + private DataGridViewImageColumn DgcIcon; + private DataGridViewTextBoxColumn DgcName; + private DataGridViewTextBoxColumn DgcHotkey; } } diff --git a/PowerPlanSwitcher/SettingsDlg.cs b/PowerPlanSwitcher/SettingsDlg.cs index d8c4c3d..62921a6 100644 --- a/PowerPlanSwitcher/SettingsDlg.cs +++ b/PowerPlanSwitcher/SettingsDlg.cs @@ -13,66 +13,7 @@ public partial class SettingsDlg : Form .Cast<(Guid schemeGuid, string name)>() .ToList(); - public SettingsDlg() - { - InitializeComponent(); - this.DgvPowerSchemes.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvPowerSchemes_CellClick); - } - - private void dgvPowerSchemes_CellClick(object sender, DataGridViewCellEventArgs e) - { - // 确保点击的是复选框列 - if (e.ColumnIndex == this.DgvPowerSchemes.Columns["AcPowerCheckBox"].Index || - e.ColumnIndex == this.DgvPowerSchemes.Columns["BatteryCheckBox"].Index) - { - // 获取被点击的列名 - string columnName = this.DgvPowerSchemes.Columns[e.ColumnIndex].Name; - - // 遍历该列的所有单元格 - foreach (DataGridViewRow row in this.DgvPowerSchemes.Rows) - { - // 忽略未绑定的行或Header行 - if (!row.IsNewRow && e.RowIndex != row.Index) - { - // 检查单元格是否在同一个列,并且是否被选中 - if (row.Cells[columnName] is DataGridViewCheckBoxCell checkBoxCell && - (bool)checkBoxCell.FormattedValue == true) - { - // 取消选中除了被点击的单元格之外的所有单元格 - row.Cells[columnName].Value = false; - } - } - } - - // 确保被点击的单元格被选中 - this.DgvPowerSchemes.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = true; - } - } - - private void SettingsDlg_Load(object sender, EventArgs e) - { - // 检查电池状态并隐藏复选框列 - if (BatteryMonitor.BatteryNull.BatteryChargeStatus == BatteryChargeStatus.NoSystemBattery) - { - // 隐藏 AcPowerCheckBox 列 - this.DgvPowerSchemes.Columns["AcPowerCheckBox"].Visible = false; - // 隐藏 BatteryCheckBox 列 - this.DgvPowerSchemes.Columns["BatteryCheckBox"].Visible = false; - - // foreach (DataGridViewRow row in this.DgvPowerSchemes.Rows) - // { - // // 忽略未绑定的行或Header行 - // if (!row.IsNewRow) - // { - // DataGridViewCheckBoxCell acCheckBox = (DataGridViewCheckBoxCell)row.Cells["AcPowerCheckBox"]; - // acCheckBox.Value = false; // 取消勾选 - - // DataGridViewCheckBoxCell batteryCheckBox = (DataGridViewCheckBoxCell)row.Cells["BatteryCheckBox"]; - // batteryCheckBox.Value = false; // 取消勾选 - // } - // } - } - } + public SettingsDlg() => InitializeComponent(); protected override void OnLoad(EventArgs e) { @@ -125,6 +66,37 @@ protected override void OnLoad(EventArgs e) CmbColorTheme.SelectedIndex = 0; } + GrbBatteryManagement.Visible = BatteryMonitor.HasSystemBattery(); + + CmbAcPowerScheme.Items.AddRange(powerSchemes + .Select(scheme => scheme.name) + .Cast() + .ToArray()); + if (Settings.Default.InitialPowerSchemeGuid == Guid.Empty) + { + CmbAcPowerScheme.SelectedIndex = 0; + } + else + { + CmbAcPowerScheme.SelectedIndex = powerSchemes.FindIndex( + scheme => scheme.guid + == Settings.Default.InitialPowerSchemeGuid); + } + + CmbBatteryPowerScheme.Items.AddRange(powerSchemes + .Select(scheme => scheme.name) + .Cast() + .ToArray()); + if (Settings.Default.InitialPowerSchemeGuid == Guid.Empty) + { + CmbAcPowerScheme.SelectedIndex = 0; + } + else + { + CmbAcPowerScheme.SelectedIndex = powerSchemes.FindIndex( + scheme => scheme.guid + == Settings.Default.InitialPowerSchemeGuid); + } base.OnLoad(e); } @@ -154,15 +126,6 @@ static string getHotkeyText(PowerSchemeSettings.Setting? setting) }, new DataGridViewTextBoxCell { Value = scheme.name, }, - new DataGridViewCheckBoxCell - { - Value = setting is null || setting.AcPowerVisible, - }, - new DataGridViewCheckBoxCell - { - Value = setting is null || setting.BatteryVisible, - }, - new DataGridViewTextBoxCell { Value = getHotkeyText(setting), @@ -251,8 +214,6 @@ private void HandleBtnOkClick(object sender, EventArgs e) PowerSchemeSettings.SetSetting(schemeGuid, new PowerSchemeSettings.Setting { - AcPowerVisible = (bool)row.Cells["AcPowerCheckBox"].Value, - BatteryVisible = (bool)row.Cells["BatteryCheckBox"].Value, Visible = (bool)row.Cells["DgcVisible"].Value, Icon = row.Cells["DgcIcon"].Value as Image, Hotkey = row.Cells["DgcHotkey"].Tag as Hotkey, @@ -286,9 +247,14 @@ Guid GetPowerSchemeGuid(string name) => Settings.Default.ColorTheme = CmbColorTheme.SelectedItem as string; + Settings.Default.AcPowerSchemeGuid = + GetPowerSchemeGuid(GetSelectedString(CmbAcPowerScheme)); + Settings.Default.BatterPowerSchemeGuid = + GetPowerSchemeGuid(GetSelectedString(CmbBatteryPowerScheme)); + Settings.Default.Save(); - BatteryMonitor.BatteryMonitorInitialization(); + BatteryMonitor.Initialize(); DialogResult = DialogResult.OK; } @@ -642,10 +608,5 @@ private void BtnRemoveCycleHotkey_Click(object sender, EventArgs e) LblCycleHotkey.Text = "[ ---------- ]"; LblCycleHotkey.Tag = null; } - - private void textBox1_TextChanged(object sender, EventArgs e) - { - - } } } diff --git a/PowerPlanSwitcher/SettingsDlg.resx b/PowerPlanSwitcher/SettingsDlg.resx index 71a146d..3357f24 100644 --- a/PowerPlanSwitcher/SettingsDlg.resx +++ b/PowerPlanSwitcher/SettingsDlg.resx @@ -126,28 +126,137 @@ True - - True - - - True - - - True - - - True - - - True - - - True - - - True - + + + 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 + oSb6Yhu6TwAAAABJRU5ErkJggg== + + + + + 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 + AAAASUVORK5CYII= + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m @@ -197,119 +306,6 @@ True - - True - - - True - - - True - - - True - - - True - - - True - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAU+SURBVFhHrVdrbFRFGB3jg3c1RFCjRBOjMST+ENCI - IpAQrJgQIyZIEJREf4AKldgA0kJBLQhKAFMJQWKIMf4gpZR2twVZqLaFFmhVBCktLVug3dLd0hd9UuF4 - zr27W5bK9i71JCczO/PNd87MnTs71wAwxD0Pr3W74lbnYEiSm3TFzOGr3Bi5KjtTuZTQMYIGRkh8oPCc - C2DY8owM5rtbSR2B41SM0syFfWV1yCKzz17ul4rLJAWzON0qc876MWRZRjpzOjOhscRoLaPgKq9Dbvll - 5FbU90/GKV4wCRmoaLhq1V1l9Riy0uVj3nuVPCo0lggbOHCuHger/PA4oOIUL5hPMuBv68bvvmbrt20i - u5a5o5vQWCJswFPpx+HzAeQ5oOIUL8hAz/Xr8DZ1oDRoIpePY1hSPyY0lhg9OGggzxvAb9UNyHdAxcmI - YBL2WKVMaCUqGtqs39qYI1Ny/NT4bxOMURE2UMCkhReu4IgDKi7f22CNW7D7D2sfaCUsqh7cmHpFqfGA - hPqA/SrCBo5evIKiS40odkjFX2hqt8beDnq80pBQH7BfRdjAMSY9XtOEEw6pWI0pvmgbUj38mxSUWxoS - 6gP2qwgbKKlttjaRdnMs1JibWVLbZFGIycCfl1ssnhwgQ3mEmAycqm+1eHqADOURYjJQFriKM6TKgTCU - QxjMY14aEuoD9qsIG9D7W06qjJXnGjpQeaWT7LLZ2GXlHJTkcWBgpW2gqrEtZp5vbIe3uQuXWq/Dx/PH - 30F2AgFSGJTMM8KpgWq+07HwAo/empYe+HkU5JX/iiU/TcSEVQYvrLb58lqDcanjMX6+mUSduyQWgVsN - 1LR04JJD1rR0oq7tHzR3A+tcCxC/0SAtbxYKvJtR4tth8Uj1FuwsnIu30wYjfp35nlqRf9O3Gqhr7YTP - IevbetBC8aT0mZj1reHxvBW7T7+D1Z6hWJhpLKZ4hiH99Dwcq9mO93Y8iPhUs5N6vSZuNRBo7+afSReX - NDoD7desmRdVFVgzz69ej40FjyEx12BxttLaUF1tXxeO4bG9iSsxHFM+NZOpaT8OxqgIG2jp6kEzqTIa - W7tv4NoNIPHnSdiePxtpxc9gxS8GKw4YLHH1GlBdber7rngsdhW9j1dTTSE175Nwr4Hga7jn71rsPePr - l/vKeBmp6sGLKQY5FYuw4iBnSqGlnO3CrF4DqqtNfYo5ULkE8RuMRO+XcNhA6EKSWebjfa+OVy1dt27P - nApeSLzAJO7yXX89j2VM3h+WM+bHUxPxmm1glIT7GNCl1MULp5si0Zhb0YDD1cBkGkgreQgrD/VvQDHb - Sh/FDNuAfS6wXUXkCgRNRKO7PIBD3hvWCnxZYPA5mXzYYLnHIGF/rxnV1aa+Lxiz/ojB69y00pTwTQbs - a7meb6b1jOuiMutsPfZXduGDH15Bwl6DDcUG65hcIp9RLATV1aa+jYxJ5FsxfY0ppWbkI7jTD5Pmq6cw - c5PBN8fI4wZfFRmsoWAIqqtNfZsY8ybPi7EzzXxqRm7CR9a6W61Ps2Snn2ZuDE3ej7iUoxi//g3M2Waw - +QRZyplSKPWoTdXVpr7ZjJm6zOyj3hNkxGuoC+O4uGnvLh4xZc7HMXHy3I+GvjTvw6lLTdZbW7n8OQZb - KJh20qbqapvFvimJxkWdZ8k4MuIg0pV5JDmGfPwO+CT53NPTzaJpyebkDG4y7XSLrKvtKfYxRuLS6XMU - C3KkDpmJhfoa1nLqmWppJ5BTyWlBqq429Wnm//ln9H9AEwgZ0Q7Xayaqrjb12csehjH/AkyfZ4w8wQiB - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAU4SURBVFhHrVdrTFtlGG6cW2RjYzLFzfhHM6fZP/fH - xEQTNTPxj9kPLzHZHCGauMnGHDoWYGMkzsVpopGE2+bcEi+RQYG1hV1AXDfHRTZn2Ci0K3dKKYWWAh2V - wuP7nJYCLSunbk/y5Dvt937v85zvcs57NAA0gofX5xr0aw5XIS7LINTHzPhDBiQe0lUwFxOqRtDAaorf - L2osQ1iVodVKvmVMqgoyjs3jvHOi0jSAc0Jdm31JMq5CSGj2lCptVZsDcQe0pZJTnQmOFSRxGgl9+wCq - 2+2oNg8uTYljPKFJ08LsHFOu9aZBxGXqbZJ3OZNHBccKQgYuWAZxyepAjQoyjvGEZp8WjnEfbtjcyu+A - CV2/5I5ugmMFIQM1dxz4vWMIdSrIOMYTNDA1PY1OlxfXgyaqZTlWZS1hgmMFSY8EDdR1DuFylxNGFWQc - jRCatDKlpQnOhNk5rvzmxlybU+UQjcVNSAybkIErkvRq9zD+VEHGGTudyrjkkr+VfcCZUMjr4MZcLkdU - NNZSKALSzyZk4FrPMOp7R9Cgkozvdk0oY+8FjeSmBoUiwH5ByECjJG3qc+EvlWQsxzT0BAzxevZ3vZDQ - ZOpg/aoWLccuUGwFBUNgvyBkoLnfrWwi7uZYyDHhbB7wKDnbcy7CVtkP069mNGedXWhC+tmEDNy0jyr8 - 53446EHL0DhuuXwoPvkDvivKh+WMBTeKbsL4bQOa9v04ZyLcQAsHC2/9XzrGcds5CZPcfPGJ02i51Yo+ - uw25x79E4zdNuPjFZTR8UkjRRykcYcA0NIZWIduY6ZyAyTUFk+zJxr3r8FNJFXr67fjDeAWFJ09g/5Es - XN9dTMEXhYsb4PltF7KNicNemN1+mL3A1T3rAcsBYLIVeafOoqDoNNI+TUfqwc8p9rLwKWHYEmQGDFhH - xmOnPP2sHj+sk/IcUcQPAl6rPNV2yjrEIf3QcaRnZEaKE+EGuuRMx0T3XXSPTaPbJ+Kps+IdQG0KULAO - OLEG2tTNi4sT4Qb6Rr3oVUvPJPomZtDnD4qbw8QLEnDmo81YdrSZIs8IF4oT4QYGPHdhU8MxHwZkve3T - gFERz1gonp+AvA82KTnjcmopssSTMGhgaMInL5NJOCai0PsvHDLlfA0ZU58IE39MEf9+x7MIvBPFQHaV - egOjk1NwC9kuSp8f7imAD9nIOxdxmfb8nZvAt4NsDQU8YdSgUASkn03oGJbd7kd5q21xmuzQtg+jpMMX - OGoL1pzia1GY/BzO9QEVlhGUtQaqJVUGZguSCpNN6r0BKbVYbs3nIHSStLxrCvVpG8J2+5y4rh8wWN3Q - Sfxsvcjc1KBQBKSfTcgAi1K9FJwGEV1AKSzOdXrRlCZrbuG0yzm/h7jB7FByMBcRkwFlBoImQuTd33Gh - pPwUrOc/k7JHtl/NDtlsiSKegILgtOslhrGcMeZgLkKlgUBZzrWuENJ9iO0OVHRMoO7kLmDGBX/Hb/Ab - 3hYD8cqGK++dQaUsT2XwrknmYC6CualBoQhIP5ukpT5MRtuqMVz3MdD7sxQN2WjLexW/fLgx2BsdzE0N - CkVA+tkkbcg1eJRPs+z5n2YGrMiuhibnMnYlv4nc9O3w1OxG4d4teGX/Eaw8eg0rcy4p53xuzDxKLuZk - bmpQKAJBAywYXxC+Jnw9jG+8n/Ju6bZt7yH1nZd8e7cmHpP/tobFRCNzMnfUopQlMwPoMpxPH07d7kh5 - a8vXcs0XyvPCJ4N9asncUcvyaFgt3CjcJGSyOOFDwgcDFQboPF74YIUVaDT/AT5VN1BBN0azAAAAAElF - TkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAL2SURBVFhHvZc7TFRREIZPotgZtZDajkJjQmNjjOEN - Gi1stLKys7Cj8pmoICEWNp6zUEChJoYYCkUIKvIKavCBD4JuiEaTXRYl9sZk/P97L97hMliZO8mX4f/P - 2Zl/NzfAOhH5JxvU5uZON9jc5YSdOrbXlzVTY5oaozY1XHH3zt1y8vvXgrBT04+P15Y1U2OamkzFy287 - WVq5LwMTu6JOvVEIa6bGNDWquHzg/B0ni6WbEobcX6jpWyGsmRrT1CRV1dLlShfvOplbbJfCsJPCiJMe - wE5Nn+dNV9eGsGZqTFODqjrc7VY6Bp3MFo9L3xMsHo3pfZT+TJ/nvNfW4YbwuujBtGZqTFOD2n7kupND - 3Xji8dQfuOzk83KfBCwtIAA7NX2e8x7v43Vb/1sAUAvqQWt9h5Mv33vFc/ljF3Vq+jwHdWAv2AbMmRrT - 1KC2gB2gGtREAX70iMdHHsYQAJ06CVCT3ON9vs6cqTFNTaaq4wBBPJaHpwiATp0E4PI1Zc3UmKYmU9UN - WLS4fEM8lodxBECnps/z+Fpa1kyNaWoyFQUoLneLn0CASQRAp841wEKlUzyWhykEQKfONcB85ZJ4LA/T - CIBOnVuARix6VzkrYQa/BwA7NX2ex9fSsmZqTFOTqSjAXKVd/DMsB+zUuQZ4vXRG/HMEAOzUuQaYLZ8W - P4sAgJ061wAvyqfEv0QAwE6da4CZ8knxrxAAsFPnGmC6dEL8GwQA7NS5BWjCosnSMQlzCJBATZ/n8bW0 - rJka09RkKgowXj4q4S2WJ1DnGmCs3CrhPZYnUOcaYLRcJ+EDlidQ5xagGYtGyvvFz+MBTKCmz/P4WlrW - TI1pajIVBXi4tE/CRyxfwCeATp1rgAeVWikU8cfoE0Cnzi1A2zUnwz/3SP83J/1fATo1fZ7H19KyZmpM - U5OpnY0X3BSXteAdr0JNn+fxtbSsmRrT1GSK/+vvBgdBg4KafvRdQJc1U2Oamkzx2w6X8J3y416Fmv66 - r+nWzBRxfwBgAA0MVqNlPwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALSSURBVFhHvVdNaxNRFH2guBNB1F8hii5c+UFNjVRB - V65cuXLlqqJ0VS1ItQXB3bxEEEFwXWilVmONtAXrR2mLjRK1ZFIT/RXXc2Ymzu1466q+A4fLOe/OvSfJ - QGaciPyTBew8N+Ymy2NO+u+Bd9NKTZ/naVsOa6amaWoWsJvLGuvXZaU5CKaVmj7P07Yc1kxN09QsYH8J - n7rVrUo06cSDrNT0eZ625bBmapqmZgEHTo9i4c+q+CknlWcIgUpNn+dpWw5rpqZpahaQBviFANMI8BwB - UKmDBvjejcRjeWUGAVCpgwUoYdG37gOJuPwF7gFUavo8T9tyWDM1TVOzgCRAszMu0UsEqCEAKnXQAI3O - HYmw3L9CAFTqoAHWfgxLhOV+FgFQqYMF6Mei1Y0h8XXchCArNX2ep205rJmapqlZQBJgeWNQ/BsEAFmp - gwZYal8TP4cAICt10ADv21fFzyMAyEodNMBi+4r4BQQAWamDBliIL0v0FstBVupgAc5g0Vx8SfwiAmSk - ps/ztC2HNVPTNDULSALU44vi32F5RuqgAWbjAfEfsDwjddAAtbgk/iOWZ6QOFqCMRTPxCaksYTnISk2f - 52lbDmumpmlqFpAEmI6PSWUZAUBW6mAB+FVPtY5IZQXLM1L/z59g14X7Ts6POzmLB8++EScTrYNSWcXy - jNT0ec4+9vO67QqwpzziaqP403nacvK46eRhA4s/5aSmz3P2sZ/XbVcAPusfPnXT1W/hv//RVyfVz/j9 - 13JS0+c5+9ifXWfO1DRNTYBvO3zeP3ryhqsP90J8wXJ8clZq+jxnX9afvCVZMzVNUzPDDnAfmIZ4jaXr - +OqxmJVaLWcf+xNYMzVNU1NhU4jb+K2fdJywbrWcsGZqmqZmAX9C9A25+QG8mLJSZ/6m5YQ1U9M0NQ30 - QhwCj2fVXE5YMzVNU3ML8AbjXb43q3+9lvdgzcwp7jfg7Qa0550EfQAAAABJRU5ErkJggg== - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m @@ -339,134 +335,99 @@ TkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAARVSURBVFhHxZddTJtVGMcHkSVLNJkzLvFSb00088qY - GKNeqIl6pYsXTi/UZJkXssULNdvVELaxWQa0hbZ0/S5tB5TyOQoDyscYyHCbmzgnYukHnwNK22G8+Ps8 - 523ffsCAqe1O8st5zjnPeZ7/+5zTl5ddAB4pm07mk3/bdhefKOPdu6VhflvBR58deSsh4ElpKr+t6PPi - b1UJAfulqfy0gsNfn3iFUHDy9w4eOkpz+6Sl3LRCSvYBJ8vm3Q8/PkbrzxF7hGcOWuEXR787yMk+PXJM - //rb739Ccy8SLxEHCE7+OFFI5KTt+ep4KQ4dLtaS/QLxLPEMwWfOZecnz1lybvu+/OYkDrz86jtkP0UU - EQW8kItWdEqlX/m+SoeSSq2gtFpH1Im+pEqaK6nU4OT5/w7H4VylVdpWyv0YC9jLE3+v38d6LIb1eAx/ - xeMy6/8rFJ9ycC7OSbmfYAH7+QmjkVUYGtpgbmonOh4aizuTzXw4tpFycC7OSbmflgWs3FsWG23uTtg9 - l1Df0iX6ndqOFi+crSkctGZrzvTjsZXiry4vJwWIF5kQsLiwAEtzJ2bDIczPzuKUWi/6ndgLxJlaA5xt - 3XC0eeHq6IGDRMyFwxv2lJF9b2lR3K2UABrM0aLd04V4NCrO6kyNSb4DO7Vn/H8i4PfjnMYMV3sP7ifu - VDmtSXcgjvJaExbm5+kOpAngQSAQxEVSfk5rFijqLIIfdNvYOgvOkn95rRGBmQBCFIfnm7r6cFZjErEq - 9DbhL2xaC4XCyUuYEjA9PYPGS72C+bBUVoXWKvqFubktbAuWl5YwT/YslXyRnq5CZxUCOA6XXUFj4Z+w - /f5AtgAdfp/6A25vH23slY+hQm+VS/cgW0F2NBLBCl0shu3KC3Y0d/dTnJg4Bq6A5B/D+Qs2TE1P03sg - TQAPJu/chafbB4/XR2WyocpgR7WhXgTjfju7kgLzPrZVJifaLg8lxjYojY6Ej13Yd+5OiZdcSgANbt3+ - FS09PoSDIXF7q4318s19WFttdqK9b0j+RSlNqTWV2YFfJn/bKOD6jdtovTyI2NqaKB0r5fIxSgq+vZ3y - rzG50NE/THE4VjTDT01rN3+e3Chg/Keb6PSNQGV0osbsgsbWIHo1lVNNPZeVybZ5Xfa3uAQ6WyO8g1c3 - 9eO1iRu3xN+aDAFXf5xA18CIfAQaa4O41UH6WQUDgS0ICj/2T754tJSkmwSEg+l7JT+dvQlj166jLF0A - D4ZGxuEdHk0cQRQae6PoI6sRYnULIrJ/ssw6RxN6KFaUYmX71TncGBmdQJkyXQANBoZG0T86Dr3TDYOr - GcaLHtHzWE+bHkiWf9L2jV7L3JvwMzW0YPDKWKYA+h6AjxT30hEwfVS+FDzejnR/CSnO5n4Dw2M4TTnT - BNSt8USZMj9wruOnKwYpt/hzvJfgD803iDfzxGvE84T4IOHvPRbB5cgX/OScXHySPdq22X+s+QO7/gHE - oSb6Yhu6TwAAAABJRU5ErkJggg== + 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 + r+nWzBRxfwBgAA0MVqNlPwAAAABJRU5ErkJggg== - + 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 - AAAASUVORK5CYII= + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAU4SURBVFhHrVdrTFtlGG6cW2RjYzLFzfhHM6fZP/fH + xEQTNTPxj9kPLzHZHCGauMnGHDoWYGMkzsVpopGE2+bcEi+RQYG1hV1AXDfHRTZn2Ci0K3dKKYWWAh2V + wuP7nJYCLSunbk/y5Dvt937v85zvcs57NAA0gofX5xr0aw5XIS7LINTHzPhDBiQe0lUwFxOqRtDAaorf + L2osQ1iVodVKvmVMqgoyjs3jvHOi0jSAc0Jdm31JMq5CSGj2lCptVZsDcQe0pZJTnQmOFSRxGgl9+wCq + 2+2oNg8uTYljPKFJ08LsHFOu9aZBxGXqbZJ3OZNHBccKQgYuWAZxyepAjQoyjvGEZp8WjnEfbtjcyu+A + CV2/5I5ugmMFIQM1dxz4vWMIdSrIOMYTNDA1PY1OlxfXgyaqZTlWZS1hgmMFSY8EDdR1DuFylxNGFWQc + jRCatDKlpQnOhNk5rvzmxlybU+UQjcVNSAybkIErkvRq9zD+VEHGGTudyrjkkr+VfcCZUMjr4MZcLkdU + NNZSKALSzyZk4FrPMOp7R9Cgkozvdk0oY+8FjeSmBoUiwH5ByECjJG3qc+EvlWQsxzT0BAzxevZ3vZDQ + ZOpg/aoWLccuUGwFBUNgvyBkoLnfrWwi7uZYyDHhbB7wKDnbcy7CVtkP069mNGedXWhC+tmEDNy0jyr8 + 53446EHL0DhuuXwoPvkDvivKh+WMBTeKbsL4bQOa9v04ZyLcQAsHC2/9XzrGcds5CZPcfPGJ02i51Yo+ + uw25x79E4zdNuPjFZTR8UkjRRykcYcA0NIZWIduY6ZyAyTUFk+zJxr3r8FNJFXr67fjDeAWFJ09g/5Es + XN9dTMEXhYsb4PltF7KNicNemN1+mL3A1T3rAcsBYLIVeafOoqDoNNI+TUfqwc8p9rLwKWHYEmQGDFhH + xmOnPP2sHj+sk/IcUcQPAl6rPNV2yjrEIf3QcaRnZEaKE+EGuuRMx0T3XXSPTaPbJ+Kps+IdQG0KULAO + OLEG2tTNi4sT4Qb6Rr3oVUvPJPomZtDnD4qbw8QLEnDmo81YdrSZIs8IF4oT4QYGPHdhU8MxHwZkve3T + gFERz1gonp+AvA82KTnjcmopssSTMGhgaMInL5NJOCai0PsvHDLlfA0ZU58IE39MEf9+x7MIvBPFQHaV + egOjk1NwC9kuSp8f7imAD9nIOxdxmfb8nZvAt4NsDQU8YdSgUASkn03oGJbd7kd5q21xmuzQtg+jpMMX + OGoL1pzia1GY/BzO9QEVlhGUtQaqJVUGZguSCpNN6r0BKbVYbs3nIHSStLxrCvVpG8J2+5y4rh8wWN3Q + Sfxsvcjc1KBQBKSfTcgAi1K9FJwGEV1AKSzOdXrRlCZrbuG0yzm/h7jB7FByMBcRkwFlBoImQuTd33Gh + pPwUrOc/k7JHtl/NDtlsiSKegILgtOslhrGcMeZgLkKlgUBZzrWuENJ9iO0OVHRMoO7kLmDGBX/Hb/Ab + 3hYD8cqGK++dQaUsT2XwrknmYC6CualBoQhIP5ukpT5MRtuqMVz3MdD7sxQN2WjLexW/fLgx2BsdzE0N + CkVA+tkkbcg1eJRPs+z5n2YGrMiuhibnMnYlv4nc9O3w1OxG4d4teGX/Eaw8eg0rcy4p53xuzDxKLuZk + bmpQKAJBAywYXxC+Jnw9jG+8n/Ju6bZt7yH1nZd8e7cmHpP/tobFRCNzMnfUopQlMwPoMpxPH07d7kh5 + a8vXcs0XyvPCJ4N9asncUcvyaFgt3CjcJGSyOOFDwgcDFQboPF74YIUVaDT/AT5VN1BBN0azAAAAAElF + TkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAg6SURBVFhHtVdpUJbXGSVjYp22WqcjjjVWqSCLgAiy - LyKooCyigCKgAkUURGQRQQSCKCJqXCpN0laJGtc4aY0NzhisNU0ztbU1M3aa5kd+dNpULYFve7cPjXp6 - nvejGJ1EqpM8Mwcu99655zzbvS9utOez2ru7M9ouIG3bO98Y5HzhET4h/aKNXsRFHYD1HmC5Tzx4DDL3 - rOCZcq6cLzzC56J9aO6pVCjWcwt4105w90WNUAmFcBCcv2gjrIOwDKJ/EH1fgs+I2zzvU/N4CI/wuWgf - 2viUVpeASySxurm58B032MaPgt1zLJSgH0CNmgItwQdaSiD0xaHQc2Jg5M2BUZAMZ3EanCVL4FybA+e6 - FXCWF8JZsYYow93Stbj0H/N4CI/wuWgf2pCAywNAH8k/Gzca/dMmoD/YA9ZYP1iTZsKeEQ778jg4CuZC - KVkIpTwDamU21JpcqJtWQa0vhtZQBm1LBbTGGmhNddCaG+CsqcJvGCmxYQX87g7QLwI83NEX5IH+GF9Y - k2fCuiQC9rw42H88D46yFDgqF0OpXQplcz6UxkKoL5VA3boOausGqNtqoG6vh9bWRDTDqNuI95gysWEF - fHCXAka6od+X3kd4wTI3ANaMWbDlRpM8AY51C6BUL4JSnwWliZ63FJCQnu8ohdpOz3fS8w56vquRaOG4 - Bc6GWvyetSP2RAEsdvyR1do/xg2WoEnon03vU2fCtozeF82m5/PhqE6D0pBJ4hx6uZKEJN+1Ftqe9dD2 - VhOboO1rIF6Cvq8V+p5WGE21uMoilvOfKIAdg2vShu4j0B82BZb5AbBl0vtVMXCUJpKceW9YzFAvpbf5 - JC0i0RpoB8qhH6yC3llLbCaaCZL/dIcpwmjZhD+xk+T8YQV8yB/WSSNhifWENS2Ioaf3JfS+Mon5Toey - NYte59LTAmgHS6C/Ugb9tQ3Qf7YR+s/riUaOt/J3G/RXd8DYvw3O7XW4znamb08W8Dk33GCcrFO/DUui - N2xZ9L4gGo7yRCh19L6F3u/MgbZ/JYmLSVIK/XAF9K4aGK/XwTjaBONIC0HiIx0wDhGMgrO9HjcMmOcP - K+AjwuozGtYF/vSebUfvlZr5LLh0hj2bIc+jZ4XQD62BfqwCxolqGKc2wzhN4jNtxG443zxAdMJ58iCM - rr0Y2NuCj9hdwwqQEH1M2GaMhS19BnMfBXt5AkO/kJW+GNrL9P4Vet9VQuL1MM7WwvhVI5wnqqB15rEo - 2SGbomFbyfSlT2AHucMSPgZWzxH4mJEdNgWy4RPCGurO4guGvTiWhTcPSnMa1A7mvjOf5MX0mJ6fXs9c - Myq7QpkaPyhb/ODY6EvBPmzXabAtnwrrIhZyAoV4P2eeO6wAKcJ/ELbICbDlhMJeGk+PkulZBosuF/ov - iqC/voo1EAd1dyDUvcEu7A6G0hbENM2Ao8Yf9jJfRm8arNkUkfQirP7Pm+fK+Qu3dT85Av8SAbGTYMuP - gGM9i68xld4z9wdXQN0zD2pbANR9IUxFKLTXwqG9Ggb1J6EUEQKllSI2B0DZ4AtltReU5R5QUibCMXMU - bg4KSOq4/OUCFg5G4N+Efc5k2AuiGH62nlR+ewaFkGArvX5ZyMOgdUVAPxrJiESaQtQDFLEzGHpzIG4X - ++H6XB9cCvMj+Dt4Ki77uuPvG0tRtOXYVwuQm0oeLfvcH5n5VzalMKy89zcwxw30fAfDTSLtMMlPREE/ - Ew39JEEROkU5mY6/ZU/H+4kR+Gc7r+LzpzFw6W0M9JyDdu44bm6vxZ8Tg3BhlmcXOUe4qF1mChDjEw5b - shcca+OZz/lsQx84qiiA+VU7glmIYabnxlk+xefjYPwyFsbxKDgPheGv2QH4Q0o89O6zcOxrRm/ObNxM - nGZCxo59vCcuvIlrGfHoifQ7TN4hEUMC5M2wpbCS18TzHvCiAG+zsJTmIFa8K/z6sSiT2HmR3wIU4TwV - jd62ELwfz0i8fQqW4nT0LghEb2owetNnuSBjzllXp8P49SlcXRCFoyHTZpP7uUcE8M2APY3vf+pkPkJT - mApGo5JF1ejPHAcxAiHQj4TDeIsiLsTAeS4GA2fCcT1zOj7dsx32qjz0pYegb3EY+paEExGD4FjmuGav - zsOt/W14N9L3A3KPfEQAv8L4Eo6CJeIF3obfhW3pWDiK3KFUToDa9CKfVw8+Mp4U4Q3jpA8vIR/cOeqH - Hv+pvH4PwrJoFvpTgtCXHED4P4YAc032ON/oxHvR06Ugv2cKWLDVJYAfRObH49OAtyx6/CZigB8jdh4+ - nMmegbYqXHEJML8PhwTIfT3AdhAhQ5C/vwJCLu3b4zMezuoVULJi+NeTTfYM1BbgSkzAUEsOpUBMDnwa - iF3yHge9MAV6UQrUXL4fS+OgZLOVvwjOyZrsMVZn4Eps4EMB6dsvDB71bPZJfRluZ8fj83VLMVCaya9j - fiGveQyck7W75ctwKz8Z5yOnXye3KwWZ7d1KGkVIJCQd/zdau5Hc3oOS+i58GO2N+xtyca8yH3f5+07F - o5A5WRNcTQxB+dSJK8ltFuFYIiQgaVWFb0LO+qeFT8Lyco/4ZWXHwqdf+cu8EDyoKcSD2iLc31iIezUF - JmQsc7J2LSkMx0N9zpPTgzDb8AXi+8QPiSnPCC8i7I1gz3euUkTf6iXA5hKgqcwFjmXu6rxZvIC85f/D - QGIMYV5EYjKQq1HEPC3kn81vEeOIwFWTx5e9FeF740qMP347CBnLnKzJHkIcfuQ9+DpMDhSvJLShxBxi - 7iBkLHOyJnu+dvL/mURS8irFJRUubSaQsczJ2lDY3dzc3P4LEioJH5blvm8AAAAASUVORK5CYII= + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAU+SURBVFhHrVdrbFRFGB3jg3c1RFCjRBOjMST+ENCI + IpAQrJgQIyZIEJREf4AKldgA0kJBLQhKAFMJQWKIMf4gpZR2twVZqLaFFmhVBCktLVug3dLd0hd9UuF4 + zr27W5bK9i71JCczO/PNd87MnTs71wAwxD0Pr3W74lbnYEiSm3TFzOGr3Bi5KjtTuZTQMYIGRkh8oPCc + C2DY8owM5rtbSR2B41SM0syFfWV1yCKzz17ul4rLJAWzON0qc876MWRZRjpzOjOhscRoLaPgKq9Dbvll + 5FbU90/GKV4wCRmoaLhq1V1l9Riy0uVj3nuVPCo0lggbOHCuHger/PA4oOIUL5hPMuBv68bvvmbrt20i + u5a5o5vQWCJswFPpx+HzAeQ5oOIUL8hAz/Xr8DZ1oDRoIpePY1hSPyY0lhg9OGggzxvAb9UNyHdAxcmI + YBL2WKVMaCUqGtqs39qYI1Ny/NT4bxOMURE2UMCkhReu4IgDKi7f22CNW7D7D2sfaCUsqh7cmHpFqfGA + hPqA/SrCBo5evIKiS40odkjFX2hqt8beDnq80pBQH7BfRdjAMSY9XtOEEw6pWI0pvmgbUj38mxSUWxoS + 6gP2qwgbKKlttjaRdnMs1JibWVLbZFGIycCfl1ssnhwgQ3mEmAycqm+1eHqADOURYjJQFriKM6TKgTCU + QxjMY14aEuoD9qsIG9D7W06qjJXnGjpQeaWT7LLZ2GXlHJTkcWBgpW2gqrEtZp5vbIe3uQuXWq/Dx/PH + 30F2AgFSGJTMM8KpgWq+07HwAo/empYe+HkU5JX/iiU/TcSEVQYvrLb58lqDcanjMX6+mUSduyQWgVsN + 1LR04JJD1rR0oq7tHzR3A+tcCxC/0SAtbxYKvJtR4tth8Uj1FuwsnIu30wYjfp35nlqRf9O3Gqhr7YTP + IevbetBC8aT0mZj1reHxvBW7T7+D1Z6hWJhpLKZ4hiH99Dwcq9mO93Y8iPhUs5N6vSZuNRBo7+afSReX + NDoD7desmRdVFVgzz69ej40FjyEx12BxttLaUF1tXxeO4bG9iSsxHFM+NZOpaT8OxqgIG2jp6kEzqTIa + W7tv4NoNIPHnSdiePxtpxc9gxS8GKw4YLHH1GlBdber7rngsdhW9j1dTTSE175Nwr4Hga7jn71rsPePr + l/vKeBmp6sGLKQY5FYuw4iBnSqGlnO3CrF4DqqtNfYo5ULkE8RuMRO+XcNhA6EKSWebjfa+OVy1dt27P + nApeSLzAJO7yXX89j2VM3h+WM+bHUxPxmm1glIT7GNCl1MULp5si0Zhb0YDD1cBkGkgreQgrD/VvQDHb + Sh/FDNuAfS6wXUXkCgRNRKO7PIBD3hvWCnxZYPA5mXzYYLnHIGF/rxnV1aa+Lxiz/ojB69y00pTwTQbs + a7meb6b1jOuiMutsPfZXduGDH15Bwl6DDcUG65hcIp9RLATV1aa+jYxJ5FsxfY0ppWbkI7jTD5Pmq6cw + c5PBN8fI4wZfFRmsoWAIqqtNfZsY8ybPi7EzzXxqRm7CR9a6W61Ps2Snn2ZuDE3ej7iUoxi//g3M2Waw + +QRZyplSKPWoTdXVpr7ZjJm6zOyj3hNkxGuoC+O4uGnvLh4xZc7HMXHy3I+GvjTvw6lLTdZbW7n8OQZb + KJh20qbqapvFvimJxkWdZ8k4MuIg0pV5JDmGfPwO+CT53NPTzaJpyebkDG4y7XSLrKvtKfYxRuLS6XMU + C3KkDpmJhfoa1nLqmWppJ5BTyWlBqq429Wnm//ln9H9AEwgZ0Q7Xayaqrjb12csehjH/AkyfZ4w8wQiB + AAAAAElFTkSuQmCC