A game about forced loneliness, made by TACStudios
1using System;
2using System.Reflection;
3
4using UnityEditor;
5
6using Codice.Client.Common.Threading;
7using Unity.PlasticSCM.Editor.UI;
8
9namespace Unity.PlasticSCM.Editor.Settings
10{
11 internal static class OpenPlasticProjectSettings
12 {
13 internal static void ByDefault()
14 {
15 PlasticProjectSettingsProvider provider = OpenInPlasticProjectSettings();
16
17 if (provider == null)
18 return;
19
20 provider.OpenAllFoldouts();
21 }
22
23 internal static void InDiffAndMergeFoldout()
24 {
25 PlasticProjectSettingsProvider provider = OpenInPlasticProjectSettings();
26
27 if (provider == null)
28 return;
29
30 provider.OpenDiffAndMergeFoldout();
31 }
32
33 internal static void InShelveAndSwitchFoldout()
34 {
35 PlasticProjectSettingsProvider provider = OpenInPlasticProjectSettings();
36
37 if (provider == null)
38 return;
39
40 provider.OpenShelveAndSwitchFoldout();
41 }
42
43 internal static void InOtherFoldout()
44 {
45 PlasticProjectSettingsProvider provider = OpenInPlasticProjectSettings();
46
47 if (provider == null)
48 return;
49
50 provider.OpenOtherFoldout();
51 }
52
53 internal static PlasticProjectSettingsProvider OpenInPlasticProjectSettings()
54 {
55 EditorWindow settingsWindow = OpenProjectSettingsWithPlasticSelected();
56 return GetPlasticProvider(settingsWindow);
57 }
58
59 internal static EditorWindow OpenProjectSettingsWithPlasticSelected()
60 {
61 return SettingsService.OpenProjectSettings(
62 UnityConstants.PROJECT_SETTINGS_TAB_PATH);
63 }
64
65 internal static PlasticProjectSettingsProvider GetPlasticProvider(
66 EditorWindow settingsWindow)
67 {
68 try
69 {
70 /* The following code must be compiled only for editor versions that allow our code
71 to access internal code from the editor, otherwise the ProjectSettingsWindow is not
72 accessible and the compilation fails.
73 We don't know yet the version number that allows us to access this code, so for the
74 moment the code is commented
75
76#if UNITY_6000_0_OR_NEWER
77 ProjectSettingsWindow projectSettingsWindow = settingsWindow as ProjectSettingsWindow;
78 return projectSettingsWindow.GetCurrentProvider() as PlasticProjectSettingsProvider;
79#else */
80
81 MethodInfo getCurrentProviderMethod = settingsWindow.GetType().GetMethod(
82 "GetCurrentProvider",
83 BindingFlags.Instance | BindingFlags.NonPublic);
84
85 return getCurrentProviderMethod.Invoke(
86 settingsWindow, null) as PlasticProjectSettingsProvider;
87//#endif
88 }
89 catch (Exception ex)
90 {
91 ExceptionsHandler.LogException("OpenPlasticProjectSettingsProvider", ex);
92 return null;
93 }
94 }
95 }
96}