public ZoneSelectionPanelCreator(IReadOnlyArea area, Panel targetPanel) { if (area == null) { throw new ArgumentNullException(nameof(area)); } _targetPanel = targetPanel ?? throw new ArgumentNullException(nameof(targetPanel)); EventHandler currentClickHandler = null; _buttonsAndFactories = area.GetSupportedZoneConsumptionFactories().Reverse() .Select(factory => { var sample = factory(); var button = new Button { Text = string.Format("{0} ({1})", sample.Name, sample.KeyChar.ToString().ToUpperInvariant()), Dock = DockStyle.Top, BackColor = SystemColors.Control, Parent = _targetPanel }; if (_handleKeyCharActions.ContainsKey(sample.KeyChar)) { throw new InvalidOperationException(string.Format("Could not use key char '{0}' as unique identifier for '{1}'.", sample.KeyChar, sample.Name)); } _handleKeyCharActions.Add(sample.KeyChar, () => button.PerformClick()); currentClickHandler = (sender, e) => { foreach (var btn in _buttonsAndFactories.Keys.Where(btn => btn != button)) { btn.Enabled = true; } button.Enabled = false; _currentFactory = factory; CurrentZoneConsumptionSample = _currentFactory(); }; button.Click += currentClickHandler; return(new KeyValuePair <Button, Func <IAreaConsumption> >(button, factory)); }) .ToDictionary(x => x.Key, x => x.Value); currentClickHandler(this, new EventArgs()); if (_currentFactory == null) { throw new InvalidOperationException(); } }
public ZoneSelectionPanelCreator(IReadOnlyArea area, Panel targetPanel) { if (area == null) { throw new ArgumentNullException(nameof(area)); } _targetPanel = targetPanel ?? throw new ArgumentNullException(nameof(targetPanel)); _tooltip = new ToolTip(); EventHandler currentClickHandler = null; _buttonsAndFactories = area.GetSupportedZoneConsumptionFactories() .Select(factory => { var sample = factory(); var button = new Button { Dock = DockStyle.Top, BackColor = SystemColors.Control, Parent = _targetPanel, Image = sample.Tile, Size = new Size(68, 68) }; if (_handleKeyCharActions.ContainsKey(sample.KeyChar)) { throw new InvalidOperationException(string.Format("Could not use key char '{0}' as unique identifier for '{1}'.", sample.KeyChar, sample.Name)); } _handleKeyCharActions.Add(sample.KeyChar, () => button.PerformClick()); currentClickHandler = (sender, e) => { _currentFactory = factory; CurrentZoneConsumptionSample = _currentFactory(); }; button.Click += currentClickHandler; _tooltip.SetToolTip(button, $"{sample.Name} ({sample.KeyChar.ToString().ToUpperInvariant()})"); return(new KeyValuePair <Button, Func <IAreaConsumption> >(button, factory)); }) .ToDictionary(x => x.Key, x => x.Value); currentClickHandler(this, new EventArgs()); if (_currentFactory == null) { throw new InvalidOperationException(); } }
private static IZoneInfo GenerateZoneInfoMockFor <T>(IReadOnlyArea area) where T : class, IAreaZoneConsumption { var zone = new Mock <IZoneInfo>(); var consumptionState = new Mock <IZoneConsumptionState>(); consumptionState .Setup(x => x.GetZoneConsumption()) .Returns(area .GetSupportedZoneConsumptionFactories() .Single(x => x() is T)() as T ); zone .Setup(x => x.ConsumptionState) .Returns(consumptionState.Object); return(zone.Object); }