diff --git a/src/gd_v_devman.erl b/src/gd_v_devman.erl index f2a6881..7a968dc 100644 --- a/src/gd_v_devman.erl +++ b/src/gd_v_devman.erl @@ -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}].