From ea19d8bffe5f77f033ed23f83166acc146404a84 Mon Sep 17 00:00:00 2001 From: Salvador Cipolla Date: Thu, 17 Oct 2024 21:21:39 -0300 Subject: [PATCH 01/11] Initial ui rework --- Knossos.NET/AppStyles.axaml | 6 + Knossos.NET/Assets/general/menu_community.png | Bin 0 -> 11627 bytes Knossos.NET/Assets/general/menu_debug.png | Bin 0 -> 4988 bytes Knossos.NET/Assets/general/menu_develop.png | Bin 0 -> 1943 bytes Knossos.NET/Assets/general/menu_engine.png | Bin 0 -> 22616 bytes Knossos.NET/Assets/general/menu_explore.png | Bin 0 -> 237 bytes .../Assets/general/menu_multiplayer.png | Bin 0 -> 672 bytes Knossos.NET/Assets/general/menu_play.png | Bin 0 -> 166 bytes Knossos.NET/Assets/general/menu_settings.png | Bin 0 -> 213 bytes .../Converters/BitmapAssetValueConverter.cs | 45 +++ Knossos.NET/ViewModels/DebugViewModel.cs | 180 +++++++++ Knossos.NET/ViewModels/TaskViewModel.cs | 36 -- .../Templates/TaskInfoButtonViewModel.cs | 5 - .../ViewModels/Windows/MainWindowViewModel.cs | 363 ++++++------------ Knossos.NET/Views/DebugView.axaml | 27 ++ Knossos.NET/Views/DebugView.axaml.cs | 13 + Knossos.NET/Views/TaskView.axaml | 6 +- .../Views/Templates/TaskInfoButtonView.axaml | 4 +- .../Views/Templates/TaskItemView.axaml | 2 +- Knossos.NET/Views/Windows/MainWindow.axaml | 108 +++--- 20 files changed, 443 insertions(+), 352 deletions(-) create mode 100644 Knossos.NET/Assets/general/menu_community.png create mode 100644 Knossos.NET/Assets/general/menu_debug.png create mode 100644 Knossos.NET/Assets/general/menu_develop.png create mode 100644 Knossos.NET/Assets/general/menu_engine.png create mode 100644 Knossos.NET/Assets/general/menu_explore.png create mode 100644 Knossos.NET/Assets/general/menu_multiplayer.png create mode 100644 Knossos.NET/Assets/general/menu_play.png create mode 100644 Knossos.NET/Assets/general/menu_settings.png create mode 100644 Knossos.NET/Converters/BitmapAssetValueConverter.cs create mode 100644 Knossos.NET/ViewModels/DebugViewModel.cs create mode 100644 Knossos.NET/Views/DebugView.axaml create mode 100644 Knossos.NET/Views/DebugView.axaml.cs diff --git a/Knossos.NET/AppStyles.axaml b/Knossos.NET/AppStyles.axaml index ea5c8076..c9901cf2 100644 --- a/Knossos.NET/AppStyles.axaml +++ b/Knossos.NET/AppStyles.axaml @@ -69,6 +69,12 @@ + + + + M2 4.5C2 4.22386 2.22386 4 2.5 4H17.5C17.7761 4 18 4.22386 18 4.5C18 4.77614 17.7761 5 17.5 5H2.5C2.22386 5 2 4.77614 2 4.5Z M2 9.5C2 9.22386 2.22386 9 2.5 9H17.5C17.7761 9 18 9.22386 18 9.5C18 9.77614 17.7761 10 17.5 10H2.5C2.22386 10 2 9.77614 2 9.5Z M2.5 14C2.22386 14 2 14.2239 2 14.5C2 14.7761 2.22386 15 2.5 15H17.5C17.7761 15 18 14.7761 18 14.5C18 14.2239 17.7761 14 17.5 14H2.5Z + + #18191A diff --git a/Knossos.NET/Assets/general/menu_community.png b/Knossos.NET/Assets/general/menu_community.png new file mode 100644 index 0000000000000000000000000000000000000000..8bef97d205d19eae55d9045b4b4056898417613d GIT binary patch literal 11627 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 literal 0 HcmV?d00001 diff --git a/Knossos.NET/Assets/general/menu_engine.png b/Knossos.NET/Assets/general/menu_engine.png new file mode 100644 index 0000000000000000000000000000000000000000..19c5dbff3128a33014f539a8dffc977b6f8eea2c GIT binary patch literal 22616 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 Oi^0>?&t;ucLK6V;kUePt literal 0 HcmV?d00001 diff --git a/Knossos.NET/Assets/general/menu_settings.png b/Knossos.NET/Assets/general/menu_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..f33e31356c5634dc695c04b0272839a53915280a GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_{3?x-PN__%SYymzYu0Z<#|Nl#G&c6#}F_r}R z1v5B2yO9Ru)Oxx&hDcm4y|9tDK|z2ufXD4k##@QjizO!J1+4BHmMF}rIWe7SVdcrf zhdb8ax;ZV&K>fl+y9;XK3%&Imwe7;5hARsh8OId=JoPnVop*Ed%9jhjygS;w>3_BR z;XemC?@jrd7x(>Mg5K}lm3Nw}H7(9HS{j-^I}tO}xcGS`|4)R>=SW literal 0 HcmV?d00001 diff --git a/Knossos.NET/Converters/BitmapAssetValueConverter.cs b/Knossos.NET/Converters/BitmapAssetValueConverter.cs new file mode 100644 index 00000000..216cabe5 --- /dev/null +++ b/Knossos.NET/Converters/BitmapAssetValueConverter.cs @@ -0,0 +1,45 @@ +using Avalonia.Data.Converters; +using System; +using System.Globalization; +using Avalonia.Platform; +using System.Reflection; +using Avalonia.Media.Imaging; + +namespace Knossos.NET.Converters +{ + public class BitmapAssetValueConverter : IValueConverter + { + public static BitmapAssetValueConverter Instance { get; } = new(); + + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + if (value == null) return null; + + if (value is not string rawUri || !targetType.IsAssignableFrom(typeof(Bitmap))) + { + throw new NotSupportedException(); + } + + Uri uri; + + if (rawUri.StartsWith("avares://")) + { + uri = new Uri(rawUri); + } + else + { + var assemblyName = Assembly.GetEntryAssembly()?.GetName().Name; + uri = new Uri($"avares://{assemblyName}/{rawUri.TrimStart('/')}"); + } + + var asset = AssetLoader.Open(uri); + + return new Bitmap(asset); + } + + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/Knossos.NET/ViewModels/DebugViewModel.cs b/Knossos.NET/ViewModels/DebugViewModel.cs new file mode 100644 index 00000000..3fa401c1 --- /dev/null +++ b/Knossos.NET/ViewModels/DebugViewModel.cs @@ -0,0 +1,180 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using Knossos.NET.Models; +using Knossos.NET.Views; +using System; +using System.Diagnostics; +using System.IO; +namespace Knossos.NET.ViewModels +{ + public partial class DebugViewModel : ViewModelBase + { + [ObservableProperty] + internal string uiConsoleOutput = string.Empty; + + /// + /// Write a string to UI console on debug tab + /// + /// + public void WriteToUIConsole(string message) + { + UiConsoleOutput += "\n" + message; + } + + /* Debug Section */ + internal void OpenLog() + { + if (File.Exists(KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "Knossos.log")) + { + try + { + var cmd = new Process(); + cmd.StartInfo.FileName = KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "Knossos.log"; + cmd.StartInfo.UseShellExecute = true; + cmd.Start(); + cmd.Dispose(); + } + catch (Exception ex) + { + Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.ReloadLog", ex); + } + } + else + { + if (MainWindow.instance != null) + MessageBox.Show(MainWindow.instance, "Log File " + KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "Knossos.log not found.", "File not found", MessageBox.MessageBoxButtons.OK); + } + } + + internal void OpenSettings() + { + if (File.Exists(KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "settings.json")) + { + try + { + var cmd = new Process(); + cmd.StartInfo.FileName = KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "settings.json"; + cmd.StartInfo.UseShellExecute = true; + cmd.Start(); + cmd.Dispose(); + } + catch (Exception ex) + { + Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.ReloadLog", ex); + } + } + else + { + if (MainWindow.instance != null) + MessageBox.Show(MainWindow.instance, "Log File " + KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "settings.json not found.", "File not found", MessageBox.MessageBoxButtons.OK); + } + } + + internal void OpenFS2Log() + { + if (File.Exists(KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "fs2_open.log")) + { + try + { + var cmd = new Process(); + cmd.StartInfo.FileName = KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "fs2_open.log"; + cmd.StartInfo.UseShellExecute = true; + cmd.Start(); + cmd.Dispose(); + } + catch (Exception ex) + { + Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.ReloadFS2Log", ex); + } + } + else + { + if (MainWindow.instance != null) + MessageBox.Show(MainWindow.instance, "Log File " + KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "fs2_open.log not found.", "File not found", MessageBox.MessageBoxButtons.OK); + } + } + + internal void OpenFS2Ini() + { + if (File.Exists(KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "fs2_open.ini")) + { + try + { + var cmd = new Process(); + cmd.StartInfo.FileName = KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "fs2_open.ini"; + cmd.StartInfo.UseShellExecute = true; + cmd.Start(); + cmd.Dispose(); + } + catch (Exception ex) + { + Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.ReloadFS2ini", ex); + } + } + else + { + if (MainWindow.instance != null) + MessageBox.Show(MainWindow.instance, "Log File " + KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "fs2_open.ini not found.", "File not found", MessageBox.MessageBoxButtons.OK); + } + } + + internal async void UploadFS2Log() + { + if (File.Exists(KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "fs2_open.log")) + { + try + { + var logString = File.ReadAllText(KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "fs2_open.log", System.Text.Encoding.UTF8); + if (logString.Trim() != string.Empty) + { + var status = await Nebula.UploadLog(logString); + if (!status) + { + if (MainWindow.instance != null) + await MessageBox.Show(MainWindow.instance, "An error has ocurred while uploading the log file, check the log below.", "Upload log error", MessageBox.MessageBoxButtons.OK); + } + } + else + { + if (MainWindow.instance != null) + await MessageBox.Show(MainWindow.instance, "The log file is empty.", "Error", MessageBox.MessageBoxButtons.OK); + } + } + catch (Exception ex) + { + Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.UploadFS2Log", ex); + } + } + else + { + if (MainWindow.instance != null) + await MessageBox.Show(MainWindow.instance, "Log File " + KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "fs2_open.log not found.", "File not found", MessageBox.MessageBoxButtons.OK); + } + } + internal async void UploadKnossosConsole() + { + try + { + var status = await Nebula.UploadLog(UiConsoleOutput); + if (!status) + { + if (MainWindow.instance != null) + await MessageBox.Show(MainWindow.instance, "An error has ocurred while uploading the console output, check the log below.", "Upload error", MessageBox.MessageBoxButtons.OK); + } + } + catch (Exception ex) + { + Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.UploadKnossosConsole", ex); + } + } + + /// + /// Open Debug Filter Dialog + /// + internal async void OpenDebugFilterView() + { + var dialog = new Views.DebugFiltersView(); + dialog.DataContext = new DebugFiltersViewModel(); + await dialog.ShowDialog(MainWindow.instance!); + } + } +} diff --git a/Knossos.NET/ViewModels/TaskViewModel.cs b/Knossos.NET/ViewModels/TaskViewModel.cs index bcd7725c..b5b2dd3b 100644 --- a/Knossos.NET/ViewModels/TaskViewModel.cs +++ b/Knossos.NET/ViewModels/TaskViewModel.cs @@ -28,9 +28,6 @@ public partial class TaskViewModel : ViewModelBase /// internal Queue taskQueue { get; set; } = new Queue(); - [ObservableProperty] - public bool showTaskList = false; - public TaskViewModel() { Instance = this; @@ -224,39 +221,6 @@ public string GetRunningTaskString() } } - /// - /// Hide the task panel - /// - public void HideCommand() - { - Dispatcher.UIThread.Invoke(() => - { - ShowTaskList = false; - }); - } - - /// - /// Show the task panel - /// - public void ShowCommand() - { - Dispatcher.UIThread.Invoke(() => - { - ShowTaskList = true; - }); - } - - /// - /// Toggle task panel visibility - /// - public void ToggleCommand() - { - Dispatcher.UIThread.Invoke(() => - { - ShowTaskList = !ShowTaskList; - }); - } - /// /// Return number of tasks in list /// diff --git a/Knossos.NET/ViewModels/Templates/TaskInfoButtonViewModel.cs b/Knossos.NET/ViewModels/Templates/TaskInfoButtonViewModel.cs index 82474d4d..d348c784 100644 --- a/Knossos.NET/ViewModels/Templates/TaskInfoButtonViewModel.cs +++ b/Knossos.NET/ViewModels/Templates/TaskInfoButtonViewModel.cs @@ -34,11 +34,6 @@ public TaskInfoButtonViewModel(TaskViewModel taskViewModel) timer.Start(); } - internal void ToggleTaskView() - { - TaskViewModel?.ToggleCommand(); - } - private void Update(object? _, System.Timers.ElapsedEventArgs __) { if(TaskViewModel != null) diff --git a/Knossos.NET/ViewModels/Windows/MainWindowViewModel.cs b/Knossos.NET/ViewModels/Windows/MainWindowViewModel.cs index 916136de..45322a4e 100644 --- a/Knossos.NET/ViewModels/Windows/MainWindowViewModel.cs +++ b/Knossos.NET/ViewModels/Windows/MainWindowViewModel.cs @@ -7,9 +7,15 @@ using System.Diagnostics; using System.IO; using System.Linq; +using System.Collections.ObjectModel; +using Avalonia.Controls; +using CommunityToolkit.Mvvm.DependencyInjection; +using System.Windows.Markup; namespace Knossos.NET.ViewModels { + public record MainViewMenuItem(ViewModelBase vm, string? iconRoute, string label, string tooltip); + /// /// Main Windows View Mode /// Everything starts here @@ -39,9 +45,19 @@ public partial class MainWindowViewModel : ViewModelBase [ObservableProperty] internal CommunityViewModel communityView = new CommunityViewModel(); [ObservableProperty] - internal string uiConsoleOutput = string.Empty; + internal DebugViewModel debugView = new DebugViewModel(); [ObservableProperty] internal TaskInfoButtonViewModel? taskInfoButton; + [ObservableProperty] + internal bool isMenuOpen = true; + [ObservableProperty] + internal ObservableCollection? menuItems; + [ObservableProperty] + private MainViewMenuItem? selectedMenuItem; + [ObservableProperty] + internal ViewModelBase? currentViewModel; + + internal string sharedSearch = string.Empty; @@ -57,103 +73,120 @@ public enum SortType } internal SortType sharedSortType = SortType.name; - internal int tabIndex = 0; - internal int TabIndex + + public MainWindowViewModel() + { + Instance = this; + TaskInfoButton = new TaskInfoButtonViewModel(this.TaskView); + string[] args = Environment.GetCommandLineArgs(); + bool isQuickLaunch = false; + bool forceUpdate = false; + foreach (var arg in args) + { + if (arg.ToLower() == "-playmod") + { + isQuickLaunch = true; + } + if (arg.ToLower() == "-forceupdate") + { + forceUpdate = true; + } + } + FillMenuItemsNormalMode(); + if (MenuItems != null && MenuItems.Any()) + { + SelectedMenuItem = MenuItems.FirstOrDefault(); + } + Knossos.StartUp(isQuickLaunch, forceUpdate); + } + + public void FillMenuItemsNormalMode() { - get => tabIndex; - set + MenuItems = new ObservableCollection{ + new MainViewMenuItem(InstalledModsView, "avares://Knossos.NET/Assets/general/menu_play.png", "Play", "View and run installed Freepsace Open games and modifications"), + new MainViewMenuItem(NebulaModsView, "avares://Knossos.NET/Assets/general/menu_explore.png", "Explore", "Search and install Freespace Open games and modifications"), + new MainViewMenuItem(FsoBuildsView, "avares://Knossos.NET/Assets/general/menu_engine.png", "Engine", "Download new Freespace Open engine builds"), + new MainViewMenuItem(DeveloperModView, "avares://Knossos.NET/Assets/general/menu_develop.png", "Develop", "Develop new games and modifications for the Freespace Open Engine"), + new MainViewMenuItem(CommunityView, "avares://Knossos.NET/Assets/general/menu_community.png", "Community", "FAQs and Community Resources"), + new MainViewMenuItem(PxoView, "avares://Knossos.NET/Assets/general/menu_multiplayer.png", "Multiplayer", "View multiplayer games using PXO servers"), + new MainViewMenuItem(GlobalSettingsView, "avares://Knossos.NET/Assets/general/menu_settings.png", "Settings", "Change global Freespace Open and Knossos.NET settings"), + new MainViewMenuItem(DebugView, "avares://Knossos.NET/Assets/general/menu_debug.png", "Debug", "Debug info"), + new MainViewMenuItem(TaskView, null, "Tasks", "Overview of current running tasks") + }; + } + + /// + /// When the user clicks a sidebar menu item this code is called + /// + /// + partial void OnSelectedMenuItemChanged(MainViewMenuItem? value) + { + if (value != null) { - /* Execute code when user changes tab */ - if (value != tabIndex) + // Things to do on tab exit + if (CurrentViewModel == InstalledModsView) //Exiting the Play tab. { - // Things to do on tab exit - if (tabIndex == 0) //Exiting the Play tab. + sharedSearch = InstalledModsView.Search; + + // Change and save to the new sort type. + if (sharedSortType != InstalledModsView.sortType && InstalledModsView.sortType != SortType.unsorted) { - sharedSearch = InstalledModsView.Search; - - // Change and save to the new sort type. - if (sharedSortType != InstalledModsView.sortType && InstalledModsView.sortType != SortType.unsorted) - { - sharedSortType = InstalledModsView.sortType; - Knossos.globalSettings.Save(false); - } + sharedSortType = InstalledModsView.sortType; + Knossos.globalSettings.Save(false); } - if (tabIndex == 1) //Exiting the Nebula tab. - { - sharedSearch = NebulaModsView.Search; + } + if (CurrentViewModel == NebulaModsView) //Exiting the Nebula tab. + { + sharedSearch = NebulaModsView.Search; - if (sharedSortType != NebulaModsView.sortType && NebulaModsView.sortType != SortType.unsorted) - { - sharedSortType = NebulaModsView.sortType; - Knossos.globalSettings.Save(false); - } + if (sharedSortType != NebulaModsView.sortType && NebulaModsView.sortType != SortType.unsorted) + { + sharedSortType = NebulaModsView.sortType; + Knossos.globalSettings.Save(false); } + } + + CurrentViewModel = value.vm; + //Run code when entering a new view + switch(value.label) + { // Things to do on tab entrance - this.SetProperty(ref tabIndex, value); - if (tabIndex == 0) //Play Tab - { + case "Play": InstalledModsView.Search = sharedSearch; InstalledModsView.ChangeSort(sharedSortType); - } - if (tabIndex == 1) //Nebula Mods - { + Knossos.globalSettings.DisableIniWatch(); + break; + case "Explore": NebulaModsView.OpenTab(sharedSearch, sharedSortType); - } - if (tabIndex == 3) //Dev Tab - { + Knossos.globalSettings.DisableIniWatch(); + break; + case "Engine": + Knossos.globalSettings.DisableIniWatch(); + break; + case "Develop": DeveloperModsViewModel.Instance?.MaybeChangeSorting(); DeveloperModView.UpdateBuildInstallButtons(); - } - if (tabIndex == 4) //Community Tab - { - Task.Run(async()=>{await CommunityView.LoadFAQRepo();}); - } - if (tabIndex == 5) //PXO - { + Knossos.globalSettings.DisableIniWatch(); + break; + case "Community": + Task.Run(async () => { await CommunityView.LoadFAQRepo(); }); + Knossos.globalSettings.DisableIniWatch(); + break; + case "Multiplayer": PxoViewModel.Instance!.InitialLoad(); - } - if (tabIndex == 6) //Settings - { + Knossos.globalSettings.DisableIniWatch(); + break; + case "Settings": Knossos.globalSettings.Load(); GlobalSettingsView.LoadData(); Knossos.globalSettings.EnableIniWatch(); GlobalSettingsView.UpdateImgCacheSize(); - } - else - { - Knossos.globalSettings.DisableIniWatch(); - } - if (tabIndex == 7) // Debug - { -// LoadDebugRepo - } - + break; } } } - public MainWindowViewModel() - { - Instance = this; - TaskInfoButton = new TaskInfoButtonViewModel(this.TaskView); - string[] args = Environment.GetCommandLineArgs(); - bool isQuickLaunch = false; - bool forceUpdate = false; - foreach (var arg in args) - { - if (arg.ToLower() == "-playmod") - { - isQuickLaunch = true; - } - if (arg.ToLower() == "-forceupdate") - { - forceUpdate = true; - } - } - Knossos.StartUp(isQuickLaunch, forceUpdate); - } - /* External Commands */ /// /// Add mod to DevMod tab @@ -272,172 +305,6 @@ public void GlobalSettingsLoadData() GlobalSettingsView.LoadData(); } - /// - /// Write a string to UI console on debug tab - /// - /// - public void WriteToUIConsole(string message) - { - UiConsoleOutput += "\n"+ message; - } - - /* Debug Section */ - internal void OpenLog() - { - if (File.Exists(KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "Knossos.log")) - { - try - { - var cmd = new Process(); - cmd.StartInfo.FileName = KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "Knossos.log"; - cmd.StartInfo.UseShellExecute = true; - cmd.Start(); - cmd.Dispose(); - } - catch (Exception ex) - { - Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.ReloadLog",ex); - } - } - else - { - if(MainWindow.instance != null) - MessageBox.Show(MainWindow.instance, "Log File " + KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "Knossos.log not found.","File not found",MessageBox.MessageBoxButtons.OK); - } - } - - internal void OpenSettings() - { - if (File.Exists(KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "settings.json")) - { - try - { - var cmd = new Process(); - cmd.StartInfo.FileName = KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar +"settings.json"; - cmd.StartInfo.UseShellExecute = true; - cmd.Start(); - cmd.Dispose(); - } - catch (Exception ex) - { - Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.ReloadLog", ex); - } - } - else - { - if (MainWindow.instance != null) - MessageBox.Show(MainWindow.instance, "Log File " + KnUtils.GetKnossosDataFolderPath() + Path.DirectorySeparatorChar + "settings.json not found.", "File not found", MessageBox.MessageBoxButtons.OK); - } - } - - internal void OpenFS2Log() - { - if (File.Exists(KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "fs2_open.log")) - { - try - { - var cmd = new Process(); - cmd.StartInfo.FileName = KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data"+ Path.DirectorySeparatorChar + "fs2_open.log"; - cmd.StartInfo.UseShellExecute = true; - cmd.Start(); - cmd.Dispose(); - } - catch (Exception ex) - { - Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.ReloadFS2Log", ex); - } - } - else - { - if (MainWindow.instance != null) - MessageBox.Show(MainWindow.instance, "Log File " + KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar+ "data"+ Path.DirectorySeparatorChar+"fs2_open.log not found.", "File not found", MessageBox.MessageBoxButtons.OK); - } - } - - internal void OpenFS2Ini() - { - if (File.Exists(KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar+ "fs2_open.ini")) - { - try - { - var cmd = new Process(); - cmd.StartInfo.FileName = KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "fs2_open.ini"; - cmd.StartInfo.UseShellExecute = true; - cmd.Start(); - cmd.Dispose(); - } - catch (Exception ex) - { - Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.ReloadFS2ini", ex); - } - } - else - { - if (MainWindow.instance != null) - MessageBox.Show(MainWindow.instance, "Log File " + KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "fs2_open.ini not found.", "File not found", MessageBox.MessageBoxButtons.OK); - } - } - - internal async void UploadFS2Log() - { - if (File.Exists(KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "fs2_open.log")) - { - try - { - var logString = File.ReadAllText(KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "fs2_open.log",System.Text.Encoding.UTF8); - if(logString.Trim() != string.Empty) - { - var status = await Nebula.UploadLog(logString); - if(!status) - { - if (MainWindow.instance != null) - await MessageBox.Show(MainWindow.instance, "An error has ocurred while uploading the log file, check the log below.", "Upload log error", MessageBox.MessageBoxButtons.OK); - } - } - else - { - if (MainWindow.instance != null) - await MessageBox.Show(MainWindow.instance, "The log file is empty.", "Error", MessageBox.MessageBoxButtons.OK); - } - } - catch (Exception ex) - { - Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.UploadFS2Log", ex); - } - } - else - { - if (MainWindow.instance != null) - await MessageBox.Show(MainWindow.instance, "Log File " + KnUtils.GetFSODataFolderPath() + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "fs2_open.log not found.", "File not found", MessageBox.MessageBoxButtons.OK); - } - } - internal async void UploadKnossosConsole() - { - try - { - var status = await Nebula.UploadLog(UiConsoleOutput); - if (!status) - { - if (MainWindow.instance != null) - await MessageBox.Show(MainWindow.instance, "An error has ocurred while uploading the console output, check the log below.", "Upload error", MessageBox.MessageBoxButtons.OK); - } - } - catch (Exception ex) - { - Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.UploadKnossosConsole", ex); - } - } - - /// - /// Open Debug Filter Dialog - /// - internal async void OpenDebugFilterView() - { - var dialog = new Views.DebugFiltersView(); - dialog.DataContext = new DebugFiltersViewModel(); - await dialog.ShowDialog(MainWindow.instance!); - } - internal void applySettingsToList() { if (InstalledModsView != null) @@ -451,6 +318,15 @@ public void UpdateBuildInstallButtons(){ QuickSetupViewModel.Instance?.UpdateBuildName(LatestStable); } + /// + /// Write a string to UI console on debug tab + /// + /// + public void WriteToUIConsole(string message) + { + DebugView.WriteToUIConsole(message); + } + /// /// Open screenshot folder button command /// @@ -465,5 +341,10 @@ internal void OpenScreenshotsFolder() Log.Add(Log.LogSeverity.Error, "MainWindowViewModel.OpenScreenshotsFolder", ex); } } + + internal void TriggerMenuCommand() + { + IsMenuOpen = !IsMenuOpen; + } } } diff --git a/Knossos.NET/Views/DebugView.axaml b/Knossos.NET/Views/DebugView.axaml new file mode 100644 index 00000000..052cd511 --- /dev/null +++ b/Knossos.NET/Views/DebugView.axaml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Knossos.NET/Views/DebugView.axaml.cs b/Knossos.NET/Views/DebugView.axaml.cs new file mode 100644 index 00000000..ac1b6996 --- /dev/null +++ b/Knossos.NET/Views/DebugView.axaml.cs @@ -0,0 +1,13 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace Knossos.NET.Views; + +public partial class DebugView : UserControl +{ + public DebugView() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/Knossos.NET/Views/TaskView.axaml b/Knossos.NET/Views/TaskView.axaml index 9eca170f..3f60ee17 100644 --- a/Knossos.NET/Views/TaskView.axaml +++ b/Knossos.NET/Views/TaskView.axaml @@ -15,11 +15,9 @@ - - + + - - diff --git a/Knossos.NET/Views/Templates/TaskInfoButtonView.axaml b/Knossos.NET/Views/Templates/TaskInfoButtonView.axaml index bcf96fe2..0ad27ccc 100644 --- a/Knossos.NET/Views/Templates/TaskInfoButtonView.axaml +++ b/Knossos.NET/Views/Templates/TaskInfoButtonView.axaml @@ -9,11 +9,11 @@ xmlns:vm="using:Knossos.NET.ViewModels" x:DataType="vm:TaskInfoButtonViewModel"> - + diff --git a/Knossos.NET/Views/Templates/TaskItemView.axaml b/Knossos.NET/Views/Templates/TaskItemView.axaml index 5e106b48..b39640ce 100644 --- a/Knossos.NET/Views/Templates/TaskItemView.axaml +++ b/Knossos.NET/Views/Templates/TaskItemView.axaml @@ -20,7 +20,7 @@ - + diff --git a/Knossos.NET/Views/Windows/MainWindow.axaml b/Knossos.NET/Views/Windows/MainWindow.axaml index c1d6bbf2..0f716ed5 100644 --- a/Knossos.NET/Views/Windows/MainWindow.axaml +++ b/Knossos.NET/Views/Windows/MainWindow.axaml @@ -9,75 +9,57 @@ x:Class="Knossos.NET.Views.MainWindow" Icon="/Assets/knossos-icon.ico" WindowStartupLocation="CenterScreen" - Title="{Binding AppTitle}"> + Background="{StaticResource BackgroundColorPrimary}" + Title="{Binding AppTitle}" + xmlns:cvt="clr-namespace:Knossos.NET.Converters;assembly=Knossos.NET"> - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + From 2ea10181a38d0e28a7734b29288abd42fd6d0420 Mon Sep 17 00:00:00 2001 From: Salvador Cipolla Date: Fri, 18 Oct 2024 20:51:01 -0300 Subject: [PATCH 02/11] Order and size adjustment of main menu icons --- Knossos.NET/Assets/general/menu_community.png | Bin 11627 -> 13219 bytes .../Assets/general/menu_multiplayer.png | Bin 672 -> 10033 bytes .../ViewModels/Windows/MainWindowViewModel.cs | 37 ++++++++++-------- Knossos.NET/Views/Windows/MainWindow.axaml | 20 +++++----- 4 files changed, 30 insertions(+), 27 deletions(-) diff --git a/Knossos.NET/Assets/general/menu_community.png b/Knossos.NET/Assets/general/menu_community.png index 8bef97d205d19eae55d9045b4b4056898417613d..64585d4b956e7582f3f45d8231097e9204e638cc 100644 GIT binary patch delta 9640 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 - new MainViewMenuItem(InstalledModsView, "avares://Knossos.NET/Assets/general/menu_play.png", "Play", "View and run installed Freepsace Open games and modifications"), - new MainViewMenuItem(NebulaModsView, "avares://Knossos.NET/Assets/general/menu_explore.png", "Explore", "Search and install Freespace Open games and modifications"), - new MainViewMenuItem(FsoBuildsView, "avares://Knossos.NET/Assets/general/menu_engine.png", "Engine", "Download new Freespace Open engine builds"), - new MainViewMenuItem(DeveloperModView, "avares://Knossos.NET/Assets/general/menu_develop.png", "Develop", "Develop new games and modifications for the Freespace Open Engine"), - new MainViewMenuItem(CommunityView, "avares://Knossos.NET/Assets/general/menu_community.png", "Community", "FAQs and Community Resources"), - new MainViewMenuItem(PxoView, "avares://Knossos.NET/Assets/general/menu_multiplayer.png", "Multiplayer", "View multiplayer games using PXO servers"), - new MainViewMenuItem(GlobalSettingsView, "avares://Knossos.NET/Assets/general/menu_settings.png", "Settings", "Change global Freespace Open and Knossos.NET settings"), - new MainViewMenuItem(DebugView, "avares://Knossos.NET/Assets/general/menu_debug.png", "Debug", "Debug info"), - new MainViewMenuItem(TaskView, null, "Tasks", "Overview of current running tasks") - }; + Dispatcher.UIThread.Invoke(new Action(() => { + MenuItems = new ObservableCollection{ + new MainViewMenuItem(TaskView, null, "Tasks", "Overview of current running tasks"), + new MainViewMenuItem(InstalledModsView, "avares://Knossos.NET/Assets/general/menu_play.png", "Play", "View and run installed Freepsace Open games and modifications"), + new MainViewMenuItem(NebulaModsView, "avares://Knossos.NET/Assets/general/menu_explore.png", "Explore", "Search and install Freespace Open games and modifications"), + new MainViewMenuItem(FsoBuildsView, "avares://Knossos.NET/Assets/general/menu_engine.png", "Engine", "Download new Freespace Open engine builds"), + new MainViewMenuItem(DeveloperModView, "avares://Knossos.NET/Assets/general/menu_develop.png", "Develop", "Develop new games and modifications for the Freespace Open Engine"), + new MainViewMenuItem(CommunityView, "avares://Knossos.NET/Assets/general/menu_community.png", "Community", "FAQs and Community Resources"), + new MainViewMenuItem(PxoView, "avares://Knossos.NET/Assets/general/menu_multiplayer.png", "Multiplayer", "View multiplayer games using PXO servers"), + new MainViewMenuItem(GlobalSettingsView, "avares://Knossos.NET/Assets/general/menu_settings.png", "Settings", "Change global Freespace Open and Knossos.NET settings"), + new MainViewMenuItem(DebugView, "avares://Knossos.NET/Assets/general/menu_debug.png", "Debug", "Debug info") + }; + if (MenuItems != null && MenuItems.Count() - 1 > defaultSelectedIndex) + { + SelectedMenuItem = MenuItems[defaultSelectedIndex]; + } + })); } /// diff --git a/Knossos.NET/Views/Windows/MainWindow.axaml b/Knossos.NET/Views/Windows/MainWindow.axaml index 0f716ed5..608eebd4 100644 --- a/Knossos.NET/Views/Windows/MainWindow.axaml +++ b/Knossos.NET/Views/Windows/MainWindow.axaml @@ -23,20 +23,21 @@ - + - - - + +