From 3d9fe7f4613f0f1df3842e838d6ed9a871fd40bc Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 19 Jan 2023 10:07:04 -0700 Subject: [PATCH] Add functions to NAT DummyUI and CLI --- src/nat/CLI.hx | 3 +++ src/nat/CLI.kiss | 44 +++++++++++++++++++++++++++++++++----------- src/test/DummyUI.hx | 7 +++++++ test.sh | 3 ++- 4 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/nat/CLI.hx b/src/nat/CLI.hx index 633f316..aeb59ea 100644 --- a/src/nat/CLI.hx +++ b/src/nat/CLI.hx @@ -4,6 +4,9 @@ import kiss.Prelude; import kiss.List; import sys.FileSystem; import nat.ArchiveController; +import nat.systems.PlaygroundSystem; +import nat.components.*; +import haxe.ds.Option; using StringTools; diff --git a/src/nat/CLI.kiss b/src/nat/CLI.kiss index 08f321a..3639958 100644 --- a/src/nat/CLI.kiss +++ b/src/nat/CLI.kiss @@ -1,16 +1,17 @@ // External programs can load Lib.kiss with (loadFrom "nat-archive-tool" "src/nat/Lib.kiss") (load "Lib.kiss") -(let [[archiveDir] (Sys.args) - controller - (new ArchiveController - (new Archive archiveDir) - (new CLI))] - (loop - (Sys.print ">> ") - (let [command - (.trim (.toString (.readLine (Sys.stdin))))] - (controller.tryRunCommand command)))) +(let [[archiveDir] (Sys.args)] + (unless (= "_TEST_" archiveDir) + (let [controller + (new ArchiveController + (new Archive archiveDir) + (new CLI))] + (loop + (Sys.print ">> ") + (let [command + (.trim (.toString (.readLine (Sys.stdin))))] + (controller.tryRunCommand command)))))) (prop &mut :ArchiveController controller) (prop :kiss_tools.KeyShortcutHandler shortcutHandler null) @@ -26,7 +27,7 @@ {(resolve entered) (break)})))) -(method :Void enterNumber [prompt :Float->Void resolve min max &opt inStepsOf] +(method :Void enterNumber [prompt :Float->Void resolve :Float min :Float max &opt :Float inStepsOf] (Sys.print "$prompt ") (loop (let [entered (Std.parseFloat (.toString (.readLine (Sys.stdin))))] @@ -95,3 +96,24 @@ (method :Void onSelectionChanged [:Array selectedEntries :Array _] (print "Selected:") (controller.PrintSelectedEntries selectedEntries)) + +(method :Void chooseBetweenStrings [prompt :Array choices :String->Void resolve] + (print prompt) + (doFor [idx choice] (enumerate choices) + (print "$(+ idx 1). $choice")) + (enterNumber "Choice" ->num (resolve (nth choices (- (Std.int num) 1))) 1 choices.length 1)) + +(defAlias &ident neg Math.NEGATIVE_INFINITY) +(defAlias &ident pos Math.POSITIVE_INFINITY) +(method :Void choosePosition [prompt :Position->Void resolve] + (enterNumber "x" ->x (enterNumber "y" ->y (enterNumber "z" ->z (resolve (objectWith x y z)) neg pos) neg pos) neg pos)) + +(method :Option cursorPosition [] None) + +(method :Void showPrefixMap [:Map map] + (doFor =>key thing map + (print "$key - $thing"))) + +(method :Void hidePrefixMap []) + +(method :PlaygroundSystem playgroundSystem [] null) \ No newline at end of file diff --git a/src/test/DummyUI.hx b/src/test/DummyUI.hx index d79f0bb..3f04cf0 100644 --- a/src/test/DummyUI.hx +++ b/src/test/DummyUI.hx @@ -32,6 +32,10 @@ class DummyUI implements ArchiveUI { resolve([]); } + public function chooseBetweenStrings(prompt:String, choices:Array, resolve:String->Void) { + resolve(choices[0]); + } + public function handleChanges(archive:Archive, changeSet:ChangeSet) {} public function displayMessage(message:String) {} @@ -45,6 +49,9 @@ class DummyUI implements ArchiveUI { public function cursorPosition():Option { return None; }; + public function choosePosition(prompt:String, resolve:Position->Void) { + resolve({x: 0, y: 0, z: 0}); + } public function playgroundSystem():Null { return null; } diff --git a/test.sh b/test.sh index e81b3d2..0ed00d2 100755 --- a/test.sh +++ b/test.sh @@ -5,4 +5,5 @@ haxe test.hxml py.hxml && haxe test.hxml js.hxml && haxe test.hxml cpp.hxml && -haxe test.hxml --interp +haxe test.hxml --interp && +haxelib run nat-archive-tool _TEST_ \ No newline at end of file