void OnGUI() { if (!m_Initialized) { InitializeStyles(); InitializePositionAndSize(); m_Initialized = true; } EditorGUILayout.BeginVertical(BorderStyle); DrawContent(); GUILayout.FlexibleSpace(); using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar, GUILayout.ExpandWidth(true))) { DrawStatusBar(); } EditorGUILayout.EndVertical(); if (m_ConflictsScanState == ConflictsScanState.Scanning && Event.current.type == EventType.Repaint) { if (!m_ConflictsScanThread.IsAlive) { m_ConflictsScanState = ConflictsScanState.Scanned; } Repaint(); } }
private void InvaldateConflictsScan() { m_ConflictsScanState = ConflictsScanState.None; m_ConflictsScanResults = new ConflictsScanResult[0]; if (m_ConflictsScanThread != null && m_ConflictsScanThread.IsAlive) { m_ConflictsScanThread.Abort(); m_ConflictsScanThread = null; } }
private void StartConflictsScan() { if (Database.IsUpdating || !Database.IsReady) { m_ConflictsScanState = ConflictsScanState.WaitingForBranchesDatabase; return; } if (Database.LastError != ListOperationResult.Success) { m_ConflictsScanState = ConflictsScanState.Error; return; } if (m_TargetAsset == null || Database.BranchProjects.Count == 0) { m_ConflictsScanState = ConflictsScanState.Error; return; } if (m_ConflictsScanState == ConflictsScanState.Scanning) { return; } if (m_ConflictsScanThread != null && m_ConflictsScanThread.IsAlive) { throw new System.Exception("Starting conflicts scan while another one is pending?"); } m_ConflictsScanState = ConflictsScanState.Scanning; m_ConflictsScanResults = Database.BranchProjects .Select(bp => new ConflictsScanResult() { UnityURL = bp.UnityProjectURL, State = ConflictState.Pending }) .ToArray(); m_ConflictsScanThread = new System.Threading.Thread(GatherConflicts); // Thread will update the array by ref. m_ConflictsScanThread.Start(new ConflictsScanJobData() { TargetAssetPath = AssetDatabase.GetAssetPath(m_TargetAsset), LimitType = m_ConflictsScanLimitType, LimitParam = m_ConflictsScanLimitParam, Reults = m_ConflictsScanResults, }); }