/// <summary>
        /// Adds a check to the tab and returns true if the check causes a restructure
        /// </summary>
        /// <param name="check">The check display to add to the tab</param>
        /// <returns>True if check is new, false if replacing an existing check or filling an existing space</returns>
        public bool AddCheck(ICheckDisplay check)
        {
            bool returnValue = false;

            var indexInTypesArray = _types.IndexOf(check.GetCheckType());
            if (indexInTypesArray == -1)
            {
                indexInTypesArray = _types.Count;
                _types.Add(check.GetCheckType());
                _checks.AddRow();
                returnValue = true;
            }

            var indexInLocsArray = _locations.IndexOf(check.GetLocation());
            if (indexInLocsArray == -1)
            {
                indexInLocsArray = _locations.Count;
                _locations.Add(check.GetLocation());
                _checks.AddColumn();
                returnValue = true;
            }

            _checks.InsertItem(check, indexInTypesArray, indexInLocsArray);

            LastColumn = indexInLocsArray;
            LastRow = indexInTypesArray;

            return returnValue;
        }
 public CheckDisplayDto(ICheckDisplay check)
 {
     IsLoading = check.IsLoading();
     IsPaused = check.IsPaused();
     HasError = check.HasError();
     IsTriggered = check.IsTriggered();
     Result = check.GetResult();
     Status = check.GetStatus();
     Error = check.GetError();
     Location = check.GetLocation();
     CheckType = check.GetCheckType();
     TabName = check.GetTab();
 }
 public void UpdateCheck(ICheckDisplay check)
 {
     _clients.Value.UpdateChecks(new[] { new CheckDisplayDto(check) });
 }
        public void Update(ICheckDisplay check)
        {
            try
            {
                if (_mainForm == null)
                {
                    throw new Exception("The form has not yet been created");
                }
                else
                {
                    TabDisplay myTab = null; //must be outside of lock

                    lock (_tabs)
                    {
                        myTab = _tabs.FirstOrDefault(t => t.GetName() == check.GetTab());

                        if (myTab == null)
                        {
                            myTab = new TabDisplay(check.GetTab());
                            _mainForm.AddTab(check.GetTab());
                            _tabs = _tabs.Where(t => t != null).Concat(myTab).ToArray();
                        }

                    }

                    if (myTab.AddCheck(check))
                    {
                        lock (_mainForm)
                        {
                            _mainForm.DrawTable(myTab.GetName(), myTab.GetLocations(), myTab.GetTypes());
                        }

                        for (int i = 0; i < myTab.GetTypes().Count; i++)
                        {
                            for (int j = 0; j < myTab.GetLocations().Count; j++)
                            {
                                var cell = myTab.GetTable()[i, j];
                                if (cell != null)
                                {
                                    string mouseOverText;
                                    System.Drawing.Color cellColour;
                                    if (cell.IsTriggered())
                                    {
                                        cellColour = System.Drawing.Color.Red;
                                        mouseOverText = cell.GetStatus();
                                    }
                                    else if (cell.HasError())
                                    {
                                        cellColour = System.Drawing.Color.Yellow;
                                        mouseOverText = cell.GetError();
                                    }
                                    else if (cell.IsPaused())
                                    {
                                        cellColour = System.Drawing.Color.LightBlue;
                                        mouseOverText = cell.GetStatus();
                                    }
                                    else
                                    {
                                        cellColour = System.Drawing.Color.White;
                                        mouseOverText = cell.GetStatus();
                                    }

                                    lock (_mainForm)
                                    {
                                        var result = cell.GetResult();

                                        _mainForm.SetCell(myTab.GetName(), i, j, result, cellColour, mouseOverText);
                                    }
                                }
                                else
                                {
                                    lock (_mainForm)
                                    {
                                        _mainForm.SetCell(myTab.GetName(), i, j,
                                            "Not Applicable", System.Drawing.Color.Gray,
                                            "Not Applicable");
                                    }
                                }
                            }
                        }

                    }
                    else
                    {
                        //just update the cell
                        lock (_mainForm)
                        {
                            System.Drawing.Color cellColour;
                            if (check.IsTriggered())
                            {
                                cellColour = System.Drawing.Color.Red;
                            }
                            else if (check.HasError())
                            {
                                cellColour = System.Drawing.Color.Yellow;
                            }
                            else if (check.IsPaused())
                            {
                                cellColour = System.Drawing.Color.LightBlue;
                            }
                            else
                            {
                                cellColour = System.Drawing.Color.White;
                            }

                            _mainForm.SetCell(myTab.GetName(), myTab.LastRow, myTab.LastColumn,
                                   check.GetResult(), cellColour, check.GetStatus());
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e, "Update failed");
            }
        }