diff --git a/FModel/MainWindow.xaml.cs b/FModel/MainWindow.xaml.cs index 050d585b..e9f3971a 100644 --- a/FModel/MainWindow.xaml.cs +++ b/FModel/MainWindow.xaml.cs @@ -53,9 +53,10 @@ namespace FModel DebugHelper.Logger.AsyncWrite = false; await Properties.Settings.SaveToFile().ConfigureAwait(false); } + private async void OnLoaded(object sender, RoutedEventArgs e) { - FModelVersion_TxtBlck.Text += Assembly.GetExecutingAssembly().GetName().Version.ToString(); + FModelVersion_TxtBlck.Text += Assembly.GetExecutingAssembly().GetName().Version?.ToString(); FModel_StsBar.DataContext = StatusBarVm.statusBarViewModel; FModel_AvalonEdit.DataContext = AvalonEditVm.avalonEditViewModel; FModel_ImgBox.DataContext = ImageBoxVm.imageBoxViewModel; @@ -73,18 +74,18 @@ namespace FModel Folders.CheckWatermarks(); await Task.WhenAll(Init()).ContinueWith(t => - { - Keys.NoKeyGoodBye(); - MenuItems.FeedCustomGoTos(); - AeConfiguration(); + { + Keys.NoKeyGoodBye(); + MenuItems.FeedCustomGoTos(); + AeConfiguration(); - if (t.Exception != null) Tasks.TaskCompleted(t.Exception); - else StatusBarVm.statusBarViewModel.Set($"{Properties.Resources.Hello} {Environment.UserName}!", Properties.Resources.State); + if (t.Exception != null) Tasks.TaskCompleted(t.Exception); + else StatusBarVm.statusBarViewModel.Set($"{Properties.Resources.Hello} {Environment.UserName}!", Properties.Resources.State); - App.StartTimer.Stop(); - DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Startup Time]", $"{App.StartTimer.ElapsedMilliseconds}ms"); - }, - TaskScheduler.FromCurrentSynchronizationContext()); + App.StartTimer.Stop(); + DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Startup Time]", $"{App.StartTimer.ElapsedMilliseconds}ms"); + }, + TaskScheduler.FromCurrentSynchronizationContext()); } private async Task Init() @@ -104,49 +105,51 @@ namespace FModel ShowSearchIn = false, OwnerWindow = this }; - this.CommandBindings.Add(Frm.FindBinding); + CommandBindings.Add(Frm.FindBinding); } #region MENU ITEMS + private void OnAutoShortcutPressed(object sender, RoutedEventArgs e) { if (e is ExecutedRoutedEventArgs r && r.Command is RoutedUICommand command) { string name = string.Empty; string state = string.Empty; - string[] states = new string[2] { Properties.Resources.Enabled, Properties.Resources.Disabled }; + string[] states = {Properties.Resources.Enabled, Properties.Resources.Disabled}; switch (command.Name) { case "AutoExport": - { - bool b = Properties.Settings.Default.AutoExport; - Properties.Settings.Default.AutoExport = !b; - name = Properties.Resources.Export; - state = states[Convert.ToInt32(b)]; - break; - } + { + bool b = Properties.Settings.Default.AutoExport; + Properties.Settings.Default.AutoExport = !b; + name = Properties.Resources.Export; + state = states[Convert.ToInt32(b)]; + break; + } case "AutoSave": - { - bool b = Properties.Settings.Default.AutoSave; - Properties.Settings.Default.AutoSave = !b; - name = Properties.Resources.Save; - state = states[Convert.ToInt32(b)]; - break; - } + { + bool b = Properties.Settings.Default.AutoSave; + Properties.Settings.Default.AutoSave = !b; + name = Properties.Resources.Save; + state = states[Convert.ToInt32(b)]; + break; + } case "AutoSaveImage": - { - bool b = Properties.Settings.Default.AutoSaveImage; - Properties.Settings.Default.AutoSaveImage = !b; - name = Properties.Resources.SaveImage; - state = states[Convert.ToInt32(b)]; - break; - } + { + bool b = Properties.Settings.Default.AutoSaveImage; + Properties.Settings.Default.AutoSaveImage = !b; + name = Properties.Resources.SaveImage; + state = states[Convert.ToInt32(b)]; + break; + } } Properties.Settings.Default.Save(); - Globals.gNotifier.ShowCustomMessage(Properties.Resources.Auto, string.Format("{0} 🠞 {1}", name, state)); + Globals.gNotifier.ShowCustomMessage(Properties.Resources.Auto, $"{name} 🠞 {state}"); } } + private void FModel_MI_Files_AES_Click(object sender, RoutedEventArgs e) { DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Window]", "Opening AES Manager"); @@ -154,8 +157,12 @@ namespace FModel { new AESManager().Show(); } - else { FWindows.GetOpenedWindow(Properties.Resources.AES).Focus(); } + else + { + FWindows.GetOpenedWindow(Properties.Resources.AES).Focus(); + } } + private void FModel_MI_Assets_Search_Click(object sender, RoutedEventArgs e) { DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Window]", "Opening Searcher"); @@ -171,6 +178,7 @@ namespace FModel else openedWindow.Focus(); } } + private void FModel_MI_Assets_AudioPlayer_Click(object sender, RoutedEventArgs e) { DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Window]", "Opening Audio Player"); @@ -178,11 +186,16 @@ namespace FModel { new AudioPlayer(); //no need to show, Show() is already in the constructor } - else { FWindows.GetOpenedWindow(Properties.Resources.AudioPlayer).Focus(); } + else + { + FWindows.GetOpenedWindow(Properties.Resources.AudioPlayer).Focus(); + } } + private async void FModel_MI_Assets_Export_Click(object sender, RoutedEventArgs e) { - if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && FModel_AssetsList.SelectedItem is ListBoxViewModel selectedItem) + if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && + FModel_AssetsList.SelectedItem is ListBoxViewModel selectedItem) { bool autoExport = FModel_AssetsList.SelectedItems.Count > 1; if (!autoExport) Assets.Export(selectedItem.PakEntry, false); // manual export if one @@ -199,10 +212,15 @@ namespace FModel } else Globals.gNotifier.ShowCustomMessage(Properties.Resources.Error, Properties.Resources.NoDataToExport); } + private void FModel_MI_Assets_Save_Click(object sender, RoutedEventArgs e) => AvalonEditVm.avalonEditViewModel.Save(false); + private void FModel_MI_Assets_CopyImage_Click(object sender, RoutedEventArgs e) => ImageBoxVm.imageBoxViewModel.Copy(); + private void FModel_MI_Assets_SaveImage_Click(object sender, RoutedEventArgs e) => ImageBoxVm.imageBoxViewModel.Save(false); - private void FModel_MI_Assets_OpenOutputFolder_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo { FileName = Properties.Settings.Default.OutputPath, UseShellExecute = true }); + + private void FModel_MI_Assets_OpenOutputFolder_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo {FileName = Properties.Settings.Default.OutputPath, UseShellExecute = true}); + private void FModel_MI_Assets_ImageMerger_Click(object sender, RoutedEventArgs e) { DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Window]", "Opening Images Merger Settings"); @@ -210,8 +228,12 @@ namespace FModel { new ImagesMerger().Show(); } - else { FWindows.GetOpenedWindow(Properties.Resources.ImagesMerger).Focus(); } + else + { + FWindows.GetOpenedWindow(Properties.Resources.ImagesMerger).Focus(); + } } + private void FModel_MI_Settings_General_Click(object sender, RoutedEventArgs e) { DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Window]", "Opening General Settings"); @@ -219,8 +241,12 @@ namespace FModel { new General().Show(); } - else { FWindows.GetOpenedWindow(Properties.Resources.GeneralSettings).Focus(); } + else + { + FWindows.GetOpenedWindow(Properties.Resources.GeneralSettings).Focus(); + } } + private void FModel_MI_Settings_IconCreator_Click(object sender, RoutedEventArgs e) { DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Window]", "Opening Icon Creator Settings"); @@ -228,8 +254,12 @@ namespace FModel { new IconCreator().Show(); } - else { FWindows.GetOpenedWindow(Properties.Resources.IconCreator).Focus(); } + else + { + FWindows.GetOpenedWindow(Properties.Resources.IconCreator).Focus(); + } } + private void FModel_MI_Settings_ThemeCreator_Click(object sender, RoutedEventArgs e) { DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Window]", "Opening Challenge Bundles Creator Settings"); @@ -237,8 +267,12 @@ namespace FModel { new ChallengeBundlesCreator().Show(); } - else { FWindows.GetOpenedWindow(Properties.Resources.ChallengesThemeCreator).Focus(); } + else + { + FWindows.GetOpenedWindow(Properties.Resources.ChallengesThemeCreator).Focus(); + } } + private void FModel_MI_Settings_RestoreLayout_Click(object sender, RoutedEventArgs e) { Properties.Settings.Default.GridParentTop = "11*"; @@ -250,26 +284,42 @@ namespace FModel Properties.Settings.Default.GridChildBottomCenter = "11*"; Properties.Settings.Default.GridChildBottomRight = "6*"; } + private void FModel_MI_Settings_ChangeGame_Click(object sender, RoutedEventArgs e) { var launcher = new FLauncher(); - if ((bool)launcher.ShowDialog()) + if ((bool) launcher.ShowDialog()) { + string currentvalue = Properties.Settings.Default.PakPath; Properties.Settings.Default.PakPath = launcher.Path; - DarkMessageBoxHelper.Show(Properties.Resources.PathChangedRestart, Properties.Resources.PathChanged, MessageBoxButton.OK, MessageBoxImage.Information); - DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Restarting]", "Path(s) changed"); + if (Properties.Settings.Default.PakPath != currentvalue) + { + DarkMessageBoxHelper.Show(Properties.Resources.PathChangedRestart, Properties.Resources.PathChanged, MessageBoxButton.OK, MessageBoxImage.Information); + DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Restarting]", "Path(s) changed"); - Properties.Settings.Default.Save(); - Process.Start(Process.GetCurrentProcess().MainModule.FileName); - Application.Current.Shutdown(); + Properties.Settings.Default.Save(); + Process.Start(Process.GetCurrentProcess().MainModule.FileName); + Application.Current.Shutdown(); + } + // well totally not needed but saving again just incase .. + else + { + launcher.Close(); + } } } - private void FModel_MI_Help_Trello_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo { FileName = "https://trello.com/b/DfmzkVQB/fmodel", UseShellExecute = true }); - private void FModel_MI_Help_Donate_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo { FileName = "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=EP9SSWG8MW4UC&source=url", UseShellExecute = true }); - private void FModel_MI_Help_Changelog_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo { FileName = "https://github.com/iAmAsval/FModel/releases/latest", UseShellExecute = true }); - private void FModel_MI_Help_BugsReport_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo { FileName = "https://github.com/iAmAsval/FModel/issues/new", UseShellExecute = true }); - private void FModel_MI_Help_Discord_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo { FileName = "https://discord.gg/fdkNYYQ", UseShellExecute = true }); + + private void FModel_MI_Help_Trello_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo {FileName = "https://trello.com/b/DfmzkVQB/fmodel", UseShellExecute = true}); + + private void FModel_MI_Help_Donate_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo {FileName = "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=EP9SSWG8MW4UC&source=url", UseShellExecute = true}); + + private void FModel_MI_Help_Changelog_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo {FileName = "https://github.com/iAmAsval/FModel/releases/latest", UseShellExecute = true}); + + private void FModel_MI_Help_BugsReport_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo {FileName = "https://github.com/iAmAsval/FModel/issues/new", UseShellExecute = true}); + + private void FModel_MI_Help_Discord_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo {FileName = "https://discord.gg/fdkNYYQ", UseShellExecute = true}); + private void FModel_MI_Help_About_Click(object sender, RoutedEventArgs e) { DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Window]", "Opening About"); @@ -277,11 +327,16 @@ namespace FModel { new FAbout().Show(); } - else { FWindows.GetOpenedWindow(Properties.Resources.AboutF).Focus(); } + else + { + FWindows.GetOpenedWindow(Properties.Resources.AboutF).Focus(); + } } + #endregion #region TREEVIEW + private void OnSelectedPathChanged(object sender, RoutedPropertyChangedEventArgs e) { AssetFilter_TxtBox.Text = string.Empty; @@ -296,7 +351,7 @@ namespace FModel if (Globals.bSearch && !string.IsNullOrEmpty(Globals.sSearch)) { - var selected = ListBoxVm.gameFiles.Where(x => x.Content.Equals(Globals.sSearch)).FirstOrDefault(); + var selected = ListBoxVm.gameFiles.FirstOrDefault(x => x.Content.Equals(Globals.sSearch)); FModel_AssetsList.SelectedIndex = ListBoxVm.gameFiles.IndexOf(selected); FModel_AssetsList.ScrollIntoView(selected); Globals.bSearch = false; @@ -307,9 +362,11 @@ namespace FModel FModel_AssetsList.ItemsSource = null; } } + #endregion #region LISTBOX + private void OnSelectedItemChanged(object sender, SelectionChangedEventArgs e) { if (sender is ListBox listBox && listBox.SelectedItem is ListBoxViewModel selectedItem) @@ -324,17 +381,20 @@ namespace FModel ExtractStopVm.extractViewModel.IsEnabled = false; } } + private async void OnMouseDoubleClick(object sender, MouseButtonEventArgs e) { if (sender is ListBox listBox && listBox.SelectedIndex >= 0) await Assets.GetUserSelection(listBox.SelectedItems); } + private void OnDeleteFilterClick(object sender, RoutedEventArgs e) { AssetFilter_TxtBox.Text = string.Empty; - if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && FModel_AssetsList.SelectedItem is ListBoxViewModel selectedItem) + if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && FModel_AssetsList.SelectedItem is ListBoxViewModel selectedItem) FModel_AssetsList.ScrollIntoView(selectedItem); } + private async void OnFilterTextChanged(object sender, TextChangedEventArgs e) { if (sender is TextBox textBox) @@ -367,11 +427,11 @@ namespace FModel filtered.Add(item); } }).ContinueWith(t => - { - if (t.Exception != null) Tasks.TaskCompleted(t.Exception); - else FModel_AssetsList.ItemsSource = filtered; - }, - TaskScheduler.FromCurrentSynchronizationContext()); + { + if (t.Exception != null) Tasks.TaskCompleted(t.Exception); + else FModel_AssetsList.ItemsSource = filtered; + }, + TaskScheduler.FromCurrentSynchronizationContext()); } else { @@ -380,10 +440,13 @@ namespace FModel } } } + #endregion #region BUTTONS + private void OnImageOpenClick(object sender, RoutedEventArgs e) => ImageBoxVm.imageBoxViewModel.OpenImage(); + private void OnStopClick(object sender, RoutedEventArgs e) { if (Tasks.TokenSource != null) @@ -392,29 +455,35 @@ namespace FModel DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Thread]", "Canceled by user"); } } + private async void OnExtractClick(object sender, RoutedEventArgs e) { if (FModel_AssetsList.SelectedIndex >= 0) await Assets.GetUserSelection(FModel_AssetsList.SelectedItems); } + #endregion #region RIGHT CLICK MENUS + private async void FModel_MI_Directory_Extract_Click(object sender, RoutedEventArgs e) { if (FModel_AssetsPathTree.HasItems && FModel_AssetsPathTree.SelectedItem is TreeviewViewModel treeItem) await SortedTreeviewVm.ExtractFolder(treeItem).ConfigureAwait(false); } + private async void FModel_MI_Directory_Export_Click(object sender, RoutedEventArgs e) { if (FModel_AssetsPathTree.HasItems && FModel_AssetsPathTree.SelectedItem is TreeviewViewModel treeItem) await SortedTreeviewVm.ExportFolder(treeItem).ConfigureAwait(false); } + private void FModel_MI_Directory_Save_Click(object sender, RoutedEventArgs e) { if (FModel_AssetsPathTree.HasItems && FModel_AssetsPathTree.SelectedItem is TreeviewViewModel treeItem) MenuItems.AddCustomGoTo(treeItem.Header, treeItem.GetFullPath().Substring(1) + "/"); } + private async void CM_Asset_Save_Click(object sender, RoutedEventArgs e) { if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0 && FModel_AssetsList.SelectedItem is ListBoxViewModel selectedItem) @@ -436,6 +505,7 @@ namespace FModel } else Globals.gNotifier.ShowCustomMessage(Properties.Resources.Error, Properties.Resources.NoDataToSave); } + private void CM_Copy_DPath_Click(object sender, RoutedEventArgs e) { if (FModel_AssetsPathTree.HasItems && FModel_AssetsPathTree.SelectedItem is TreeviewViewModel treeItem) @@ -443,26 +513,31 @@ namespace FModel else if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0) Assets.Copy(FModel_AssetsList.SelectedItems, ECopy.PathNoFile); } + private void CM_Copy_FPath_Click(object sender, RoutedEventArgs e) { if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0) Assets.Copy(FModel_AssetsList.SelectedItems, ECopy.Path); } + private void CM_Copy_FName_Click(object sender, RoutedEventArgs e) { if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0) Assets.Copy(FModel_AssetsList.SelectedItems, ECopy.File); } + private void CM_Copy_FPath_NoExt_Click(object sender, RoutedEventArgs e) { if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0) Assets.Copy(FModel_AssetsList.SelectedItems, ECopy.PathNoExt); } + private void CM_Copy_FName_NoExt_Click(object sender, RoutedEventArgs e) { if (FModel_AssetsList.HasItems && FModel_AssetsList.SelectedIndex >= 0) Assets.Copy(FModel_AssetsList.SelectedItems, ECopy.FileNoExt); } + #endregion } -} +} \ No newline at end of file