From af750e930a2448ba78874591edcf5a3f57e37823 Mon Sep 17 00:00:00 2001 From: wxl0430 <141288415+wxl0430@users.noreply.github.com> Date: Sat, 19 Apr 2025 18:18:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=A4=A7=E5=BA=86?= =?UTF-8?q?=E4=B8=9C=E7=AB=99=E7=AB=99=E5=8F=B0=E5=B1=8F=E5=92=8C=E5=8C=97?= =?UTF-8?q?=E4=BA=AC=E7=AB=99=E5=88=B0=E8=BE=BE=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Converters/TrainStateConverter.cs | 5 +- .../Beijing/ArrivalScreenViewModel.cs | 36 ++++ .../Daqingdong/PlatfromScreenViewModel.cs | 36 ++++ .../Views/Beijing/ArrivalScreenView.xaml | 144 ++++++++++++++ .../Views/Beijing/ArrivalScreenView.xaml.cs | 36 ++++ .../Views/Daqingdong/PlatformScreenView.xaml | 187 ++++++++++++++++++ .../Daqingdong/PlatformScreenView.xaml.cs | 36 ++++ CRSim/App.xaml.cs | 6 +- .../StyleImages/Beijing/ArrivalScreen.png | Bin 0 -> 6826 bytes .../StyleImages/Daqingdong/PlatformScreen.png | Bin 0 -> 5174 bytes CRSim/CRSim.csproj | 2 + CRSim/Models/StylesInfoData.json | 25 +++ 12 files changed, 510 insertions(+), 3 deletions(-) create mode 100644 CRSim.ScreenSimulator/ViewModels/Beijing/ArrivalScreenViewModel.cs create mode 100644 CRSim.ScreenSimulator/ViewModels/Daqingdong/PlatfromScreenViewModel.cs create mode 100644 CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml create mode 100644 CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml.cs create mode 100644 CRSim.ScreenSimulator/Views/Daqingdong/PlatformScreenView.xaml create mode 100644 CRSim.ScreenSimulator/Views/Daqingdong/PlatformScreenView.xaml.cs create mode 100644 CRSim/Assets/StyleImages/Beijing/ArrivalScreen.png create mode 100644 CRSim/Assets/StyleImages/Daqingdong/PlatformScreen.png diff --git a/CRSim.ScreenSimulator/Converters/TrainStateConverter.cs b/CRSim.ScreenSimulator/Converters/TrainStateConverter.cs index 87ebd50..a9f3394 100644 --- a/CRSim.ScreenSimulator/Converters/TrainStateConverter.cs +++ b/CRSim.ScreenSimulator/Converters/TrainStateConverter.cs @@ -22,12 +22,13 @@ namespace CRSim.ScreenSimulator.Converters var serviceProvider = (IServiceProvider)Application.Current.Resources["ServiceProvider"]; _timeService = serviceProvider.GetRequiredService(); _settings = serviceProvider.GetRequiredService().GetSettings(); - if (DisplayMode == "Arrive" || values[1] == null) + if (DisplayMode == "Arrive" || ( values.Length > 1 && values[1] == null)) { if (values[0] is DateTime arriveTime) { return _timeService.GetDateTimeNow() > arriveTime ? ArrivedText : ArrivingText; } + return string.Empty; } if (values[1] is DateTime departureTime && departureTime != new DateTime()) { @@ -66,4 +67,4 @@ namespace CRSim.ScreenSimulator.Converters return null; } } -} +} \ No newline at end of file diff --git a/CRSim.ScreenSimulator/ViewModels/Beijing/ArrivalScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Beijing/ArrivalScreenViewModel.cs new file mode 100644 index 0000000..0bccc48 --- /dev/null +++ b/CRSim.ScreenSimulator/ViewModels/Beijing/ArrivalScreenViewModel.cs @@ -0,0 +1,36 @@ +using CRSim.Core.Models; +using CRSim.Core.Services; +using CRSim.ScreenSimulator.Models; +using System.Collections.ObjectModel; +using System.Windows; +namespace CRSim.ScreenSimulator.ViewModels.Beijing +{ + public class ArrivalScreenViewModel : ScreenViewModel + { + public ObservableCollection Screen { get; set; } = []; + public ArrivalScreenViewModel(ITimeService timeService, ISettingsService settingsService) + : base(timeService, settingsService) + { + StationType = StationType.Departure; + timeService.RefreshSecondsElapsed += RefreshDisplay; + Initialize(); + } + private async void Initialize() + { + ItemsPerPage = 2; + await WaitForDataLoadAsync(); + RefreshDisplay(null,null); + } + private void RefreshDisplay(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Screen.Clear(); + for (int i = 0; i < ItemsPerPage; i++) + { + Screen.Add(TrainInfo.Count > i ? TrainInfo[i] : new()); + } + }); + } + } +} diff --git a/CRSim.ScreenSimulator/ViewModels/Daqingdong/PlatfromScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/Daqingdong/PlatfromScreenViewModel.cs new file mode 100644 index 0000000..f2a2e15 --- /dev/null +++ b/CRSim.ScreenSimulator/ViewModels/Daqingdong/PlatfromScreenViewModel.cs @@ -0,0 +1,36 @@ +using CRSim.Core.Models; +using CRSim.Core.Services; +using CRSim.ScreenSimulator.Models; +using System.Collections.ObjectModel; +using System.Windows; +namespace CRSim.ScreenSimulator.ViewModels.Daqingdong +{ + public class PlatformScreenViewModel : ScreenViewModel + { + public ObservableCollection Screen { get; set; } = []; + public PlatformScreenViewModel(ITimeService timeService, ISettingsService settingsService) + : base(timeService, settingsService) + { + StationType = StationType.Departure; + timeService.RefreshSecondsElapsed += RefreshDisplay; + Initialize(); + } + private async void Initialize() + { + ItemsPerPage = 3; + await WaitForDataLoadAsync(); + RefreshDisplay(null,null); + } + private void RefreshDisplay(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Screen.Clear(); + for (int i = 0; i < ItemsPerPage; i++) + { + Screen.Add(TrainInfo.Count > i ? TrainInfo[i] : new()); + } + }); + } + } +} diff --git a/CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml b/CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml new file mode 100644 index 0000000..2a797df --- /dev/null +++ b/CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml.cs b/CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml.cs new file mode 100644 index 0000000..0cedb4a --- /dev/null +++ b/CRSim.ScreenSimulator/Views/Beijing/ArrivalScreenView.xaml.cs @@ -0,0 +1,36 @@ +using CRSim.ScreenSimulator.ViewModels.Beijing; +using System.Windows; +using System.Windows.Input; +using System.Windows.Media; +namespace CRSim.ScreenSimulator.Views.Beijing +{ + /// + /// SecondaryScreen.xaml 的交互逻辑 + /// + public partial class ArrivalScreenView : Window + { + public ArrivalScreenViewModel ViewModel { get; } + public ArrivalScreenView(ArrivalScreenViewModel viewModel) + { + InitializeComponent(); + RenderOptions.SetEdgeMode(this, EdgeMode.Aliased); + ViewModel = viewModel; + DataContext = viewModel; + } + private void Window_MouseDown(object sender, MouseButtonEventArgs e) + { + if (e.ChangedButton == MouseButton.Left) + { + DragMove(); + } + } + + private void Window_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Escape) + { + Close(); + } + } + } +} diff --git a/CRSim.ScreenSimulator/Views/Daqingdong/PlatformScreenView.xaml b/CRSim.ScreenSimulator/Views/Daqingdong/PlatformScreenView.xaml new file mode 100644 index 0000000..7dc9031 --- /dev/null +++ b/CRSim.ScreenSimulator/Views/Daqingdong/PlatformScreenView.xaml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CRSim.ScreenSimulator/Views/Daqingdong/PlatformScreenView.xaml.cs b/CRSim.ScreenSimulator/Views/Daqingdong/PlatformScreenView.xaml.cs new file mode 100644 index 0000000..0a7e272 --- /dev/null +++ b/CRSim.ScreenSimulator/Views/Daqingdong/PlatformScreenView.xaml.cs @@ -0,0 +1,36 @@ +using CRSim.ScreenSimulator.ViewModels.Daqingdong; +using System.Windows; +using System.Windows.Input; +using System.Windows.Media; +namespace CRSim.ScreenSimulator.Views.Daqingdong +{ + /// + /// SecondaryScreen.xaml 的交互逻辑 + /// + public partial class PlatformScreenView : Window + { + public PlatformScreenViewModel ViewModel { get; } + public PlatformScreenView(PlatformScreenViewModel viewModel) + { + InitializeComponent(); + RenderOptions.SetEdgeMode(this, EdgeMode.Aliased); + ViewModel = viewModel; + DataContext = viewModel; + } + private void Window_MouseDown(object sender, MouseButtonEventArgs e) + { + if (e.ChangedButton == MouseButton.Left) + { + DragMove(); + } + } + + private void Window_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Escape) + { + Close(); + } + } + } +} diff --git a/CRSim/App.xaml.cs b/CRSim/App.xaml.cs index d6b57c4..a387260 100644 --- a/CRSim/App.xaml.cs +++ b/CRSim/App.xaml.cs @@ -67,7 +67,7 @@ services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); @@ -81,6 +81,10 @@ services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); }).Build(); [STAThread] diff --git a/CRSim/Assets/StyleImages/Beijing/ArrivalScreen.png b/CRSim/Assets/StyleImages/Beijing/ArrivalScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b261a2f685eb0ff27eaf3bea1cf5fc3012dc76 GIT binary patch literal 6826 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 ST;c!q5ooFFtJSGE#{L&8YbE3W literal 0 HcmV?d00001 diff --git a/CRSim/CRSim.csproj b/CRSim/CRSim.csproj index d130a36..3355b5b 100644 --- a/CRSim/CRSim.csproj +++ b/CRSim/CRSim.csproj @@ -72,6 +72,8 @@ + + diff --git a/CRSim/Models/StylesInfoData.json b/CRSim/Models/StylesInfoData.json index 71a59c0..f15868e 100644 --- a/CRSim/Models/StylesInfoData.json +++ b/CRSim/Models/StylesInfoData.json @@ -259,5 +259,30 @@ "Station", "Text" ] + }, + { + "UniqueId": "Beijing.ArrivalScreen", + "Title": "北京站到达看板", + "Station": "北京", + "Author": "wxl0430", + "Type": "到达屏(站台)", + "ImagePath": "Assets/StyleImages/Beijing/ArrivalScreen.png", + "Parameters": [ + "Station", + "Platform" + ] + }, + { + "UniqueId": "Daqingdong.PlatformScreen", + "Title": "大庆东站站台看板", + "Station": "大庆东", + "Author": "wxl0430", + "Type": "站台屏", + "ImagePath": "Assets/StyleImages/Daqingdong/PlatformScreen.png", + "Parameters": [ + "Station", + "Platform", + "Location" + ] } ] \ No newline at end of file