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();
            }
        }
Exemple #2
0
        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();
            }
        }
Exemple #3
0
        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);
        }