progress for navigqation within file browser
This commit is contained in:
@@ -391,6 +391,33 @@ struct
|
|||||||
in (model, [])
|
in (model, [])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fun updateNormalMode (model: app_type, inputMsg) =
|
||||||
|
case inputMsg of
|
||||||
|
MOUSE_MOVE {x = mouseX, y = mouseY} =>
|
||||||
|
let val model = AppWith.mousePosition (model, mouseX, mouseY)
|
||||||
|
in mouseMoveOrRelease model
|
||||||
|
end
|
||||||
|
| MOUSE_LEFT_RELEASE => mouseMoveOrRelease model
|
||||||
|
| MOUSE_LEFT_CLICK => mouseLeftClick model
|
||||||
|
| RESIZE_WINDOW {width, height} => resizeWindow (model, width, height)
|
||||||
|
| UNDO_ACTION => undoAction model
|
||||||
|
| REDO_ACTION => redoAction model
|
||||||
|
| KEY_G => toggleGraph model
|
||||||
|
| KEY_CTRL_S => getSaveTrianglesMsg model
|
||||||
|
| KEY_CTRL_L => getLoadTrianglesMsg model
|
||||||
|
| KEY_CTRL_E => getExportTrianglesMsg model
|
||||||
|
| KEY_CTRL_O => enterBrowseMode model
|
||||||
|
| ARROW_UP => moveArrowUp model
|
||||||
|
| ARROW_LEFT => moveArrowLeft model
|
||||||
|
| ARROW_RIGHT => moveArrowRight model
|
||||||
|
| ARROW_DOWN => moveArrowDown model
|
||||||
|
| KEY_ENTER => enterOrSpaceCoordinates model
|
||||||
|
| KEY_SPACE => enterOrSpaceCoordinates model
|
||||||
|
| USE_TRIANGLES triangles => useTriangles (model, triangles)
|
||||||
|
| TRIANGLES_LOAD_ERROR => trianglesLoadError model
|
||||||
|
| FILE_BROWSER_AND_PATH {fileBrowser, path} =>
|
||||||
|
handleFileBrowserAndPathInNormalMode (model, fileBrowser, path)
|
||||||
|
|
||||||
fun stringToVec
|
fun stringToVec
|
||||||
(pos, str, acc, startX, startY, windowWidth, windowHeight, r, g, b) =
|
(pos, str, acc, startX, startY, windowWidth, windowHeight, r, g, b) =
|
||||||
if pos = String.size str then
|
if pos = String.size str then
|
||||||
@@ -467,12 +494,9 @@ struct
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
fun handleFileBrowserAndPath (model, fileBrowser, path) =
|
fun redrawFileBrowser (model: app_type) =
|
||||||
let
|
let
|
||||||
val model = AppWith.fileBrowserAndPath (model, fileBrowser, path)
|
val {windowWidth, windowHeight, fileBrowser, fileBrowserIdx, ...} = model
|
||||||
|
|
||||||
(* create vector indicating text to redraw *)
|
|
||||||
val {windowWidth, windowHeight, fileBrowserIdx, ...} = model
|
|
||||||
val ww = Real32.fromInt windowWidth
|
val ww = Real32.fromInt windowWidth
|
||||||
val wh = Real32.fromInt windowHeight
|
val wh = Real32.fromInt windowHeight
|
||||||
val textVec = buildFileBrowserText
|
val textVec = buildFileBrowserText
|
||||||
@@ -483,35 +507,54 @@ struct
|
|||||||
(model, [DRAW drawMsg])
|
(model, [DRAW drawMsg])
|
||||||
end
|
end
|
||||||
|
|
||||||
fun updateNormalMode (model: app_type, inputMsg) =
|
fun handleFileBrowserAndPathInBrowseMode (model, fileBrowser, path) =
|
||||||
|
let val model = AppWith.fileBrowserAndPath (model, fileBrowser, path)
|
||||||
|
in redrawFileBrowser model
|
||||||
|
end
|
||||||
|
|
||||||
|
fun browseModeArrowUp (model: app_type) =
|
||||||
|
let
|
||||||
|
val {fileBrowser, fileBrowserIdx, ...} = model
|
||||||
|
|
||||||
|
val fileBrowserIdx =
|
||||||
|
if fileBrowserIdx > 0 then fileBrowserIdx - 1
|
||||||
|
else Int.max (0, Vector.length fileBrowser - 1)
|
||||||
|
|
||||||
|
val model = AppWith.fileBrowserIdx (model, fileBrowserIdx)
|
||||||
|
in
|
||||||
|
redrawFileBrowser model
|
||||||
|
end
|
||||||
|
|
||||||
|
fun browseModeArrowDown (model: app_type) =
|
||||||
|
let
|
||||||
|
val {fileBrowser, fileBrowserIdx, ...} = model
|
||||||
|
|
||||||
|
val fileBrowserIdx =
|
||||||
|
if fileBrowserIdx = Vector.length fileBrowser - 1 then 0
|
||||||
|
else fileBrowserIdx + 1
|
||||||
|
|
||||||
|
val model = AppWith.fileBrowserIdx (model, fileBrowserIdx)
|
||||||
|
in
|
||||||
|
redrawFileBrowser model
|
||||||
|
end
|
||||||
|
|
||||||
|
fun updateBrowseMode (model: app_type, inputMsg) =
|
||||||
case inputMsg of
|
case inputMsg of
|
||||||
MOUSE_MOVE {x = mouseX, y = mouseY} =>
|
ARROW_UP => browseModeArrowUp model
|
||||||
let val model = AppWith.mousePosition (model, mouseX, mouseY)
|
| ARROW_DOWN => browseModeArrowDown model
|
||||||
in mouseMoveOrRelease model
|
|
||||||
end
|
|
||||||
| MOUSE_LEFT_RELEASE => mouseMoveOrRelease model
|
|
||||||
| MOUSE_LEFT_CLICK => mouseLeftClick model
|
|
||||||
| RESIZE_WINDOW {width, height} => resizeWindow (model, width, height)
|
|
||||||
| UNDO_ACTION => undoAction model
|
|
||||||
| REDO_ACTION => redoAction model
|
|
||||||
| KEY_G => toggleGraph model
|
|
||||||
| KEY_CTRL_S => getSaveTrianglesMsg model
|
|
||||||
| KEY_CTRL_L => getLoadTrianglesMsg model
|
|
||||||
| KEY_CTRL_E => getExportTrianglesMsg model
|
|
||||||
| KEY_CTRL_O => enterBrowseMode model
|
|
||||||
| ARROW_UP => moveArrowUp model
|
|
||||||
| ARROW_LEFT => moveArrowLeft model
|
|
||||||
| ARROW_RIGHT => moveArrowRight model
|
|
||||||
| ARROW_DOWN => moveArrowDown model
|
|
||||||
| KEY_ENTER => enterOrSpaceCoordinates model
|
|
||||||
| KEY_SPACE => enterOrSpaceCoordinates model
|
|
||||||
| USE_TRIANGLES triangles => useTriangles (model, triangles)
|
|
||||||
| TRIANGLES_LOAD_ERROR => trianglesLoadError model
|
| TRIANGLES_LOAD_ERROR => trianglesLoadError model
|
||||||
|
(* todo:
|
||||||
|
| ARROW_LEFT =>
|
||||||
|
| ARROW_RIGHT =>
|
||||||
|
| KEY_ENTER =>
|
||||||
|
| KEY_SPACE =>
|
||||||
|
*)
|
||||||
| FILE_BROWSER_AND_PATH {fileBrowser, path} =>
|
| FILE_BROWSER_AND_PATH {fileBrowser, path} =>
|
||||||
handleFileBrowserAndPath (model, fileBrowser, path)
|
handleFileBrowserAndPathInBrowseMode (model, fileBrowser, path)
|
||||||
|
| _ => (model, [])
|
||||||
|
|
||||||
fun update (model: app_type, inputMsg) =
|
fun update (model: app_type, inputMsg) =
|
||||||
case #mode model of
|
case #mode model of
|
||||||
NORMAL_MODE => updateNormalMode (model, inputMsg)
|
NORMAL_MODE => updateNormalMode (model, inputMsg)
|
||||||
| BROWSE_MODE => updateNormalMode (model, inputMsg)
|
| BROWSE_MODE => updateBrowseMode (model, inputMsg)
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user