Browse Source

Moved CommandDebugPopup and LocalizationDebugWindow into new Debug folder and kept LocalizationDebugWindow ViewModel

CPKreuz 2 years ago
parent
commit
10ba953129

+ 5 - 3
src/PixiEditor/ViewModels/SubViewModels/Main/DebugViewModel.cs

@@ -1,18 +1,18 @@
 using System.Diagnostics;
 using System.IO;
 using System.Reflection;
+using System.Windows;
 using System.Windows.Input;
 using Microsoft.Win32;
 using Newtonsoft.Json;
 using PixiEditor.Helpers;
 using PixiEditor.Localization;
-using PixiEditor.Models.Commands.Attributes;
 using PixiEditor.Models.Commands.Attributes.Commands;
 using PixiEditor.Models.Commands.Templates.Parsers;
 using PixiEditor.Models.Dialogs;
 using PixiEditor.Models.Enums;
 using PixiEditor.Models.UserPreferences;
-using PixiEditor.Views.Dialogs;
+using PixiEditor.Views.Dialogs.DebugDialogs;
 
 namespace PixiEditor.ViewModels.SubViewModels.Main;
 
@@ -198,7 +198,9 @@ internal class DebugViewModel : SubViewModel<ViewModelMain>
     [Command.Debug("PixiEditor.Debug.OpenLocalizationDebugWindow", "OPEN_LOCALIZATION_DEBUG_WINDOW", "OPEN_LOCALIZATION_DEBUG_WINDOW")]
     public void OpenLocalizationDebugWindow()
     {
-        new LocalizationDebugWindow().Show();
+        var window = Application.Current.Windows.OfType<LocalizationDebugWindow>().FirstOrDefault(new LocalizationDebugWindow());
+        window.Show();
+        window.Activate();
     }
 
     [Command.Internal("PixiEditor.Debug.SetLanguageFromFilePicker")]

+ 1 - 1
src/PixiEditor/Views/Dialogs/CommandDebugPopup.xaml → src/PixiEditor/Views/Dialogs/DebugDialogs/CommandDebugPopup.xaml

@@ -1,4 +1,4 @@
-<Window x:Class="PixiEditor.Views.Dialogs.CommandDebugPopup"
+<Window x:Class="PixiEditor.Views.Dialogs.DebugDialogs.CommandDebugPopup"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

+ 2 - 4
src/PixiEditor/Views/Dialogs/CommandDebugPopup.xaml.cs → src/PixiEditor/Views/Dialogs/DebugDialogs/CommandDebugPopup.xaml.cs

@@ -1,5 +1,4 @@
-using System.Collections.ObjectModel;
-using System.Windows;
+using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Documents;
 using System.Windows.Input;
@@ -7,9 +6,8 @@ using System.Windows.Media;
 using PixiEditor.Models.Commands;
 using PixiEditor.Models.Commands.Commands;
 using PixiEditor.Models.Commands.Evaluators;
-using PixiEditor.Models.DataHolders;
 
-namespace PixiEditor.Views.Dialogs;
+namespace PixiEditor.Views.Dialogs.DebugDialogs;
 
 public partial class CommandDebugPopup : Window
 {

+ 2 - 2
src/PixiEditor/Views/Dialogs/LocalizationDebugWindow.xaml → src/PixiEditor/Views/Dialogs/DebugDialogs/LocalizationDebugWindow.xaml

@@ -1,4 +1,4 @@
-<Window x:Class="PixiEditor.Views.Dialogs.LocalizationDebugWindow"
+<Window x:Class="PixiEditor.Views.Dialogs.DebugDialogs.LocalizationDebugWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
@@ -64,7 +64,7 @@
                 <TextBox Grid.Column="1" Style="{StaticResource DarkTextBoxStyle}" TextChanged="ApiKeyChanged" Text="{Binding DataContext.ApiKey, ElementName=popup}"></TextBox>
                 <Button Style="{StaticResource DarkRoundButton}" Margin="5,0,0,0" Grid.Column="2" views:Translator.Key="LOG_IN" Command="{Binding DataContext.LoadApiKeyCommand, ElementName=popup}"/>
             </Grid>
-            <Grid Visibility="{Binding DataContext.LoggedIn, ElementName=popup, Converter={BoolToVisibilityConverter}}" Margin="0,5,0,0" Height="25">
+            <Grid Visibility="{Binding DataContext.LoggedIn, Mode=OneWay, ElementName=popup, Converter={BoolToVisibilityConverter}}" Margin="0,5,0,0" Height="25">
                 <Grid.ColumnDefinitions>
                     <ColumnDefinition Width="120"/>
                     <ColumnDefinition/>

+ 17 - 10
src/PixiEditor/Views/Dialogs/LocalizationDebugWindow.xaml.cs → src/PixiEditor/Views/Dialogs/DebugDialogs/LocalizationDebugWindow.xaml.cs

@@ -1,31 +1,38 @@
 using System.Collections.ObjectModel;
 using System.Globalization;
-using System.Net;
 using System.Net.Http;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Input;
 using System.Windows.Media;
+using System.Windows.Threading;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using PixiEditor.Helpers;
 using PixiEditor.Localization;
 using PixiEditor.Models.UserPreferences;
 
-namespace PixiEditor.Views.Dialogs;
+namespace PixiEditor.Views.Dialogs.DebugDialogs;
 
 public partial class LocalizationDebugWindow : Window
 {
-    private LocalizationDataContext dataContext;
+    private static LocalizationDataContext dataContext;
+    private bool passedStartup;
 
     public LocalizationDebugWindow()
     {
         InitializeComponent();
-        DataContext = dataContext = new LocalizationDataContext(this);
+        DataContext = (dataContext ??= new LocalizationDataContext(this));
     }
 
     private void ApiKeyChanged(object sender, TextChangedEventArgs e)
     {
+        if (!passedStartup)
+        {
+            passedStartup = true;
+            return;
+        }
+        
         dataContext.LoggedIn = false;
         dataContext.StatusMessage = "NOT_LOGGED_IN";
     }
@@ -44,7 +51,7 @@ public partial class LocalizationDebugWindow : Window
     {
         private const int ProjectId = 400351;
 
-        private readonly LocalizationDebugWindow window;
+        private Dispatcher dispatcher;
         private string apiKey;
         private bool loggedIn;
         private LocalizedString statusMessage = "NOT_LOGGED_IN";
@@ -90,7 +97,7 @@ public partial class LocalizationDebugWindow : Window
 
         public LocalizationDataContext(LocalizationDebugWindow window)
         {
-            this.window = window;
+            dispatcher = Application.Current.Dispatcher;
             apiKey = PreferencesSettings.Current.GetLocalPreference<string>("POEditor_API_Key");
             LoadApiKeyCommand = new RelayCommand(LoadApiKey, _ => !string.IsNullOrWhiteSpace(apiKey));
             SyncLanguageCommand =
@@ -108,7 +115,7 @@ public partial class LocalizationDebugWindow : Window
                 {
                     var result = await CheckProjectByIdAsync(ApiKey);
 
-                    window.Dispatcher.Invoke(() =>
+                    dispatcher.Invoke(() =>
                     {
                         LoggedIn = result.IsSuccess;
                         StatusMessage = result.Message;
@@ -139,7 +146,7 @@ public partial class LocalizationDebugWindow : Window
                 }
                 finally
                 {
-                    window.Dispatcher.Invoke(() => Mouse.OverrideCursor = null);
+                    dispatcher.Invoke(() => Mouse.OverrideCursor = null);
                 }
             });
         }
@@ -154,7 +161,7 @@ public partial class LocalizationDebugWindow : Window
                 {
                     var result = await DownloadLanguage(ApiKey, SelectedLanguage.Code);
 
-                    window.Dispatcher.Invoke(() =>
+                    dispatcher.Invoke(() =>
                     {
                         StatusMessage = result.Message;
                         DebugViewModel.Owner.LocalizationProvider.LoadDebugKeys(result.Output, SelectedLanguage.IsRightToLeft);
@@ -166,7 +173,7 @@ public partial class LocalizationDebugWindow : Window
                 }
                 finally
                 {
-                    window.Dispatcher.Invoke(() => Mouse.OverrideCursor = null);
+                    dispatcher.Invoke(() => Mouse.OverrideCursor = null);
                 }
             });
         }