private static void _CheckKeys(TabletOptionButton.ButtonAction action, TabletOptionButton.TabletButton button, bool held)
 {
     if (_IsKeypressAction(action))
     {
         _CheckKeys(button, ((int)action >> 16), held);
     }
 }
        private static bool _IsActionRequested(TabletConnection conn, TabletOptionButton.ButtonAction action)
        {
            bool ret = false;

            if (conn.Settings.AAction == action)
            {
                ret |= conn.Tablet.ButtonState.CrossHeld;
            }
            if (conn.Settings.BAction == action)
            {
                ret |= conn.Tablet.ButtonState.CircleHeld;
            }
            if (conn.Settings.XAction == action)
            {
                ret |= conn.Tablet.ButtonState.SquareHeld;
            }
            if (conn.Settings.YAction == action)
            {
                ret |= conn.Tablet.ButtonState.TriangleHeld;
            }
            if (conn.Settings.UpAction == action)
            {
                ret |= conn.Tablet.DPadState.UpHeld;
            }
            if (conn.Settings.DownAction == action)
            {
                ret |= conn.Tablet.DPadState.DownHeld;
            }
            if (conn.Settings.LeftAction == action)
            {
                ret |= conn.Tablet.DPadState.LeftHeld;
            }
            if (conn.Settings.RightAction == action)
            {
                ret |= conn.Tablet.DPadState.RightHeld;
            }
            if (conn.Settings.StartAction == action)
            {
                ret |= conn.Tablet.ButtonState.StartHeld;
            }
            if (conn.Settings.BackAction == action)
            {
                ret |= conn.Tablet.ButtonState.SelectHeld;
            }
            if (conn.Settings.GuideAction == action)
            {
                ret |= conn.Tablet.ButtonState.PSHeld;
            }

            return(ret);
        }
 private static void _SetAction(string iniFileName, string keyName, TabletOptionButton.ButtonAction action)
 {
     WritePrivateProfileString(_DEFAULT_SECTION, keyName, action.ToString(),
                               Path.Combine(Directory.GetCurrentDirectory(), iniFileName));
 }
        private static void _PerformAction(TabletConnection conn, TabletOptionButton.TabletButton button,
                                           TabletOptionButton.ButtonAction action, bool held)
        {
            switch ((TabletOptionButton.ButtonAction)((int)action & 0xFFFF))
            {
            case TabletOptionButton.ButtonAction.LeftClick:
                mouse_event(held ? MOUSEEVENTF_LEFTDOWN : MOUSEEVENTF_LEFTUP, 0, 0, 0, UIntPtr.Zero);
                break;

            case TabletOptionButton.ButtonAction.MiddleClick:
                mouse_event(held ? MOUSEEVENTF_MIDDLEDOWN : MOUSEEVENTF_MIDDLEUP, 0, 0, 0, UIntPtr.Zero);
                break;

            case TabletOptionButton.ButtonAction.RightClick:
                mouse_event(held ? MOUSEEVENTF_RIGHTDOWN : MOUSEEVENTF_RIGHTUP, 0, 0, 0, UIntPtr.Zero);
                break;

            case TabletOptionButton.ButtonAction.ScrollDown:
                if (held)
                {
                    mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -120, UIntPtr.Zero);
                }
                break;

            case TabletOptionButton.ButtonAction.ScrollUp:
                if (held)
                {
                    mouse_event(MOUSEEVENTF_WHEEL, 0, 0, 120, UIntPtr.Zero);
                }
                break;

            case TabletOptionButton.ButtonAction.ShowOptions:
                if (held)
                {
                    _frmOptions.ShowOptions();
                }
                break;

            case TabletOptionButton.ButtonAction.TurnOffTablet:
                if (conn.Receiver != null && held)
                {
                    conn.Receiver.TurnOffDevice(conn.ReceiverIndex);
                }
                break;

            case TabletOptionButton.ButtonAction.SwitchTabletDisplay:
                if (held)
                {
                    //Find our current display in the AllScreens list, and then switch to the next one
                    int?index = null;
                    for (int i = 0; i < Screen.AllScreens.Length; i++)
                    {
                        if (conn.CurrentDisplay == Screen.AllScreens[i])
                        {
                            index = i;
                            break;
                        }
                    }
                    if (!index.HasValue)
                    {
                        conn.CurrentDisplay = Screen.PrimaryScreen;
                    }
                    else
                    {
                        conn.CurrentDisplay = Screen.AllScreens[(index.Value + 1) % Screen.AllScreens.Length];
                    }
                }

                break;

            case TabletOptionButton.ButtonAction.ExecuteFile:
                if (held)
                {
                    try
                    {
                        bool ignore = false;
                        var  p      = new Process();

                        p.StartInfo.ErrorDialog = true;
                        switch (button)
                        {
                        case TabletOptionButton.TabletButton.ACross:
                            p.StartInfo.FileName = conn.Settings.AFile;
                            break;

                        case TabletOptionButton.TabletButton.BCircle:
                            p.StartInfo.FileName = conn.Settings.BFile;
                            break;

                        case TabletOptionButton.TabletButton.XSquare:
                            p.StartInfo.FileName = conn.Settings.XFile;
                            break;

                        case TabletOptionButton.TabletButton.YTriangle:
                            p.StartInfo.FileName = conn.Settings.YFile;
                            break;

                        case TabletOptionButton.TabletButton.Up:
                            p.StartInfo.FileName = conn.Settings.UpFile;
                            break;

                        case TabletOptionButton.TabletButton.Down:
                            p.StartInfo.FileName = conn.Settings.DownFile;
                            break;

                        case TabletOptionButton.TabletButton.Left:
                            p.StartInfo.FileName = conn.Settings.LeftFile;
                            break;

                        case TabletOptionButton.TabletButton.Right:
                            p.StartInfo.FileName = conn.Settings.RightFile;
                            break;

                        case TabletOptionButton.TabletButton.Start:
                            p.StartInfo.FileName = conn.Settings.StartFile;
                            break;

                        case TabletOptionButton.TabletButton.BackSelect:
                            p.StartInfo.FileName = conn.Settings.BackFile;
                            break;

                        case TabletOptionButton.TabletButton.PSXboxGuide:
                            p.StartInfo.FileName = conn.Settings.GuideFile;
                            break;

                        case TabletOptionButton.TabletButton.PenClick:
                            p.StartInfo.FileName = conn.Settings.ClickFile;
                            break;

                        default:
                            ignore = true;
                            break;
                        }

                        if (!ignore)
                        {
                            p.Start();
                        }
                    }
                    catch
                    {
                        //Whatever...
                    }
                }

                break;

            default:
                break;
            }
        }
 private static bool _IsKeypressAction(TabletOptionButton.ButtonAction action)
 {
     return(((int)action & 0xFFFF) == (int)TabletOptionButton.ButtonAction.KeyboardKeypress);
 }