private void BindToggle(VisualElement e, int i)
        {
            var t = (Toggle)e;

            if (m_PrivilegeList == null)
            {
                return;
            }
            t.label   = m_PrivilegeList[i].name;
            t.tooltip = m_PrivilegeList[i].description;
            if (m_Settings != null)
            {
                SerializedProperty prop;
                bool forced = ShouldForce(t, m_PrivilegeList[i]);
                if (TryGetPropertyValue(t.label, out prop))
                {
                    t.BindProperty(prop);
                    if (ShouldFilter(t, m_PrivilegeList[i]))
                    {
                        m_QueuedUpdates.Enqueue(() => {
                            t.SetEnabled(false);
                            t.value = false;
                        });
                    }
                    else if (forced)
                    {
                        m_QueuedUpdates.Enqueue(() => {
                            t.SetEnabled(false);
                            t.value = true;
                        });
                    }
                }
                else
                {
                    // create a new serialized value.
                    var so = m_Settings.ToSerializedObject();
                    so.UpdateIfRequiredOrScript();
                    var privs = so.FindProperty("m_Privileges");
                    privs.InsertArrayElementAtIndex(privs.arraySize);
                    var el = privs.GetArrayElementAtIndex(privs.arraySize - 1);
                    el.FindPropertyRelative("name").stringValue = t.label;
                    var enabledProp = el.FindPropertyRelative("enabled");
                    enabledProp.boolValue = false;
                    t.BindProperty(enabledProp);
                    so.ApplyModifiedProperties();
                }
            }
        }
        private void UpdateSettings()
        {
            if (m_SettingsAsset == null)
            {
                this.Unbind();
                m_SerializedSettings = null;
                return;
            }
            else
            {
                m_SerializedSettings = m_SettingsAsset.ToSerializedObject();
            }
            {
                m_SerializedSettings.UpdateIfRequiredOrScript();
                // automatically bump the platform API the lowest possible version.
                var prop = m_SerializedSettings.FindProperty("m_MinimumAPILevel");
                prop.intValue = PlatformLevelSelector.EnsureValidValue(prop.intValue);
                m_SerializedSettings.ApplyModifiedProperties();
            }
            this.Bind(serializedSettings);

            this.Query <PrivilegeSection>().ForEach(ps => {
                ps.filterCallback = FilterPrivilege;
                ps.forceCallback  = ForcePrivilege;
                ps.settings       = m_SettingsAsset;
            });
        }
示例#3
0
        public static void RenderManifest(MagicLeapManifestSettings settings)
        {
            var serializedObject = settings.ToSerializedObject();

            serializedObject.UpdateIfRequiredOrScript();
            var id         = GUIUtility.GetControlID(FocusType.Passive);
            var state      = (RenderState)GUIUtility.GetStateObject(typeof(RenderState), id);
            var missingSdk = !SDKUtility.sdkAvailable;

            if (missingSdk)
            {
                EditorGUILayout.HelpBox(Messages.kCannotLocateSDK, MessageType.Error, true);
            }
            using (new EditorGUI.DisabledScope(missingSdk))
            {
                var apiLevel = serializedObject.FindProperty("m_MinimumAPILevel");
                apiLevel.intValue = PlatformLevelSelector.SelectorGUI(apiLevel.intValue);
                EditorGUILayout.LabelField("Privileges", EditorStyles.boldLabel);
                var priv_groups = serializedObject.FindProperty("m_PrivilegeGroups");
                for (int i = 0; i < priv_groups.arraySize; i++)
                {
                    var group      = priv_groups.GetArrayElementAtIndex(i);
                    var group_name = group.FindPropertyRelative("m_Name").stringValue;
                    if (!state.GroupFoldoutExpanded.TryGetValue(group_name, out var _))
                    {
                        state.GroupFoldoutExpanded[group_name] = false;
                    }
                    state.GroupFoldoutExpanded[group_name] = EditorGUILayout.BeginFoldoutHeaderGroup(state.GroupFoldoutExpanded[group_name], group_name);
                    if (state.GroupFoldoutExpanded[group_name])
                    {
                        var privs = group.FindPropertyRelative("m_Privileges");
                        for (int j = 0; j < privs.arraySize; j++)
                        {
                            var priv    = privs.GetArrayElementAtIndex(j);
                            var enabled = priv.FindPropertyRelative("m_Enabled");
                            var name    = priv.FindPropertyRelative("m_Name").stringValue;

                            var disabled = ShouldDisable(apiLevel.intValue, priv);
                            var value    = UpdateValue(name, enabled.boolValue, disabled);
                            using (new EditorGUI.DisabledScope(disabled))
                                using (new EditorGUI.IndentLevelScope())
                                    enabled.boolValue = EditorGUILayout.ToggleLeft(name, value);
                        }
                    }
                    EditorGUILayout.EndFoldoutHeaderGroup();
                }
                serializedObject.ApplyModifiedProperties();
                GUILayout.FlexibleSpace();
                EditorGUILayout.HelpBox(Messages.kShouldSynchronize, MessageType.Info, true);
                var sdkUpdateRequested = GUILayout.Button("Synchronize");
                if (sdkUpdateRequested)
                {
                    state.IsPerformingSDKUpdate  = true;
                    EditorApplication.delayCall += () => {
                        settings.RebuildPrivilegeGroups(PrivilegeParser.ParsePrivilegesFromHeader(Path.Combine(SDKUtility.sdkPath, PrivilegeParser.kPrivilegeHeaderPath)));
                        state.IsPerformingSDKUpdate = false;
                    };
                }
            }
        }