136 lines
5.3 KiB
C#
136 lines
5.3 KiB
C#
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|