From acc95e00c11c42263f1bfbfd4f1177cf1f6a6d9a Mon Sep 17 00:00:00 2001 From: Katy Coe Date: Thu, 2 Jul 2020 16:04:39 +0200 Subject: [PATCH] GUI: Add C++ scaffolding output support --- Il2CppInspector.GUI/MainWindow.xaml | 27 ++++++++++++++--- Il2CppInspector.GUI/MainWindow.xaml.cs | 41 ++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 6 deletions(-) diff --git a/Il2CppInspector.GUI/MainWindow.xaml b/Il2CppInspector.GUI/MainWindow.xaml index a0b64fd..695877a 100644 --- a/Il2CppInspector.GUI/MainWindow.xaml +++ b/Il2CppInspector.GUI/MainWindow.xaml @@ -6,7 +6,7 @@ xmlns:local="clr-namespace:Il2CppInspectorGUI" xmlns:gif="https://github.com/XamlAnimatedGif/XamlAnimatedGif" mc:Ignorable="d" - Title="Il2CppInspector" Height="700" Width="990" Background="White" + Title="Il2CppInspector" Height="700" Width="1050" Background="White" WindowStartupLocation="CenterScreen" ContentRendered="MainWindow_OnContentRendered"> @@ -213,12 +213,14 @@ - + - + This only applies to C# prototypes output + + @@ -340,7 +342,7 @@ - + @@ -352,7 +354,24 @@ + + + + + C++ headers and scaffolding + + + + + + + MSVC + GCC + + + + diff --git a/Il2CppInspector.GUI/MainWindow.xaml.cs b/Il2CppInspector.GUI/MainWindow.xaml.cs index 27e4a54..8e03635 100644 --- a/Il2CppInspector.GUI/MainWindow.xaml.cs +++ b/Il2CppInspector.GUI/MainWindow.xaml.cs @@ -23,6 +23,7 @@ using System.Windows.Navigation; using System.Windows.Shapes; using Microsoft.Win32; using Il2CppInspector; +using Il2CppInspector.Cpp; using Il2CppInspector.GUI; using Il2CppInspector.Outputs; using Il2CppInspector.Reflection; @@ -198,13 +199,21 @@ namespace Il2CppInspectorGUI // Populate TreeView with namespace hierarchy trvNamespaces.ItemsSource = namespaceTree; + // Populate Unity version combo boxes var prevSelection = cboUnityVersion.SelectedItem; + var prevCppSelection = cboCppUnityVersion.SelectedItem; cboUnityVersion.Items.Clear(); - foreach (var version in UnityHeader.GuessHeadersForModel(model)) + cboCppUnityVersion.Items.Clear(); + foreach (var version in UnityHeader.GuessHeadersForModel(model)) { cboUnityVersion.Items.Add(version); + cboCppUnityVersion.Items.Add(version); + } cboUnityVersion.SelectedIndex = 0; - if (prevSelection != null) + cboCppUnityVersion.SelectedIndex = 0; + if (prevSelection != null) { cboUnityVersion.SelectedItem = prevSelection; + cboCppUnityVersion.SelectedItem = prevCppSelection; + } } private IEnumerable deconstructNamespaces(IEnumerable input) { @@ -405,6 +414,34 @@ namespace Il2CppInspectorGUI idaWriter.WriteScriptToFile(outFile); }); break; + + // C++ scaffolding + case { rdoOutputCpp: var r } when r.IsChecked == true: + + var cppSaveFileDialog = new SaveFileDialog { + Filter = "C++ header file (*.h)|*.h|All files (*.*)|*.*", + FileName = "il2cpp-types.h", + CheckFileExists = false, + OverwritePrompt = true + }; + + if (cppSaveFileDialog.ShowDialog() == false) + return; + + var cppOutFile = cppSaveFileDialog.FileName; + + txtBusyStatus.Text = "Generating C++ scaffolding..."; + areaBusyIndicator.Visibility = Visibility.Visible; + var selectedCppUnityVersion = ((UnityHeader)cboCppUnityVersion.SelectedItem)?.MinVersion; + var cppCompiler = (CppCompiler.Type) Enum.Parse(typeof(CppCompiler.Type), cboCppCompiler.SelectionBoxItem.ToString()); + await Task.Run(() => { + var cppWriter = new CppScaffolding(model) { + UnityVersion = selectedCppUnityVersion, + Compiler = cppCompiler + }; + cppWriter.WriteCppToFile(cppOutFile); + }); + break; } areaBusyIndicator.Visibility = Visibility.Hidden;