diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..09c66b8
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,6 @@
+# CSharp formatting rules:
+[*.cs]
+csharp_new_line_before_open_brace = none
+csharp_new_line_before_else = false
+csharp_new_line_before_catch = false
+csharp_new_line_before_finally = false
\ No newline at end of file
diff --git a/Photomator/AppInfo.cs b/Photomator/AppInfo.cs
index 929d589..58c4f3c 100644
--- a/Photomator/AppInfo.cs
+++ b/Photomator/AppInfo.cs
@@ -1,9 +1,10 @@
-public class AppInfo
-{
- public static readonly string ApplicationName = "Photomator";
- public static readonly string IconName = "de.cantorgymnasium.Photomator";
- public static readonly string Version = ThisAssembly.Git.Tag;
- public static readonly string ReleaseNotes = @"
+namespace Photomator;
+
+public static class AppInfo {
+ public static readonly string ApplicationName = "Photomator";
+ public static readonly string IconName = "de.cantorgymnasium.Photomator";
+ public static readonly string Version = ThisAssembly.Git.Tag;
+ public static readonly string ReleaseNotes = @"
0.0.1
Initial release
@@ -12,8 +13,8 @@ public class AppInfo
- Windows support
";
- public static readonly string Copyright = "© 2024 Denys Konovalov";
- public static readonly string DeveloperName = "Denys Konovalov";
- public static readonly string Website = "https://git.cantorgymnasium.de/gcg/Photomator";
- public static readonly string IssueUrl = "https://git.cantorgymnasium.de/gcg/Photomator/issues";
+ public static readonly string Copyright = "© 2024 Denys Konovalov";
+ public static readonly string DeveloperName = "Denys Konovalov";
+ public static readonly string Website = "https://git.cantorgymnasium.de/gcg/Photomator";
+ public static readonly string IssueUrl = "https://git.cantorgymnasium.de/gcg/Photomator/issues";
}
\ No newline at end of file
diff --git a/Photomator/Lib.cs b/Photomator/Lib.cs
index beae214..a7d1336 100644
--- a/Photomator/Lib.cs
+++ b/Photomator/Lib.cs
@@ -4,49 +4,35 @@ using SixLabors.ImageSharp.Processing;
namespace Photomator;
-public class Lib
-{
- public static async Task Convert(string src, string dest, ConvertOptions options)
- {
+public static class Lib {
+ public static async Task Convert(string src, string dest, ConvertOptions options) {
Image img = await Image.LoadAsync(src);
- img.Mutate(i =>
- {
+ img.Mutate(i => {
i.AutoOrient();
Size currentSize = i.GetCurrentSize();
- if (currentSize.Height > currentSize.Width)
- {
+ if (currentSize.Height > currentSize.Width) {
i.Resize(options.Resolution, 0);
- }
- else
- {
+ } else {
i.Resize(0, options.Resolution);
}
});
- await img.SaveAsWebpAsync(dest, new WebpEncoder
- {
+ await img.SaveAsWebpAsync(dest, new WebpEncoder {
FileFormat = options.Format
});
}
- public static async Task ConvertList(string[] src, string dest, ConvertOptions options, Action setProgress)
- {
+ public static async Task ConvertList(string[] src, string dest, ConvertOptions options, Action setProgress) {
double progress = 0;
List unconverted = [];
- await Parallel.ForEachAsync(src, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, async (path, _) =>
- {
- string filename = path.Split(Path.DirectorySeparatorChar).Last();
+ await Parallel.ForEachAsync(src, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, async (path, _) => {
+ string filename = path.Split(Path.DirectorySeparatorChar)[^1];
string[] splitted = filename.Split('.');
splitted[^1] = "webp";
- try
- {
+ try {
await Convert(path, dest + Path.DirectorySeparatorChar + string.Join(".", splitted), options);
- }
- catch (UnknownImageFormatException)
- {
+ } catch (UnknownImageFormatException) {
unconverted.Add(new ConvertError(filename, "Das Dateiformat wird nicht unterstützt."));
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
unconverted.Add(new ConvertError(filename, e.Message));
}
progress += 1.0 / src.Length;
@@ -56,14 +42,12 @@ public class Lib
}
}
-public readonly struct ConvertOptions(string? resolution, uint format)
-{
+public readonly struct ConvertOptions(string? resolution, uint format) {
public int Resolution { get; init; } = resolution != null ? Convert.ToInt32(resolution) : 1440;
public WebpFileFormatType Format { get; init; } = format == 1 ? WebpFileFormatType.Lossless : WebpFileFormatType.Lossy;
}
-public readonly struct ConvertError(string file, string message)
-{
+public readonly struct ConvertError(string file, string message) {
public string File { get; init; } = file;
public string Message { get; init; } = message;
}
\ No newline at end of file
diff --git a/Photomator/Program.cs b/Photomator/Program.cs
index 8727993..732b83e 100644
--- a/Photomator/Program.cs
+++ b/Photomator/Program.cs
@@ -3,37 +3,26 @@ using Photomator.Views;
namespace Photomator;
-public partial class Program
-{
+public partial class Program {
public delegate void OpenCallback(nint application, nint[] files, int n_files, nint hint, nint data);
private readonly Adw.Application _application;
public static int Main() => new Program().Run();
- public Program()
- {
+ public Program() {
_application = Adw.Application.New("de.cantorgymnasium.Photomator", Gio.ApplicationFlags.FlagsNone);
Gtk.Window.SetDefaultIconName("de.cantorgymnasium.Photomator");
if (File.Exists(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!) + "/de.cantorgymnasium.Photomator.gresource"))
- {
Gio.Functions.ResourcesRegister(Gio.Functions.ResourceLoad(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!) + "/de.cantorgymnasium.Photomator.gresource"));
- }
- else
- {
+ else {
var prefixes = new List {
Directory.GetParent(Directory.GetParent(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!))!.FullName)!.FullName,
Directory.GetParent(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!))!.FullName,
"/usr"
};
- foreach (var prefix in prefixes)
- {
- if (File.Exists(prefix + "/share/de.cantorgymnasium.Photomator/de.cantorgymnasium.Photomator.gresource"))
- {
- Gio.Functions.ResourcesRegister(Gio.Functions.ResourceLoad(Path.GetFullPath(prefix + "/share/de.cantorgymnasium.Photomator/de.cantorgymnasium.Photomator.gresource")));
- break;
- }
- }
+ string? prefix = prefixes.Find(prefix => File.Exists(prefix + "/share/de.cantorgymnasium.Photomator/de.cantorgymnasium.Photomator.gresource"));
+ Gio.Functions.ResourcesRegister(Gio.Functions.ResourceLoad(Path.GetFullPath(prefix + "/share/de.cantorgymnasium.Photomator/de.cantorgymnasium.Photomator.gresource")));
}
_application.OnActivate += (_, _) => new MainWindow(_application).Start();
}
diff --git a/Photomator/Views/MainWindow.cs b/Photomator/Views/MainWindow.cs
index 6a36c76..4262240 100644
--- a/Photomator/Views/MainWindow.cs
+++ b/Photomator/Views/MainWindow.cs
@@ -1,32 +1,25 @@
using Gtk;
using Adw;
using System.Text;
+using GLib;
namespace Photomator.Views;
-public partial class MainWindow : Adw.ApplicationWindow
-{
+public partial class MainWindow : Adw.ApplicationWindow {
private readonly Adw.Application _application;
- public MainWindow(Adw.Application application) : base()
- {
+ public MainWindow(Adw.Application application) : base() {
_application = application;
SetTitle(AppInfo.ApplicationName);
SetIconName(AppInfo.IconName);
- PreferencesPage layoutSingle = InitPageSingle();
- PreferencesPage layoutFolder = InitPageFolder();
+ PreferencesPage pageSingle = InitPageSingle();
+ PreferencesPage pageFolder = InitPageFolder();
ViewStack viewStack = ViewStack.New();
- viewStack.Add(layoutSingle);
- ViewStackPage pageSingle = viewStack.GetPage(layoutSingle);
- pageSingle.SetTitle("Einzelne Datei");
- pageSingle.SetIconName("image-x-generic-symbolic");
- viewStack.Add(layoutFolder);
- ViewStackPage pageFolder = viewStack.GetPage(layoutFolder);
- pageFolder.SetTitle("Ordner");
- pageFolder.SetIconName("folder-symbolic");
+ viewStack.AddTitledWithIcon(pageSingle, "page-single", "Einzelne Datei", "image-x-generic-symbolic");
+ viewStack.AddTitledWithIcon(pageFolder, "page-folder", "Ordner", "folder-symbolic");
ViewSwitcher viewSwitcher = ViewSwitcher.New();
viewSwitcher.SetStack(viewStack);
@@ -50,22 +43,20 @@ public partial class MainWindow : Adw.ApplicationWindow
SetContent(view);
}
- public void Start()
- {
+ public void Start() {
_application.AddWindow(this);
Present();
}
- public PreferencesPage InitPageSingle()
- {
+ public PreferencesPage InitPageSingle() {
PreferencesPage page = PreferencesPage.New();
- PreferencesGroup pgSelect = PreferencesGroup.New();
- pgSelect.SetTitle("Bild");
- pgSelect.SetDescription("Als Eingabeformate werden BMP, GIF, JPEG, PBM, PNG, TIFF, TGA und WebP unterstützt.");
- EntryRow erSelect = EntryRow.New();
- erSelect.SetTitle("Zu konvertierendes Bild");
- erSelect.SetEditable(false);
+ PreferencesGroup pgSource = PreferencesGroup.New();
+ pgSource.SetTitle("Bild");
+ pgSource.SetDescription("Als Eingabeformate werden BMP, GIF, JPEG, PBM, PNG, TIFF, TGA und WebP unterstützt.");
+ EntryRow erSource = EntryRow.New();
+ erSource.SetTitle("Zu konvertierendes Bild");
+ erSource.SetEditable(false);
PreferencesGroup pgOptions = PreferencesGroup.New();
pgOptions.SetTitle("Optionen");
@@ -89,8 +80,7 @@ public partial class MainWindow : Adw.ApplicationWindow
pgBtn.SetValign(Align.Center);
pgBtn.SetHalign(Align.Center);
Button btnConvert = Button.NewWithLabel("Konvertieren");
- btnConvert.OnClicked += async (_, _) =>
- {
+ btnConvert.OnClicked += async (_, _) => {
FileDialog fileDialog = FileDialog.New();
Gio.ListStore listStore = Gio.ListStore.New(FileFilter.GetGType());
FileFilter filter = FileFilter.New();
@@ -100,21 +90,16 @@ public partial class MainWindow : Adw.ApplicationWindow
listStore.Append(filter);
fileDialog.SetFilters(listStore);
Gio.File? file;
- try
- {
+ try {
file = await fileDialog.SaveAsync(this);
- }
- catch
- {
+ } catch {
file = null;
}
- if (file != null && file.GetPath() != null)
- {
+ if (file != null && file.GetPath() != null) {
ConvertOptions options = new(resOptions.GetString(crRes.GetSelected()), crFormat.GetSelected());
- await Lib.Convert(erSelect.GetText(), file.GetPath()!, options);
- }
- else
+ await Lib.Convert(erSource.GetText(), file.GetPath()!, options);
+ } else
InitInfoAlert("Kein Ziel ausgewählt", "Es wurde keine Zieldatei ausgewählt. Konvertierung wird abgebrochen.");
};
btnConvert.SetCssClasses(["pill", "suggested-action", "long"]);
@@ -125,63 +110,33 @@ public partial class MainWindow : Adw.ApplicationWindow
btnSelect.SetValign(Align.Center);
btnSelect.AddCssClass("flat");
btnSelect.SetIconName("document-open-symbolic");
- btnSelect.OnClicked += async (_, _) =>
- {
+ btnSelect.OnClicked += async (_, _) => {
FileDialog fileDialog = FileDialog.New();
- Gio.ListStore listStore = Gio.ListStore.New(FileFilter.GetGType());
- FileFilter filterAll = FileFilter.New();
- filterAll.SetName("Alle unterstützten Bildformate");
- string[][] formats = [["bmp", "dib"], ["gif"], ["jpeg", "jpg", "jpe", "jfif"], ["pbm"], ["png"], ["tiff", "tif"], ["tga", "bpx", "icb", "pix"], ["webp"]];
- foreach (string[] format in formats)
- {
- FileFilter filter = FileFilter.New();
- StringBuilder name = new($"{format[0].ToUpper()} (");
- for (int i = 0; i < format.Length; i++)
- {
- name.Append($"*.{format[i]}");
- if (i != format.Length - 1)
- name.Append(", ");
- filter.AddPattern($"*.{format[i]}");
- filterAll.AddPattern($"*.{format[i]}");
- filter.AddPattern($"*.{format[i].ToUpper()}");
- filterAll.AddPattern($"*.{format[i].ToUpper()}");
- }
- name.Append(')');
- filter.SetName(name.ToString());
- listStore.Append(filter);
- }
- listStore.Insert(0, filterAll);
- fileDialog.SetFilters(listStore);
+ fileDialog.SetFilters(GetSourceFileFilter());
Gio.File? file;
- try
- {
+ try {
file = await fileDialog.OpenAsync(this);
- }
- catch
- {
+ } catch {
file = null;
}
- if (file != null && file.GetPath() != null)
- {
- erSelect.SetText(file.GetPath()!);
+ if (file != null && file.GetPath() != null) {
+ erSource.SetText(file.GetPath()!);
btnConvert.SetSensitive(true);
- }
- else if (erSelect.GetText() == "")
+ } else if (erSource.GetText() == "")
btnConvert.SetSensitive(false);
};
- erSelect.AddSuffix(btnSelect);
- pgSelect.Add(erSelect);
+ erSource.AddSuffix(btnSelect);
+ pgSource.Add(erSource);
- page.Add(pgSelect);
+ page.Add(pgSource);
page.Add(pgOptions);
page.Add(pgBtn);
return page;
}
- public PreferencesPage InitPageFolder()
- {
+ public PreferencesPage InitPageFolder() {
EntryRow erSource = EntryRow.New();
erSource.SetTitle("Quellordner");
erSource.SetEditable(false);
@@ -212,96 +167,44 @@ public partial class MainWindow : Adw.ApplicationWindow
pgBtn.SetValign(Align.Center);
pgBtn.SetHalign(Align.Center);
Button btnConvert = Button.NewWithLabel("Konvertieren");
- btnConvert.OnClicked += async (_, _) =>
- {
- if (erSource.GetText() != "" && erDest.GetText() != "")
- {
- string[] filesSource;
- if (Directory.Exists(erSource.GetText()))
- filesSource = Directory.GetFiles(erSource.GetText());
+ btnConvert.OnClicked += async (_, _) => {
+ string[] filesSource;
+ if (Directory.Exists(erSource.GetText()))
+ filesSource = Directory.GetFiles(erSource.GetText());
+ else {
+ InitInfoAlert("Quellordner existiert nicht", "Der ausgewählte Quellordner ist nicht im Dateisystem vorhanden. Die Konvertierung wurde abgebrochen.");
+ return;
+ }
+ if (filesSource.Length == 0) {
+ InitInfoAlert("Quellordner ist leer", "Im ausgewählten Quellordner befinden sich keine Dateien. Die Konvertierung wurde abgebrochen.");
+ return;
+ }
+ string dest = erDest.GetText();
+ Directory.CreateDirectory(dest);
+ StatusDialog statusDialog = new(_application, this);
+ statusDialog.Start();
+ try {
+ ConvertOptions options = new(resOptions.GetString(crRes.GetSelected()), crFormat.GetSelected());
+ ConvertError[] convertErrors = await Lib.ConvertList(filesSource, dest, options, statusDialog.SetProgress);
+ if (convertErrors.Length > 0)
+ statusDialog.Partial(filesSource.Length, dest, convertErrors);
else
- {
- InitInfoAlert("Quellordner existiert nicht", "Der ausgewählte Quellordner ist nicht im Dateisystem vorhanden. Die Konvertierung wurde abgebrochen.");
- return;
- }
- if (filesSource.Length == 0)
- {
- InitInfoAlert("Quellordner ist leer", "Im ausgewählten Quellordner befinden sich keine Dateien. Die Konvertierung wurde abgebrochen.");
- return;
- }
- string dest = erDest.GetText();
- if (!Directory.Exists(dest))
- Directory.CreateDirectory(dest);
- StatusDialog statusDialog = new(_application, this);
- statusDialog.Start();
- try
- {
- ConvertOptions options = new ConvertOptions(resOptions.GetString(crRes.GetSelected()), crFormat.GetSelected());
- ConvertError[] convertErrors = await Lib.ConvertList(filesSource, dest, options, statusDialog.SetProgress);
- if (convertErrors.Length > 0)
- statusDialog.Partial(filesSource.Length, dest, convertErrors);
- else
- statusDialog.Success(filesSource.Length, dest);
- }
- catch (Exception e)
- {
- statusDialog.Error(e.Message);
- }
+ statusDialog.Success(filesSource.Length, dest);
+ } catch (Exception e) {
+ statusDialog.Error(e.Message);
}
};
btnConvert.SetCssClasses(["pill", "suggested-action", "long"]);
btnConvert.SetSensitive(false);
pgBtn.Add(btnConvert);
- void checkButtonState()
- {
+ void checkButtonState() {
if (erSource.GetText() != "" && erDest.GetText() != "") btnConvert.SetSensitive(true);
else btnConvert.SetSensitive(false);
}
- Button btnSource = Button.New();
- btnSource.SetValign(Align.Center);
- btnSource.AddCssClass("flat");
- btnSource.SetIconName("document-open-symbolic");
- btnSource.OnClicked += async (_, _) =>
- {
- FileDialog fileDialog = FileDialog.New();
- Gio.File? file;
- try
- {
- file = await fileDialog.SelectFolderAsync(this);
- }
- catch
- {
- file = null;
- }
- if (file != null && file.GetPath() != null)
- erSource.SetText(file.GetPath()!);
- checkButtonState();
- };
- erSource.AddSuffix(btnSource);
-
- Button btnDest = Button.New();
- btnDest.SetValign(Align.Center);
- btnDest.AddCssClass("flat");
- btnDest.SetIconName("document-open-symbolic");
- btnDest.OnClicked += async (_, _) =>
- {
- FileDialog fileDialog = FileDialog.New();
- Gio.File? file;
- try
- {
- file = await fileDialog.SelectFolderAsync(this);
- }
- catch
- {
- file = null;
- }
- if (file != null && file.GetPath() != null)
- erDest.SetText(file.GetPath()!);
- checkButtonState();
- };
- erDest.AddSuffix(btnDest);
+ erSource.AddSuffix(InitButtonSelectFolder(erSource, checkButtonState));
+ erDest.AddSuffix(InitButtonSelectFolder(erDest, checkButtonState));
PreferencesPage page = PreferencesPage.New();
@@ -317,8 +220,7 @@ public partial class MainWindow : Adw.ApplicationWindow
return page;
}
- public void InitInfoAlert(string title, string body)
- {
+ public void InitInfoAlert(string title, string body) {
Adw.AlertDialog alert = Adw.AlertDialog.New(title, body);
alert.AddResponse("ok", "OK");
alert.SetResponseAppearance("ok", ResponseAppearance.Suggested);
@@ -327,37 +229,7 @@ public partial class MainWindow : Adw.ApplicationWindow
alert.Present(this);
}
- public bool InitDestructiveAlert(string title, string body, string resp)
- {
- Adw.AlertDialog alert = Adw.AlertDialog.New(title, body);
- alert.AddResponse("cancel", "Abbrechen");
- alert.AddResponse(resp.ToLower(), resp);
- alert.SetResponseAppearance(resp.ToLower(), ResponseAppearance.Destructive);
- alert.SetDefaultResponse("cancel");
- alert.SetCloseResponse("cancel");
-
- bool running = true;
- bool response = false;
- alert.OnResponse += (Adw.AlertDialog _, Adw.AlertDialog.ResponseSignalArgs args) =>
- {
- if (args.Response.Equals(resp, StringComparison.CurrentCultureIgnoreCase))
- {
- response = true;
- }
- running = false;
- };
-
- alert.Present(this);
-
- while (running == true)
- {
- }
-
- return response;
- }
-
- public Adw.AboutDialog InitAboutDialog()
- {
+ public static Adw.AboutDialog InitAboutDialog() {
Adw.AboutDialog aboutDialog = Adw.AboutDialog.New();
aboutDialog.SetApplicationName(AppInfo.ApplicationName);
aboutDialog.SetDeveloperName(AppInfo.DeveloperName);
@@ -371,4 +243,51 @@ public partial class MainWindow : Adw.ApplicationWindow
return aboutDialog;
}
+
+ public Button InitButtonSelectFolder(EntryRow entryRow, VoidFunc checkButtonState) {
+ Button btnSelect = Button.New();
+ btnSelect.SetValign(Align.Center);
+ btnSelect.AddCssClass("flat");
+ btnSelect.SetIconName("document-open-symbolic");
+ btnSelect.OnClicked += async (_, _) => {
+ FileDialog fileDialog = FileDialog.New();
+ Gio.File? file;
+ try {
+ file = await fileDialog.SelectFolderAsync(this);
+ } catch {
+ file = null;
+ }
+ if (file != null && file.GetPath() != null)
+ entryRow.SetText(file.GetPath()!);
+ checkButtonState();
+ };
+
+ return btnSelect;
+ }
+
+ public static Gio.ListStore GetSourceFileFilter() {
+ Gio.ListStore listStore = Gio.ListStore.New(FileFilter.GetGType());
+ FileFilter filterAll = FileFilter.New();
+ filterAll.SetName("Alle unterstützten Bildformate");
+ string[][] formats = [["bmp", "dib"], ["gif"], ["jpeg", "jpg", "jpe", "jfif"], ["pbm"], ["png"], ["tiff", "tif"], ["tga", "bpx", "icb", "pix"], ["webp"]];
+ foreach (string[] format in formats) {
+ FileFilter filter = FileFilter.New();
+ StringBuilder name = new($"{format[0].ToUpper()} (");
+ for (int i = 0; i < format.Length; i++) {
+ name.Append($"*.{format[i]}");
+ if (i != format.Length - 1)
+ name.Append(", ");
+ filter.AddPattern($"*.{format[i]}");
+ filterAll.AddPattern($"*.{format[i]}");
+ filter.AddPattern($"*.{format[i].ToUpper()}");
+ filterAll.AddPattern($"*.{format[i].ToUpper()}");
+ }
+ name.Append(')');
+ filter.SetName(name.ToString());
+ listStore.Append(filter);
+ }
+ listStore.Insert(0, filterAll);
+
+ return listStore;
+ }
}
\ No newline at end of file
diff --git a/Photomator/Views/StatusDialog.cs b/Photomator/Views/StatusDialog.cs
index fd9ff49..ba81645 100644
--- a/Photomator/Views/StatusDialog.cs
+++ b/Photomator/Views/StatusDialog.cs
@@ -4,15 +4,13 @@ using System.Text;
namespace Photomator.Views;
-public partial class StatusDialog : Adw.Window
-{
+public partial class StatusDialog : Adw.Window {
private readonly Adw.Application _application;
private readonly Adw.ApplicationWindow _mainWindow;
private readonly ViewStack _stack;
private readonly ProgressBar _progress;
- public StatusDialog(Adw.Application application, Adw.ApplicationWindow parent) : base()
- {
+ public StatusDialog(Adw.Application application, Adw.ApplicationWindow parent) : base() {
_application = application;
_mainWindow = parent;
_progress = InitProgressBar();
@@ -27,18 +25,17 @@ public partial class StatusDialog : Adw.Window
StatusPage pageStatus = InitPageProgress();
_stack.AddNamed(pageStatus, "page-status");
+ _stack.SetChildVisible(true);
SetContent(_stack);
}
- public void Start()
- {
+ public void Start() {
_application.AddWindow(this);
Present();
}
- private StatusPage InitPageProgress()
- {
+ private StatusPage InitPageProgress() {
StatusPage pageStatus = StatusPage.New();
pageStatus.SetTitle("Konvertierung wird ausgeführt...");
pageStatus.SetDescription("Das kann eine Weile dauern.");
@@ -47,8 +44,7 @@ public partial class StatusDialog : Adw.Window
return pageStatus;
}
- private ProgressBar InitProgressBar()
- {
+ private static ProgressBar InitProgressBar() {
ProgressBar progressBar = ProgressBar.New();
progressBar.WidthRequest = 300;
progressBar.SetHalign(Align.Center);
@@ -62,22 +58,19 @@ public partial class StatusDialog : Adw.Window
return progressBar;
}
- public void SetProgress(double progress)
- {
+ public void SetProgress(double progress) {
_progress.SetFraction(progress);
_progress.SetText(string.Format("{0:p0}", progress));
}
- private StatusPage InitPageSuccess(int number, string dest)
- {
+ private StatusPage InitPageSuccess(int number, string dest) {
StatusPage pageStatus = StatusPage.New();
pageStatus.SetTitle("Die Konvertierung wurde erfolgreich abgeschlossen");
pageStatus.SetDescription($"{number} Dateien wurden erfolgreich konvertiert.");
pageStatus.SetIconName("selection-mode-symbolic");
Button btnOpen = Button.NewWithLabel("Ordner öffnen");
- btnOpen.OnClicked += async (_, _) =>
- {
+ btnOpen.OnClicked += async (_, _) => {
FileLauncher fileLauncher = FileLauncher.New(Gio.FileHelper.NewForPath(dest));
await fileLauncher.LaunchAsync(_mainWindow);
Close();
@@ -90,15 +83,14 @@ public partial class StatusDialog : Adw.Window
return pageStatus;
}
- public void Success(int number, string dest)
- {
+ public void Success(int number, string dest) {
StatusPage pageSuccess = InitPageSuccess(number, dest);
_stack.AddNamed(pageSuccess, "page-success");
_stack.SetVisibleChildName("page-success");
+ _stack.SetChildVisible(true);
}
- private StatusPage InitPagePartial(int number, string dest, ConvertError[] convertErrors)
- {
+ private StatusPage InitPagePartial(int number, string dest, ConvertError[] convertErrors) {
StatusPage pageStatus = StatusPage.New();
pageStatus.SetTitle("Bei der Konvertierung sind Fehler aufgetreten");
pageStatus.SetDescription($"{number - convertErrors.Length} von {number} Dateien wurden erfolgreich konvertiert.");
@@ -107,11 +99,9 @@ public partial class StatusDialog : Adw.Window
Box box = Box.New(Orientation.Vertical, 36);
box.SetHalign(Align.Center);
- if (convertErrors.Length < number)
- {
+ if (convertErrors.Length < number) {
Button btnOpen = Button.NewWithLabel("Ordner öffnen");
- btnOpen.OnClicked += async (_, _) =>
- {
+ btnOpen.OnClicked += async (_, _) => {
FileLauncher fileLauncher = FileLauncher.New(Gio.FileHelper.NewForPath(dest));
await fileLauncher.LaunchAsync(_mainWindow);
Close();
@@ -128,8 +118,7 @@ public partial class StatusDialog : Adw.Window
scrolled.SetOverflow(Overflow.Hidden);
StringBuilder sb = new StringBuilder();
- foreach (ConvertError err in convertErrors)
- {
+ foreach (ConvertError err in convertErrors) {
sb.AppendLine($"{err.File}: {err.Message}");
}
Label label = Label.New(sb.ToString());
@@ -155,15 +144,14 @@ public partial class StatusDialog : Adw.Window
return pageStatus;
}
- public void Partial(int number, string dest, ConvertError[] convertErrors)
- {
+ public void Partial(int number, string dest, ConvertError[] convertErrors) {
StatusPage pagePartial = InitPagePartial(number, dest, convertErrors);
_stack.AddNamed(pagePartial, "page-partial");
_stack.SetVisibleChildName("page-partial");
+ _stack.SetChildVisible(true);
}
- private StatusPage InitPageError(string error)
- {
+ private StatusPage InitPageError(string error) {
StatusPage pageStatus = StatusPage.New();
pageStatus.SetTitle("Konvertierung fehlgeschlagen");
pageStatus.SetDescription("Es ist ein Fehler aufgetreten.");
@@ -206,10 +194,10 @@ public partial class StatusDialog : Adw.Window
return pageStatus;
}
- public void Error(string error)
- {
+ public void Error(string error) {
StatusPage pageError = InitPageError(error);
_stack.AddNamed(pageError, "page-error");
_stack.SetVisibleChildName("page-error");
+ _stack.SetChildVisible(true);
}
}
\ No newline at end of file