{-# LANGUAGE OverloadedStrings #-}
-- |
-- Module: WildBind.Input.NumPad
-- Description: Types about number pads
-- Maintainer: Toshio Ito <debug.ito@gmail.com>
--
-- Input types for number pad keys.
module WildBind.Input.NumPad
    ( -- * NumLock disabled
      NumPadUnlocked (..)
      -- * NumLock enabled
    , NumPadLocked (..)
    ) where

import           WildBind.Description (Describable (describe))

-- | Number pad key input with NumLock disabled.
data NumPadUnlocked = NumInsert | NumEnd | NumDown | NumPageDown | NumLeft | NumCenter | NumRight | NumHome | NumUp | NumPageUp | NumDivide | NumMulti | NumMinus | NumPlus | NumEnter | NumDelete deriving
    ( NumPadUnlocked
NumPadUnlocked -> NumPadUnlocked -> Bounded NumPadUnlocked
forall a. a -> a -> Bounded a
$cminBound :: NumPadUnlocked
minBound :: NumPadUnlocked
$cmaxBound :: NumPadUnlocked
maxBound :: NumPadUnlocked
Bounded
    , Int -> NumPadUnlocked
NumPadUnlocked -> Int
NumPadUnlocked -> [NumPadUnlocked]
NumPadUnlocked -> NumPadUnlocked
NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked]
NumPadUnlocked
-> NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked]
(NumPadUnlocked -> NumPadUnlocked)
-> (NumPadUnlocked -> NumPadUnlocked)
-> (Int -> NumPadUnlocked)
-> (NumPadUnlocked -> Int)
-> (NumPadUnlocked -> [NumPadUnlocked])
-> (NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked])
-> (NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked])
-> (NumPadUnlocked
    -> NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked])
-> Enum NumPadUnlocked
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: NumPadUnlocked -> NumPadUnlocked
succ :: NumPadUnlocked -> NumPadUnlocked
$cpred :: NumPadUnlocked -> NumPadUnlocked
pred :: NumPadUnlocked -> NumPadUnlocked
$ctoEnum :: Int -> NumPadUnlocked
toEnum :: Int -> NumPadUnlocked
$cfromEnum :: NumPadUnlocked -> Int
fromEnum :: NumPadUnlocked -> Int
$cenumFrom :: NumPadUnlocked -> [NumPadUnlocked]
enumFrom :: NumPadUnlocked -> [NumPadUnlocked]
$cenumFromThen :: NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked]
enumFromThen :: NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked]
$cenumFromTo :: NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked]
enumFromTo :: NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked]
$cenumFromThenTo :: NumPadUnlocked
-> NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked]
enumFromThenTo :: NumPadUnlocked
-> NumPadUnlocked -> NumPadUnlocked -> [NumPadUnlocked]
Enum
    , NumPadUnlocked -> NumPadUnlocked -> Bool
(NumPadUnlocked -> NumPadUnlocked -> Bool)
-> (NumPadUnlocked -> NumPadUnlocked -> Bool) -> Eq NumPadUnlocked
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NumPadUnlocked -> NumPadUnlocked -> Bool
== :: NumPadUnlocked -> NumPadUnlocked -> Bool
$c/= :: NumPadUnlocked -> NumPadUnlocked -> Bool
/= :: NumPadUnlocked -> NumPadUnlocked -> Bool
Eq
    , Eq NumPadUnlocked
Eq NumPadUnlocked =>
(NumPadUnlocked -> NumPadUnlocked -> Ordering)
-> (NumPadUnlocked -> NumPadUnlocked -> Bool)
-> (NumPadUnlocked -> NumPadUnlocked -> Bool)
-> (NumPadUnlocked -> NumPadUnlocked -> Bool)
-> (NumPadUnlocked -> NumPadUnlocked -> Bool)
-> (NumPadUnlocked -> NumPadUnlocked -> NumPadUnlocked)
-> (NumPadUnlocked -> NumPadUnlocked -> NumPadUnlocked)
-> Ord NumPadUnlocked
NumPadUnlocked -> NumPadUnlocked -> Bool
NumPadUnlocked -> NumPadUnlocked -> Ordering
NumPadUnlocked -> NumPadUnlocked -> NumPadUnlocked
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: NumPadUnlocked -> NumPadUnlocked -> Ordering
compare :: NumPadUnlocked -> NumPadUnlocked -> Ordering
$c< :: NumPadUnlocked -> NumPadUnlocked -> Bool
< :: NumPadUnlocked -> NumPadUnlocked -> Bool
$c<= :: NumPadUnlocked -> NumPadUnlocked -> Bool
<= :: NumPadUnlocked -> NumPadUnlocked -> Bool
$c> :: NumPadUnlocked -> NumPadUnlocked -> Bool
> :: NumPadUnlocked -> NumPadUnlocked -> Bool
$c>= :: NumPadUnlocked -> NumPadUnlocked -> Bool
>= :: NumPadUnlocked -> NumPadUnlocked -> Bool
$cmax :: NumPadUnlocked -> NumPadUnlocked -> NumPadUnlocked
max :: NumPadUnlocked -> NumPadUnlocked -> NumPadUnlocked
$cmin :: NumPadUnlocked -> NumPadUnlocked -> NumPadUnlocked
min :: NumPadUnlocked -> NumPadUnlocked -> NumPadUnlocked
Ord
    , Int -> NumPadUnlocked -> ShowS
[NumPadUnlocked] -> ShowS
NumPadUnlocked -> [Char]
(Int -> NumPadUnlocked -> ShowS)
-> (NumPadUnlocked -> [Char])
-> ([NumPadUnlocked] -> ShowS)
-> Show NumPadUnlocked
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NumPadUnlocked -> ShowS
showsPrec :: Int -> NumPadUnlocked -> ShowS
$cshow :: NumPadUnlocked -> [Char]
show :: NumPadUnlocked -> [Char]
$cshowList :: [NumPadUnlocked] -> ShowS
showList :: [NumPadUnlocked] -> ShowS
Show
    )

instance Describable NumPadUnlocked where
  describe :: NumPadUnlocked -> ActionDescription
describe NumPadUnlocked
input = case NumPadUnlocked
input of
    NumPadUnlocked
NumHome     -> ActionDescription
"Home"
    NumPadUnlocked
NumUp       -> ActionDescription
"↑"
    NumPadUnlocked
NumPageUp   -> ActionDescription
"PageUp"
    NumPadUnlocked
NumLeft     -> ActionDescription
"←"
    NumPadUnlocked
NumCenter   -> ActionDescription
""
    NumPadUnlocked
NumRight    -> ActionDescription
"→"
    NumPadUnlocked
NumEnd      -> ActionDescription
"End"
    NumPadUnlocked
NumDown     -> ActionDescription
"↓"
    NumPadUnlocked
NumPageDown -> ActionDescription
"PageDown"
    NumPadUnlocked
NumDivide   -> ActionDescription
"/"
    NumPadUnlocked
NumMulti    -> ActionDescription
"*"
    NumPadUnlocked
NumMinus    -> ActionDescription
"-"
    NumPadUnlocked
NumPlus     -> ActionDescription
"+"
    NumPadUnlocked
NumEnter    -> ActionDescription
"Enter"
    NumPadUnlocked
NumInsert   -> ActionDescription
"Insert"
    NumPadUnlocked
NumDelete   -> ActionDescription
"Delete"


-- | Number pad key input with NumLock enabled.
data NumPadLocked = NumL0 | NumL1 | NumL2 | NumL3 | NumL4 | NumL5 | NumL6 | NumL7 | NumL8 | NumL9 | NumLDivide | NumLMulti | NumLMinus | NumLPlus | NumLEnter | NumLPeriod deriving
    ( NumPadLocked
NumPadLocked -> NumPadLocked -> Bounded NumPadLocked
forall a. a -> a -> Bounded a
$cminBound :: NumPadLocked
minBound :: NumPadLocked
$cmaxBound :: NumPadLocked
maxBound :: NumPadLocked
Bounded
    , Int -> NumPadLocked
NumPadLocked -> Int
NumPadLocked -> [NumPadLocked]
NumPadLocked -> NumPadLocked
NumPadLocked -> NumPadLocked -> [NumPadLocked]
NumPadLocked -> NumPadLocked -> NumPadLocked -> [NumPadLocked]
(NumPadLocked -> NumPadLocked)
-> (NumPadLocked -> NumPadLocked)
-> (Int -> NumPadLocked)
-> (NumPadLocked -> Int)
-> (NumPadLocked -> [NumPadLocked])
-> (NumPadLocked -> NumPadLocked -> [NumPadLocked])
-> (NumPadLocked -> NumPadLocked -> [NumPadLocked])
-> (NumPadLocked -> NumPadLocked -> NumPadLocked -> [NumPadLocked])
-> Enum NumPadLocked
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: NumPadLocked -> NumPadLocked
succ :: NumPadLocked -> NumPadLocked
$cpred :: NumPadLocked -> NumPadLocked
pred :: NumPadLocked -> NumPadLocked
$ctoEnum :: Int -> NumPadLocked
toEnum :: Int -> NumPadLocked
$cfromEnum :: NumPadLocked -> Int
fromEnum :: NumPadLocked -> Int
$cenumFrom :: NumPadLocked -> [NumPadLocked]
enumFrom :: NumPadLocked -> [NumPadLocked]
$cenumFromThen :: NumPadLocked -> NumPadLocked -> [NumPadLocked]
enumFromThen :: NumPadLocked -> NumPadLocked -> [NumPadLocked]
$cenumFromTo :: NumPadLocked -> NumPadLocked -> [NumPadLocked]
enumFromTo :: NumPadLocked -> NumPadLocked -> [NumPadLocked]
$cenumFromThenTo :: NumPadLocked -> NumPadLocked -> NumPadLocked -> [NumPadLocked]
enumFromThenTo :: NumPadLocked -> NumPadLocked -> NumPadLocked -> [NumPadLocked]
Enum
    , NumPadLocked -> NumPadLocked -> Bool
(NumPadLocked -> NumPadLocked -> Bool)
-> (NumPadLocked -> NumPadLocked -> Bool) -> Eq NumPadLocked
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NumPadLocked -> NumPadLocked -> Bool
== :: NumPadLocked -> NumPadLocked -> Bool
$c/= :: NumPadLocked -> NumPadLocked -> Bool
/= :: NumPadLocked -> NumPadLocked -> Bool
Eq
    , Eq NumPadLocked
Eq NumPadLocked =>
(NumPadLocked -> NumPadLocked -> Ordering)
-> (NumPadLocked -> NumPadLocked -> Bool)
-> (NumPadLocked -> NumPadLocked -> Bool)
-> (NumPadLocked -> NumPadLocked -> Bool)
-> (NumPadLocked -> NumPadLocked -> Bool)
-> (NumPadLocked -> NumPadLocked -> NumPadLocked)
-> (NumPadLocked -> NumPadLocked -> NumPadLocked)
-> Ord NumPadLocked
NumPadLocked -> NumPadLocked -> Bool
NumPadLocked -> NumPadLocked -> Ordering
NumPadLocked -> NumPadLocked -> NumPadLocked
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: NumPadLocked -> NumPadLocked -> Ordering
compare :: NumPadLocked -> NumPadLocked -> Ordering
$c< :: NumPadLocked -> NumPadLocked -> Bool
< :: NumPadLocked -> NumPadLocked -> Bool
$c<= :: NumPadLocked -> NumPadLocked -> Bool
<= :: NumPadLocked -> NumPadLocked -> Bool
$c> :: NumPadLocked -> NumPadLocked -> Bool
> :: NumPadLocked -> NumPadLocked -> Bool
$c>= :: NumPadLocked -> NumPadLocked -> Bool
>= :: NumPadLocked -> NumPadLocked -> Bool
$cmax :: NumPadLocked -> NumPadLocked -> NumPadLocked
max :: NumPadLocked -> NumPadLocked -> NumPadLocked
$cmin :: NumPadLocked -> NumPadLocked -> NumPadLocked
min :: NumPadLocked -> NumPadLocked -> NumPadLocked
Ord
    , Int -> NumPadLocked -> ShowS
[NumPadLocked] -> ShowS
NumPadLocked -> [Char]
(Int -> NumPadLocked -> ShowS)
-> (NumPadLocked -> [Char])
-> ([NumPadLocked] -> ShowS)
-> Show NumPadLocked
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NumPadLocked -> ShowS
showsPrec :: Int -> NumPadLocked -> ShowS
$cshow :: NumPadLocked -> [Char]
show :: NumPadLocked -> [Char]
$cshowList :: [NumPadLocked] -> ShowS
showList :: [NumPadLocked] -> ShowS
Show
    )

instance Describable NumPadLocked where
  describe :: NumPadLocked -> ActionDescription
describe NumPadLocked
input = case NumPadLocked
input of
    NumPadLocked
NumL0      -> ActionDescription
"0"
    NumPadLocked
NumL1      -> ActionDescription
"1"
    NumPadLocked
NumL2      -> ActionDescription
"2"
    NumPadLocked
NumL3      -> ActionDescription
"3"
    NumPadLocked
NumL4      -> ActionDescription
"4"
    NumPadLocked
NumL5      -> ActionDescription
"5"
    NumPadLocked
NumL6      -> ActionDescription
"6"
    NumPadLocked
NumL7      -> ActionDescription
"7"
    NumPadLocked
NumL8      -> ActionDescription
"8"
    NumPadLocked
NumL9      -> ActionDescription
"9"
    NumPadLocked
NumLDivide -> ActionDescription
"/"
    NumPadLocked
NumLMulti  -> ActionDescription
"*"
    NumPadLocked
NumLMinus  -> ActionDescription
"-"
    NumPadLocked
NumLPlus   -> ActionDescription
"+"
    NumPadLocked
NumLEnter  -> ActionDescription
"Enter"
    NumPadLocked
NumLPeriod -> ActionDescription
"."