11using System . Reflection ;
2+ using System . Windows . Shell ;
23using CommunityToolkit . Mvvm . ComponentModel ;
34using CommunityToolkit . Mvvm . Input ;
45using ReScene . NET . Helpers ;
@@ -59,6 +60,12 @@ public FileCompareViewModel FileCompare
5960 [ ObservableProperty ]
6061 private bool _isBusy ;
6162
63+ [ ObservableProperty ]
64+ private TaskbarItemProgressState _taskbarProgressState = TaskbarItemProgressState . None ;
65+
66+ [ ObservableProperty ]
67+ private double _taskbarProgressValue ;
68+
6269 public string AppVersion { get ; } = GetAppVersion ( ) ;
6370
6471 private static string GetAppVersion ( )
@@ -77,16 +84,16 @@ private static string GetAppVersion()
7784 }
7885
7986 public MainWindowViewModel ( )
80- : this ( new SrrCreationService ( ) , new SrsCreationService ( ) , new SrsReconstructionService ( ) , new SampleRestorerService ( new TempDirectoryService ( ) ) , new BruteForceService ( ) , new FileCompareService ( ) , new FileDialogService ( ) , new RecentFilesService ( ) , new TempDirectoryService ( ) )
87+ : this ( new SrrCreationService ( ) , new SrsCreationService ( ) , new SrsReconstructionService ( ) , new SampleRestorerService ( new TempDirectoryService ( ) ) , new BruteForceService ( ) , new FileCompareService ( ) , new FileDialogService ( ) , new RecentFilesService ( ) , new TempDirectoryService ( ) , new SrrEditingService ( ) )
8188 {
8289 }
8390
84- public MainWindowViewModel ( ISrrCreationService srrService , ISrsCreationService srsService , ISrsReconstructionService srsReconService , ISampleRestorerService sampleRestorerService , IBruteForceService bruteForceService , IFileCompareService fileCompareService , IFileDialogService fileDialog , IRecentFilesService recentFiles , ITempDirectoryService tempDir )
91+ public MainWindowViewModel ( ISrrCreationService srrService , ISrsCreationService srsService , ISrsReconstructionService srsReconService , ISampleRestorerService sampleRestorerService , IBruteForceService bruteForceService , IFileCompareService fileCompareService , IFileDialogService fileDialog , IRecentFilesService recentFiles , ITempDirectoryService tempDir , ISrrEditingService srrEditingService )
8592 {
8693 _fileDialog = fileDialog ;
8794 _recentFiles = recentFiles ;
8895
89- Inspector = new InspectorViewModel ( fileDialog ) ;
96+ Inspector = new InspectorViewModel ( fileDialog , srrEditingService ) ;
9097 Creator = new CreatorViewModel ( srrService , srsService , fileDialog , tempDir ) ;
9198 SrsCreator = new SrsCreatorViewModel ( srsService , fileDialog , tempDir ) ;
9299 Reconstructor = new ReconstructorViewModel ( bruteForceService , fileDialog ) ;
@@ -113,41 +120,46 @@ public MainWindowViewModel(ISrrCreationService srrService, ISrsCreationService s
113120
114121 Creator . PropertyChanged += ( _ , e ) =>
115122 {
116- if ( e . PropertyName == nameof ( CreatorViewModel . IsCreating ) )
123+ if ( e . PropertyName is nameof ( CreatorViewModel . IsCreating ) or nameof ( CreatorViewModel . ProgressPercent ) )
117124 {
118125 UpdateIsBusy ( ) ;
126+ UpdateTaskbarProgress ( ) ;
119127 }
120128 } ;
121129
122130 SrsCreator . PropertyChanged += ( _ , e ) =>
123131 {
124- if ( e . PropertyName == nameof ( SrsCreatorViewModel . IsCreating ) )
132+ if ( e . PropertyName is nameof ( SrsCreatorViewModel . IsCreating ) or nameof ( SrsCreatorViewModel . ProgressPercent ) )
125133 {
126134 UpdateIsBusy ( ) ;
135+ UpdateTaskbarProgress ( ) ;
127136 }
128137 } ;
129138
130139 Reconstructor . PropertyChanged += ( _ , e ) =>
131140 {
132- if ( e . PropertyName == nameof ( ReconstructorViewModel . IsRunning ) )
141+ if ( e . PropertyName is nameof ( ReconstructorViewModel . IsRunning ) or nameof ( ReconstructorViewModel . ProgressPercent ) )
133142 {
134143 UpdateIsBusy ( ) ;
144+ UpdateTaskbarProgress ( ) ;
135145 }
136146 } ;
137147
138148 SrsReconstructor . PropertyChanged += ( _ , e ) =>
139149 {
140- if ( e . PropertyName == nameof ( SrsReconstructorViewModel . IsRebuilding ) )
150+ if ( e . PropertyName is nameof ( SrsReconstructorViewModel . IsRebuilding ) or nameof ( SrsReconstructorViewModel . ProgressPercent ) )
141151 {
142152 UpdateIsBusy ( ) ;
153+ UpdateTaskbarProgress ( ) ;
143154 }
144155 } ;
145156
146157 SampleRestorer . PropertyChanged += ( _ , e ) =>
147158 {
148- if ( e . PropertyName == nameof ( SampleRestorerViewModel . IsRestoring ) )
159+ if ( e . PropertyName is nameof ( SampleRestorerViewModel . IsRestoring ) or nameof ( SampleRestorerViewModel . ProgressPercent ) )
149160 {
150161 UpdateIsBusy ( ) ;
162+ UpdateTaskbarProgress ( ) ;
151163 }
152164 } ;
153165 }
@@ -194,6 +206,40 @@ private void UpdateIsBusy()
194206 || SampleRestorer . IsRestoring ;
195207 }
196208
209+ private void UpdateTaskbarProgress ( )
210+ {
211+ if ( Creator . IsCreating )
212+ {
213+ TaskbarProgressState = TaskbarItemProgressState . Normal ;
214+ TaskbarProgressValue = Creator . ProgressPercent / 100.0 ;
215+ }
216+ else if ( SrsCreator . IsCreating )
217+ {
218+ TaskbarProgressState = TaskbarItemProgressState . Normal ;
219+ TaskbarProgressValue = SrsCreator . ProgressPercent / 100.0 ;
220+ }
221+ else if ( Reconstructor . IsRunning )
222+ {
223+ TaskbarProgressState = TaskbarItemProgressState . Normal ;
224+ TaskbarProgressValue = Reconstructor . ProgressPercent / 100.0 ;
225+ }
226+ else if ( SrsReconstructor . IsRebuilding )
227+ {
228+ TaskbarProgressState = TaskbarItemProgressState . Normal ;
229+ TaskbarProgressValue = SrsReconstructor . ProgressPercent / 100.0 ;
230+ }
231+ else if ( SampleRestorer . IsRestoring )
232+ {
233+ TaskbarProgressState = TaskbarItemProgressState . Normal ;
234+ TaskbarProgressValue = SampleRestorer . ProgressPercent / 100.0 ;
235+ }
236+ else
237+ {
238+ TaskbarProgressState = TaskbarItemProgressState . None ;
239+ TaskbarProgressValue = 0 ;
240+ }
241+ }
242+
197243 /// <summary>
198244 /// Disposes child ViewModels that hold unmanaged resources.
199245 /// </summary>
0 commit comments