예제 #1
0
        void TabControl_OnTabChanged(object NewTabData)
        {
            SendMessage(Handle, WM_SETREDRAW, 0, 0);
            SuspendLayout();

            if (CurrentWorkspace != null)
            {
                CurrentWorkspace.Deactivate();
                CurrentWorkspace.Hide();
            }

            if (NewTabData == null)
            {
                CurrentWorkspace             = null;
                Settings.LastProjectFileName = null;
                DefaultControl.Show();
            }
            else
            {
                CurrentWorkspace             = (WorkspaceControl)NewTabData;
                Settings.LastProjectFileName = CurrentWorkspace.SelectedFileName;
                DefaultControl.Hide();
            }

            Settings.Save();

            if (CurrentWorkspace != null)
            {
                CurrentWorkspace.Activate();
                CurrentWorkspace.Show();
            }

            ResumeLayout();

            SendMessage(Handle, WM_SETREDRAW, 1, 0);
            Refresh();
        }
예제 #2
0
        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);
                }
            }
        }
예제 #3
0
        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);
            }
        }