From c17c573638baff49466a273abf556fab469de776 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Tue, 24 Sep 2024 21:54:19 +0100 Subject: [PATCH] add new field to app type, to distinguish between modes (one mode for normal insertion/deleteion, another mode for saving, etc.) --- dotscape | Bin 1049312 -> 1049312 bytes functional-core/app/app-init.sml | 3 +- functional-core/app/app-type.sml | 10 ++++-- functional-core/app/app-with.sml | 56 +++++++++++++++++++++---------- 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/dotscape b/dotscape index dd33a02d6ab1c5b4365db60eb521074fdb5e1b95..3b37518260dc3a745536db19096a5feef8ec8f94 100755 GIT binary patch delta 23658 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 diff --git a/functional-core/app/app-init.sml b/functional-core/app/app-init.sml index 0624581..ca9856e 100644 --- a/functional-core/app/app-init.sml +++ b/functional-core/app/app-init.sml @@ -20,7 +20,8 @@ struct val xClickPoints = ClickPoints.generate (wStart, wFinish, numClickPoints) val yClickPoints = ClickPoints.generate (hStart, hFinish, numClickPoints) in - { triangles = [] + { mode = AppType.NORMAL_MODE + , triangles = [] , triangleStage = NO_TRIANGLE , windowWidth = windowWidth , windowHeight = windowHeight diff --git a/functional-core/app/app-type.sml b/functional-core/app/app-type.sml index f6044bb..438d399 100644 --- a/functional-core/app/app-type.sml +++ b/functional-core/app/app-type.sml @@ -1,5 +1,7 @@ signature APP_TYPE = sig + datatype app_mode = NORMAL_MODE | SAVE_MODE + datatype triangle_stage = NO_TRIANGLE | FIRST of {x1: Real32.real, y1: Real32.real} @@ -16,7 +18,8 @@ sig } type app_type = - { triangles: triangle list + { mode: app_mode + , triangles: triangle list , triangleStage: triangle_stage , windowWidth: int , windowHeight: int @@ -35,6 +38,8 @@ end structure AppType :> APP_TYPE = struct + datatype app_mode = NORMAL_MODE | SAVE_MODE + type triangle = { x1: Real32.real , y1: Real32.real @@ -59,7 +64,8 @@ struct {x1: Real32.real, y1: Real32.real, x2: Real32.real, y2: Real32.real} type app_type = - { triangles: triangle list + { mode: app_mode + , triangles: triangle list , triangleStage: triangle_stage , windowWidth: int , windowHeight: int diff --git a/functional-core/app/app-with.sml b/functional-core/app/app-with.sml index e2e6ab8..ce712f7 100644 --- a/functional-core/app/app-with.sml +++ b/functional-core/app/app-with.sml @@ -64,6 +64,7 @@ struct let val { triangleStage = _ + , mode , triangles , numClickPoints , xClickPoints @@ -84,6 +85,7 @@ struct { triangleStage = newTriangleStage , undo = newUndo , redo = [] + , mode = mode , triangles = triangles , numClickPoints = numClickPoints , xClickPoints = xClickPoints @@ -103,7 +105,8 @@ struct app_type = let val - { triangles + { mode + , triangles , triangleStage = _ , numClickPoints , xClickPoints @@ -123,7 +126,8 @@ struct val newTriangles = newTriangle :: triangles val newUndo = newUndoHd :: undo in - { triangleStage = NO_TRIANGLE + { mode = mode + , triangleStage = NO_TRIANGLE , triangles = newTriangles , undo = newUndo , redo = [] @@ -143,7 +147,8 @@ struct fun arrowX (app: app_type, arrowX) = let val - { xClickPoints + { mode + , xClickPoints , yClickPoints , numClickPoints , windowWidth @@ -159,7 +164,8 @@ struct , arrowY } = app in - { xClickPoints = xClickPoints + { mode = mode + , xClickPoints = xClickPoints , yClickPoints = yClickPoints , numClickPoints = numClickPoints , triangles = triangles @@ -179,7 +185,8 @@ struct fun arrowY (app: app_type, arrowY) = let val - { xClickPoints + { mode + , xClickPoints , yClickPoints , numClickPoints , windowWidth @@ -195,7 +202,8 @@ struct , arrowY = _ } = app in - { xClickPoints = xClickPoints + { mode = mode + , xClickPoints = xClickPoints , yClickPoints = yClickPoints , numClickPoints = numClickPoints , triangles = triangles @@ -217,7 +225,8 @@ struct app_type = let val - { xClickPoints = _ + { mode + , xClickPoints = _ , yClickPoints = _ , numClickPoints , windowWidth = _ @@ -236,7 +245,8 @@ struct val xClickPoints = ClickPoints.generate (wStart, wFinish, numClickPoints) val yClickPoints = ClickPoints.generate (hStart, hFinish, numClickPoints) in - { xClickPoints = xClickPoints + { mode = mode + , xClickPoints = xClickPoints , yClickPoints = yClickPoints , numClickPoints = numClickPoints , triangles = triangles @@ -279,7 +289,8 @@ struct fun mousePosition (app: app_type, mouseX, mouseY) = let val - { mouseX = _ + { mode + , mouseX = _ , mouseY = _ , triangles , triangleStage @@ -295,7 +306,8 @@ struct , arrowY } = app in - { mouseX = mouseX + { mode = mode + , mouseX = mouseX , mouseY = mouseY , triangles = triangles , triangleStage = triangleStage @@ -316,7 +328,8 @@ struct fun undo (app: app_type, newTriangleStage, newTriangles, newRedoHd) = let val - { triangleStage = _ + { mode + , triangleStage = _ , triangles = _ , numClickPoints , xClickPoints @@ -339,7 +352,8 @@ struct val newRedo = newRedoHd :: redo in - { triangleStage = newTriangleStage + { mode = mode + , triangleStage = newTriangleStage , triangles = newTriangles , undo = newUndo , redo = newRedo @@ -360,7 +374,8 @@ struct fun redo (app: app_type, newTriangleStage, newTriangles, newUndoHd) = let val - { triangleStage = _ + { mode + , triangleStage = _ , triangles = _ , numClickPoints , xClickPoints @@ -382,7 +397,8 @@ struct hd :: tl => tl | empty => empty in - { triangleStage = newTriangleStage + { mode = mode + , triangleStage = newTriangleStage , triangles = newTriangles , undo = newUndo , redo = newRedo @@ -402,7 +418,8 @@ struct fun graphVisibility (app: app_type, shouldShowGraph) = let val - { triangleStage + { mode + , triangleStage , triangles , numClickPoints , xClickPoints @@ -418,7 +435,8 @@ struct , showGraph = _ } = app in - { showGraph = shouldShowGraph + { mode = mode + , showGraph = shouldShowGraph , triangleStage = triangleStage , triangles = triangles , undo = undo @@ -438,7 +456,8 @@ struct fun useTriangles (app: app_type, triangles) = let val - { xClickPoints + { mode + , xClickPoints , yClickPoints , numClickPoints , windowWidth @@ -456,7 +475,8 @@ struct val triangleStage = NO_TRIANGLE in - { triangleStage = triangleStage + { mode = mode + , triangleStage = triangleStage , triangles = triangles , undo = [] , redo = []