packages feed

macbeth-lib-0.0.12: src/Macbeth/Wx/GameType.hs

{-# LANGUAGE FlexibleContexts #-}

module Macbeth.Wx.GameType (
  Category (..),
  Board (..),
  gameTypes,
  gameTypeSelectionToString,
  onSelectGameTypeCategory
) where

import Macbeth.Wx.Utils

import Data.Char
import Data.Map
import Graphics.UI.WX

data Category = Chess | Suicide | Losers | Atomic | Wild | Crazyhouse | Bughouse deriving (Eq, Ord, Show, Read)

data Board = Board {_id :: String, display :: String} deriving (Show, Read)

gameTypes :: Map Category [Board]
gameTypes = fromList [ (Chess, []), (Suicide, []), (Losers, []), (Atomic, []),
                       (Wild, [    Board "w1" "Reversed King and Queen"
                                 , Board "w2" "Shuffle position"
                                 , Board "w3" "Shuffle position, mirrored"
                                 , Board "w4" "Random pieces, balanced bishops"
                                 , Board "w5" "Pawns on 7th rank"
                                 , Board "w8" "Pawns on 4th rank"
                                 , Board "w8a" "Panwns on 5th rank"
                                 , Board "wild fr" "Fisher Random"])
                     , (Crazyhouse, [])
                     , (Bughouse, [])]


gameTypeSelectionToString :: Category -> Maybe Board -> String
gameTypeSelectionToString _ (Just board) = _id board
gameTypeSelectionToString cat _ = fmap toLower (show cat)


onSelectGameTypeCategory :: Choice () -> Choice () -> IO ()
onSelectGameTypeCategory c_boards c_category = do
  category <- fmap read (getDisplaySelection c_category)
  set c_boards [ items := fmap display $ gameTypes ! category]