159 lines
3.9 KiB
C#
159 lines
3.9 KiB
C#
#nullable enable
|
|
|
|
using System;
|
|
using System.Collections.ObjectModel;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Avalonia.Platform.Storage;
|
|
using Avalonia.Themes.Fluent;
|
|
using DialogHostAvalonia;
|
|
using ImageMagick;
|
|
using MigraDoc.DocumentObjectModel;
|
|
using MigraDoc.Rendering;
|
|
using PdfSharp.Fonts;
|
|
using PdfSharp.Pdf.IO;
|
|
using PdfSharp.Snippets.Font;
|
|
using MayShow.Interfaces;
|
|
using MayShow.Models;
|
|
using MayShow.Helpers;
|
|
using MayShows.Helpers;
|
|
|
|
namespace MayShow.ViewModels;
|
|
|
|
class SettingsViewModel: ChangeNotifier
|
|
{
|
|
private Settings _previousSettings;
|
|
private Settings _settings;
|
|
private string _errorMessage;
|
|
private ITopLevelGrabber? _topLevelGrabber;
|
|
|
|
public SettingsViewModel(Settings settingsToEdit, ITopLevelGrabber? topLevelGrabber)
|
|
{
|
|
_previousSettings = settingsToEdit;
|
|
_settings = new Settings(settingsToEdit); // clone it
|
|
_errorMessage = "";
|
|
_topLevelGrabber = topLevelGrabber;
|
|
}
|
|
|
|
public bool UseDocnetPDFImageRendering
|
|
{
|
|
get => _settings.UseDocnetPDFImageRendering;
|
|
set
|
|
{
|
|
_settings.UseDocnetPDFImageRendering = value;
|
|
NotifyPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public bool SaveOutputPdfInWorkingDir
|
|
{
|
|
get => _settings.SaveOutputPdfInWorkingDir;
|
|
set
|
|
{
|
|
_settings.SaveOutputPdfInWorkingDir = value;
|
|
NotifyPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public string OutputPdfDirPath
|
|
{
|
|
get => _settings.OutputPdfDir;
|
|
set
|
|
{
|
|
_settings.OutputPdfDir = value;
|
|
NotifyPropertyChanged();
|
|
NotifyPropertyChanged(nameof(IsOutputPdfDirValid));
|
|
}
|
|
}
|
|
|
|
public bool IsOutputPdfDirValid
|
|
{
|
|
get => SaveOutputPdfInWorkingDir || (!SaveOutputPdfInWorkingDir && Directory.Exists(OutputPdfDirPath));
|
|
}
|
|
|
|
public bool HasErrorMessage
|
|
{
|
|
get => !string.IsNullOrWhiteSpace(_errorMessage);
|
|
}
|
|
|
|
public string ErrorMessage
|
|
{
|
|
get => _errorMessage;
|
|
set
|
|
{
|
|
_errorMessage = value;
|
|
NotifyPropertyChanged();
|
|
NotifyPropertyChanged(nameof(HasErrorMessage));
|
|
}
|
|
}
|
|
|
|
public decimal ImageResizeThreshold
|
|
{
|
|
get => _settings.ImageResizeThreshold;
|
|
set
|
|
{
|
|
_settings.ImageResizeThreshold = value;
|
|
NotifyPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public bool SaveReportJsonDataInInternalDir
|
|
{
|
|
get => _settings.SaveReportJsonDataInInternalDir;
|
|
set
|
|
{
|
|
_settings.SaveReportJsonDataInInternalDir = value;
|
|
NotifyPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public async void ChooseOutputFolder()
|
|
{
|
|
var topLevel = _topLevelGrabber?.GetTopLevel();
|
|
if (topLevel != null)
|
|
{
|
|
var folders = await topLevel.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions()
|
|
{
|
|
Title = "Choose where to save your report file...",
|
|
AllowMultiple = false,
|
|
});
|
|
if (folders.Count == 1)
|
|
{
|
|
var folder = folders[0];
|
|
OutputPdfDirPath = folder.Path.LocalPath;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void OpenSettingsDir()
|
|
{
|
|
var topLevel = _topLevelGrabber?.GetTopLevel();
|
|
Console.WriteLine(Utilities.GetInternalDataPath());
|
|
var dirName = Utilities.GetInternalDataPath();
|
|
if (topLevel is not null && dirName != null)
|
|
{
|
|
var launcher = topLevel.Launcher;
|
|
launcher.LaunchUriAsync(new Uri(dirName));
|
|
}
|
|
}
|
|
|
|
public void Cancel()
|
|
{
|
|
DialogHost.Close("DialogHost", null);
|
|
}
|
|
|
|
public void Save()
|
|
{
|
|
if (!IsOutputPdfDirValid)
|
|
{
|
|
ErrorMessage = "Output directory cannot be found!";
|
|
}
|
|
else
|
|
{
|
|
ErrorMessage = "";
|
|
DialogHost.Close("DialogHost", _settings);
|
|
}
|
|
}
|
|
} |