diff --git a/bindings/android-sdk/android_bindings_generator.lpi b/bindings/android-sdk/android_bindings_generator.lpi
index cf1a03c43..40fbcfa8e 100644
--- a/bindings/android-sdk/android_bindings_generator.lpi
+++ b/bindings/android-sdk/android_bindings_generator.lpi
@@ -39,12 +39,11 @@
-
+
-
@@ -71,7 +70,7 @@
-
+
@@ -91,15 +90,15 @@
-
-
+
+
-
+
@@ -128,134 +127,161 @@
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/bindings/android-sdk/android_sdk_bindings_gen.pas b/bindings/android-sdk/android_sdk_bindings_gen.pas
index 0d318bd48..d9e1729c8 100644
--- a/bindings/android-sdk/android_sdk_bindings_gen.pas
+++ b/bindings/android-sdk/android_sdk_bindings_gen.pas
@@ -13,13 +13,16 @@ type
TAndroidSDKBindingsGen = class
private
- FSourceFile, FPasOutputClasses, FPasOutputImpl: TStringList;
+ FSourceFile, FPasOutputClasses, FPasOutputIDs, FPasOutputImpl: TStringList;
FClassName: string; // Class name of the class currently being parsed
+ FClassNum, FMethodNum: Integer;
procedure ProcessModelFile(ASourceFile, APasOutputFile, AJavaOutputDir: string);
procedure ProcessModelLine(ASourceLine: string);
function GetNextWord(ALine: string; var AStartPos: Integer): string;
function GetPascalTypeName(ABaseName: string): string;
public
+ constructor Create;
+ destructor Destroy; override;
procedure GenerateAllBindings(AInputDir, APasOutputDir, AJavaOutputDir: string);
end;
@@ -36,9 +39,6 @@ var
i: Integer;
lPasOutputFile: TStringList;
begin
- FSourceFile := TStringList.Create;
- FPasOutputClasses := TStringList.Create;
- FPasOutputImpl := TStringList.Create;
lPasOutputFile := TStringList.Create;
try
FSourceFile.LoadFromFile(ASourceFile);
@@ -60,18 +60,17 @@ begin
lPasOutputFile.AddStrings(FPasOutputClasses);
lPasOutputFile.Add(' end;');
lPasOutputFile.Add('');
- lPasOutputFile.Add('');
lPasOutputFile.Add('implementation');
lPasOutputFile.Add('');
+ lPasOutputFile.Add('const');
+ lPasOutputFile.AddStrings(FPasOutputIDs);
+ lPasOutputFile.Add('');
lPasOutputFile.AddStrings(FPasOutputImpl);
lPasOutputFile.Add('');
lPasOutputFile.Add('end.');
lPasOutputFile.SaveToFile(APasOutputFile);
finally
- FSourceFile.Free;
- FPasOutputClasses.Free;
- FPasOutputImpl.Free;
lPasOutputFile.Free;
end;
end;
@@ -81,12 +80,16 @@ var
lReaderPos: Integer = 1;
lCurWord, lParentClassName: string;
lMethodReturn, lMethodName, lParamType, lParamName: string;
- TmpStr: string;
+ DeclarationBase, TmpStr: string;
+ FPasOutputImplCurLine: Integer;
begin
if ASourceLine = '' then Exit;
lCurWord := GetNextWord(ASourceLine, lReaderPos);
+ // Comments
+ if ASourceLine[1] = '#' then Exit;
+
// Starting a new class
if ASourceLine[1] = '[' then
begin
@@ -101,20 +104,34 @@ begin
lParentClassName := GetPascalTypeName(lParentClassName);
FPasOutputClasses.Add(Format(' %s = class(%s)', [FClassName, lParentClassName]));
FPasOutputClasses.Add(' public');
+ lCurWord := GetNextWord(ASourceLine, lReaderPos);
+ Inc(FClassNum);
+ FMethodNum := 0;
+
+ Exit;
end;
// Adding methods to a class
if lCurWord = 'method' then
begin
+ // Method type and name
lMethodReturn := GetNextWord(ASourceLine, lReaderPos);
lMethodReturn := GetPascalTypeName(lMethodReturn);
lMethodName := GetNextWord(ASourceLine, lReaderPos);
- if lMethodReturn = 'void' then TmpStr := ' procedure '
- else TmpStr := ' function ';
+ if lMethodReturn = 'void' then DeclarationBase := 'procedure '
+ else DeclarationBase := 'function ';
+
+ // Beginning of the implementation part
+ FPasOutputImplCurLine := FPasOutputImpl.Count;
+ FPasOutputImpl.Add('begin');
+ FPasOutputImpl.Add(' vAndroidPipesComm.SendByte(ShortInt(amkUICommand));');
+ FPasOutputImpl.Add(' vAndroidPipesComm.SendInt(amkUI_' + FClassName + '_' + lMethodName + ');');
+ FPasOutputImpl.Add(' vAndroidPipesComm.SendInt(Index); // Self, Java Pointer');
+ FPasOutputIDs.Add(' amkUI_' + FClassName + '_' + lMethodName + ' = 0' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
// Add all parameters
- TmpStr := TmpStr + lMethodName + '(';
+ TmpStr := lMethodName + '(';
repeat
lParamType := GetNextWord(ASourceLine, lReaderPos);
@@ -124,16 +141,33 @@ begin
if lParamName = '' then Break;
TmpStr := TmpStr + lParamName + ': ' + lParamType + '; ';
+
+ FPasOutputImpl.Add(' vAndroidPipesComm.SendInt(Integer(' + lParamName + '));');
until lParamName = '';
// Remove the last ; for the parameters, if necessary
if TmpStr[Length(TmpStr)-1] = ';' then TmpStr := System.Copy(TmpStr, 0, Length(TmpStr)-2);
// Add the return
- if lMethodReturn = 'void' then TmpStr := TmpStr + ');'
- else TmpStr := TmpStr + '): ' + lMethodReturn + ';';
+ if lMethodReturn = 'void' then
+ begin
+ TmpStr := TmpStr + ');';
+ FPasOutputImpl.Add(' vAndroidPipesComm.WaitForReturn();');
+ end
+ else
+ begin
+ TmpStr := TmpStr + '): ' + lMethodReturn + ';';
+ FPasOutputImpl.Add(' Result := Boolean(vAndroidPipesComm.WaitForIntReturn());');
+ end;
- FPasOutputClasses.Add(TmpStr);
+ FPasOutputClasses.Add(' ' + DeclarationBase + TmpStr);
+ FPasOutputImpl.Insert(FPasOutputImplCurLine, DeclarationBase + FClassName + '.' + TmpStr);
+ FPasOutputImpl.Add('end;');
+ FPasOutputImpl.Add('');
+
+ Inc(FMethodNum);
+
+ Exit;
end;
end;
@@ -142,7 +176,7 @@ end;
function TAndroidSDKBindingsGen.GetNextWord(ALine: string;
var AStartPos: Integer): string;
const
- WordSeparators = [' ','(',')','[',']',','];
+ WordSeparators = [' ','(',')','[',']',',',#9];
var
lState: Integer = 0;
begin
@@ -179,12 +213,32 @@ begin
if ABaseName = '' then Exit('');
if ABaseName = 'int' then Result := 'Integer'
+ else if ABaseName = 'boolean' then Result := 'Boolean'
else if ABaseName = 'void' then Result := ABaseName
else if ABaseName = 'CharSequence' then Result := 'string'
else if ABaseName = 'TJavaObject' then Result := ABaseName
else Result := 'T' + ABaseName;
end;
+constructor TAndroidSDKBindingsGen.Create;
+begin
+ FSourceFile := TStringList.Create;
+ FPasOutputClasses := TStringList.Create;
+ FPasOutputImpl := TStringList.Create;
+ FPasOutputIDs := TStringList.Create;
+ FClassNum := $100;
+end;
+
+destructor TAndroidSDKBindingsGen.Destroy;
+begin
+ FSourceFile.Free;
+ FPasOutputClasses.Free;
+ FPasOutputImpl.Free;
+ FPasOutputIDs.Free;
+
+ inherited Destroy;
+end;
+
procedure TAndroidSDKBindingsGen.GenerateAllBindings(AInputDir, APasOutputDir,
AJavaOutputDir: string);
begin
diff --git a/bindings/android-sdk/sdk_level_7/android_view.txt b/bindings/android-sdk/sdk_level_7/android_view.txt
index d9ccd63a6..7363fd943 100644
--- a/bindings/android-sdk/sdk_level_7/android_view.txt
+++ b/bindings/android-sdk/sdk_level_7/android_view.txt
@@ -1,6 +1,17 @@
-[MenuItem] TJavaObject
-classcallback MenuItem.OnMenuItemClickListener boolean onMenuItemClick (MenuItem item)
-method MenuItem setOnMenuItemClickListener (MenuItem.OnMenuItemClickListener menuItemClickListener)
+#[MenuItem] TJavaObject
+#classcallback MenuItem.OnMenuItemClickListener boolean onMenuItemClick (MenuItem item)
+#method MenuItem setOnMenuItemClickListener (MenuItem.OnMenuItemClickListener menuItemClickListener)
+#
+#[Menu] TJavaObject
+#method MenuItem add(int groupId, int itemId, int order, CharSequence title)
+
+[CompoundButton] Button 110
+method boolean isChecked()
+method boolean performClick()
+method void setChecked(boolean checked)
+#method void setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener listener)
+method void toggle()
+
+[CheckBox] CompoundButton 111
+constructor Create
-[Menu] TJavaObject
-method MenuItem add(int groupId, int itemId, int order, CharSequence title)