summaryrefslogtreecommitdiff
path: root/Examples/android
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2012-09-13 18:55:52 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2012-09-13 18:55:52 +0000
commit608d43f0f9402ae753a08fd012562334f221c166 (patch)
tree76119e37566b71250bcfd9f59c3f59d6ec3ddffe /Examples/android
parent9e34a0d37651af099620dbb4487da4a2f217c2fe (diff)
downloadswig-608d43f0f9402ae753a08fd012562334f221c166.tar.gz
Add text streamer to Android example to replace missing stdout
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13833 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Examples/android')
-rw-r--r--Examples/android/extend/jni/example.cpp10
-rw-r--r--Examples/android/extend/jni/example.h25
-rw-r--r--Examples/android/extend/jni/example.i3
-rw-r--r--Examples/android/extend/src/org/swig/extendexample/SwigExtend.java12
4 files changed, 44 insertions, 6 deletions
diff --git a/Examples/android/extend/jni/example.cpp b/Examples/android/extend/jni/example.cpp
index 450d75608..7d76571ca 100644
--- a/Examples/android/extend/jni/example.cpp
+++ b/Examples/android/extend/jni/example.cpp
@@ -2,3 +2,13 @@
#include "example.h"
+static Streamer * streamerInstance = 0;
+
+void setStreamer(Streamer* streamer) {
+ streamerInstance = streamer;
+}
+
+Streamer& getStreamer() {
+ return *streamerInstance;
+}
+
diff --git a/Examples/android/extend/jni/example.h b/Examples/android/extend/jni/example.h
index b27ab9711..22430b501 100644
--- a/Examples/android/extend/jni/example.h
+++ b/Examples/android/extend/jni/example.h
@@ -5,6 +5,21 @@
#include <vector>
#include <string>
#include <cmath>
+#include <sstream>
+
+struct Streamer {
+ virtual void display(std::string text) const = 0;
+ virtual ~Streamer() {}
+};
+void setStreamer(Streamer* streamer);
+Streamer& getStreamer();
+
+template<typename T> Streamer& operator<<(Streamer& stream, T const& val) {
+ std::ostringstream s;
+ s << val;
+ stream.display(s.str());
+ return stream;
+}
class Employee {
private:
@@ -14,7 +29,7 @@ public:
virtual std::string getTitle() { return getPosition() + " " + getName(); }
virtual std::string getName() { return name; }
virtual std::string getPosition() const { return "Employee"; }
- virtual ~Employee() { printf("~Employee() @ %p\n", this); }
+ virtual ~Employee() { getStreamer() << "~Employee() @ " << this << "\n"; }
};
@@ -35,10 +50,10 @@ public:
}
void addEmployee(Employee *p) {
list.push_back(p);
- std::cout << "New employee added. Current employees are:" << std::endl;
+ getStreamer() << "New employee added. Current employees are:" << "\n";
std::vector<Employee*>::iterator i;
for (i=list.begin(); i!=list.end(); i++) {
- std::cout << " " << (*i)->getTitle() << std::endl;
+ getStreamer() << " " << (*i)->getTitle() << "\n";
}
}
const Employee *get_item(int i) {
@@ -46,11 +61,11 @@ public:
}
~EmployeeList() {
std::vector<Employee*>::iterator i;
- std::cout << "~EmployeeList, deleting " << list.size() << " employees." << std::endl;
+ getStreamer() << "~EmployeeList, deleting " << list.size() << " employees." << "\n";
for (i=list.begin(); i!=list.end(); i++) {
delete *i;
}
- std::cout << "~EmployeeList empty." << std::endl;
+ getStreamer() << "~EmployeeList empty." << "\n";
}
};
diff --git a/Examples/android/extend/jni/example.i b/Examples/android/extend/jni/example.i
index c8ec32e09..e550aac2c 100644
--- a/Examples/android/extend/jni/example.i
+++ b/Examples/android/extend/jni/example.i
@@ -11,5 +11,8 @@
%feature("director") Employee;
%feature("director") Manager;
+/* A base class for callbacks from C++ to output text on the Java side */
+%feature("director") Streamer;
+
%include "example.h"
diff --git a/Examples/android/extend/src/org/swig/extendexample/SwigExtend.java b/Examples/android/extend/src/org/swig/extendexample/SwigExtend.java
index 5bacecfbf..fcf3d56d4 100644
--- a/Examples/android/extend/src/org/swig/extendexample/SwigExtend.java
+++ b/Examples/android/extend/src/org/swig/extendexample/SwigExtend.java
@@ -8,7 +8,6 @@ import android.widget.TextView;
import android.widget.ScrollView;
import android.text.method.ScrollingMovementMethod;
-
// CEO class, which overrides Employee::getPosition().
class CEO extends Manager {
public CEO(String name) {
@@ -29,6 +28,15 @@ public class SwigExtend extends Activity
TextView outputText = null;
ScrollView scroller = null;
+ /** Handles upcalls from C++ so that C++ code can display text on the TextView */
+ class TextViewStreamer extends Streamer {
+ public void display(String text) {
+ outputText.append(text);
+ }
+ }
+
+ TextViewStreamer textViewStreamer = new TextViewStreamer();
+
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
@@ -41,6 +49,8 @@ public class SwigExtend extends Activity
outputText.setMovementMethod(new ScrollingMovementMethod());
scroller = (ScrollView)findViewById(R.id.Scroller);
+
+ example.setStreamer(textViewStreamer);
}
public void onRunButtonClick(View view)