private void OnInstallPathGUI() { string gitExecPath = null; string extension = null; string gitInstallPath = null; if (Environment != null) { extension = Environment.ExecutableExtension; if (Environment.IsWindows) { extension = extension.TrimStart('.'); } gitInstallPath = Environment.GitInstallPath; if (Environment.GitExecutablePath != null) { gitExecPath = Environment.GitExecutablePath.ToString(); } } // Install path GUILayout.Label(GitInstallTitle, EditorStyles.boldLabel); GUI.enabled = !isBusy && gitExecPath != null; // Install path field EditorGUI.BeginChangeCheck(); { //TODO: Verify necessary value for a non Windows OS Styles.PathField(ref gitExecPath, () => EditorUtility.OpenFilePanel(GitInstallBrowseTitle, gitInstallPath, extension), ValidateGitInstall); } if (EditorGUI.EndChangeCheck()) { Logger.Trace("Setting GitExecPath: " + gitExecPath); Manager.SystemSettings.Set(Constants.GitInstallPathKey, gitExecPath); Environment.GitExecutablePath = gitExecPath.ToNPath(); } GUILayout.Space(EditorGUIUtility.standardVerticalSpacing); GUILayout.BeginHorizontal(); { // Find button - for attempting to locate a new install if (GUILayout.Button(GitInstallFindButton, GUILayout.ExpandWidth(false))) { var task = new ProcessTask <NPath>(Manager.CancellationToken, new FirstLineIsPathOutputProcessor()) .Configure(Manager.ProcessManager, Environment.IsWindows ? "where" : "which", "git") .FinallyInUI((success, ex, path) => { if (success && !string.IsNullOrEmpty(path)) { Environment.GitExecutablePath = path; GUIUtility.keyboardControl = GUIUtility.hotControl = 0; } }); } } GUILayout.EndHorizontal(); GUI.enabled = true; }
private void TreeNode(FileTreeNode node) { GUILayout.Space(Styles.TreeVerticalSpacing); var target = node.Target; var isFolder = node.Children.Any(); GUILayout.BeginHorizontal(); { if (!Readonly) { // Commit inclusion toggle var state = node.State; var toggled = state == CommitState.All; EditorGUI.BeginChangeCheck(); { toggled = GUILayout.Toggle(toggled, "", state == CommitState.Some ? Styles.ToggleMixedStyle : GUI.skin.toggle, GUILayout.ExpandWidth(false)); } if (EditorGUI.EndChangeCheck()) { node.State = toggled ? CommitState.All : CommitState.None; } } // Foldout if (isFolder) { Rect foldoutRect; if (Readonly) { foldoutRect = GUILayoutUtility.GetRect(1, 1); foldoutRect.Set(foldoutRect.x - 7f, foldoutRect.y + 3f, 0f, EditorGUIUtility.singleLineHeight); } else { foldoutRect = GUILayoutUtility.GetLastRect(); } foldoutRect.Set(foldoutRect.x - Styles.FoldoutWidth + Styles.FoldoutIndentation, foldoutRect.y, Styles.FoldoutWidth, foldoutRect.height); EditorGUI.BeginChangeCheck(); { node.Open = GUI.Toggle(foldoutRect, node.Open, "", EditorStyles.foldout); } if (EditorGUI.EndChangeCheck()) { if (!node.Open && !foldedTreeEntries.Contains(node.RepositoryPath)) { foldedTreeEntries.Add(node.RepositoryPath); } else if (node.Open) { foldedTreeEntries.Remove(node.RepositoryPath); } OnCommitTreeChange(); } } GitFileStatus?status = null; // Node icon and label GUILayout.BeginHorizontal(); { GUILayout.Space(Styles.CommitIconHorizontalPadding); var iconRect = GUILayoutUtility.GetRect(Styles.CommitIconSize, Styles.CommitIconSize, GUILayout.ExpandWidth(false)); iconRect.y += 2; iconRect.x -= 2; if (Event.current.type == EventType.Repaint) { var icon = (Texture)node.Icon ?? (isFolder ? Styles.FolderIcon : Styles.DefaultAssetIcon); if (icon != null) { GUI.DrawTexture(iconRect, icon, ScaleMode.ScaleToFit); } } var statusRect = new Rect( iconRect.xMax - 9, iconRect.yMax - 7, 9, 9); // Current status (if any) if (target != null) { var idx = entryCommitTargets.IndexOf(target); if (idx > -1) { status = entries[idx].Status; var statusIcon = Styles.GetFileStatusIcon(entries[idx].Status, false); if (statusIcon != null) { GUI.DrawTexture(statusRect, statusIcon); } } } GUILayout.Space(Styles.CommitIconHorizontalPadding); } GUILayout.EndHorizontal(); // Make the text gray and strikethrough if the file is deleted if (status == GitFileStatus.Deleted) { GUILayout.Label(new GUIContent(node.Label, node.RepositoryPath), Styles.DeletedFileLabel, GUILayout.ExpandWidth(true)); var labelRect = GUILayoutUtility.GetLastRect(); var strikeRect = new Rect(labelRect.xMin, labelRect.center.y, labelRect.width, 1); EditorGUI.DrawRect(strikeRect, Color.gray); } else { GUILayout.Label(new GUIContent(node.Label, node.RepositoryPath), GUILayout.ExpandWidth(true)); } GUILayout.FlexibleSpace(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { // Render children (if any and folded out) if (isFolder && node.Open) { GUILayout.Space(Styles.TreeIndentation); GUILayout.BeginVertical(); { foreach (var child in node.Children) { TreeNode(child); } } GUILayout.EndVertical(); } } GUILayout.EndHorizontal(); }
private bool OnIssuesGUI() { IList <ProjectConfigurationIssue> projectConfigurationIssues; if (Utility.Issues != null) { projectConfigurationIssues = Utility.Issues; } else { projectConfigurationIssues = new ProjectConfigurationIssue[0]; } var settingsIssues = projectConfigurationIssues.Select(i => i as ProjectSettingsIssue).FirstOrDefault(i => i != null); if (settingsIssues != null) { if (settingsIssues.WasCaught(ProjectSettingsEvaluation.EditorSettingsMissing)) { Styles.BeginInitialStateArea(EditorSettingsMissingTitle, String.Format(EditorSettingsMissingMessage, EvaluateProjectConfigurationTask.EditorSettingsPath)); Styles.EndInitialStateArea(); return(false); } else if (settingsIssues.WasCaught(ProjectSettingsEvaluation.BadVCSSettings)) { Styles.BeginInitialStateArea(BadVCSSettingsTitle, BadVCSSettingsMessage); { GUILayout.Space(EditorGUIUtility.standardVerticalSpacing); // Button to select editor settings - for remedying the bad setting if (Styles.InitialStateActionButton(SelectEditorSettingsButton)) { Selection.activeObject = EvaluateProjectConfigurationTask.LoadEditorSettings(); } } Styles.EndInitialStateArea(); return(false); } } if (!Utility.GitFound) { Styles.BeginInitialStateArea(GitInstallTitle, GitInstallMissingMessage); { OnInstallPathGUI(); } Styles.EndInitialStateArea(); return(false); } else if (!Utility.ActiveRepository) { Styles.BeginInitialStateArea(NoActiveRepositoryTitle, NoActiveRepositoryMessage); { // Init directory path field Styles.PathField(ref initDirectory, () => EditorUtility.OpenFolderPanel(GitInitBrowseTitle, initDirectory, ""), ValidateInitDirectory); GUILayout.Space(EditorGUIUtility.standardVerticalSpacing); // Git init, which starts the config flow if (Styles.InitialStateActionButton(GitInitButton)) { if (ValidateInitDirectory(initDirectory)) { Init(); } else { ResetInitDirectory(); } } } Styles.EndInitialStateArea(); return(false); } if (settingsIssues != null && !Manager.LocalSettings.Get(IgnoreSerialisationIssuesSetting, "0").Equals("1")) { var binary = settingsIssues.WasCaught(ProjectSettingsEvaluation.BinarySerialization); var mixed = settingsIssues.WasCaught(ProjectSettingsEvaluation.MixedSerialization); if (binary || mixed) { GUILayout.Label(TextSerialisationMessage, Styles.LongMessageStyle); Styles.Warning(binary ? BinarySerialisationMessage : MixedSerialisationMessage); GUILayout.BeginHorizontal(); { if (GUILayout.Button(IgnoreSerialisationSettingsButton)) { Manager.LocalSettings.Set(IgnoreSerialisationIssuesSetting, "1"); } GUILayout.FlexibleSpace(); if (GUILayout.Button(RefreshIssuesButton)) { // TODO: Fix this } if (GUILayout.Button(SelectEditorSettingsButton)) { Selection.activeObject = EvaluateProjectConfigurationTask.LoadEditorSettings(); } } GUILayout.EndHorizontal(); } } var gitIgnoreException = projectConfigurationIssues.Select(i => i as GitIgnoreException).FirstOrDefault(i => i != null); if (gitIgnoreException != null) { Styles.Warning(String.Format(GitIgnoreExceptionWarning, gitIgnoreException.Exception)); } foreach (var issue in projectConfigurationIssues.Select(i => i as GitIgnoreIssue).Where(i => i != null)) { if (string.IsNullOrEmpty(issue.Line)) { Styles.Warning(String.Format(GitIgnoreIssueNoLineWarning, issue.File, issue.Description)); } else { Styles.Warning(String.Format(GitIgnoreIssueWarning, issue.File, issue.Line, issue.Description)); } } return(true); }