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_arg({tuple, 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}) ->
|
||||
wxTextCtrl:getValue(TextCtrl).
|
||||
|
||||
@ -1201,28 +1206,14 @@ fun_interfaces(ScrollWin, FunSz, Buttons, Funs, NS, J) ->
|
||||
make_arg_fields(ScrollWin, GridSz, Args, NS, J) ->
|
||||
MakeArgField =
|
||||
fun
|
||||
({AN, {T, already_normalized, T}}) ->
|
||||
({AN, {_O, _N, T}}) when is_atom(T) ->
|
||||
% tell(info, "~p Arg: ~p, Type: ~p", [?LINE, AN, 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};
|
||||
({T, already_normalized, T}) ->
|
||||
% 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}}}) ->
|
||||
({AN, {_O, _N, {record, InnerArgs}}}) ->
|
||||
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||
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, InnerSz, fill()),
|
||||
{record, AFs};
|
||||
({AN, {_TypeName, already_normalized, {tuple, InnerArgs}}}) ->
|
||||
({AN, {_O, _N, {tuple, InnerArgs}}}) ->
|
||||
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||
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),
|
||||
AFs = make_unnamed_fields(ScrollWin, InnerSz, InnerArgs, NS, J),
|
||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
||||
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
||||
{tuple, AFs};
|
||||
({AN, {_TypeName, already_normalized, {list, InnerArgs}}}) ->
|
||||
({AN, {_O, _N, {list, [InnerType]}}}) ->
|
||||
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||
ArgSz = wxBoxSizer:new(?wxVERTICAL),
|
||||
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),
|
||||
AFs = make_unnamed_fields(ScrollWin, InnerSz, [InnerType], 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()),
|
||||
@ -1257,69 +1248,47 @@ make_arg_fields(ScrollWin, GridSz, Args, NS, J) ->
|
||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
||||
_ = wxFlexGridSizer:add(GridSz, ArgSz, fill()),
|
||||
{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]),
|
||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||
InnerSz = wxFlexGridSizer:new(2, 4, 4),
|
||||
ok = wxFlexGridSizer:setFlexibleDirection(InnerSz, ?wxHORIZONTAL),
|
||||
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, InnerSz, fill()),
|
||||
{tuple, AFs};
|
||||
({AN, {{tuple, _}, already_normalized, {tuple, InnerArgs}}}) ->
|
||||
% tell(info, "~p Arg: ~p, Tuple: ~p", [?LINE, AN, InnerArgs]),
|
||||
{map, AFs};
|
||||
({AN, {_O, _N, {variant, Variants = [{_, VariantElements} | _]}}}) ->
|
||||
% tell(info, "~p Arg: ~p, ~p: ~p", [?LINE, AN, TypeName, InnerArgs]),
|
||||
ANT = wxStaticText:new(ScrollWin, ?wxID_ANY, AN),
|
||||
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),
|
||||
AFs = make_unnamed_fields(ScrollWin, InnerSz, VariantElements, NS, J),
|
||||
_ = wxFlexGridSizer:add(GridSz, ANT, fill()),
|
||||
_ = wxFlexGridSizer:add(GridSz, InnerSz, fill()),
|
||||
{tuple, AFs};
|
||||
({AN, {{list, _}, already_normalized, {list, InnerArgs}}}) ->
|
||||
% 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}
|
||||
VariantNames = lists:map(fun({Name, _}) -> Name end, Variants),
|
||||
{variant, AFs, VariantNames}
|
||||
end,
|
||||
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() ->
|
||||
[{proportion, 0}, {flag, ?wxEXPAND}].
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user