private void PopulatePresetMenu(ICustomPopupContext <string> context) { var popup = context.Popup; popup.AddOption(TileLang.ParticularText("Preset Name", "Default: 3D"), context, "F:3D"); popup.AddOption(TileLang.ParticularText("Preset Name", "Default: 2D"), context, "F:2D"); var presets = TileSystemPresetUtility.GetPresets(); if (presets.Length == 0) { return; } popup.AddSeparator(); var presetGroups = presets .OrderBy(preset => preset.name) .GroupBy(preset => TileSystemPresetUtility.IsUserPreset(preset)) .ToArray(); for (int i = 0; i < presetGroups.Length; ++i) { if (i != 0) { popup.AddSeparator(); } foreach (var preset in presetGroups[i]) { popup.AddOption(preset.name, context, TileSystemPresetUtility.GetPresetGUID(preset)); } } }
/// <summary> /// Adds an option to the <see cref="CustomPopup{TValue}"/>. /// </summary> /// <example> /// <para>Add command with a straightforward action:</para> /// <code language="csharp"><![CDATA[ /// value = CustomPopupGUI.Popup(label, value, valueLabel, context => { /// var popup = context.Popup; /// popup.AddOption("First", context, 1); /// popup.AddOption("Second", context, 2); /// popup.AddOption("Third", context, 3); /// }); /// ]]></code> /// </example> /// <param name="fullPath">Full path of the menu option.</param> /// <param name="context">Custom popup context.</param> /// <param name="value">The option value.</param> /// <returns> /// Fluid style API to further define the new command entry. /// </returns> /// <exception cref="System.ArgumentNullException"> /// If <paramref name="fullPath"/> is <c>null</c>. /// </exception> /// <exception cref="System.ArgumentException"> /// If <paramref name="fullPath"/> is an empty string or starts with a slash. /// </exception> /// <seealso cref="EditorMenu.AddCommand(string)"/> /// <seealso cref="EditorMenu.AddSeparator(string)"/> public virtual EditorMenuCommandBinder AddOption(string fullPath, ICustomPopupContext <TValue> context, TValue value) { return(this.AddCommand(fullPath) .Checked(() => EqualityComparer <TValue> .Default.Equals(value, context.CurrentValue)) .Action(() => context.NotifySelection(value))); }