public void DelRow()
        {
            //if (!_isCellsStandalone) return;

            DeselectBlocks();

            var cells = RowViewModelList.Last().CellsCollection;

            RowViewModelList.Remove(RowViewModelList.Last());

            foreach (var cell in cells)
            {
                cell.CellData.RowNum--;
                RowViewModelList.Last().CellsCollection.Add(cell);
            }

            RowViewModelList.Last().UpdateFacade();
            RowViewModelList.Last().UpdateDirection();
            RowViewModelList.Last().UpdateDoorDirection();
            RowViewModelList.Last().UpdateBusPositions();
            RowViewModelList.Last().UpdateCellPanel();

            ControlsCollection.Remove(_controlsCollection.Last(x => x.GetType() == typeof(RowBlock)));

            UpdateAll();
            StageSave();
        }
 public void ReloadLayout()
 {
     RowViewModelList.Clear();
     ControlsCollection.Clear();
     LoadWorkspace();
     SettingWorspace();
     ReorganizeGrid(true);
 }
Esempio n. 3
0
 private void LoadWorkspace()
 {
     _workspace = new UserControl
     {
         Content = new Workspace(this)
     };
     ControlsCollection.Add(_workspace);
     Canvas.SetZIndex(_workspace, -20);
 }
Esempio n. 4
0
        public void StageClear()
        {
            DeselectBlocks();
            ControlsCollection.Clear();

            RowViewModelList.Clear();
            _cellDataList.Clear();
            _cabinetDataList.Clear();
            _linkDataList.Clear();
        }
Esempio n. 5
0
 //показать таблицу промежуточного контроля
 private void DisplayControlsTable()
 {
     if (CBDiscInControl.SelectedItem != null && CBGroupInControl.SelectedItem != null)
     {
         controlsCollection = new ControlsCollection(_teacher.Id,
                                                     GetIdDiscipline(CBDiscInControl.SelectedItem.ToString()),
                                                     GetIdGroup(CBGroupInControl.SelectedItem.ToString()));
         ControlViewModel controlViewModel = new ControlViewModel(controlsCollection.ControlList);
         DataGridControls.DataContext = controlViewModel;
     }
 }
Esempio n. 6
0
        /// <summary>
        /// Creates a new instance of the <see cref="SciterHost"/> class
        /// </summary>
        public ControlsHost(Control owner)
        {
            #region Parameters checking
            if (owner == null)
            {
                throw new ArgumentNullException("owner");
            }
            #endregion

            Control        = owner;
            SciterControls = new ControlsCollection(this);
        }
        public void ReorganizeGrid(bool isShowGrid)
        {
            _isShowGrid = isShowGrid;

            while (_controlsCollection.Any(x => x.GetType() == typeof(CoorGrid)))
            {
                ControlsCollection.Remove(_controlsCollection.First(x => x.GetType() == typeof(CoorGrid)));
            }

            if (isShowGrid)
            {
                ControlsCollection.Add(new CoorGrid(_currentGridScale / Constants.MainScale, _areaWidth, _areaHeight));
                Canvas.SetZIndex((UIElement)ControlsCollection.Last(), -10);
            }
        }
        public void CreateSubstation(SubstationData subBlock)
        {
            if (subBlock == null)
            {
                return;
            }

            while (ControlsCollection.Any(x => x.GetType() == typeof(SubstationBlock)))
            {
                ControlsCollection.Remove(ControlsCollection.First(x => x.GetType() == typeof(SubstationBlock)));
            }

            ControlsCollection.Add(new SubstationBlock(this, subBlock));

            ReDrawSubstation();
        }
Esempio n. 9
0
        public void SetMainData(MainData mainData)
        {
            var rowNum = 0;

            foreach (var rowData in mainData.RowDataList)
            {
                rowNum++;

                var rowBlock          = new RowBlock(this);
                var rowBlockViewModel = (VMRowBlock)rowBlock.DataContext;

                rowBlockViewModel.SetParams(this, rowData);
                rowBlockViewModel.PropertyChanged += RowViewModel_PropertyChanged;
                rowBlockViewModel.CreateCells(_cellDataList.Where(x => x.RowNum == rowNum)?.ToList());
                rowBlockViewModel.UpdateFacade();
                rowBlockViewModel.UpdateDirection();
                //rowBlockViewModel.UpdateDoorDirection();
                rowBlockViewModel.UpdateBusPositions();
                rowBlockViewModel.UpdateCellPanel();

                RowViewModelList.Add(rowBlockViewModel);

                ControlsCollection.Add(rowBlock);
            }

            LinkDataList       = mainData.LinkDataList ?? new List <LinkData>();
            _isCellsStandalone = mainData.IsCellsStandalone;
            if (_isCellsStandalone)
            {
                ReorganizeCells(true);
            }

            AreaWidth  = mainData.Width;
            AreaHeight = mainData.Height;

            UpdateAll();
            StageSave();
        }
Esempio n. 10
0
 protected Container()
 {
     Controls = new ControlsCollection <TGlyph, TColor, TInput>(this);
     Controls.CollectionChanged += ControlsOnCollectionChanged;
 }
Esempio n. 11
0
 public void StageClear()
 {
     DeselectBlocks();
     ControlsCollection.Clear();
 }
Esempio n. 12
0
        /// <summary>
        /// Пересоздание ConnectRow's, исходя из смещений RowBlock'ов
        /// </summary>
        public void UpdateRowConnects()
        {
            var connectRowList = new List <ConnectRow>();

            VMRowBlock   lastRowBlockViewModel   = null;
            VMConnectRow lastConnectRowViewModel = null;
            var          lastXOffset             = 0;
            var          lastYOffset             = 0;

            //while (_controlsCollection.Any(x => x.GetType() == typeof(ConnectRow)) && ((ConnectRowViewModel)((ConnectRow)_controlsCollection.First(x => x.GetType() == typeof(ConnectRow))).DataContext).CabBlock == null)
            //{
            //    ControlsCollection.Remove(_controlsCollection.First(x => x.GetType() == typeof(ConnectRow) && ((ConnectRowViewModel)((ConnectRow)x).DataContext).CabBlock == null));
            //}

            //foreach (var control in _controlsCollection)
            //{
            //    if (control is ConnectRow)
            //    {
            //        var cr = (ConnectRow)control;
            //        var crvm = (ConnectRowViewModel)cr.DataContext;

            //        if (crvm.CabBlock == null) ControlsCollection.Remove(cr);
            //    }
            //}

            //if (_isHideConnects) return;

            foreach (var control in _controlsCollection)
            {
                if (control is RowBlock rowBlock)
                {
                    var rowBlockViewModel = (VMRowBlock)rowBlock.DataContext;

                    var connectLeft           = new ConnectRow();
                    var connectRight          = new ConnectRow();
                    var connectTop            = new ConnectRow();
                    var connectLeftViewModel  = (VMConnectRow)connectLeft.DataContext;
                    var connectRightViewModel = (VMConnectRow)connectRight.DataContext;
                    var connectTopViewModel   = (VMConnectRow)connectTop.DataContext;

                    connectLeftViewModel.IsInvisible = _isHideConnects;
                    connectLeftViewModel.X           = 0;
                    connectLeftViewModel.Y           = rowBlockViewModel.DirectY + (rowBlockViewModel.GetHeight() / 2);
                    connectLeftViewModel.Size        = rowBlockViewModel.DirectX * Constants.MainScale;

                    connectRightViewModel.IsInvisible = _isHideConnects;
                    connectRightViewModel.X           = rowBlockViewModel.DirectX + rowBlockViewModel.GetWidth();
                    connectRightViewModel.Y           = rowBlockViewModel.DirectY + (rowBlockViewModel.GetHeight() / 2);
                    connectRightViewModel.Size        =
                        (_areaWidth - (rowBlockViewModel.DirectX + rowBlockViewModel.GetWidth()))
                        * Constants.MainScale;

                    var xOffsetFix = rowBlockViewModel.DirectX + (rowBlockViewModel.GetWidth() / 2);

                    //if (lastRowBlockViewModel != null && !CheckRowConnectOffset(rowBlockViewModel)
                    //    && lastRowBlockViewModel.XOffset + (lastRowBlockViewModel.GetWidth() / 2)
                    //    < rowBlockViewModel.XOffset + (rowBlockViewModel.GetWidth() / 2))
                    //    xOffsetFix = lastRowBlockViewModel.XOffset + (lastRowBlockViewModel.GetWidth() / 2);

                    if ((rowBlockViewModel.Facade == Facade.Down || rowBlockViewModel.Facade == Facade.Up) &&
                        lastRowBlockViewModel?.DirectX + (lastRowBlockViewModel?.GetWidth() / 2)
                        < rowBlockViewModel.DirectX + (rowBlockViewModel.GetWidth() / 2))
                    {
                        xOffsetFix = lastRowBlockViewModel.DirectX + (lastRowBlockViewModel.GetWidth() / 2);
                    }

                    var yOffsetFix = CheckRowConnectOffset(rowBlockViewModel) ? 0 : lastYOffset;

                    connectTopViewModel.IsInvisible = _isHideConnects;
                    connectTopViewModel.X           = xOffsetFix;
                    connectTopViewModel.Y           = yOffsetFix;
                    connectTopViewModel.Size        = (rowBlockViewModel.DirectY - yOffsetFix) * Constants.MainScale;

                    connectLeftViewModel.MainBlockViewModel = this;
                    connectLeftViewModel.RowBlockVM         = rowBlockViewModel;
                    connectLeftViewModel.ConnectSide        = ConnectSide.Left;

                    connectRightViewModel.MainBlockViewModel = this;
                    connectRightViewModel.RowBlockVM         = rowBlockViewModel;
                    connectRightViewModel.ConnectSide        = ConnectSide.Right;

                    connectTopViewModel.MainBlockViewModel = this;
                    connectTopViewModel.RowBlockVM         = rowBlockViewModel;
                    connectTopViewModel.LastRowBlockVM     = lastRowBlockViewModel;
                    connectTopViewModel.ConnectSide        = ConnectSide.Top;

                    connectRowList.Add(connectLeft);
                    connectRowList.Add(connectRight);
                    connectRowList.Add(connectTop);

                    Panel.SetZIndex(connectLeft, 5);
                    Panel.SetZIndex(connectRight, 5);
                    Panel.SetZIndex(connectTop, 5);

                    if (_controlsCollection.Any(x => x.GetType() == typeof(RowBlock)) &&
                        control == _controlsCollection.Last(x => x.GetType() == typeof(RowBlock)))
                    {
                        var connectBottom          = new ConnectRow();
                        var connectBottomViewModel = (VMConnectRow)connectBottom.DataContext;

                        connectBottomViewModel.IsInvisible = _isHideConnects;
                        connectBottomViewModel.X           = rowBlockViewModel.DirectX + (rowBlockViewModel.GetWidth() / 2);
                        connectBottomViewModel.Y           = rowBlockViewModel.DirectY + rowBlockViewModel.GetHeight();
                        connectBottomViewModel.Size        =
                            (_areaHeight - (rowBlockViewModel.DirectY + rowBlockViewModel.GetHeight()))
                            * Constants.MainScale;

                        var minBottomSize = (rowBlockViewModel.Facade == Facade.Down
                            ? RowMinFacadeSize : RowMinVerticalSize);

                        if (connectBottomViewModel.Size < minBottomSize)
                        {
                            connectBottomViewModel.Size = minBottomSize;
                        }

                        connectBottomViewModel.MainBlockViewModel = this;
                        connectBottomViewModel.RowBlockVM         = rowBlockViewModel;
                        connectBottomViewModel.LastRowBlockVM     = lastRowBlockViewModel;
                        connectBottomViewModel.ConnectSide        = ConnectSide.Bottom;

                        connectRowList.Add(connectBottom);

                        Panel.SetZIndex(connectBottom, 5);
                    }

                    if (lastConnectRowViewModel != null)
                    {
                        lastConnectRowViewModel.RowBlockVM2 = rowBlockViewModel;
                    }
                    lastConnectRowViewModel = connectTopViewModel;
                    lastRowBlockViewModel   = rowBlockViewModel;
                    lastXOffset             = rowBlockViewModel.DirectX + rowBlockViewModel.GetWidth();
                    lastYOffset             = rowBlockViewModel.DirectY + rowBlockViewModel.GetHeight();
                }
            }

            foreach (var connect in connectRowList)
            {
                ControlsCollection.Add(connect);
            }
        }
Esempio n. 13
0
        /// <summary>
        /// Пересоздание шинных вводов
        /// </summary>
        public void UpdateBusInputs()
        {
            //while (_controlsCollection.Any(x => x.GetType() == typeof(BusBridge)))
            //{
            //    ControlsCollection.Remove(_controlsCollection.First(x => x.GetType() == typeof(BusBridge)));
            //}

            if (_isHideConnects)
            {
                return;
            }

            foreach (var rowVM in _rowViewModelList)
            {
                foreach (var cellBlock in rowVM.CellsCollection)
                {
                    if (cellBlock.SizeBorder.Visibility == Visibility.Collapsed)
                    {
                        cellBlock.UpdateVisibility();
                    }
                }
            }

            foreach (var linkData in _linkDataList.Where(x => x.LinkType == LinkType.InputBus))
            {
                var cellData = _cellDataList.Find(x => x.IndexNum == linkData.FromCellIndex);

                if (cellData == null)
                {
                    continue;
                }

                var cellXOffset = 0;
                var cellYOffset = 0;

                foreach (var rowVM in _rowViewModelList)
                {
                    if (rowVM.GetXOffset(cellData) != 0)
                    {
                        cellXOffset = rowVM.GetXOffset(cellData);
                    }
                    if (rowVM.GetYOffset(cellData) != 0)
                    {
                        cellYOffset = rowVM.GetYOffset(cellData);
                    }
                }

                switch (linkData.BusDirection)
                {
                case Facade.Up:
                    ControlsCollection.Add(new BusBridge(linkData, /*Groups.LINE_ALL_TYPES.Contains(cellData.CellType)*/ false)
                    {
                        X         = cellXOffset,
                        Y         = 0,
                        BusWidth  = (cellData.Width / Constants.MainScale),
                        BusHeight = cellYOffset,
                    });
                    break;

                case Facade.Down:
                    ControlsCollection.Add(new BusBridge(linkData, /*Groups.LINE_ALL_TYPES.Contains(cellData.CellType)*/ false)
                    {
                        X         = cellXOffset,
                        Y         = cellYOffset + (cellData.Depth / Constants.MainScale),
                        BusWidth  = (cellData.Width / Constants.MainScale),
                        BusHeight = _areaHeight - (cellYOffset + (cellData.Depth / Constants.MainScale)),
                    });
                    break;

                case Facade.Left:
                    ControlsCollection.Add(new BusBridge(linkData, /*Groups.LINE_ALL_TYPES.Contains(cellData.CellType)*/ false)
                    {
                        X         = 0,
                        Y         = cellYOffset,
                        BusWidth  = cellYOffset,
                        BusHeight = (cellData.Width / Constants.MainScale),
                    });
                    break;

                case Facade.Right:
                    ControlsCollection.Add(new BusBridge(linkData, /*Groups.LINE_ALL_TYPES.Contains(cellData.CellType)*/ false)
                    {
                        X         = cellXOffset + (cellData.Depth / Constants.MainScale),
                        Y         = cellYOffset,
                        BusWidth  = _areaWidth - (cellXOffset + (cellData.Depth / Constants.MainScale)),
                        BusHeight = (cellData.Width / Constants.MainScale),
                    });
                    break;
                }

                Canvas.SetZIndex((UIElement)_controlsCollection.Last(), -5);

                var bus = (BusBridge)_controlsCollection.Last();

                foreach (var rowVM in _rowViewModelList)
                {
                    if (linkData.BusDirection == Facade.Down || linkData.BusDirection == Facade.Up)
                    {
                        var hContains = rowVM.X <= bus.X && rowVM.X + rowVM.GetWidth() >= bus.X + bus.Width;
                        var vContains = rowVM.Y >= bus.Y && rowVM.Y + rowVM.GetHeight() <= bus.Y + bus.Height;

                        if (hContains && vContains)
                        {
                            foreach (var cellBlock in rowVM.CellsCollection)
                            {
                                var x      = rowVM.GetXOffset(cellBlock.CellData);
                                var y      = rowVM.GetYOffset(cellBlock.CellData);
                                var width  = cellBlock.CellWidth / Constants.MainScale;
                                var height = cellBlock.CellHeight / Constants.MainScale;

                                if (x == bus.X && x + width == bus.X + bus.Width)
                                {
                                    cellBlock.HideBlock();
                                }
                                else
                                {
                                    cellBlock.UpdateVisibility();
                                }
                            }
                        }
                    }
                }
            }

            //UpdateBusBoxCells();
        }
Esempio n. 14
0
        /// <summary>
        /// Пересоздание шинных мостов
        /// </summary>
        public void UpdateBusBridges()
        {
            List <double> brokenBridges = new List <double>();

            while (_controlsCollection.Any(x => x.GetType() == typeof(BusBridge)))
            {
                ControlsCollection.Remove(_controlsCollection.First(x => x.GetType() == typeof(BusBridge)));
            }

            if (_isHideConnects)
            {
                return;
            }

            foreach (var linkData in _linkDataList.Where(x => x.LinkType == LinkType.Bus))
            {
                var fromCellData = _cellDataList.Find(x => x.IndexNum == linkData.FromCellIndex);
                var toCellData   = _cellDataList.Find(x => x.IndexNum == linkData.ToCellIndex);

                if (fromCellData == null || toCellData == null)
                {
                    continue;
                }

                if (fromCellData.Facade == Facade.Left || fromCellData.Facade == Facade.Right || toCellData.Facade == Facade.Left || toCellData.Facade == Facade.Right)
                {
                    brokenBridges.Add(linkData.FromCellIndex);
                    _iToastNotifications?.ShowInformation($"Шинный мост { fromCellData.UserNum } { fromCellData.UserName } - { toCellData.UserNum } { toCellData.UserName } удален: размещение невозможно при боковом фасаде камер");
                    continue;
                }

                var fromCellXOffset = 0;
                var fromCellYOffset = 0;
                var toCellXOffset   = 0;
                var toCellYOffset   = 0;

                foreach (var rowVM in _rowViewModelList)
                {
                    if (rowVM.GetXOffset(fromCellData) != 0)
                    {
                        fromCellXOffset = rowVM.GetXOffset(fromCellData);
                    }
                    if (rowVM.GetYOffset(fromCellData) != 0)
                    {
                        fromCellYOffset = rowVM.GetYOffset(fromCellData);
                    }
                    if (rowVM.GetXOffset(toCellData) != 0)
                    {
                        toCellXOffset = rowVM.GetXOffset(toCellData);
                    }
                    if (rowVM.GetYOffset(toCellData) != 0)
                    {
                        toCellYOffset = rowVM.GetYOffset(toCellData);
                    }
                }

                if (Math.Abs((fromCellXOffset - toCellXOffset)) > Constants.SectionCellMaxOffset / Constants.MainScale)
                {
                    brokenBridges.Add(linkData.FromCellIndex);
                    _iToastNotifications?.ShowInformation($"Шинный мост { fromCellData.UserNum } { fromCellData.UserName } - { toCellData.UserNum } { toCellData.UserName } удален: смещение более { Constants.SectionCellMaxOffset } мм");
                    continue;
                }

                ControlsCollection.Add(new BusBridge()
                {
                    X         = fromCellXOffset,
                    Y         = fromCellYOffset + (fromCellData.Depth / Constants.MainScale),
                    BusWidth  = (fromCellData.Width / Constants.MainScale),
                    BusHeight = toCellYOffset - fromCellYOffset - (fromCellData.Depth / Constants.MainScale),
                });
                Canvas.SetZIndex((UIElement)_controlsCollection.Last(), -5);
            }

            foreach (var cellIndex in brokenBridges)
            {
                _linkDataList.Remove(_linkDataList.Find(x => x.LinkType == LinkType.Bus && x.FromCellIndex == cellIndex));
            }

            //UpdateBusBoxCells();
        }
		public ControlsCollectionDebugView(ControlsCollection collection)
		{
			this.Collection = collection;
		}
        public void AddRow()
        {
            if ((RowViewModelList.Count != 0 && !_secondsRow) || (RowViewModelList.Count == 2))
            {
                return;
            }

            DeselectBlocks();
            var rowData           = new RowData();
            var rowBlock          = new RowBlock(this);
            var rowBlockViewModel = (VMRowBlock)rowBlock.DataContext;

            rowBlockViewModel.SetParams(this, rowData);
            rowBlockViewModel.PropertyChanged += RowViewModel_PropertyChanged;

            var facade        = Facade.Down;
            var direction     = Direction.LeftToRight;
            var doorDirection = DoorDirection.Left;

            if (RowViewModelList.Count == 0)
            {
                foreach (var cell in _cellDataList)
                {
                    cell.RowNum = 1;
                }
                rowBlockViewModel.CreateCells(_cellDataList);
            }
            else
            {
                var lastCells = RowViewModelList.Last();

                List <CellData> cellDatas = new List <CellData>();

                int count = _cellDataList.Count;
                for (int i = 0; i < count; i++)
                {
                    CellData cellData = new CellData(_cellDataList[i]);
                    cellData.SystemNum = cellData.SystemNum + count;
                    cellData.IndexNum  = cellData.IndexNum + count + 1;
                    cellData.RowNum    = cellData.RowNum + 1;
                    cellData.UserNum   = cellData.IndexNum.ToString();
                    cellDatas.Add(cellData);
                    _cellDataList.Add(cellData);
                }
                rowBlockViewModel.CreateCells(cellDatas);
                rowBlockViewModel.DirectY = AreaHeight - cellDatas.Max(x => x.Depth) / Constants.MainScale;
                if (RowViewModelList.Last().Facade == Facade.Down)
                {
                    facade = Facade.Up;
                }
                if (RowViewModelList.Last().Direction == Direction.LeftToRight)
                {
                    direction = Direction.RightToLeft;
                }
                if (RowViewModelList.Last().DoorDirection == DoorDirection.Left)
                {
                    doorDirection = DoorDirection.Right;
                }
                RowViewModelList.Last().UpdateCellPanel();
            }

            rowBlockViewModel.UpdateFacade(facade);
            rowBlockViewModel.UpdateDirection(direction);
            rowBlockViewModel.UpdateDoorDirection(doorDirection);
            rowBlockViewModel.UpdateBusPositions();
            rowBlockViewModel.UpdateCellPanel();

            RowViewModelList.Add(rowBlockViewModel);

            ControlsCollection.Add(rowBlock);

            UpdateRowPosition(RowViewModelList.Count > 1 ? RowViewModelList[RowViewModelList.Count - 2] : null, rowBlockViewModel);
            UpdateAll();
            StageSave();
        }