diff --git a/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java b/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java index 3d1ba9c3372453eb9e77a9e0734b96a038f2c9a7..8ab60bc12db8ae975437a975055952e28016cd06 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java @@ -18,11 +18,15 @@ public class Gmsh { private native void initView(long ptr, int w, int h); // Called each time the GLView change private native void drawView(long ptr); // Called each time the GLView request a render private native void eventHandler(long ptr, int event, float x, float y); - private native void setShow(long ptr, String what, boolean show); // select what to show / hide - private native boolean isShow(long ptr, String what); private native long getOnelabInstance(); // return the singleton of the onelab server public native String[] getParams(); // return the parameters for onelab public native int setParam(String type, String name, String value); // change a parameters + public native int setStringOption(String category, String name, String value); + public native int setDoubleOption(String category, String name, double value); + public native int setIntegerOption(String category, String name, int value); + public native String getStringOption(String category, String name); + public native double getDoubleOption(String category, String name); + public native int getIntegerOption(String category, String name); public native String[] getPView(); // get a list of PViews public native void setPView(int position, int intervalsType,int visible,int nbIso); // Change options for a PView public native int onelabCB(String action); // Call onelab @@ -77,22 +81,6 @@ public class Gmsh { { this.eventHandler(ptr, 10, 0, 0); } - public void showGeom(boolean show) - { - this.setShow(ptr, "geom", show); - } - public void showMesh(boolean show) - { - this.setShow(ptr, "mesh", show); - } - public boolean showMesh() - { - return this.isShow(ptr, "mesh"); - } - public boolean showGeom() - { - return this.isShow(ptr, "geom"); - } public long getOnelab() { return this.onelab; } diff --git a/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java b/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java index c5ddabe6812dafe7ba0ee64227a8b9b462190c24..bfa0e5be23ac907f5137cf74b962852c80393f00 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java @@ -8,11 +8,11 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Vibrator; +import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; - import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -57,7 +57,8 @@ public class MainActivity extends Activity { private ArrayList<String> errors; private Dialog errorDialog; private Gmsh gmsh; - private Button run, reset; + private Button reset; + private MenuItem runStopItem; private UndragableViewPager pager; private List<Parameter> params = new ArrayList<Parameter>(); private SeparatedListView paramListView; @@ -66,9 +67,10 @@ public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + ActionBar actionBar = getActionBar(); + actionBar.setDisplayHomeAsUpEnabled(true); errors = new ArrayList<String>(); LinearLayout layout = new LinearLayout(this); loading = new ProgressDialog(this); @@ -78,7 +80,7 @@ public class MainActivity extends Activity { pager.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); pager.setAdapter(new AdaptedPager()); pager.setOffscreenPageLimit(2); - pager.setCurrentItem(0); + pager.setCurrentItem(1); layout.addView(pager); dialogBuilder = new AlertDialog.Builder(this); @@ -114,69 +116,62 @@ public class MainActivity extends Activity { @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); - MenuItem listitem = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, R.string.menu_list); - if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || screenInch() < 7) - { - MenuItem paramitem = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, R.string.menu_settings); - paramitem.setIcon(R.drawable.ic_settings); - paramitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - } - MenuItem modelitem = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, R.string.menu_model); - MenuItem postitem = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, R.string.menu_postpro); - SubMenu viewitem = menu.addSubMenu(R.string.menu_view); - - - listitem.setIcon(R.drawable.ic_list); - modelitem.setIcon(R.drawable.ic_mesh); - listitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - modelitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - postitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); - - viewitem.add(R.string.menu_view_x); - viewitem.add(R.string.menu_view_y); - viewitem.add(R.string.menu_view_z); - viewitem.add(R.string.menu_view_scale); - viewitem.add(R.string.menu_view_translation); + + /* Menu: + * < (Back to model list) + * Model (show the model, only on small screen) + * Parameters + * > Model (show the model's parameters) + * > Display (show display options) + * Run/Stop (Compute / stop) + */ + SubMenu parametersItems = menu.addSubMenu(R.string.menu_parameters); + parametersItems.add(R.string.menu_parameters_model); + parametersItems.add(R.string.menu_parameters_display); + MenuItem parametersItem = parametersItems.getItem(); + parametersItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + if(screenInch() < 7) { + MenuItem modelItem = menu.add(R.string.menu_model); + modelItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } + runStopItem = menu.add(R.string.menu_run); + runStopItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return true; } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { - if(item.getTitle().equals(getString(R.string.menu_settings))) + if(item.getTitle().equals(getString(R.string.menu_parameters_model))) { pager.setCurrentItem(0, true); - else if(item.getTitle().equals(getString(R.string.menu_list))) { - if(this.compute) - loading.show(); - else - this.finish(); + // TODO change fragment on pager 0 + } + else if (item.getTitle().equals(getString(R.string.menu_parameters_display))) { + pager.setCurrentItem(0, true); + // TODO change fragment on pager 0 } - else if (item.getTitle().equals(getString(R.string.menu_model))) + else if (item.getTitle().equals(getString(R.string.menu_model))) { pager.setCurrentItem(1, true); - else if(item.getTitle().equals(getString(R.string.menu_postpro))){ - dialogBuilder.setTitle("Post proccessing") - .setView(postproView()) - .setPositiveButton("Ok", null) - .show(); } - else if(item.getTitle().equals(getString(R.string.menu_view_x))){ - renderer.viewX(); - glView.requestRender(); + else if(item.getTitle().equals(getString(R.string.menu_run))){ + pager.setCurrentItem(1, true); + item.setTitle(R.string.menu_stop); + if(compute) { + loading.show(); + } + else { + new Run().execute(); + pager.setCurrentItem(1, true); + } } - else if(item.getTitle().equals(getString(R.string.menu_view_y))){ - renderer.viewY(); - glView.requestRender(); - } - else if(item.getTitle().equals(getString(R.string.menu_view_z))){ - renderer.viewZ(); - glView.requestRender(); - } - /*else if(item.getTitle().equals(getString(R.string.menu_view_scale))){ - glView.resetScale(); - glView.requestRender(); + else if(item.getTitle().equals(getString(R.string.menu_stop))){ + gmsh.onelabCB("stop"); + } + else if(item.getItemId() == android.R.id.home) + { + if(this.compute) + loading.show(); + else + this.finish(); } - else if(item.getTitle().equals(getString(R.string.menu_view_translation))){ - renderer.translate(0, 0, 0); - glView.requestRender(); - }*/ // TODO return super.onMenuItemSelected(featureId, item); } @@ -305,7 +300,7 @@ public class MainActivity extends Activity { } } - private View postproView() { + /*private View postproView() { ScrollView scroll = new ScrollView(this); scroll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); String[] PViews = gmsh.getPView(); @@ -412,26 +407,13 @@ public class MainActivity extends Activity { } scroll.addView(table); return scroll; - } + }*/ private View paramView(Context ctx) { LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); - run = new Button(ctx); reset = new Button(ctx); - run.setText("Run"); reset.setText("Reset"); - run.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - if(compute) { - loading.show(); - } - else { - new Run().execute(); - pager.setCurrentItem(1, true); - } - } - }); reset.setOnClickListener(new OnClickListener() {public void onClick(View v) { if(gmsh.onelabCB("reset") == 1){ getAvailableParam(); @@ -439,33 +421,29 @@ public class MainActivity extends Activity { } pager.setCurrentItem(0, true); }}); - LinearLayout onelabBtns = new LinearLayout(this); - onelabBtns.setOrientation(LinearLayout.HORIZONTAL); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); lp.weight = 1; - onelabBtns.addView(reset, lp); - onelabBtns.addView(run, lp); CheckBox showMesh = new CheckBox(ctx); showMesh.setText("Show the mesh"); - showMesh.setChecked(gmsh.showMesh()); + showMesh.setChecked((gmsh.getDoubleOption("Mesh", "SurfaceEdges") > 0.)); showMesh.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - gmsh.showMesh(isChecked); + gmsh.setDoubleOption("Mesh", "SurfaceEdges", (isChecked)?1. : 0.); glView.requestRender(); } }); CheckBox showGeom = new CheckBox(ctx); showGeom.setText("Show the geometry"); - showGeom.setChecked(gmsh.showGeom()); + showGeom.setChecked((gmsh.getDoubleOption("Geometry", "Lines") > 0.)); showGeom.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - gmsh.showGeom(isChecked); + gmsh.setDoubleOption("Geometry", "Lines", (isChecked)?1. : 0.); glView.requestRender(); } }); - paramListView = new SeparatedListView(ctx, new View[] {showMesh, showGeom, onelabBtns}); + paramListView = new SeparatedListView(ctx, new View[] {showMesh, showGeom, reset}); paramListView.setDividerHeight(0); for(Parameter p : params) { @@ -491,12 +469,10 @@ public class MainActivity extends Activity { public void onClick(DialogInterface dialog, int which) { gmsh.onelabCB("stop"); - run.setEnabled(false); } }); loading.setMessage("..."); loading.show(); - //run.setText("Show progress"); reset.setEnabled(false); super.onPreExecute(); } @@ -509,16 +485,12 @@ public class MainActivity extends Activity { @Override protected void onPostExecute(Integer[] result) { - Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); - if(!v.hasVibrator()) // TODO Do not commit this line ! - v.vibrate(350); + //(Vibrator) getSystemService(Context.VIBRATOR_SERVICE).vibrate(350); + runStopItem.setTitle(R.string.menu_run); reset.setEnabled(true); - run.setEnabled(true); - //run.setText("Run"); // TODO this seems break the ViewPager - glView.requestRender(); - super.onPostExecute(result); loading.dismiss(); compute = false; + super.onPostExecute(result); } } diff --git a/contrib/mobile/androidGModel.cpp b/contrib/mobile/androidGModel.cpp index 2ccfac331a8a95d419a8df625ba667e779aea0e7..7df30ae77686176614a56e7d66d7c98764503f70 100644 --- a/contrib/mobile/androidGModel.cpp +++ b/contrib/mobile/androidGModel.cpp @@ -5,6 +5,7 @@ #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) +#include <gmsh/Gmsh.h> #include <gmsh/GModel.h> #include <gmsh/onelab.h> #include <gmsh/onelabUtils.h> @@ -149,22 +150,84 @@ JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_eventHandler { ((drawContext *)jptr)->eventHandler(jevent, jx, jy); } -JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_setShow - (JNIEnv *env, jobject obj, jlong jptr, jstring jwhat, jboolean value) +JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setStringOption + (JNIEnv *env, jobject obj, jstring c, jstring n, jstring v) { - const char* what = env->GetStringUTFChars(jwhat, NULL); - if(strcmp(what, "mesh") == 0) - ((drawContext *)jptr)->showMesh(value); - else if(strcmp(what, "geom") == 0) - ((drawContext *)jptr)->showGeom(value); + const char* tmp; + tmp = env->GetStringUTFChars(v, NULL); + const std::string value(tmp, strlen(tmp)); + env->ReleaseStringUTFChars(v, tmp); + tmp = env->GetStringUTFChars(n, NULL); + const std::string name(tmp, strlen(tmp)); + env->ReleaseStringUTFChars(n, tmp); + tmp = env->GetStringUTFChars(c, NULL); + std::string category(tmp, strlen(tmp)); + env->ReleaseStringUTFChars(c, tmp); + GmshSetOption(category, name, value, 0); } -JNIEXPORT jboolean JNICALL Java_org_geuz_onelab_Gmsh_isShow - (JNIEnv *env, jobject obj, jlong jptr, jstring jwhat) +JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setDoubleOption + (JNIEnv *env, jobject obj, jstring c, jstring n, jdouble v) { - const char* what = env->GetStringUTFChars(jwhat, NULL); - if(strcmp(what, "mesh") == 0) return ((drawContext *)jptr)->isShowedMesh(); - else if(strcmp(what, "geom") == 0) return ((drawContext *)jptr)->isShowedGeom(); - else return false; + const char* tmp; + tmp = env->GetStringUTFChars(n, NULL); + const std::string name(tmp, strlen(tmp)); + env->ReleaseStringUTFChars(n, tmp); + tmp = env->GetStringUTFChars(c, NULL); + const std::string category(tmp, strlen(tmp)); + env->ReleaseStringUTFChars(c, tmp); + GmshSetOption(category, name, (double)v); +} +JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setIntegerOption + (JNIEnv *env, jobject obj, jstring c, jstring n, jint v) +{ + const char* tmp; + tmp = env->GetStringUTFChars(n, NULL); + const std::string name(tmp, strlen(tmp)); + env->ReleaseStringUTFChars(n, tmp); + tmp = env->GetStringUTFChars(c, NULL); + const std::string category(tmp, strlen(tmp)); + env->ReleaseStringUTFChars(c, tmp); + GmshSetOption(category, name, (unsigned int)v); +} +JNIEXPORT jstring JNICALL Java_org_geuz_onelab_Gmsh_getStringOption + (JNIEnv *env, jobject obj, jstring c, jstring n) +{ + const char* tmp; + tmp = env->GetStringUTFChars(n, NULL); + const std::string name(tmp, strlen(tmp)); + env->ReleaseStringUTFChars(n, tmp); + tmp = env->GetStringUTFChars(c, NULL); + const std::string category(tmp, strlen(tmp)); + std::string value; + GmshGetOption(category, name, value); + return env->NewStringUTF(value.c_str()); + +} +JNIEXPORT jdouble JNICALL Java_org_geuz_onelab_Gmsh_getDoubleOption + (JNIEnv *env, jobject obj, jstring c, jstring n) +{ + const char* tmp; + tmp = env->GetStringUTFChars(n, NULL); + const std::string name(tmp, strlen(tmp)); + env->ReleaseStringUTFChars(n, tmp); + tmp = env->GetStringUTFChars(c, NULL); + const std::string category(tmp, strlen(tmp)); + double value; + GmshGetOption(category, name, value); + return value; +} +JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_getIntegerOption + (JNIEnv *env, jobject obj, jstring c, jstring n) +{ + const char* tmp; + tmp = env->GetStringUTFChars(n, NULL); + const std::string name(tmp, strlen(tmp)); + env->ReleaseStringUTFChars(n, tmp); + tmp = env->GetStringUTFChars(c, NULL); + const std::string category(tmp, strlen(tmp)); + unsigned int value; + GmshGetOption(category, name, value, 0); + return value; } JNIEXPORT jlong JNICALL Java_org_geuz_onelab_Gmsh_getOnelabInstance (JNIEnv *env , jobject obj) diff --git a/contrib/mobile/androidGModel.h b/contrib/mobile/androidGModel.h index 9c6150e398a653f410ab176ceb8a6ce13cc4ec1c..12aa59d2e8f73535b2fac5bb75f44a4cf4be98d8 100644 --- a/contrib/mobile/androidGModel.h +++ b/contrib/mobile/androidGModel.h @@ -51,19 +51,51 @@ JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_eventHandler /* * Class: org_geuz_onelab_Gmsh - * Method: setShow - * Signature: (JLjava/lang/String;Z)V + * Method: setStringOption + * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I */ -JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_setShow - (JNIEnv *, jobject, jlong, jstring, jboolean); +JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setStringOption + (JNIEnv *, jobject, jstring, jstring, jstring); /* * Class: org_geuz_onelab_Gmsh - * Method: isShow - * Signature: (JLjava/lang/String;)Z + * Method: setDoubleOption + * Signature: (Ljava/lang/String;Ljava/lang/String;D)I */ -JNIEXPORT jboolean JNICALL Java_org_geuz_onelab_Gmsh_isShow - (JNIEnv *, jobject, jlong, jstring); +JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setDoubleOption + (JNIEnv *, jobject, jstring, jstring, jdouble); + +/* + * Class: org_geuz_onelab_Gmsh + * Method: setIntegerOption + * Signature: (Ljava/lang/String;Ljava/lang/String;I)I + */ +JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setIntegerOption + (JNIEnv *, jobject, jstring, jstring, jint); + +/* + * Class: org_geuz_onelab_Gmsh + * Method: getStringOption + * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_geuz_onelab_Gmsh_getStringOption + (JNIEnv *, jobject, jstring, jstring); + +/* + * Class: org_geuz_onelab_Gmsh + * Method: getDoubleOption + * Signature: (Ljava/lang/String;Ljava/lang/String;)D + */ +JNIEXPORT jdouble JNICALL Java_org_geuz_onelab_Gmsh_getDoubleOption + (JNIEnv *, jobject, jstring, jstring); + +/* + * Class: org_geuz_onelab_Gmsh + * Method: getIntegerOption + * Signature: (Ljava/lang/String;Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_getIntegerOption + (JNIEnv *, jobject, jstring, jstring); /* * Class: org_geuz_onelab_Gmsh diff --git a/contrib/mobile/drawContext.cpp b/contrib/mobile/drawContext.cpp index c3424e0fc012f1d5ada77386bad35fd1f2f6f906..f3dfa6fbf9b55d97d3593f9c15843586cfdb47cd 100644 --- a/contrib/mobile/drawContext.cpp +++ b/contrib/mobile/drawContext.cpp @@ -53,7 +53,7 @@ static bool locked = false; drawContext::drawContext() { GmshInitialize(); - GmshSetOption("General", "Terminal", 1.0); + GmshSetOption("General", "Terminal", 1.0); onelabUtils::setFirstComputationFlag(false); for(int i = 0; i < 3; i++){ _translate[i] = 0.; @@ -565,14 +565,10 @@ void drawContext::drawView() checkGlError("Draw axes"); this->drawPost(); checkGlError("Draw post-pro"); - if(CTX::instance()->geom.draw){ - this->drawGeom(); - checkGlError("Draw geometry"); - } - if(CTX::instance()->mesh.draw){ - this->drawMesh(); - checkGlError("Draw mesh"); - } + this->drawGeom(); + checkGlError("Draw geometry"); + this->drawMesh(); + checkGlError("Draw mesh"); this->drawScale(); checkGlError("Draw scales"); } diff --git a/contrib/mobile/drawContext.h b/contrib/mobile/drawContext.h index 9845b0d42ae869b9b0e34ea2af86dfcb36319cb8..4ea981b43e02131a2f47b88cba2f5c84b386dbba 100644 --- a/contrib/mobile/drawContext.h +++ b/contrib/mobile/drawContext.h @@ -58,11 +58,6 @@ public: void drawPost(); void drawScale(); void useGradiant(bool gradiant=true) {_gradiant = gradiant;} - void showGeom(bool show=true) {CTX::instance()->geom.draw = show;} - void showMesh(bool show=true) {CTX::instance()->mesh.draw = show;} - void fillMesh(bool show=true) {_fillMesh = show;} - bool isShowedMesh(){return CTX::instance()->mesh.draw;} - bool isShowedGeom(){return CTX::instance()->geom.draw;} }; #endif diff --git a/contrib/mobile/drawGeom.cpp b/contrib/mobile/drawGeom.cpp index 38991bff33be0bdde8ffd2e40552d281844e5980..131fb116f35d8ab782a43cf8adabb274b28614bf 100644 --- a/contrib/mobile/drawGeom.cpp +++ b/contrib/mobile/drawGeom.cpp @@ -78,6 +78,8 @@ void drawGeomFace(GFace *f) } void drawContext::drawGeom() { + if(!CTX::instance()->geom.draw) return; + for(unsigned int i=0; i<GModel::list.size(); i++) { GModel *m = GModel::list[i]; if(!m->getVisibility()) continue;