public void SaveCurrentType(bool warning = false, string baseType = null) { // Verify properties list for (var i = 0; i < _selectedProperties.Length; i++) { CustomPropertyInfo property = _selectedProperties[i]; if (string.IsNullOrEmpty(property.Name) || char.IsNumber(property.Name[0])) { property.Name = ""; if (warning) { EditorUtility.DisplayDialog("Save script error", "Property name cannot be a digit, null or empty!", "OK"); } return; } for (var j = 0; j < _selectedProperties.Length; j++) { if (j != i && _selectedProperties[i].Name.ToLower() == _selectedProperties[j].Name.ToLower()) { _selectedProperties[j].Name = ""; if (warning) { EditorUtility.DisplayDialog("Save script error", "There are one or more properties are have the same name!", "OK"); } return; } } } if (baseType == null) { baseType = _selectedType.BaseType.Name; } var inheritance = baseType == nameof(ObservableModel) ? $" : {baseType}" : string.Empty; if (!string.IsNullOrEmpty(_currentScriptPath)) { var backupCode = UIManCodeGenerator.DeleteScript(_handlerScriptPath); var code = UIManCodeGenerator.GenerateType(_selectedType.Name, inheritance, _selectedTypeIsSealed, _config, this.namespaceField.Text, _selectedProperties); var saved = UIManCodeGenerator.SaveScript(_currentScriptPath, code, true); if (baseType != nameof(ObservableModel)) { GenerateHandler(backupCode, baseType); saved = false; } if (saved) { AssetDatabase.Refresh(ImportAssetOptions.Default); } } }
public void SaveCurrentType(bool warning = false, string baseType = null) { // Verify properties list for (int i = 0; i < selectedProperties.Length; i++) { CustomPropertyInfo property = selectedProperties [i]; if (string.IsNullOrEmpty(property.Name) || Char.IsNumber(property.Name [0])) { property.Name = ""; if (warning) { EditorUtility.DisplayDialog("Save script error", "Property name cannot be a digit, null or empty!", "OK"); } return; } for (int j = 0; j < selectedProperties.Length; j++) { if (j != i && selectedProperties [i].Name.ToLower() == selectedProperties [j].Name.ToLower()) { selectedProperties [j].Name = ""; if (warning) { EditorUtility.DisplayDialog("Save script error", "There are one or more properties are have the same name!", "OK"); } return; } } } if (baseType == null) { baseType = selectedType.BaseType.Name; } if (!string.IsNullOrEmpty(currentScriptPath)) { string backupCode = CodeGenerationHelper.DeleteScript(handlerScriptPath); string code = CodeGenerationHelper.GenerateScript(selectedType.Name, baseType, selectedProperties); bool saved = CodeGenerationHelper.SaveScript(currentScriptPath, code, true); if (baseType != "ObservableModel") { GenerateViewModelHandler(backupCode, baseType); saved = false; } if (saved) { AssetDatabase.Refresh(ImportAssetOptions.Default); } } }
public EditablePropertyDrawer(Type viewModelType, CustomPropertyInfo property, Action <CustomPropertyInfo> onPropertyChanged, Action <CustomPropertyInfo> onPropertyDelete) { _viewModelType = viewModelType; _property = property; _onPropertyChanged = onPropertyChanged; _onPropertyDelete = onPropertyDelete; observableTypes = ReflectUtils.GetAllObservableType(_viewModelType); for (int i = 0; i < observableTypes.Length; i++) { if (_property.LastPropertyType.GetAllias() == observableTypes [i]) { selectedType = i; break; } } }
public EditablePropertyDrawer(UIManConfig config, Type viewModelType, CustomPropertyInfo property, Action <CustomPropertyInfo> onPropertyChanged, Action <CustomPropertyInfo> onPropertyDelete) { this._viewModelType = viewModelType; this._property = property; this._onPropertyChanged = onPropertyChanged; this._onPropertyDelete = onPropertyDelete; this.observableTypes = UIManEditorReflection.GetAllObservableTypes(this._viewModelType, config.classNamespace); for (var i = 0; i < this.observableTypes.Length; i++) { if (this._property.LastPropertyType == this.observableTypes[i]) { this.selectedType = i; break; } } }
public EditablePropertyDrawer(Type viewModelType, CustomPropertyInfo property, Action <CustomPropertyInfo> onPropertyChanged, Action <CustomPropertyInfo> onPropertyDelete) { buttonSaveStyle = new GUIStyle(GUI.skin.FindStyle("button")); buttonSaveStyle.normal.textColor = Color.gray; _viewModelType = viewModelType; _property = property; _onPropertyChanged = onPropertyChanged; _onPropertyDelete = onPropertyDelete; observableTypes = ReflectUtils.GetAllObservableType(_viewModelType); for (int i = 0; i < observableTypes.Length; i++) { if (_property.LastPropertyType.GetAllias() == observableTypes [i]) { selectedType = i; break; } } }
public void OnPropertyDelete(CustomPropertyInfo property) { ArrayUtility.Remove(ref _selectedProperties, property); SaveCurrentType(); CachePropertiesDrawer(); }
public void OnApplyPropertyChanged(CustomPropertyInfo newInfo) { SaveCurrentType(true); }
private void DrawSelectedType(int id) { if (_selectedType != null) { DrawSelectedTypeHeader(); } GUILayout.Space(10); // Add property if (ColorButton.Draw("Add New Property", CommonColor.LightGreen, GUILayout.Height(30))) { var newIndex = 0; var strNewIndex = ""; for (var i = 0; i < _selectedProperties.Length; i++) { if (_selectedProperties[i].LastName.Contains("NewProperty")) { newIndex++; } } if (newIndex > 0) { strNewIndex = newIndex.ToString(); } var newProperty = new CustomPropertyInfo("", typeof(string)) { LastName = "NewProperty" + strNewIndex }; ArrayUtility.Add(ref _selectedProperties, newProperty); CachePropertiesDrawer(); } //Save all change var changeList = new CustomPropertyInfo[0]; var selectedList = new CustomPropertyInfo[0]; for (var 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 || !string.Equals(_selectedType.Namespace, this.namespaceField.Text) || _selectedType.IsSealed != _selectedTypeIsSealed) { if (ColorButton.Draw("Save All Changes", CommonColor.LightGreen, GUILayout.Height(30))) { for (var i = 0; i < changeList.Length; i++) { changeList[i].CommitChange(); } SaveCurrentType(true, this.baseTypePopup.SelectedItem); } } if (selectedList.Length > 0) { if (ColorButton.Draw("Delete Selected Properties", CommonColor.LightRed, GUILayout.Height(30))) { for (var i = 0; i < selectedList.Length; i++) { ArrayUtility.Remove(ref _selectedProperties, selectedList[i]); } SaveCurrentType(true, this.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); } } } }
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(); }