/* --------------------------------------------------------------------- */
 ///
 /// 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);
        }
Ejemplo n.º 4
0
    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();
    }
Ejemplo n.º 5
0
        /* ----------------------------------------------------------------- */
        ///
        /// 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;
Ejemplo n.º 10
0
 internal KeyboardInputResponder(PresetMenu calcInput)
 {
     this.presetMenu = calcInput;
 }
Ejemplo n.º 11
0
 /* ----------------------------------------------------------------- */
 ///
 /// Create
 ///
 /// <summary>
 /// KeyValuePaier オブジェクトを生成します。
 /// </summary>
 ///
 /* ----------------------------------------------------------------- */
 private KeyValuePair <string, PresetMenu> Create(string key, PresetMenu value) =>
 new KeyValuePair <string, PresetMenu>(key, value);
Ejemplo n.º 12
0
 /* ----------------------------------------------------------------- */
 ///
 /// 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();