/// <summary> /// User has selected an image /// </summary> private void LstImages_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { // Selection has been removed? if (((ListBox)sender).SelectedItem == null) { trvNamespaces.ItemsSource = null; return; } // Get selected image var model = (Il2CppModel)((ListBox)sender).SelectedItem; // Get namespaces var namespaces = model.Assemblies.SelectMany(x => x.DefinedTypes).GroupBy(t => t.Namespace).Select(n => n.Key); // Break namespaces down into a tree var namespaceTree = deconstructNamespaces(namespaces); // Uncheck the default exclusions foreach (var exclusion in Constants.DefaultExcludedNamespaces) { var parts = exclusion.Split('.'); CheckboxNode node = null; foreach (var part in parts) { node = (node?.Children ?? namespaceTree).FirstOrDefault(c => c.Name == part); if (node == null) { break; } } if (node != null) { node.IsChecked = false; } } // Populate TreeView with namespace hierarchy trvNamespaces.ItemsSource = namespaceTree; // Populate Unity version combo boxes var prevSelection = cboUnityVersion.SelectedItem; var prevCppSelection = cboCppUnityVersion.SelectedItem; cboUnityVersion.Items.Clear(); cboCppUnityVersion.Items.Clear(); foreach (var version in UnityHeader.GuessHeadersForModel(model)) { cboUnityVersion.Items.Add(version); cboCppUnityVersion.Items.Add(version); } cboUnityVersion.SelectedIndex = 0; cboCppUnityVersion.SelectedIndex = 0; if (prevSelection != null) { cboUnityVersion.SelectedItem = prevSelection; cboCppUnityVersion.SelectedItem = prevCppSelection; } }
/// <summary> /// User has selected an image /// </summary> private void LstImages_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { // Selection has been removed? if (((ListBox)sender).SelectedItem == null) { trvNamespaces.ItemsSource = null; return; } // Get selected image var model = (AppModel)((ListBox)sender).SelectedItem; // Get namespaces var namespaces = model.ILModel.Assemblies.SelectMany(x => x.DefinedTypes).GroupBy(t => t.Namespace).Select(n => n.Key); // Break namespaces down into a tree var namespaceTree = deconstructNamespaces(namespaces); // Uncheck the default exclusions foreach (var exclusion in Constants.DefaultExcludedNamespaces) { var parts = exclusion.Split('.'); CheckboxNode node = null; foreach (var part in parts) { node = (node?.Children ?? namespaceTree).FirstOrDefault(c => c.Name == part); if (node == null) { break; } } if (node != null) { node.IsChecked = false; } } // Populate TreeView with namespace hierarchy trvNamespaces.ItemsSource = namespaceTree; // Populate Unity version combo boxes var prevIdaSelection = cboPyUnityVersion.SelectedItem; var prevCppSelection = cboCppUnityVersion.SelectedItem; var prevJsonSelection = cboJsonUnityVersion.SelectedItem; cboPyUnityVersion.Items.Clear(); cboCppUnityVersion.Items.Clear(); cboJsonUnityVersion.Items.Clear(); foreach (var version in UnityHeaders.GuessHeadersForBinary(model.Package.Binary)) { cboPyUnityVersion.Items.Add(version); cboCppUnityVersion.Items.Add(version); cboJsonUnityVersion.Items.Add(version); } // Restore previous selection via value equality if (prevIdaSelection != null) { cboPyUnityVersion.SelectedItem = cboPyUnityVersion.Items.Cast <UnityHeaders>().FirstOrDefault(v => v.Equals(prevIdaSelection)); cboCppUnityVersion.SelectedItem = cboCppUnityVersion.Items.Cast <UnityHeaders>().FirstOrDefault(v => v.Equals(prevCppSelection)); cboJsonUnityVersion.SelectedItem = cboJsonUnityVersion.Items.Cast <UnityHeaders>().FirstOrDefault(v => v.Equals(prevJsonSelection)); } // Prefer latest Unity versions if there was no previous selection or it's now invalid if (cboPyUnityVersion.SelectedItem == null) { cboPyUnityVersion.SelectedIndex = cboPyUnityVersion.Items.Count - 1; } if (cboCppUnityVersion.SelectedItem == null) { cboCppUnityVersion.SelectedIndex = cboCppUnityVersion.Items.Count - 1; } if (cboJsonUnityVersion.SelectedItem == null) { cboJsonUnityVersion.SelectedIndex = cboJsonUnityVersion.Items.Count - 1; } }