diff options
Diffstat (limited to 'lib/wx/api_gen')
| -rw-r--r-- | lib/wx/api_gen/gen_util.erl | 12 | ||||
| -rw-r--r-- | lib/wx/api_gen/gl_gen.erl | 25 | ||||
| -rw-r--r-- | lib/wx/api_gen/gl_gen_erl.erl | 22 | ||||
| -rw-r--r-- | lib/wx/api_gen/gl_scan_doc.erl | 14 | ||||
| -rw-r--r-- | lib/wx/api_gen/wx_extra/wxPrintout.erl | 5 | ||||
| -rw-r--r-- | lib/wx/api_gen/wx_gen.erl | 114 | ||||
| -rw-r--r-- | lib/wx/api_gen/wx_gen.hrl | 5 | ||||
| -rw-r--r-- | lib/wx/api_gen/wx_gen_cpp.erl | 55 | ||||
| -rw-r--r-- | lib/wx/api_gen/wx_gen_erl.erl | 128 | ||||
| -rw-r--r-- | lib/wx/api_gen/wxapi.conf | 144 | 
10 files changed, 357 insertions, 167 deletions
| diff --git a/lib/wx/api_gen/gen_util.erl b/lib/wx/api_gen/gen_util.erl index 4638d4c7ea..2ba1c6e16f 100644 --- a/lib/wx/api_gen/gen_util.erl +++ b/lib/wx/api_gen/gen_util.erl @@ -1,7 +1,7 @@  %%  %% %CopyrightBegin%  %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. All Rights Reserved.  %%  %% The contents of this file are subject to the Erlang Public License,  %% Version 1.1, (the "License"); you may not use this file except in @@ -49,8 +49,10 @@ get_taylor_made(Str, Name) ->  	   [dotall, {capture, all_but_first, list}]).  open_write(File) -> +    open_write(File, []). +open_write(File, Opts) ->      %% io:format("Generating ~s~n",[File]), -    {ok, Fd} = file:open(File++".temp", [write]), +    {ok, Fd} = file:open(File++".temp", [write|Opts]),      put(current_file, {Fd,File}). @@ -187,6 +189,8 @@ replace_and_remove([$| | R], Acc) ->      replace_and_remove(R, ["|"|Acc]);  replace_and_remove([$* | R], Acc) ->      replace_and_remove(R, ["*"|Acc]); +replace_and_remove([$+ | R], Acc) -> +    replace_and_remove(R, ["+"|Acc]);  replace_and_remove([$& | R], Acc) ->      replace_and_remove(R, [$&|Acc]);  replace_and_remove([$<,$< | R], Acc) -> @@ -221,7 +225,7 @@ erl_copyright() ->      w("%%~n",[]),      w("%% %CopyrightBegin%~n",[]),      w("%%~n",[]), -    w("%% Copyright Ericsson AB ~p-2012. All Rights Reserved.~n", +    w("%% Copyright Ericsson AB ~p-2013. All Rights Reserved.~n",        [StartYear]),      w("%%~n",[]),      w("%% The contents of this file are subject to the Erlang Public License,~n",[]), @@ -241,7 +245,7 @@ c_copyright() ->      w("/*~n",[]),      w(" * %CopyrightBegin%~n",[]),      w(" *~n",[]), -    w(" * Copyright Ericsson AB 2008-2012. All Rights Reserved.~n",[]), +    w(" * Copyright Ericsson AB 2008-2013. All Rights Reserved.~n",[]),      w(" *~n",[]),      w(" * The contents of this file are subject to the Erlang Public License,~n",[]),      w(" * Version 1.1, (the \"License\"); you may not use this file except in~n",[]), diff --git a/lib/wx/api_gen/gl_gen.erl b/lib/wx/api_gen/gl_gen.erl index 331ba32ba4..ea967c958f 100644 --- a/lib/wx/api_gen/gl_gen.erl +++ b/lib/wx/api_gen/gl_gen.erl @@ -185,11 +185,11 @@ parse_define([#xmlElement{name=name,content=[#xmlText{value="WINGDIAPI"++_}]}|_]      throw(skip);  parse_define([#xmlElement{name=name,content=[#xmlText{value=Name}]}|R], Def, Os) ->      parse_define(R, Def#def{name=Name}, Os); -parse_define([#xmlElement{name=initializer,content=[#xmlText{value=V}]}|_],Def,_Os) -> -    Val0 = string:strip(V), -    try  +parse_define([#xmlElement{name=initializer,content=Contents}|_R],Def,_Os) -> +    Val0 = extract_def2(Contents), +    try  	case Val0 of -	    "0x" ++ Val1 ->  +	    "0x" ++ Val1 ->  		_ = http_util:hexlist_to_integer(Val1),  		Def#def{val=Val1, type=hex};  	    _ -> @@ -207,6 +207,23 @@ parse_define([_|R], D, Opts) ->  parse_define([], D, _Opts) ->      D. +extract_def2([#xmlText{value=Val}|R]) -> +    strip_comment(string:strip(Val)) ++ extract_def2(R); +extract_def2([#xmlElement{content=Cs}|R]) -> +    extract_def2(Cs) ++ extract_def2(R); +extract_def2([]) -> []. + +strip_comment("/*" ++ Rest) -> +    strip_comment_until_end(Rest); +strip_comment("//" ++ _) -> []; +strip_comment([H|R]) -> [H | strip_comment(R)]; +strip_comment([]) -> []. + +strip_comment_until_end("*/" ++ Rest) -> +    strip_comment(Rest); +strip_comment_until_end([_|R]) -> +    strip_comment_until_end(R). +  parse_func(Xml, Opts) ->      {Func,_} = foldl(fun(X,Acc) -> parse_func(X,Acc,Opts) end, {#func{},1}, Xml),      put(current_func, Func#func.name), diff --git a/lib/wx/api_gen/gl_gen_erl.erl b/lib/wx/api_gen/gl_gen_erl.erl index 25f89e4ad4..446521098e 100644 --- a/lib/wx/api_gen/gl_gen_erl.erl +++ b/lib/wx/api_gen/gl_gen_erl.erl @@ -1,7 +1,7 @@  %%  %% %CopyrightBegin%  %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. All Rights Reserved.  %%  %% The contents of this file are subject to the Erlang Public License,  %% Version 1.1, (the "License"); you may not use this file except in @@ -31,7 +31,7 @@  -import(lists, [foldl/3,foldr/3,reverse/1, keysearch/3, map/2, filter/2, max/1]).  -import(gen_util, [lowercase/1, lowercase_all/1, uppercase/1, uppercase_all/1, -		   open_write/1, close/0, erl_copyright/0, w/2, +		   open_write/1, open_write/2, close/0, erl_copyright/0, w/2,  		   args/3, args/4, strip_name/2]).  gl_defines(Defs) -> @@ -90,7 +90,8 @@ types() ->      ].  gl_api(Fs) -> -    open_write("../src/gen/gl.erl"), +    open_write("../src/gen/gl.erl", [{encoding,utf8}]), +    w("%% -*- coding: utf-8 -*-~n~n", []),      erl_copyright(),      w("~n%% OPENGL API~n~n", []),      w("%% This file is generated DO NOT EDIT~n~n", []), @@ -148,7 +149,8 @@ gl_api(Fs) ->      ok.  glu_api(Fs) -> -    open_write("../src/gen/glu.erl"), +    open_write("../src/gen/glu.erl", [{encoding,utf8}]), +    w("%% -*- coding: utf-8 -*-~n~n", []),      erl_copyright(),      w("~n%% OPENGL UTILITY API~n~n", []),      w("%% This file is generated DO NOT EDIT~n~n", []), @@ -330,7 +332,7 @@ format_doc([{constant, Const}|Rest], Count) ->      w("`?~s'", [Const]),      format_doc(Rest, Count-length(Const)-8);  format_doc([{emphasis, Const}|Rest], Count) -> -    w("`~s'", [Const]), +    w("`~ts'", [Const]),      format_doc(Rest, Count-length(Const)-7);  format_doc([{function, Func}|Rest], Count) ->      case Func of @@ -377,7 +379,7 @@ format_doc([{fenced, Open, Close, Eq}|Rest], Count) ->      format_doc(Rest, Count);  format_doc([{code, Code}|Rest], Count) -> -    w("``~s''", [Code]), +    w("``~ts''", [Code]),      format_doc(Rest, Count-length(Code)-7);  format_doc([para|Rest], _Count) -> @@ -387,10 +389,10 @@ format_doc([break|Rest], _Count) ->      w("<br />~n%% ", []),      format_doc(Rest, ?LINE_LEN);  format_doc([{purpose, Purpose}, para | Doc], _Count) -> -    w("%% @doc ~s~n%%~n%% ", [uppercase(Purpose)]), +    w("%% @doc ~ts~n%%~n%% ", [uppercase(Purpose)]),      format_doc(Doc, ?LINE_LEN);  format_doc([{purpose, Purpose} | Doc], _Count) -> -    w("%% @doc ~s~n%%~n%% ", [Purpose]), +    w("%% @doc ~ts~n%%~n%% ", [Purpose]),      format_doc(Doc, ?LINE_LEN);  format_doc([listentry|Rest], _Count) ->      w("~n%%~n%% ", []), @@ -398,11 +400,11 @@ format_doc([listentry|Rest], _Count) ->  format_doc([Str|Rest], Count) ->      case length(Str) of  	Len when Len < Count -> -	    w("~s", [Str]), +	    w("~ts", [Str]),  	    format_doc(Rest, Count-Len);  	_ ->  	    {Str1, Str2} = split(Str, Count, []), -	    w("~s~n%% ", [Str1]), +	    w("~ts~n%% ", [Str1]),  	    format_doc([Str2|Rest], ?LINE_LEN)      end;  format_doc([], _) -> ok. diff --git a/lib/wx/api_gen/gl_scan_doc.erl b/lib/wx/api_gen/gl_scan_doc.erl index fc7b7cf275..80b4826a30 100644 --- a/lib/wx/api_gen/gl_scan_doc.erl +++ b/lib/wx/api_gen/gl_scan_doc.erl @@ -2,7 +2,7 @@  %%--------------------------------------------------------------------  %% %CopyrightBegin%  %% -%% Copyright Ericsson AB 2012. All Rights Reserved. +%% Copyright Ericsson AB 2012-2013. All Rights Reserved.  %%  %% The contents of this file are subject to the Erlang Public License,  %% Version 1.1, (the "License"); you may not use this file except in @@ -56,8 +56,10 @@ gen_output({characters, String0}, #state{gen_output=true, type=Type, str=Str} =  		      mi -> case hd(Str) of  				"/" -> String;  				"*" -> String; +				[215] -> String;  				"+" -> String;  				"-" -> String; +				"=" -> String;  				{fenced,_,_} -> String;  				_ ->  				    [$ |String] @@ -268,7 +270,9 @@ fix_str([$<|Str]) ->  fix_str([$>|Str]) ->      [$&,$g,$t,$;|fix_str(Str)];  fix_str("×"++Str) -> -    [$*|fix_str(Str)]; +    [215|fix_str(Str)]; +%% fix_str([215|Str]) -> +%%     [$*|fix_str(Str)];  fix_str("″"++Str) ->      [$"|fix_str(Str)];  fix_str("·"++Str) -> @@ -277,10 +281,12 @@ fix_str("⁡"++Str) ->      fix_str(Str);  fix_str("⁢"++Str) ->      [$ |fix_str(Str)]; +fix_str(" "++Str) -> +    [$ |fix_str(Str)];  fix_str([$&|Str]) ->      [$&,$a,$m,$p,$; |fix_str(Str)]; -fix_str([C|Str]) when C > 255 -> -    fix_str(Str); +%% fix_str([C|Str]) when C > 255 -> +%%     fix_str(Str);  fix_str([C|Str]) ->      [C|fix_str(Str)];  fix_str([]) -> []. diff --git a/lib/wx/api_gen/wx_extra/wxPrintout.erl b/lib/wx/api_gen/wx_extra/wxPrintout.erl index be8f2e2fa5..1dfd86ec62 100644 --- a/lib/wx/api_gen/wx_extra/wxPrintout.erl +++ b/lib/wx/api_gen/wx_extra/wxPrintout.erl @@ -1,7 +1,7 @@  %%  %% %CopyrightBegin%  %%  -%% Copyright Ericsson AB 2008-2009. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. All Rights Reserved.  %%   %% The contents of this file are subject to the Erlang Public License,  %% Version 1.1, (the "License"); you may not use this file except in @@ -40,7 +40,8 @@ new(Title, OnPrintPage) ->  %%   <pre>OnBeginDocument(This,StartPage,EndPage) -> boolean()  </pre>  %%   <pre>OnEndDocument(This) -> term()  </pre>  %%   <pre>HasPage(This,Page)} -> boolean()   </pre> -%%   <pre>GetPageInfo(This) -> {MinPage:.integer(), MaxPage::integer(), PageFrom::integer(), PageTo::integer()}  </pre> +%%   <pre>GetPageInfo(This) -> {MinPage::integer(), MaxPage::integer(), +%%                              PageFrom::integer(), PageTo::integer()}  </pre>  %%  The <b>This</b> argument is the wxPrintout object reference to this object  %%  <br /> NOTE: The callbacks may not call other processes.   new(Title, OnPrintPage, Opts) when is_list(Title), is_function(OnPrintPage), is_list(Opts) -> diff --git a/lib/wx/api_gen/wx_gen.erl b/lib/wx/api_gen/wx_gen.erl index 7f85151d03..2eb9d9d33d 100644 --- a/lib/wx/api_gen/wx_gen.erl +++ b/lib/wx/api_gen/wx_gen.erl @@ -103,7 +103,12 @@ mangle_info({class,CN,P,O,FL}) ->      Event  = get_value(event,O, false),      Acc    = get_value(acc, O, []),      {Fs,Fopts} = foldr(fun(FWO={F,FO},{Fl,Fopt}) when is_list(FO) -> -			       {[F|Fl],[FWO|Fopt]}; +			       Opt = case F of +					 {Name, ArgLen} when is_integer(ArgLen) -> +					     {Name, FO}; +					 _ -> FWO +				     end, +			       {[F|Fl],[Opt|Fopt]};  			  (F,{Fl,Fopt}) ->  			       {[F|Fl], Fopt}  		       end, {[],[]}, FL), @@ -421,22 +426,30 @@ select_member(Several, #class{name=Class,file=Orig}, Defs0, Opts) ->  parse_member(Data,MType,Virtual,Opts = #hs{fopt=Fopts}) ->      Parse  = fun(Con,A) -> parse_member2(Con,Opts,A) end, -    Method = #method{name=MName,params=PS0} =  +    Method = #method{name=MName,params=PS0} =  	foldl(Parse, #method{method_type=MType, virtual=Virtual}, Data),      %% Skip motif name's if it's last and optional      PS2 = case PS0 of %% Backward order.. -	      [#param{name="name",def=Def,type=#type{name="wxString"}}|PS1]  -	      when Def =/= none ->  +	      [#param{name="name",def=Def,type=#type{name="wxString"}}|PS1] +	      when Def =/= none ->  		  PS1;  	      _ ->  		  PS0  	  end,      Sz = length(PS2), -    PS = map(fun(P=#param{name=PName}) ->  +    PS = map(fun(P=#param{name=PName}) ->  		     patch_param(MName,{Sz,PName},P,Fopts)  	     end, PS2), -    Alias = find_erl_alias_name(MName,PS,Fopts),	     -    Method#method{params=PS, alias=Alias}. +    Alias = find_erl_alias_name(MName,PS,Fopts), +    FOpts = case gb_trees:lookup(MName, Fopts) of +		{value, FuncO} when is_list(FuncO) -> +		    case lists:keyfind({func,Sz}, 1, FuncO) of +			false -> FuncO; +			{_, FuncNO} -> FuncNO +		    end; +		_ -> [] +	    end, +    Method#method{params=PS, alias=Alias, opts=FOpts}.  find_erl_alias_name(MName,Ps,Fopts) ->      case gb_trees:lookup(MName, Fopts) of @@ -527,7 +540,7 @@ add_param2(P=#param{name=Name},#hs{fopt=FOpt},M0=#method{name=MName,params=Ps})  	    M0#method{params=[Patched|Ps]}      end. -patch_param(Method, Name, P, Opt) ->     +patch_param(Method, Name, P, Opt) ->      case gb_trees:lookup(Method,Opt) of  	none -> P;  	{value,NoArg} when is_integer(NoArg) -> P; @@ -560,11 +573,14 @@ handle_param_opt(both, P) -> P#param{in=both};  handle_param_opt({def,Def},P) -> P#param{def=Def};  handle_param_opt({type,Type}, P=#param{type=T})  ->  P#param{type=T#type{name=Type}};  handle_param_opt({single,Opt}, P=#param{type=T}) ->  P#param{type=T#type{single=Opt}}; +handle_param_opt({base,Enum={enum,Type}},  P=#param{type=T}) ->   P#param{type=T#type{base=Enum, name=Type}};  handle_param_opt({base,Opt},  P=#param{type=T}) ->   P#param{type=T#type{base=Opt}};  handle_param_opt({c_only,Opt},P) -> P#param{where=c, alt=Opt}; -handle_param_opt({ref, pointer}, P=#param{type=T}) ->    +handle_param_opt({ref, pointer}, P=#param{type=T}) ->      P#param{type=T#type{by_val=false,ref={pointer, 1}}}; -handle_param_opt({mod,Mods}, P=#param{type=T=#type{mod=Mods0}}) ->   +handle_param_opt({by_val, true}, P=#param{type=T}) -> +    P#param{type=T#type{by_val=true}}; +handle_param_opt({mod,Mods}, P=#param{type=T=#type{mod=Mods0}}) ->      P#param{type=T#type{mod=Mods++Mods0}}.  get_opt(Opt, Method, Sz, Opts) ->  @@ -654,6 +670,12 @@ extract_type_info(#xmlElement{name=ref,attributes=As,content=[#xmlText{value=V}]      {value, #xmlAttribute{value = Kind}} = keysearch(kindref,#xmlAttribute.name,As),      {reverse(foldl(fun extract_type_info2/2, [], string:tokens(V, " "))) ++ Acc,       {Kind,Refid}}; +extract_type_info(#xmlElement{name=ref,attributes=As,content=[#xmlText{value=V}]}, +		  {Acc,_}) -> +    {value, #xmlAttribute{value = Refid}} = keysearch(refid,#xmlAttribute.name,As), +    {value, #xmlAttribute{value = Kind}} = keysearch(kindref,#xmlAttribute.name,As), +    {reverse(foldl(fun extract_type_info2/2, [], string:tokens(V, " "))) ++ Acc, +     {Kind,Refid}};  extract_type_info(What,Acc) ->      ?error({parse_error,What,Acc}). @@ -704,11 +726,9 @@ parse_type2([N="wxTextPos"|R],Info,Opts,T) ->        %%long      parse_type2(R,Info,Opts,T#type{name=N,base=int});  parse_type2([N="wxPrintQuality"|R],Info,Opts,T) ->      parse_type2(R,Info,Opts,T#type{name=N,base=int}); -parse_type2([N="wxPaperSize"|R],Info,Opts,T) -> -    parse_type2(R,Info,Opts,T#type{name=N,base=int});  parse_type2(["wxDataFormat"|_R],_Info,_Opts,T) ->      %% Hack Hack -    T#type{name="wxDataFormatId",base=int}; +    T#type{name="wxDataFormatId",base={enum,"wxDataFormatId"}};  parse_type2([N="wxArrayInt"|R],Info,Opts,T) ->       parse_type2(R,Info,Opts,T#type{name=N,base=int,single=array});  parse_type2([N="wxArrayDouble"|R],Info,Opts,T) ->  @@ -1251,7 +1271,7 @@ parse_enums([File|Files], Parsed) ->      case gb_sets:is_member(File,Parsed) of  	false ->  	    FileName = filename:join(["wx_xml",File ++ "_8h.xml"]), -%%	    io:format("Parse Enums in ~s ~n", [FileName]), +	    %%io:format("Parse Enums in ~s ~n", [FileName]),  	    case xmerl_scan:file(FileName, [{space, normalize}]) of   		{error, enoent} ->  		    parse_enums(Files, gb_sets:add(File,Parsed)); @@ -1318,41 +1338,37 @@ extract_enum2([], N, _Id, Acc) ->  extract_enum3([#xmlElement{name=name,content=[#xmlText{value=Name}]}|R], Id, Acc) ->      case lists:keymember(Name, 1, Acc) of -	true ->  %% Doxygen double includes some defs.  +	true ->  %% Doxygen double includes some defs.  	    {Acc,Id};  	false ->  	    case Id of -		This = {Str,Num} ->  +		This = {Str,Num} ->  		    extract_enum3(R, {Str, Num+1}, [{Name,This}|Acc]);  		Val ->  		    extract_enum3(R, Val+1, [{Name,Val}|Acc])  	    end      end; -extract_enum3([#xmlElement{name=initializer, -			   content=Cs=[#xmlText{}|_]}|_],_Id,[{Name,_}|Acc]) -> - -    String = lists:append([string:strip(C#xmlText.value) || C <- Cs]), -     +extract_enum3([#xmlElement{name=initializer,content=Cs}|_],_Id,[{Name,_}|Acc]) -> +    String = extract_def2(Cs),      Val0 = gen_util:tokens(String,"<& "), -             -    try  +    try  	case Val0 of -	    ["0x" ++ Val1] ->  +	    ["0x" ++ Val1] ->  		Val = http_util:hexlist_to_integer(Val1),  		{[{Name, Val}|Acc], Val+1}; -	    [Single] -> -		Val = list_to_integer(Single), -		{[{Name, Val}|Acc], Val+1};  	    ["1", "<<", Shift] ->  		Val = 1 bsl list_to_integer(Shift),  		{[{Name, Val}|Acc], Val+1}; -	    [_Str, "+", _What] -> -		Val = lists:append(Val0), -		{[{Name, {Val, 0}}|Acc], {Val,1}};	     -	    _What -> -		%% io:format("~p Name ~p ~p~n",[?LINE, Name, Val0]), -		throw(below)		 +	    [Str, "+", What] -> +		Val = list_to_integer(What), +		{[{Name, {Str, Val}}|Acc], {Str,Val+1}}; +	    [Single] -> +		Val = list_to_integer(Single), +		{[{Name, Val}|Acc], Val+1}; +	    _ -> +		%% io:format("~p Name ~p ~p ~p~n",[?LINE, Name, Val0, String]), +		throw(below)  	end      catch _:_ ->  	    {[{Name,{String,0}}|Acc], {String,1}} @@ -1372,7 +1388,7 @@ extract_defs(Defs, File) ->      end.  extract_defs2(#xmlElement{name=memberdef,content=C},{Acc,Skip}) -> -    try  +    try  	Res = {Name,_} = extract_def(C,undefined,Skip),  	case gb_sets:is_member(Name,Skip) orelse lists:keymember(Name, 1, Acc) of  	    true -> {Acc,Skip}; @@ -1380,30 +1396,31 @@ extract_defs2(#xmlElement{name=memberdef,content=C},{Acc,Skip}) ->  	end      catch throw:SkipName -> {Acc, gb_sets:add(SkipName,Skip)}      end. -	      +  extract_def([#xmlElement{name=name,content=[#xmlText{value=Name}]}|R], _N, Skip) ->      case Name of  	"wxUSE" ++ _ ->  	    throw(Name);  	"wx" ++ _ ->  	    extract_def(R, Name, Skip); -	_ ->  +	_ ->  	    throw(Name)      end;  extract_def([#xmlElement{name=param}|_],Name,_) ->      throw(Name); -extract_def([#xmlElement{name=initializer,content=[#xmlText{value=Val0}]}|_],N,Skip) -> +extract_def([#xmlElement{name=initializer,content=Cs}|_R],N,Skip) -> +    Val0 = extract_def2(Cs),      case Val0 of  	"0x" ++ Val1 -> {N, http_util:hexlist_to_integer(Val1)};  	_ ->  	    try  		Val = list_to_integer(Val0),  		{N, Val} -	    catch _:_ ->   +	    catch _:_ ->  		    case def_is_ok(Val0, Skip) of  			false ->  			    throw(N); -			NVal when is_integer(NVal) ->  +			NVal when is_integer(NVal) ->  			    {N, NVal};  			NVal ->  			    {N, {NVal,0}} @@ -1414,7 +1431,24 @@ extract_def([_|R],N,Skip) ->      extract_def(R,N,Skip);  extract_def(_,N,_) ->      throw(N). -		      + +extract_def2([#xmlText{value=Val}|R]) -> +    strip_comment(string:strip(Val)) ++ extract_def2(R); +extract_def2([#xmlElement{content=Cs}|R]) -> +    extract_def2(Cs) ++ extract_def2(R); +extract_def2([]) -> []. + +strip_comment("/*" ++ Rest) -> +    strip_comment_until_end(Rest); +strip_comment("//" ++ _) -> []; +strip_comment([H|R]) -> [H | strip_comment(R)]; +strip_comment([]) -> []. + +strip_comment_until_end("*/" ++ Rest) -> +    strip_comment(Rest); +strip_comment_until_end([_|R]) -> +    strip_comment_until_end(R). +  def_is_ok(Name, Skip) ->      Toks = gen_util:tokens(Name,"()| \\:"),      R = def_is_ok(Toks, Skip, []), diff --git a/lib/wx/api_gen/wx_gen.hrl b/lib/wx/api_gen/wx_gen.hrl index 426e3adfae..89577b9707 100644 --- a/lib/wx/api_gen/wx_gen.hrl +++ b/lib/wx/api_gen/wx_gen.hrl @@ -1,7 +1,7 @@  %%  %% %CopyrightBegin%  %% -%% Copyright Ericsson AB 2008-2010. All Rights Reserved. +%% Copyright Ericsson AB 2008-2012. All Rights Reserved.  %%  %% The contents of this file are subject to the Erlang Public License,  %% Version 1.1, (the "License"); you may not use this file except in @@ -44,7 +44,8 @@  	  doc,                     % Extra documentation  	  virtual,                 % Is virtual?  	  pre_hook    = [],        % Pre hook  before call in c-code -	  post_hook   = []         % Post hook after call in c-code +	  post_hook   = [],        % Post hook after call in c-code +	  opts        = []         % Options  	}         ). diff --git a/lib/wx/api_gen/wx_gen_cpp.erl b/lib/wx/api_gen/wx_gen_cpp.erl index 2209e4a53b..293c97507e 100644 --- a/lib/wx/api_gen/wx_gen_cpp.erl +++ b/lib/wx/api_gen/wx_gen_cpp.erl @@ -118,12 +118,18 @@ gen_constructors(#class{name=Class, methods=Ms0}) ->  gen_constructor(_Class, #method{where=merged_c}) -> ok;  gen_constructor(_Class, #method{where=erl_no_opt}) -> ok; -gen_constructor(Class, _M=#method{params=Ps}) -> +gen_constructor(Class, _M=#method{params=Ps, opts=FOpts}) ->      Gen1  = fun(#param{name=N, type=T}) -> gen_type(T,1) ++ N end,      Gen2  = fun(#param{name=N, type=T}) -> gen_type(T,2) ++ N end,      CallA = fun(#param{name=N}) -> N end,      HaveMergedType = fun(#param{type={merged,_,_,_,_,_,_}}) -> true; (_) -> false end,      ?WTC("gen_constructor"), +    Endif = case lists:keysearch(deprecated, 1, FOpts) of +		{value, {deprecated, IfDef}} -> +		    w("#if ~s~n", [IfDef]), +		    true; +		_ -> false +	    end,      case lists:any(HaveMergedType, Ps) of  	false ->  	    w(" E~s(~s) : ~s(~s) {};~n", @@ -133,7 +139,9 @@ gen_constructor(Class, _M=#method{params=Ps}) ->  	      [Class,args(Gen1,",",Ps),Class,args(CallA,",",Ps)]),  	    w(" E~s(~s) : ~s(~s) {};~n",  	      [Class,args(Gen2,",",Ps),Class,args(CallA,",",Ps)]) -    end. +    end, +    Endif andalso w("#endif~n", []), +    ok.  gen_type(#type{name=Type, ref={pointer,1}, mod=Mod},_) ->      mods(Mod) ++ to_string(Type) ++ " * "; @@ -162,6 +170,14 @@ gen_funcs(Defs) ->      w("#include \"wxe_macros.h\"~n"),      w("#include \"wxe_derived_dest.h\"~n~n"), +    w("#if !wxCHECK_VERSION(2,9,0)~n", []), +    [w("#define ~p int~n", [Enum]) || +	Enum <- [wxPenJoin, wxPenCap, wxImageResizeQuality, %%wxBitmapType, +		 wxPolygonFillMode, wxMappingMode, wxRasterOperationMode, +		 wxFloodFillStyle +		]], +    w("#endif~n",[]), +      w("void WxeApp::wxe_dispatch(wxeCommand& Ecmd)~n{~n"),      w(" char * bp = Ecmd.buffer;~n"),      w(" wxeMemEnv *memenv = getMemEnv(Ecmd.port);~n"), @@ -292,10 +308,16 @@ gen_method(CName, M=#method{name=N,params=[Ps],method_type=destructor,id=MethodI  	    ignore      end,      M; -gen_method(CName,  M=#method{name=N,params=Ps0,type=T,method_type=MT,id=MethodId}) -> +gen_method(CName,  M=#method{name=N,params=Ps0,type=T,method_type=MT,id=MethodId, opts=FOpts}) ->      put(current_func, N),      put(bin_count,-1),      ?WTC("gen_method"), +    Endif = case lists:keysearch(deprecated, 1, FOpts) of +		{value, {deprecated, IfDef}} -> +		    w("#if ~s~n", [IfDef]), +		    true; +		_ -> false +	    end,      w("case ~s: { // ~s::~s~n", [wx_gen_erl:get_unique_name(MethodId),CName,N]),      Ps1 = declare_variables(void, Ps0),      {Ps2,Align} = decode_arguments(Ps1), @@ -314,6 +336,7 @@ gen_method(CName,  M=#method{name=N,params=Ps0,type=T,method_type=MT,id=MethodId      free_args(),      build_return_vals(T,Ps3),      w(" break;~n}~n", []), +    Endif andalso w("#endif~n", []),      erase(current_func),      M. @@ -746,7 +769,7 @@ return_res1(#type{name=Type,ref={pointer,_}, base={term,_}}) ->      {Type ++ " * Result = (" ++ Type ++ "*)", ""};  return_res1(#type{name=Type,ref={pointer,_}}) ->      {Type ++ " * Result = (" ++ Type ++ "*)", ""}; -return_res1(#type{name=Type,single=true,ref=reference}) -> +return_res1(#type{name=Type,single=true,by_val=false,ref=reference}) ->      {Type ++ " * Result = &", ""};  return_res1(#type{name=Type,single=true,by_val=true})    when is_atom(Type) -> @@ -758,7 +781,7 @@ return_res1(#type{name=Type,base={class,_},single=list,ref=reference}) ->  return_res1(#type{name=Type,base={comp,_,_},single=array,by_val=true}) ->      {Type ++ " Result = ", ""};  return_res1(#type{name=Type,single=true,by_val=true, base={class, _}}) -> -    %% Memory leak !!!!!!   XXXX BUGBUG FIXME or doument!! +    %% Temporary memory leak !!!!!!      case Type of  	"wxImage" ->  ok;  	"wxFont"  ->  ok; @@ -769,7 +792,6 @@ return_res1(#type{name=Type,single=true,by_val=true, base={class, _}}) ->  	    io:format("~s::~s Building return value of temp ~s~n",  		      [get(current_class),get(current_func),Type])      end, -    %% #class{id=Id} = get({class,Type}),      {Type ++ " * Result = new " ++ Type ++ "(", "); newPtr((void *) Result,"       ++ "3, memenv);"};  return_res1(#type{base={enum,_Type},single=true,by_val=true}) -> @@ -794,15 +816,14 @@ call_arg(#param{where=c, alt={length,Alt}}) when is_list(Alt) ->  call_arg(#param{where=c, alt={size,Id}}) when is_integer(Id) ->      %% It's a binary      "Ecmd.bin["++ integer_to_list(Id) ++ "]->size"; -call_arg(#param{name=N,def=Def,type=#type{name=Type,by_val=true,single=true,base=Base}}) +call_arg(#param{name=N,def=Def,type=#type{by_val=true,single=true,base=Base}})    when Base =:= int; Base =:= long; Base =:= float; Base =:= double; Base =:= bool ->      case Def of -	none -> "(" ++ to_string(Type) ++ ") *" ++ N; +	none -> "*" ++ N;  	_ ->  N      end; - -call_arg(#param{name=N,type=#type{base={enum,Type}, by_val=true,single=true}}) -> -    "(" ++ enum_type(Type) ++") " ++ N; +call_arg(#param{name=N,type=#type{base={enum,_Type}, by_val=true,single=true}}) -> +    N;  call_arg(#param{name=N,type=#type{base={class,_},by_val=true,single=true}}) -> "*" ++ N;  call_arg(#param{name=N,type=#type{base={class,_},ref=reference,single=true}}) -> "*" ++ N;  call_arg(#param{name=N,type=#type{base=eventType}}) -> @@ -823,8 +844,8 @@ call_arg(#param{name=N,type={merged,_,#type{base={class,_},single=true,  					    ref=Ref},_,_,_,_}})    when ByVal =:= true; Ref =:= reference ->      "*" ++ N; -call_arg(#param{def=Def, type=void}) when Def =/= none -> Def; -call_arg(#param{def=Def, type=voidp}) when Def =/= none -> Def; +call_arg(#param{def=Def, type=void}) when Def =/= none  -> Def; +call_arg(#param{def=Def, type=voidp}) when Def =/= none -> "(void **) " ++ Def;  call_arg(#param{name=N,type=#type{base={ref,_},by_val=true,single=true}}) -> N;  call_arg(#param{name=N,type={merged,_,_,_,_,_,_}}) -> N. @@ -932,10 +953,18 @@ build_ret(Name,_,#type{base={enum,_Type},single=true}) ->      w(" rt.addInt(~s);~n",[Name]);  build_ret(Name,_,#type{base={comp,_,{record, _}},single=true}) ->      w(" rt.add(~s);~n", [Name]); +build_ret(Name,{ret,_},#type{base={comp,_,_},single=true, by_val=true}) -> +    w(" rt.add(~s);~n",[Name]);  build_ret(Name,{ret,_},#type{base={comp,_,_},single=true, ref=reference}) ->      w(" rt.add((*~s));~n",[Name]);  build_ret(Name,_,#type{base={comp,_,_},single=true}) ->      w(" rt.add(~s);~n",[Name]); +build_ret(Name = "ev->m_scanCode",_,#type{base=bool,single=true,by_val=true}) -> +    %% Hardcoded workaround for 2.9 and later +    w("#if !wxCHECK_VERSION(2,9,0)~n", []), +    w(" rt.addBool(~s);~n",[Name]), +    w("#else~n rt.addBool(false);~n",[]), +    w("#endif~n",[]);  build_ret(Name,_,#type{base=bool,single=true,by_val=true}) ->      w(" rt.addBool(~s);~n",[Name]);  build_ret(Name,{arg, both},#type{base=int,single=true,mod=M}) -> diff --git a/lib/wx/api_gen/wx_gen_erl.erl b/lib/wx/api_gen/wx_gen_erl.erl index a8f23575f3..a999a869e6 100644 --- a/lib/wx/api_gen/wx_gen_erl.erl +++ b/lib/wx/api_gen/wx_gen_erl.erl @@ -70,8 +70,7 @@ gen_class1(C=#class{name=Name,parent="static",methods=Ms,options=_Opts}) ->      Exp = fun(M) -> gen_export(C,M) end,      ExportList = lists:usort(lists:append(lists:map(Exp,reverse(Ms)))), -    w("-export([~s]).~n~n", [args(fun(EF) -> EF end, ",", ExportList, 60)]), - +    w("-export([~s]).~n~n", [args(fun({EF,_}) -> EF end, ",", ExportList, 60)]),      Gen = fun(M) -> gen_method(Name,M) end,      NewMs = lists:map(Gen,reverse(Ms)), @@ -134,7 +133,7 @@ gen_class1(C=#class{name=Name,parent=Parent,methods=Ms,options=Opts}) ->  	    w("-include(\"wxe.hrl\").~n",[]),  	    Exp = fun(M) -> gen_export(C,M) end,  	    ExportList = lists:usort(lists:append(lists:map(Exp,reverse(Ms)))), -	    w("-export([~s]).~n~n", [args(fun(EF) -> EF end, ",", ExportList, 60)]), +	    w("-export([~s]).~n~n", [args(fun({EF,_}) -> EF end, ",", ExportList, 60)]),  	    w("%% inherited exports~n",[]),  	    Done0 = ["Destroy", "New", "Create", "destroy", "new", "create"],  	    Done  = gb_sets:from_list(Done0 ++ [M|| #method{name=M} <- lists:append(Ms)]), @@ -143,6 +142,10 @@ gen_class1(C=#class{name=Name,parent=Parent,methods=Ms,options=Opts}) ->  					  lists:usort(["parent_class/1"|InExported]),  					  60)]),  	    w("-export_type([~s/0]).~n", [Name]), +	    case lists:filter(fun({_F,Depr}) -> Depr end, ExportList) of +		[] -> ok; +		Depr -> w("-deprecated([~s]).~n~n", [args(fun({EF,_}) -> EF end, ",", Depr, 60)]) +	    end,  	    w("%% @hidden~n", []),  	    parents_check(Parents),  	    w("-type ~s() :: wx:wx_object().~n", [Name]), @@ -218,33 +221,40 @@ gen_export(#class{name=Class,abstract=Abs},Ms0) ->      case Res of  	[] -> [];  	[M=#method{where=taylormade}|_] -> -	    [taylormade_export(Class, M)]; +	    [deprecated(M, taylormade_export(Class, M))];  	Ms -> -	    GetF = fun(#method{method_type=constructor,where=W,params=Ps}) -> +	    GetF = fun(M=#method{method_type=constructor,where=W,params=Ps}) ->  			   {Args,Opts} = split_optional(Ps),  			   OptLen = case Opts of  					[] -> 0;  					_ when W =:= erl_no_opt -> 0;  					_ -> 1  				    end, -			   "new/" ++ integer_to_list(length(Args)+OptLen); -		      (#method{method_type=destructor}) -> +			   deprecated(M, "new" ++ "/" ++ integer_to_list(length(Args)+OptLen)); +		      (M=#method{method_type=destructor}) ->  			   case Abs of  			       true -> []; -			       _ -> "destroy/1" +			       _ -> deprecated(M, "destroy/1")  			   end; -		      (#method{name=N,alias=A,where=W, params=Ps}) -> +		      (M=#method{name=N,alias=A,where=W, params=Ps}) ->  			   {Args,Opts} = split_optional(Ps),  			   OptLen = case Opts of  					[] -> 0;  					_ when W =:= erl_no_opt -> 0;  					_ -> 1  				    end, -			   erl_func_name(N,A) ++ "/" ++ integer_to_list(length(Args) + OptLen) +			   deprecated(M, erl_func_name(N,A) ++ "/" ++ integer_to_list(length(Args) + OptLen))  		   end,  	    lists:map(GetF, Ms)      end. +deprecated(#method{opts=FOpts}, FA) -> +    case lists:keysearch(deprecated, 1, FOpts) of +	{value, {deprecated, _}} -> +	    {FA,true}; +	_ -> +	    {FA,false} +    end.  gen_method(Class,Ms0) ->      RemoveC = fun(#method{where=merged_c}) -> false;(_Other) -> true end, @@ -832,15 +842,20 @@ doc_enum(_,Ps) ->      [doc_enum_type(Type,Name) || #param{name=Name, type=#type{base={enum,Type}}} <- Ps].  doc_enum_type(Type, Name) -> -    {Enum0, #enum{vals=Vals}} = wx_gen:get_enum(Type), -    Enum = case Enum0 of {_, E} -> E; E -> E end, -    Consts = get(consts), -    Format = fun({N,_What}) -> -		     #const{name=N} = gb_trees:get(N, Consts), -		     "?" ++ enum_name(N) -	     end, -    Vs = args(Format, " | ", Vals), -    {uppercase(Enum),Name, Vs}. +    try +	{Enum0, #enum{vals=Vals}} = wx_gen:get_enum(Type), +	Enum = case Enum0 of {_, E} -> E; E -> E end, +	Consts = get(consts), +	Format = fun({N,_What}) -> +			 #const{name=N} = gb_trees:get(N, Consts), +			 "?" ++ enum_name(N) +		 end, +	Vs = args(Format, " | ", Vals), +	{uppercase(Enum),Name, Vs} +    catch _:_ -> +	    io:format("Warning missing enum type ~p~n", [Type]), +	    {uppercase(Type),Name,"integer"} +    end.  doc_enum_desc([]) -> ok;  doc_enum_desc([{_Enum,Name,Vs}|R]) -> @@ -1014,11 +1029,23 @@ align(64, 1, Str) -> {"0:32," ++ Str,0};  align(Sz, W, Str) -> align(Sz, W rem 2, Str).  enum_name(Name) -> +    case enum_split(Name) of +	{undefined, _} -> Name; +	{_C, ErlName} -> ErlName +    end. + +enum_split(Name) ->      case string:tokens(Name, ":") of -	[Name] -> Name; -	[C,N] ->  C ++ "_" ++ N +	[Name] -> {undefined, Name}; +	[C,N] ->  {C, enum_name(C,N)}      end. +enum_name(undefined, Name) -> Name; +enum_name(Enum, Name) -> Enum ++ "_" ++ Name. + +enum_name_c(undefined, Name) -> Name; +enum_name_c(Enum, Name) -> Enum ++ "::" ++ Name. +  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  gen_enums_ints() -> @@ -1058,6 +1085,14 @@ build_enum_ints(#enum{from=From, vals=Vals},Done) ->  	    w("% From class ~s::~s~n",[Class, Name])      end, +    Consts = get(consts), +    Ignore = fun(Name) -> +		     case gb_trees:lookup(Name, Consts) of +			 {value, Const} -> Const; +			 none -> true +		     end +	     end, +      Format = fun(#const{name="wxEVT_" ++ _}) ->  		     ignore; %% Ignore event macros they are not valid in our event model  		(#const{name=Name,val=Value,is_const=true}) when is_number(Value) -> @@ -1065,44 +1100,57 @@ build_enum_ints(#enum{from=From, vals=Vals},Done) ->  		(#const{name=Name,val=Value,is_const=false}) when is_number(Value) ->  		     w("-define(~s, wxe_util:get_const(~s)).~n", [enum_name(Name),enum_name(Name)]);  		(#const{name=Name,val={Str,0}}) -> +		     {EnumClass, EnumName} = enum_split(Name),  		     case string:tokens(Str, " |()") of  			 [Token] -> -			     w("-define(~s, ~s).~n", [enum_name(Name),const_value(Token)]); +			     w("-define(~s, ~s).~n", [EnumName,const_value(Token, EnumClass, Ignore)]);  			 Tokens -> -			     Def = args(fun(T) -> const_value(T) end, " bor ", Tokens), -			     w("-define(~s, (~s)).~n", [enum_name(Name),Def]) +			     Def = args(fun(T) -> const_value(T, EnumClass, Ignore) end, " bor ", Tokens), +			     w("-define(~s, (~s)).~n", [EnumName, Def])  		     end;  		(#const{name=Name,val={Str,N}}) -> +		     {EnumClass, EnumName} = enum_split(Name),  		     case string:tokens(Str, " |()") of  			 [Token] -> -			     w("-define(~s, (?~s+~p)).~n", [enum_name(Name),Token,N]) +			     w("-define(~s, (~s+~p)).~n", [EnumName,const_value(Token, EnumClass, Ignore),N])  		     end  	     end, -    Consts = get(consts), +      Write = fun({Name,_What}, Skip) -> -		    case gb_sets:is_member(Name,Skip) of -			true -> -			    Skip; -			false -> -			    case gb_trees:lookup(Name, Consts) of -				{value, Const} -> -				    Format(Const), -				    gb_sets:add(Name,Skip); -				none -> Skip -			    end +		    case gb_sets:is_member(Name,Skip) orelse Ignore(Name) of +			true -> Skip; +			Const -> +			    try Format(Const) +			    catch {unknown_value, _Error} -> +				    %% io:format("Const ~s uses unknown define ~p ignoring~n", [Name, _Error]), +				    ok +			    end, +			    gb_sets:add(Name,Skip)  		    end  	    end,      lists:foldl(Write, Done, Vals). -const_value(V) when is_integer(V) -> integer_to_list(V); -const_value(V = "16#" ++ IntList) -> +const_value(V,_,_) when is_integer(V) -> integer_to_list(V); +const_value(V = "16#" ++ IntList,_,_) ->      _ = http_util:hexlist_to_integer(IntList), %% ASSERT      V; -const_value(V0) -> +const_value(V0, EnumClass, Ignore) ->      try  	_ = list_to_integer(V0),  	V0 -    catch _:_ -> [$?|V0] +    catch _:_ -> +	    EEnum = enum_name(EnumClass, V0), +	    CEnum = enum_name_c(EnumClass, V0), +	    case Ignore(CEnum) of +		true when CEnum == V0 -> +		    throw({unknown_value, EEnum}); +		true -> +		    case Ignore(V0) of +			true -> throw({unknown_value, EEnum}); +			_ -> [$?|V0] +		    end; +		_ -> [$?|EEnum] +	    end      end.  gen_event_recs() -> diff --git a/lib/wx/api_gen/wxapi.conf b/lib/wx/api_gen/wxapi.conf index 1f6225ce60..94142ff6ba 100644 --- a/lib/wx/api_gen/wxapi.conf +++ b/lib/wx/api_gen/wxapi.conf @@ -148,7 +148,8 @@  {class, wxTopLevelWindowGTK, wxWindow,    [{alias, [{wxTopLevelWindowGTK, wxTopLevelWindow}]}], - ['GetIcon','GetIcons','GetTitle','IsActive','Iconize', + [{'GetIcon', [{return, {by_val, true}}]}, +  'GetIcons','GetTitle','IsActive','Iconize',    'IsFullScreen','IsIconized','IsMaximized','Maximize',    'RequestUserAttention','SetIcon','SetIcons',    'CenterOnScreen', 'CentreOnScreen', @@ -279,8 +280,11 @@  {class, wxGridCellEditor,   root, [],    ['Create',    'IsCreated', 'SetSize', 'Show', -  'PaintBackground', 'BeginEdit', 'EndEdit', 'Reset', 'StartingKey', -  'StartingClick', 'HandleReturn' 						 +  {'PaintBackground', [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, +  'BeginEdit', +  {'EndEdit', [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, +  'Reset', 'StartingKey', +  'StartingClick', 'HandleReturn'    %'Destroy','Clone','~wxGridCellEditor',   ]}. @@ -319,17 +323,25 @@  {class, wxDC, object,    [{skip, [{'DrawEllipse',5},{'DrawRectangle',5},  	  {'DrawRoundedRectangle',6},{'SetClippingRegion',5}]}], - [{'Blit',7},'CalcBoundingBox','Clear','ComputeScaleAndOrigin',{'CrossHair',1}, + [{{'Blit',7},[{"rop", [{base, {enum, "wxRasterOperationMode"}}]}]}, +  'CalcBoundingBox','Clear', +  {'ComputeScaleAndOrigin',[{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, +  {'CrossHair',1},    'DestroyClippingRegion','DeviceToLogicalX','DeviceToLogicalXRel',    'DeviceToLogicalY','DeviceToLogicalYRel',{'DrawArc',3},{'DrawBitmap',3},    {'DrawCheckMark',1},{'DrawCircle',2},'DrawEllipse',{'DrawEllipticArc',4},    {'DrawIcon',2},{'DrawLabel',4},{'DrawLine',2},    {'DrawLines', [{"n",{c_only,{length,"points"}}}]}, -  {'DrawPolygon', [{"n",{c_only,{length,"points"}}}]}, %'DrawPolyPolygon', +  {'DrawPolygon', [{"n",{c_only,{length,"points"}}}, +		   {"fillStyle", [{base, {enum, "wxPolygonFillMode"}}]} +		  ]}, +  %%'DrawPolyPolygon',    {'DrawPoint',1},'DrawRectangle',    {'DrawRotatedText',3}, 'DrawRoundedRectangle',%'DrawSpline',    {'DrawText',2}, -  'EndDoc','EndPage',{'FloodFill',3},'GetBackground','GetBackgroundMode', +  'EndDoc','EndPage', +  {{'FloodFill',3},[{"style", [{base, {enum, "wxFloodFillStyle"}}]}]}, +  'GetBackground','GetBackgroundMode',    'GetBrush','GetCharHeight','GetCharWidth',{'GetClippingBox',[{"rect", skip_member}]},    'GetFont','GetLayoutDirection','GetLogicalFunction','GetMapMode','GetMultiLineTextExtent',    {'GetPartialTextExtents', [{"widths", out}]}, @@ -340,21 +352,33 @@    'LogicalToDeviceX','LogicalToDeviceXRel','LogicalToDeviceY','LogicalToDeviceYRel',    'MaxX','MaxY','MinX','MinY','IsOk','ResetBoundingBox','SetAxisOrientation',    'SetBackground','SetBackgroundMode','SetBrush','SetClippingRegion','SetDeviceOrigin', -  'SetFont','SetLayoutDirection','SetLogicalFunction','SetMapMode', 'SetPalette', +  'SetFont','SetLayoutDirection', +  {'SetLogicalFunction', [{"function", [{base, {enum, "wxRasterOperationMode"}}]}]}, +  {'SetMapMode', [{"mode", [{base, {enum, "wxMappingMode"}}]}]}, +  'SetPalette',    'SetPen','SetTextBackground','SetTextForeground','SetUserScale','StartDoc','StartPage']}.  {class,wxMirrorDC, wxDC, [], ['wxMirrorDC', '~wxMirrorDC']}.  {class,wxScreenDC, wxDC, [], ['wxScreenDC', '~wxScreenDC']}. -{class,wxPostScriptDC,wxDC,[],['wxPostScriptDC','~wxPostScriptDC','SetResolution','GetResolution']}. -{class,wxWindowDC, wxDC, [], ['wxWindowDC', '~wxWindowDC']}. -{class,wxClientDC,wxWindowDC,[],['wxClientDC', '~wxClientDC']}. -{class,wxPaintDC, wxWindowDC, [], ['wxPaintDC', '~wxPaintDC']}. +{class,wxPostScriptDC,wxDC,[], + ['wxPostScriptDC','~wxPostScriptDC', +  {'SetResolution', [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, +  {'GetResolution', [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}]}. +{class,wxWindowDC, wxDC, [], + [{'wxWindowDC', [{{func, 0}, [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}]}, +  '~wxWindowDC']}. +{class,wxClientDC,wxWindowDC,[], + [{'wxClientDC', [{{func, 0}, [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}]}, +  '~wxClientDC']}. +{class,wxPaintDC, wxWindowDC, [], + [{'wxPaintDC', [{{func, 0}, [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}]}, +  '~wxPaintDC']}.  %%{class,wxPrinterDC, wxDC, [], ['wxPrinterDC','GetPaperRect']}. Not in GTK  {class,wxMemoryDC, wxDC, [], ['wxMemoryDC', '~wxMemoryDC','SelectObject','SelectObjectAsSource']}.  {class,wxBufferedDC,wxMemoryDC,[],['wxBufferedDC','~wxBufferedDC','Init']}.  {class,wxBufferedPaintDC,wxBufferedDC,[],['wxBufferedPaintDC', '~wxBufferedPaintDC']}.  %% Only a typedef! -%%{class,wxAutoBufferedPaintDC,wxBufferedPaintDC,[],['wxAutoBufferedPaintDC']}.  +%%{class,wxAutoBufferedPaintDC,wxBufferedPaintDC,[],['wxAutoBufferedPaintDC']}.  {class, wxGraphicsObject, object, [{ifdef, wxUSE_GRAPHICS_CONTEXT}],   ['~wxGraphicsObject', 'GetRenderer','IsNull']}. @@ -362,13 +386,17 @@   [{ifdef, wxUSE_GRAPHICS_CONTEXT}, {skip, [{'StrokeLines',4}]}],   ['~wxGraphicsContext',    'Create', %%CreateFromNative CreateFromNativeWindow -  'CreatePen','CreateBrush','CreateRadialGradientBrush', -  'CreateLinearGradientBrush','CreateFont','CreateMatrix', +  'CreatePen','CreateBrush', +  {'CreateRadialGradientBrush', [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, +  {'CreateLinearGradientBrush', [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, +  'CreateFont','CreateMatrix',    'CreatePath','Clip','ResetClip',    'DrawBitmap','DrawEllipse','DrawIcon', -  {'DrawLines', [{"n",{c_only,{length,"points"}}}, {"points", {single,array}}]}, -  'DrawPath', -  'DrawRectangle','DrawRoundedRectangle','DrawText','FillPath', +  {'DrawLines', [{"n",{c_only,{length,"points"}}}, {"points", {single,array}}, +		 {"fillStyle", [{base, {enum, "wxPolygonFillMode"}}]}]}, +  {'DrawPath',[{"fillStyle", [{base, {enum, "wxPolygonFillMode"}}]}]}, +  'DrawRectangle','DrawRoundedRectangle','DrawText', +  {'FillPath',[{"fillStyle", [{base, {enum, "wxPolygonFillMode"}}]}]},    'StrokePath', %% 'GetNativeContext',    {'GetPartialTextExtents', [{"widths", out}]},    'GetTextExtent','Rotate','Scale','Translate', @@ -383,15 +411,18 @@  {class, wxGraphicsPath, wxGraphicsObject, [{ifdef, wxUSE_GRAPHICS_CONTEXT}],   ['MoveToPoint','AddArc','AddArcToPoint','AddCircle','AddCurveToPoint',    'AddEllipse','AddLineToPoint','AddPath','AddQuadCurveToPoint', -  'AddRectangle','AddRoundedRectangle','CloseSubpath','Contains', -  'GetBox','GetCurrentPoint','Transform'  +  'AddRectangle','AddRoundedRectangle','CloseSubpath', +  {'Contains', [{"fillStyle", [{base, {enum, "wxPolygonFillMode"}}]}]}, +  'GetBox','GetCurrentPoint','Transform'    %'GetNativePath','UnGetNativePath'   ]}.  {class, wxGraphicsRenderer, object, [{ifdef, wxUSE_GRAPHICS_CONTEXT}],   ['GetDefaultRenderer','CreateContext',    %%'CreateContextFromNativeContext', 'CreateContextFromNativeWindow',    'CreatePen','CreateBrush', -  'CreateLinearGradientBrush','CreateRadialGradientBrush','CreateFont', +  {'CreateLinearGradientBrush', [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, +  {'CreateRadialGradientBrush', [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, +  'CreateFont',    'CreateMatrix','CreatePath']}.  {class, wxGraphicsPen,  wxGraphicsObject,[{ifdef, wxUSE_GRAPHICS_CONTEXT}], []}. @@ -501,10 +532,12 @@    'CopyFromBitmap','~wxIcon']}.  {class, wxIconBundle, root, [], - ['wxIconBundle','~wxIconBundle','AddIcon','GetIcon']}. + ['wxIconBundle','~wxIconBundle','AddIcon', + {'GetIcon', [{return, {by_val, true}}]}]}.  {class, wxCursor, wxBitmap,[],  - [{'wxCursor',[{"bits",[in,{base,binary},{single,true}]}, + [{'wxCursor',[{{func, 5}, [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, +	       {"bits",[in,{base,binary},{single,true}]},  	       {"maskBits",nowhere},{"fg",nowhere},{"bg",nowhere}]},    '~wxCursor','Ok']}. @@ -549,16 +582,22 @@    {'GetAlpha',[{{0,return},{base,{binary,"(This->GetWidth()*This->GetHeight())"}}}]},    'GetBlue',    {'GetData', [{return,{base,{binary,"(This->GetWidth()*This->GetHeight()*3)"}}}]}, -  'GetGreen', 'GetImageCount', %'GetHandlers', +  'GetGreen', +  {'GetImageCount', [{"type", [{base, {enum, "wxBitmapType"}}]}]}, +  %%'GetHandlers',    'GetHeight','GetMaskBlue','GetMaskGreen',    'GetMaskRed','GetOrFindMaskColour','GetPalette',    'GetRed','GetSubImage', 'GetWidth',%%':HSVValue', 'HSVtoRGB',    'HasAlpha','HasMask','GetOption','GetOptionInt','HasOption',    'InitAlpha','InitStandardHandlers',%'InsertHandler',    'IsTransparent', 'LoadFile','Ok',%%RGBValue 'RGBtoHSV', -  'RemoveHandler','Mirror','Replace','Rescale','Resize', +  'RemoveHandler','Mirror','Replace', +  {'Rescale', [{"quality", [{base, {enum, "wxImageResizeQuality"}}]}]}, +  'Resize',    'Rotate', 'RotateHue', -  'Rotate90','SaveFile','Scale','Size', +  'Rotate90','SaveFile', +  {'Scale', [{"quality", [{base, {enum, "wxImageResizeQuality"}}]}]}, +  'Size',    {'SetAlpha', [{{2,"alpha"},[in,{base,binary}, {def, none}]},  		{{2,pre_hook},   		 [{c, "if(!static_data) {" @@ -576,15 +615,20 @@    'SetRGB']}.  {class, wxBrush, object, [], - ['wxBrush','~wxBrush','GetColour','GetStipple','GetStyle', + ['wxBrush','~wxBrush', +  {'GetColour', [{return, {by_val, true}}]}, +  'GetStipple','GetStyle',    'IsHatch','IsOk','SetColour','SetStipple','SetStyle']}.  {class, wxPen, object, [], - ['wxPen','~wxPen','GetCap','GetColour', + ['wxPen','~wxPen','GetCap', +  {'GetColour', [{return, {by_val, true}}]},    %%'GetDashes', %'GetStipple', -  'GetJoin', 'GetStyle','GetWidth','IsOk','SetCap','SetColour', +  'GetJoin', 'GetStyle','GetWidth','IsOk', +  {'SetCap', [{"capStyle", [{base, {enum, "wxPenCap"}}]}]}, +  'SetColour',    %%'SetDashes',  %'SetStipple', -  'SetJoin', 'SetStyle','SetWidth']}. +  {'SetJoin', [{"joinStyle", [{base, {enum, "wxPenJoin"}}]}]}, 'SetStyle','SetWidth']}.  {enum, wxRegionContain, "wx"}. @@ -683,8 +727,11 @@   ['wxButton','~wxButton','Create',%'GetLabel',    'GetDefaultSize', 'SetDefault','SetLabel']}.  {class, wxBitmapButton, wxButton, [],  - ['wxBitmapButton','~wxBitmapButton','Create','GetBitmapDisabled', -  'GetBitmapFocus','GetBitmapLabel','GetBitmapSelected', + ['wxBitmapButton','~wxBitmapButton','Create', +  {'GetBitmapDisabled', [{return, {by_val, true}}]}, +  {'GetBitmapFocus', [{return, {by_val, true}}]}, +  {'GetBitmapLabel', [{return, {by_val, true}}]}, +  {'GetBitmapSelected', [{return, {by_val, true}}]},    'SetBitmapDisabled','SetBitmapFocus','SetBitmapLabel','SetBitmapSelected']}.  {class, wxToggleButton, wxControl, [],    ['wxToggleButton','~wxToggleButton','Create','GetValue','SetValue']}. @@ -693,8 +740,10 @@  {class, wxDateTime, root, [ignore], []}.  %% Only for ifdefs and enums  {class, wxCalendarCtrl, wxControl, [],  - ['wxCalendarCtrl','Create','~wxCalendarCtrl','SetDate','GetDate', -  'EnableYearChange','EnableMonthChange','EnableHolidayDisplay', + ['wxCalendarCtrl','Create','~wxCalendarCtrl','SetDate', +  {'GetDate', [{return, {by_val, true}}]}, +  {'EnableYearChange', [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, %% Temp bug in wx I assume +  'EnableMonthChange','EnableHolidayDisplay',    'SetHeaderColours','GetHeaderColourFg','GetHeaderColourBg',    'SetHighlightColours','GetHighlightColourFg','GetHighlightColourBg',    'SetHolidayColours','GetHolidayColourFg','GetHolidayColourBg', @@ -816,8 +865,9 @@  {enum, wxTextAttrAlignment, "wxTEXT_ALIGNMENT_"}.  {class, wxTextAttr, root, [],  - ['wxTextAttr','GetAlignment','GetBackgroundColour','GetFont','GetLeftIndent', -  'GetLeftSubIndent','GetRightIndent','GetTabs','GetTextColour', + ['wxTextAttr','GetAlignment','GetBackgroundColour', +  {'GetFont', [{return, {by_val, true}}]}, +  'GetLeftIndent','GetLeftSubIndent','GetRightIndent','GetTabs','GetTextColour',    'HasBackgroundColour','HasFont','HasTextColour','GetFlags','IsDefault',    'SetAlignment','SetBackgroundColour','SetFlags','SetFont','SetLeftIndent',    'SetRightIndent','SetTabs','SetTextColour']}. @@ -1233,7 +1283,8 @@  {class, wxMDIParentFrame, wxFrame, [],    [ - 'wxMDIParentFrame', '~wxMDIParentFrame', 'ActivateNext', 'ActivatePrevious',  +  'wxMDIParentFrame', +  '~wxMDIParentFrame', 'ActivateNext', 'ActivatePrevious',    'ArrangeIcons', 'Cascade', 'Create',     %%'GetClientSize', 'GetToolBar', 'SetToolBar',  defined in parent    'GetActiveChild', 'GetClientWindow',  @@ -1244,8 +1295,9 @@  {class, wxMDIChildFrame, wxFrame, [],    ['wxMDIChildFrame','~wxMDIChildFrame','Activate','Create','Maximize','Restore']}. -{class, wxMDIClientWindow, wxWindow, [],  - ['wxMDIClientWindow','~wxMDIClientWindow','CreateClient']}. +{class, wxMDIClientWindow, wxWindow, [], + [{'wxMDIClientWindow', [{{func, 2}, [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}]}, +  '~wxMDIClientWindow','CreateClient']}.  {class, wxLayoutAlgorithm, object, [],   ['wxLayoutAlgorithm', '~wxLayoutAlgorithm',  @@ -1310,12 +1362,7 @@     [wxEVT_LEFT_DOWN,wxEVT_LEFT_UP,wxEVT_MIDDLE_DOWN,wxEVT_MIDDLE_UP,      wxEVT_RIGHT_DOWN,wxEVT_RIGHT_UP,wxEVT_MOTION,wxEVT_ENTER_WINDOW,      wxEVT_LEAVE_WINDOW,wxEVT_LEFT_DCLICK,wxEVT_MIDDLE_DCLICK, -    wxEVT_RIGHT_DCLICK,wxEVT_MOUSEWHEEL, -    wxEVT_NC_LEFT_DOWN,wxEVT_NC_LEFT_UP, -    wxEVT_NC_MIDDLE_DOWN,wxEVT_NC_MIDDLE_UP,wxEVT_NC_RIGHT_DOWN, -    wxEVT_NC_RIGHT_UP,wxEVT_NC_MOTION,wxEVT_NC_ENTER_WINDOW, -    wxEVT_NC_LEAVE_WINDOW,wxEVT_NC_LEFT_DCLICK,wxEVT_NC_MIDDLE_DCLICK, -    wxEVT_NC_RIGHT_DCLICK]}], +    wxEVT_RIGHT_DCLICK,wxEVT_MOUSEWHEEL]}],   ['AltDown','Button','ButtonDClick','ButtonDown','ButtonUp','CmdDown','ControlDown',    'Dragging',  'Entering',  'GetButton',  'GetPosition',  'GetLogicalPosition',    'GetLinesPerAction',  'GetWheelRotation',  'GetWheelDelta',  'GetX',  'GetY', @@ -1345,8 +1392,8 @@   ['GetSize']}.  {class, wxMoveEvent, wxEvent, [{event,[wxEVT_MOVE]}],   ['GetPosition']}. -{class, wxPaintEvent, wxEvent, [{event,[wxEVT_PAINT,wxEVT_PAINT_ICON]}],[]}. -{class, wxNcPaintEvent, wxEvent, [{event,[wxEVT_NC_PAINT]}],[]}. +{class, wxPaintEvent, wxEvent, [{event,[wxEVT_PAINT]}],[]}. +%%{class, wxNcPaintEvent, wxEvent, [{event,[wxEVT_NC_PAINT]}],[]}.  {class, wxEraseEvent, wxEvent,    [{acc, [{m_dc, "GetDC()"}]},    {event, [wxEVT_ERASE_BACKGROUND]}], @@ -1415,7 +1462,8 @@   ['GetPosition','SetPosition']}.  {enum, wxIdleMode, "wxIDLE_"}.  {class, wxIdleEvent, wxEvent, [{event,[wxEVT_IDLE]}], - ['CanSend','GetMode','RequestMore','MoreRequested','SetMode']}. + [{'CanSend', [{deprecated, "!wxCHECK_VERSION(2,9,0)"}]}, +  'GetMode','RequestMore','MoreRequested','SetMode']}.  {class, wxGridEvent, wxNotifyEvent,    [{acc, [{m_row, "GetRow()"}, {m_col, "GetCol()"}, {m_x, "GetPosition().x"},{m_y, "GetPosition().y"},  	 {m_selecting, "Selecting()"},{m_control,"ControlDown()"}, @@ -1634,7 +1682,7 @@    'StyleSetFont', 'StyleSetFontAttr', 'StyleSetCharacterSet', 'StyleSetFontEncoding',     'CmdKeyExecute',     'SetMargins', {'GetSelection', [{"startPos", [out]}, {"endPos",[out]}]},  -  'PointFromPosition', 'ScrollToLine', 'ScrollToColumn', 'SendMsg',  +  'PointFromPosition', 'ScrollToLine', 'ScrollToColumn', %% 'SendMsg',    'SetVScrollBar', 'SetHScrollBar', 'GetLastKeydownProcessed', 'SetLastKeydownProcessed',     'SaveFile', 'LoadFile', 'DoDragOver', 'DoDropText', 'GetUseAntiAliasing',     {'AddTextRaw', [{"text", [in, {base, binary}]}]}, | 
