lhae-0.0.3: src/Run.hs
module Run (program)
where
import Control.Monad (when)
import Graphics.UI.WX (Prop ((:=)),on)
import qualified Graphics.UI.WX as WX
import qualified Graphics.UI.WXCore as WXC
import Config (Config,initI18n)
import I18n (__)
import qualified Model
import qualified View
import qualified Controller
import qualified View.Modes as VMode
import qualified View.Component.TextWindow as VTextWindow
import qualified View.Component.Notebook as VNotebook
import qualified Controller.Grid as CGrid
import qualified Controller.FormulaInput as CFormulaInput
import qualified Controller.SaveConfig as CSaveConfig
import qualified Controller.Menu.File.NewClose as CFileNewClose
import qualified Controller.Menu.File.Open as CFileOpen
import qualified Controller.Menu.File.Save as CFileSave
import qualified Controller.Menu.File.Import.Csv as CFileImportCsv
import qualified Controller.Menu.File.Export.Image as CFileExportImage
import qualified Controller.Menu.File.Export.Diagram.BarChart as CFileExportBarChart
import qualified Controller.Menu.File.Export.Diagram.BoxPlot as CFileExportBoxPlot
import qualified Controller.Menu.Table.Add as CAdd
import qualified Controller.Menu.Table.Copy as CCopy
import qualified Controller.Menu.Table.Delete as CDelete
import qualified Controller.Menu.Table.Transpose as CTranspose
import qualified Controller.Menu.Table.Rename as CRename
import qualified Controller.Menu.Table.Filter as CFilter
import qualified Controller.Menu.Statistics.FrequencyDistribution as CStatsFD
import qualified Controller.Menu.Statistics.Descriptive as CDescriptive
import qualified Controller.Menu.Statistics.Pivot as CPivot
program :: Config -> IO ()
program config = do
initI18n config
frame <- WX.frame [WX.text := "lhae"]
formulaInput <- VTextWindow.newSingleLine frame []
notebook <- VNotebook.new frame
current <- WX.varCreate Nothing
let view = View.View frame formulaInput notebook current
model <- Model.new
ctrl <- Controller.new config model view
let ifGridOpen eventHandler = do
opened <- View.isGridOpen view
when opened $ Controller.withCtrlData eventHandler ctrl
call eventHandler = Controller.withCtrlData eventHandler ctrl
windowEH <- WXC.windowGetEventHandler notebook --frame
notebookId <- WXC.windowGetId notebook
WXC.evtHandlerOnEvent windowEH notebookId notebookId
[WXC.wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED] ()
(\_ -> return ()) (\_ -> call CGrid.changePageEventHandler)
WX.set formulaInput
[ WX.processEnter := True
, WX.enabled := False
, on WX.command := do call CFormulaInput.eventHandler
VMode.gridMode view
, on WX.focus :=
\onFocus -> when (not onFocus) $ VMode.gridMode view
]
fileMenu <- WX.menuPane [WX.text := "&" ++ (__ "File")]
fileNew <- WX.menuItem fileMenu [WX.text := "&" ++ (__ "New") ++ "\tCtrl+N"]
fileOpen <- WX.menuItem fileMenu [WX.text := "&" ++ (__ "Open") ++ " ...\tCtrl+O"]
fileImport <- WX.menuPane [WX.text := "&" ++ (__ "Import")]
_ <- WX.menuSub fileMenu fileImport []
fileImportCsv <- WX.menuItem fileImport [WX.text := (__ "From CSV file") ++ " ..."]
WX.menuLine fileMenu
fileSaveAs <- WX.menuItem fileMenu [WX.text := (__ "Save as") ++ " ..."]
fileSave <- WX.menuItem fileMenu [WX.text := "&" ++ (__ "Save") ++ "\tCtrl+S"]
fileExport <- WX.menuPane [WX.text := "&" ++ (__ "Export")]
_ <- WX.menuSub fileMenu fileExport []
fileExportImage <- WX.menuItem fileExport [WX.text := (__ "As image") ++ " ..."]
fileExportBarChart <- WX.menuItem fileExport [WX.text := (__ "As bar chart") ++ " ..."]
fileExportBoxPlot <- WX.menuItem fileExport [WX.text := (__ "As box plot") ++ " ..."]
WX.menuLine fileMenu
fileClose <- WX.menuItem fileMenu [WX.text := "&" ++ (__ "Close") ++ "\tCtrl+C"]
fileCloseAll <- WX.menuItem fileMenu [WX.text := (__ "Close all")]
fileQuit <- WX.menuQuit fileMenu [WX.text := "&" ++ (__ "Quit") ++ "\tCtrl+Q"]
tableMenu <- WX.menuPane [WX.text := "&" ++ (__ "Table")]
tableAdd <- WX.menuPane [WX.text := (__ "Add")]
_ <- WX.menuSub tableMenu tableAdd []
tableAddColumn <- WX.menuItem tableAdd [WX.text := (__ "Columns") ++ " ..."]
tableAddRow <- WX.menuItem tableAdd [WX.text := (__ "Rows") ++ " ..."]
tableCopy <- WX.menuPane [WX.text := (__ "Copy")]
_ <- WX.menuSub tableMenu tableCopy []
tableCopyColumn <- WX.menuItem tableCopy [WX.text := (__ "Columns") ++ " ..."]
tableCopyRow <- WX.menuItem tableCopy [WX.text := (__ "Rows") ++ " ..."]
tableCopyFormula <- WX.menuItem tableCopy [WX.text := (__ "Formula") ++ " ..."]
tableDelete <- WX.menuPane [WX.text := (__ "Delete")]
_ <- WX.menuSub tableMenu tableDelete []
tableDeleteColumn <- WX.menuItem tableDelete [WX.text := (__ "Columns") ++ " ..."]
tableDeleteRow <- WX.menuItem tableDelete [WX.text := (__ "Rows") ++ " ..."]
tableTranspose <- WX.menuPane [WX.text := (__ "Transpose")]
_ <- WX.menuSub tableMenu tableTranspose []
tableTransposeTable <- WX.menuItem tableTranspose [WX.text := (__ "Table")]
tableTransposeColumn <- WX.menuItem tableTranspose [WX.text := (__ "Columns") ++ " ..."]
tableTransposeRow <- WX.menuItem tableTranspose [WX.text := (__ "Rows") ++ " ..."]
tableRename <- WX.menuPane [WX.text := (__ "Rename")]
_ <- WX.menuSub tableMenu tableRename []
tableRenameColumn <- WX.menuItem tableRename [WX.text := (__ "Column") ++ " ..."]
tableRenameRow <- WX.menuItem tableRename [WX.text := (__ "Row") ++ " ..."]
tableFilter <- WX.menuPane [WX.text := (__ "Filter")]
_ <- WX.menuSub tableMenu tableFilter []
tableFilterRow <- WX.menuItem tableFilter [WX.text := (__ "Rows") ++ " ..."]
tableFilterColumn <- WX.menuItem tableFilter [WX.text := (__ "Columns") ++ " ..."]
statisticsMenu <- WX.menuPane [WX.text := "&" ++ (__ "Statistics")]
statsFreqDist <- WX.menuItem statisticsMenu [WX.text := (__ "Frequency Distribution") ++ " ..."]
statsDescriptive <- WX.menuItem statisticsMenu [WX.text := (__ "Descriptive") ++ " ..."]
statsPivot <- WX.menuItem statisticsMenu [WX.text := (__ "Pivot table") ++ " ..."]
WX.set frame
[ WX.menuBar := [fileMenu,tableMenu,statisticsMenu]
, WX.layout := WX.column 0
[ WX.hfill $ WX.widget formulaInput
, WX.fill $ WX.widget notebook
]
, on (WX.menu fileNew) := call CFileNewClose.newEventHandler
, on (WX.menu fileExportBoxPlot) := ifGridOpen CFileExportBoxPlot.eventHandler
, on (WX.menu fileOpen) := call CFileOpen.eventHandler
, on (WX.menu fileSaveAs) := ifGridOpen CFileSave.saveAsEventHandler
, on (WX.menu fileSave) := ifGridOpen CFileSave.saveEventHandler
, on (WX.menu fileImportCsv) := call CFileImportCsv.eventHandler
, on (WX.menu fileExportImage) := ifGridOpen CFileExportImage.eventHandler
, on (WX.menu fileExportBarChart) := ifGridOpen CFileExportBarChart.eventHandler
, on (WX.menu fileExportBoxPlot) := ifGridOpen CFileExportBoxPlot.eventHandler
, on (WX.menu fileClose) := ifGridOpen CFileNewClose.closeEventHandler
, on (WX.menu fileCloseAll) := ifGridOpen CFileNewClose.closeAllEventHandler
, on (WX.menu fileQuit) := WX.close frame
, on (WX.menu tableAddColumn) := ifGridOpen CAdd.columnEventHandler
, on (WX.menu tableAddRow) := ifGridOpen CAdd.rowEventHandler
, on (WX.menu tableCopyColumn) := ifGridOpen CCopy.columnEventHandler
, on (WX.menu tableCopyRow) := ifGridOpen CCopy.rowEventHandler
, on (WX.menu tableCopyFormula) := ifGridOpen CCopy.formulaEventHandler
, on (WX.menu tableDeleteColumn) := ifGridOpen CDelete.columnEventHandler
, on (WX.menu tableDeleteRow) := ifGridOpen CDelete.rowEventHandler
, on (WX.menu tableTransposeColumn) := ifGridOpen CTranspose.columnEventHandler
, on (WX.menu tableTransposeRow) := ifGridOpen CTranspose.rowEventHandler
, on (WX.menu tableTransposeTable) := ifGridOpen CTranspose.tableEventHandler
, on (WX.menu tableRenameColumn) := ifGridOpen CRename.columnEventHandler
, on (WX.menu tableRenameRow) := ifGridOpen CRename.rowEventHandler
, on (WX.menu tableFilterColumn) := ifGridOpen CFilter.columnEventHandler
, on (WX.menu tableFilterRow) := ifGridOpen CFilter.rowEventHandler
, on (WX.menu statsFreqDist) := ifGridOpen CStatsFD.eventHandler
, on (WX.menu statsDescriptive) := ifGridOpen CDescriptive.eventHandler
, on (WX.menu statsPivot) := ifGridOpen CPivot.eventHandler
, on WX.closing := do ifGridOpen CFileNewClose.closeAllEventHandler
call CSaveConfig.eventHandler
WX.propagateEvent
]