예제 #1
0
        // マウスジェスチャ ホールドクリック時
        private void MouseGestureHoldClick(object sender, EventArgs e)
        {
            MouseGestureInput gestureInput = new MouseGestureInput(mouseGesture.StartingButton, mouseGesture.Stroke);

            if (gestureInput.Stroke.Length > 0)
            {
                CommandMap commandMap;
                ICommand   cmd = GetCommandFromMouseGestureInput(gestureInput, out commandMap);
                if (cmd != null && commandMap != null)
                {
                    //      コマンドがマッチした場合

                    MainWindow.Current.NotificationBlock.Hide(NotificationType.GesturePreview);

                    // 現在のストロークから、最後のクリックストロークを削除(ボタンをホールドしたまま、別のボタンのコマンドも押せるように)
                    mouseGesture.RemoveLastClickStroke();

                    // 削除後のストロークを保持。マウスジェスチャ完了時に被るならば、コマンド発行させない
                    strokeOfLastExecutedCommand = mouseGesture.Stroke;
                    Debug.WriteLine("strokeOfLastExecutedCommand: " + mouseGesture.Stroke);

                    // コマンド実行
                    ExecuteCommand(cmd, commandMap.CommandValue, commandMap.CommandStrValue);
                }
                return;
            }
        }
예제 #2
0
        /* ---------------------------------------------------- */
        //       EventHandler (マウスジェスチャ)
        /* ---------------------------------------------------- */
        private void MouseGestureStrokeChanged(object sender, EventArgs e)
        {
            // 1つでもジェスチャがあれば、開始ボタンによるMouseUp時のコマンドは無効化
            mouseButtonStateSet.CommandExecuted(mouseGesture.StartingButton);

            // 長押しクリック判定解除
            StopLongClick();

            // 現在のストロークと、一致するコマンドを通知ブロックに表示
            MouseGestureInput gestureInput = new MouseGestureInput(mouseGesture.StartingButton, mouseGesture.Stroke);
            string            notification = gestureInput.ToString();
            CommandMap        commandMap;
            ICommand          cmd = GetCommandFromMouseGestureInput(gestureInput, out commandMap);

            if (cmd != null)
            {
                // マウスホイールの場合は、即HoldClickイベントでコマンドが実行されるので、通知表示しない
                if (gestureInput.Stroke.EndsWith("[WU]") || gestureInput.Stroke.EndsWith("[WD]"))
                {
                    return;
                }

                if (cmd.EnableValue)
                {
                    cmd.Value = commandMap.CommandValue;
                }
                if (cmd.EnableStrValue)
                {
                    cmd.StrValue = commandMap.CommandStrValue;
                }

                notification += "  [" + cmd.GetDetail() + "]";
            }
            MainWindow.Current.NotificationBlock.Show(notification, NotificationPriority.Normal, NotificationTime.Eternally, NotificationType.GesturePreview);
        }
예제 #3
0
        /// <summary>
        /// マウスジェスチャから、コマンド取得
        /// </summary>
        /// <param name="stroke"></param>
        /// <returns>コマンド</returns>
        private ICommand GetCommandFromMouseGestureInput(MouseGestureInput gestureInput, out CommandMap _commandMap)
        {
            Scene currentScene = GetCurrentScene();

            foreach (CommandMap commandMap in shortcutSetting.CommandMap)
            {
                if (commandMap.MouseGestureInput == null)
                {
                    continue;
                }

                if (commandMap.MouseGestureInput.Equals(gestureInput))
                {
                    ICommand cmd = GetCommand(commandMap.CommandID);
                    if (cmd == null)
                    {
                        continue;
                    }
                    if (cmd.Scene == Scene.All || cmd.Scene == currentScene)
                    {
                        _commandMap = commandMap;
                        return(cmd);
                    }
                }
            }

            _commandMap = null;
            return(null);
        }
예제 #4
0
        // マウスジェスチャ 完了時
        private void MouseGestureFinished(object sender, EventArgs e)
        {
            MouseGestureInput gestureInput = new MouseGestureInput(mouseGesture.StartingButton, mouseGesture.Stroke);

            MainWindow.Current.NotificationBlock.Hide(NotificationType.GesturePreview);

            if (gestureInput.Stroke.Length > 0 && gestureInput.Stroke != strokeOfLastExecutedCommand)
            {
                DispatchMouseGestureInput(gestureInput);
                return;
            }
        }
예제 #5
0
        /// <summary>
        /// マウスジェスチャのストロークから、コマンド実行
        /// </summary>
        /// <param name="stroke"></param>
        /// <returns>コマンドを実行したかどうか</returns>
        private bool DispatchMouseGestureInput(MouseGestureInput gestureInput)
        {
            CommandMap commandMap;
            ICommand   cmd = GetCommandFromMouseGestureInput(gestureInput, out commandMap);

            if (cmd != null)
            {
                ExecuteCommand(cmd, commandMap.CommandValue, commandMap.CommandStrValue);
                return(true);
            }

            return(false);
        }