/// <summary>
        /// Creates the appropriate editor from the context. If the return value is null, another
        /// <see cref="IEditorStrategy"/> will be asked. The returned value should be fully configured
        /// and bound.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <returns>
        /// A control that will be used for editing the field, or null if this strategy cannot be
        /// used for this field.
        /// </returns>
        public object CreateEditor(FieldContext context)
        {
            if (!context.PropertyDescriptor.PropertyType.IsEnum)
            {
                return(null);
            }

            var enumType = context.PropertyDescriptor.PropertyType;
            var items    = new List <EnumOption>();

            foreach (var value in Enum.GetValues(enumType))
            {
                var displayName = enumType.GetField(value.ToString()).GetCustomAttributes(typeof(EnumDisplayNameAttribute), true).OfType <EnumDisplayNameAttribute>().FirstOrDefault();
                var item        = new EnumOption();
                item.DisplayName = displayName == null?value.ToString() : displayName.DisplayName;

                item.Value = value;
                items.Add(item);
            }

            var comboBox = new ComboBox();

            comboBox.SelectedValuePath = "Value";
            comboBox.DisplayMemberPath = "DisplayName";
            comboBox.ItemsSource       = items;
            BindingOperations.SetBinding(comboBox, Selector.SelectedValueProperty, context.Binding);
            return(comboBox);
        }
        public override GameObject GetUIComponent()
        {
            // Find largest option to size the label appropriately, using em width this time!
            EnumOption firstOption = null;
            int        maxLen      = 0;

            foreach (var option in options)
            {
                int len = option.Title?.Trim()?.Length ?? 0;
                // Kerning each string is slow, so estimate based on em width instead
                if (firstOption == null && len > 0)
                {
                    firstOption = option;
                }
                if (len > maxLen)
                {
                    maxLen = len;
                }
            }
            comboBox = new PComboBox <EnumOption>("Select")
            {
                BackColor = PUITuning.Colors.ButtonPinkStyle, InitialItem = firstOption,
                Content   = options, EntryColor = PUITuning.Colors.ButtonBlueStyle,
                TextStyle = PUITuning.Fonts.TextLightStyle, OnOptionSelected = UpdateValue,
            }.SetMinWidthInCharacters(maxLen).Build();
            Update();
            return(comboBox);
        }
        void BuildQualityLevelOption()
        {
            var names   = QualitySettings.names;
            var options = new EnumOption[names.Length];

            for (var i = 0; i < names.Length; i++)
            {
                options[i] = new EnumOption {
                    Value       = i,
                    DisplayName = names[i]
                };
            }

            Array.Reverse(options);

            // Create a fake enum option
            QualityLevelOption.Type         = OptionType.Enum;
            QualityLevelOption.EnumOptions  = options;
            QualityLevelOption.MinValue     = 0;
            QualityLevelOption.MaxValue     = Mathf.Max(0, names.Length - 1);
            QualityLevelOption.DefaultValue = QualitySettings.GetQualityLevel();

            QualitySettings.SetQualityLevel(QualityLevelOption.Get <int>());
            QualityLevelOption.OnValueChanged.AddListener(() => {
                QualitySettings.SetQualityLevel(QualityLevelOption.Get <int>());
            });
        }
        public override void Seed(string input, bool PositiveIndicator)
        {
            if (!this.valuesDict.ContainsKey(input))
            {
                EnumOption option = new EnumOption()
                {
                    Display    = input,
                    Instances  = 1,
                    Indicators = PositiveIndicator ? 1 : 0,
                    Index      = this.valuesDict.Count + 1
                };

                lock (this.valuesDict)
                {
                    this.valuesDict.Add(input, option);
                }
            }
            else
            {
                EnumOption option = this.valuesDict[input];

                if (PositiveIndicator)
                {
                    option.Indicators++;
                }

                option.Instances++;
            }
        }
Exemple #5
0
        public override void Interpret(EnumDescContext context)
        {
            if (context == null || string.IsNullOrWhiteSpace(context.EnumHtml))
            {
                return;
            }

            //枚举成员的匹配正则式
            Regex regex = new Regex(@"<tr>[\r\n\s]*<td>(?<alias>((?!</td>).|\n)*)</td>[\r\n\s]*<td>(?<name>((?!</td>).|\n)*)</td>[\r\n\s]*<td>(?<desc>((?!</td>).|\n)*)</td>[\r\n\s]*</tr>", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled);

            MatchCollection mc = regex.Matches(context.EnumHtml);

            List <EnumOption> optionList = new List <EnumOption>();

            //当前2的次幂数
            int index = 0;

            //遍历枚举成员处理
            foreach (Match m in mc)
            {
                EnumOption option = new EnumOption();

                option.Name        = m.Groups["name"].Value.Trim();
                option.Alias       = m.Groups["alias"].Value.Trim();
                option.Description = m.Groups["desc"].Value.Trim();
                option.Value       = (int)Math.Pow(2, index++);

                optionList.Add(option);
            }

            context.EnumDesc.Options = optionList;
        }
Exemple #6
0
                public bool Equals(EnumOption other)
                {
                    if (ReferenceEquals(other, null))
                    {
                        return(false);
                    }

                    if (ReferenceEquals(other, this))
                    {
                        return(true);
                    }

                    if (other.Name != Name)
                    {
                        return(false);
                    }

                    if (other.Value != Value)
                    {
                        return(false);
                    }

                    if (other.IsDefaultValue != IsDefaultValue)
                    {
                        return(false);
                    }

                    return(true);
                }
        public void Test1()
        {
            var a0 = new EnumOption(typeof(ETest), nameof(ETest.Default));
            var a1 = new EnumOption(typeof(ETest), nameof(ETest.Default));

            Assert.Equal(a0, a1);
        }
 /// <summary>
 /// Triggered when the value chosen from the combo box has been changed.
 /// </summary>
 /// <param name="selected">The value selected by the user.</param>
 private void UpdateValue(GameObject _, EnumOption selected)
 {
     if (selected != null)
     {
         chosen = selected;
     }
 }
Exemple #9
0
 private static SelectListItem SelectorItemForEnum(EnumOption e)
 {
     if (string.IsNullOrWhiteSpace(e.Description))
     {
         return(new SelectListItem(e.Name, e.Name));
     }
     return(new SelectListItem(e.Name + " - " + e.Description, e.Name));
 }
Exemple #10
0
        public void get_set_passtrough()
        {
            CommandOption opt = new CommandOption(template, optionType);

            EnumOption <TestEnum> enumOpt =
                new EnumOption <TestEnum>(opt, valueMap, throwOnInvalidOption);


            const string templ = "-h | --hello | -!";

            enumOpt.Template = templ;
            Assert.AreEqual(templ, enumOpt.Template);
            Assert.AreEqual(templ, opt.Template);

            const string shortName = "h";

            enumOpt.ShortName = shortName;
            Assert.AreEqual(shortName, enumOpt.ShortName);
            Assert.AreEqual(shortName, opt.ShortName);

            const string longName = "hello";

            enumOpt.LongName = longName;
            Assert.AreEqual(longName, enumOpt.LongName);
            Assert.AreEqual(longName, opt.LongName);

            const string symbolName = "^";

            enumOpt.SymbolName = symbolName;
            Assert.AreEqual(symbolName, enumOpt.SymbolName);
            Assert.AreEqual(symbolName, opt.SymbolName);

            const string valueName = "val";

            enumOpt.ValueName = valueName;
            Assert.AreEqual(valueName, enumOpt.ValueName);
            Assert.AreEqual(valueName, opt.ValueName);

            const string description = "Hi.";

            enumOpt.Description = description;
            Assert.AreEqual(description, enumOpt.Description);
            Assert.AreEqual(description, opt.Description);

            const bool showInHelpText = false;

            enumOpt.ShowInHelpText = showInHelpText;
            Assert.AreEqual(showInHelpText, enumOpt.ShowInHelpText);
            Assert.AreEqual(showInHelpText, opt.ShowInHelpText);

            const bool inherited = true;

            enumOpt.Inherited = inherited;
            Assert.AreEqual(inherited, enumOpt.Inherited);
            Assert.AreEqual(inherited, opt.Inherited);
        }
Exemple #11
0
        public void Parses_single_value()
        {
            CommandOption opt = new CommandOption(template, optionType);

            EnumOption <TestEnum> enumOpt =
                new EnumOption <TestEnum>(opt, valueMap, throwOnInvalidOption);

            opt.TryParse("abc");

            Assert.AreEqual(TestEnum.abc, enumOpt.Value);
        }
Exemple #12
0
        public void Ignores_invalid_option()
        {
            CommandOption opt = new CommandOption(template, optionType);

            EnumOption <TestEnum> enumOpt =
                new EnumOption <TestEnum>(opt, valueMap, false);

            opt.TryParse("whut");

            Assert.IsTrue(!enumOpt.Values.Any());
        }
Exemple #13
0
        public void Throws_if_invalid_option()
        {
            CommandOption opt = new CommandOption(template, optionType);

            EnumOption <TestEnum> enumOpt =
                new EnumOption <TestEnum>(opt, valueMap, true);

            opt.TryParse("whut");

            Assert.ThrowsException <ArgumentException>(() => enumOpt.Value);
        }
        public void Test2()
        {
            var a0 = new EnumOption(typeof(ETest), nameof(ETest.Default));
            var b0 = new EnumOption <ETest, int>(nameof(ETest.Default));
            var b1 = new EnumOption <ETest, int>(16);

            Assert.Equal(a0, b0);
            Assert.Equal(b0, a0);
            Assert.Equal(b0, b1);
            Assert.Throws <InvalidOperationException>(() => new EnumOption <ETest, byte>(16));
        }
Exemple #15
0
        public void InitialValueShouldBeSet()
        {
            // Arrange
            var expected = TestEnum.Two;
            var sut      = new EnumOption <TestEnum>(expected, string.Empty, string.Empty);

            // Act
            var acutal = sut.Value;

            // Assert
            Assert.Equal(expected, acutal);
        }
Exemple #16
0
        public void SettingValueShouldNotChangeCurrentValueWhenNewValueIsInvalid()
        {
            // Arrange
            var sut = new EnumOption <TestEnum>(TestEnum.None, string.Empty, string.Empty);

            // Act
            sut.Value = (TestEnum)12345;

            // Assert
            var actual = sut.Value;

            Assert.Equal(TestEnum.None, actual);
        }
Exemple #17
0
        public void Parses_values()
        {
            CommandOption opt = new CommandOption(template, optionType);

            EnumOption <TestEnum> enumOpt =
                new EnumOption <TestEnum>(opt, valueMap, throwOnInvalidOption);

            opt.TryParse("abc");
            opt.TryParse("def");

            Assert.IsTrue(enumOpt.Values.Contains(TestEnum.abc));
            Assert.IsTrue(enumOpt.Values.Contains(TestEnum.def));
        }
Exemple #18
0
        public static ConfigSetting LoadSetting(XmlElement xmlElement)
        {
            var configSetting = new ConfigSetting();
            var type          = GetAttribute(xmlElement, "type", null);

            if (type == "enum")
            {
                var enumSetting          = new EnumSetting();
                var configOptionElements = xmlElement.SelectNodes("./ConfigOption").OfType <XmlElement>();
                foreach (var configOptionElement in configOptionElements)
                {
                    var enumOption = new EnumOption();
                    enumOption.Name  = GetAttribute(configOptionElement, "name", null);
                    enumOption.Title = GetAttribute(configOptionElement, "title", null);
                    enumOption.Desc  = GetAttribute(configOptionElement, "desc", null);
                    enumSetting.Options.Add(enumOption);
                }

                configSetting = enumSetting;
            }

            if (type == "int")
            {
                var intSetting = new IntSetting();
                intSetting.Min = GetAttribute(xmlElement, "min");
                intSetting.Max = GetAttribute(xmlElement, "max");
                configSetting  = intSetting;
            }

            if (type == "certificate")
            {
                var certificateSetting = new CertificateSetting();
                certificateSetting.IsSsl             = GetBoolAttribute(xmlElement, "isSsl") ?? false;
                certificateSetting.CanGenerate       = GetBoolAttribute(xmlElement, "canGenerate") ?? true;
                certificateSetting.CanExport         = GetBoolAttribute(xmlElement, "canExport") ?? true;
                certificateSetting.CanImport         = GetBoolAttribute(xmlElement, "canImport") ?? true;
                certificateSetting.CanSelect         = GetBoolAttribute(xmlElement, "canSelect") ?? false;
                certificateSetting.CanRemove         = GetBoolAttribute(xmlElement, "canRemove") ?? false;
                certificateSetting.RequirePrivateKey = GetBoolAttribute(xmlElement, "requirePrivateKey") ?? true;
                configSetting = certificateSetting;
            }

            configSetting.Name     = GetAttribute(xmlElement, "name", null);
            configSetting.Default  = GetAttribute(xmlElement, "default", null);
            configSetting.Enabled  = GetAttribute(xmlElement, "enabled", null);
            configSetting.Required = Convert.ToBoolean(GetAttribute(xmlElement, "required", "false"));
            configSetting.Title    = GetAttribute(xmlElement, "title", null);
            configSetting.Type     = GetAttribute(xmlElement, "type", null);
            configSetting.XPath    = GetAttribute(xmlElement, "xpath", null);
            return(configSetting);
        }
Exemple #19
0
        public void AvailableValuesShouldContainAllEnumMembers()
        {
            // Arrange
            var sut = new EnumOption <TestEnum>(TestEnum.None, string.Empty, string.Empty);

            // Act
            var actual = sut.AvailableValues.ToList();

            // Assert
            Assert.Collection(actual,
                              it => Assert.Equal(TestEnum.None, it.Value), it => Assert.Equal(TestEnum.One, it.Value),
                              it => Assert.Equal(TestEnum.Two, it.Value),
                              it => Assert.Equal(TestEnum.Three, it.Value));
        }
Exemple #20
0
        public void ParseEnumInArguments(string[] args, bool hasErrors, EnumOption enumOption)
        {
            var parser = new CommandLineParser <EnumOptions>();

            parser.Configure(opt => opt.EnumOption)
            .Name("e")
            .Required();

            var result = parser.Parse(args);

            Assert.Equal(hasErrors, result.HasErrors);

            Assert.Equal(enumOption, result.Result.EnumOption);
        }
Exemple #21
0
        public void SettingValueShouldOnlyAcceptEnumMembers(TestEnum value, bool accept)
        {
            // Arrange
            var sut = new EnumOption <TestEnum>(TestEnum.None, string.Empty, string.Empty);

            // Act
            sut.Value = value;

            // Assert
            if (accept)
            {
                Assert.Equal(value, sut.Value);
            }
            else
            {
                Assert.NotEqual(value, sut.Value);
            }
        }
        /// <summary>
        /// Creates the appropriate editor from the context. If the return value is null, another
        /// <see cref="IEditorStrategy"/> will be asked. The returned value should be fully configured
        /// and bound.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <returns>
        /// A control that will be used for editing the field, or null if this strategy cannot be
        /// used for this field.
        /// </returns>
        public object CreateEditor(FieldContext context)
        {
            if (!context.PropertyDescriptor.PropertyType.IsEnum)
                return null;

            var enumType = context.PropertyDescriptor.PropertyType;
            var items = new List<EnumOption>();
            foreach (var value in Enum.GetValues(enumType))
            {
                var displayName = enumType.GetField(value.ToString()).GetCustomAttributes(typeof(EnumDisplayNameAttribute), true).OfType<EnumDisplayNameAttribute>().FirstOrDefault();
                var item = new EnumOption();
                item.DisplayName = displayName == null ? value.ToString() : displayName.DisplayName;
                item.Value = value;
                items.Add(item);
            }

            var comboBox = new ComboBox();
            comboBox.SelectedValuePath = "Value";
            comboBox.DisplayMemberPath = "DisplayName";
            comboBox.ItemsSource = items;
            BindingOperations.SetBinding(comboBox, Selector.SelectedValueProperty, context.Binding);
            return comboBox;
        }
        void BuildTextureQualityOption()
        {
            var names   = new[] { "High", "Medium", "Low", "Very Low" };
            var options = new EnumOption[names.Length];

            for (var i = 0; i < names.Length; i++)
            {
                options[i] = new EnumOption {
                    Value       = i,
                    DisplayName = names[i]
                };
            }

            // Create a fake enum option
            TextureQualityOption.Type         = OptionType.Enum;
            TextureQualityOption.EnumOptions  = options;
            TextureQualityOption.MinValue     = 0;
            TextureQualityOption.MaxValue     = Mathf.Max(0, names.Length - 1);
            TextureQualityOption.DefaultValue = Mathf.FloorToInt(TextureQualityOption.MaxValue / 2);

            QualitySettings.masterTextureLimit = QualityLevelOption.Get <int>();
            TextureQualityOption.OnValueChanged.AddListener(RefreshTextureQuality);
        }
        public SelectOneOptionsEntry(string field, IOptionSpec spec, Type fieldType) :
            base(field, spec)
        {
            var eval = Enum.GetValues(fieldType);

            if (eval == null)
            {
                throw new ArgumentException("No values, or invalid values, for enum");
            }
            int n = eval.Length;

            if (n == 0)
            {
                throw new ArgumentException("Enum has no declared members");
            }
            chosen   = null;
            comboBox = null;
            options  = new List <EnumOption>(n);
            for (int i = 0; i < n; i++)
            {
                options.Add(GetAttribute(eval.GetValue(i), fieldType));
            }
        }
        public TfsConfiguration(IDispatcher uiDispatcher, ConfigurationFlags flags = ConfigurationFlags.None)
            : base(uiDispatcher)
        {
            Localizer = new TfsLocalizer();

            _url                = new TextOption(string.Empty, TextIds.UrlName, TextIds.UrlDescription);
            _collectionName     = new TextOption(string.Empty, TextIds.CollectionNameName, TextIds.CollectionNameDescription);
            _project            = new ProjectOption();
            _repository         = new RepositoryOption();
            _authenticationType = new EnumOption <AuthenticationType>(AuthenticationType.Windows, TextIds.AuthenticationTypeName, TextIds.AuthenticationTypeDescription);
            _userName           = new TextOption(string.Empty, TextIds.UserNameName, TextIds.UserNameDescription);
            _password           = new EncryptedTextOption(string.Empty, TextIds.PasswordName, TextIds.PasswordDescription);
            _token              = new EncryptedTextOption(string.Empty, TextIds.TokenName, TextIds.TokenDescription);

            UpdateAuthenticationFieldsVisibility(_authenticationType.Value);
            _authenticationType.ValueChanged += AuthenticationType_ValueChanged;

            if (flags.HasFlag(ConfigurationFlags.HideRepository))
            {
                _repository.IsVisible = false;
            }

            var projectValueCalculator = CreateCalculator(FetchProjectsAsync, OnProjectsFetched);

            projectValueCalculator.Attach(_url, _collectionName);
            projectValueCalculator.Attach(_authenticationType, _token, _password, _userName);
            projectValueCalculator.Affect(_project);

            if (!flags.HasFlag(ConfigurationFlags.HideRepository))
            {
                var repositoryValueCalculator = CreateCalculator(FetchRepositoriesAsync, OnRepositoriesFetched);
                repositoryValueCalculator.Attach(_url, _collectionName);
                repositoryValueCalculator.Attach(_project);
                repositoryValueCalculator.Attach(_authenticationType, _token, _password, _userName);
                repositoryValueCalculator.Affect(_repository);
            }
        }
        public override void EndSeed()
        {
            List <EnumOption> options = new List <EnumOption>();
            EnumOption        Other   = new EnumOption()
            {
                Display = "@OTHER"
            };

            foreach (KeyValuePair <string, EnumOption> kvp in valuesDict)
            {
                EnumOption thisOption = kvp.Value;

                if (thisOption.Instances > GlobalSettings.MinimumInstances)
                {
                    options.Add(thisOption);
                }
                else
                {
                    Other.Instances++;
                }
            }

            List <EnumOption> ParsedOptions = new List <EnumOption>
            {
                Other.Instances > GlobalSettings.MinimumInstances ? Other : null
            };

            foreach (EnumOption option in options.OrderByDescending(e => e.Instances))
            {
                ParsedOptions.Add(option);
            }

            Values = ParsedOptions.Select(s => s?.Display).ToArray();

            #endregion Methods
        }
        void OnGUI()
        {
            // 此处为实际窗口代码
            scrollPosBig = EditorGUILayout.BeginScrollView(scrollPosBig);

            // ToolBar工具栏,横向选择
            string[] toolBarStrs = { "Selection1", "Selection2", "Selection3" };
            toolBarSelect = GUILayout.Toolbar(toolBarSelect, toolBarStrs, GUILayout.Height(25));

            // 非下拉选择网格,可以给横向或者纵向
            string[] gridStrs = { "Message1", "Message2", "Message3", "Message4" };
            gridSelection = GUILayout.SelectionGrid(gridSelection, gridStrs, 2);

            // 下拉选项菜单
            string[] options  = { "Popup选项一", "Popup选项二", "Popup选项三" };
            var      oldValue = optionIndex;

            optionIndex = EditorGUILayout.Popup(optionIndex, options);
            if (optionIndex != oldValue)
            {
                Debug.Log("选项发生变化:" + optionIndex);
            }

            // 整数下拉选项
            string[] names      = { "number1", "number2", "number4" };
            int[]    sizes      = { 1, 2, 4 };
            int      selectSize = 4;

            EditorGUILayout.IntPopup("整数下拉: ", selectSize, names, sizes);

            // 枚举选项菜单
            optionEnum = (EnumOption)EditorGUILayout.EnumPopup("枚举选项:", optionEnum);
            EditorGUILayout.PrefixLabel("PreFixLabel");
            // 带箭头的折叠项
            foldOut = EditorGUILayout.Foldout(foldOut, "Foldout");
            if (foldOut)
            {
                // 标签字段
                GUILayout.Label("  隐藏项", EditorStyles.boldLabel);
            }



            // 标签字段
            GUIStyle fontStyle = new GUIStyle();

            fontStyle.fontSize = 20;
            EditorGUILayout.LabelField("Base Settings", fontStyle, GUILayout.MinHeight(25));

            // 曲线属性
            curve = EditorGUILayout.CurveField("曲线属性", curve);

            // 整数字段
            EditorGUILayout.IntField("整数字段", 1);

            // 浮点数字段
            EditorGUILayout.FloatField("浮点数字段", 1.25f);

            // 二维向量字段
            EditorGUILayout.Vector2Field("二维向量字段", Vector2.left);

            // 颜色字段
            EditorGUILayout.ColorField("颜色字段", Color.yellow);

            // GameObject字段
            gameObjectField =
                EditorGUILayout.ObjectField("gameObjectField", gameObjectField, typeof(GameObject),
                                            false) as GameObject;
            if (gameObjectField != null)
            {
                string prefabPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(gameObjectField);
                EditorGUILayout.LabelField("prefab: " + prefabPath);
            }

            // tag拾取文本,给gameObject设置tag
            EditorGUILayout.TagField("GameObjectTag:", "Untagged");

            // layer拾取文本,给gameObject设置layer
            EditorGUILayout.LayerField("GameObjectLayer:", 0);

            // materialField字段
            materialField =
                EditorGUILayout.ObjectField("materialField", materialField, typeof(Material), false) as Material;

            // 文本输入框
            myString = EditorGUILayout.TextField("账号:", myString);

            // 密码输入框
            password = EditorGUILayout.PasswordField("Password:", password);

            // 文本输入区域
            EditorGUILayout.PrefixLabel("文本输入区域");
            myString = EditorGUILayout.TextArea(myString);

            // 禁用区域:当groupEnabled为true时才能修改group范围内的值
            groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Settings", groupEnabled);
            // 单选框(如果没有myBool = 则不能修改)
            myBool = EditorGUILayout.Toggle("Toggle", myBool);
            // 进度条
            myFloat = EditorGUILayout.Slider("Slider", myFloat, 0, 1);
            //指定生命值的宽高
            Rect progressRect = GUILayoutUtility.GetRect(50, 50);

            // 用滑块绘制生命条
            GUI.color = Color.cyan;
            EditorGUI.ProgressBar(progressRect, myFloat, "生命值");
            GUI.color = Color.white;
            EditorGUILayout.EndToggleGroup();

            // 帮助盒子
            EditorGUILayout.HelpBox("伤害太低了吧!!", MessageType.Error);
            EditorGUILayout.HelpBox("伤害有点高啊!!", MessageType.Warning);
            EditorGUILayout.HelpBox("伤害适中!!", MessageType.Info);

            // 焦点和光标
            if (EditorWindow.focusedWindow != null)
            {
                EditorGUILayout.LabelField("键盘焦点window:" + EditorWindow.focusedWindow.ToString());
                EditorGUILayout.LabelField("光标下的window:" + EditorWindow.focusedWindow.ToString());
            }

            // 添加滚动区域(此处需要加scrollPos = ,才能改变值)
            scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.MinHeight(100), GUILayout.MaxHeight(220));
            // 开始窗口里的子窗口
            this.BeginWindows();
            var windowRect = new Rect(0, 0, 100, 100);

            GUILayout.Window(1, windowRect, (int winID) =>
            {
                GUILayout.Button(winID.ToString());
                GUILayout.Button(scrollPos.ToString());
                GUI.DragWindow();
            }, "子窗口1");
            windowRect.y += 100;
            GUILayout.Window(2, windowRect, (int winID) =>
            {
                GUILayout.Button(winID.ToString());
                GUILayout.Button(scrollPos.ToString());
                GUI.DragWindow();
            }, "子窗口2");
            // 子窗口结束
            this.EndWindows();
            EditorGUILayout.LabelField("", GUILayout.Width(100), GUILayout.Height(200));
            // 滚动区域结束
            EditorGUILayout.EndScrollView();

            //空一行
            EditorGUILayout.Space();

            //以水平方向绘制
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Name", GUILayout.MaxWidth(50));
            EditorGUILayout.TextField("小丽");
            EditorGUILayout.LabelField("Size", GUILayout.MaxWidth(50));
            EditorGUILayout.TextField("36D");
            EditorGUILayout.EndHorizontal();

            // 发送事件
            if (GUILayout.Button("发送事件", GUILayout.ExpandHeight(true)))
            {
                var win = EditorWindow.GetWindow <MyWindow>();
                win.SendEvent(EditorGUIUtility.CommandEvent("【按钮事件】"));
            }

            // 接收事件
            Event e = Event.current;

            if (e.commandName != "")
            {
                Debug.Log("收到:" + e.commandName);
            }

            // 保存路径文件夹选取面板
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("保存文件夹路径", GUILayout.ExpandWidth(false)))
            {
                filePath = EditorUtility.SaveFolderPanel("Path to Save Images", filePath, Application.dataPath);
            }

            EditorGUILayout.LabelField("当前路径:" + filePath);
            EditorGUILayout.EndHorizontal();

            // 保存路径文件选择面板
            if (GUILayout.Button("保存文件路径"))
            {
                string path = EditorUtility.SaveFilePanel(
                    "Save texture as PNG",
                    "",
                    "123.png",
                    "png");
                Debug.Log("图片路径:" + path);
            }

            // 文件拖拽控制区域demo
            EditorGUILayout.LabelField("文件拖拽框: ");
            var rect = EditorGUILayout.GetControlRect(GUILayout.Height(30));

            rectString = EditorGUI.TextField(rect, rectString);
            EditorGUILayout.ObjectField("拖拽的GameObject", dragObject, typeof(GameObject),
                                        false);
            if ((Event.current.type == UnityEngine.EventType.DragExited ||
                 Event.current.type == UnityEngine.EventType.DragUpdated) &&
                rect.Contains(Event.current.mousePosition))             //如果鼠标正在拖拽中或拖拽结束时,并且鼠标所在位置在文本输入框内
            {
                DragAndDrop.visualMode = DragAndDropVisualMode.Generic; //改变鼠标的外表
                if (DragAndDrop.paths != null && DragAndDrop.paths.Length > 0)
                {
                    rectString = DragAndDrop.paths[0]; // 拖拽的文件
                }

                if (DragAndDrop.objectReferences != null && DragAndDrop.objectReferences.Length > 0)
                {
                    dragObject = DragAndDrop.objectReferences[0] as GameObject; // 拖拽的游戏对象
                }
            }

            // 打开一个通知栏
            if (GUILayout.Button("打开通知栏"))
            {
                this.ShowNotification(new GUIContent("This is a Notification"));
            }

            // 关闭通知栏
            if (GUILayout.Button("关闭"))
            {
                this.RemoveNotification();
            }

            // 打开一个进度条弹窗
            if (GUILayout.Button("打开进度条弹窗", GUILayout.MinHeight(30)))
            {
                EditorUtility.DisplayProgressBar("正在解压", "解压期间不消耗流量...", 0.56f);
            }

            // 清空进度条
            if (GUILayout.Button("清空进度条弹窗", GUILayout.MinHeight(30)))
            {
                EditorUtility.ClearProgressBar();
            }

            //编辑器下创建gameObject
            if (GUILayout.Button("创建游戏对象"))
            {
                GameObject created = EditorUtility.CreateGameObjectWithHideFlags("新建游戏对象",
                                                                                 HideFlags.None);
            }

            // 显示普通对话框
            if (GUILayout.Button("显示普通对话框"))
            {
                if (EditorUtility.DisplayDialog("标题,标题", "内容,内容", "确认", "取消"))
                {
                    Debug.Log("点击了确认!");
                }
            }

            // 显示复杂对话框
            if (GUILayout.Button("显示复杂对话框"))
            {
                var option = EditorUtility.DisplayDialogComplex(
                    "标题",
                    "内容,内容...",
                    "确定",
                    "取消",
                    "其他");
                switch (option)
                {
                case 0:
                    Debug.Log("点击了【确定】");
                    break;

                case 1:
                    Debug.Log("点击了【取消】");
                    break;

                case 2:
                    Debug.Log("点击了【其他】");
                    break;

                default:
                    Debug.Log("default switch");
                    break;
                }
            }

            // DisplayPopupMenu显示弹出菜单栏(比如Assets窗口或者Inspector窗口)
            if (GUILayout.Button("显示弹出菜单栏"))
            {
                Rect contextRect = new Rect(10, 10, 100, 100);
                EditorUtility.DisplayPopupMenu(contextRect, "Assets/", null);
            }

            // 使项目窗口到前面并焦点它,这个通常在一个菜单项创建并选择一个资源之后被调用。
            if (GUILayout.Button("Focus Unity工程"))
            {
                EditorUtility.FocusProjectWindow();
            }

            // 右键菜单
            var eventItem = Event.current;

            if (eventItem.type == UnityEngine.EventType.ContextClick)
            {
                var mousePos = eventItem.mousePosition;
                Debug.Log("弹出右键菜单:" + mousePos);
                var menu = new GenericMenu();
                menu.AddItem(new GUIContent("选项1"), false, (userData) => { Debug.Log(userData); }, "点击item1");
                menu.AddItem(new GUIContent("选项2/1"), false, (userData) => { Debug.Log(userData); }, "点击item2.1");
                menu.AddItem(new GUIContent("选项2/2"), false, (userData) => { Debug.Log(userData); }, "点击item2.2");
                menu.AddSeparator("");
                menu.AddItem(new GUIContent("选项3"), false, (userData) => { Debug.Log(userData); }, "点击item3");
                menu.ShowAsContext();
                eventItem.Use();
            }


            EditorGUILayout.EndScrollView();
        }
Exemple #28
0
		private static IOption CreateShellOptionInternal(Category shellSubCategory, OptionDefType uiOption,
		                                                 string defaultValue)
		{
			IOption shellOption = null;
			string s = !string.IsNullOrEmpty(string.Concat(uiOption.Text)) ? string.Concat(uiOption.Text) : defaultValue;

			if (string.IsNullOrEmpty(s))
			{
				s = string.Empty;
			}

			bool canOverride = uiOption.IsOverrideAllowed;
			switch (uiOption.DataType)
			{
				case OptionDataTypeEnum.Boolean:
					{
						bool val = GetBool(s);
						shellOption = new BoolOption(uiOption.Name, val, val, canOverride)
						              	{
						              		DisplayName = uiOption.DisplayText,
						              		Description = uiOption.DisplayText,
						              		Category = shellSubCategory == null ? null : shellSubCategory.Parent,
						              		SubCategory = shellSubCategory
						              	};
						break;
					}
				case OptionDataTypeEnum.Integer:
					{
						int val = GetInt(s);
						shellOption = new IntegerOption(uiOption.Name, val, val, canOverride)
						              	{
						              		DisplayName = uiOption.DisplayText,
						              		Description = uiOption.DisplayText,
						              		Category = shellSubCategory == null ? null : shellSubCategory.Parent,
						              		SubCategory = shellSubCategory
						              	};
						break;
					}
				case OptionDataTypeEnum.String:
					{
						if (uiOption.Encrypted)
						{
							shellOption = new EncryptionOption(uiOption.Name, s, s, canOverride)
							              	{
							              		DisplayName = uiOption.DisplayText,
							              		Description = uiOption.DisplayText,
							              		Category = shellSubCategory == null ? null : shellSubCategory.Parent,
							              		SubCategory = shellSubCategory
							              	};
						}
						else
						{
							shellOption = new StringOption(uiOption.Name, s, s, canOverride)
							              	{
							              		DisplayName = uiOption.DisplayText,
							              		Description = uiOption.DisplayText,
							              		Category = shellSubCategory == null ? null : shellSubCategory.Parent,
							              		SubCategory = shellSubCategory,
							              		IsPrimaryKey = uiOption.IsPrimaryKey
							              	};
						}
						break;
					}
				case OptionDataTypeEnum.Color:
					{
						var val = GetColor(s);
						shellOption = new ColorOption(uiOption.Name, val, val, canOverride)
						              	{
						              		DisplayName = uiOption.DisplayText,
						              		Description = uiOption.DisplayText,
						              		Category = shellSubCategory == null ? null : shellSubCategory.Parent,
						              		SubCategory = shellSubCategory
						              	};
						break;
					}
				case OptionDataTypeEnum.KeyValueRange:
					{
						int val = GetInt(s);
						shellOption = new EnumOption(uiOption.Name, val, val, canOverride, GetEnumValues(uiOption))
						              	{
						              		DisplayName = uiOption.DisplayText,
						              		Description = uiOption.DisplayText,
						              		Category = shellSubCategory == null ? null : shellSubCategory.Parent,
						              		SubCategory = shellSubCategory
						              	};

						break;
					}
				case OptionDataTypeEnum.Format:
				case OptionDataTypeEnum.Range:
				default:
					{
						// do nothing. these need to be converted
#if DEBUG
						throw new NotImplementedException();
#else
						break;
#endif
					}
			}

			return shellOption;
		}
        /// <summary>
        /// Parse a set of options within an option group to collect all information of individual options.
        /// </summary>
        /// <param name="group"> a reference to an individual option group in the DOM tree. </param>
        /// <param name="og"> a reference to the corresponding option group in the HashMap. </param>
        /// <exception cref="OptionException"> </exception>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private void parseOptionsDescription(org.w3c.dom.Element group, OptionGroup og) throws org.maltparser.core.exception.MaltChainedException
        private void parseOptionsDescription(Element group, OptionGroup og)
        {
            NodeList options = group.getElementsByTagName("option");
            Element  option;

            for (int i = 0; i < options.Length; i++)
            {
                option = (Element)options.item(i);
                string optionname   = option.getAttribute("name").ToLower();
                string optiontype   = option.getAttribute("type").ToLower();
                string defaultValue = option.getAttribute("default");
                string usage        = option.getAttribute("usage").ToLower();
                string flag         = option.getAttribute("flag");

                NodeList shortdescs = option.getElementsByTagName("shortdesc");
                Element  shortdesc;
                string   shortdesctext = "";
                if (shortdescs.Length == 1)
                {
                    shortdesc     = (Element)shortdescs.item(0);
                    shortdesctext = shortdesc.TextContent;
                }

                if (optiontype.Equals("string") || optiontype.Equals("bool") || optiontype.Equals("integer") || optiontype.Equals("unary"))
                {
                    Option.Option op = og.getOption(optionname);
                    if (op != null)
                    {
                        throw new OptionException("The option name '" + optionname + "' for option group '" + og.Name + "' already exists. It is only allowed to override the class and enum option type to add legal value. ");
                    }
                }
                else if (optiontype.Equals("class") || optiontype.Equals("enum") || optiontype.Equals("stringenum"))
                {
                    Option.Option op = og.getOption(optionname);
                    if (op != null)
                    {
                        if (op is EnumOption && !optiontype.Equals("enum"))
                        {
                            throw new OptionException("The option name '" + optionname + "' for option group '" + og.Name + "' already exists. The existing option is of enum type, but the new option is of '" + optiontype + "' type. ");
                        }
                        if (op is ClassOption && !optiontype.Equals("class"))
                        {
                            throw new OptionException("The option name '" + optionname + "' for option group '" + og.Name + "' already exists. The existing option is of class type, but the new option is of '" + optiontype + "' type. ");
                        }
                        if (op is StringEnumOption && !optiontype.Equals("stringenum"))
                        {
                            throw new OptionException("The option name '" + optionname + "' for option group '" + og.Name + "' already exists. The existing option is of urlenum type, but the new option is of '" + optiontype + "' type. ");
                        }
                    }
                }
                if (optiontype.Equals("string"))
                {
                    og.addOption(new StringOption(og, optionname, shortdesctext, flag, usage, defaultValue));
                }
                else if (optiontype.Equals("bool"))
                {
                    og.addOption(new BoolOption(og, optionname, shortdesctext, flag, usage, defaultValue));
                }
                else if (optiontype.Equals("integer"))
                {
                    og.addOption(new IntegerOption(og, optionname, shortdesctext, flag, usage, defaultValue));
                }
                else if (optiontype.Equals("unary"))
                {
                    og.addOption(new UnaryOption(og, optionname, shortdesctext, flag, usage));
                }
                else if (optiontype.Equals("enum"))
                {
                    Option.Option op  = og.getOption(optionname);
                    EnumOption    eop = null;
                    if (op == null)
                    {
                        eop = new EnumOption(og, optionname, shortdesctext, flag, usage);
                    }
                    else
                    {
                        if (op is EnumOption)
                        {
                            eop = (EnumOption)op;
                        }
                    }

                    NodeList legalvalues = option.getElementsByTagName("legalvalue");
                    Element  legalvalue;
                    for (int j = 0; j < legalvalues.Length; j++)
                    {
                        legalvalue = (Element)legalvalues.item(j);
                        string legalvaluename = legalvalue.getAttribute("name");
                        string legalvaluetext = legalvalue.TextContent;
                        eop.addLegalValue(legalvaluename, legalvaluetext);
                    }
                    if (op == null)
                    {
                        eop.DefaultValue = defaultValue;
                        og.addOption(eop);
                    }
                }
                else if (optiontype.Equals("class"))
                {
                    Option.Option op  = og.getOption(optionname);
                    ClassOption   cop = null;
                    if (op == null)
                    {
                        cop = new ClassOption(og, optionname, shortdesctext, flag, usage);
                    }
                    else
                    {
                        if (op is ClassOption)
                        {
                            cop = (ClassOption)op;
                        }
                    }

                    NodeList legalvalues = option.getElementsByTagName("legalvalue");
                    Element  legalvalue;
                    for (int j = 0; j < legalvalues.Length; j++)
                    {
                        legalvalue = (Element)legalvalues.item(j);
                        string legalvaluename = legalvalue.getAttribute("name").ToLower();
                        string classname      = legalvalue.getAttribute("class");
                        string legalvaluetext = legalvalue.TextContent;
                        cop.addLegalValue(legalvaluename, legalvaluetext, classname);
                    }
                    if (op == null)
                    {
                        cop.DefaultValue = defaultValue;
                        og.addOption(cop);
                    }
                }
                else if (optiontype.Equals("stringenum"))
                {
                    Option.Option    op   = og.getOption(optionname);
                    StringEnumOption ueop = null;
                    if (op == null)
                    {
                        ueop = new StringEnumOption(og, optionname, shortdesctext, flag, usage);
                    }
                    else
                    {
                        if (op is StringEnumOption)
                        {
                            ueop = (StringEnumOption)op;
                        }
                    }

                    NodeList legalvalues = option.getElementsByTagName("legalvalue");
                    Element  legalvalue;
                    for (int j = 0; j < legalvalues.Length; j++)
                    {
                        legalvalue = (Element)legalvalues.item(j);
                        string legalvaluename = legalvalue.getAttribute("name").ToLower();
                        string url            = legalvalue.getAttribute("mapto");
                        string legalvaluetext = legalvalue.TextContent;
                        ueop.addLegalValue(legalvaluename, legalvaluetext, url);
                    }
                    if (op == null)
                    {
                        ueop.DefaultValue = defaultValue;
                        og.addOption(ueop);
                    }
                }
                else
                {
                    throw new OptionException("Illegal option type found in the setting file. ");
                }
            }
        }
 /// <summary>
 /// 实例化<see cref="EnumOptionResolveContext"/>实例
 /// </summary>
 /// <param name="option">枚举成员对象</param>
 /// <param name="optionTemplate">枚举成员模板</param>
 public EnumOptionResolveContext(EnumOption option, string optionTemplate)
 {
     _option = option;
     _output = optionTemplate;
 }