/* --------------------------------------------------------------------- */ /// /// ToArguments /// /// <summary> /// PresetMenu に対応するプログラム引数を取得します。 /// </summary> /// /// <param name="src">PresetMenu オブジェクト</param> /// /// <returns>プログラム引数</returns> /// /* --------------------------------------------------------------------- */ public static IEnumerable <string> ToArguments(this PresetMenu src) { if ((src & PresetMenu.ArchiveOptions) != 0) { return(Find(src, ArchiveArguments)); } if ((src & PresetMenu.ExtractOptions) != 0) { return(Find(src, ExtractArguments)); } if ((src & PresetMenu.MailOptions) != 0) { return(Find(src, MailArguments)); } if ((src & PresetMenu.Archive) != 0) { return(Find(PresetMenu.ArchiveZip, ArchiveArguments)); } if ((src & PresetMenu.Extract) != 0) { return new[] { "/x" } } ; if ((src & PresetMenu.Mail) != 0) { return(Find(PresetMenu.MailZip, MailArguments)); } return(new string[0]); }
/* --------------------------------------------------------------------- */ /// /// ToName /// /// <summary> /// PresetMenu に対応する名前を取得します。 /// </summary> /// /// <param name="src">PresetMenu オブジェクト</param> /// /// <returns>名前</returns> /// /* --------------------------------------------------------------------- */ public static string ToName(this PresetMenu src) { if ((src & PresetMenu.ArchiveOptions) != 0) { return(Find(src, ArchiveNames)); } if ((src & PresetMenu.ExtractOptions) != 0) { return(Find(src, ExtractNames)); } if ((src & PresetMenu.MailOptions) != 0) { return(Find(src, MailNames)); } if ((src & PresetMenu.Archive) != 0) { return(Properties.Resources.CtxArchive); } if ((src & PresetMenu.Extract) != 0) { return(Properties.Resources.CtxExtract); } if ((src & PresetMenu.Mail) != 0) { return(Properties.Resources.CtxMail); } return(string.Empty); }
/* --------------------------------------------------------------------- */ /// /// ToContextMenuGroup /// /// <summary> /// PresetMenu を表す ContextMenu オブジェクト一覧を取得します。 /// </summary> /// /// <param name="src">PresetMenu オブジェクト</param> /// /// <returns>ContextMenu コレクション</returns> /// /* --------------------------------------------------------------------- */ public static IEnumerable <ContextMenu> ToContextMenuGroup(this PresetMenu src) { var dest = new List <ContextMenu>(); Add(src, PresetMenu.Archive, ArchiveMenu, dest); Add(src, PresetMenu.Extract, ExtractMenu, dest); Add(src, PresetMenu.Mail, MailMenu, dest); return(dest); }
public override void OnInspectorGUI() { GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); foldoutStyle.fontStyle = FontStyle.Bold; GUIStyle normalStyle = new GUIStyle(EditorStyles.toggle); normalStyle.fontStyle = FontStyle.Normal; PresetMenu presetMenu = (PresetMenu)target; serializedObject.Update(); EditorGUILayout.PropertyField(flexMenu); EditorGUILayout.PropertyField(defaultFunction); presetsFold = EditorGUILayout.Foldout(presetsFold, "Select Presets", foldoutStyle); if (presetsFold) { EditorGUI.indentLevel++; EditorGUILayout.PropertyField(cinquefoilKnot); EditorGUILayout.PropertyField(circle); EditorGUILayout.PropertyField(sphereOutline); EditorGUILayout.PropertyField(hypocloid); EditorGUILayout.PropertyField(hypocloidSurface); EditorGUILayout.PropertyField(trefoilKnot); EditorGUILayout.PropertyField(turnip); EditorGUILayout.PropertyField(wavySurface); EditorGUILayout.PropertyField(highResSphere); EditorGUILayout.Space(); EditorGUILayout.PropertyField(astroidalEllipse); EditorGUILayout.PropertyField(bumpySphere); EditorGUILayout.PropertyField(dinisSurface); EditorGUILayout.PropertyField(figure8); EditorGUILayout.PropertyField(graysSurface); EditorGUILayout.PropertyField(knot); EditorGUILayout.PropertyField(mobius); EditorGUILayout.PropertyField(radialWave); EditorGUILayout.PropertyField(torus); EditorGUILayout.Space(); EditorGUILayout.PropertyField(cone); EditorGUILayout.PropertyField(cube); EditorGUILayout.PropertyField(cylinder); EditorGUILayout.PropertyField(sphere); EditorGUILayout.PropertyField(tetrahedron); EditorGUI.indentLevel--; } serializedObject.ApplyModifiedProperties(); }
/* ----------------------------------------------------------------- */ /// /// Create /// /// <summary> /// コンテキストメニュー用のチェックボックスを生成します。 /// </summary> /// /* ----------------------------------------------------------------- */ private CheckBox Create(PresetMenu menu, string text, int index) { var dest = new CheckBox { AutoSize = true, Text = text, TabIndex = index, Tag = menu, TextAlign = ContentAlignment.MiddleLeft, }; dest.DataBindings.Add(new Binding(nameof(dest.Checked), ContextSettingsBindingSource, menu.ToString(), true, DataSourceUpdateMode.OnPropertyChanged )); return(dest); }
/* --------------------------------------------------------------------- */ /// /// Add /// /// <summary> /// PresetMenu を解析し、必要な ContextMenu オブジェクトを追加します。 /// </summary> /// /// <param name="src">変換元オブジェクト</param> /// <param name="category">メニューのカテゴリ</param> /// <param name="cmp">変換対象となるメニュー一覧</param> /// <param name="dest">結果を格納するコレクション</param> /// /* --------------------------------------------------------------------- */ private static void Add(PresetMenu src, PresetMenu category, IDictionary <PresetMenu, ContextMenu> cmp, ICollection <ContextMenu> dest) { if (!src.HasFlag(category)) { return; } var root = ToContextMenu(category); foreach (var kv in cmp) { if (src.HasFlag(kv.Key)) { root.Children.Add(kv.Value); } } if (root.Children.Count > 0) { dest.Add(root); } }
/* --------------------------------------------------------------------- */ /// /// ToIconLocation /// /// <summary> /// PresetMenu に対応するアイコンのインデックスを取得します。 /// </summary> /// /// <param name="src">PresetMenu オブジェクト</param> /// /// <returns>アイコンのインデックス</returns> /// /* --------------------------------------------------------------------- */ public static int ToIconIndex(this PresetMenu src) { var m0 = PresetMenu.Archive | PresetMenu.ArchiveOptions; if ((src & m0) != 0) { return(1); } var m1 = PresetMenu.Extract | PresetMenu.ExtractOptions; if ((src & m1) != 0) { return(2); } var m2 = PresetMenu.Mail | PresetMenu.MailOptions; if ((src & m2) != 0) { return(1); } return(0); }
/* --------------------------------------------------------------------- */ /// /// ToContextMenu /// /// <summary> /// PresetMenu を表す ContextMenu オブジェクトを取得します。 /// </summary> /// /// <param name="src">PresetMenu オブジェクト</param> /// /// <returns>ContextMenu オブジェクト</returns> /// /// <remarks> /// ToContextMenu メソッドは、指定された PresetMenu オブジェクトが複数の /// メニューを表している場合、最初に合致したメニューに対応する /// ContextMenu オブジェクトを返します。全てのメニューに合致する /// ContextMenu オブジェクトのコレクションを取得する場合は /// ToContextMenuGroup メソッドを使用して下さい。 /// </remarks> /// /* --------------------------------------------------------------------- */ public static ContextMenu ToContextMenu(this PresetMenu src) => new ContextMenu { Name = ToName(src), Arguments = string.Join(" ", ToArguments(src)), IconIndex = ToIconIndex(src), };
/* --------------------------------------------------------------------- */ /// /// Find /// /// <summary> /// メニューに対応する値を取得します。 /// </summary> /// /* --------------------------------------------------------------------- */ private static T Find <T>(PresetMenu src, IDictionary <PresetMenu, T> cmp) => cmp.FirstOrDefault(e => src.HasFlag(e.Key)).Value;
internal KeyboardInputResponder(PresetMenu calcInput) { this.presetMenu = calcInput; }
/* ----------------------------------------------------------------- */ /// /// Create /// /// <summary> /// KeyValuePaier オブジェクトを生成します。 /// </summary> /// /* ----------------------------------------------------------------- */ private KeyValuePair <string, PresetMenu> Create(string key, PresetMenu value) => new KeyValuePair <string, PresetMenu>(key, value);
/* ----------------------------------------------------------------- */ /// /// DropRequest /// /// <summary> /// ドロップ先のパスを指定した Request オブジェクトを生成します。 /// </summary> /// /* ----------------------------------------------------------------- */ private static IEnumerable <string> DropRequest(PresetMenu menu, string path) => menu.ToArguments().Concat(new[] { $"/drop:{FullName(path)}" });
public int ToArguments(PresetMenu menu) => menu.ToArguments().Count();