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),
|
FunSpec = maps:get(FunName, FunSpecs),
|
||||||
tell("FunName: ~tp", [FunName]),
|
tell("FunName: ~tp", [FunName]),
|
||||||
tell("FunSpec: ~tp", [FunSpec]),
|
tell("FunSpec: ~tp", [FunSpec]),
|
||||||
tell("Contract: ~tp", [Contract]),
|
CallType =
|
||||||
Label =
|
|
||||||
case FunType of
|
case FunType of
|
||||||
call -> J("Contract Call");
|
call -> J("Contract Call");
|
||||||
dryr -> J("Dry Run")
|
dryr -> J("Dry Run")
|
||||||
end,
|
end,
|
||||||
|
Label = [CallType, ": ", ConName, ".", FunName, "/", integer_to_list(length(element(1, FunSpec)))],
|
||||||
Dialog = wxDialog:new(Frame, ?wxID_ANY, Label),
|
Dialog = wxDialog:new(Frame, ?wxID_ANY, Label),
|
||||||
Sizer = wxBoxSizer:new(?wxVERTICAL),
|
Sizer = wxBoxSizer:new(?wxVERTICAL),
|
||||||
KeySz = wxStaticBoxSizer:new(?wxVERTICAL, Dialog, [{label, J("Signature Key")}]),
|
KeySz = wxStaticBoxSizer:new(?wxVERTICAL, Dialog, [{label, J("Signature Key")}]),
|
||||||
KeyPicker = wxChoice:new(Dialog, ?wxID_ANY, [{choices, Keys}]),
|
KeyPicker = wxChoice:new(Dialog, ?wxID_ANY, [{choices, Keys}]),
|
||||||
_ = wxStaticBoxSizer:add(KeySz, KeyPicker, zxw:flags(wide)),
|
_ = wxStaticBoxSizer:add(KeySz, KeyPicker, zxw:flags(wide)),
|
||||||
ok = wxChoice:setSelection(KeyPicker, Selected - 1),
|
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),
|
{ParamSz, TTL_Tx, GasP_Tx, Gas_Tx, Amount_Tx} = call_param_sizer(Dialog, J),
|
||||||
ButtSz = wxBoxSizer:new(?wxHORIZONTAL),
|
ButtSz = wxBoxSizer:new(?wxHORIZONTAL),
|
||||||
Affirm = wxButton:new(Dialog, ?wxID_OK),
|
Affirm = wxButton:new(Dialog, ?wxID_OK),
|
||||||
Cancel = wxButton:new(Dialog, ?wxID_CANCEL),
|
Cancel = wxButton:new(Dialog, ?wxID_CANCEL),
|
||||||
_ = wxBoxSizer:add(ButtSz, Affirm, zxw:flags(wide)),
|
_ = wxBoxSizer:add(ButtSz, Affirm, zxw:flags({wide, 5})),
|
||||||
_ = wxBoxSizer:add(ButtSz, Cancel, zxw:flags(wide)),
|
_ = wxBoxSizer:add(ButtSz, Cancel, zxw:flags({wide, 5})),
|
||||||
_ = wxSizer:add(Sizer, KeySz, zxw:flags(wide)),
|
_ = wxSizer:add(Sizer, KeySz, zxw:flags({base, 5})),
|
||||||
_ = wxSizer:add(Sizer, ArgSz, zxw:flags(wide)),
|
_ = wxSizer:add(Sizer, ArgSz, zxw:flags({wide, 5})),
|
||||||
_ = wxSizer:add(Sizer, ParamSz, zxw:flags(wide)),
|
_ = wxSizer:add(Sizer, ParamSz, zxw:flags({base, 5})),
|
||||||
_ = wxSizer:add(Sizer, ButtSz, zxw:flags(wide)),
|
_ = wxSizer:add(Sizer, ButtSz, zxw:flags({base, 5})),
|
||||||
ok = wxDialog:setSizer(Dialog, Sizer),
|
ok = wxDialog:setSizer(Dialog, Sizer),
|
||||||
ok = wxBoxSizer:layout(Sizer),
|
ok = wxBoxSizer:layout(Sizer),
|
||||||
ok = wxDialog:setSize(Dialog, {500, 300}),
|
ok = wxDialog:setSize(Dialog, Dimensions),
|
||||||
ok = wxDialog:center(Dialog),
|
ok = wxDialog:center(Dialog),
|
||||||
Outcome =
|
Outcome =
|
||||||
case wxDialog:showModal(Dialog) of
|
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)),
|
ID = wxChoice:getString(KeyPicker, wxChoice:getSelection(KeyPicker)),
|
||||||
PK = unicode:characters_to_binary(ID),
|
PK = unicode:characters_to_binary(ID),
|
||||||
Controls =
|
Controls =
|
||||||
[{"TTL", TTL_Tx},
|
[{{"TTL", integer}, TTL_Tx},
|
||||||
{"Gas Price", GasP_Tx},
|
{{"Gas Price", integer}, GasP_Tx},
|
||||||
{"Gas", Gas_Tx},
|
{{"Gas", integer}, Gas_Tx},
|
||||||
{"Amount", Amount_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
|
case call_params(Controls) of
|
||||||
{ok, [TTL, GasP, Gas, Amount]} ->
|
{ok, [TTL, GasP, Gas, Amount]} ->
|
||||||
{ok, Nonce} = hz:next_nonce(PK),
|
{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 ->
|
||||||
E
|
E
|
||||||
end;
|
end;
|
||||||
@ -386,7 +391,59 @@ clicked3(State = #s{frame = Frame, j = J}, Contract, Name = {FunName, FunType},
|
|||||||
Error -> handle_troubling(State, Error)
|
Error -> handle_troubling(State, Error)
|
||||||
end.
|
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) ->
|
call_param_sizer(Dialog, J) ->
|
||||||
{ok, Height} = hz:top_height(),
|
{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_L = wxStaticText:new(Dialog, ?wxID_ANY, J("TX Amount")),
|
||||||
Amount_Tx = wxTextCtrl:new(Dialog, ?wxID_ANY),
|
Amount_Tx = wxTextCtrl:new(Dialog, ?wxID_ANY),
|
||||||
ok = wxTextCtrl:setValue(Amount_Tx, integer_to_list(DefAmount)),
|
ok = wxTextCtrl:setValue(Amount_Tx, integer_to_list(DefAmount)),
|
||||||
_ = wxFlexGridSizer:add(GridSz, TTL_L, zxw:flags(base)),
|
_ = wxFlexGridSizer:add(GridSz, TTL_L, zxw:flags({base, 5})),
|
||||||
_ = wxFlexGridSizer:add(GridSz, TTL_Tx, zxw:flags(wide)),
|
_ = wxFlexGridSizer:add(GridSz, TTL_Tx, zxw:flags({wide, 5})),
|
||||||
_ = wxFlexGridSizer:add(GridSz, GasP_L, zxw:flags(base)),
|
_ = wxFlexGridSizer:add(GridSz, GasP_L, zxw:flags({base, 5})),
|
||||||
_ = wxFlexGridSizer:add(GridSz, GasP_Tx, zxw:flags(wide)),
|
_ = wxFlexGridSizer:add(GridSz, GasP_Tx, zxw:flags({wide, 5})),
|
||||||
_ = wxFlexGridSizer:add(GridSz, Gas_L, zxw:flags(base)),
|
_ = wxFlexGridSizer:add(GridSz, Gas_L, zxw:flags({base, 5})),
|
||||||
_ = wxFlexGridSizer:add(GridSz, Gas_Tx, zxw:flags(wide)),
|
_ = wxFlexGridSizer:add(GridSz, Gas_Tx, zxw:flags({wide, 5})),
|
||||||
_ = wxFlexGridSizer:add(GridSz, Amount_L, zxw:flags(base)),
|
_ = wxFlexGridSizer:add(GridSz, Amount_L, zxw:flags({base, 5})),
|
||||||
_ = wxFlexGridSizer:add(GridSz, Amount_Tx, zxw:flags(wide)),
|
_ = wxFlexGridSizer:add(GridSz, Amount_Tx, zxw:flags({wide, 5})),
|
||||||
_ = wxSizer:add(ParamSz, GridSz, zxw:flags(wide)),
|
_ = wxSizer:add(ParamSz, GridSz, zxw:flags(wide)),
|
||||||
{ParamSz, TTL_Tx, GasP_Tx, Gas_Tx, Amount_Tx}.
|
{ParamSz, TTL_Tx, GasP_Tx, Gas_Tx, Amount_Tx}.
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user