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]]