Skip to content

Commit

Permalink
Closed #1156, fixed #1157
Browse files Browse the repository at this point in the history
  • Loading branch information
VladiStep committed Jan 17, 2023
1 parent 4e6fb13 commit 2287d0a
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 21 deletions.
2 changes: 1 addition & 1 deletion UndertaleModTool/Editors/UndertaleCodeEditor.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
xmlns:undertale="clr-namespace:UndertaleModLib.Models;assembly=UndertaleModLib"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" d:DataContext="{d:DesignInstance undertale:UndertaleCode}"
DataContextChanged="UserControl_DataContextChanged" Unloaded="DataUserControl_Unloaded">
DataContextChanged="UserControl_DataContextChanged" Loaded="UndertaleCodeEditor_Loaded" Unloaded="UndertaleCodeEditor_Unloaded">
<UserControl.CommandBindings>
<CommandBinding Command="{x:Static local:UndertaleCodeEditor.Compile}" Executed="Command_Compile" />
</UserControl.CommandBindings>
Expand Down
59 changes: 40 additions & 19 deletions UndertaleModTool/Editors/UndertaleCodeEditor.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ public UndertaleCodeEditor()
DisassemblyEditor.TextArea.SelectionCornerRadius = 0;
}

private void DataUserControl_Unloaded(object sender, RoutedEventArgs e)
private void UndertaleCodeEditor_Unloaded(object sender, RoutedEventArgs e)
{
OverriddenDecompPos = default;
OverriddenDisasmPos = default;
Expand All @@ -205,27 +205,57 @@ private void SearchPanel_LostFocus(object sender, RoutedEventArgs e)
noMatchesTT.IsOpen = false;
}

private void UndertaleCodeEditor_Loaded(object sender, RoutedEventArgs e)
{
FillInCodeViewer();
}
private void FillInCodeViewer(bool overrideFirst = false)
{
UndertaleCode code = DataContext as UndertaleCode;
if (DisassemblyTab.IsSelected && code != CurrentDisassembled)
{
if (!overrideFirst)
{
DisassembleCode(code, !DisassembledYet);
DisassembledYet = true;
}
else
DisassembleCode(code, true);
}
if (DecompiledTab.IsSelected && code != CurrentDecompiled)
{
if (!overrideFirst)
{
_ = DecompileCode(code, !DecompiledYet);
DecompiledYet = true;
}
else
_ = DecompileCode(code, true);
}
}

private async void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
UndertaleCode code = this.DataContext as UndertaleCode;
Directory.CreateDirectory(MainPath);
Directory.CreateDirectory(TempPath);
if (code == null)
return;

DecompiledSearchPanel.Close();
DisassemblySearchPanel.Close();

await DecompiledLostFocusBody(sender, null);
DisassemblyEditor_LostFocus(sender, null);
if (DisassemblyTab.IsSelected && code != CurrentDisassembled)
{
DisassembleCode(code, !DisassembledYet);
DisassembledYet = true;
}
if (DecompiledTab.IsSelected && code != CurrentDecompiled)

if (!IsLoaded)
{
_ = DecompileCode(code, !DecompiledYet);
DecompiledYet = true;
// If it's not loaded, then "FillInCodeViewer()" will be executed on load.
// This prevents a bug with freezing on code opening.
return;
}

FillInCodeViewer();
}

private async void UserControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
Expand Down Expand Up @@ -277,16 +307,7 @@ private async void UserControl_DataContextChanged(object sender, DependencyPrope
MainWindow.CodeEditorDecompile = Unstated;
}
else
{
if (DisassemblyTab.IsSelected && code != CurrentDisassembled)
{
DisassembleCode(code, true);
}
if (DecompiledTab.IsSelected && code != CurrentDecompiled)
{
_ = DecompileCode(code, true);
}
}
FillInCodeViewer(true);
}

public static readonly RoutedEvent CtrlKEvent = EventManager.RegisterRoutedEvent(
Expand Down
26 changes: 25 additions & 1 deletion UndertaleModTool/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2147,7 +2147,31 @@ public void OpenCodeFile(string name, CodeEditorMode editorDecompile)
{
Focus();

CodeEditorDecompile = editorDecompile;
if (Selected == code)
{
#pragma warning disable CA1416
var codeEditor = FindVisualChild<UndertaleCodeEditor>(DataEditor);
if (codeEditor is null)
{
Debug.WriteLine("Cannot select the code editor mode tab - its instance is not found.");
}
else
{
if (editorDecompile == CodeEditorMode.Decompile
&& !codeEditor.DecompiledTab.IsSelected)
{
codeEditor.CodeModeTabs.SelectedItem = codeEditor.DecompiledTab;
}
else if (editorDecompile == CodeEditorMode.DontDecompile
&& !codeEditor.DisassemblyTab.IsSelected)
{
codeEditor.CodeModeTabs.SelectedItem = codeEditor.DisassemblyTab;
}
}
#pragma warning restore CA1416
}
else
CodeEditorDecompile = editorDecompile;

HighlightObject(code);
ChangeSelection(code);
Expand Down

0 comments on commit 2287d0a

Please sign in to comment.