Exemple #1
0
        private void InitWindows()
        {
            var curScreens = ScreenHandler.GetScreens();

            foreach (var screen in curScreens)
            {
                var win    = new ScreenWindow();
                var config = new WindowPagesConfig
                {
                    ScreenNum  = screen,
                    CurrentIdx = 0,
                    Window     = win,
                    Pages      = new IReportPage[] { new StartPage() }
                };
                _monWinPagesDic.Add(screen, config);

                Dispatcher.Invoke(() =>
                {
                    ShowOnMonitor(screen, win);
                    win.MainFrame.Navigate(config.Pages[0]);
                });
            }
        }
Exemple #2
0
        private void UpdatePanelsData(IReadOnlyCollection <TvPanelsDto> data)
        {
            var curScreens = ScreenHandler.GetScreens();

            var isEqual = true;

            foreach (var screen in curScreens)
            {
                var screenItem = data.SingleOrDefault(o => o.Num == screen) ?? new TvPanelsDto
                {
                    Num   = screen,
                    Types = new[] { ScreenType.None }
                };

                var currentItem = new WindowPagesConfig
                {
                    ScreenNum = screen,
                    Pages     = new IReportPage[] { }
                };

                if (_monWinPagesDic.ContainsKey(screen))
                {
                    currentItem = _monWinPagesDic[screen];
                }

                isEqual = currentItem.Pages.Select(o => o.ScreenType).SequenceEqual(screenItem.Types);
                if (!isEqual)
                {
                    break;
                }
            }

            if (!isEqual)
            {
                lock (_updateDataLocker)
                {
                    Dispatcher.Invoke(RemoveAllWindows);

                    foreach (var screen in curScreens)
                    {
                        var screenItem = data.SingleOrDefault(o => o.Num == screen) ?? new TvPanelsDto
                        {
                            Num   = screen,
                            Types = new[] { ScreenType.None }
                        };

                        WindowPagesConfig config;
                        var pages = new List <IReportPage>();
                        Dispatcher.Invoke(() =>
                        {
                            foreach (var type in screenItem.Types)
                            {
                                //todo factory?
                                IReportPage page;
                                switch (type)
                                {
                                case ScreenType.ScheduleDeviationTable:
                                    page = new ScheduleDeviationTablePage(_refreshDataInterval);
                                    break;

                                case ScreenType.ScheduleDeviationGraph:
                                    page = new ScheduleDeviationGraphPage(_refreshDataInterval, _diagramHoursBack, _diagramHoursForward);
                                    break;

                                case ScreenType.BrigadeScheduleDeviationTable:
                                    page = new BrigadeScheduleDeviationTablePage(_refreshDataInterval);
                                    break;

                                case ScreenType.ToDeviationTable:
                                    page = new ToDeviationTablePage(_refreshDataInterval);
                                    break;

                                case ScreenType.CriticalMalfunctionsTable:
                                    page = new CriticalMalfunctionsTablePage(_refreshDataInterval);
                                    break;

                                case ScreenType.TrainsInDepoMalfunctionsTable:
                                    page = new TrainsInDepoMalfunctionsTablePage(_refreshDataInterval);
                                    break;

                                case ScreenType.TrainsInDepoStatusTable:
                                    page = new TrainsInDepoStatusTablePage(_refreshDataInterval);
                                    break;

                                case ScreenType.JournalsTable:
                                    page = new JournalsTablePage(_refreshDataInterval);
                                    break;

                                default:
                                    page = new StartPage();
                                    break;
                                }

                                pages.Add(page);
                            }

                            config = new WindowPagesConfig
                            {
                                ScreenNum  = screen,
                                CurrentIdx = 0,
                                Window     = new ScreenWindow(),
                                Pages      = pages.ToArray()
                            };

                            _monWinPagesDic[screen] = config;

                            ShowOnMonitor(screen, config.Window);
                            //navigate to first page
                            config.Window.MainFrame.Navigate(config.Pages[0]);
                        });
                    }

                    Task.Run(() =>
                    {
                        UpdateData();
                    });
                }
            }
        }