android-sdk: Now tested that it can parse correctly the CheckBox

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1681 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2011-06-15 14:45:40 +00:00
parent d734ddb71b
commit a822873b80
2 changed files with 119 additions and 58 deletions

View File

@ -70,7 +70,7 @@
<UnitName Value="androidmenu"/> <UnitName Value="androidmenu"/>
<EditorIndex Value="5"/> <EditorIndex Value="5"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="77"/> <TopLine Value="51"/>
<CursorPos X="25" Y="24"/> <CursorPos X="25" Y="24"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@ -90,8 +90,8 @@
<UnitName Value="androidview"/> <UnitName Value="androidview"/>
<EditorIndex Value="7"/> <EditorIndex Value="7"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="109"/> <TopLine Value="187"/>
<CursorPos X="59" Y="419"/> <CursorPos X="1" Y="219"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit4> </Unit4>
@ -130,8 +130,8 @@
<IsVisibleTab Value="True"/> <IsVisibleTab Value="True"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="206"/> <TopLine Value="263"/>
<CursorPos X="48" Y="229"/> <CursorPos X="55" Y="286"/>
<UsageCount Value="20"/> <UsageCount Value="20"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit8> </Unit8>
@ -175,123 +175,123 @@
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="175" Column="35" TopLine="150"/> <Caret Line="157" Column="85" TopLine="124"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="21" Column="31" TopLine="40"/> <Caret Line="127" Column="88" TopLine="104"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="98" Column="42" TopLine="75"/> <Caret Line="151" Column="31" TopLine="129"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="84" Column="3" TopLine="77"/> <Caret Line="24" Column="24" TopLine="1"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="89" Column="1" TopLine="77"/> <Caret Line="25" Column="34" TopLine="1"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="114" Column="29" TopLine="91"/> <Caret Line="123" Column="82" TopLine="97"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="../../../p-tools/turbochessclock4android/androidview.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="421" Column="3" TopLine="395"/> <Caret Line="18" Column="26" TopLine="1"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="157" Column="85" TopLine="124"/> <Caret Line="124" Column="120" TopLine="101"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="127" Column="88" TopLine="104"/> <Caret Line="66" Column="44" TopLine="40"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="151" Column="31" TopLine="129"/> <Caret Line="21" Column="27" TopLine="1"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="24" Column="24" TopLine="1"/> <Caret Line="88" Column="3" TopLine="80"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="25" Column="34" TopLine="1"/> <Caret Line="128" Column="3" TopLine="66"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="123" Column="82" TopLine="97"/> <Caret Line="19" Column="61" TopLine="1"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="18" Column="26" TopLine="1"/> <Caret Line="21" Column="37" TopLine="2"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="124" Column="120" TopLine="101"/> <Caret Line="39" Column="18" TopLine="38"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="66" Column="44" TopLine="40"/> <Caret Line="301" Column="70" TopLine="267"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="21" Column="27" TopLine="1"/> <Caret Line="22" Column="35" TopLine="1"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="88" Column="3" TopLine="80"/> <Caret Line="237" Column="100" TopLine="196"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="128" Column="3" TopLine="66"/> <Caret Line="189" Column="3" TopLine="148"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="19" Column="61" TopLine="1"/> <Caret Line="247" Column="65" TopLine="219"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="21" Column="37" TopLine="2"/> <Caret Line="246" Column="49" TopLine="223"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="39" Column="18" TopLine="38"/> <Caret Line="154" Column="16" TopLine="145"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="301" Column="70" TopLine="267"/> <Caret Line="211" Column="20" TopLine="188"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="22" Column="35" TopLine="1"/> <Caret Line="26" Column="63" TopLine="1"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="237" Column="100" TopLine="196"/> <Caret Line="309" Column="32" TopLine="305"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="189" Column="3" TopLine="148"/> <Caret Line="26" Column="35" TopLine="1"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="247" Column="65" TopLine="219"/> <Caret Line="305" Column="54" TopLine="305"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="246" Column="49" TopLine="223"/> <Caret Line="24" Column="59" TopLine="1"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="154" Column="16" TopLine="145"/> <Caret Line="22" Column="27" TopLine="1"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="android_sdk_bindings_gen.pas"/> <Filename Value="android_sdk_bindings_gen.pas"/>
<Caret Line="211" Column="20" TopLine="188"/> <Caret Line="23" Column="17" TopLine="1"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>

View File

@ -19,10 +19,13 @@ type
FClassNum, FMethodNum: Integer; FClassNum, FMethodNum: Integer;
procedure ProcessModelFile(ASourceFile, APasOutputFile, AJavaOutputFile: string); procedure ProcessModelFile(ASourceFile, APasOutputFile, AJavaOutputFile: string);
procedure ProcessModelLine(ASourceLine: string); procedure ProcessModelLine(ASourceLine: string);
procedure ProcessModelMethodClass(ASourceLine: string); procedure ProcessModelClass(ASourceLine: string);
procedure ProcessModelMethodLine(ASourceLine: string); procedure ProcessModelMethod(ASourceLine: string);
procedure ProcessModelConstructor(ASourceLine: string);
function GetNextWord(ALine: string; var AStartPos: Integer): string; function GetNextWord(ALine: string; var AStartPos: Integer): string;
function GetPascalTypeName(ABaseName: string): string; function GetPascalTypeName(ABaseName: string): string;
function GetJavaResultFunction(AReturnType: string): string;
function GetJavaTypeReader(AType: string): string;
public public
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
@ -105,19 +108,25 @@ begin
// Starting a new class // Starting a new class
if ASourceLine[1] = '[' then if ASourceLine[1] = '[' then
begin begin
ProcessModelMethodClass(ASourceLine); ProcessModelClass(ASourceLine);
Exit; Exit;
end; end;
// Adding methods to a class // Adding methods to a class
if lCurWord = 'method' then if lCurWord = 'method' then
begin begin
ProcessModelMethodLine(ASourceLine); ProcessModelMethod(ASourceLine);
Exit;
end;
if lCurWord = 'constructor' then
begin
ProcessModelConstructor(ASourceLine);
Exit; Exit;
end; end;
end; end;
procedure TAndroidSDKBindingsGen.ProcessModelMethodClass(ASourceLine: string); procedure TAndroidSDKBindingsGen.ProcessModelClass(ASourceLine: string);
var var
lReaderPos: Integer = 1; lReaderPos: Integer = 1;
lCurWord, lParentClassName: string; lCurWord, lParentClassName: string;
@ -146,7 +155,7 @@ begin
FJavaOutputIDs.Add(' // ' + FClassName); FJavaOutputIDs.Add(' // ' + FClassName);
end; end;
procedure TAndroidSDKBindingsGen.ProcessModelMethodLine( procedure TAndroidSDKBindingsGen.ProcessModelMethod(
ASourceLine: string); ASourceLine: string);
var var
lReaderPos: Integer = 1; lReaderPos: Integer = 1;
@ -179,17 +188,17 @@ begin
FPasOutputImpl.Add(' vAndroidPipesComm.SendInt(Index); // Self, Java Pointer'); FPasOutputImpl.Add(' vAndroidPipesComm.SendInt(Index); // Self, Java Pointer');
lJavaParamSelf := 'param_self_' + FClassName; lJavaParamSelf := 'param_self_' + FClassName;
FJavaOutputMethods.Add(' // ' + ASourceLine); FJavaOutputMethods.Add(' // ' + ASourceLine);
FJavaOutputMethods.Add(' case ' + lIDString + ':'); FJavaOutputMethods.Add(' case ' + lIDString + ':');
FJavaOutputMethods.Add(' DebugOut("' + lIDString + '");'); FJavaOutputMethods.Add(' DebugOut("' + lIDString + '");');
FJavaOutputMethods.Add(' // Self'); FJavaOutputMethods.Add(' // Self');
FJavaOutputMethods.Add(' lInt = MyAndroidPipesComm.GetInt();'); FJavaOutputMethods.Add(' lInt = MyAndroidPipesComm.GetInt();');
FJavaOutputMethods.Add(' ' + lJavaParamSelf + ' = (' + FClassName + ') ViewElements.get(lInt);'); FJavaOutputMethods.Add(' ' + lJavaParamSelf + ' = (' + FClassName + ') ViewElements.get(lInt);');
FJavaOutputMethods.Add(' // params'); FJavaOutputMethods.Add(' // params');
// Lists of constants for the IDs // Lists of constants for the IDs
FPasOutputIDs.Add(' ' + lIDString + ' = 0' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';'); FPasOutputIDs.Add(' ' + lIDString + ' = $' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
FJavaOutputIDs.Add(' static final int ' + lIDString + ' = 0x0' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';'); FJavaOutputIDs.Add(' static final int ' + lIDString + ' = 0x' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
// Add all parameters // Add all parameters
TmpStr := lMethodName + '('; TmpStr := lMethodName + '(';
@ -208,7 +217,7 @@ begin
// Java parameter reading // Java parameter reading
lJavaParamVar := 'l' + lParamType + '_' + IntToStr(lParamNum); lJavaParamVar := 'l' + lParamType + '_' + IntToStr(lParamNum);
FJavaOutputMethods.Add(' ' + lJavaParamVar + ' = MyAndroidPipesComm.GetInt();'); FJavaOutputMethods.Add(' ' + lJavaParamVar + ' = MyAndroidPipesComm.' + GetJavaTypeReader(lParamType) + '();');
lJavaParams := lJavaParams + lJavaParamVar + ', '; lJavaParams := lJavaParams + lJavaParamVar + ', ';
Inc(lParamNum); Inc(lParamNum);
@ -236,18 +245,57 @@ begin
FPasOutputImpl.Add('end;'); FPasOutputImpl.Add('end;');
FPasOutputImpl.Add(''); FPasOutputImpl.Add('');
FJavaOutputMethods.Add(' //'); FJavaOutputMethods.Add(' //');
if lMethodReturn = 'void' then if lMethodReturn = 'void' then
begin begin
FJavaOutputMethods.Add(' ' + lJavaParamSelf + '.' + lMethodName + '(' + lJavaParams + ');'); FJavaOutputMethods.Add(' ' + lJavaParamSelf + '.' + lMethodName + '(' + lJavaParams + ');');
FJavaOutputMethods.Add(' MyAndroidPipesComm.SendResult();'); FJavaOutputMethods.Add(' MyAndroidPipesComm.SendResult();');
end end
else else
begin begin
FJavaOutputMethods.Add(' lResult_' + lMethodReturn + ' = ' + lJavaParamSelf + '.' + lMethodName + '(' + lJavaParams + ');'); FJavaOutputMethods.Add(' lResult_' + lMethodReturn + ' = ' + lJavaParamSelf + '.' + lMethodName + '(' + lJavaParams + ');');
FJavaOutputMethods.Add(' MyAndroidPipesComm.SendIntResult(lResult_' + lMethodReturn + ');'); FJavaOutputMethods.Add(' MyAndroidPipesComm.' + GetJavaResultFunction(lMethodReturn) + '(lResult_' + lMethodReturn + ');');
end; end;
FJavaOutputMethods.Add(' break;'); FJavaOutputMethods.Add(' break;');
Inc(FMethodNum);
end;
procedure TAndroidSDKBindingsGen.ProcessModelConstructor(ASourceLine: string);
var
lReaderPos: Integer = 1;
lCurWord: string;
lParamNum: Integer = 1;
lMethodName, lParamType, lParamTypePas, lParamName: string;
DeclarationBase, TmpStr, lIDString: string;
FPasOutputImplCurLine: Integer;
begin
if ASourceLine = '' then Exit;
lCurWord := GetNextWord(ASourceLine, lReaderPos);
// Method type and name
lMethodName := GetNextWord(ASourceLine, lReaderPos);
lIDString := 'amkUI_' + FClassNamePas + '_' + lMethodName;
FPasOutputClasses.Add(' constructor ' + lMethodName + '();');
FPasOutputImpl.Add('constructor ' + FClassNamePas + '.' + lMethodName + '();');
FPasOutputImpl.Add('begin');
FPasOutputImpl.Add(' vAndroidPipesComm.SendByte(ShortInt(amkUICommand));');
FPasOutputImpl.Add(' vAndroidPipesComm.SendInt(' + lIDString + ');');
FPasOutputImpl.Add(' Index := vAndroidPipesComm.WaitForIntReturn();');
FPasOutputImpl.Add('end;');
FPasOutputIDs.Add(' ' + lIDString + ' = $' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
FJavaOutputIDs.Add(' static final int ' + lIDString + ' = 0x' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
FJavaOutputMethods.Add(' case ' + lIDString + ':');
FJavaOutputMethods.Add(' DebugOut("' + lIDString + '");');
FJavaOutputMethods.Add(' ViewElements.add(new ' + FClassName + '(activity));');
FJavaOutputMethods.Add(' MyAndroidPipesComm.SendIntResult(ViewElements.size() - 1);');
FJavaOutputMethods.Add(' break;');
Inc(FMethodNum); Inc(FMethodNum);
end; end;
@ -301,6 +349,19 @@ begin
else Result := 'T' + ABaseName; else Result := 'T' + ABaseName;
end; end;
function TAndroidSDKBindingsGen.GetJavaResultFunction(AReturnType: string
): string;
begin
if AReturnType = 'boolean' then Result := 'SendBoolResult'
else Result := 'SendIntResult';
end;
function TAndroidSDKBindingsGen.GetJavaTypeReader(AType: string): string;
begin
if AType = 'boolean' then Exit('GetBool')
else Exit('GetInt');
end;
constructor TAndroidSDKBindingsGen.Create; constructor TAndroidSDKBindingsGen.Create;
begin begin
FSourceFile := TStringList.Create; FSourceFile := TStringList.Create;