fixes and optimizations
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user