You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			206 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			206 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C#
		
	
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| using UnityEditor;
 | |
| #if UNITY_5_3_OR_NEWER
 | |
| using UnityEditor.SceneManagement;
 | |
| #endif
 | |
| #if UNITY_2018_3_OR_NEWER
 | |
| using UnityEditor.Experimental.SceneManagement;
 | |
| #endif
 | |
| using FairyGUI;
 | |
| 
 | |
| namespace FairyGUIEditor
 | |
| {
 | |
|     /// <summary>
 | |
|     /// 
 | |
|     /// </summary>
 | |
|     public class PackagesWindow : EditorWindow
 | |
|     {
 | |
|         Vector2 scrollPos1;
 | |
|         Vector2 scrollPos2;
 | |
|         GUIStyle itemStyle;
 | |
| 
 | |
|         int selectedPackage;
 | |
|         string selectedPackageName;
 | |
|         string selectedComponentName;
 | |
| 
 | |
|         public PackagesWindow()
 | |
|         {
 | |
|             this.maxSize = new Vector2(550, 400);
 | |
|             this.minSize = new Vector2(550, 400);
 | |
|         }
 | |
| 
 | |
|         public void SetSelection(string packageName, string componentName)
 | |
|         {
 | |
|             selectedPackageName = packageName;
 | |
|             selectedComponentName = componentName;
 | |
|         }
 | |
| 
 | |
|         void OnGUI()
 | |
|         {
 | |
|             if (itemStyle == null)
 | |
|             {
 | |
|                 itemStyle = new GUIStyle(EditorStyles.textField);
 | |
|                 itemStyle.normal.background = null;
 | |
|                 itemStyle.onNormal.background = GUI.skin.GetStyle("ObjectPickerResultsEven").active.background;
 | |
|                 itemStyle.focused.background = null;
 | |
|                 itemStyle.onFocused.background = null;
 | |
|                 itemStyle.hover.background = null;
 | |
|                 itemStyle.onHover.background = null;
 | |
|                 itemStyle.active.background = null;
 | |
|                 itemStyle.onActive.background = null;
 | |
|                 itemStyle.margin.top = 0;
 | |
|                 itemStyle.margin.bottom = 0;
 | |
|             }
 | |
| 
 | |
|             EditorGUILayout.BeginHorizontal();
 | |
| 
 | |
|             //package list start------
 | |
|             EditorGUILayout.BeginHorizontal();
 | |
|             GUILayout.Space(5);
 | |
| 
 | |
|             EditorGUILayout.BeginVertical();
 | |
|             GUILayout.Space(10);
 | |
|             EditorGUILayout.LabelField("Packages", (GUIStyle)"OL Title", GUILayout.Width(300));
 | |
| 
 | |
|             EditorGUILayout.BeginHorizontal();
 | |
|             GUILayout.Space(4);
 | |
| 
 | |
|             scrollPos1 = EditorGUILayout.BeginScrollView(scrollPos1, (GUIStyle)"CN Box", GUILayout.Height(300), GUILayout.Width(300));
 | |
|             EditorToolSet.LoadPackages();
 | |
|             List<UIPackage> pkgs = UIPackage.GetPackages();
 | |
|             int cnt = pkgs.Count;
 | |
|             if (cnt == 0)
 | |
|             {
 | |
|                 selectedPackage = -1;
 | |
|                 selectedPackageName = null;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 for (int i = 0; i < cnt; i++)
 | |
|                 {
 | |
|                     EditorGUILayout.BeginHorizontal();
 | |
|                     GUILayout.Space(4);
 | |
|                     if (GUILayout.Toggle(selectedPackageName == pkgs[i].name, pkgs[i].name, itemStyle, GUILayout.ExpandWidth(true)))
 | |
|                     {
 | |
|                         selectedPackage = i;
 | |
|                         selectedPackageName = pkgs[i].name;
 | |
|                     }
 | |
|                     EditorGUILayout.EndHorizontal();
 | |
|                 }
 | |
|             }
 | |
|             EditorGUILayout.EndScrollView();
 | |
| 
 | |
|             EditorGUILayout.EndHorizontal();
 | |
| 
 | |
|             EditorGUILayout.EndVertical();
 | |
| 
 | |
|             EditorGUILayout.EndHorizontal();
 | |
| 
 | |
|             //package list end------
 | |
| 
 | |
|             //component list start------
 | |
| 
 | |
|             EditorGUILayout.BeginHorizontal();
 | |
|             GUILayout.Space(5);
 | |
| 
 | |
|             EditorGUILayout.BeginVertical();
 | |
|             GUILayout.Space(10);
 | |
|             EditorGUILayout.LabelField("Components", (GUIStyle)"OL Title", GUILayout.Width(220));
 | |
| 
 | |
|             EditorGUILayout.BeginHorizontal();
 | |
|             GUILayout.Space(4);
 | |
| 
 | |
|             scrollPos2 = EditorGUILayout.BeginScrollView(scrollPos2, (GUIStyle)"CN Box", GUILayout.Height(300), GUILayout.Width(220));
 | |
|             if (selectedPackage >= 0)
 | |
|             {
 | |
|                 List<PackageItem> items = pkgs[selectedPackage].GetItems();
 | |
|                 int i = 0;
 | |
|                 foreach (PackageItem pi in items)
 | |
|                 {
 | |
|                     if (pi.type == PackageItemType.Component && pi.exported)
 | |
|                     {
 | |
|                         EditorGUILayout.BeginHorizontal();
 | |
|                         GUILayout.Space(4);
 | |
|                         if (GUILayout.Toggle(selectedComponentName == pi.name, pi.name, itemStyle, GUILayout.ExpandWidth(true)))
 | |
|                             selectedComponentName = pi.name;
 | |
|                         i++;
 | |
|                         EditorGUILayout.EndHorizontal();
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             EditorGUILayout.EndScrollView();
 | |
| 
 | |
|             EditorGUILayout.EndHorizontal();
 | |
| 
 | |
|             EditorGUILayout.EndVertical();
 | |
| 
 | |
|             EditorGUILayout.EndHorizontal();
 | |
| 
 | |
|             //component list end------
 | |
| 
 | |
|             GUILayout.Space(10);
 | |
| 
 | |
|             EditorGUILayout.EndHorizontal();
 | |
| 
 | |
|             GUILayout.Space(20);
 | |
| 
 | |
|             //buttons start---
 | |
|             EditorGUILayout.BeginHorizontal();
 | |
| 
 | |
|             GUILayout.Space(180);
 | |
| 
 | |
|             if (GUILayout.Button("Refresh", GUILayout.Width(100)))
 | |
|                 EditorToolSet.ReloadPackages();
 | |
| 
 | |
|             GUILayout.Space(20);
 | |
|             if (GUILayout.Button("OK", GUILayout.Width(100)) && selectedPackage >= 0)
 | |
|             {
 | |
|                 UIPackage selectedPkg = pkgs[selectedPackage];
 | |
|                 string tmp = selectedPkg.assetPath.ToLower();
 | |
|                 string packagePath;
 | |
|                 int pos = tmp.LastIndexOf("resources/");
 | |
|                 if (pos != -1)
 | |
|                     packagePath = selectedPkg.assetPath.Substring(pos + 10);
 | |
|                 else
 | |
|                     packagePath = selectedPkg.assetPath;
 | |
|                 if (Selection.activeGameObject != null)
 | |
|                 {
 | |
| #if UNITY_2018_3_OR_NEWER
 | |
|                     bool isPrefab = PrefabUtility.GetPrefabAssetType(Selection.activeGameObject) != PrefabAssetType.NotAPrefab;
 | |
| #else
 | |
|                     bool isPrefab = PrefabUtility.GetPrefabType(Selection.activeGameObject) == PrefabType.Prefab;
 | |
| #endif
 | |
|                     Selection.activeGameObject.SendMessage("OnUpdateSource",
 | |
|                         new object[] { selectedPkg.name, packagePath, selectedComponentName, !isPrefab },
 | |
|                         SendMessageOptions.DontRequireReceiver);
 | |
|                 }
 | |
| 
 | |
| #if UNITY_2018_3_OR_NEWER
 | |
|                 PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage();
 | |
|                 if (prefabStage != null)
 | |
|                     EditorSceneManager.MarkSceneDirty(prefabStage.scene);
 | |
|                 else
 | |
|                     ApplyChange();
 | |
| #else
 | |
|                 ApplyChange();
 | |
| #endif
 | |
|                 this.Close();
 | |
|             }
 | |
| 
 | |
|             EditorGUILayout.EndHorizontal();
 | |
|         }
 | |
| 
 | |
|         void ApplyChange()
 | |
|         {
 | |
| #if UNITY_5_3_OR_NEWER
 | |
|             EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
 | |
| #elif UNITY_5
 | |
|             EditorApplication.MarkSceneDirty();
 | |
| #else
 | |
|             EditorUtility.SetDirty(Selection.activeGameObject);
 | |
| #endif
 | |
|         }
 | |
|     }
 | |
| }
 |