structure CommonUpdate = struct open AppType open DrawMessage open FileMessage open InputMessage open UpdateMessage fun resizeWindow (model, width, height, dots) = let val { squares , canvasWidth , canvasHeight , showGraph , arrowX , arrowY , xClickPoints , yClickPoints , ... } = model val maxSide = Int.max (canvasWidth, canvasHeight) val squares = CollisionTree.toTriangles ( width , height , squares , maxSide , canvasWidth , canvasHeight , xClickPoints , yClickPoints ) val graphLines = if showGraph then GraphLines.generate model else Vector.fromList [] val drawMsg = RESIZE_SQUARES_DOTS_AND_GRAPH {squares = squares, graphLines = graphLines, dots = dots} val drawMsg = [DRAW drawMsg] in (model, drawMsg) end fun getSaveSquaresMsg (model: app_type) = let val {canvasWidth, canvasHeight, squares, ...} = model val str = CollisionTree.toSaveString (squares, canvasWidth, canvasHeight) val msg = SAVE_SQUARES str in (model, [FILE msg]) end fun getLoadSquaresMsg model = (model, [FILE LOAD_SQUARES]) fun getExportSquaresMsg (model: app_type) = let val {squares, canvasWidth, canvasHeight, ...} = model val exportString = CollisionTree.toExportString (squares, canvasWidth, canvasHeight) val msg = EXPORT_SQUARES exportString in (model, [FILE msg]) end fun getCollisionMsg (model: app_type) = let val {squares, canvasWidth, canvasHeight, modalNum, ...} = model val exportString = CollisionTree.toCollisionString (squares, canvasWidth, canvasHeight, modalNum) val msg = EXPORT_COLLISIONS exportString val model = AppWith.modalNum (model, 0) in (model, [FILE msg]) end (* unimplemented *) fun useSquaresInNormalMode (model, squares) = (model, []) fun squaresLoadError model = (model, []) end