| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | using System.IO;using UnityEditor;using UnityEngine;#if dUI_TextMeshProusing TMPro;#endifusing XCharts.Runtime;namespace XCharts.Editor{    [CustomPropertyDrawer(typeof(ThemeStyle), true)]    public class ThemeStyleDrawer : BasePropertyDrawer    {        public override string ClassName { get { return "Theme"; } }        public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label)        {            base.OnGUI(pos, prop, label);            var defaultWidth = pos.width;            var defaultX = pos.x;            var chart = prop.serializedObject.targetObject as BaseChart;            if (MakeComponentFoldout(prop, "m_Show", false, new HeaderMenuInfo("Reset|Reset to theme default color", () =>                {                    chart.theme.sharedTheme.ResetTheme();                    chart.RefreshAllComponent();                }), new HeaderMenuInfo("Export|Export theme to asset for a new theme", () =>                {                    ExportThemeWindow.target = chart;                    EditorWindow.GetWindow(typeof(ExportThemeWindow));                }), new HeaderMenuInfo("Sync color to custom|Sync shared theme color to custom color", () =>                {                    chart.theme.SyncSharedThemeColorToCustom();                })))            {                ++EditorGUI.indentLevel;                var chartNameList = XCThemeMgr.GetAllThemeNames();                var lastIndex = chartNameList.IndexOf(chart.theme.themeName);                var y = pos.y + EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;                var selectedIndex = EditorGUI.Popup(new Rect(pos.x, y, pos.width, EditorGUIUtility.singleLineHeight),                    "Shared Theme", lastIndex, chartNameList.ToArray());                AddSingleLineHeight();                if (lastIndex != selectedIndex)                {                    XCThemeMgr.SwitchTheme(chart, chartNameList[selectedIndex]);                }                PropertyField(prop, "m_SharedTheme");                PropertyField(prop, "m_TransparentBackground");                PropertyField(prop, "m_EnableCustomTheme");                using(new EditorGUI.DisabledScope(!prop.FindPropertyRelative("m_EnableCustomTheme").boolValue))                    {                        PropertyField(prop, "m_CustomBackgroundColor");                        PropertyField(prop, "m_CustomColorPalette");                    }                    --EditorGUI.indentLevel;            }        }        private void AddPropertyField(Rect pos, SerializedProperty prop, ref float y)        {            float height = EditorGUI.GetPropertyHeight(prop, new GUIContent(prop.displayName), true);            EditorGUI.PropertyField(new Rect(pos.x, y, pos.width, height), prop, true);            y += height + EditorGUIUtility.standardVerticalSpacing;            m_Heights[m_KeyName] += height + EditorGUIUtility.standardVerticalSpacing;        }    }    public class ExportThemeWindow : UnityEditor.EditorWindow    {        public static BaseChart target;        private static ExportThemeWindow window;        private string m_ChartName;        static void Init()        {            window = (ExportThemeWindow) EditorWindow.GetWindow(typeof(ExportThemeWindow), false, "Export Theme", true);            window.minSize = new Vector2(600, 50);            window.maxSize = new Vector2(600, 50);            window.Show();        }        void OnInspectorUpdate()        {            Repaint();        }        private void OnGUI()        {            if (target == null)            {                Close();                return;            }            GUILayout.Space(10);            GUILayout.Label("Input a new name for theme:");            m_ChartName = GUILayout.TextField(m_ChartName);            GUILayout.Space(10);            GUILayout.Label("Export path:");            if (string.IsNullOrEmpty(m_ChartName))            {                GUILayout.Label("Need input a new name.");            }            else            {                GUILayout.Label(XCThemeMgr.GetThemeAssetPath(m_ChartName));            }            GUILayout.Space(20);            if (GUILayout.Button("Export"))            {                if (string.IsNullOrEmpty(m_ChartName))                {                    ShowNotification(new GUIContent("ERROR:Need input a new name!"));                }                else if (XCThemeMgr.ContainsTheme(m_ChartName))                {                    ShowNotification(new GUIContent("ERROR:The name you entered is already in use!"));                }                else if (IsAssetsExist(XCThemeMgr.GetThemeAssetPath(m_ChartName)))                {                    ShowNotification(new GUIContent("ERROR:The asset is exist! \npath=" +                        XCThemeMgr.GetThemeAssetPath(m_ChartName)));                }                else                {                    XCThemeMgr.ExportTheme(target.theme.sharedTheme, m_ChartName);                    ShowNotification(new GUIContent("SUCCESS:The theme is exported. \npath=" +                        XCThemeMgr.GetThemeAssetPath(m_ChartName)));                }            }        }        private bool IsAssetsExist(string path)        {            return File.Exists(Application.dataPath + "/../" + path);        }    }}
 |