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 ]