public override void OnGUI(Rect rect) { if (Event.current.type == EventType.MouseMove) { editorWindow.Repaint(); } EditorGUILayout.Space(); scroll = EditorGUILayout.BeginScrollView(scroll); foreach (var entry in data.RepositoryStatus.SubModuleEntries) { string path = entry.Path; float elementTextHeight = EditorStyles.label.CalcHeight(GitGUI.GetTempContent(path), rect.width); Rect elementRect = GUILayoutUtility.GetRect(GUIContent.none, moduleStyle, GUILayout.MinHeight(elementTextHeight + EditorGUIUtility.singleLineHeight + 24)); if (Event.current.type == EventType.Repaint) { moduleStyle.Draw(elementRect, GUIContent.none, 0); } var innerRect = new Rect(elementRect.x + 4, elementRect.y + 2, elementRect.width - 8, elementRect.height - 4); Rect nameRect = new Rect(innerRect.x, innerRect.y, innerRect.width - 24, elementTextHeight); GUI.Label(nameRect, GitGUI.GetTempContent(path)); Rect hashRect = new Rect(innerRect.x, innerRect.y + elementTextHeight, innerRect.width - 24, EditorGUIUtility.singleLineHeight); GUI.Label(hashRect, GitGUI.GetTempContent(entry.WorkDirId), EditorStyles.miniLabel); Rect iconRect = new Rect(innerRect.x, innerRect.y + elementTextHeight + EditorGUIUtility.singleLineHeight, 21, 21); bool initActive = false; if (entry.Status == SubmoduleStatus.InConfig) { GUI.Label(iconRect, GitGUI.GetTempContent(GitGUI.Textures.WarrningIconSmall, "Module is only in config."), GitGUI.Styles.IconButton); initActive = true; iconRect.x += EditorGUIUtility.singleLineHeight; } else if (entry.Status.HasFlag(SubmoduleStatus.WorkDirUninitialized)) { GUI.Label(iconRect, GitGUI.GetTempContent(GitGUI.Textures.WarrningIconSmall, "Module is uninitialized."), GitGUI.Styles.IconButton); initActive = true; iconRect.x += EditorGUIUtility.singleLineHeight; } else if (entry.Status.HasFlag(SubmoduleStatus.IndexAdded)) { GUI.Label(iconRect, GitGUI.GetTempContent(gitOverlay.icons.addedIconSmall.image, "Sub Module is in index but not in head. Commit changes to add module to head."), GitGUI.Styles.IconButton); iconRect.x += EditorGUIUtility.singleLineHeight; } else if (entry.Status.HasFlag(SubmoduleStatus.WorkDirModified)) { GUI.Label(iconRect, GitGUI.GetTempContent(GitGUI.Textures.CollabPush, "Sub Module in index and in working directory don't match. Stage module or update it."), GitGUI.Styles.IconButton); iconRect.x += EditorGUIUtility.singleLineHeight; } if (entry.Status.HasFlag(SubmoduleStatus.WorkDirFilesModified)) { GUI.Label(iconRect, GitGUI.GetTempContent(gitOverlay.icons.modifiedIconSmall.image, "Sub Module has modified files."), GitGUI.Styles.IconButton); iconRect.x += EditorGUIUtility.singleLineHeight; } if (entry.Status.HasFlag(SubmoduleStatus.WorkDirFilesUntracked)) { GUI.Label(iconRect, GitGUI.GetTempContent(gitOverlay.icons.untrackedIconSmall.image, "Sub Module has untracked files."), GitGUI.Styles.IconButton); iconRect.x += EditorGUIUtility.singleLineHeight; } if (entry.Status.HasFlag(SubmoduleStatus.WorkDirFilesIndexDirty)) { GUI.Label(iconRect, GitGUI.GetTempContent(gitOverlay.icons.addedIconSmall.image, "Sub Module has added files to index."), GitGUI.Styles.IconButton); iconRect.x += EditorGUIUtility.singleLineHeight; } GUIContent switchContent = GitGUI.GetTempContent(GitGUI.Textures.OrbitTool, "Explore"); Rect switchRect = new Rect(innerRect.x + innerRect.width - 24, innerRect.y, 24, 24); EditorGUIUtility.AddCursorRect(switchRect, MouseCursor.Link); if (GUI.Button(switchRect, switchContent, GitGUI.Styles.IconButton)) { gitManager.SwitchToSubModule(entry.Path); editorWindow.Close(); } Rect optionsRect = new Rect(innerRect.x + innerRect.width - 24, innerRect.y + 24, 24, 24); EditorGUIUtility.AddCursorRect(optionsRect, MouseCursor.Link); if (GUI.Button(optionsRect, GitGUI.IconContent("UnityEditor.SceneHierarchyWindow", string.Empty, "Options"), GitGUI.Styles.IconButton)) { GenericMenu menu = new GenericMenu(); BuildOptions(menu, path, initActive); menu.DropDown(optionsRect); } if (Event.current.type == EventType.ContextClick && elementRect.Contains(Event.current.mousePosition)) { GenericMenu menu = new GenericMenu(); BuildOptions(menu, path, initActive); menu.ShowAsContext(); } } EditorGUILayout.EndScrollView(); if (gitManager.InSubModule) { if (GUILayout.Button(GitGUI.GetTempContent("Return"))) { gitManager.SwitchToMainRepository(); } } }