This commit is contained in:
2026-02-25 16:21:56 +09:00
parent fcf44f55a1
commit ae17d21f4f
2 changed files with 233 additions and 147 deletions
+7 -147
View File
@@ -322,7 +322,9 @@ clicked(State = #s{cons = {Consbook, Contracts}}, Name) ->
ok = tell(warning, "Inconcievable! No notebook page is selected!"),
State;
Index ->
Contract = lists:nth(Index + 1, Contracts),
#c{id = ConID, build = #{aaci := AACI}} = lists:nth(Index + 1, Contracts),
clicked2(State, Contract, Name)
end.
@@ -337,8 +339,10 @@ clicked2(State, Contract, Name) ->
end.
clicked3(State = #s{frame = Frame, j = J}, Contract, Name = {FunName, FunType}, Selected, Keys) ->
{FunName, FunType} = Name,
#c{id = ConID, build = #{aaci := AACI}} = Contract,
{FunDef, ConID, AACI}
{aaci, ConName, FunSpecs, _} = AACI,
FunSpec = maps:get(FunName, FunSpecs),
tell("FunName: ~tp", [FunName]),
@@ -400,149 +404,6 @@ clicked3(State = #s{frame = Frame, j = J}, Contract, Name = {FunName, FunType},
Error -> handle_troubling(State, Error)
end.
extract_args(Controls) ->
extract_args(Controls, []).
extract_args([], Acc) ->
pack_args(Acc);
extract_args([{Name, Control} | T], Acc) ->
String = wxTextCtrl:getValue(Control),
extract_args(T, [{Name, String} | Acc]).
pack_args(Args) ->
pack_args(Args, [], []).
pack_args([], M, A) ->
Message = unicode:characters_to_list(["Call Args:\n", M]),
{Message, A};
pack_args([{N, S} | T], M, A) ->
pack_args(T, [[N, ": ", S, "\n"] | M], [S | A]).
call_arg_sizer(Dialog, J, {CallArgs, ReturnType}) ->
SpecSz = wxStaticBoxSizer:new(?wxVERTICAL, Dialog, [{label, J("Function Spec")}]),
{CallSz, CallControls, Dimensions} = call_sizer(Dialog, J, CallArgs),
ReturnSz = return_sizer(Dialog, J, ReturnType),
_ = wxStaticBoxSizer:add(SpecSz, CallSz, zxw:flags({wide, 5})),
_ = wxStaticBoxSizer:add(SpecSz, ReturnSz, zxw:flags({base, 5})),
{SpecSz, CallControls, Dimensions}.
call_sizer(Dialog, J, []) ->
CallSz = wxStaticBoxSizer:new(?wxVERTICAL, Dialog, [{label, J("Call Args")}]),
Args = wxStaticText:new(Dialog, ?wxID_ANY, ["[", J("No Args"), "]"]),
_ = wxStaticBoxSizer:add(CallSz, Args, zxw:flags({wide, 5})),
{CallSz, [], {500, 500}};
call_sizer(Dialog, J, CallArgs) ->
ScrollWin = wxScrolledWindow:new(Dialog),
ScrollSz = wxBoxSizer:new(?wxVERTICAL),
ok = wxScrolledWindow:setSizerAndFit(ScrollWin, ScrollSz),
ok = wxScrolledWindow:setScrollRate(ScrollWin, 5, 5),
CallSz = wxStaticBoxSizer:new(?wxVERTICAL, Dialog, [{label, J("Call Args")}]),
GridSz = wxFlexGridSizer:new(2, [{gap, {4, 4}}]),
ok = wxFlexGridSizer:setFlexibleDirection(GridSz, ?wxHORIZONTAL),
ok = wxFlexGridSizer:addGrowableCol(GridSz, 1),
AddArg =
fun({Name, Type}) ->
L = wxStaticText:new(ScrollWin, ?wxID_ANY, [Name, " : ", textify(Type)]),
C = wxTextCtrl:new(ScrollWin, ?wxID_ANY),
_ = wxFlexGridSizer:add(GridSz, L, zxw:flags({base, 5})),
_ = wxFlexGridSizer:add(GridSz, C, zxw:flags({wide, 5})),
{Name, C}
end,
_ = wxStaticBoxSizer:add(ScrollSz, GridSz, zxw:flags(wide)),
_ = wxStaticBoxSizer:add(CallSz, ScrollWin, zxw:flags(wide)),
Controls = lists:map(AddArg, CallArgs),
{CallSz, Controls, {600, 700}}.
return_sizer(Dialog, J, ReturnType) ->
ReturnSz = wxStaticBoxSizer:new(?wxVERTICAL, Dialog, [{label, J("Return Type")}]),
Return = wxStaticText:new(Dialog, ?wxID_ANY, textify(ReturnType)),
_ = wxStaticBoxSizer:add(ReturnSz, Return, zxw:flags({wide, 5})),
ReturnSz.
textify({integer, _, _}) -> "int";
textify({boolean, _, _}) -> "bool";
textify({{bytes, [I]}, _, _}) -> io_lib:format("bytes(~w)", [I]);
textify({{bytes, any}, _, _}) -> "bytes()";
textify({T, _, _}) when is_atom(T) -> atom_to_list(T);
textify({T, _, _}) when is_list(T) -> T;
textify({T, _, _}) -> io_lib:format("~tp", [T]).
call_param_sizer(Dialog, J) ->
{ok, Height} = hz:top_height(),
DefTTL = Height + 10000,
DefGasP = hz:min_gas_price(),
DefGas = 5000000,
DefAmount = 0,
ParamSz = wxStaticBoxSizer:new(?wxVERTICAL, Dialog, [{label, J("TX Parameters")}]),
GridSz = wxFlexGridSizer:new(2, 4, 4),
ok = wxFlexGridSizer:setFlexibleDirection(GridSz, ?wxHORIZONTAL),
ok = wxFlexGridSizer:addGrowableCol(GridSz, 1),
TTL_L = wxStaticText:new(Dialog, ?wxID_ANY, "TTL"),
TTL_Tx = wxTextCtrl:new(Dialog, ?wxID_ANY),
ok = wxTextCtrl:setValue(TTL_Tx, integer_to_list(DefTTL)),
GasP_L = wxStaticText:new(Dialog, ?wxID_ANY, J("Gas Price")),
GasP_Tx = wxTextCtrl:new(Dialog, ?wxID_ANY),
ok = wxTextCtrl:setValue(GasP_Tx, integer_to_list(DefGasP)),
Gas_L = wxStaticText:new(Dialog, ?wxID_ANY, J("Gas")),
Gas_Tx = wxTextCtrl:new(Dialog, ?wxID_ANY),
ok = wxTextCtrl:setValue(Gas_Tx, integer_to_list(DefGas)),
Amount_L = wxStaticText:new(Dialog, ?wxID_ANY, J("TX Amount")),
Amount_Tx = wxTextCtrl:new(Dialog, ?wxID_ANY),
ok = wxTextCtrl:setValue(Amount_Tx, integer_to_list(DefAmount)),
_ = wxFlexGridSizer:add(GridSz, TTL_L, zxw:flags({base, 5})),
_ = wxFlexGridSizer:add(GridSz, TTL_Tx, zxw:flags({wide, 5})),
_ = wxFlexGridSizer:add(GridSz, GasP_L, zxw:flags({base, 5})),
_ = wxFlexGridSizer:add(GridSz, GasP_Tx, zxw:flags({wide, 5})),
_ = wxFlexGridSizer:add(GridSz, Gas_L, zxw:flags({base, 5})),
_ = wxFlexGridSizer:add(GridSz, Gas_Tx, zxw:flags({wide, 5})),
_ = wxFlexGridSizer:add(GridSz, Amount_L, zxw:flags({base, 5})),
_ = wxFlexGridSizer:add(GridSz, Amount_Tx, zxw:flags({wide, 5})),
_ = wxSizer:add(ParamSz, GridSz, zxw:flags(wide)),
{ParamSz, TTL_Tx, GasP_Tx, Gas_Tx, Amount_Tx}.
call_params(Controls) ->
call_params(Controls, {[], []}).
call_params([], {Acc, []}) ->
{ok, lists:reverse(Acc)};
call_params([], {_, Errors}) ->
{error, lists:reverse(Errors)};
call_params([{{Label, Validate}, Control} | T], {Acc, Errors}) ->
String = wxTextCtrl:getValue(Control),
case Validate(String) of
{ok, Value} -> call_params(T, {[Value | Acc], Errors});
{error, Reason} -> call_params(T, {Acc, [{Label, Reason} | Errors]})
end.
gt_0(S) ->
C = "Must be an integer greater than 0",
R =
try
{ok, list_to_integer(S)}
catch
error:badarg -> {error, {S, C}}
end,
case R of
{ok, N} when N > 0 -> {ok, N};
{ok, N} when N =< 0 -> {error, {S, C}};
Error -> Error
end.
gte_0(S) ->
C = "Must be a non-negative integer.",
R =
try
{ok, list_to_integer(S)}
catch
error:badarg -> {error, {S, C}}
end,
case R of
{ok, N} when N >= 0 -> {ok, N};
{ok, N} when N < 0 -> {error, {S, C}};
Error -> Error
end.
clicked4(State,
#c{id = ConID, build = #{aaci := AACI}},
@@ -785,7 +646,6 @@ deploy4(State = #s{frame = Frame, j = J}, InitSpec, Build, Selected, Keys) ->
end.
deploy5(State, Build, Params, Args) ->
tell(info, "Build: ~p", [Build]),
ok = gd_con:deploy(Build, Params, Args),
State.
@@ -952,7 +812,7 @@ save(State = #s{prefs = Prefs, code = {Codebook, Pages}}) ->
Index ->
case lists:nth(Index + 1, Pages) of
#p{path = {file, Path}, code = Widget} ->
Source = wxStyledTextCtrl:getText(Widget),
Source = gd_sophia_editor:get_text(Widget),
case filelib:ensure_dir(Path) of
ok ->
case file:write_file(Path, Source) of