@@ -33,14 +33,16 @@ public class ImageTableViewModel : ReactiveObject, IExtraContentViewModel
3333 [ Reactive ]
3434 public ColourRemapSwatch SelectedSecondarySwatch { get ; set ; } = ColourRemapSwatch . SecondaryRemap ;
3535
36- [ Reactive ]
37- public ICommand ReplaceImageCommand { get ; set ; }
38-
3936 [ Reactive ]
4037 public ICommand ImportImagesCommand { get ; set ; }
4138
4239 [ Reactive ]
4340 public ICommand ExportImagesCommand { get ; set ; }
41+ [ Reactive ]
42+ public ICommand ReplaceImageCommand { get ; set ; }
43+
44+ [ Reactive ]
45+ public ICommand CropImageCommand { get ; set ; }
4446
4547 [ Reactive ]
4648 public ICommand CropAllImagesCommand { get ; set ; }
@@ -81,7 +83,7 @@ public ImageTableViewModel(IList<GraphicsElement> graphicsElements, IImageTableN
8183 foreach ( var ge in graphicsElements )
8284 {
8385 var success = imageNameProvider . TryGetImageName ( index , out var imageName ) ;
84- ImageViewModels . Add ( new ImageViewModel ( index , success ? imageName ! : "failed to get image name ", ge , paletteMap ) ) ;
86+ ImageViewModels . Add ( new ImageViewModel ( index , success ? imageName ! : $ " { index } -unnamed ", ge , paletteMap ) ) ;
8587 index ++ ;
8688 }
8789
@@ -103,9 +105,9 @@ public ImageTableViewModel(IList<GraphicsElement> graphicsElements, IImageTableN
103105 _ = this . WhenAnyValue ( o => o . SelectedImageIndex )
104106 . Subscribe ( index =>
105107 {
106- SelectedImage = index < 0 || index >= ImageViewModels . Count
107- ? null
108- : ImageViewModels [ SelectedImageIndex ] ;
108+ SelectedImage = SelectedImageIndexIsValid ( )
109+ ? ImageViewModels [ SelectedImageIndex ]
110+ : null ;
109111 } ) ;
110112
111113 _ = this . WhenAnyValue ( o => o . AnimationSpeed )
@@ -115,6 +117,7 @@ public ImageTableViewModel(IList<GraphicsElement> graphicsElements, IImageTableN
115117 ImportImagesCommand = ReactiveCommand . CreateFromTask ( ImportImages ) ;
116118 ExportImagesCommand = ReactiveCommand . CreateFromTask ( ExportImages ) ;
117119 ReplaceImageCommand = ReactiveCommand . CreateFromTask ( ReplaceImage ) ;
120+ CropImageCommand = ReactiveCommand . Create ( CropImage ) ;
118121 CropAllImagesCommand = ReactiveCommand . Create ( CropAllImages ) ;
119122
120123 ZeroOffsetAllImagesCommand = ReactiveCommand . Create ( ( ) =>
@@ -144,6 +147,9 @@ public ImageTableViewModel(IList<GraphicsElement> graphicsElements, IImageTableN
144147 animationTimer . Start ( ) ;
145148 }
146149
150+ bool SelectedImageIndexIsValid ( )
151+ => SelectedImageIndex >= 0 && SelectedImageIndex < ImageViewModels . Count ;
152+
147153 void SelectionChanged ( object sender , SelectionModelSelectionChangedEventArgs e )
148154 {
149155 var sm = ( SelectionModel < ImageViewModel > ) sender ;
@@ -241,12 +247,27 @@ public async Task ReplaceImage()
241247 // model stuff
242248 public void RecolourImages ( ColourRemapSwatch primary , ColourRemapSwatch secondary )
243249 {
250+ if ( SelectedImageIndexIsValid ( ) )
251+ {
252+ return ;
253+ }
254+
244255 foreach ( var ivm in ImageViewModels )
245256 {
246257 ivm . RecolourImage ( primary , secondary ) ;
247258 }
248259 }
249260
261+ public void CropImage ( )
262+ {
263+ if ( ! SelectedImageIndexIsValid ( ) )
264+ {
265+ return ;
266+ }
267+
268+ ImageViewModels [ SelectedImageIndex ] . CropImage ( ) ;
269+ }
270+
250271 public void CropAllImages ( )
251272 {
252273 foreach ( var ivm in ImageViewModels )
0 commit comments