private void MainWindow_FormClosing(object Sender, FormClosingEventArgs EventArgs) { if (!bAllowClose && Settings.bKeepInTray) { Hide(); EventArgs.Cancel = true; } else { for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { IMainWindowTabPanel TabPanel = (IMainWindowTabPanel)TabControl.GetTabData(Idx); if (!TabPanel.CanClose()) { EventArgs.Cancel = true; return; } } StopScheduleTimer(); } Settings.bWindowVisible = Visible; Settings.WindowState = WindowState; if (WindowState == FormWindowState.Normal) { Settings.WindowBounds = new Rectangle(Location, Size); } else { Settings.WindowBounds = RestoreBounds; } Settings.Save(); }
/// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { ((IMainWindowTabPanel)TabControl.GetTabData(Idx)).Dispose(); } StopScheduleTimer(); if (AutomationServer != null) { AutomationServer.Dispose(); AutomationServer = null; } if (AutomationLog != null) { AutomationLog.Close(); AutomationLog = null; } base.Dispose(disposing); }
private void MainWindow_FormClosing(object Sender, FormClosingEventArgs EventArgs) { if (!bAllowClose && Settings.bKeepInTray) { Hide(); EventArgs.Cancel = true; } else { for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { IMainWindowTabPanel TabPanel = (IMainWindowTabPanel)TabControl.GetTabData(Idx); if (!TabPanel.CanClose()) { EventArgs.Cancel = true; return; } } StopScheduleTimer(); Settings.bWindowVisible = Visible; Settings.Save(); } }
private void ScheduleTimerElapsed() { for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { ((WorkspaceControl)TabControl.GetTabData(Idx)).ScheduleTimerElapsed(); } }
AutomationRequestOutput FindProject(AutomationRequest Request) { BinaryReader Reader = new BinaryReader(new MemoryStream(Request.Input.Data)); string StreamName = Reader.ReadString(); string ProjectPath = Reader.ReadString(); for (int ExistingTabIdx = 0; ExistingTabIdx < TabControl.GetTabCount(); ExistingTabIdx++) { WorkspaceControl ExistingWorkspace = TabControl.GetTabData(ExistingTabIdx) as WorkspaceControl; if (ExistingWorkspace != null && String.Compare(ExistingWorkspace.StreamName, StreamName, StringComparison.OrdinalIgnoreCase) == 0 && ExistingWorkspace.SelectedProject != null) { string ClientPath = ExistingWorkspace.SelectedProject.ClientPath; if (ClientPath != null && ClientPath.StartsWith("//")) { int SlashIdx = ClientPath.IndexOf('/', 2); if (SlashIdx != -1) { string ExistingProjectPath = ClientPath.Substring(SlashIdx); if (String.Compare(ExistingProjectPath, ProjectPath, StringComparison.OrdinalIgnoreCase) == 0) { return(new AutomationRequestOutput(AutomationRequestResult.Ok, Encoding.UTF8.GetBytes(ExistingWorkspace.SelectedFileName))); } } } } } return(new AutomationRequestOutput(AutomationRequestResult.NotFound)); }
private void MainWindow_FormClosing(object Sender, FormClosingEventArgs EventArgs) { if (!bAllowClose && Settings.bKeepInTray) { Hide(); EventArgs.Cancel = true; } else { for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { WorkspaceControl Workspace = (WorkspaceControl)TabControl.GetTabData(Idx); if (!Workspace.CanClose()) { EventArgs.Cancel = true; return; } } ActivationListener.OnActivate -= OnActivationListenerAsyncCallback; ActivationListener.Stop(); UpdateMonitor.OnUpdateAvailable -= OnUpdateAvailable; UpdateMonitor.Close(); // prevent race condition StopScheduleTimer(); Rectangle SaveBounds = (WindowState == FormWindowState.Normal)? Bounds : RestoreBounds; Settings.WindowRectangle = SaveBounds; Settings.bWindowVisible = Visible; Settings.Save(); } }
void SaveTabSettings() { Settings.OpenProjects.Clear(); for (int TabIdx = 0; TabIdx < TabControl.GetTabCount(); TabIdx++) { IMainWindowTabPanel TabPanel = (IMainWindowTabPanel)TabControl.GetTabData(TabIdx); Settings.OpenProjects.Add(TabPanel.SelectedProject); } Settings.Save(); }
private void ScheduleTimerElapsed() { for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { WorkspaceControl Workspace = TabControl.GetTabData(Idx) as WorkspaceControl; if (Workspace != null) { Workspace.ScheduleTimerElapsed(); } } }
private void ScheduleSettledTimerElapsed() { for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { WorkspaceControl Workspace = TabControl.GetTabData(Idx) as WorkspaceControl; if (Workspace != null && (Settings.ScheduleAnyOpenProject || Settings.ScheduleProjects.Contains(Workspace.SelectedProject))) { Workspace.ScheduleTimerElapsed(); } } }
void SaveTabSettings() { List <string> OpenProjectFileNames = new List <string>(); for (int TabIdx = 0; TabIdx < TabControl.GetTabCount(); TabIdx++) { IMainWindowTabPanel TabPanel = (IMainWindowTabPanel)TabControl.GetTabData(TabIdx); OpenProjectFileNames.Add(TabPanel.SelectedFileName); } Settings.OpenProjectFileNames = OpenProjectFileNames.ToArray(); Settings.Save(); }
public MainWindow(string InApiUrl, string InDataFolder, bool bInRestoreStateOnLoad, string InOriginalExecutableFileName, List <DetectProjectSettingsResult> StartupProjects, LineBasedTextWriter InLog, UserSettings InSettings) { InitializeComponent(); MainThreadSynchronizationContext = SynchronizationContext.Current; ApiUrl = InApiUrl; DataFolder = InDataFolder; bRestoreStateOnLoad = bInRestoreStateOnLoad; OriginalExecutableFileName = InOriginalExecutableFileName; Log = InLog; Settings = InSettings; TabControl.OnTabChanged += TabControl_OnTabChanged; TabControl.OnNewTabClick += TabControl_OnNewTabClick; TabControl.OnTabClicked += TabControl_OnTabClicked; TabControl.OnTabClosing += TabControl_OnTabClosing; TabControl.OnTabClosed += TabControl_OnTabClosed; TabControl.OnTabReorder += TabControl_OnTabReorder; TabControl.OnButtonClick += TabControl_OnButtonClick; SetupDefaultControl(); int SelectTabIdx = -1; foreach (DetectProjectSettingsResult StartupProject in StartupProjects) { int TabIdx = -1; if (StartupProject.bSucceeded) { TabIdx = TryOpenProject(StartupProject.Task, -1, OpenProjectOptions.Quiet); } else if (StartupProject.ErrorMessage != null) { CreateErrorPanel(-1, StartupProject.Task.SelectedProject, StartupProject.ErrorMessage); } if (TabIdx != -1 && Settings.LastProject != null && StartupProject.Task.SelectedProject.Equals(Settings.LastProject)) { SelectTabIdx = TabIdx; } } if (SelectTabIdx != -1) { TabControl.SelectTab(SelectTabIdx); } else if (TabControl.GetTabCount() > 0) { TabControl.SelectTab(0); } StartScheduleTimer(); }
void SaveTabSettings() { List <string> OpenProjectFileNames = new List <string>(); for (int TabIdx = 0; TabIdx < TabControl.GetTabCount(); TabIdx++) { WorkspaceControl Workspace = (WorkspaceControl)TabControl.GetTabData(TabIdx); OpenProjectFileNames.Add(Workspace.SelectedFileName); } Settings.OpenProjectFileNames = OpenProjectFileNames.ToArray(); Settings.Save(); }
public void SetTabNames(TabLabels NewTabNames) { if (Settings.TabLabels != NewTabNames) { Settings.TabLabels = NewTabNames; Settings.Save(); for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { WorkspaceControl Workspace = (WorkspaceControl)TabControl.GetTabData(Idx); TabControl.SetTabName(Idx, GetTabName(Workspace)); } } }
void TabControl_OnTabClicked(object TabData, Point Location, MouseButtons Buttons) { if (Buttons == System.Windows.Forms.MouseButtons.Right) { Activate(); int InsertIdx = 0; while (TabMenu_RecentProjects.DropDownItems[InsertIdx] != TabMenu_Recent_Separator) { TabMenu_RecentProjects.DropDownItems.RemoveAt(InsertIdx); } TabMenu_TabIdx = -1; for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { if (TabControl.GetTabData(Idx) == TabData) { TabMenu_TabIdx = Idx; break; } } HashSet <string> ProjectList = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase); foreach (string ProjectFileName in Settings.OtherProjectFileNames) { if (!String.IsNullOrEmpty(ProjectFileName)) { string FullProjectFileName = Path.GetFullPath(ProjectFileName); if (ProjectList.Add(FullProjectFileName)) { ToolStripMenuItem Item = new ToolStripMenuItem(FullProjectFileName, null, new EventHandler((o, e) => TryOpenProject(FullProjectFileName, TabMenu_TabIdx))); TabMenu_RecentProjects.DropDownItems.Insert(InsertIdx, Item); InsertIdx++; } } } TabMenu_RecentProjects.Visible = (ProjectList.Count > 0); TabMenu_TabNames_Stream.Checked = Settings.TabLabels == TabLabels.Stream; TabMenu_TabNames_WorkspaceName.Checked = Settings.TabLabels == TabLabels.WorkspaceName; TabMenu_TabNames_WorkspaceRoot.Checked = Settings.TabLabels == TabLabels.WorkspaceRoot; TabMenu_TabNames_ProjectFile.Checked = Settings.TabLabels == TabLabels.ProjectFile; TabMenu.Show(TabControl, Location); TabControl.LockHover(); } }
public MainWindow(UpdateMonitor InUpdateMonitor, string InSqlConnectionString, string InDataFolder, EventWaitHandle ActivateEvent, bool bInRestoreStateOnLoad, string InOriginalExecutableFileName, string InProjectFileName, bool bInUnstable, BoundedLogWriter InLog, UserSettings InSettings) { InitializeComponent(); NotifyMenu_OpenUnrealGameSync.Font = new Font(NotifyMenu_OpenUnrealGameSync.Font, FontStyle.Bold); UpdateMonitor = InUpdateMonitor; SqlConnectionString = InSqlConnectionString; DataFolder = InDataFolder; ActivationListener = new ActivationListener(ActivateEvent); bRestoreStateOnLoad = bInRestoreStateOnLoad; OriginalExecutableFileName = InOriginalExecutableFileName; bUnstable = bInUnstable; Log = InLog; Settings = InSettings; TabControl.OnTabChanged += TabControl_OnTabChanged; TabControl.OnNewTabClick += TabControl_OnNewTabClick; TabControl.OnTabClicked += TabControl_OnTabClicked; TabControl.OnTabClosing += TabControl_OnTabClosing; TabControl.OnTabClosed += TabControl_OnTabClosed; TabControl.OnTabReorder += TabControl_OnTabReorder; TabControl.OnButtonClick += TabControl_OnButtonClick; SetupDefaultControl(); int SelectTabIdx = -1; foreach (string ProjectFileName in Settings.OpenProjectFileNames) { if (!String.IsNullOrEmpty(ProjectFileName)) { int TabIdx = TryOpenProject(ProjectFileName); if (TabIdx != -1 && Settings.LastProjectFileName != null && ProjectFileName.Equals(Settings.LastProjectFileName, StringComparison.InvariantCultureIgnoreCase)) { SelectTabIdx = TabIdx; } } } if (SelectTabIdx != -1) { TabControl.SelectTab(SelectTabIdx); } else if (TabControl.GetTabCount() > 0) { TabControl.SelectTab(0); } }
/// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { ((IMainWindowTabPanel)TabControl.GetTabData(Idx)).Dispose(); } StopScheduleTimer(); base.Dispose(disposing); }
private void OnUpdateAvailable() { if (!ContainsFocus && Form.ActiveForm != this) { for (int TabIdx = 0; TabIdx < TabControl.GetTabCount(); TabIdx++) { WorkspaceControl Workspace = (WorkspaceControl)TabControl.GetTabData(TabIdx); if (Workspace.IsBusy()) { return; } } bAllowClose = true; Close(); } }
private void ScheduleSettledTimerElapsed() { Log.WriteLine("Schedule: Starting Sync"); for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { WorkspaceControl Workspace = TabControl.GetTabData(Idx) as WorkspaceControl; if (Workspace != null) { Log.WriteLine("Schedule: Considering {0}", Workspace.SelectedFileName); if (Settings.ScheduleAnyOpenProject || Settings.ScheduleProjects.Contains(Workspace.SelectedProject)) { Log.WriteLine("Schedule: Starting Sync"); Workspace.ScheduleTimerElapsed(); } } } }
private void OnUpdateAvailable() { if (!ContainsFocus && Form.ActiveForm != this) { for (int TabIdx = 0; TabIdx < TabControl.GetTabCount(); TabIdx++) { IMainWindowTabPanel TabPanel = (IMainWindowTabPanel)TabControl.GetTabData(TabIdx); if (TabPanel.IsBusy()) { return; } } bAllowClose = true; Close(); } }
public void UpdateProgress() { TaskbarState State = TaskbarState.NoProgress; float Progress = -1.0f; for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { IMainWindowTabPanel TabPanel = (IMainWindowTabPanel)TabControl.GetTabData(Idx); Tuple <TaskbarState, float> DesiredTaskbarState = TabPanel.DesiredTaskbarState; if (DesiredTaskbarState.Item1 == TaskbarState.Error) { State = TaskbarState.Error; TabControl.SetHighlight(Idx, Tuple.Create(Color.FromArgb(204, 64, 64), 1.0f)); } else if (DesiredTaskbarState.Item1 == TaskbarState.Paused && State != TaskbarState.Error) { State = TaskbarState.Paused; TabControl.SetHighlight(Idx, Tuple.Create(Color.FromArgb(255, 242, 0), 1.0f)); } else if (DesiredTaskbarState.Item1 == TaskbarState.Normal && State != TaskbarState.Error && State != TaskbarState.Paused) { State = TaskbarState.Normal; Progress = Math.Max(Progress, DesiredTaskbarState.Item2); TabControl.SetHighlight(Idx, Tuple.Create(Color.FromArgb(28, 180, 64), DesiredTaskbarState.Item2)); } else { TabControl.SetHighlight(Idx, null); } } if (IsHandleCreated) { if (State == TaskbarState.Normal) { Taskbar.SetState(Handle, TaskbarState.Normal); Taskbar.SetProgress(Handle, (ulong)(Progress * 1000.0f), 1000); } else { Taskbar.SetState(Handle, State); } } }
public bool CanPerformUpdate() { if (ContainsFocus || Form.ActiveForm == this) { return(false); } for (int TabIdx = 0; TabIdx < TabControl.GetTabCount(); TabIdx++) { IMainWindowTabPanel TabPanel = (IMainWindowTabPanel)TabControl.GetTabData(TabIdx); if (TabPanel.IsBusy()) { return(false); } } return(true); }
private void ScheduleTimerElapsed() { // Try to open any missing tabs. int NumInitialTabs = TabControl.GetTabCount(); foreach (UserSelectedProjectSettings ScheduledProject in Settings.ScheduleProjects) { TryOpenProject(ScheduledProject, -1, OpenProjectOptions.Quiet); } // If we did open something, leave it for a while to populate with data before trying to start the sync. if (TabControl.GetTabCount() > NumInitialTabs) { StartScheduleSettledTimer(); } else { ScheduleSettledTimerElapsed(); } }
void TabControl_OnTabClicked(object TabData, Point Location, MouseButtons Buttons) { if (Buttons == System.Windows.Forms.MouseButtons.Right) { Activate(); int InsertIdx = 0; while (TabMenu_RecentProjects.DropDownItems[InsertIdx] != TabMenu_Recent_Separator) { TabMenu_RecentProjects.DropDownItems.RemoveAt(InsertIdx); } TabMenu_TabIdx = -1; for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { if (TabControl.GetTabData(Idx) == TabData) { TabMenu_TabIdx = Idx; break; } } foreach (UserSelectedProjectSettings RecentProject in Settings.RecentProjects) { ToolStripMenuItem Item = new ToolStripMenuItem(RecentProject.ToString(), null, new EventHandler((o, e) => TryOpenProject(RecentProject, TabMenu_TabIdx))); TabMenu_RecentProjects.DropDownItems.Insert(InsertIdx, Item); InsertIdx++; } TabMenu_RecentProjects.Visible = (Settings.RecentProjects.Count > 0); TabMenu_TabNames_Stream.Checked = Settings.TabLabels == TabLabels.Stream; TabMenu_TabNames_WorkspaceName.Checked = Settings.TabLabels == TabLabels.WorkspaceName; TabMenu_TabNames_WorkspaceRoot.Checked = Settings.TabLabels == TabLabels.WorkspaceRoot; TabMenu_TabNames_ProjectFile.Checked = Settings.TabLabels == TabLabels.ProjectFile; TabMenu.Show(TabControl, Location); TabControl.LockHover(); } }
public void StreamChangedCallback(WorkspaceControl Workspace) { if (ChangingWorkspacesRefCount == 0) { ChangingWorkspacesRefCount++; for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { if (TabControl.GetTabData(Idx) == Workspace) { string ProjectFileName = Workspace.SelectedFileName; if (TryOpenProject(ProjectFileName, Idx) == -1) { TabControl.RemoveTab(Idx); } break; } } ChangingWorkspacesRefCount--; } }
public void SetupScheduledSync() { StopScheduleTimer(); List <UserSelectedProjectSettings> OpenProjects = new List <UserSelectedProjectSettings>(); for (int TabIdx = 0; TabIdx < TabControl.GetTabCount(); TabIdx++) { IMainWindowTabPanel TabPanel = (IMainWindowTabPanel)TabControl.GetTabData(TabIdx); OpenProjects.Add(TabPanel.SelectedProject); } ScheduleWindow Schedule = new ScheduleWindow(Settings.bScheduleEnabled, Settings.ScheduleChange, Settings.ScheduleTime, Settings.ScheduleAnyOpenProject, Settings.ScheduleProjects, OpenProjects); if (Schedule.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Schedule.CopySettings(out Settings.bScheduleEnabled, out Settings.ScheduleChange, out Settings.ScheduleTime, out Settings.ScheduleAnyOpenProject, out Settings.ScheduleProjects); Settings.Save(); } StartScheduleTimer(); }
/// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++) { ((WorkspaceControl)TabControl.GetTabData(Idx)).Dispose(); } if (ActivationListener != null) { ActivationListener.Dispose(); ActivationListener = null; } StopScheduleTimer(); base.Dispose(disposing); }
AutomationRequestOutput StartAutomatedSync(AutomationRequest Request, bool bForceSync) { ShowAndActivate(); BinaryReader Reader = new BinaryReader(new MemoryStream(Request.Input.Data)); string StreamName = Reader.ReadString(); string ProjectPath = Reader.ReadString(); AutomatedSyncWindow.WorkspaceInfo WorkspaceInfo; if (!AutomatedSyncWindow.ShowModal(this, StreamName, ProjectPath, out WorkspaceInfo, Log)) { return(new AutomationRequestOutput(AutomationRequestResult.Canceled)); } if (WorkspaceInfo.bRequiresStreamSwitch) { // Close any tab containing this window for (int ExistingTabIdx = 0; ExistingTabIdx < TabControl.GetTabCount(); ExistingTabIdx++) { WorkspaceControl ExistingWorkspace = TabControl.GetTabData(ExistingTabIdx) as WorkspaceControl; if (ExistingWorkspace != null && ExistingWorkspace.ClientName.Equals(WorkspaceInfo.WorkspaceName)) { TabControl.RemoveTab(ExistingTabIdx); break; } } // Switch the stream PerforceConnection Perforce = new PerforceConnection(WorkspaceInfo.UserName, WorkspaceInfo.WorkspaceName, WorkspaceInfo.ServerAndPort); if (!Perforce.SwitchStream(StreamName, Log)) { Log.WriteLine("Unable to switch stream"); return(new AutomationRequestOutput(AutomationRequestResult.Error)); } } UserSelectedProjectSettings SelectedProject = new UserSelectedProjectSettings(WorkspaceInfo.ServerAndPort, WorkspaceInfo.UserName, UserSelectedProjectType.Client, String.Format("//{0}{1}", WorkspaceInfo.WorkspaceName, ProjectPath), null); int TabIdx = TryOpenProject(SelectedProject, -1, OpenProjectOptions.None); if (TabIdx == -1) { Log.WriteLine("Unable to open project"); return(new AutomationRequestOutput(AutomationRequestResult.Error)); } WorkspaceControl Workspace = TabControl.GetTabData(TabIdx) as WorkspaceControl; if (Workspace == null) { Log.WriteLine("Workspace was unable to open"); return(new AutomationRequestOutput(AutomationRequestResult.Error)); } if (!bForceSync && Workspace.CanLaunchEditor()) { return(new AutomationRequestOutput(AutomationRequestResult.Ok, Encoding.UTF8.GetBytes(Workspace.SelectedFileName))); } Workspace.AddStartupCallback((Control, bCancel) => StartAutomatedSyncAfterStartup(Control, bCancel, Request)); return(null); }
int TryOpenProject(string ProjectFileName, int ReplaceTabIdx = -1) { Log.WriteLine("Trying to open project {0}", ProjectFileName); // Normalize the filename ProjectFileName = Path.GetFullPath(ProjectFileName).Replace('/', Path.DirectorySeparatorChar); // Make sure the project exists if (!File.Exists(ProjectFileName)) { ShowErrorDialog("{0} does not exist.", ProjectFileName); return(-1); } // Check that none of the other tabs already have it open for (int TabIdx = 0; TabIdx < TabControl.GetTabCount(); TabIdx++) { if (ReplaceTabIdx != TabIdx) { WorkspaceControl Workspace = (WorkspaceControl)TabControl.GetTabData(TabIdx); if (Workspace.SelectedFileName.Equals(ProjectFileName, StringComparison.InvariantCultureIgnoreCase)) { TabControl.SelectTab(TabIdx); return(TabIdx); } else if (ProjectFileName.StartsWith(Workspace.BranchDirectoryName + Path.DirectorySeparatorChar, StringComparison.InvariantCultureIgnoreCase)) { if (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(ProjectFileName)), "Branch already open", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes) { TabControl.RemoveTab(TabIdx); } else { return(-1); } } } } // Make sure the path case is correct. This can cause UBT intermediates to be out of date if the case mismatches. ProjectFileName = Utility.GetPathWithCorrectCase(new FileInfo(ProjectFileName)); // Detect the project settings in a background thread using (DetectProjectSettingsTask DetectSettings = new DetectProjectSettingsTask(ProjectFileName, Log)) { string ErrorMessage; if (!ModalTaskWindow.Execute(this, DetectSettings, "Opening Project", "Opening project, please wait...", out ErrorMessage)) { if (!String.IsNullOrEmpty(ErrorMessage)) { ShowErrorDialog("{0}", ErrorMessage); } return(-1); } // Hide the default control if it's visible DefaultControl.Hide(); // Now that we have the project settings, we can construct the tab WorkspaceControl Workspace = new WorkspaceControl(this, SqlConnectionString, DataFolder, bRestoreStateOnLoad, OriginalExecutableFileName, ProjectFileName, bUnstable, DetectSettings, Log, Settings); Workspace.Parent = TabPanel; Workspace.Location = new Point(0, 0); Workspace.Size = new Size(TabPanel.Width, TabPanel.Height); Workspace.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; Workspace.Hide(); // Add the tab string NewTabName = GetTabName(Workspace); if (ReplaceTabIdx == -1) { int NewTabIdx = TabControl.InsertTab(-1, NewTabName, Workspace); return(NewTabIdx); } else { TabControl.InsertTab(ReplaceTabIdx + 1, NewTabName, Workspace); TabControl.RemoveTab(ReplaceTabIdx); return(ReplaceTabIdx); } } }
public MainWindow(UpdateMonitor InUpdateMonitor, string InApiUrl, string InDataFolder, string InCacheFolder, bool bInRestoreStateOnLoad, string InOriginalExecutableFileName, bool bInUnstable, DetectProjectSettingsResult[] StartupProjects, LineBasedTextWriter InLog, UserSettings InSettings) { InitializeComponent(); UpdateMonitor = InUpdateMonitor; MainThreadSynchronizationContext = SynchronizationContext.Current; ApiUrl = InApiUrl; DataFolder = InDataFolder; CacheFolder = InCacheFolder; bRestoreStateOnLoad = bInRestoreStateOnLoad; OriginalExecutableFileName = InOriginalExecutableFileName; bUnstable = bInUnstable; Log = InLog; Settings = InSettings; // While creating tab controls during startup, we need to prevent layout calls resulting in the window handle being created too early. Disable layout calls here. SuspendLayout(); TabPanel.SuspendLayout(); TabControl.OnTabChanged += TabControl_OnTabChanged; TabControl.OnNewTabClick += TabControl_OnNewTabClick; TabControl.OnTabClicked += TabControl_OnTabClicked; TabControl.OnTabClosing += TabControl_OnTabClosing; TabControl.OnTabClosed += TabControl_OnTabClosed; TabControl.OnTabReorder += TabControl_OnTabReorder; TabControl.OnButtonClick += TabControl_OnButtonClick; SetupDefaultControl(); int SelectTabIdx = -1; foreach (DetectProjectSettingsResult StartupProject in StartupProjects) { int TabIdx = -1; if (StartupProject.bSucceeded) { TabIdx = TryOpenProject(StartupProject.Task, -1, OpenProjectOptions.Quiet); } else if (StartupProject.ErrorMessage != null) { CreateErrorPanel(-1, StartupProject.Task.SelectedProject, StartupProject.ErrorMessage); } if (TabIdx != -1 && Settings.LastProject != null && StartupProject.Task.SelectedProject.Equals(Settings.LastProject)) { SelectTabIdx = TabIdx; } } if (SelectTabIdx != -1) { TabControl.SelectTab(SelectTabIdx); } else if (TabControl.GetTabCount() > 0) { TabControl.SelectTab(0); } StartScheduleTimer(); if (bUnstable) { Text += String.Format(" (UNSTABLE BUILD {0})", Assembly.GetExecutingAssembly().GetName().Version); } AutomationLog = new TimestampLogWriter(new BoundedLogWriter(Path.Combine(DataFolder, "Automation.log"))); AutomationServer = new AutomationServer(Request => { MainThreadSynchronizationContext.Post(Obj => PostAutomationRequest(Request), null); }, AutomationLog); // Allow creating controls from now on TabPanel.ResumeLayout(false); ResumeLayout(false); bAllowCreatingHandle = true; }
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, bUnstable, ProjectSettings, Log, Settings); NewWorkspace.Parent = TabPanel; NewWorkspace.Dock = DockStyle.Fill; 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); } }