Sketchy list, map, variant interface
None of these are quite working right, but the hive contract can open in the 'open from chain' button now.
This commit is contained in:
parent
dc0b620a4c
commit
f78d929fb9
@ -1146,6 +1146,11 @@ get_arg({record, AFs}) ->
|
|||||||
get_record(AFs);
|
get_record(AFs);
|
||||||
get_arg({tuple, AFs}) ->
|
get_arg({tuple, AFs}) ->
|
||||||
list_to_tuple(lists:map(fun get_arg/1, AFs));
|
list_to_tuple(lists:map(fun get_arg/1, AFs));
|
||||||
|
get_arg({map, [Key, Value]}) ->
|
||||||
|
#{get_arg(Key) => get_arg(Value)};
|
||||||
|
get_arg({variant, AFs, [VariantOne | _]}) ->
|
||||||
|
Elems = lists:map(fun get_arg/1, AFs),
|
||||||
|
list_to_tuple([VariantOne | Elems]);
|
||||||
get_arg({_, TextCtrl}) ->
|
get_arg({_, TextCtrl}) ->
|
||||||
wxTextCtrl:getValue(TextCtrl).
|
wxTextCtrl:getValue(TextCtrl).
|
||||||
|
|
||||||
@ -1201,28 +1206,14 @@ fun_interfaces(ScrollWin, FunSz, Buttons, Funs, NS, J) ->
|
|||||||
make_arg_fields(ScrollWin, GridSz, Args, NS, J) ->
|
make_arg_fields(ScrollWin, GridSz, Args, NS, J) ->
|
||||||
MakeArgField =
|
MakeArgField =
|
||||||
fun
|
fun
|
||||||
({AN, {T, already_normalized, T}}) ->
|
({AN, {_O, _N, T}}) when is_atom(T) ->
|
||||||
% tell(info, "~p Arg: ~p, Type: ~p", [?LINE, AN, T]),
|
% tell(info, "~p Arg: ~p, Type: ~p", [?LINE, AN, T]),
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||||
TCT = wxTextCtrl:new(ScrollWin, ?wxID_ANY),
|
TCT = wxTextCtrl:new(ScrollWin, ?wxID_ANY),
|
||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
||||||
_ = wxFlexGridSizer:add(GridSz, TCT, fill()),
|
_ = wxFlexGridSizer:add(GridSz, TCT, fill()),
|
||||||
{T, TCT};
|
{T, TCT};
|
||||||
({T, already_normalized, T}) ->
|
({AN, {_O, _N, {record, InnerArgs}}}) ->
|
||||||
% tell(info, "~p Type: ~p", [?LINE, T]),
|
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, atom_to_list(T)),
|
|
||||||
TCT = wxTextCtrl:new(ScrollWin, ?wxID_ANY),
|
|
||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
|
||||||
_ = wxFlexGridSizer:add(GridSz, TCT, fill()),
|
|
||||||
{T, TCT};
|
|
||||||
({AN, {_TypeName, T, T}}) ->
|
|
||||||
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, T]),
|
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
|
||||||
TCT = wxTextCtrl:new(ScrollWin, ?wxID_ANY),
|
|
||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
|
||||||
_ = wxFlexGridSizer:add(GridSz, TCT, fill()),
|
|
||||||
{T, TCT};
|
|
||||||
({AN, {_TypeName, already_normalized, {record, InnerArgs}}}) ->
|
|
||||||
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||||
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
||||||
@ -1232,24 +1223,24 @@ make_arg_fields(ScrollWin, GridSz, Args, NS, J) ->
|
|||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
||||||
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
||||||
{record, AFs};
|
{record, AFs};
|
||||||
({AN, {_TypeName, already_normalized, {tuple, InnerArgs}}}) ->
|
({AN, {_O, _N, {tuple, InnerArgs}}}) ->
|
||||||
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||||
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
||||||
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
||||||
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
||||||
AFs = make_arg_fields(ScrollWin, InnerSz, InnerArgs, NS, J),
|
AFs = make_unnamed_fields(ScrollWin, InnerSz, InnerArgs, NS, J),
|
||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
||||||
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
||||||
{tuple, AFs};
|
{tuple, AFs};
|
||||||
({AN, {_TypeName, already_normalized, {list, InnerArgs}}}) ->
|
({AN, {_O, _N, {list, [InnerType]}}}) ->
|
||||||
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||||
ArgSz = wxBoxSizer:new(?wxVERTICAL),
|
ArgSz = wxBoxSizer:new(?wxVERTICAL),
|
||||||
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
||||||
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
||||||
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
||||||
AFs = make_arg_fields(ScrollWin, InnerSz, InnerArgs, NS, J),
|
AFs = make_unnamed_fields(ScrollWin, InnerSz, [InnerType], NS, J),
|
||||||
B = wxButton:new(ScrollWin, ?wxID_ANY, [{label, J("Add")}]),
|
B = wxButton:new(ScrollWin, ?wxID_ANY, [{label, J("Add")}]),
|
||||||
AB = #w{name = {AN, add}, id = wxButton:getId(B), wx = B},
|
AB = #w{name = {AN, add}, id = wxButton:getId(B), wx = B},
|
||||||
_ = wxBoxSizer:add(ArgSz, InnerSz, fill()),
|
_ = wxBoxSizer:add(ArgSz, InnerSz, fill()),
|
||||||
@ -1257,69 +1248,47 @@ make_arg_fields(ScrollWin, GridSz, Args, NS, J) ->
|
|||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
||||||
_ = wxFlexGridSizer:add(GridSz, ArgSz, fill()),
|
_ = wxFlexGridSizer:add(GridSz, ArgSz, fill()),
|
||||||
{list, AFs, AB};
|
{list, AFs, AB};
|
||||||
({AN, {_TypeName, already_normalized, T}}) ->
|
({AN, {_O, _N, {map, [Key, Value]}}}) ->
|
||||||
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, T]),
|
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, T]),
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||||
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
||||||
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
||||||
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
||||||
AFs = make_arg_fields(ScrollWin, InnerSz, T, NS, J),
|
AFs = make_unnamed_fields(ScrollWin, InnerSz, [Key, Value], NS, J),
|
||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
||||||
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
||||||
{tuple, AFs};
|
{map, AFs};
|
||||||
({AN, {{tuple, _}, already_normalized, {tuple, InnerArgs}}}) ->
|
({AN, {_O, _N, {variant, Variants = [{_, VariantElements} | _]}}}) ->
|
||||||
% tell(info, "~p Arg: ~p, Tuple: ~p", [?LINE, AN, InnerArgs]),
|
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||||
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
||||||
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
||||||
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
||||||
AFs = make_arg_fields(ScrollWin, InnerSz, InnerArgs, NS, J),
|
AFs = make_unnamed_fields(ScrollWin, InnerSz, VariantElements, NS, J),
|
||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
||||||
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
||||||
{tuple, AFs};
|
VariantNames = lists:map(fun({Name, _}) -> Name end, Variants),
|
||||||
({AN, {{list, _}, already_normalized, {list, InnerArgs}}}) ->
|
{variant, AFs, VariantNames}
|
||||||
% tell(info, "~p Arg: ~p, List: ~p", [?LINE, AN, InnerArgs]),
|
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
|
||||||
ArgSz = wxBoxSizer:new(?wxHORIZONTAL),
|
|
||||||
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
|
||||||
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
|
||||||
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
|
||||||
AFs = make_arg_fields(ScrollWin, InnerSz, InnerArgs, NS, J),
|
|
||||||
B = wxButton:new(ScrollWin, ?wxID_ANY, [{label, J("Add")}]),
|
|
||||||
AB = #w{name = {AN, add}, id = wxButton:getId(B), wx = B},
|
|
||||||
_ = wxBoxSizer:add(ArgSz, InnerSz, fill()),
|
|
||||||
_ = wxBoxSizer:add(ArgSz, B, fill()),
|
|
||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
|
||||||
_ = wxFlexGridSizer:add(GridSz, ArgSz, fill()),
|
|
||||||
{list, AFs, AB};
|
|
||||||
({{tuple, _}, already_normalized, {tuple, InnerArgs}}) ->
|
|
||||||
% tell(info, "~p Tuple: ~p", [?LINE, InnerArgs]),
|
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, "tuple"),
|
|
||||||
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
|
||||||
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
|
||||||
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
|
||||||
AFs = make_arg_fields(ScrollWin, InnerSz, InnerArgs, NS, J),
|
|
||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
|
||||||
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
|
||||||
{tuple, AFs};
|
|
||||||
({{list, _}, already_normalized, {list, InnerArgs}}) ->
|
|
||||||
% tell(info, "~p List: ~p", [?LINE, InnerArgs]),
|
|
||||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, "list"),
|
|
||||||
ArgSz = wxBoxSizer:new(?wxHORIZONTAL),
|
|
||||||
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
|
||||||
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
|
||||||
ok = wxFlexGridSizer:addGrowableCol(InnerSz, 1),
|
|
||||||
AFs = make_arg_fields(ScrollWin, InnerSz, InnerArgs, NS, J),
|
|
||||||
B = wxButton:new(ScrollWin, ?wxID_ANY, [{label, J("Add")}]),
|
|
||||||
AB = #w{name = {list, add}, id = wxButton:getId(B), wx = B},
|
|
||||||
_ = wxBoxSizer:add(ArgSz, InnerSz, [{proportion, 1}, {flag, ?wxEXPAND}]),
|
|
||||||
_ = wxBoxSizer:add(ArgSz, B, fill()),
|
|
||||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
|
||||||
_ = wxFlexGridSizer:add(GridSz, ArgSz, fill()),
|
|
||||||
{list, AFs, AB}
|
|
||||||
end,
|
end,
|
||||||
lists:map(MakeArgField, Args).
|
lists:map(MakeArgField, Args).
|
||||||
|
|
||||||
|
make_unnamed_fields(ScrollWin, InnerSz, Elems, NS, J) ->
|
||||||
|
tell(info, "ta", []),
|
||||||
|
ChooseName =
|
||||||
|
fun
|
||||||
|
(Ann = {_, _, T}) when is_atom(T) ->
|
||||||
|
{atom_to_list(T), Ann};
|
||||||
|
(Ann = {Name, _, {record, _}}) when is_list(Name) ->
|
||||||
|
io:format("record: ~p~n", [Ann]),
|
||||||
|
{Name, Ann};
|
||||||
|
(Ann = {_, _, {T, _}}) when is_atom(T) ->
|
||||||
|
{atom_to_list(T), Ann}
|
||||||
|
end,
|
||||||
|
tell(info, "tb", []),
|
||||||
|
WithNames = lists:map(ChooseName, Elems),
|
||||||
|
tell(info, "tc", []),
|
||||||
|
make_arg_fields(ScrollWin, InnerSz, WithNames, NS, J).
|
||||||
|
|
||||||
fill() ->
|
fill() ->
|
||||||
[{proportion, 0}, {flag, ?wxEXPAND}].
|
[{proportion, 0}, {flag, ?wxEXPAND}].
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user