Skip to content

Commit 11284b2

Browse files
committed
Workflow change to support new ImageViewer.Image events
1 parent 0aef5e9 commit 11284b2

File tree

1 file changed

+78
-54
lines changed

1 file changed

+78
-54
lines changed

ImageViewer/Library/Context.cs

+78-54
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,6 @@ internal enum ImageInfos
3535
internal class Context
3636
{
3737
private static Context _Instance;
38-
39-
private readonly string[] FileTypes = { ".jpg", ".jpeg", ".bmp", ".png", ".gif", ".tif", ".ico", ".webp", ".svg" };
40-
private readonly string[] SaveTypes = { ".jpg", ".png", ".webp" };
41-
4238
private string[] FolderFiles;
4339
private int CurrentIndex;
4440
private bool MemoryOnly;
@@ -61,7 +57,7 @@ public void ChangeTheme(ElementTheme theme)
6157
/// </summary>
6258
public bool CheckFileExtension(string path)
6359
{
64-
return FileTypes.Any(x => path.EndsWith(x, true, null));
60+
return Image.SupportedFileTypes.Any(x => path.EndsWith(x, true, null));
6561
}
6662

6763
/// <summary>
@@ -89,7 +85,7 @@ public void LoadDirectoryFiles()
8985
if(!string.IsNullOrEmpty(CurrentFilePath))
9086
{
9187
FolderFiles = Directory.EnumerateFiles(Path.GetDirectoryName(CurrentFilePath), "*.*", SearchOption.TopDirectoryOnly)
92-
.Where(s => FileTypes.Any(x => s.EndsWith(x, true, null)))
88+
.Where(s => Image.SupportedFileTypes.Any(x => s.EndsWith(x, true, null)))
9389
.OrderBy(s => s, new NaturalStringComparer())
9490
.ToArray();
9591

@@ -160,7 +156,7 @@ public async void LoadImageFromPicker()
160156
{
161157
FileOpenPicker openFilePicker = new();
162158

163-
foreach(string fileType in FileTypes)
159+
foreach(string fileType in Image.SupportedFileTypes)
164160
{
165161
openFilePicker.FileTypeFilter.Add(fileType);
166162
}
@@ -174,7 +170,7 @@ public async void LoadImageFromPicker()
174170

175171
MemoryOnly = false;
176172

177-
LoadImage();
173+
OpenImage();
178174
LoadDirectoryFiles();
179175
}
180176

@@ -187,7 +183,7 @@ public async void LoadImageFromBuffer(RandomAccessStreamReference clipboard)
187183
MemoryOnly = true;
188184

189185
MainWindow.SplitViewContainer.IsPaneOpen = false;
190-
LoadImage(await clipboard.OpenReadAsync());
186+
OpenImage(await clipboard.OpenReadAsync());
191187

192188
MainWindow.UpdateTitle(Culture.GetString("SYSTEM_PASTED_CONTENT"));
193189
}
@@ -202,7 +198,7 @@ public bool LoadImageFromString(string imagePath, bool reloadDirectories = false
202198
CurrentFilePath = imagePath;
203199
MemoryOnly = false;
204200

205-
LoadImage();
201+
OpenImage();
206202

207203
if(reloadDirectories)
208204
{
@@ -223,7 +219,6 @@ public void UpdateFileInfo()
223219
MainWindow.TextBlockInfoDate.Text = data[ImageInfos.FileDate];
224220
MainWindow.TextBlockInfoDimensions.Text = data[ImageInfos.ImageDimensions];
225221
MainWindow.TextBlockInfoSize.Text = data[ImageInfos.ImageSize];
226-
MainWindow.TextBlockInfoDpi.Text = data[ImageInfos.ImageDpi];
227222
MainWindow.TextBlockInfoDepth.Text = data[ImageInfos.ImageDepth];
228223
MainWindow.TextBlockInfoFolder.Text = data[ImageInfos.FolderPath];
229224
}
@@ -239,7 +234,6 @@ public Dictionary<ImageInfos, string> GetFileInfos()
239234
{ ImageInfos.FileDate, "" },
240235
{ ImageInfos.ImageDimensions, "" },
241236
{ ImageInfos.ImageSize, "" },
242-
{ ImageInfos.ImageDpi, "" },
243237
{ ImageInfos.ImageDepth, "" },
244238
{ ImageInfos.FolderPath, "" }
245239
};
@@ -253,7 +247,6 @@ public Dictionary<ImageInfos, string> GetFileInfos()
253247
dict[ImageInfos.FileDate] = File.GetLastWriteTime(CurrentFilePath).ToString(CultureInfo.CurrentCulture);
254248
dict[ImageInfos.ImageSize] = HumanizeBytes(oFileInfo.Length);
255249
dict[ImageInfos.ImageDimensions] = CurrentImage.GetImageDimensionsAsString();
256-
dict[ImageInfos.ImageDpi] = CurrentImage.GetDpiAsString();
257250
dict[ImageInfos.ImageDepth] = CurrentImage.GetDepthAsString();
258251

259252
return dict;
@@ -305,6 +298,12 @@ public void DeleteImage()
305298
/// </summary>
306299
public void LoadingDisplay(bool status)
307300
{
301+
if(status)
302+
{
303+
MainWindow.GlobalErrorMessage.Visibility = Visibility.Collapsed;
304+
MainWindow.GlobalErrorMessageFileName.Text = "";
305+
}
306+
308307
MainWindow.ImageLoadingIndicator.IsActive = status;
309308
MainWindow.ImageView.Opacity = status ? 0 : 1;
310309

@@ -389,6 +388,8 @@ public void UpdateButtonsAccessiblity()
389388

390389
MainWindow.ButtonImageDelete.IsEnabled = true;
391390
MainWindow.ButtonFileSave.IsEnabled = true;
391+
392+
MainWindow.ButtonFileInfo.IsEnabled = CurrentFilePath != null;
392393
}
393394
else
394395
{
@@ -401,6 +402,8 @@ public void UpdateButtonsAccessiblity()
401402

402403
MainWindow.ButtonImageDelete.IsEnabled = false;
403404
MainWindow.ButtonFileSave.IsEnabled = false;
405+
406+
MainWindow.ButtonFileInfo.IsEnabled = false;
404407
}
405408

406409
if(FolderFiles is { Length: > 1 })
@@ -414,8 +417,6 @@ public void UpdateButtonsAccessiblity()
414417
MainWindow.ButtonImageNext.IsEnabled = false;
415418
}
416419

417-
MainWindow.ButtonFileInfo.IsEnabled = CurrentFilePath != null;
418-
419420
MainWindow.ButtonImageTransformFlipHorizontal.IsEnabled = MainWindow.ButtonImageTransform.IsEnabled;
420421
MainWindow.ButtonImageTransformFlipVertical.IsEnabled = MainWindow.ButtonImageTransform.IsEnabled;
421422
MainWindow.ButtonImageTransformRotateLeft.IsEnabled = MainWindow.ButtonImageTransform.IsEnabled;
@@ -472,21 +473,27 @@ public async void SaveAs()
472473
{
473474
if(!HasImageLoaded()) return;
474475

475-
FileSavePicker saveFilePicker = new()
476+
FileSavePicker saveFilePicker = new();
477+
478+
if(CurrentFilePath != null)
476479
{
477-
SuggestedFileName = Path.GetFileNameWithoutExtension(CurrentFilePath)
478-
};
480+
saveFilePicker.SuggestedFileName = Path.GetFileNameWithoutExtension(CurrentFilePath);
481+
}
482+
else
483+
{
484+
saveFilePicker.SuggestedFileName = DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss");
485+
}
479486

480-
foreach(string fileType in SaveTypes)
487+
foreach(string fileType in Image.SaveFileTypes)
481488
{
482-
saveFilePicker.FileTypeChoices.Add(fileType, new List<string>(){ fileType });
489+
saveFilePicker.FileTypeChoices.Add(Culture.GetString("FOOTER_TOOLBAR_MENU_FILE_SAVE_FORMAT").Replace("{0}", fileType.Remove(0, 1).ToUpper()), new List<string>(){ fileType });
483490
}
484491

485492
InitializeWithWindow.Initialize(saveFilePicker, WindowNative.GetWindowHandle(MainWindow));
486493
StorageFile outputFile = await saveFilePicker.PickSaveFileAsync();
487494

488495
if(outputFile == null) return;
489-
if(!SaveTypes.Contains(outputFile.FileType)) return;
496+
if(!Image.SaveFileTypes.Contains(outputFile.FileType)) return;
490497

491498
CurrentImage.Save(outputFile.Path, outputFile.FileType);
492499

@@ -505,80 +512,97 @@ public void ReloadImageView()
505512
CreateOptions = BitmapCreateOptions.IgnoreImageCache,
506513
};
507514

508-
bitmapImage.ImageOpened += CurrentImage_ImageOpened;
509-
bitmapImage.ImageFailed += CurrentImage_ImageFailed;
515+
bitmapImage.ImageOpened += ImageView_ImageOpened;
516+
bitmapImage.ImageFailed += ImageView_ImageFailed;
510517

511518
MainWindow.ImageView.Source = bitmapImage;
512519

513520
bitmapImage.SetSource(CurrentImage.GetBitmapImageSource());
514521
}
515522

516523
/// <summary>
517-
/// Load current image
524+
/// Event: When image view is loaded and ready.
518525
/// </summary>
519-
private void LoadImage(IInputStream stream = null)
526+
private void ImageView_ImageOpened(object sender, RoutedEventArgs e)
520527
{
521-
CurrentImage?.Dispose();
522-
523-
LoadingDisplay(true);
524-
525-
CurrentImage = new();
526-
CurrentImage.ImageLoaded += CurrentImage_ImageLoaded;
528+
if(!HasImageLoaded()) return;
527529

528-
if(stream != null)
530+
if(CurrentFilePath != null)
529531
{
530-
CurrentImage.Load(stream);
532+
MainWindow.UpdateTitle(Path.GetFileName(CurrentFilePath));
531533
}
532-
else
534+
535+
UpdateButtonsAccessiblity();
536+
AdjustImage();
537+
538+
LoadingDisplay(false);
539+
540+
if(MainWindow.SplitViewContainer.IsPaneOpen)
533541
{
534-
CurrentImage.Load(CurrentFilePath);
542+
UpdateFileInfo();
535543
}
536544
}
537545

538546
/// <summary>
539-
/// Event: When image is loaded.
547+
/// Event: When image view loaded failed.
540548
/// </summary>
541-
private void CurrentImage_ImageLoaded(object sender, EventArgs e)
549+
private void ImageView_ImageFailed(object sender, ExceptionRoutedEventArgs e)
542550
{
543-
ReloadImageView();
551+
MainWindow.UpdateTitle();
552+
MainWindow.ImageLoadingIndicator.IsActive = false;
553+
554+
CurrentImage = null;
555+
556+
UpdateButtonsAccessiblity();
544557
}
545558

546559
/// <summary>
547-
/// Event: When image is opened.
560+
/// Load current image
548561
/// </summary>
549-
private void CurrentImage_ImageOpened(object sender, RoutedEventArgs e)
562+
private void OpenImage(IInputStream stream = null)
550563
{
551-
if(!HasImageLoaded()) return;
552-
553-
if(CurrentFilePath != null)
554-
{
555-
MainWindow.UpdateTitle(Path.GetFileName(CurrentFilePath));
556-
}
564+
CurrentImage?.Dispose();
557565

558-
UpdateButtonsAccessiblity();
559-
AdjustImage();
566+
LoadingDisplay(true);
560567

561-
LoadingDisplay(false);
568+
CurrentImage = new();
569+
CurrentImage.ImageLoaded += WorkingImage_ImageLoaded;
570+
CurrentImage.ImageFailed += WorkingImage_ImageFailed;
562571

563-
if(MainWindow.SplitViewContainer.IsPaneOpen)
572+
if(stream != null)
564573
{
565-
UpdateFileInfo();
574+
CurrentImage.Load(stream);
575+
}
576+
else
577+
{
578+
CurrentImage.Load(CurrentFilePath);
566579
}
567580
}
568581

569582
/// <summary>
570-
/// Event: When image loaded failed.
583+
/// Event: When image load failed.
571584
/// </summary>
572-
private void CurrentImage_ImageFailed(object sender, ExceptionRoutedEventArgs e)
585+
private void WorkingImage_ImageFailed(object sender, EventArgs e)
573586
{
574587
MainWindow.UpdateTitle();
588+
575589
MainWindow.ImageLoadingIndicator.IsActive = false;
590+
MainWindow.GlobalErrorMessage.Visibility = Visibility.Visible;
576591

577-
CurrentImage = null;
592+
MainWindow.GlobalErrorMessageFileName.Text = ((ImageFailedEventArgs)e).Path;
578593

594+
CurrentImage.Dispose();
579595
UpdateButtonsAccessiblity();
580596
}
581597

598+
/// <summary>
599+
/// Event: When image is loaded.
600+
/// </summary>
601+
private void WorkingImage_ImageLoaded(object sender, EventArgs e)
602+
{
603+
ReloadImageView();
604+
}
605+
582606
/// <summary>
583607
/// Round value to unit 10.
584608
/// </summary>

0 commit comments

Comments
 (0)