private void DrawSelectedTypeHeader() { // Title GUILayout.Space(2); LabelHelper.TitleLabel(_selectedType.Name); LineHelper.Draw(Color.gray); // Common GUILayout.Space(2); if (_selectedType.BaseType != typeof(ObservableModel)) { DrawHeaderButtons(); } // Base type GUILayout.Space(10); LabelHelper.HeaderLabel("Type"); GUILayout.Space(2); this.baseTypePopup.Draw(); GUILayout.Space(4); _selectedTypeIsSealed = EditorGUILayout.Toggle("Sealed", _selectedTypeIsSealed); // Namespace GUILayout.Space(10); LabelHelper.HeaderLabel("Namespace"); GUILayout.Space(2); this.namespaceField.Draw(GUIContent.none, 0); if (this.baseTypePopup.SelectedItem != nameof(ObservableModel) && !string.Equals(_selectedType.Namespace, this.namespaceField.Text)) { EditorGUILayout.HelpBox($"Must manually change the namespace in {_selectedType.Name}.Handler.cs", MessageType.Warning); } // Properties GUILayout.Space(10); LabelHelper.HeaderLabel("Properties"); GUILayout.Space(2); _propertiesScrollPos = EditorGUILayout.BeginScrollView(_propertiesScrollPos, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); if (_propertiesDrawerCache.ContainsKey(_selectedType)) { EditablePropertyDrawer[] props = _propertiesDrawerCache[_selectedType]; for (var i = 0; i < props.Length; i++) { props[i].Draw(_propertiesAreaWidth); } } EditorGUILayout.EndScrollView(); }
void PropertiesWindow(int id = 2) { GUILayout.BeginVertical(); if (listTypes != null && !string.IsNullOrEmpty(listTypes.SelectedItem)) { if (selectedType != null) { // Title GUILayout.Space(2); LabelHelper.TitleLabel(selectedType.Name); LineHelper.Draw(Color.gray); // Common GUILayout.Space(2); if (selectedType.BaseType != typeof(ObservableModel)) { GUILayout.BeginHorizontal(); if (ColorButton.Draw("Edit View Logic (Handler)", CommonColor.LightBlue, GUILayout.Height(30))) { string handler = CodeGenerationHelper.GetScriptPathByType(selectedType); handler = handler.Replace(".cs", ".Handler.cs"); UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(handler, 1); } if (ColorButton.Draw("Edit View (UI)", CommonColor.LightBlue, GUILayout.Height(30))) { GameObject prefabInstance; UnityEngine.Object obj = FindObjectOfType(selectedType); if (obj != null) { prefabInstance = ((MonoBehaviour)obj).gameObject; } else { bool isDialog = selectedType.BaseType == typeof(UIManDialog); string prefabFolder = GetUIPrefabPath(selectedType, isDialog); string prefabFile = selectedType.Name + PREFAB_EXT; string prefabPath = Path.Combine(prefabFolder, prefabFile); GameObject prefab = AssetDatabase.LoadAssetAtPath <GameObject> (prefabPath); if (prefab == null) { prefab = FindAssetObject <GameObject> (selectedType.Name, PREFAB_EXT); } prefabInstance = PrefabUtility.InstantiatePrefab(prefab) as GameObject; if (isDialog) { prefabInstance.transform.SetParent(UIMan.Instance.dialogRoot, false); } else { prefabInstance.transform.SetParent(UIMan.Instance.screenRoot, false); } } Selection.activeGameObject = prefabInstance; } if (ColorButton.Draw("Delete", CommonColor.LightRed, GUILayout.Height(30))) { string cs = CodeGenerationHelper.GetScriptPathByType(selectedType); string handler = cs.Replace(".cs", ".Handler.cs"); AssetDatabase.DeleteAsset(cs); AssetDatabase.DeleteAsset(handler); bool isDialog = selectedType.BaseType == typeof(UIManDialog); string prefabFolder = GetUIPrefabPath(selectedType, isDialog); string prefabFile = selectedType.Name + PREFAB_EXT; string prefabPath = UIManDefine.ASSETS_FOLDER + prefabFolder + prefabFile; AssetDatabase.DeleteAsset(prefabPath); AssetDatabase.Refresh(); } GUILayout.EndHorizontal(); LineHelper.Draw(Color.gray); } // Base type GUILayout.Space(10); LabelHelper.HeaderLabel("Type"); LineHelper.Draw(Color.gray); baseTypePopup.Draw(); if (baseTypePopup.SelectedItem != "ObservableModel") { if (!System.IO.File.Exists(handlerScriptPath)) { if (GUILayout.Button("Generate Handler")) { string backupCode = CodeGenerationHelper.DeleteScript(handlerScriptPath); GenerateViewModelHandler(backupCode, selectedType.BaseType.Name); } } } // Properties GUILayout.Space(10); LabelHelper.HeaderLabel("Properties"); LineHelper.Draw(Color.gray); propertiesScrollPos = EditorGUILayout.BeginScrollView(propertiesScrollPos, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); if (propertiesDrawerCache.ContainsKey(selectedType)) { EditablePropertyDrawer[] props = propertiesDrawerCache [selectedType]; for (int i = 0; i < props.Length; i++) { props [i].Draw(propertiesAreaWidth); } } EditorGUILayout.EndScrollView(); } GUILayout.Space(10); // Add property if (ColorButton.Draw("Add New Property", CommonColor.LightGreen, GUILayout.Height(30))) { int newIndex = 0; string strNewIndex = ""; for (int i = 0; i < selectedProperties.Length; i++) { if (selectedProperties [i].LastName.Contains("NewProperty")) { newIndex++; } } if (newIndex > 0) { strNewIndex = newIndex.ToString(); } CustomPropertyInfo newProperty = new CustomPropertyInfo("", typeof(string)); newProperty.LastName = "NewProperty" + strNewIndex; ArrayUtility.Add <CustomPropertyInfo> (ref selectedProperties, newProperty); CachePropertiesDrawer(); } //Save all change CustomPropertyInfo[] changeList = new CustomPropertyInfo[0]; CustomPropertyInfo[] selectedList = new CustomPropertyInfo[0]; for (int i = 0; i < selectedProperties.Length; i++) { if (selectedProperties [i].HasChange) { ArrayUtility.Add(ref changeList, selectedProperties [i]); } if (selectedProperties [i].IsSelected) { ArrayUtility.Add(ref selectedList, selectedProperties [i]); } } GUILayout.Space(10); LineHelper.Draw(Color.gray); GUILayout.Space(5); if (changeList.Length > 0) { if (ColorButton.Draw("Save All Changes", CommonColor.LightGreen, GUILayout.Height(30))) { for (int i = 0; i < changeList.Length; i++) { changeList [i].CommitChange(); } SaveCurrentType(true, baseTypePopup.SelectedItem); } } if (selectedList.Length > 0) { if (ColorButton.Draw("Delete Selected Properties", CommonColor.LightRed, GUILayout.Height(30))) { for (int i = 0; i < selectedList.Length; i++) { ArrayUtility.Remove(ref selectedProperties, selectedList [i]); } SaveCurrentType(true, baseTypePopup.SelectedItem); CachePropertiesDrawer(true); } } if (selectedProperties.Length > 0) { if (ColorButton.Draw("Delete All Properties", CommonColor.LightRed, GUILayout.Height(30))) { while (selectedProperties.Length > 0) { ArrayUtility.Clear(ref selectedProperties); SaveCurrentType(); CachePropertiesDrawer(true); } } } } else { GUILayout.Label("NO DATA FOR PREVIEW!"); } GUILayout.EndVertical(); }