obfuz/Editor/Settings/ObfuzSettingsProvider.cs

93 lines
3.2 KiB
C#

using System;
using System.Reflection;
using UnityEditor;
using UnityEditor.Presets;
using UnityEngine;
using UnityEngine.UIElements;
namespace Obfuz.Settings
{
public class ObfuzSettingsProvider : SettingsProvider
{
private static ObfuzSettingsProvider s_provider;
[SettingsProvider]
public static SettingsProvider CreateMyCustomSettingsProvider()
{
if (s_provider == null)
{
s_provider = new ObfuzSettingsProvider();
using (var so = new SerializedObject(ObfuzSettings.Instance))
{
s_provider.keywords = GetSearchKeywordsFromSerializedObject(so);
}
}
return s_provider;
}
private SerializedObject _serializedObject;
private SerializedProperty _enable;
private SerializedProperty _toObfuscatedAssemblyNames;
private SerializedProperty _notObfuscatedAssemblyNamesReferencingObfuscated;
private SerializedProperty _extraAssemblySearchDirs;
private SerializedProperty _enabledObfuscationPasses;
private SerializedProperty _symbolObfusSettings;
public ObfuzSettingsProvider() : base("Project/Obfuz", SettingsScope.Project)
{
}
public override void OnActivate(string searchContext, VisualElement rootElement)
{
InitGUI();
}
public override void OnDeactivate()
{
base.OnDeactivate();
ObfuzSettings.Save();
}
private void InitGUI()
{
var setting = ObfuzSettings.Instance;
_serializedObject?.Dispose();
_serializedObject = new SerializedObject(setting);
_enable = _serializedObject.FindProperty("enable");
_toObfuscatedAssemblyNames = _serializedObject.FindProperty("toObfuscatedAssemblyNames");
_notObfuscatedAssemblyNamesReferencingObfuscated = _serializedObject.FindProperty("notObfuscatedAssemblyNamesReferencingObfuscated");
_extraAssemblySearchDirs = _serializedObject.FindProperty("extraAssemblySearchDirs");
_enabledObfuscationPasses = _serializedObject.FindProperty("enabledObfuscationPasses");
_symbolObfusSettings = _serializedObject.FindProperty("symbolObfusSettings");
}
public override void OnGUI(string searchContext)
{
if (_serializedObject == null||!_serializedObject.targetObject)
{
InitGUI();
}
_serializedObject.Update();
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(_enable);
EditorGUILayout.PropertyField(_toObfuscatedAssemblyNames);
EditorGUILayout.PropertyField(_notObfuscatedAssemblyNamesReferencingObfuscated);
EditorGUILayout.PropertyField(_extraAssemblySearchDirs);
EditorGUILayout.PropertyField(_enabledObfuscationPasses);
EditorGUILayout.PropertyField(_symbolObfusSettings);
if (EditorGUI.EndChangeCheck())
{
_serializedObject.ApplyModifiedProperties();
ObfuzSettings.Save();
}
}
}
}