Exemplo n.º 1
0
        public static void LoadLayout(DataGrid DataGrid, ICollectionView Collection, string GridName, GridSetting defaultLayout)
        {
            if (DataGrid == null)
            {
                return;
            }

            var settingsResult = m_SettingsBll.GetSettings();

            if (!settingsResult.Succeeded)
            {
                return;
            }

            var gridSetting = settingsResult.Result.GridSettings.FirstOrDefault(s => s.GridName == GridName);

            if (gridSetting != null)
            {
                __LoadLayout(DataGrid, Collection, gridSetting);
            }
            else if (defaultLayout != null)
            {
                __LoadLayout(DataGrid, Collection, defaultLayout);
            }
        }
Exemplo n.º 2
0
        public ESTWOnlineScope(ESTW estw, string estwOnlineDirectory, string dataFilePath)
        {
            m_Estw = estw;

            m_OldDataFilePath = Field.GetValue(m_Estw) as string;
            Field.SetValue(m_Estw, dataFilePath);

            var SettingsResult = m_SettingsBll.GetSettings();

            if (SettingsResult.Succeeded)
            {
                m_OldEstwOnlinePath = SettingsResult.Result.EstwOnlinePath;
                SettingsResult.Result.EstwOnlinePath = Path.Combine(Environment.CurrentDirectory, estwOnlineDirectory);
            }
        }
Exemplo n.º 3
0
        private void __StartEstwOnline()
        {
            var SettingsResult = m_SettingsBll.GetSettings();

            if (SettingsResult.Succeeded && SettingsResult.Result != null)
            {
                if (SettingsResult.Result.EstwOnlinePath.IsNullOrWhiteSpace())
                {
                    MessageBox.Show(StatusBarText = "ESTWonline Pfad nicht gesetzt", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                else
                {
                    string EstwOnlinePath = Path.Combine(SettingsResult.Result.EstwOnlinePath, "ESTWonline.exe");

                    if (!File.Exists(EstwOnlinePath))
                    {
                        MessageBox.Show("ESTWonline Pfad ungültig", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    else
                    {
                        try
                        {
                            Process.Start(EstwOnlinePath);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(String.Format("Konnte ESTWonline nicht starten: {0}", ex.Message), "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        public SettingsScope()
        {
            m_SettingsBll = new SettingsBLL();

            var settingsResult = m_SettingsBll.GetSettings();

            if (settingsResult.Succeeded)
            {
                m_Settings         = settingsResult.Result;
                m_OriginalSettings = m_Settings.Clone();
                m_Settings.DelayJustificationEnabled = true;
                m_Settings.DelayJustificationMinutes = 3;
            }
        }
Exemplo n.º 5
0
        public ESTWRootScope()
        {
            var SettingsResult = m_SettingsBll.GetSettings();

            if (SettingsResult.Succeeded)
            {
                var Paths = SettingsResult.Result.Paths;
                m_OldPaths          = Paths.Clone();
                m_OldEstwOnlinePath = SettingsResult.Result.EstwOnlinePath;

                var ResourceSet = Properties.Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);

                foreach (DictionaryEntry Resource in ResourceSet)
                {
                    if (Resource.Key is string && (Resource.Key as string).StartsWith("path_") && Resource.Value is string)
                    {
                        string EstwId = (Resource.Key as string).Substring(5);
                        Paths[EstwId] = Path.Combine(Environment.CurrentDirectory, Resource.Value as string);
                    }
                }

                SettingsResult.Result.EstwOnlinePath = Path.Combine(Environment.CurrentDirectory, @"TestData\ESTWOnline");
            }
        }
Exemplo n.º 6
0
        public ChildWindow(string Identifier)
            : base()
        {
            this.Identifier = Identifier;

            CloseCommand         = new CommandHandler(Close, true);
            SizeToContentCommand = new CommandHandler(__SizeToContent, true);

            DataContextChanged += __DataContextChanged;
            Closed             += __Closed;
            WindowState         = Xceed.Wpf.Toolkit.WindowState.Open;

            var SettingsBll    = new SettingsBLL();
            var SettingsResult = SettingsBll.GetSettings();

            if (SettingsResult.Succeeded)
            {
                WindowColor = SettingsResult.Result.WindowColor;
            }
        }
Exemplo n.º 7
0
        public SettingsViewModel(ObservableCollection <Area> areas)
        {
            m_Areas       = areas;
            m_SettingsBll = new SettingsBLL();
            Areas         = new ObservableCollection <AreaViewModel>();

            var SettingsResult = m_SettingsBll.GetSettings();

            if (SettingsResult.Succeeded)
            {
                m_Settings = SettingsResult.Result.Clone();
                __Initialize();
            }
            else
            {
                ShowMessage(SettingsResult);
            }

            m_SaveCommand       = new CommandHandler(__Save, false);
            m_CancelCommand     = new CommandHandler(__Cancel, true);
            m_EstwOnlineCommand = new CommandHandler(__BrowseEstwOnline, true);
        }
Exemplo n.º 8
0
        public void Refresh(Area Area)
        {
            var SettingsResult = m_SettingsBll.GetSettings();

            if (!SettingsResult.Succeeded)
            {
                MessageBox.Show(SettingsResult.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            var Settings         = SettingsResult.Result;
            var CurrentSchedules = new List <TrainScheduleStationViewModel>();
            var Estw             = Area.ESTWs.FirstOrDefault(estw => estw.Time != null);

            if (Estw == null)
            {
                return;
            }

            var SchedulesResult = m_CalculationBll.GetSchedulesByTime(CurrentTrain.Schedules, Estw.Time);

            if (!SchedulesResult.Succeeded)
            {
                Dispatcher.Invoke(() => MessageBox.Show(SchedulesResult.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error));
                return;
            }

            bool HasStartStation       = SchedulesResult.Result.Any(s => s.Handling == eHandling.Start);
            bool HasDestinationStation = SchedulesResult.Result.Any(s => s.Handling == eHandling.Destination);

            TrainScheduleStationViewModel FirstStationSchedule = null;
            TrainScheduleStationViewModel FirstStationDummy    = null;
            TrainScheduleStationViewModel LastStationSchedule  = null;
            TrainScheduleStationViewModel LastStationDummy     = null;

            if (!HasStartStation && CurrentTrain.Start != null)
            {
                FirstStationSchedule = Stations.FirstOrDefault();
                FirstStationDummy    = Stations.ElementAtOrDefault(1);

                if (FirstStationSchedule == null || FirstStationSchedule.HasSchedule)
                {
                    FirstStationDummy    = new TrainScheduleStationViewModel();
                    FirstStationSchedule = new TrainScheduleStationViewModel(CurrentTrain.Start, false);

                    Dispatcher.Invoke(() => Stations.Insert(0, FirstStationDummy));
                    Dispatcher.Invoke(() => Stations.Insert(0, FirstStationSchedule));
                }

                CurrentSchedules.Add(FirstStationDummy);
                CurrentSchedules.Add(FirstStationSchedule);
            }

            if (!HasDestinationStation && CurrentTrain.Destination != null)
            {
                LastStationSchedule = Stations.LastOrDefault();
                LastStationDummy    = Stations.ElementAtOrDefault(Stations.Count - 2);

                if (LastStationSchedule == null || LastStationSchedule.HasSchedule || LastStationSchedule == FirstStationDummy)
                {
                    LastStationDummy    = new TrainScheduleStationViewModel();
                    LastStationSchedule = new TrainScheduleStationViewModel(CurrentTrain.Destination, true);

                    Dispatcher.Invoke(() => Stations.Add(LastStationDummy));
                    Dispatcher.Invoke(() => Stations.Add(LastStationSchedule));
                }

                CurrentSchedules.Add(LastStationDummy);
                CurrentSchedules.Add(LastStationSchedule);
            }

            bool PreviousVisible = false;
            bool DummyFlag       = false;
            bool Reorder         = false;

            // Group schedules by station and time to avoid duplicate entries for stations that are located between ESTW bordery stations when both ESTWs are loaded
            // i.e. Bosserode and Obersuhl are located between Hönebach (ESTW Bebra) and Gerstungen (ESTW Eisenach)
            foreach (var ScheduleGroup in SchedulesResult.Result.GroupBy(s => new { s.Station.ShortSymbol, s.Time }))
            {
                bool GroupVisible = false;

                foreach (var Schedule in ScheduleGroup)
                {
                    if (Schedule.Station == null)
                    {
                        continue;
                    }

                    bool Visible = true;
                    bool IsNew   = false;

                    var Current = Stations.FirstOrDefault(s => s.CurrentSchedule == Schedule);

                    if (Current == null)
                    {
                        Current = new TrainScheduleStationViewModel(Schedule);
                        Current.PropertyChanged += __Station_PropertyChanged;
                        IsNew = true;
                    }
                    else if (Reorder)
                    {
                        Dispatcher.Invoke(() => Stations.Remove(Current));
                        IsNew = true;
                    }

                    Current.Departure = Schedule.Departure; // For special trains schedule is generated at runtime

                    if (!Settings.DisplayCompleteTrainSchedule && !Schedule.Station.ESTW.Stations.Any(s => Runtime.VisibleStations.Contains(s)))
                    {
                        Visible = Schedule.Handling == eHandling.Start || Schedule.Handling == eHandling.Destination;
                    }

                    if (Area.LiveTrains.ContainsKey(CurrentTrain.Number))
                    {
                        m_LiveTrain = Area.LiveTrains[CurrentTrain.Number];
                        var LiveSchedule = m_LiveTrain.Schedules.FirstOrDefault(s => s.Schedule == Schedule);

                        if (LiveSchedule != null)
                        {
                            if (FirstStationSchedule != null)
                            {
                                FirstStationSchedule.IsArrived  = m_LiveTrain.Schedules.Any(s => s.IsArrived);
                                FirstStationSchedule.IsDeparted = FirstStationSchedule.IsArrived;
                            }

                            if (FirstStationDummy != null)
                            {
                                FirstStationDummy.IsArrived  = m_LiveTrain.Schedules.Any(s => s.IsArrived);
                                FirstStationDummy.IsDeparted = FirstStationDummy.IsArrived;
                            }

                            if (LiveSchedule.ExpectedArrival != null && Schedule.Arrival != null)
                            {
                                Current.DelayArrival = (LiveSchedule.ExpectedArrival - Schedule.Arrival).TotalMinutes;
                            }
                            else
                            {
                                Current.DelayArrival = null;
                            }

                            if (LiveSchedule.ExpectedDeparture != null && Schedule.Departure != null)
                            {
                                Current.DelayDeparture = (LiveSchedule.ExpectedDeparture - Schedule.Departure).TotalMinutes;
                            }
                            else
                            {
                                Current.DelayDeparture = null;
                            }

                            Current.IsDelayManuallySet = LiveSchedule.ExpectedDelay.HasValue && !LiveSchedule.IsDeparted;

                            var Index = m_LiveTrain.Schedules.IndexOf(LiveSchedule);

                            if (m_LiveTrain.Schedules.Where((schedule, index) => index > Index && (schedule.Schedule.Station.ShortSymbol != Schedule.Station.ShortSymbol || schedule.Schedule.Time != Schedule.Time) && schedule.IsArrived).Any())
                            {
                                Current.IsArrived  = true;
                                Current.IsDeparted = true;

                                var isSkipped = !LiveSchedule.IsArrived && !LiveSchedule.IsDeparted;

                                if (Current.IsSkipped && !isSkipped)
                                {
                                    // Trigger re-ordering of this and all subsequent entries
                                    Dispatcher.Invoke(() => Stations.Remove(Current));
                                    IsNew   = true;
                                    Reorder = true;
                                }

                                Current.IsSkipped = isSkipped;
                            }
                            else
                            {
                                Current.IsArrived  = LiveSchedule.IsArrived;
                                Current.IsDeparted = LiveSchedule.IsDeparted;
                            }

                            Current.LiveTrack = LiveSchedule.LiveTrack;

                            var Minutes = LiveSchedule.Delays.Sum(d => d.Minutes);

                            if (LiveSchedule.Delays.Any(d => d.Reason.IsNullOrWhiteSpace()) && Schedule.Station.ESTW.Stations.Any(s => Runtime.VisibleStations.Contains(s)))
                            {
                                Current.DelayInfo = String.Format("+{0} Bitte begründen!", Minutes);
                                Dispatcher.Invoke(() => Current.IsDelayJustified = false);
                            }
                            else if (LiveSchedule.Delays.Any(d => d.Reason.IsNotNullOrWhiteSpace()))
                            {
                                Current.DelayInfo = String.Format("+{0} {1}", Minutes, String.Join(", ", LiveSchedule.Delays.Where(d => d.Reason.IsNotNullOrWhiteSpace()).Select(d =>
                                {
                                    string result = d.Reason;

                                    if (d.CausedBy.HasValue)
                                    {
                                        result += String.Format(" ({0})", d.CausedBy);
                                    }

                                    return(result);
                                })));

                                Dispatcher.Invoke(() => Current.IsDelayJustified = true);
                            }
                            else
                            {
                                Current.DelayInfo = null;
                            }
                        }
                    }

                    GroupVisible |= Visible;

                    if (Visible)
                    {
                        if (IsNew)
                        {
                            int Index = -1;

                            if (Current.LiveTime != null)
                            {
                                for (int i = 0; i < Stations.Count; i++)
                                {
                                    if (Stations[i].HasSchedule && Stations[i].LiveTime > Current.LiveTime)
                                    {
                                        Index = i;
                                        break;
                                    }
                                }
                            }

                            if (Index == -1)
                            {
                                for (int i = 0; i < Stations.Count; i++)
                                {
                                    if (Stations[i].HasSchedule && Stations[i].CurrentSchedule.Time > Current.CurrentSchedule.Time)
                                    {
                                        Index = i;
                                        break;
                                    }
                                }
                            }

                            if (Index == -1)
                            {
                                Index = Stations.Count;
                            }

                            Dispatcher.Invoke(() => Stations.Insert(Index, Current));
                        }

                        CurrentSchedules.Add(Current);

                        if (DummyFlag)
                        {
                            var Index = Stations.IndexOf(Current);
                            var Dummy = Stations.ElementAtOrDefault(Index - 1);

                            if (Dummy == null || Dummy.HasStation)
                            {
                                Dummy = new TrainScheduleStationViewModel();
                                Dispatcher.Invoke(() => Stations.Insert(Index, Dummy));
                            }

                            Dummy.IsArrived  = Current.IsArrived;
                            Dummy.IsDeparted = Current.IsArrived;

                            CurrentSchedules.Add(Dummy);
                            DummyFlag = false;
                        }

                        break;
                    }
                }

                if (!GroupVisible && PreviousVisible)
                {
                    DummyFlag = true;
                }

                PreviousVisible = GroupVisible;
            }

            var RemovedItems = Stations.Except(CurrentSchedules).ToList();

            Dispatcher.Invoke(() => RemovedItems.ForEach(s => Stations.Remove(s)));
        }
Exemplo n.º 9
0
        public void Refresh(Area Area)
        {
            var SettingsResult = m_SettingsBll.GetSettings();

            if (!SettingsResult.Succeeded)
            {
                MessageBox.Show(SettingsResult.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            var Settings      = SettingsResult.Result;
            var CurrentTrains = new List <TrainStationViewModel>();

            foreach (var LiveTrain in Area.LiveTrains.Values)
            {
                if (LiveTrain.Train == null)
                {
                    continue;
                }

                var Train = LiveTrain.Train;

                foreach (var LiveSchedule in LiveTrain.Schedules)
                {
                    if (LiveSchedule.Schedule == null || LiveSchedule.Schedule.Station == null)
                    {
                        continue;
                    }

                    var Schedule = LiveSchedule.Schedule;
                    var Station  = Schedule.Station;

                    bool Visible = true;
                    bool IsNew   = false;

                    if (!Runtime.VisibleStations.Contains(Station))
                    {
                        Visible = false;
                    }

                    LeibitTime ActualTime;

                    if (LiveTrain.Block != null && LiveTrain.Block.Track != null)
                    {
                        ActualTime = LiveTrain.Block.Track.Station.ESTW.Time;
                    }
                    else
                    {
                        ActualTime = Area.ESTWs.Where(e => e.IsLoaded).DefaultIfEmpty().Max(e => e.Time);
                    }

                    if (ActualTime != null && LiveTrain.LastModified != null && ActualTime > LiveTrain.LastModified.AddMinutes(1))
                    {
                        Visible = false;
                    }

                    var Current = Trains.FirstOrDefault(t => t.Station.ShortSymbol == Station.ShortSymbol && t.TrainNumber == Train.Number && t.Schedule.Time == Schedule.Time);

                    if (Current == null)
                    {
                        Current = new TrainStationViewModel(LiveTrain, Schedule);
                        IsNew   = true;
                    }

                    Current.Delay             = LiveTrain.Delay;
                    Current.ExpectedArrival   = LiveSchedule.ExpectedArrival;
                    Current.ExpectedDeparture = LiveSchedule.ExpectedDeparture;
                    Current.LiveTrack         = LiveSchedule.LiveTrack == null || LiveSchedule.LiveTrack.Name == Schedule.Track?.Name ? null : LiveSchedule.LiveTrack;
                    Current.LocalOrders       = Schedule.LocalOrders.IsNotNullOrWhiteSpace() ? 'J' : ' ';

                    var NextSchedules = LiveTrain.Schedules.Skip(LiveTrain.Schedules.IndexOf(LiveSchedule) + 1);

                    if (NextSchedules.Any(s => (s.Schedule.Station.ShortSymbol != Station.ShortSymbol || s.Schedule.Time != Schedule.Time) && s.LiveArrival != null))
                    {
                        Visible = false;
                    }

                    var Delays            = LiveTrain.Schedules.SelectMany(s => s.Delays);
                    var UnjustifiedDelays = Delays.Where(d => d.Reason.IsNullOrWhiteSpace() && d.Schedule.Schedule.Station.ESTW.Stations.Any(s => Runtime.VisibleStations.Contains(s)));

                    if (UnjustifiedDelays.Any())
                    {
                        Current.DelayInfo = 'U';

                        if (UnjustifiedDelays.Any(d => d.Schedule.Schedule.Station.ShortSymbol == Schedule.Station.ShortSymbol))
                        {
                            Visible = true;
                        }
                    }
                    else if (Delays.Any(d => d.Reason.IsNotNullOrWhiteSpace()))
                    {
                        Current.DelayInfo = 'J';
                    }
                    else
                    {
                        Current.DelayInfo = ' ';
                    }

                    if (Visible)
                    {
                        if (LiveTrain.Block != null && LiveTrain.Block.Track != null && LiveTrain.Block.Track.Station != null)
                        {
                            Current.CurrentStation = LiveTrain.Block.Track.Station;

                            var CurrentSchedule = LiveTrain.Schedules.LastOrDefault(s => s.IsArrived && s.Schedule != null && s.Schedule.Station != null && s.Schedule.Station.ShortSymbol == LiveTrain.Block.Track.Station.ShortSymbol);

                            if (CurrentSchedule == null)
                            {
                                Current.State = LiveSchedule.IsDeparted ? "beendet" : "ab";
                            }
                            else
                            {
                                int CurrentScheduleIndex = LiveTrain.Schedules.IndexOf(CurrentSchedule);
                                int LiveScheduleIndex    = LiveTrain.Schedules.IndexOf(LiveSchedule);

                                if (LiveSchedule.Schedule.Station.ShortSymbol == CurrentSchedule.Schedule.Station.ShortSymbol && LiveSchedule.Schedule.Time == Current.Schedule.Time)
                                {
                                    CurrentScheduleIndex = LiveScheduleIndex;
                                }

                                if (CurrentScheduleIndex > LiveScheduleIndex)
                                {
                                    Current.State = "beendet";
                                }
                                else if (!CurrentSchedule.IsDeparted)
                                {
                                    if (CurrentSchedule.Schedule.Handling == eHandling.Start &&
                                        Settings.AutomaticReadyMessageEnabled &&
                                        CurrentSchedule.Schedule.Station.ESTW.Time >= CurrentSchedule.Schedule.Departure.AddMinutes(-Settings.AutomaticReadyMessageTime))
                                    {
                                        Current.State = "fertig";
                                    }
                                    else
                                    {
                                        Current.State = "an";
                                    }
                                }
                                else
                                {
                                    if (CurrentScheduleIndex == LiveScheduleIndex)
                                    {
                                        Current.State = "beendet";
                                    }
                                    else
                                    {
                                        Current.State = "ab";
                                    }
                                }
                            }
                        }

                        if (IsNew)
                        {
                            Dispatcher.Invoke(() => Trains.Add(Current));
                        }

                        CurrentTrains.Add(Current);
                    }
                }
            }

            var RemovedTrains = Trains.Except(CurrentTrains).ToList();

            Dispatcher.Invoke(() => RemovedTrains.ForEach(t => Trains.Remove(t)));
        }