void DesignList() { if (WorkspaceDirectoryInfos == null || CommonManager.CommonObjectDic == null) { NeedRefresh = true; return; } // string JsonRootFull = Path.Combine (Application.dataPath, JsonRoot); if (SelectedWorkspace == null) { GUILayout.Label("Root", EditorStyles.boldLabel); scrollViewPos = GUILayout.BeginScrollView(scrollViewPos); for (int i = 0; i < WorkspaceDirectoryInfos.Length; i++) { DirectoryInfo wdi = WorkspaceDirectoryInfos [i]; string ws_name = wdi.Name; StringBuilder sb_content = new StringBuilder(wdi.Name); if (CommonManager != null) { int file_count = CommonManager.CommonObjectDic [ws_name].ElementFiles.Count; sb_content.AppendFormat(" ({0} file{1})", file_count, file_count > 1 ? "s" : ""); // button_content += " (" + CommonManager.CommonObjectDic [ws_name].ElementFiles.Count + " file)"; } GUIContent button_content = new GUIContent(sb_content.ToString(), pgf_workspace_icon); if (GUILayout.Button(button_content, GUIStyleTemplate.ButtonStyleAlignmentLeft())) { AutoSelected.SelectedWorkspaceName = ws_name; AutoSelected.Save(); SelectedWorkspace = wdi; NeedRefresh = true; } } GUILayout.EndScrollView(); } else { GUILayout.BeginHorizontal(); if (GUILayout.Button("<<")) { SelectedWorkspace = null; NeedRefresh = true; WSJsonFilesList = null; SelectedWorkspaceCommon = null; AutoSelected.SelectedWorkspaceName = string.Empty; AutoSelected.Save(); return; } if (GUILayout.Button("Save")) { SaveCommonFile(); } GUILayout.EndHorizontal(); GUILayout.Label("Workspace:" + SelectedWorkspace.Name, EditorStyles.boldLabel); if (SelectedWorkspaceCommon != null) { // PRDebug.TagLog ("PGFrameWindow.Debug", Color.yellow, JsonConvert.SerializeObject (SelectedWorkspaceCommon)); if (WSJsonFilesList == null) { ResetReorderableList(); } JsonFilesScrollPos = GUILayout.BeginScrollView(JsonFilesScrollPos); WSJsonFilesList.DoLayoutList(); GUILayout.EndScrollView(); TryShowPopupWindowDoc(); } } }
void ResetReorderableList() { JArray ja_elements = SelectedWorkspaceCommon.jo ["ElementFiles"] as JArray; WSJsonFilesList = new ReorderableList(ja_elements, typeof(JToken)); WSJsonFilesList.drawHeaderCallback += (Rect rect) => { GUI.Label(rect, "ElementFiles"); }; float[] split = new float[] { 0f, 1f }; WSJsonFilesList.drawElementCallback += (Rect rect, int index, bool isActive, bool isFocused) => { Rect r = new Rect(rect); r.y -= 1; r.height -= 2; int split_idx = 0; r.x = (rect.width - 25f) * split [split_idx] + 25f; r.width = (rect.width - 25f) * (split [split_idx + 1] - split [split_idx]); JObject jo_element = ja_elements [index] as JObject; string jo_element_filename = jo_element ["File"].Value <string> (); DocType dt = (DocType)Enum.Parse(typeof(DocType), jo_element ["DocType"].Value <string> ()); Texture2D icon = null; switch (dt) { case DocType.Element: icon = pgf_element_icon; break; case DocType.SimpleClass: icon = pgf_simple_class_icon; break; case DocType.Enum: icon = pgf_enum_icon; break; case DocType.FSM: icon = pgf_fsm_icon; break; default: throw new ArgumentOutOfRangeException(); } GUIContent content = new GUIContent(jo_element_filename, icon); if (GUI.Button(r, content, GUIStyleTemplate.ButtonStyleAlignmentLeft())) { if (Event.current.button == 1) { JSONElement jsonElement = jElements.Single(je => je.FileName == jo_element_filename); PGFrameOpenFileTools.OpenContentMenu(jsonElement); } else { SelectedJsonElement = jElements.Single(je => je.FileName == jo_element_filename); if (dt == DocType.FSM) { FSMWindow.Init(); FSMWindow.Current.jElement = SelectedJsonElement; } AutoSelected.SelectedJsonFileName = jo_element_filename; AutoSelected.Save(); } } }; WSJsonFilesList.onAddCallback += (ReorderableList list) => { GenericMenu menu = new GenericMenu(); foreach (DocType dt in Enum.GetValues(typeof(DocType))) { menu.AddItem(new GUIContent(dt.ToString()), false, (object userData) => { NeedShowPopupWindowDocType = (DocType)userData; }, dt); } menu.ShowAsContext(); }; WSJsonFilesList.onRemoveCallback += (ReorderableList list) => { JObject jo = ja_elements [list.index] as JObject; string jsonName = jo ["File"].Value <string> (); if (EditorUtility.DisplayDialog("警告!", string.Format("确定删除框架中的{0}文件?", jo ["File"].Value <string> ()), "Yes", "No")) { ja_elements.RemoveAt(list.index); SelectedWorkspaceCommon.jo ["ElementFiles"] = ja_elements; SaveCommonFile(); DeleteElementJsonFile(jsonName, SelectedWorkspaceCommon.Workspace); NeedRefresh = true; } }; }