diff --git a/avifencodergui.lib/Config.cs b/avifencodergui.lib/Config.cs index 3a03e32..2bf2756 100644 --- a/avifencodergui.lib/Config.cs +++ b/avifencodergui.lib/Config.cs @@ -108,7 +108,7 @@ public static Config Load() return null; } - public static void Save(Config config) + public static void Save(Config config, string name) { if (!File.Exists(Constants.AppFolder)) Directory.CreateDirectory(Constants.AppFolder); @@ -117,9 +117,11 @@ public static void Save(Config config) WriteIndented = true }; var jsonString = JsonSerializer.Serialize(config, jsonConfig); - File.WriteAllText(Constants.ConfigPath, jsonString); + var file = Path.Combine(Constants.AppFolder, $"{name}.config.json"); + File.WriteAllText(file, jsonString); } + public string CreateProgArgs(string input, string output) { return null; diff --git a/avifencodergui.wpf/ViewModels/MainViewModel.cs b/avifencodergui.wpf/ViewModels/MainViewModel.cs index 2908595..b0709fd 100644 --- a/avifencodergui.wpf/ViewModels/MainViewModel.cs +++ b/avifencodergui.wpf/ViewModels/MainViewModel.cs @@ -1,8 +1,11 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; +using System.Linq; using System.Threading.Tasks; using System.Windows; +using System.Windows.Documents; using avifencodergui.lib; using avifencodergui.wpf.Messenger; using Microsoft.Toolkit.Mvvm.ComponentModel; @@ -37,6 +40,9 @@ public MainViewModel() new RelayCommand(() => this.Messenger.Send(new WindowMessage(WindowEnum.SettingsWindows))); this.OpenEncoderInstallWikiCommand = new RelayCommand(() => this.OpenUrl("https://github.com/dhcgn/avif_encoder_gui/wiki/Install-AVIF-Encoder-and-AVIF-Decoder")); + this.Configs = new List() {"built in"}; + this.SelectedConfig = Configs.First(); + if (InDesignMode()) { this.Jobs.Add(Job.GetDesignDate(Job.JobStateEnum.Pending)); @@ -64,7 +70,8 @@ public string AvifDecVersion public RelayCommand ShowSettingsCommand { get; set; } public RelayCommand OpenEncoderInstallWikiCommand { get; set; } - + public List Configs { get; private set; } + public string SelectedConfig { get; set; } public IAsyncRelayCommand OnLoadCommand { get; } public bool CanEncode diff --git a/avifencodergui.wpf/ViewModels/SettingsViewModel.cs b/avifencodergui.wpf/ViewModels/SettingsViewModel.cs index 283b8ab..c77e633 100644 --- a/avifencodergui.wpf/ViewModels/SettingsViewModel.cs +++ b/avifencodergui.wpf/ViewModels/SettingsViewModel.cs @@ -1,4 +1,9 @@ -using System.Text.Json; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.Json; +using System.Windows; +using avifencodergui.lib; using Microsoft.Toolkit.Mvvm.ComponentModel; using Microsoft.Toolkit.Mvvm.Input; @@ -6,24 +11,78 @@ namespace avifencodergui.wpf.ViewModels { public class SettingsViewModel : ObservableRecipient { + private JsonSerializerOptions jsonConfig = new() + { + WriteIndented = true + }; + private ConfigViewModel selectedConfig; + public SettingsViewModel() { - this.SaveCommand = new RelayCommand(()=>{}, ()=>false); - this.CancelCommand = new RelayCommand(()=>{}, ()=>false); + this.SaveCommand = new RelayCommand(() => { }, () => false); + this.CancelCommand = new RelayCommand(() => { }, () => false); - var config = avifencodergui.lib.Config.CreateEmpty(); - var jsonConfig = new JsonSerializerOptions + if (InDesignMode()) { - WriteIndented = true - }; + Configs = new List() + { + new ConfigViewModel() { Name = "sample"} + }; + SelectedConfig = Configs.FirstOrDefault(); + return; + } + + var config = avifencodergui.lib.Config.CreateEmpty(); + var jsonString = JsonSerializer.Serialize(config, jsonConfig); - this.Config = jsonString; + var configFiles = Directory.GetFiles(Constants.AppFolder, "*.config.json"); + if (configFiles.Length == 0) + { + var emptyConfig = avifencodergui.lib.Config.CreateEmpty(); + Config.Save(emptyConfig, "empty"); + + var sample1Config = avifencodergui.lib.Config.CreateSample1(); + Config.Save(sample1Config, "sample1"); + } + + configFiles = Directory.GetFiles(Constants.AppFolder, "*.config.json"); + + Configs = new List(); + foreach (var file in configFiles) + { + var c = new ConfigViewModel + { + Name = new FileInfo(file).Name.Replace(".config.json", ""), + Path = file + }; + Configs.Add(c); + } + + + SelectedConfig = Configs.FirstOrDefault(); + this.ConfigJsonText = jsonString; } public RelayCommand OnLoadCommand { get; set; } public RelayCommand SaveCommand { get; set; } public RelayCommand CancelCommand { get; set; } - public string Config { get; set; } + public string ConfigJsonText { get; set; } + + public ConfigViewModel SelectedConfig { get => selectedConfig; set => base.SetProperty(ref selectedConfig, value); } + public List Configs { get; set; } + + public static bool InDesignMode() + { + return !(Application.Current is App); + } + } + + + + public class ConfigViewModel + { + public string Name { get; set; } + public string Path { get; set; } } } \ No newline at end of file diff --git a/avifencodergui.wpf/Windows/MainWindow.xaml b/avifencodergui.wpf/Windows/MainWindow.xaml index 9dfc148..2dd3239 100644 --- a/avifencodergui.wpf/Windows/MainWindow.xaml +++ b/avifencodergui.wpf/Windows/MainWindow.xaml @@ -7,12 +7,24 @@ xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:converter="clr-namespace:avifencodergui.wpf.Converter" mc:Ignorable="d" - Title="AVIF Encoder" Height="369" Width="600"> + Title="AVIF Encoder" + Height="369" Width="600" + MinHeight="369" MinWidth="600" + > + @@ -96,9 +108,12 @@ -