Mercurial > servermonitor
diff ServerMonitor/Controls/CheckControl.cs @ 0:3e1a2131f897
Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
author | Brad Greco <brad@bgreco.net> |
---|---|
date | Mon, 31 Dec 2018 18:32:14 -0500 |
parents | |
children | 453ecc1ed9ea |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ServerMonitor/Controls/CheckControl.cs Mon Dec 31 18:32:14 2018 -0500 @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace ServerMonitorApp +{ + /// <summary>Base class for check controls</summary> + /// <remarks>This control should never be used directly, but marking it abstract causes problems with the designer.</remarks> + public partial class CheckControl : UserControl + { + public Type CheckType { get { return GetCheckType(GetType()); } } + + public CheckControl() + { + InitializeComponent(); + } + + private void CheckControl_Load(object sender, EventArgs e) + { + CheckGroupBox.Text = Helpers.GetDisplayName(CheckType); + + IEnumerable<Panel> panels = CheckGroupBox.Controls.OfType<Panel>(); + foreach (Panel panel in panels) + { + CheckBox mainCheckBox = panel.Controls.OfType<CheckBox>().OrderBy(c => c.Left).First(); + mainCheckBox.CheckedChanged += CheckControl_CheckedChanged; + DisablePanelByCheckBox(mainCheckBox); + } + } + + private void CheckControl_CheckedChanged(object sender, EventArgs e) + { + DisablePanelByCheckBox((CheckBox)sender); + } + + private void DisablePanelByCheckBox(CheckBox checkBox) + { + foreach (Control control in checkBox.Parent.Controls) + { + if (control != checkBox) + control.Enabled = checkBox.Checked; + } + } + + public virtual void LoadCheck(Check check) { } + + public virtual void UpdateCheck(Check check) { } + + public static CheckControl Create(Type CheckType) + { + Type checkControlType = typeof(CheckControl).Assembly.GetTypes().FirstOrDefault(t => GetCheckType(t) == CheckType); + return checkControlType == null ? null : (CheckControl)Activator.CreateInstance(checkControlType); + } + + private static Type GetCheckType(Type type) + { + return type.GetAttribute<CheckTypeAttribute>()?.CheckType; + } + } +}