@@ -33,14 +33,16 @@ public class ImageTableViewModel : ReactiveObject, IExtraContentViewModel
33
33
[ Reactive ]
34
34
public ColourRemapSwatch SelectedSecondarySwatch { get ; set ; } = ColourRemapSwatch . SecondaryRemap ;
35
35
36
- [ Reactive ]
37
- public ICommand ReplaceImageCommand { get ; set ; }
38
-
39
36
[ Reactive ]
40
37
public ICommand ImportImagesCommand { get ; set ; }
41
38
42
39
[ Reactive ]
43
40
public ICommand ExportImagesCommand { get ; set ; }
41
+ [ Reactive ]
42
+ public ICommand ReplaceImageCommand { get ; set ; }
43
+
44
+ [ Reactive ]
45
+ public ICommand CropImageCommand { get ; set ; }
44
46
45
47
[ Reactive ]
46
48
public ICommand CropAllImagesCommand { get ; set ; }
@@ -81,7 +83,7 @@ public ImageTableViewModel(IList<GraphicsElement> graphicsElements, IImageTableN
81
83
foreach ( var ge in graphicsElements )
82
84
{
83
85
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 ) ) ;
85
87
index ++ ;
86
88
}
87
89
@@ -103,9 +105,9 @@ public ImageTableViewModel(IList<GraphicsElement> graphicsElements, IImageTableN
103
105
_ = this . WhenAnyValue ( o => o . SelectedImageIndex )
104
106
. Subscribe ( index =>
105
107
{
106
- SelectedImage = index < 0 || index >= ImageViewModels . Count
107
- ? null
108
- : ImageViewModels [ SelectedImageIndex ] ;
108
+ SelectedImage = SelectedImageIndexIsValid ( )
109
+ ? ImageViewModels [ SelectedImageIndex ]
110
+ : null ;
109
111
} ) ;
110
112
111
113
_ = this . WhenAnyValue ( o => o . AnimationSpeed )
@@ -115,6 +117,7 @@ public ImageTableViewModel(IList<GraphicsElement> graphicsElements, IImageTableN
115
117
ImportImagesCommand = ReactiveCommand . CreateFromTask ( ImportImages ) ;
116
118
ExportImagesCommand = ReactiveCommand . CreateFromTask ( ExportImages ) ;
117
119
ReplaceImageCommand = ReactiveCommand . CreateFromTask ( ReplaceImage ) ;
120
+ CropImageCommand = ReactiveCommand . Create ( CropImage ) ;
118
121
CropAllImagesCommand = ReactiveCommand . Create ( CropAllImages ) ;
119
122
120
123
ZeroOffsetAllImagesCommand = ReactiveCommand . Create ( ( ) =>
@@ -144,6 +147,9 @@ public ImageTableViewModel(IList<GraphicsElement> graphicsElements, IImageTableN
144
147
animationTimer . Start ( ) ;
145
148
}
146
149
150
+ bool SelectedImageIndexIsValid ( )
151
+ => SelectedImageIndex >= 0 && SelectedImageIndex < ImageViewModels . Count ;
152
+
147
153
void SelectionChanged ( object sender , SelectionModelSelectionChangedEventArgs e )
148
154
{
149
155
var sm = ( SelectionModel < ImageViewModel > ) sender ;
@@ -241,12 +247,27 @@ public async Task ReplaceImage()
241
247
// model stuff
242
248
public void RecolourImages ( ColourRemapSwatch primary , ColourRemapSwatch secondary )
243
249
{
250
+ if ( SelectedImageIndexIsValid ( ) )
251
+ {
252
+ return ;
253
+ }
254
+
244
255
foreach ( var ivm in ImageViewModels )
245
256
{
246
257
ivm . RecolourImage ( primary , secondary ) ;
247
258
}
248
259
}
249
260
261
+ public void CropImage ( )
262
+ {
263
+ if ( ! SelectedImageIndexIsValid ( ) )
264
+ {
265
+ return ;
266
+ }
267
+
268
+ ImageViewModels [ SelectedImageIndex ] . CropImage ( ) ;
269
+ }
270
+
250
271
public void CropAllImages ( )
251
272
{
252
273
foreach ( var ivm in ImageViewModels )
0 commit comments