commit fed003293c38820e31997436d3f7b93045397be9
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Thu Nov 10 23:00:28 2016 +0000

    Effects3D: can remove arbitrary effect

diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
index 2780b53..0bc38fa 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
@@ -552,6 +552,22 @@ public class Effects3DActivity extends Activity
       if( effect.thisView(v) )
         {
         android.util.Log.e("effects3D", "effect: "+i);
+
+        LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
+        View view;
+
+        view = effect.getEffect();
+        if( view!=null ) layout.removeView(view);
+        view = effect.getCenter();
+        if( view!=null ) layout.removeView(view);
+        view = effect.getRegion();
+        if( view!=null ) layout.removeView(view);
+
+        long id = effect.getId();
+        mObject.abortEffect(id);
+        mEffects.remove(i);
+
+        break;
         }
       }
     }
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java b/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
index f8acd7b..0b8fb44 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
@@ -67,7 +67,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
   private Dynamic2D mCenterDyn;
   private Static2D  mCenterSta;
 
-  private View mButton;
+  private View mButton, mEffect, mCenter, mRegion;
   private long mId;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -369,68 +369,72 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
     mCenterDyn   = new Dynamic2D();
     mCenterSta   = new Static2D(0,0);
     mCenterDyn.add(mCenterSta);
+
+    mButton = null;
+    mEffect = null;
+    mCenter = null;
+    mRegion = null;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   View createView()
     {
-    View effect;
     SeekBar[] seek = new SeekBar[mDimension];
 
     Effects3DActivity act = mAct.get();
 
     switch(mDimension)
       {
-      case 1 : effect     = act.getLayoutInflater().inflate(R.layout.effect1d, null);
-               mText      = (TextView)effect.findViewById(R.id.effect1dText);
-               seek[0]    = (SeekBar)effect.findViewById(R.id.effect1dbar1);
+      case 1 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect1d, null);
+               mText      = (TextView)mEffect.findViewById(R.id.effect1dText);
+               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect1dbar1);
                mSeekID[0] = seek[0].getId();
-               mButton    = effect.findViewById(R.id.button1dRemove);
+               mButton    = mEffect.findViewById(R.id.button1dRemove);
                break;
-      case 2 : effect     = act.getLayoutInflater().inflate(R.layout.effect2d, null);
-               mText      = (TextView)effect.findViewById(R.id.effect2dText);
-               seek[0]    = (SeekBar)effect.findViewById(R.id.effect2dbar1);
-               seek[1]    = (SeekBar)effect.findViewById(R.id.effect2dbar2);
+      case 2 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect2d, null);
+               mText      = (TextView)mEffect.findViewById(R.id.effect2dText);
+               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect2dbar1);
+               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect2dbar2);
                mSeekID[0] = seek[0].getId();
                mSeekID[1] = seek[1].getId();
-               mButton    = effect.findViewById(R.id.button2dRemove);
+               mButton    = mEffect.findViewById(R.id.button2dRemove);
                break;
-      case 3 : effect     = act.getLayoutInflater().inflate(R.layout.effect3d, null);
-               mText      = (TextView)effect.findViewById(R.id.effect3dText);
-               seek[0]    = (SeekBar)effect.findViewById(R.id.effect3dbar1);
-               seek[1]    = (SeekBar)effect.findViewById(R.id.effect3dbar2);
-               seek[2]    = (SeekBar)effect.findViewById(R.id.effect3dbar3);
+      case 3 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect3d, null);
+               mText      = (TextView)mEffect.findViewById(R.id.effect3dText);
+               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect3dbar1);
+               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect3dbar2);
+               seek[2]    = (SeekBar)mEffect.findViewById(R.id.effect3dbar3);
                mSeekID[0] = seek[0].getId();
                mSeekID[1] = seek[1].getId();
                mSeekID[2] = seek[2].getId();
-               mButton    = effect.findViewById(R.id.button3dRemove);
+               mButton    = mEffect.findViewById(R.id.button3dRemove);
                break;
-      case 4 : effect     = act.getLayoutInflater().inflate(R.layout.effect4d, null);
-               mText      = (TextView)effect.findViewById(R.id.effect4dText);
-               seek[0]    = (SeekBar)effect.findViewById(R.id.effect4dbar1);
-               seek[1]    = (SeekBar)effect.findViewById(R.id.effect4dbar2);
-               seek[2]    = (SeekBar)effect.findViewById(R.id.effect4dbar3);
-               seek[3]    = (SeekBar)effect.findViewById(R.id.effect4dbar4);
+      case 4 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect4d, null);
+               mText      = (TextView)mEffect.findViewById(R.id.effect4dText);
+               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar1);
+               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar2);
+               seek[2]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar3);
+               seek[3]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar4);
                mSeekID[0] = seek[0].getId();
                mSeekID[1] = seek[1].getId();
                mSeekID[2] = seek[2].getId();
                mSeekID[3] = seek[3].getId();
-               mButton    = effect.findViewById(R.id.button4dRemove);
+               mButton    = mEffect.findViewById(R.id.button4dRemove);
                break;
-      case 5 : effect     = act.getLayoutInflater().inflate(R.layout.effect5d, null);
-               mText      = (TextView)effect.findViewById(R.id.effect5dText);
-               seek[0]    = (SeekBar)effect.findViewById(R.id.effect5dbar1);
-               seek[1]    = (SeekBar)effect.findViewById(R.id.effect5dbar2);
-               seek[2]    = (SeekBar)effect.findViewById(R.id.effect5dbar3);
-               seek[3]    = (SeekBar)effect.findViewById(R.id.effect5dbar4);
-               seek[4]    = (SeekBar)effect.findViewById(R.id.effect5dbar5);
+      case 5 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect5d, null);
+               mText      = (TextView)mEffect.findViewById(R.id.effect5dText);
+               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar1);
+               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar2);
+               seek[2]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar3);
+               seek[3]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar4);
+               seek[4]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar5);
                mSeekID[0] = seek[0].getId();
                mSeekID[1] = seek[1].getId();
                mSeekID[2] = seek[2].getId();
                mSeekID[3] = seek[3].getId();
                mSeekID[4] = seek[4].getId();
-               mButton    = effect.findViewById(R.id.button5dRemove);
+               mButton    = mEffect.findViewById(R.id.button5dRemove);
                break;
       default: android.util.Log.e("Effects3DEffect", "dimension "+mDimension+" not supported!");
                return null;
@@ -447,7 +451,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
     Effects3DActivity.setSupportsRegion(supportsRegion());
     Effects3DActivity.setTypeVertex(mName.getType() == EffectTypes.VERTEX);
 
-    return effect;
+    return mEffect;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -456,21 +460,21 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
     {
     Effects3DActivity act = mAct.get();
 
-    View region = act.getLayoutInflater().inflate(R.layout.effectregion, null);
+    mRegion = act.getLayoutInflater().inflate(R.layout.effectregion, null);
 
     SeekBar[] seek = new SeekBar[4];
 
-    seek[0] = (SeekBar)region.findViewById(R.id.effectRegionBarX );
-    seek[1] = (SeekBar)region.findViewById(R.id.effectRegionBarY );
-    seek[2] = (SeekBar)region.findViewById(R.id.effectRegionBarRX);
-    seek[3] = (SeekBar)region.findViewById(R.id.effectRegionBarRY);
+    seek[0] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarX );
+    seek[1] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarY );
+    seek[2] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarRX);
+    seek[3] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarRY);
 
     mSeekRegionID[0] = seek[0].getId();
     mSeekRegionID[1] = seek[1].getId();
     mSeekRegionID[2] = seek[2].getId();
     mSeekRegionID[3] = seek[3].getId();
 
-    mTextRegion = (TextView)region.findViewById(R.id.effectRegionText);
+    mTextRegion = (TextView)mRegion.findViewById(R.id.effectRegionText);
 
     setDefaultRegionInter();
 
@@ -482,7 +486,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
 
     act.setRegion(mRegionSta.getX(),mRegionSta.getY(),mRegionSta.getZ());
 
-    return region;
+    return mRegion;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -491,17 +495,17 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
     {
     Effects3DActivity act = mAct.get();
 
-    View center = act.getLayoutInflater().inflate(R.layout.effectcenter, null);
+    mCenter = act.getLayoutInflater().inflate(R.layout.effectcenter, null);
 
     SeekBar[] seek = new SeekBar[2];
 
-    seek[0] = (SeekBar)center.findViewById(R.id.effectCenterBarX );
-    seek[1] = (SeekBar)center.findViewById(R.id.effectCenterBarY );
+    seek[0] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarX );
+    seek[1] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarY );
 
     mSeekCenterID[0] = seek[0].getId();
     mSeekCenterID[1] = seek[1].getId();
 
-    mTextCenter = (TextView)center.findViewById(R.id.effectCenterText);
+    mTextCenter = (TextView)mCenter.findViewById(R.id.effectCenterText);
 
     setDefaultCenterInter();
 
@@ -513,7 +517,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
 
     act.setCenter(mCenterSta.getX(),mCenterSta.getY());
 
-    return center;
+    return mCenter;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -608,6 +612,34 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
     return v==mButton;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public long getId()
+    {
+    return mId;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public View getEffect()
+    {
+    return mEffect;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public View getRegion()
+    {
+    return mRegion;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public View getCenter()
+    {
+    return mCenter;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void onStartTrackingTouch(SeekBar bar) { }
