WIP
This commit is contained in:
parent
66f5795c49
commit
f9cb72598f
@ -332,32 +332,32 @@ clicked3(State = #s{frame = Frame, j = J}, Contract, Name = {FunName, FunType},
|
||||
FunSpec = maps:get(FunName, FunSpecs),
|
||||
tell("FunName: ~tp", [FunName]),
|
||||
tell("FunSpec: ~tp", [FunSpec]),
|
||||
tell("Contract: ~tp", [Contract]),
|
||||
Label =
|
||||
CallType =
|
||||
case FunType of
|
||||
call -> J("Contract Call");
|
||||
dryr -> J("Dry Run")
|
||||
end,
|
||||
Label = [CallType, ": ", ConName, ".", FunName, "/", integer_to_list(length(element(1, FunSpec)))],
|
||||
Dialog = wxDialog:new(Frame, ?wxID_ANY, Label),
|
||||
Sizer = wxBoxSizer:new(?wxVERTICAL),
|
||||
KeySz = wxStaticBoxSizer:new(?wxVERTICAL, Dialog, [{label, J("Signature Key")}]),
|
||||
KeyPicker = wxChoice:new(Dialog, ?wxID_ANY, [{choices, Keys}]),
|
||||
_ = wxStaticBoxSizer:add(KeySz, KeyPicker, zxw:flags(wide)),
|
||||
ok = wxChoice:setSelection(KeyPicker, Selected - 1),
|
||||
ArgSz = call_arg_sizer(Dialog, J, FunSpec),
|
||||
{ArgSz, ArgControls, Dimensions} = call_arg_sizer(Dialog, J, FunSpec),
|
||||
{ParamSz, TTL_Tx, GasP_Tx, Gas_Tx, Amount_Tx} = call_param_sizer(Dialog, J),
|
||||
ButtSz = wxBoxSizer:new(?wxHORIZONTAL),
|
||||
Affirm = wxButton:new(Dialog, ?wxID_OK),
|
||||
Cancel = wxButton:new(Dialog, ?wxID_CANCEL),
|
||||
_ = wxBoxSizer:add(ButtSz, Affirm, zxw:flags(wide)),
|
||||
_ = wxBoxSizer:add(ButtSz, Cancel, zxw:flags(wide)),
|
||||
_ = wxSizer:add(Sizer, KeySz, zxw:flags(wide)),
|
||||
_ = wxSizer:add(Sizer, ArgSz, zxw:flags(wide)),
|
||||
_ = wxSizer:add(Sizer, ParamSz, zxw:flags(wide)),
|
||||
_ = wxSizer:add(Sizer, ButtSz, zxw:flags(wide)),
|
||||
_ = wxBoxSizer:add(ButtSz, Affirm, zxw:flags({wide, 5})),
|
||||
_ = wxBoxSizer:add(ButtSz, Cancel, zxw:flags({wide, 5})),
|
||||
_ = wxSizer:add(Sizer, KeySz, zxw:flags({base, 5})),
|
||||
_ = wxSizer:add(Sizer, ArgSz, zxw:flags({wide, 5})),
|
||||
_ = wxSizer:add(Sizer, ParamSz, zxw:flags({base, 5})),
|
||||
_ = wxSizer:add(Sizer, ButtSz, zxw:flags({base, 5})),
|
||||
ok = wxDialog:setSizer(Dialog, Sizer),
|
||||
ok = wxBoxSizer:layout(Sizer),
|
||||
ok = wxDialog:setSize(Dialog, {500, 300}),
|
||||
ok = wxDialog:setSize(Dialog, Dimensions),
|
||||
ok = wxDialog:center(Dialog),
|
||||
Outcome =
|
||||
case wxDialog:showModal(Dialog) of
|
||||
@ -365,14 +365,19 @@ clicked3(State = #s{frame = Frame, j = J}, Contract, Name = {FunName, FunType},
|
||||
ID = wxChoice:getString(KeyPicker, wxChoice:getSelection(KeyPicker)),
|
||||
PK = unicode:characters_to_binary(ID),
|
||||
Controls =
|
||||
[{"TTL", TTL_Tx},
|
||||
{"Gas Price", GasP_Tx},
|
||||
{"Gas", Gas_Tx},
|
||||
{"Amount", Amount_Tx}],
|
||||
[{{"TTL", integer}, TTL_Tx},
|
||||
{{"Gas Price", integer}, GasP_Tx},
|
||||
{{"Gas", integer}, Gas_Tx},
|
||||
{{"Amount", integer}, Amount_Tx}],
|
||||
% TODO: Unify args from the call params and fun args
|
||||
% Try to give type feedback, probably based on whether Sophia or Erlang terms are chosen
|
||||
case call_params(Controls) of
|
||||
{ok, [TTL, GasP, Gas, Amount]} ->
|
||||
{ok, Nonce} = hz:next_nonce(PK),
|
||||
{ok, {PK, Nonce, TTL, GasP, Gas, Amount}};
|
||||
case extract_args(ArgControls) of
|
||||
{ok, Args} -> {ok, {PK, Nonce, TTL, GasP, Gas, Amount}, Args};
|
||||
E -> E
|
||||
end;
|
||||
E ->
|
||||
E
|
||||
end;
|
||||
@ -386,7 +391,59 @@ clicked3(State = #s{frame = Frame, j = J}, Contract, Name = {FunName, FunType},
|
||||
Error -> handle_troubling(State, Error)
|
||||
end.
|
||||
|
||||
call_arg_sizer(Dialog, J, FunSpec) ->
|
||||
extract_args({Name, Control}, {OK, Errors}) ->
|
||||
|
||||
extract_args(Controls) ->
|
||||
extract_args(Controls, []).
|
||||
|
||||
extract_args([H | T], A) ->
|
||||
case wxTextCtrl:getValue(H) of
|
||||
"" -> {
|
||||
|
||||
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) ->
|
||||
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(Arg = {Name, Type}) ->
|
||||
L = wxStaticText:new(Dialog, ?wxID_ANY, [Name, " : ", textify(Type)]),
|
||||
C = wxTextCtrl:new(Dialog, ?wxID_ANY),
|
||||
_ = wxFlexGridSizer:add(GridSz, L, zxw:flags({base, 5})),
|
||||
_ = wxFlexGridSizer:add(GridSz, C, zxw:flags({wide, 5})),
|
||||
{Arg, C}
|
||||
end,
|
||||
_ = wxStaticBoxSizer:add(CallSz, GridSz, 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(),
|
||||
@ -410,14 +467,14 @@ call_param_sizer(Dialog, J) ->
|
||||
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)),
|
||||
_ = wxFlexGridSizer:add(GridSz, TTL_Tx, zxw:flags(wide)),
|
||||
_ = wxFlexGridSizer:add(GridSz, GasP_L, zxw:flags(base)),
|
||||
_ = wxFlexGridSizer:add(GridSz, GasP_Tx, zxw:flags(wide)),
|
||||
_ = wxFlexGridSizer:add(GridSz, Gas_L, zxw:flags(base)),
|
||||
_ = wxFlexGridSizer:add(GridSz, Gas_Tx, zxw:flags(wide)),
|
||||
_ = wxFlexGridSizer:add(GridSz, Amount_L, zxw:flags(base)),
|
||||
_ = wxFlexGridSizer:add(GridSz, Amount_Tx, zxw:flags(wide)),
|
||||
_ = 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}.
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user