private bool ParentViewGUI(ParentViewState pvState, ParentViewState anotherPvState, ref bool hasSelection) { bool flag1 = false; EditorGUIUtility.SetIconSize(this.iconSize); ListViewState lv = pvState.lv; bool shift = Event.current.shift; bool actionKey = EditorGUI.actionKey; int row = lv.row; int folder1 = -1; int file = -1; bool flag2 = false; foreach (ListViewElement listViewElement in ListViewGUILayout.ListView(lv, ListViewOptions.wantsToStartCustomDrag | ListViewOptions.wantsToAcceptCustomDrag, this.dragTitle, GUIStyle.none, new GUILayoutOption[0])) { if (folder1 == -1 && !pvState.IndexToFolderAndFile(listViewElement.row, ref folder1, ref file)) { flag1 = true; break; } if (GUIUtility.keyboardControl == lv.ID && Event.current.type == EventType.KeyDown && actionKey) Event.current.Use(); ParentViewFolder folder2 = pvState.folders[folder1]; if (pvState.selectedItems[listViewElement.row] && Event.current.type == EventType.Repaint) ASCommitWindow.constants.entrySelected.Draw(listViewElement.position, false, false, false, false); if (ListViewGUILayout.HasMouseUp(listViewElement.position)) { if (!shift && !actionKey) flag2 |= ListViewGUILayout.MultiSelection(row, pvState.lv.row, ref pvState.initialSelectedItem, ref pvState.selectedItems); } else if (ListViewGUILayout.HasMouseDown(listViewElement.position)) { if (Event.current.clickCount == 2) { this.DoShowMyDiff(false); GUIUtility.ExitGUI(); } else { if (!pvState.selectedItems[listViewElement.row] || shift || actionKey) flag2 |= ListViewGUILayout.MultiSelection(row, listViewElement.row, ref pvState.initialSelectedItem, ref pvState.selectedItems); pvState.selectedFile = file; pvState.selectedFolder = folder1; lv.row = listViewElement.row; } } else if (ListViewGUILayout.HasMouseDown(listViewElement.position, 1)) { if (!pvState.selectedItems[listViewElement.row]) { flag2 = true; pvState.ClearSelection(); pvState.selectedItems[listViewElement.row] = true; pvState.selectedFile = file; pvState.selectedFolder = folder1; lv.row = listViewElement.row; } this.dropDownMenuItems[0] = pvState != this.pv1state ? "<<<" : ">>>"; GUIUtility.hotControl = 0; EditorUtility.DisplayCustomMenu(new Rect(Event.current.mousePosition.x, Event.current.mousePosition.y, 1f, 1f), this.dropDownMenuItems, (int[]) null, new EditorUtility.SelectMenuItemFunction(this.ContextMenuClick), (object) null); Event.current.Use(); } ChangeFlags changeFlags; if (file != -1) { Texture2D texture2D = AssetDatabase.GetCachedIcon(folder2.name + "/" + folder2.files[file].name) as Texture2D; if ((UnityEngine.Object) texture2D == (UnityEngine.Object) null) texture2D = InternalEditorUtility.GetIconForFile(folder2.files[file].name); GUILayout.Label(new GUIContent(folder2.files[file].name, (Texture) texture2D), ASCommitWindow.constants.element, new GUILayoutOption[0]); changeFlags = folder2.files[file].changeFlags; } else { GUILayout.Label(folder2.name, ASCommitWindow.constants.header, new GUILayoutOption[0]); changeFlags = folder2.changeFlags; } GUIContent content = (GUIContent) null; if (ASCommitWindow.HasFlag(changeFlags, ChangeFlags.Undeleted) || ASCommitWindow.HasFlag(changeFlags, ChangeFlags.Created)) content = ASMainWindow.constants.badgeNew; else if (ASCommitWindow.HasFlag(changeFlags, ChangeFlags.Deleted)) content = ASMainWindow.constants.badgeDelete; else if (ASCommitWindow.HasFlag(changeFlags, ChangeFlags.Renamed) || ASCommitWindow.HasFlag(changeFlags, ChangeFlags.Moved)) content = ASMainWindow.constants.badgeMove; if (content != null && Event.current.type == EventType.Repaint) { Rect position = new Rect((float) ((double) listViewElement.position.x + (double) listViewElement.position.width - (double) content.image.width - 5.0), listViewElement.position.y + listViewElement.position.height / 2f - (float) (content.image.height / 2), (float) content.image.width, (float) content.image.height); EditorGUIUtility.SetIconSize(Vector2.zero); GUIStyle.none.Draw(position, content, false, false, false, false); EditorGUIUtility.SetIconSize(this.iconSize); } pvState.NextFileFolder(ref folder1, ref file); } if (!flag1) { if (GUIUtility.keyboardControl == lv.ID) { if (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "SelectAll") Event.current.Use(); else if (Event.current.type == EventType.ExecuteCommand && Event.current.commandName == "SelectAll") { for (int index = 0; index < pvState.selectedItems.Length; ++index) pvState.selectedItems[index] = true; flag2 = true; Event.current.Use(); } } if (lv.customDraggedFromID != 0 && lv.customDraggedFromID == anotherPvState.lv.ID) this.DoTransferAll(anotherPvState, pvState, pvState.selectedFolder, pvState.selectedFile); if (GUIUtility.keyboardControl == lv.ID && !actionKey) { if (lv.selectionChanged) { flag2 |= ListViewGUILayout.MultiSelection(row, lv.row, ref pvState.initialSelectedItem, ref pvState.selectedItems); if (!pvState.IndexToFolderAndFile(lv.row, ref pvState.selectedFolder, ref pvState.selectedFile)) flag1 = true; } else if (pvState.selectedFolder != -1 && Event.current.type == EventType.KeyDown && (GUIUtility.keyboardControl == lv.ID && Event.current.keyCode == KeyCode.Return)) { this.DoTransferAll(pvState, anotherPvState, pvState.selectedFolder, pvState.selectedFile); ListViewGUILayout.MultiSelection(row, lv.row, ref pvState.initialSelectedItem, ref pvState.selectedItems); pvState.IndexToFolderAndFile(lv.row, ref pvState.selectedFolder, ref pvState.selectedFile); Event.current.Use(); flag1 = true; } } if (lv.selectionChanged || flag2) { if (pvState.IndexToFolderAndFile(lv.row, ref folder1, ref file)) this.dragTitle = file != -1 ? pvState.folders[folder1].files[file].name : pvState.folders[folder1].name; anotherPvState.ClearSelection(); anotherPvState.lv.row = -1; anotherPvState.selectedFile = -1; anotherPvState.selectedFolder = -1; this.MySelectionToGlobalSelection(); } } EditorGUIUtility.SetIconSize(Vector2.zero); return !flag1; }
private bool ParentViewGUI(ParentViewState pvState, ParentViewState anotherPvState, ref bool hasSelection) { bool flag = false; EditorGUIUtility.SetIconSize(this.iconSize); ListViewState lv = pvState.lv; bool shift = Event.current.shift; bool actionKey = EditorGUI.actionKey; int row = lv.row; int num = -1; int num2 = -1; bool flag2 = false; foreach (ListViewElement listViewElement in ListViewGUILayout.ListView(lv, (ListViewOptions)12, this.dragTitle, GUIStyle.none, new GUILayoutOption[0])) { if (num == -1 && !pvState.IndexToFolderAndFile(listViewElement.row, ref num, ref num2)) { flag = true; break; } if (GUIUtility.keyboardControl == lv.ID && Event.current.type == EventType.KeyDown && actionKey) { Event.current.Use(); } ParentViewFolder parentViewFolder = pvState.folders[num]; if (pvState.selectedItems[listViewElement.row] && Event.current.type == EventType.Repaint) { ASCommitWindow.constants.entrySelected.Draw(listViewElement.position, false, false, false, false); } if (ListViewGUILayout.HasMouseUp(listViewElement.position)) { if (!shift && !actionKey) { flag2 |= ListViewGUILayout.MultiSelection(row, pvState.lv.row, ref pvState.initialSelectedItem, ref pvState.selectedItems); } } else { if (ListViewGUILayout.HasMouseDown(listViewElement.position)) { if (Event.current.clickCount == 2) { this.DoShowMyDiff(false); GUIUtility.ExitGUI(); } else { if (!pvState.selectedItems[listViewElement.row] || shift || actionKey) { flag2 |= ListViewGUILayout.MultiSelection(row, listViewElement.row, ref pvState.initialSelectedItem, ref pvState.selectedItems); } pvState.selectedFile = num2; pvState.selectedFolder = num; lv.row = listViewElement.row; } } else { if (ListViewGUILayout.HasMouseDown(listViewElement.position, 1)) { if (!pvState.selectedItems[listViewElement.row]) { flag2 = true; pvState.ClearSelection(); pvState.selectedItems[listViewElement.row] = true; pvState.selectedFile = num2; pvState.selectedFolder = num; lv.row = listViewElement.row; } this.dropDownMenuItems[0] = ((pvState != this.pv1state) ? "<<<" : ">>>"); GUIUtility.hotControl = 0; Rect position = new Rect(Event.current.mousePosition.x, Event.current.mousePosition.y, 1f, 1f); EditorUtility.DisplayCustomMenu(position, this.dropDownMenuItems, null, new EditorUtility.SelectMenuItemFunction(this.ContextMenuClick), null); Event.current.Use(); } } } ChangeFlags changeFlags; if (num2 != -1) { Texture2D texture2D = AssetDatabase.GetCachedIcon(parentViewFolder.name + "/" + parentViewFolder.files[num2].name) as Texture2D; if (texture2D == null) { texture2D = InternalEditorUtility.GetIconForFile(parentViewFolder.files[num2].name); } GUILayout.Label(new GUIContent(parentViewFolder.files[num2].name, texture2D), ASCommitWindow.constants.element, new GUILayoutOption[0]); changeFlags = parentViewFolder.files[num2].changeFlags; } else { GUILayout.Label(parentViewFolder.name, ASCommitWindow.constants.header, new GUILayoutOption[0]); changeFlags = parentViewFolder.changeFlags; } GUIContent gUIContent = null; if (ASCommitWindow.HasFlag(changeFlags, ChangeFlags.Undeleted) || ASCommitWindow.HasFlag(changeFlags, ChangeFlags.Created)) { gUIContent = ASMainWindow.constants.badgeNew; } else { if (ASCommitWindow.HasFlag(changeFlags, ChangeFlags.Deleted)) { gUIContent = ASMainWindow.constants.badgeDelete; } else { if (ASCommitWindow.HasFlag(changeFlags, ChangeFlags.Renamed) || ASCommitWindow.HasFlag(changeFlags, ChangeFlags.Moved)) { gUIContent = ASMainWindow.constants.badgeMove; } } } if (gUIContent != null && Event.current.type == EventType.Repaint) { Rect position2 = new Rect(listViewElement.position.x + listViewElement.position.width - (float)gUIContent.image.width - 5f, listViewElement.position.y + listViewElement.position.height / 2f - (float)(gUIContent.image.height / 2), (float)gUIContent.image.width, (float)gUIContent.image.height); EditorGUIUtility.SetIconSize(Vector2.zero); GUIStyle.none.Draw(position2, gUIContent, false, false, false, false); EditorGUIUtility.SetIconSize(this.iconSize); } pvState.NextFileFolder(ref num, ref num2); } if (!flag) { if (GUIUtility.keyboardControl == lv.ID) { if (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "SelectAll") { Event.current.Use(); } else { if (Event.current.type == EventType.ExecuteCommand && Event.current.commandName == "SelectAll") { for (int i = 0; i < pvState.selectedItems.Length; i++) { pvState.selectedItems[i] = true; } flag2 = true; Event.current.Use(); } } } if (lv.customDraggedFromID != 0 && lv.customDraggedFromID == anotherPvState.lv.ID) { this.DoTransferAll(anotherPvState, pvState, pvState.selectedFolder, pvState.selectedFile); } if (GUIUtility.keyboardControl == lv.ID && !actionKey) { if (lv.selectionChanged) { flag2 |= ListViewGUILayout.MultiSelection(row, lv.row, ref pvState.initialSelectedItem, ref pvState.selectedItems); if (!pvState.IndexToFolderAndFile(lv.row, ref pvState.selectedFolder, ref pvState.selectedFile)) { flag = true; } } else { if (pvState.selectedFolder != -1 && Event.current.type == EventType.KeyDown && GUIUtility.keyboardControl == lv.ID && Event.current.keyCode == KeyCode.Return) { this.DoTransferAll(pvState, anotherPvState, pvState.selectedFolder, pvState.selectedFile); ListViewGUILayout.MultiSelection(row, lv.row, ref pvState.initialSelectedItem, ref pvState.selectedItems); pvState.IndexToFolderAndFile(lv.row, ref pvState.selectedFolder, ref pvState.selectedFile); Event.current.Use(); flag = true; } } } if (lv.selectionChanged || flag2) { if (pvState.IndexToFolderAndFile(lv.row, ref num, ref num2)) { this.dragTitle = ((num2 != -1) ? pvState.folders[num].files[num2].name : pvState.folders[num].name); } anotherPvState.ClearSelection(); anotherPvState.lv.row = -1; anotherPvState.selectedFile = -1; anotherPvState.selectedFolder = -1; this.MySelectionToGlobalSelection(); } } EditorGUIUtility.SetIconSize(Vector2.zero); return !flag; }