123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- using System.IO;
- using UnityEditor;
- using UnityEngine;
- #if dUI_TextMeshPro
- using TMPro;
- #endif
- using 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);
- }
- }
- }
|