done with loading file into app (loaded triangles are visible, etc.)

This commit is contained in:
2024-08-29 05:38:58 +01:00
parent 2549703dc7
commit e69c6b42ef
6 changed files with 64 additions and 9 deletions

BIN
dotscape

Binary file not shown.

View File

@@ -214,6 +214,17 @@ struct
fun getLoadTriangleMsg model =
(model, FILE LOAD_TRIANGLES)
fun useTriangles (model, triangles) =
let
val model = AppWith.useTriangles (model, triangles)
val drawVec = Triangles.toVector model
val drawMsg = DRAW_TRIANGLES_AND_RESET_DOTS drawVec
in
(model, DRAW drawMsg)
end
fun trianglesLoadError model = (model, NO_MAILBOX)
fun update (model: app_type, inputMsg) =
case inputMsg of
MOUSE_MOVE {x = mouseX, y = mouseY} =>
@@ -228,4 +239,6 @@ struct
| KEY_G => toggleGraph model
| KEY_CTRL_S => getSaveTrianglesMsg model
| KEY_CTRL_L => getLoadTriangleMsg model
| USE_TRIANGLES triangles => useTriangles (model, triangles)
| TRIANGLES_LOAD_ERROR => trianglesLoadError model
end

View File

@@ -40,6 +40,8 @@ sig
* Real32.real
* (Real32.real * Real32.real)
-> AppType.app_type
val useTriangles: AppType.app_type * AppType.triangle list -> AppType.app_type
end
structure AppWith :> APP_WITH =
@@ -306,4 +308,36 @@ struct
, mouseY = mouseY
}
end
fun useTriangles (app: app_type, triangles) =
let
val
{ xClickPoints
, yClickPoints
, windowWidth
, windowHeight
, undo
, redo
, mouseX
, mouseY
, showGraph
, triangles = _
, triangleStage = _
} = app
val triangleStage = NO_TRIANGLE
in
{ triangleStage = triangleStage
, triangles = triangles
, undo = []
, redo = []
, showGraph = showGraph
, xClickPoints = xClickPoints
, yClickPoints = yClickPoints
, windowWidth = windowWidth
, windowHeight = windowHeight
, mouseX = mouseX
, mouseY = mouseY
}
end
end

View File

@@ -1,12 +1,13 @@
signature FILE_THREAD =
sig
val run: FileMessage.t Mailbox.mbox -> unit
val run: FileMessage.t Mailbox.mbox * InputMessage.t Mailbox.mbox -> unit
end
structure FileThread :> FILE_THREAD =
struct
open AppType
open FileMessage
open InputMessage
val filename = "a.dsc"
@@ -72,15 +73,18 @@ struct
end
| NONE => let val triangles = List.rev acc in OK triangles end
fun loadTriangles () =
fun loadTriangles inputMailbox =
let
val io = TextIO.openIn filename
val triangles = parse (io, [])
val _ = TextIO.closeIn io
val inputMsg =
case triangles of
OK triangles => USE_TRIANGLES triangles
| PARSE_ERROR => TRIANGLES_LOAD_ERROR
in
case triangles of
OK triangles => print "parse success\n"
| PARSE_ERROR => print "parse error\n"
Mailbox.send (inputMailbox, inputMsg)
end
fun helpSaveTriangles (triangles, io) =
@@ -114,14 +118,14 @@ struct
()
end
fun run fileMailbox =
fun run (fileMailbox, inputMailbox) =
let
val _ =
case Mailbox.recv fileMailbox of
SAVE_TRIANGLES triangles => saveTriangles triangles
| LOAD_TRIANGLES => loadTriangles ()
| LOAD_TRIANGLES => loadTriangles inputMailbox
| EXPORT_TRIANGLES triangles => ()
in
run fileMailbox
run (fileMailbox, inputMailbox)
end
end

View File

@@ -47,7 +47,7 @@ struct
, 0
))
val _ = CML.spawn (fn () => FileThread.run fileMailbox)
val _ = CML.spawn (fn () => FileThread.run (fileMailbox, inputMailbox))
in
()
end

View File

@@ -10,6 +10,8 @@ sig
| KEY_G
| KEY_CTRL_S
| KEY_CTRL_L
| USE_TRIANGLES of AppType.triangle list
| TRIANGLES_LOAD_ERROR
end
structure InputMessage :> INPUT_MESSAGE =
@@ -24,4 +26,6 @@ struct
| KEY_G
| KEY_CTRL_S
| KEY_CTRL_L
| USE_TRIANGLES of AppType.triangle list
| TRIANGLES_LOAD_ERROR
end