/// <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++; } }
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; }
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; } }
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)); }
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); }
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); }
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()); }
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)); }
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); }
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); }
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)); }
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); }
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)); }
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); }
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(); }
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; }