Example #1
0
        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();
        }
Example #2
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();

            if (AutomationServer != null)
            {
                AutomationServer.Dispose();
                AutomationServer = null;
            }

            if (AutomationLog != null)
            {
                AutomationLog.Close();
                AutomationLog = null;
            }

            base.Dispose(disposing);
        }
Example #3
0
        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();
            }
        }
Example #4
0
 private void ScheduleTimerElapsed()
 {
     for (int Idx = 0; Idx < TabControl.GetTabCount(); Idx++)
     {
         ((WorkspaceControl)TabControl.GetTabData(Idx)).ScheduleTimerElapsed();
     }
 }
Example #5
0
        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));
        }
Example #6
0
        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();
            }
        }
Example #7
0
 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();
 }
Example #8
0
 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();
         }
     }
 }
Example #10
0
        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();
        }
Example #11
0
        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();
        }
Example #12
0
        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();
        }
Example #13
0
        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));
                }
            }
        }
Example #14
0
        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();
            }
        }
Example #15
0
        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);
            }
        }
Example #16
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);
        }
Example #17
0
        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();
            }
        }
Example #18
0
 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();
             }
         }
     }
 }
Example #19
0
        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();
            }
        }
Example #20
0
        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);
                }
            }
        }
Example #21
0
        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();
            }
        }
Example #23
0
        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();
            }
        }
Example #24
0
        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--;
            }
        }
Example #25
0
        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();
        }
Example #26
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++)
            {
                ((WorkspaceControl)TabControl.GetTabData(Idx)).Dispose();
            }

            if (ActivationListener != null)
            {
                ActivationListener.Dispose();
                ActivationListener = null;
            }

            StopScheduleTimer();

            base.Dispose(disposing);
        }
Example #27
0
        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);
        }
Example #28
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);
                }
            }
        }
Example #29
0
        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;
        }
Example #30
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);
            }
        }