module Controller.Menu.Table.Rename ( columnEventHandler,columnEventHandlerWith , rowEventHandler,rowEventHandlerWith) where import Controller (Controller,onView,onGridView) import Controller.Dialog (noColumnsSelected,noRowsSelected) import Controller.Grid (updateRowLabel,updateColumnLabel) import View.Component.Grid (getRowLabel,getColumnLabel ,getRowLabels,getColumnLabels) import View.Dialog.Complex (Layout (..),Widget (..),Modifier (..) ,showSimpleDialog,cancelButton) import I18n (__) data Parameters = Parameters { from :: Maybe Int , to :: String} columnEventHandler :: Controller () columnEventHandler = columnEventHandlerBase Nothing columnEventHandlerWith :: Int -> Controller () columnEventHandlerWith = columnEventHandlerBase . Just columnEventHandlerBase :: Maybe Int -> Controller () columnEventHandlerBase col = do labels <- onGridView getColumnLabels initTo <- maybe (return "") (onGridView . getColumnLabel) col result <- onView $ showSimpleDialog (__ "Rename column") (dialog (__ "Column") labels) $ Parameters col initTo case result of Nothing -> return () Just (Parameters {from = Nothing}) -> do noColumnsSelected return () Just (Parameters {from = Just from,to = to}) -> updateColumnLabel from to rowEventHandler :: Controller () rowEventHandler = rowEventHandlerBase Nothing rowEventHandlerWith :: Int -> Controller () rowEventHandlerWith = rowEventHandlerBase . Just rowEventHandlerBase :: Maybe Int -> Controller () rowEventHandlerBase row = do labels <- onGridView getRowLabels initTo <- maybe (return "") (onGridView . getRowLabel) row result <- onView $ showSimpleDialog (__ "Rename row") (dialog (__ "Row") labels) $ Parameters row initTo case result of Nothing -> return () Just (Parameters {from = Nothing}) -> do noRowsSelected return () Just (Parameters {from = Just from,to = to}) -> updateRowLabel from to dialog :: String -> [String] -> Layout Parameters () dialog listCaption labels = let setFrom p f = p {from = f} setTo p t = p {to = t} listBox = SingleListBox labels from setFrom labelEntry = TextEntry to setTo in Modifier Margin $ Column [ Modifier (Boxed listCaption) $ Modifier HFill $ Widget listBox , Modifiers [Boxed $ __ "Label",HFill] $ FocusOn labelEntry , Modifier Center $ Row [ Widget $ DefaultButton (__ "&Rename") () , cancelButton]]