From 9d44589b9d11db03eb826354145f7ce4a25fc6d8 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Sun, 29 Sep 2024 12:32:11 +0100 Subject: [PATCH] add fileBrowserIdx field to track which item is selected in the browser --- dotscape | Bin 1116512 -> 1116512 bytes functional-core/app/app-init.sml | 1 + functional-core/app/app-type.sml | 2 + functional-core/app/app-with.sml | 72 ++++++++++++++++++++++++++++++- 4 files changed, 74 insertions(+), 1 deletion(-) diff --git a/dotscape b/dotscape index 2d06b444c5cb4d222f69c64fcb9427e4c657624a..9933dcaf77c8488a93bf880d44241e9efb4a1a46 100755 GIT binary patch delta 12353 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 OKm7V@r_`9|)c*xED`Zyy diff --git a/functional-core/app/app-init.sml b/functional-core/app/app-init.sml index d37ab10..e3011c4 100644 --- a/functional-core/app/app-init.sml +++ b/functional-core/app/app-init.sml @@ -37,6 +37,7 @@ struct , arrowY = 0 , openFilePath = "" , fileBrowser = Vector.fromList [] + , fileBrowserIdx = 0 } end diff --git a/functional-core/app/app-type.sml b/functional-core/app/app-type.sml index 22c692c..da00532 100644 --- a/functional-core/app/app-type.sml +++ b/functional-core/app/app-type.sml @@ -37,6 +37,7 @@ sig , arrowY: int , openFilePath: string , fileBrowser: file_browser_item vector + , fileBrowserIdx: int } end @@ -87,5 +88,6 @@ struct , arrowY: int , openFilePath: string , fileBrowser: file_browser_item vector + , fileBrowserIdx: int } end diff --git a/functional-core/app/app-with.sml b/functional-core/app/app-with.sml index dca62ed..89fd200 100644 --- a/functional-core/app/app-with.sml +++ b/functional-core/app/app-with.sml @@ -13,6 +13,8 @@ sig AppType.app_type * AppType.file_browser_item vector * string -> AppType.app_type + val fileBrowserIdx: AppType.app_type * int -> AppType.app_type + val arrowX: AppType.app_type * int -> AppType.app_type val arrowY: AppType.app_type * int -> AppType.app_type @@ -86,6 +88,7 @@ struct , arrowY = _ , openFilePath , fileBrowser + , fileBrowserIdx } = app val newUndo = newUndoHd :: undo @@ -107,6 +110,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -132,6 +136,7 @@ struct , arrowY = _ , openFilePath , fileBrowser + , fileBrowserIdx } = app val newTriangle = {x1 = x1, y1 = y1, x2 = x2, y2 = y2, x3 = x3, y3 = y3} @@ -155,6 +160,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -178,6 +184,7 @@ struct , arrowY , openFilePath , fileBrowser + , fileBrowserIdx } = app in { mode = mode @@ -197,6 +204,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -220,6 +228,7 @@ struct , arrowY = _ , openFilePath , fileBrowser + , fileBrowserIdx } = app in { mode = mode @@ -239,6 +248,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -264,6 +274,7 @@ struct , arrowY , openFilePath , fileBrowser + , fileBrowserIdx } = app val xClickPoints = ClickPoints.generate (wStart, wFinish, numClickPoints) @@ -286,6 +297,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -332,6 +344,7 @@ struct , arrowY , openFilePath , fileBrowser + , fileBrowserIdx } = app in { mode = mode @@ -351,6 +364,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -375,6 +389,7 @@ struct , arrowY , openFilePath , fileBrowser + , fileBrowserIdx } = app val newUndo = @@ -401,6 +416,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -425,6 +441,7 @@ struct , arrowY , openFilePath , fileBrowser + , fileBrowserIdx } = app val newUndo = newUndoHd :: undo @@ -450,6 +467,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -473,6 +491,7 @@ struct , showGraph = _ , openFilePath , fileBrowser + , fileBrowserIdx } = app in { mode = mode @@ -492,6 +511,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -515,6 +535,7 @@ struct , showGraph , openFilePath , fileBrowser + , fileBrowserIdx } = app in { mode = newMode @@ -534,6 +555,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -557,6 +579,7 @@ struct , triangleStage = _ , openFilePath , fileBrowser + , fileBrowserIdx } = app val triangleStage = NO_TRIANGLE @@ -578,6 +601,7 @@ struct , arrowY = arrowY , openFilePath = openFilePath , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx } end @@ -601,6 +625,7 @@ struct , arrowY , openFilePath = _ , fileBrowser = _ + , fileBrowserIdx = _ } = app in { mode = mode @@ -618,8 +643,53 @@ struct , mouseY = mouseY , arrowX = arrowX , arrowY = arrowY - , fileBrowser = fileBrowser , openFilePath = path + , fileBrowser = fileBrowser + , fileBrowserIdx = 0 + } + end + + fun fileBrowserIdx (app: app_type, newFileBrowserIdx) = + let + val + { mode + , xClickPoints + , yClickPoints + , numClickPoints + , windowWidth + , windowHeight + , triangles + , triangleStage + , undo + , redo + , showGraph + , mouseX + , mouseY + , arrowX + , arrowY + , openFilePath = openFilePath + , fileBrowser = fileBrowser + , fileBrowserIdx = _ + } = app + in + { mode = mode + , xClickPoints = xClickPoints + , yClickPoints = yClickPoints + , numClickPoints = numClickPoints + , triangles = triangles + , triangleStage = triangleStage + , windowWidth = windowWidth + , windowHeight = windowHeight + , undo = undo + , redo = redo + , showGraph = showGraph + , mouseX = mouseX + , mouseY = mouseY + , arrowX = arrowX + , arrowY = arrowY + , openFilePath = openFilePath + , fileBrowser = fileBrowser + , fileBrowserIdx = newFileBrowserIdx } end end