diff --git a/contrib/mobile/Android/res/layout/activity_fragment.xml b/contrib/mobile/Android/res/layout/activity_fragment.xml new file mode 100644 index 0000000000000000000000000000000000000000..4d2f16d5e390a7938f8cc761c8563f21e0a2e342 --- /dev/null +++ b/contrib/mobile/Android/res/layout/activity_fragment.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/model_fragment" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_marginLeft="0dp" + android:layout_marginRight="0dp" /> \ No newline at end of file diff --git a/contrib/mobile/Android/res/layout/fragment_postprocessing.xml b/contrib/mobile/Android/res/layout/fragment_postprocessing.xml new file mode 100644 index 0000000000000000000000000000000000000000..e1c674a2a894e611ce1d5855f3d416693d7ee1ba --- /dev/null +++ b/contrib/mobile/Android/res/layout/fragment_postprocessing.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:padding="15dp" > + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Intervals type" /> + <Spinner + android:id="@+id/intervals_type" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Intervals" /> + <EditText + android:id="@+id/intervals" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:inputType="number" + android:digits="0123456789" /> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Raise (Z)" /> + <SeekBar + android:id="@+id/raisez" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:max="1" /> + +</LinearLayout> \ No newline at end of file diff --git a/contrib/mobile/Android/res/layout/model.xml b/contrib/mobile/Android/res/layout/model.xml index 81c55eb71dc8e511a9756c318735f81f610491ad..f97f162198b3923c8121aaf7ffa824e6e1608166 100644 --- a/contrib/mobile/Android/res/layout/model.xml +++ b/contrib/mobile/Android/res/layout/model.xml @@ -18,7 +18,6 @@ android:paddingBottom="10dp" /> <LinearLayout - android:layout_gravity="center_horizontal" android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="vertical" diff --git a/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java b/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java index 7fc060497f2f13fabe4183a13cf11500d787a12f..fb619ef1fd99fd1c2fbb2624cb7068925d142e48 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java @@ -104,7 +104,7 @@ public class Gmsh implements Parcelable { public void writeToParcel(Parcel out, int flags) { out.writeLong(this.ptr); } - public Parcelable.Creator<Gmsh> CREATOR = new Parcelable.Creator<Gmsh>() { + public static Parcelable.Creator<Gmsh> CREATOR = new Parcelable.Creator<Gmsh>() { public Gmsh createFromParcel(Parcel source) { return new Gmsh(source); diff --git a/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java b/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java index 213a6bdfc384408a2f6631fb4cacf614de522710..1e6d6829ecbd7757330e88444b0920c76ca34fe0 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java @@ -188,6 +188,7 @@ public class ModelList extends Activity { skipTag(parser); } } + if(title == null || file == null) return; Model newModel = new Model(title, summary, new File(dir+"/"+file)); if(bitmap != null) newModel.setBitmap(new File(dir+"/"+bitmap)); if(url != null) newModel.setUrl(Uri.parse(url)); diff --git a/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java b/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java index 81a248a386c4145d752db4b7ad3d089e8b089190..c293ea0e0f10113780740eb79e31f13a46bf0a3f 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java @@ -1,13 +1,20 @@ package org.geuz.onelab; import android.os.Bundle; +import android.os.Parcelable; import android.app.Activity; import android.app.Fragment; +import android.content.Intent; +import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.widget.AbsListView; +import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; +import android.widget.LinearLayout; public class OptionsDisplayFragment extends Fragment{ @@ -33,7 +40,7 @@ public class OptionsDisplayFragment extends Fragment{ } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { _listView = (SeparatedListView)inflater.inflate(R.layout.fragment_options_display, container, false); CheckBox showGeomPoints = new CheckBox(_listView.getContext()); @@ -90,7 +97,9 @@ public class OptionsDisplayFragment extends Fragment{ for(int i=_listView.itemsCountInSection("Result"); i < PViews.length;i++){ String[] infos = PViews[i].split("\n"); // name / IntervalsType (1=Iso 2=Continous 3=Discrete 4=Numeric) final int myID = i; + LinearLayout layout = new LinearLayout(_listView.getContext()); CheckBox checkbox = new CheckBox(_listView.getContext()); + checkbox.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); checkbox.setText(infos[0]); checkbox.setChecked(infos[2].equals("1")); checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @@ -100,7 +109,21 @@ public class OptionsDisplayFragment extends Fragment{ mCallback.onRequestRender(); } }); - _listView.addItem("Result", checkbox); + Button button = new Button(_listView.getContext()); + button.setText("More options"); + button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + Intent intent = new Intent(getActivity(), PostProcessingActivity.class); + intent.putExtra("Gmsh", (Parcelable)_gmsh); + intent.putExtra("PView", myID); + startActivity(intent); + } + }); + button.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + button.setBackgroundColor(Color.TRANSPARENT); + layout.addView(checkbox); + layout.addView(button); + _listView.addItem("Result", layout); } } diff --git a/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java b/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java new file mode 100644 index 0000000000000000000000000000000000000000..8ed043d9d3bc8de20f560b3977f8ab0ec6faf2dc --- /dev/null +++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java @@ -0,0 +1,114 @@ +package org.geuz.onelab; + +import java.util.ArrayList; + +import android.app.Fragment; +import android.content.Context; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.SeekBar; +import android.widget.Spinner; + +public class OptionsPostProcessingFragment extends Fragment{ + private Gmsh _gmsh; + private int _pview; + + public static OptionsPostProcessingFragment newInstance(Gmsh g, int p) { + OptionsPostProcessingFragment fragment = new OptionsPostProcessingFragment(); + Bundle bundle = new Bundle(); + bundle.putParcelable("Gmsh", g); + bundle.putInt("PView", p); + fragment.setArguments(bundle); + return fragment; + } + + private OptionsPostProcessingFragment() { + super(); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + _gmsh = getArguments().getParcelable("Gmsh"); + _pview = getArguments().getInt("PView"); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + String[] PViews = _gmsh.getPView(); + String[] infos = PViews[_pview].split("\n"); + getActivity().getActionBar().setTitle(infos[0]); + LinearLayout layout = (LinearLayout)inflater.inflate(R.layout.fragment_postprocessing, container, false); + final Spinner intervalsType = (Spinner)layout.findViewById(R.id.intervals_type); + final EditText intervals = (EditText)layout.findViewById(R.id.intervals); + final SeekBar raiseZ = (SeekBar)layout.findViewById(R.id.raisez); + intervalsType.setEnabled(infos[2].equals("1")); + ArrayList<String> choices; + ArrayAdapter<String> adapter; + choices = new ArrayList<String>(); + choices.add("Iso-values"); + choices.add("Continous map"); + choices.add("Filled iso-values"); + adapter = new ArrayAdapter<String>(container.getContext(), android.R.layout.simple_spinner_dropdown_item, choices); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + intervalsType.setAdapter(adapter); + intervalsType.setSelection(Integer.parseInt(infos[1])-1); + intervalsType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { + _gmsh.setPView(_pview, pos+1, -1, -1); + //TODO glView.requestRender(); + intervals.setEnabled(pos == 0 || pos == 2); + } + public void onNothingSelected(AdapterView<?> arg0) {} // Unused Auto-generated method stub + }); + intervals.setText(infos[3]); + intervals.setOnKeyListener(new View.OnKeyListener() { + + public boolean onKey(View v, int keyCode, KeyEvent event) { + if(keyCode == KeyEvent.KEYCODE_ENTER){ // hide the keyboard + InputMethodManager imm = (InputMethodManager)intervals.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(intervals.getWindowToken(), 0); + return true; + } + return false; + } + }); + intervals.addTextChangedListener(new TextWatcher() { + + public void onTextChanged(CharSequence s, int start, int before, int count) { + + int nIso = 1; + try { + if(s.length() < 1) nIso = 1; + else nIso = Integer.parseInt(s.toString()); + } + catch(NumberFormatException e) + { + nIso = 1; + intervals.setText(""); + } + if(nIso > 1000) {_gmsh.setPView(_pview, -1, -1, 1000); intervals.setText("1000");} + else if(nIso > 0) _gmsh.setPView(_pview, -1, -1, nIso); + else _gmsh.setPView(_pview, -1, -1, 1); + //glView.requestRender(); + } + + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} // UNUSED Auto-generated method stub + public void afterTextChanged(Editable s) {} // UNUSED Auto-generated method stub + + }); + + return layout; + } +} diff --git a/contrib/mobile/Android/src/org/geuz/onelab/PostProcessingActivity.java b/contrib/mobile/Android/src/org/geuz/onelab/PostProcessingActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..709647a0fcdd49be701f608c0aee98a8fc133d21 --- /dev/null +++ b/contrib/mobile/Android/src/org/geuz/onelab/PostProcessingActivity.java @@ -0,0 +1,18 @@ +package org.geuz.onelab; + +import android.app.Activity; +import android.os.Bundle; + +public class PostProcessingActivity extends Activity{ + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fragment); + Bundle extra = getIntent().getExtras(); + int id = extra.getInt("PView", 0); + Gmsh gmsh = extra.getParcelable("Gmsh"); + getActionBar().setDisplayHomeAsUpEnabled(true); + OptionsPostProcessingFragment optionsFragment = OptionsPostProcessingFragment.newInstance(gmsh, id); + getFragmentManager().beginTransaction().add(R.id.model_fragment, optionsFragment).commit(); + } +}