void ApplySelection()
        {
            var analytic = ProjectAuditorAnalytics.BeginAnalytic();

            m_ProjectAuditorWindow.SetAreaSelection(m_AreaTable.GetTreeViewSelection());

            var payload = new Dictionary <string, string>();

            payload["areas"] = m_ProjectAuditorWindow.GetSelectedAreasSummary();
            ProjectAuditorAnalytics.SendUIButtonEventWithKeyValues(ProjectAuditorAnalytics.UIButton.AreaSelectApply, analytic, payload);
        }
        void ApplySelection()
        {
            var analytic  = ProjectAuditorAnalytics.BeginAnalytic();
            var selection = m_MultiSelectionTable.GetTreeViewSelection();

            m_ProjectAuditorWindow.SetAssemblySelection(selection);

            var payload = new Dictionary <string, string>();

            string[] selectedAsmNames = selection.GetSelectedStrings(m_Names, false);

            if (selectedAsmNames == null || selectedAsmNames.Length == 0)
            {
                payload["numSelected"]        = "0";
                payload["numUnityAssemblies"] = "0";
            }
            else
            {
                payload["numSelected"]        = selectedAsmNames.Length.ToString();
                payload["numUnityAssemblies"] = selectedAsmNames.Where(name => name.Contains("Unity")).Count().ToString();
            }

            ProjectAuditorAnalytics.SendUIButtonEventWithKeyValues(ProjectAuditorAnalytics.UIButton.AssemblySelectApply, analytic, payload);
        }
        private void DrawFilters()
        {
            if (!IsAnalysisValid())
            {
                return;
            }

            EditorGUILayout.BeginVertical(
                GUI.skin.box /*, GUILayout.Width(LayoutSize.ToolbarWidth), GUILayout.ExpandWidth(true)*/);

            {
                EditorGUILayout.BeginHorizontal();

                var activeModeIndex = GUILayout.Toolbar(m_ActiveModeIndex, m_ModeNames,
                                                        GUILayout.MaxWidth(LayoutSize.ModeTabWidth) /*, GUILayout.ExpandWidth(true)*/);

                EditorGUILayout.EndHorizontal();

                DrawAssemblyFilter();
                DrawAreaFilter();

                EditorGUI.BeginChangeCheck();

                var searchRect =
                    GUILayoutUtility.GetRect(1, 1, 18, 18, GUILayout.ExpandWidth(true), GUILayout.Width(200));
                EditorGUILayout.BeginHorizontal();

                if (m_SearchField == null)
                {
                    m_SearchField = new SearchField();
                }

                m_SearchText = m_SearchField.OnGUI(searchRect, m_SearchText);

                m_ActiveIssueTable.searchString = m_SearchText;

                EditorGUILayout.EndHorizontal();

                var shouldRefresh = false;

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Selected :", GUILayout.ExpandWidth(true), GUILayout.Width(80));

                if (GUILayout.Button(Styles.MuteButton, GUILayout.ExpandWidth(true), GUILayout.Width(100)))
                {
                    var analytic      = ProjectAuditorAnalytics.BeginAnalytic();
                    var selectedItems = m_ActiveIssueTable.GetSelectedItems();
                    foreach (var item in selectedItems)
                    {
                        SetRuleForItem(item, Rule.Action.None);
                    }

                    if (!m_ProjectAuditor.config.DisplayMutedIssues)
                    {
                        m_ActiveIssueTable.SetSelection(new List <int>());
                    }
                    ProjectAuditorAnalytics.SendUIButtonEventWithSelectionSummary(ProjectAuditorAnalytics.UIButton.Mute, analytic, m_ActiveIssueTable.GetSelectedItems());
                }

                if (GUILayout.Button(Styles.UnmuteButton, GUILayout.ExpandWidth(true), GUILayout.Width(100)))
                {
                    var analytic      = ProjectAuditorAnalytics.BeginAnalytic();
                    var selectedItems = m_ActiveIssueTable.GetSelectedItems();
                    foreach (var item in selectedItems)
                    {
                        ClearRulesForItem(item);
                    }
                    ProjectAuditorAnalytics.SendUIButtonEventWithSelectionSummary(ProjectAuditorAnalytics.UIButton.Unmute, analytic, m_ActiveIssueTable.GetSelectedItems());
                }

                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Show :", GUILayout.ExpandWidth(true), GUILayout.Width(80));
                GUI.enabled = m_ActiveAnalysisView.desc.showCritical;

                bool wasShowingCritical = m_ProjectAuditor.config.DisplayOnlyCriticalIssues;
                m_ProjectAuditor.config.DisplayOnlyCriticalIssues = EditorGUILayout.ToggleLeft("Only Critical Issues",
                                                                                               m_ProjectAuditor.config.DisplayOnlyCriticalIssues, GUILayout.Width(160));
                GUI.enabled = true;

                if (wasShowingCritical != m_ProjectAuditor.config.DisplayOnlyCriticalIssues)
                {
                    var analytic = ProjectAuditorAnalytics.BeginAnalytic();
                    var payload  = new Dictionary <string, string>();
                    payload["selected"] = m_ActiveAnalysisView.desc.showCritical ? "true" : "false";
                    ProjectAuditorAnalytics.SendUIButtonEvent(ProjectAuditorAnalytics.UIButton.OnlyCriticalIssues, analytic);
                }

                bool wasDisplayingMuted = m_ProjectAuditor.config.DisplayMutedIssues;
                m_ProjectAuditor.config.DisplayMutedIssues = EditorGUILayout.ToggleLeft("Muted Issues",
                                                                                        m_ProjectAuditor.config.DisplayMutedIssues, GUILayout.Width(127));

                if (wasDisplayingMuted != m_ProjectAuditor.config.DisplayMutedIssues)
                {
                    var analytic = ProjectAuditorAnalytics.BeginAnalytic();
                    var payload  = new Dictionary <string, string>();
                    payload["selected"] = m_ProjectAuditor.config.DisplayMutedIssues ? "true" : "false";
                    ProjectAuditorAnalytics.SendUIButtonEventWithKeyValues(ProjectAuditorAnalytics.UIButton.ShowMuted, analytic, payload);
                }

                EditorGUILayout.EndHorizontal();

                if (EditorGUI.EndChangeCheck())
                {
                    shouldRefresh = true;
                }

                bool activeModeChanged = (m_ActiveModeIndex != activeModeIndex);
                if (activeModeChanged)
                {
                    var analytic = ProjectAuditorAnalytics.BeginAnalytic();
                    m_ActiveModeIndex = activeModeIndex;

                    RefreshDisplay();

                    if (m_ActiveModeIndex == (int)IssueCategory.ApiCalls)
                    {
                        ProjectAuditorAnalytics.SendUIButtonEvent(ProjectAuditorAnalytics.UIButton.ApiCalls, analytic);
                    }
                    else if (m_ActiveModeIndex == (int)IssueCategory.ProjectSettings)
                    {
                        ProjectAuditorAnalytics.SendUIButtonEvent(ProjectAuditorAnalytics.UIButton.ProjectSettings, analytic);
                    }
                    else
                    {
                        Debug.LogWarning("Unrecognised active mode: couldn't sent analytics event");
                    }
                }
                else if (shouldRefresh || m_ShouldRefresh || m_AnalysisState == AnalysisState.Completed)
                {
                    RefreshDisplay();
                    m_ShouldRefresh = false;
                }
            }
            EditorGUILayout.EndVertical();
        }
        void DrawFilters()
        {
            EditorGUILayout.BeginVertical(GUI.skin.box, GUILayout.ExpandWidth(true));

            m_Preferences.filters = BoldFoldout(m_Preferences.filters, Styles.FiltersFoldout);
            if (m_Preferences.filters)
            {
                EditorGUI.indentLevel++;

                DrawAssemblyFilter();
                DrawAreaFilter();

                EditorGUI.BeginChangeCheck();

                EditorGUILayout.BeginHorizontal();

                EditorGUILayout.LabelField(Styles.TextSearchLabel, GUILayout.Width(80));

                m_TextFilter.searchText = EditorGUILayout.DelayedTextField(m_TextFilter.searchText, GUILayout.Width(180));
                activeAnalysisView.table.searchString = m_TextFilter.searchText;

                m_TextFilter.matchCase = EditorGUILayout.ToggleLeft(Styles.TextSearchCaseSensitive, m_TextFilter.matchCase, GUILayout.Width(160));

                if (m_DeveloperMode)
                {
                    // this is only available in developer mode because it is still too slow at the moment
                    GUI.enabled = activeAnalysisView.desc.showDependencyView;
                    m_TextFilter.searchDependencies = EditorGUILayout.ToggleLeft("Call Tree (slow)",
                                                                                 m_TextFilter.searchDependencies, GUILayout.Width(160));
                    GUI.enabled = true;
                }

                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Show :", GUILayout.ExpandWidth(true), GUILayout.Width(80));
                GUI.enabled = activeAnalysisView.desc.showCritical;

                bool wasShowingCritical = m_Preferences.onlyCriticalIssues;
                m_Preferences.onlyCriticalIssues = EditorGUILayout.ToggleLeft("Only Critical Issues",
                                                                              m_Preferences.onlyCriticalIssues, GUILayout.Width(160));
                GUI.enabled = true;

                if (wasShowingCritical != m_Preferences.onlyCriticalIssues)
                {
                    var analytic = ProjectAuditorAnalytics.BeginAnalytic();
                    var payload  = new Dictionary <string, string>();
                    payload["selected"] = activeAnalysisView.desc.showCritical ? "true" : "false";
                    ProjectAuditorAnalytics.SendUIButtonEvent(ProjectAuditorAnalytics.UIButton.OnlyCriticalIssues,
                                                              analytic);
                }

                bool wasDisplayingMuted = m_Preferences.mutedIssues;
                m_Preferences.mutedIssues = EditorGUILayout.ToggleLeft("Muted Issues",
                                                                       m_Preferences.mutedIssues, GUILayout.Width(127));

                if (wasDisplayingMuted != m_Preferences.mutedIssues)
                {
                    var analytic = ProjectAuditorAnalytics.BeginAnalytic();
                    var payload  = new Dictionary <string, string>();
                    payload["selected"] = m_Preferences.mutedIssues ? "true" : "false";
                    ProjectAuditorAnalytics.SendUIButtonEventWithKeyValues(ProjectAuditorAnalytics.UIButton.ShowMuted,
                                                                           analytic, payload);
                }

                EditorGUILayout.EndHorizontal();

                if (EditorGUI.EndChangeCheck())
                {
                    m_ShouldRefresh = true;
                }

                EditorGUI.indentLevel--;
            }
            EditorGUILayout.EndVertical();
        }