int TryOpenProject(DetectProjectSettingsTask ProjectSettings, int ReplaceTabIdx, OpenProjectOptions Options) { Log.WriteLine("Trying to open project {0}", ProjectSettings.SelectedProject.ToString()); // Check that none of the other tabs already have it open for (int TabIdx = 0; TabIdx < TabControl.GetTabCount(); TabIdx++) { if (ReplaceTabIdx != TabIdx) { WorkspaceControl Workspace = TabControl.GetTabData(TabIdx) as WorkspaceControl; if (Workspace != null) { if (Workspace.SelectedFileName.Equals(ProjectSettings.NewSelectedFileName, StringComparison.InvariantCultureIgnoreCase)) { Log.WriteLine(" Already open in tab {0}", TabIdx); if ((Options & OpenProjectOptions.Quiet) == 0) { TabControl.SelectTab(TabIdx); } return(TabIdx); } else if (ProjectSettings.NewSelectedFileName.StartsWith(Workspace.BranchDirectoryName + Path.DirectorySeparatorChar, StringComparison.InvariantCultureIgnoreCase)) { if ((Options & OpenProjectOptions.Quiet) == 0 && MessageBox.Show(String.Format("{0} is already open under {1}.\n\nWould you like to close it?", Path.GetFileNameWithoutExtension(Workspace.SelectedFileName), Workspace.BranchDirectoryName, Path.GetFileNameWithoutExtension(ProjectSettings.NewSelectedFileName)), "Branch already open", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes) { Log.WriteLine(" Another project already open in this workspace, tab {0}. Replacing.", TabIdx); TabControl.RemoveTab(TabIdx); } else { Log.WriteLine(" Another project already open in this workspace, tab {0}. Aborting.", TabIdx); return(-1); } } } } } // Hide the default control if it's visible DefaultControl.Hide(); // Remove the current tab. We need to ensure the workspace has been shut down before creating a new one with the same log files, etc... if (ReplaceTabIdx != -1) { WorkspaceControl OldWorkspace = TabControl.GetTabData(ReplaceTabIdx) as WorkspaceControl; if (OldWorkspace != null) { OldWorkspace.Hide(); TabControl.SetTabData(ReplaceTabIdx, new ErrorPanel(ProjectSettings.SelectedProject)); OldWorkspace.Dispose(); } } // Now that we have the project settings, we can construct the tab WorkspaceControl NewWorkspace = new WorkspaceControl(this, ApiUrl, OriginalExecutableFileName, ProjectSettings, Log, Settings); NewWorkspace.Parent = TabPanel; NewWorkspace.Location = new Point(0, 0); NewWorkspace.Size = new Size(TabPanel.Width, TabPanel.Height); NewWorkspace.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; NewWorkspace.Hide(); // Add the tab string NewTabName = GetTabName(NewWorkspace); if (ReplaceTabIdx == -1) { int NewTabIdx = TabControl.InsertTab(-1, NewTabName, NewWorkspace); Log.WriteLine(" Inserted tab {0}", NewTabIdx); return(NewTabIdx); } else { Log.WriteLine(" Replacing tab {0}", ReplaceTabIdx); TabControl.InsertTab(ReplaceTabIdx + 1, NewTabName, NewWorkspace); TabControl.RemoveTab(ReplaceTabIdx); return(ReplaceTabIdx); } }
private void CreateErrorPanel(int ReplaceTabIdx, UserSelectedProjectSettings Project, string Message) { Log.WriteLine(Message ?? "Unknown error"); ErrorPanel ErrorPanel = new ErrorPanel(Project); ErrorPanel.Parent = TabPanel; ErrorPanel.BorderStyle = BorderStyle.FixedSingle; ErrorPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250))))); ErrorPanel.Location = new Point(0, 0); ErrorPanel.Size = new Size(TabPanel.Width, TabPanel.Height); ErrorPanel.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; ErrorPanel.Hide(); string SummaryText = String.Format("Unable to open '{0}'.", Project.ToString()); int NewContentWidth = Math.Max(TextRenderer.MeasureText(SummaryText, ErrorPanel.Font).Width, 400); if (!String.IsNullOrEmpty(Message)) { NewContentWidth = Math.Max(NewContentWidth, TextRenderer.MeasureText(Message, ErrorPanel.Font).Width); } ErrorPanel.SetContentWidth(NewContentWidth); List <StatusLine> Lines = new List <StatusLine>(); StatusLine SummaryLine = new StatusLine(); SummaryLine.AddText(SummaryText); Lines.Add(SummaryLine); if (!String.IsNullOrEmpty(Message)) { Lines.Add(new StatusLine() { LineHeight = 0.5f }); foreach (string MessageLine in Message.Split('\n')) { StatusLine ErrorLine = new StatusLine(); ErrorLine.AddText(MessageLine); ErrorLine.LineHeight = 0.8f; Lines.Add(ErrorLine); } } Lines.Add(new StatusLine() { LineHeight = 0.5f }); StatusLine ActionLine = new StatusLine(); ActionLine.AddLink("Retry", FontStyle.Bold | FontStyle.Underline, () => { BeginInvoke(new MethodInvoker(() => { TryOpenProject(Project, TabControl.FindTabIndex(ErrorPanel)); })); }); ActionLine.AddText(" | "); ActionLine.AddLink("Settings", FontStyle.Bold | FontStyle.Underline, () => { BeginInvoke(new MethodInvoker(() => { EditSelectedProject(ErrorPanel); })); }); ActionLine.AddText(" | "); ActionLine.AddLink("Close", FontStyle.Bold | FontStyle.Underline, () => { BeginInvoke(new MethodInvoker(() => { TabControl.RemoveTab(TabControl.FindTabIndex(ErrorPanel)); })); }); Lines.Add(ActionLine); ErrorPanel.Set(Lines, null, null, null); string NewProjectName = "Unknown"; if (Project.Type == UserSelectedProjectType.Client && Project.ClientPath != null) { NewProjectName = Project.ClientPath.Substring(Project.ClientPath.LastIndexOf('/') + 1); } if (Project.Type == UserSelectedProjectType.Local && Project.LocalPath != null) { NewProjectName = Project.LocalPath.Substring(Project.LocalPath.LastIndexOfAny(new char[] { '/', '\\' }) + 1); } string NewTabName = String.Format("Error: {0}", NewProjectName); if (ReplaceTabIdx == -1) { int TabIdx = TabControl.InsertTab(-1, NewTabName, ErrorPanel); TabControl.SelectTab(TabIdx); } else { TabControl.InsertTab(ReplaceTabIdx + 1, NewTabName, ErrorPanel); TabControl.RemoveTab(ReplaceTabIdx); TabControl.SelectTab(ReplaceTabIdx); } UpdateProgress(); }