{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE StrictData #-}
module Monomer.Widgets.Singles.ToggleButton (
ToggleButtonCfg,
toggleButtonOffStyle,
toggleButton,
toggleButton_,
toggleButtonV,
toggleButtonV_,
toggleButtonD_
) where
import Control.Applicative ((<|>))
import Control.Lens (ALens', (&), (^.), (^?), (.~), (?~), _Just)
import Data.Default
import Data.Text (Text)
import qualified Data.Sequence as Seq
import Monomer.Widgets.Single
import Monomer.Widgets.Singles.OptionButton
import qualified Monomer.Lens as L
type ToggleButtonCfg s e = OptionButtonCfg s e Bool
toggleButtonOffStyle :: Style -> ToggleButtonCfg s e
toggleButtonOffStyle :: forall s e. Style -> ToggleButtonCfg s e
toggleButtonOffStyle = forall s e a. Style -> OptionButtonCfg s e a
optionButtonOffStyle
toggleButton
:: Text
-> ALens' s Bool
-> WidgetNode s e
toggleButton :: forall s e. Text -> ALens' s Bool -> WidgetNode s e
toggleButton Text
caption ALens' s Bool
field = forall s e.
Text -> ALens' s Bool -> [ToggleButtonCfg s e] -> WidgetNode s e
toggleButton_ Text
caption ALens' s Bool
field forall a. Default a => a
def
toggleButton_
:: Text
-> ALens' s Bool
-> [ToggleButtonCfg s e]
-> WidgetNode s e
toggleButton_ :: forall s e.
Text -> ALens' s Bool -> [ToggleButtonCfg s e] -> WidgetNode s e
toggleButton_ Text
caption ALens' s Bool
field [ToggleButtonCfg s e]
cfgs = WidgetNode s e
newNode where
newNode :: WidgetNode s e
newNode = forall s e.
Text
-> WidgetData s Bool -> [ToggleButtonCfg s e] -> WidgetNode s e
toggleButtonD_ Text
caption (forall s a. ALens' s a -> WidgetData s a
WidgetLens ALens' s Bool
field) [ToggleButtonCfg s e]
cfgs
toggleButtonV
:: WidgetEvent e
=> Text
-> Bool
-> (Bool -> e)
-> WidgetNode s e
toggleButtonV :: forall e s.
WidgetEvent e =>
Text -> Bool -> (Bool -> e) -> WidgetNode s e
toggleButtonV Text
caption Bool
value Bool -> e
handler = forall {s}. WidgetNode s e
newNode where
newNode :: WidgetNode s e
newNode = forall e s.
WidgetEvent e =>
Text
-> Bool -> (Bool -> e) -> [ToggleButtonCfg s e] -> WidgetNode s e
toggleButtonV_ Text
caption Bool
value Bool -> e
handler forall a. Default a => a
def
toggleButtonV_
:: WidgetEvent e
=> Text
-> Bool
-> (Bool -> e)
-> [ToggleButtonCfg s e]
-> WidgetNode s e
toggleButtonV_ :: forall e s.
WidgetEvent e =>
Text
-> Bool -> (Bool -> e) -> [ToggleButtonCfg s e] -> WidgetNode s e
toggleButtonV_ Text
caption Bool
value Bool -> e
handler [ToggleButtonCfg s e]
configs = WidgetNode s e
newNode where
widgetData :: WidgetData s Bool
widgetData = forall s a. a -> WidgetData s a
WidgetValue Bool
value
newConfigs :: [ToggleButtonCfg s e]
newConfigs = forall t a e. CmbOnChange t a e => (a -> e) -> t
onChange Bool -> e
handler forall a. a -> [a] -> [a]
: [ToggleButtonCfg s e]
configs
newNode :: WidgetNode s e
newNode = forall s e.
Text
-> WidgetData s Bool -> [ToggleButtonCfg s e] -> WidgetNode s e
toggleButtonD_ Text
caption forall {s}. WidgetData s Bool
widgetData [ToggleButtonCfg s e]
newConfigs
toggleButtonD_
:: Text
-> WidgetData s Bool
-> [ToggleButtonCfg s e]
-> WidgetNode s e
toggleButtonD_ :: forall s e.
Text
-> WidgetData s Bool -> [ToggleButtonCfg s e] -> WidgetNode s e
toggleButtonD_ Text
caption WidgetData s Bool
widgetData [ToggleButtonCfg s e]
configs = WidgetNode s e
toggleButtonNode where
config :: ToggleButtonCfg s e
config = forall a. Monoid a => [a] -> a
mconcat [ToggleButtonCfg s e]
configs
makeWithStyle :: WidgetData s Bool
-> Text
-> (Bool -> Bool)
-> (Bool -> Bool)
-> OptionButtonCfg s e Bool
-> Widget s e
makeWithStyle = forall a s e.
OptionButtonValue a =>
Lens' ThemeState StyleState
-> Lens' ThemeState StyleState
-> WidgetData s a
-> Text
-> (a -> Bool)
-> (a -> a)
-> OptionButtonCfg s e a
-> Widget s e
makeOptionButton forall s a. HasToggleBtnOnStyle s a => Lens' s a
L.toggleBtnOnStyle forall s a. HasToggleBtnOffStyle s a => Lens' s a
L.toggleBtnOffStyle
widget :: Widget s e
widget = forall {s} {e}.
WidgetData s Bool
-> Text
-> (Bool -> Bool)
-> (Bool -> Bool)
-> OptionButtonCfg s e Bool
-> Widget s e
makeWithStyle WidgetData s Bool
widgetData Text
caption forall a. a -> a
id Bool -> Bool
not ToggleButtonCfg s e
config
toggleButtonNode :: WidgetNode s e
toggleButtonNode = forall s e. WidgetType -> Widget s e -> WidgetNode s e
defaultWidgetNode WidgetType
"toggleButton" Widget s e
widget
forall a b. a -> (a -> b) -> b
& forall s a. HasInfo s a => Lens' s a
L.info forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s a. HasFocusable s a => Lens' s a
L.focusable forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool
True