lhae-0.0.3: src/Controller/Menu/Table/Add.hs
module Controller.Menu.Table.Add (columnEventHandler,rowEventHandler)
where
import Data.List (intercalate)
import Controller (Controller,onView)
import Controller.Grid (addRows,addColumns,addNRows,addNColumns)
import View.Dialog.Complex (Layout (..),Widget (..),Modifier (..)
,showSimpleDialog,cancelButton)
import Util (breakAt)
import I18n (__)
data AddBy = N | Labels
data Parameters = Parameters { addBy :: AddBy
, n :: Int
, labels :: [String]}
columnEventHandler :: Controller ()
columnEventHandler = do
result <- onView $ showSimpleDialog (__ "Add columns")
(dialog $ __ "Add columns by") $ Parameters N 0 []
case result of
Nothing -> return ()
Just (Parameters {addBy=N, n=n}) -> addNColumns n
Just (Parameters {addBy=Labels, labels=labels}) -> addColumns labels
rowEventHandler :: Controller ()
rowEventHandler = do
result <- onView $ showSimpleDialog (__ "Add rows")
(dialog $ __ "Add rows by") $ Parameters N 0 []
case result of
Nothing -> return ()
Just (Parameters {addBy=N, n=n}) -> addNRows n
Just (Parameters {addBy=Labels, labels=labels}) -> addRows labels
dialog :: String -> Layout Parameters ()
dialog radioBoxCaption =
let setLabels p labels = p {labels = breakAt ',' labels}
getLabels = intercalate "," . labels
setAddBy p 0 = p {addBy = N}
setAddBy p 1 = p {addBy = Labels}
getAddBy p = case addBy p of N -> 0; Labels -> 1
setN p n = p {n = n}
in
Modifier Margin $ Column
[ Row [ Widget $ RadioBox radioBoxCaption
[__ "Number \"n\"",__ "Labels \"label1[,label2,...]\""]
getAddBy setAddBy
, Column [ Widget $ Spinner 0 maxBound n setN
, Widget $ TextEntry getLabels setLabels]]
, Modifier Center $ Row [ Widget $ DefaultButton (__ "&Add") ()
, cancelButton]]