public PerforceSyncSettingsWindow(UserSettings Settings) { this.Settings = Settings; InitializeComponent(); }
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(); }
static void InnerMain(Mutex InstanceMutex, EventWaitHandle ActivateEvent, string[] Args) { List <string> RemainingArgs = new List <string>(Args); string UpdatePath; ParseArgument(RemainingArgs, "-updatepath=", out UpdatePath); string UpdateSpawn; ParseArgument(RemainingArgs, "-updatespawn=", out UpdateSpawn); bool bRestoreState; ParseOption(RemainingArgs, "-restorestate", out bRestoreState); bool bUnstable; ParseOption(RemainingArgs, "-unstable", out bUnstable); string ProjectFileName; ParseArgument(RemainingArgs, "-project=", out ProjectFileName); string UpdateConfigFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "AutoUpdate.ini"); MergeUpdateSettings(UpdateConfigFile, ref UpdatePath, ref UpdateSpawn); string SyncVersionFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "SyncVersion.txt"); if (File.Exists(SyncVersionFile)) { try { SyncVersion = File.ReadAllText(SyncVersionFile).Trim(); } catch (Exception) { SyncVersion = null; } } string DataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "UnrealGameSync"); Directory.CreateDirectory(DataFolder); using (TelemetryWriter Telemetry = new TelemetryWriter(SqlConnectionString, Path.Combine(DataFolder, "Telemetry.log"))) { try { using (UpdateMonitor UpdateMonitor = new UpdateMonitor(new PerforceConnection(null, null, null), UpdatePath)) { using (BoundedLogWriter Log = new BoundedLogWriter(Path.Combine(DataFolder, "UnrealGameSync.log"))) { Log.WriteLine("Application version: {0}", Assembly.GetExecutingAssembly().GetName().Version); Log.WriteLine("Started at {0}", DateTime.Now.ToString()); UserSettings Settings = new UserSettings(Path.Combine(DataFolder, "UnrealGameSync.ini")); if (!String.IsNullOrEmpty(ProjectFileName)) { string FullProjectFileName = Path.GetFullPath(ProjectFileName); if (!Settings.OpenProjectFileNames.Any(x => x.Equals(FullProjectFileName, StringComparison.InvariantCultureIgnoreCase))) { Settings.OpenProjectFileNames = Settings.OpenProjectFileNames.Concat(new string[] { FullProjectFileName }).ToArray(); } } MainWindow Window = new MainWindow(UpdateMonitor, SqlConnectionString, DataFolder, ActivateEvent, bRestoreState, UpdateSpawn ?? Assembly.GetExecutingAssembly().Location, ProjectFileName, bUnstable, Log, Settings); if (bUnstable) { Window.Text += String.Format(" (UNSTABLE BUILD {0})", Assembly.GetExecutingAssembly().GetName().Version); } Application.Run(Window); } if (UpdateMonitor.IsUpdateAvailable && UpdateSpawn != null) { InstanceMutex.Close(); Utility.SpawnProcess(UpdateSpawn, "-restorestate" + (bUnstable? " -unstable" : "")); } } } catch (Exception Ex) { TelemetryWriter.Enqueue(TelemetryErrorType.Crash, Ex.ToString(), null, DateTime.Now); MessageBox.Show(String.Format("UnrealGameSync has crashed.\n\n{0}", Ex.ToString())); } } }
public static bool ShowModal(IWin32Window Owner, UserSelectedProjectSettings Project, out DetectProjectSettingsTask NewDetectedProjectSettings, UserSettings Settings, string DataFolder, string CacheFolder, PerforceConnection DefaultConnection, TextWriter Log) { OpenProjectWindow Window = new OpenProjectWindow(Project, Settings, DataFolder, CacheFolder, DefaultConnection, Log); if (Window.ShowDialog(Owner) == DialogResult.OK) { NewDetectedProjectSettings = Window.DetectedProjectSettings; return(true); } else { NewDetectedProjectSettings = null; return(false); } }
public MainWindow(UpdateMonitor InUpdateMonitor, string InSqlConnectionString, string InDataFolder, EventWaitHandle ActivateEvent, bool bInRestoreStateOnLoad, string InOriginalExecutableFileName, string InProjectFileName) { InitializeComponent(); NotifyMenu_OpenUnrealGameSync.Font = new Font(NotifyMenu_OpenUnrealGameSync.Font, FontStyle.Bold); if (Application.RenderWithVisualStyles) { SelectedItemRenderer = new VisualStyleRenderer("Explorer::ListView", 1, 3); TrackedItemRenderer = new VisualStyleRenderer("Explorer::ListView", 1, 2); } UpdateMonitor = InUpdateMonitor; ActivationListener = new ActivationListener(ActivateEvent); SqlConnectionString = InSqlConnectionString; DataFolder = InDataFolder; bRestoreStateOnLoad = bInRestoreStateOnLoad; OriginalExecutableFileName = InOriginalExecutableFileName; Log = new BoundedLogWriter(Path.Combine(DataFolder, "UnrealGameSync.log")); Log.WriteLine("Application version: {0}", Assembly.GetExecutingAssembly().GetName().Version); Log.WriteLine("Started at {0}", DateTime.Now.ToString()); Settings = new UserSettings(Path.Combine(DataFolder, "UnrealGameSync.ini")); if(!String.IsNullOrEmpty(InProjectFileName)) { Settings.LastProjectFileName = InProjectFileName; } System.Reflection.PropertyInfo DoubleBufferedProperty = typeof(Control).GetProperty("DoubleBuffered", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); DoubleBufferedProperty.SetValue(BuildList, true, null); // force the height of the rows BuildList.SmallImageList = new ImageList(){ ImageSize = new Size(1, 20) }; BuildList_FontChanged(null, null); BuildList.OnScroll += BuildList_OnScroll; Splitter.OnVisibilityChanged += Splitter_OnVisibilityChanged; UpdateTimer = new Timer(); UpdateTimer.Interval = 30; UpdateTimer.Tick += TimerCallback; BuildAfterSyncCheckBox.Checked = Settings.bBuildAfterSync; RunAfterSyncCheckBox.Checked = Settings.bRunAfterSync; OpenSolutionAfterSyncCheckBox.Checked = Settings.bOpenSolutionAfterSync; Splitter.SetLogVisibility(Settings.bShowLogWindow); OptionsContextMenu_AutoResolveConflicts.Checked = Settings.bAutoResolveConflicts; OptionsContextMenu_UseIncrementalBuilds.Checked = Settings.bUseIncrementalBuilds; OptionsContextMenu_SyncPrecompiledEditor.Checked = Settings.bSyncPrecompiledEditor; UpdateCheckedBuildConfig(); UpdateProjectList(); UpdateSyncActionCheckboxes(); }
private ApplicationSettingsWindow(string DefaultServerAndPort, string DefaultUserName, bool bUnstable, string OriginalExecutableFileName, UserSettings Settings, TextWriter Log) { InitializeComponent(); this.OriginalExecutableFileName = OriginalExecutableFileName; this.Settings = Settings; this.Log = Log; Utility.ReadGlobalPerforceSettings(ref InitialServerAndPort, ref InitialUserName, ref InitialDepotPath); bInitialUnstable = bUnstable; InitialAutomationPortNumber = AutomationServer.GetPortNumber(); this.AutomaticallyRunAtStartupCheckBox.Checked = IsAutomaticallyRunAtStartup(); this.KeepInTrayCheckBox.Checked = Settings.bKeepInTray; this.ServerTextBox.Text = InitialServerAndPort; this.ServerTextBox.Select(ServerTextBox.TextLength, 0); this.ServerTextBox.CueBanner = (DefaultServerAndPort == null)? "Default" : String.Format("Default ({0})", DefaultServerAndPort); this.UserNameTextBox.Text = InitialUserName; this.UserNameTextBox.Select(UserNameTextBox.TextLength, 0); this.UserNameTextBox.CueBanner = (DefaultUserName == null)? "Default" : String.Format("Default ({0})", DefaultUserName); this.ParallelSyncThreadsSpinner.Value = Math.Max(Math.Min(Settings.SyncOptions.NumThreads, ParallelSyncThreadsSpinner.Maximum), ParallelSyncThreadsSpinner.Minimum); this.DepotPathTextBox.Text = InitialDepotPath; this.DepotPathTextBox.Select(DepotPathTextBox.TextLength, 0); this.DepotPathTextBox.CueBanner = DeploymentSettings.DefaultDepotPath; this.UseUnstableBuildCheckBox.Checked = bUnstable; if (InitialAutomationPortNumber > 0) { this.EnableAutomationCheckBox.Checked = true; this.AutomationPortTextBox.Enabled = true; this.AutomationPortTextBox.Text = InitialAutomationPortNumber.ToString(); } else { this.EnableAutomationCheckBox.Checked = false; this.AutomationPortTextBox.Enabled = false; this.AutomationPortTextBox.Text = AutomationServer.DefaultPortNumber.ToString(); } }
public static bool?ShowModal(IWin32Window Owner, PerforceConnection DefaultConnection, bool bUnstable, string OriginalExecutableFileName, UserSettings Settings, TextWriter Log) { ApplicationSettingsWindow ApplicationSettings = new ApplicationSettingsWindow(DefaultConnection.ServerAndPort, DefaultConnection.UserName, bUnstable, OriginalExecutableFileName, Settings, Log); if (ApplicationSettings.ShowDialog() == DialogResult.OK) { return(ApplicationSettings.bRestartUnstable); } else { return(null); } }
public SyncFilter(Dictionary <Guid, WorkspaceSyncCategory> InUniqueIdToCategory, string[] InGlobalView, Guid[] InGlobalExcludedCategories, bool bInGlobalProjectOnly, bool bInGlobalIncludeAllProjectsInSolution, string[] InWorkspaceView, Guid[] InWorkspaceIncludedCategories, Guid[] InWorkspaceExcludedCategories, bool?bInWorkspaceProjectOnly, bool?bInWorkspaceIncludeAllProjectsInSolution) { InitializeComponent(); UniqueIdToCategory = InUniqueIdToCategory; GlobalExcludedCategories = InGlobalExcludedCategories; GlobalView = InGlobalView; bGlobalSyncAllProjects = bInGlobalProjectOnly; bGlobalIncludeAllProjectsInSolution = bInGlobalIncludeAllProjectsInSolution; WorkspaceIncludedCategories = InWorkspaceIncludedCategories; WorkspaceExcludedCategories = InWorkspaceExcludedCategories; WorkspaceView = InWorkspaceView; bWorkspaceSyncAllProjects = bInWorkspaceProjectOnly; bWorkspaceIncludeAllProjectsInSolution = bInWorkspaceIncludeAllProjectsInSolution; GlobalControl.SetView(GlobalView); SetExcludedCategories(GlobalControl.CategoriesCheckList, UniqueIdToCategory, GlobalExcludedCategories); GlobalControl.SyncAllProjects.Checked = bGlobalSyncAllProjects; GlobalControl.IncludeAllProjectsInSolution.Checked = bGlobalIncludeAllProjectsInSolution; WorkspaceControl.SetView(WorkspaceView); SetExcludedCategories(WorkspaceControl.CategoriesCheckList, UniqueIdToCategory, UserSettings.GetEffectiveExcludedCategories(GlobalExcludedCategories, WorkspaceIncludedCategories, WorkspaceExcludedCategories)); WorkspaceControl.SyncAllProjects.Checked = bWorkspaceSyncAllProjects ?? bGlobalSyncAllProjects; WorkspaceControl.IncludeAllProjectsInSolution.Checked = bWorkspaceIncludeAllProjectsInSolution ?? bGlobalIncludeAllProjectsInSolution; GlobalControl.CategoriesCheckList.ItemCheck += GlobalControl_CategoriesCheckList_ItemCheck; GlobalControl.SyncAllProjects.CheckStateChanged += GlobalControl_SyncAllProjects_CheckStateChanged; GlobalControl.IncludeAllProjectsInSolution.CheckStateChanged += GlobalControl_IncludeAllProjectsInSolution_CheckStateChanged; }
public ProgramApplicationContext(PerforceConnection DefaultConnection, UpdateMonitor UpdateMonitor, string ApiUrl, string DataFolder, EventWaitHandle ActivateEvent, bool bRestoreState, string UpdateSpawn, string ProjectFileName, bool bUnstable, TimestampLogWriter Log) { this.DefaultConnection = DefaultConnection; this.UpdateMonitor = UpdateMonitor; this.ApiUrl = ApiUrl; this.DataFolder = DataFolder; this.CacheFolder = Path.Combine(DataFolder, "Cache"); this.bRestoreState = bRestoreState; this.UpdateSpawn = UpdateSpawn; this.bUnstable = bUnstable; this.Log = Log; // Create the directories Directory.CreateDirectory(DataFolder); Directory.CreateDirectory(CacheFolder); // Make sure a synchronization context is set. We spawn a bunch of threads (eg. UpdateMonitor) at startup, and need to make sure we can post messages // back to the main thread at any time. if (SynchronizationContext.Current == null) { SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext()); } // Capture the main thread's synchronization context for callbacks MainThreadSynchronizationContext = WindowsFormsSynchronizationContext.Current; // Read the user's settings Settings = new UserSettings(Path.Combine(DataFolder, "UnrealGameSync.ini")); if (!String.IsNullOrEmpty(ProjectFileName)) { string FullProjectFileName = Path.GetFullPath(ProjectFileName); if (!Settings.OpenProjects.Any(x => x.LocalPath != null && String.Compare(x.LocalPath, FullProjectFileName, StringComparison.InvariantCultureIgnoreCase) == 0)) { Settings.OpenProjects.Add(new UserSelectedProjectSettings(null, null, UserSelectedProjectType.Local, null, FullProjectFileName)); } } // Update the settings to the latest version if (Settings.Version < UserSettingsVersion.Latest) { // Clear out the server settings for anything using the default server if (Settings.Version < UserSettingsVersion.DefaultServerSettings) { for (int Idx = 0; Idx < Settings.OpenProjects.Count; Idx++) { Settings.OpenProjects[Idx] = UpgradeSelectedProjectSettings(Settings.OpenProjects[Idx]); } for (int Idx = 0; Idx < Settings.RecentProjects.Count; Idx++) { Settings.RecentProjects[Idx] = UpgradeSelectedProjectSettings(Settings.RecentProjects[Idx]); } } // Save the new settings Settings.Version = UserSettingsVersion.Latest; Settings.Save(); } // Register the update listener UpdateMonitor.OnUpdateAvailable += OnUpdateAvailableCallback; // Create the activation listener ActivationListener = new ActivationListener(ActivateEvent); ActivationListener.Start(); ActivationListener.OnActivate += OnActivationListenerAsyncCallback; // Create the notification menu items NotifyMenu_OpenUnrealGameSync = new ToolStripMenuItem(); NotifyMenu_OpenUnrealGameSync.Name = nameof(NotifyMenu_OpenUnrealGameSync); NotifyMenu_OpenUnrealGameSync.Size = new Size(196, 22); NotifyMenu_OpenUnrealGameSync.Text = "Open UnrealGameSync"; NotifyMenu_OpenUnrealGameSync.Click += new EventHandler(NotifyMenu_OpenUnrealGameSync_Click); NotifyMenu_OpenUnrealGameSync.Font = new Font(NotifyMenu_OpenUnrealGameSync.Font, FontStyle.Bold); NotifyMenu_OpenUnrealGameSync_Separator = new ToolStripSeparator(); NotifyMenu_OpenUnrealGameSync_Separator.Name = nameof(NotifyMenu_OpenUnrealGameSync_Separator); NotifyMenu_OpenUnrealGameSync_Separator.Size = new Size(193, 6); NotifyMenu_SyncNow = new ToolStripMenuItem(); NotifyMenu_SyncNow.Name = nameof(NotifyMenu_SyncNow); NotifyMenu_SyncNow.Size = new Size(196, 22); NotifyMenu_SyncNow.Text = "Sync Now"; NotifyMenu_SyncNow.Click += new EventHandler(NotifyMenu_SyncNow_Click); NotifyMenu_LaunchEditor = new ToolStripMenuItem(); NotifyMenu_LaunchEditor.Name = nameof(NotifyMenu_LaunchEditor); NotifyMenu_LaunchEditor.Size = new Size(196, 22); NotifyMenu_LaunchEditor.Text = "Launch Editor"; NotifyMenu_LaunchEditor.Click += new EventHandler(NotifyMenu_LaunchEditor_Click); NotifyMenu_ExitSeparator = new ToolStripSeparator(); NotifyMenu_ExitSeparator.Name = nameof(NotifyMenu_ExitSeparator); NotifyMenu_ExitSeparator.Size = new Size(193, 6); NotifyMenu_Exit = new ToolStripMenuItem(); NotifyMenu_Exit.Name = nameof(NotifyMenu_Exit); NotifyMenu_Exit.Size = new Size(196, 22); NotifyMenu_Exit.Text = "Exit"; NotifyMenu_Exit.Click += new EventHandler(NotifyMenu_Exit_Click); // Create the notification menu NotifyMenu = new ContextMenuStrip(Components); NotifyMenu.Name = nameof(NotifyMenu); NotifyMenu.Size = new System.Drawing.Size(197, 104); NotifyMenu.SuspendLayout(); NotifyMenu.Items.Add(NotifyMenu_OpenUnrealGameSync); NotifyMenu.Items.Add(NotifyMenu_OpenUnrealGameSync_Separator); NotifyMenu.Items.Add(NotifyMenu_SyncNow); NotifyMenu.Items.Add(NotifyMenu_LaunchEditor); NotifyMenu.Items.Add(NotifyMenu_ExitSeparator); NotifyMenu.Items.Add(NotifyMenu_Exit); NotifyMenu.ResumeLayout(false); // Create the notification icon NotifyIcon = new NotifyIcon(Components); NotifyIcon.ContextMenuStrip = NotifyMenu; NotifyIcon.Icon = Properties.Resources.Icon; NotifyIcon.Text = "UnrealGameSync"; NotifyIcon.Visible = true; NotifyIcon.DoubleClick += new EventHandler(NotifyIcon_DoubleClick); NotifyIcon.MouseDown += new MouseEventHandler(NotifyIcon_MouseDown); // Find the initial list of projects to attempt to reopen List <DetectProjectSettingsTask> Tasks = new List <DetectProjectSettingsTask>(); foreach (UserSelectedProjectSettings OpenProject in Settings.OpenProjects) { BufferedTextWriter StartupLog = new BufferedTextWriter(); StartupLog.WriteLine("Detecting settings for {0}", OpenProject); StartupLogs.Add(StartupLog); Tasks.Add(new DetectProjectSettingsTask(OpenProject, DataFolder, CacheFolder, new TimestampLogWriter(new PrefixedTextWriter(" ", StartupLog)))); } // Detect settings for the project we want to open DetectStartupProjectSettingsTask = new DetectMultipleProjectSettingsTask(DefaultConnection, Tasks); DetectStartupProjectSettingsWindow = new ModalTaskWindow(DetectStartupProjectSettingsTask, "Opening Projects", "Opening projects, please wait...", FormStartPosition.CenterScreen); if (bRestoreState) { if (Settings.bWindowVisible) { DetectStartupProjectSettingsWindow.Show(); } } else { DetectStartupProjectSettingsWindow.Show(); DetectStartupProjectSettingsWindow.Activate(); } DetectStartupProjectSettingsWindow.Complete += OnDetectStartupProjectsComplete; }