/// <summary> /// First Time Setup draw function. /// </summary> public void DrawFirstTimeDialog() { EditorGUI.DrawRect(new Rect(0, 0, maxSize.x, maxSize.y), backgroundColor); DrawButton("X", delegate() { EditorPrefs.SetBool(ConventionKeeper.setupDoneKey, false); this.Close(); }); GUILayout.Label(this.title); GUILayout.BeginScrollView(Vector2.zero); { GUILayout.Label(this.message); } GUILayout.EndScrollView(); GUILayout.BeginHorizontal(); { DrawButton("START!", delegate() { this.Close(); ConventionKeeper.SetupFirstTime(); }); DrawButton("Nothing, thanks.", delegate() { EditorPrefs.SetBool(ConventionKeeper.setupDoneKey, false); this.Close(); }); } GUILayout.EndHorizontal(); }
/// <summary> /// Function called once when unity opens /// </summary> static ConventionKeeper() { if (!ConventionKeeper.CheckIfConfigFileExists() && config == null) { Initialize(); } }
/// <summary> /// Unity function to intervene into the import pipeline and process the modified files /// </summary> private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { //Check if can run the auto catch on a minimum setup level if (EditorPrefs.HasKey(ConventionKeeper.setupDoneKey) && !ConventionKeeper.usingOverview) { //Check if can run the auto catch on a post setup level if (ConventionKeeper.active && EditorPrefs.GetBool(ConventionKeeper.setupDoneKey)) { //Process all imported assets foreach (string importedAsset in importedAssets) { ConventionKeeper.CheckImportFileConvention(importedAsset); } //Process all moved assets foreach (string movedAsset in movedAssets) { ConventionKeeper.CheckImportFileConvention(movedAsset); } } } }
public void RefreshOverviewData() { configText = ConventionKeeper.config.ToString(true); ConventionKeeper.RefreshOverview(); }
/// <summary> /// Overview Window draw function. /// </summary> public void DrawOverviewDialog() { EditorGUI.DrawRect(new Rect(0, 0, maxSize.x, maxSize.y), backgroundColor); GUIStyle style = new GUIStyle(GUI.skin.label); style.richText = true; GUILayout.Label("<b><color=maroon>Attention: </color>\n 1) Fix as much folders as possible.\n 2) Fix remaining files.\n 3) Edit Configs to deal with remaining folder/files.</b>", style); string[] tabs = new string[(int)TabOption.NumberOfTabs]; for (int i = 0; i < (int)TabOption.NumberOfTabs; i++) { tabs[i] = ((TabOption)i).ToString(); } tab = (TabOption)GUILayout.Toolbar((int)tab, tabs); if (configText == null) { configText = ConventionKeeper.config.ToString(true); } switch (tab) { case TabOption.Folders: GUILayout.Label("Not Convention Valid Folders: " + ConventionKeeper.overviewFolderList.Count); if (ConventionKeeper.overviewFolderList.Count == 0) { scrollPos = GUILayout.BeginScrollView(scrollPos, false, true); { GUILayout.Label("<color=green><b>No folder convention problems, good!</b></color>", style); } GUILayout.EndScrollView(); break; } scrollPos = GUILayout.BeginScrollView(scrollPos, false, true); { bool breakLoop = false; foreach (var item in ConventionKeeper.overviewFolderList) { string errors = "<color=red>"; foreach (FolderConventionState error in item.folderError) { errors += " | " + error.ToString(); } errors += "</color>"; GUILayout.BeginHorizontal(); { DrawButton("FIX IT!", delegate() { breakLoop = true; //Fix NotValid state first because it means the convention system is not tracking it. if (item.folderError.Contains(FolderConventionState.NotValid)) { //Fix it ConventionKeeper.AddPathToConvention(item.assetsFullPath); } //Fix noFoldersAllowed second because with no folders allowance the code does not check child folders and just halt. if (item.folderError.Contains(FolderConventionState.NoFoldersAllowed)) { //Fix it ConventionKeeper.AddFolderTypeToPath(item.assetsFullPath); } //Reset Overview Data - Recheck convention RefreshOverviewData(); }, 10); DrawButton("Ignore", delegate() { ConventionKeeper.AddToIgnoredPaths(item.assetsFullPath); //Reset Overview Data - Recheck convention RefreshOverviewData(); }, 10); DrawButton("Delete", delegate() { ConventionKeeper.DeleteFolder(item.assetsFullPath); //Reset Overview Data - Recheck convention RefreshOverviewData(); }, 10); GUILayout.Label(item.assetsFullPath + errors, style); } GUILayout.EndHorizontal(); if (breakLoop) { break; } } } GUILayout.EndScrollView(); break; case TabOption.Files: GUILayout.Label("Not Convention Valid Files: " + ConventionKeeper.overviewFileList.Count); if (ConventionKeeper.overviewFolderList.Count > 0) { scrollPos = GUILayout.BeginScrollView(scrollPos, false, true); { GUILayout.Label("<color=maroon>You need to resolve all the <b>folder issues first!</b></color>", style); } GUILayout.EndScrollView(); break; } if (ConventionKeeper.overviewFileList.Count == 0) { scrollPos = GUILayout.BeginScrollView(scrollPos, false, true); { GUILayout.Label("<color=green><b>No file convention problems, good!</b></color>", style); } GUILayout.EndScrollView(); break; } scrollPos = GUILayout.BeginScrollView(scrollPos, false, true); { bool breakLoop = false; foreach (var item in ConventionKeeper.overviewFileList) { string errors = "<color=red>"; foreach (var error in item.fileError) { errors += " | " + error.ToString(); if (error == FileConventionState.NotValid) { errors += " - <b>Is the file in the right folder?</b>"; } } errors += "</color>"; GUILayout.BeginHorizontal(); { if (item.fileError.Count > 0 && !item.fileError.Contains(FileConventionState.NotValid)) { DrawButton("FIX IT!", delegate() { breakLoop = true; //First fix file name as it may affect the file type(?) if (item.fileError.Contains(FileConventionState.WrongFileName)) { ConventionKeeper.FileNameChangeDialog(item); } //Fix unknown file type - This just fix already stablished name conventions/file types in the config doc! if (item.fileError.Contains(FileConventionState.UnknownFileType)) { ConventionKeeper.AddFileTypeToPath(item); } //Reset Overview Data - Recheck convention RefreshOverviewData(); }, 10); } if (ConventionKeeper.IsValidFileType(item.type)) { DrawButton("Ignore File", delegate() { breakLoop = true; ConventionKeeper.AddToIgnoredFiles(item); //Reset Overview Data - Recheck convention RefreshOverviewData(); }, 10); } if (ConventionKeeper.IsValidFileType(item.type)) { DrawButton("Ignore Type", delegate() { breakLoop = true; ConventionKeeper.AddToIgnoredFileTypes(item); //Reset Overview Data - Recheck convention RefreshOverviewData(); }, 10); } if (item.type != "cs") { DrawButton("Delete File", delegate() { breakLoop = true; ConventionKeeper.DeleteDialog(item); //Reset Overview Data - Recheck convention RefreshOverviewData(); }, 10); } GUILayout.Label(item.assetsFullPath + errors, style); } GUILayout.EndHorizontal(); if (breakLoop) { break; } } } GUILayout.EndScrollView(); break; case TabOption.Configs: scrollPos = GUILayout.BeginScrollView(scrollPos, false, true); { configText = GUILayout.TextArea(configText); } GUILayout.EndScrollView(); if (configText != ConventionKeeper.config.ToString(true)) { GUI.enabled = true; } else { GUI.enabled = false; } if (GUILayout.Button("Save Configuration File")) { ConventionKeeper.config = new JSONObject(configText); ConventionKeeper.SaveConfigs(); } GUI.enabled = true; break; } GUILayout.BeginHorizontal(); { if (GUILayout.Button("Refresh")) { RefreshOverviewData(); } if (!EditorPrefs.HasKey(ConventionKeeper.setupDoneKey)) { if (GUILayout.Button("Cancel")) { ConventionKeeper.usingOverview = false; EditorPrefs.SetBool(ConventionKeeper.setupDoneKey, false); this.Close(); } } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { if (!EditorPrefs.HasKey(ConventionKeeper.setupDoneKey) || !EditorPrefs.GetBool(ConventionKeeper.setupDoneKey)) { if (ConventionKeeper.overviewFolderList.Count > 0 || ConventionKeeper.overviewFileList.Count > 0) { GUI.enabled = false; } else { GUI.enabled = true; } if (GUILayout.Button("Finish First Time Setup")) { EditorPrefs.SetBool(ConventionKeeper.setupDoneKey, true); this.Close(); } GUI.enabled = true; } } GUILayout.EndHorizontal(); }
/// <summary> /// Refreshes the overview file and folder lists (Reprocess all folders for convention breaches) /// </summary> public static void RefreshOverview() { ConventionKeeper.ClearOverview(); ConventionKeeper.OverviewProcessFolder("Assets"); }