commit d28ddc9b9545b84745c678e3c4219e6a867a93b3
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Mar 21 23:02:25 2019 +0000

    Further improvement for the Generic app.

diff --git a/src/main/java/org/distorted/examples/generic/GenericActivity2.java b/src/main/java/org/distorted/examples/generic/GenericActivity2.java
index be1fea8..56df217 100644
--- a/src/main/java/org/distorted/examples/generic/GenericActivity2.java
+++ b/src/main/java/org/distorted/examples/generic/GenericActivity2.java
@@ -31,7 +31,6 @@ import android.view.View;
 import android.widget.CheckBox;
 
 import org.distorted.examples.R;
-import org.distorted.library.effect.EffectType;
 import org.distorted.library.main.Distorted;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
@@ -187,6 +186,20 @@ public class GenericActivity2 extends AppCompatActivity
     return mBitmap;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public DistortedEffects getEffects()
+    {
+    return mEffects;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public GenericViewPager getPager()
+    {
+    return mViewPager;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int getWidth()
@@ -232,58 +245,6 @@ public class GenericActivity2 extends AppCompatActivity
     view.getRenderer().setRegion( region.get1(), region.get2(), region.get3(), region.get4() );
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  void resetMatrixEffects()
-    {
-    GenericSurfaceView view = findViewById(R.id.genericSurfaceView);
-    GenericRenderer renderer= view.getRenderer();
-
-    renderer.resetMatrixEffects();
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  void setCurrentTab(EffectType type)
-    {
-    mViewPager.setCurrentTab(type);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  void setTab(GenericTab tab, int position)
-    {
-    mViewPager.setTab(tab,position);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public DistortedEffects getEffects()
-    {
-    return mEffects;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void newEffect(View v)
-    {
-    mViewPager.newEffect();
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void removeAll(View v)
-    {
-    mViewPager.removeAll();
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void remove(View v)
-    {
-    mViewPager.remove(v);
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void showRegionAndCenter(View view)
diff --git a/src/main/java/org/distorted/examples/generic/GenericEffect.java b/src/main/java/org/distorted/examples/generic/GenericEffect.java
index 1afd5a3..8a648c0 100644
--- a/src/main/java/org/distorted/examples/generic/GenericEffect.java
+++ b/src/main/java/org/distorted/examples/generic/GenericEffect.java
@@ -788,6 +788,13 @@ class GenericEffect implements SeekBar.OnSeekBarChangeListener
     return mId;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getDimension()
+    {
+    return mDimension;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public View getEffect()
diff --git a/src/main/java/org/distorted/examples/generic/GenericTab.java b/src/main/java/org/distorted/examples/generic/GenericTab.java
index eafb750..3dbbe19 100644
--- a/src/main/java/org/distorted/examples/generic/GenericTab.java
+++ b/src/main/java/org/distorted/examples/generic/GenericTab.java
@@ -26,9 +26,11 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
+import android.widget.Button;
 import android.widget.LinearLayout;
 import android.widget.Spinner;
 
+import org.distorted.examples.R;
 import org.distorted.library.effect.EffectName;
 import org.distorted.library.effect.EffectType;
 import org.distorted.library.main.DistortedEffects;
@@ -37,7 +39,7 @@ import java.util.ArrayList;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-public class GenericTab extends Fragment implements AdapterView.OnItemSelectedListener
+public class GenericTab extends Fragment implements AdapterView.OnItemSelectedListener, View.OnClickListener
   {
   private EffectType mType;
   private ArrayList<GenericEffect> mList;
@@ -73,11 +75,7 @@ public class GenericTab extends Fragment implements AdapterView.OnItemSelectedLi
 
     GenericActivity2 act = (GenericActivity2)getActivity();
 
-    if( act!=null )
-      {
-      act.setTab(this,position);
-      mEffects = act.getEffects();
-      }
+    if( act!=null ) mEffects = act.getEffects();
 
     createEffectNames(mType);
     mEffectStrings = new String[mEffectNames.length];
@@ -87,7 +85,14 @@ public class GenericTab extends Fragment implements AdapterView.OnItemSelectedLi
       mEffectStrings[i] = mEffectNames[i].name();
       }
 
-    return inflater.inflate( tab, container, false);
+    View view = inflater.inflate( tab, container, false);
+
+    Button add = view.findViewById(R.id.effects3dButtonAdd);
+    add.setOnClickListener(this);
+    Button rem = view.findViewById(R.id.effects3dButtonRemove);
+    rem.setOnClickListener(this);
+
+    return view;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -108,6 +113,23 @@ public class GenericTab extends Fragment implements AdapterView.OnItemSelectedLi
     effectSpinner.setAdapter(adapterEffect);
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  @Override
+  public void onClick(View v)
+    {
+    switch (v.getId())
+      {
+      case R.id.effects3dButtonAdd   : newEffect(); break;
+      case R.id.effects3dButtonRemove: removeAll(); break;
+      case R.id.button1dRemove       :
+      case R.id.button2dRemove       :
+      case R.id.button3dRemove       :
+      case R.id.button4dRemove       :
+      case R.id.button5dRemove       : remove(v)  ; break;
+      }
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
    @Override
@@ -123,7 +145,8 @@ public class GenericTab extends Fragment implements AdapterView.OnItemSelectedLi
 
          if( act!=null )
            {
-           act.setCurrentTab(mType);
+           GenericViewPager pager = act.getPager();
+           pager.setCurrentTab(mType);
            act.showRegionAndCenter(null);
            }
          }
@@ -160,6 +183,28 @@ public class GenericTab extends Fragment implements AdapterView.OnItemSelectedLi
     View view = eff.createView(mChildren);
     layout.addView(view);
 
+    int dimension = eff.getDimension();
+    Button butt;
+
+    switch(dimension)
+      {
+      case 1: butt = view.findViewById(R.id.button1dRemove);
+              butt.setOnClickListener(this);
+              break;
+      case 2: butt = view.findViewById(R.id.button2dRemove);
+              butt.setOnClickListener(this);
+              break;
+      case 3: butt = view.findViewById(R.id.button3dRemove);
+              butt.setOnClickListener(this);
+              break;
+      case 4: butt = view.findViewById(R.id.button4dRemove);
+              butt.setOnClickListener(this);
+              break;
+      case 5: butt = view.findViewById(R.id.button5dRemove);
+              butt.setOnClickListener(this);
+              break;
+      }
+
     if( mEffectNames[mEffectAdd].getCenterDimension() > 0 )
       {
       View center = eff.createCenter(mChildren);
@@ -175,28 +220,6 @@ public class GenericTab extends Fragment implements AdapterView.OnItemSelectedLi
     eff.apply(mEffects);
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private void createEffectNames(EffectType type)
-    {
-    EffectName[] names = EffectName.values();
-
-    int numEffects=0;
-
-    for(int i=0; i<names.length; i++)
-      if( names[i].getType() == type ) numEffects++;
-
-    mEffectNames = new EffectName[numEffects];
-
-    numEffects=0;
-
-    for(int i=0; i<names.length; i++)
-      if( names[i].getType() == type )
-        {
-        mEffectNames[numEffects++] = names[i];
-        }
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   void removeAll()
@@ -212,7 +235,9 @@ public class GenericTab extends Fragment implements AdapterView.OnItemSelectedLi
 
     if( mType==EffectType.MATRIX )
       {
-      act.resetMatrixEffects();
+      GenericSurfaceView view = act.findViewById(R.id.genericSurfaceView);
+      GenericRenderer renderer= view.getRenderer();
+      renderer.resetMatrixEffects();
       }
     }
 
@@ -252,4 +277,26 @@ public class GenericTab extends Fragment implements AdapterView.OnItemSelectedLi
         }
       }
     }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void createEffectNames(EffectType type)
+    {
+    EffectName[] names = EffectName.values();
+
+    int numEffects=0;
+
+    for(int i=0; i<names.length; i++)
+      if( names[i].getType() == type ) numEffects++;
+
+    mEffectNames = new EffectName[numEffects];
+
+    numEffects=0;
+
+    for(int i=0; i<names.length; i++)
+      if( names[i].getType() == type )
+        {
+        mEffectNames[numEffects++] = names[i];
+        }
+    }
   }
diff --git a/src/main/java/org/distorted/examples/generic/GenericViewPager.java b/src/main/java/org/distorted/examples/generic/GenericViewPager.java
index d835cbe..4a1d121 100644
--- a/src/main/java/org/distorted/examples/generic/GenericViewPager.java
+++ b/src/main/java/org/distorted/examples/generic/GenericViewPager.java
@@ -25,7 +25,6 @@ import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentPagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.support.v7.app.AppCompatActivity;
-import android.view.View;
 
 import org.distorted.examples.R;
 import org.distorted.library.effect.EffectType;
@@ -50,7 +49,6 @@ class GenericViewPager
   private static final int NUM_TABS = TABS.length/NUM;
 
   private ViewPager mViewPager;
-  private GenericTab[] mTab;
   private int mCurrentTab;
 
   private class GenericTabViewPager extends FragmentPagerAdapter
@@ -100,7 +98,6 @@ class GenericViewPager
     GenericTabViewPager pager = new GenericTabViewPager( act.getSupportFragmentManager() );
     mViewPager.setAdapter(pager);
 
-    mTab = new GenericTab[NUM_TABS];
     mCurrentTab = 0;
     }
 
@@ -108,39 +105,12 @@ class GenericViewPager
 
   void showRegionAndCenter(boolean showR, boolean showC, GenericSurfaceView sv)
     {
-    boolean localShowC = showCenter(mCurrentTab);
-    boolean localShowR = showRegion(mCurrentTab);
+    boolean localShowC = (TABS[NUM*mCurrentTab + 4] == 1);
+    boolean localShowR = (TABS[NUM*mCurrentTab + 5] == 1);
 
     sv.getRenderer().showRegionAndCenter( (showR&&localShowR) , (showC&&localShowC) );
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  void newEffect()
-    {
-    int pos = mViewPager.getCurrentItem();
-
-    if( pos>=0 && pos<NUM_TABS ) mTab[pos].newEffect();
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  void removeAll()
-    {
-    int pos = mViewPager.getCurrentItem();
-
-    if( pos>=0 && pos<NUM_TABS ) mTab[pos].removeAll();
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  void remove(View v)
-    {
-    int pos = mViewPager.getCurrentItem();
-
-    if( pos>=0 && pos<NUM_TABS ) mTab[pos].remove(v);
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   ViewPager getPager()
@@ -161,25 +131,4 @@ class GenericViewPager
         }
       }
     }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  void setTab(GenericTab tab, int position)
-    {
-    if( position>=0 && position<NUM_TABS ) mTab[position] = tab;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private static boolean showCenter(int position)
-    {
-    return TABS[NUM*position + 4] == 1;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private static boolean showRegion(int position)
-    {
-    return TABS[NUM*position + 5] == 1;
-    }
   }
diff --git a/src/main/res/layout/effect1d.xml b/src/main/res/layout/effect1d.xml
index 20bb5a8..c44e072 100644
--- a/src/main/res/layout/effect1d.xml
+++ b/src/main/res/layout/effect1d.xml
@@ -26,8 +26,7 @@
                     android:layout_height="wrap_content"
                     android:id="@+id/button1dRemove"
                     android:layout_weight="0.2"
-                    android:layout_marginTop="3dp"
-                    android:onClick="remove"/>
+                    android:layout_marginTop="3dp"/>
         </LinearLayout>
 
         <SeekBar
diff --git a/src/main/res/layout/effect2d.xml b/src/main/res/layout/effect2d.xml
index 01fd228..ee60447 100644
--- a/src/main/res/layout/effect2d.xml
+++ b/src/main/res/layout/effect2d.xml
@@ -26,8 +26,7 @@
                     android:layout_height="wrap_content"
                     android:id="@+id/button2dRemove"
                     android:layout_weight="0.2"
-                    android:layout_marginTop="3dp"
-                    android:onClick="remove"/>
+                    android:layout_marginTop="3dp"/>
         </LinearLayout>
 
         <SeekBar
diff --git a/src/main/res/layout/effect3d.xml b/src/main/res/layout/effect3d.xml
index bcc3c19..11fb4af 100644
--- a/src/main/res/layout/effect3d.xml
+++ b/src/main/res/layout/effect3d.xml
@@ -26,8 +26,7 @@
                     android:layout_height="wrap_content"
                     android:id="@+id/button3dRemove"
                     android:layout_weight="0.2"
-                    android:layout_marginTop="3dp"
-                    android:onClick="remove"/>
+                    android:layout_marginTop="3dp"/>
         </LinearLayout>
 
         <SeekBar
diff --git a/src/main/res/layout/effect4d.xml b/src/main/res/layout/effect4d.xml
index 3e192cc..0f70757 100644
--- a/src/main/res/layout/effect4d.xml
+++ b/src/main/res/layout/effect4d.xml
@@ -26,8 +26,7 @@
                     android:layout_height="wrap_content"
                     android:id="@+id/button4dRemove"
                     android:layout_weight="0.2"
-                    android:layout_marginTop="3dp"
-                    android:onClick="remove"/>
+                    android:layout_marginTop="3dp"/>
         </LinearLayout>
 
         <SeekBar
diff --git a/src/main/res/layout/effect5d.xml b/src/main/res/layout/effect5d.xml
index ff28d84..732310f 100644
--- a/src/main/res/layout/effect5d.xml
+++ b/src/main/res/layout/effect5d.xml
@@ -26,8 +26,7 @@
                     android:layout_height="wrap_content"
                     android:id="@+id/button5dRemove"
                     android:layout_weight="0.2"
-                    android:layout_marginTop="3dp"
-                    android:onClick="remove"/>
+                    android:layout_marginTop="3dp"/>
         </LinearLayout>
 
         <SeekBar
diff --git a/src/main/res/layout/effects3dtab0.xml b/src/main/res/layout/effects3dtab0.xml
index f4326fd..3fc6aa5 100644
--- a/src/main/res/layout/effects3dtab0.xml
+++ b/src/main/res/layout/effects3dtab0.xml
@@ -11,10 +11,9 @@
             android:orientation="horizontal">
 
             <Button
-                android:id="@+id/buttonAdd"
+                android:id="@+id/effects3dButtonAdd"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:onClick="newEffect"
                 android:text="@string/Add"
                 />
 
@@ -32,10 +31,9 @@
                 android:layout_weight="0.5"/>
 
             <Button
-                android:id="@+id/buttonRemove"
+                android:id="@+id/effects3dButtonRemove"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:onClick="removeAll"
                 android:text="@string/reset"
                 />
 
diff --git a/src/main/res/layout/effects3dtab1.xml b/src/main/res/layout/effects3dtab1.xml
index 2bd4de2..fb53506 100644
--- a/src/main/res/layout/effects3dtab1.xml
+++ b/src/main/res/layout/effects3dtab1.xml
@@ -11,10 +11,9 @@
             android:orientation="horizontal">
 
             <Button
-                android:id="@+id/buttonAdd"
+                android:id="@+id/effects3dButtonAdd"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:onClick="newEffect"
                 android:text="@string/Add"
                 />
 
@@ -32,10 +31,9 @@
                 android:layout_weight="0.5"/>
 
             <Button
-                android:id="@+id/buttonRemove"
+                android:id="@+id/effects3dButtonRemove"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:onClick="removeAll"
                 android:text="@string/reset"
                 />
 
diff --git a/src/main/res/layout/effects3dtab2.xml b/src/main/res/layout/effects3dtab2.xml
index 1d57baf..42299c4 100644
--- a/src/main/res/layout/effects3dtab2.xml
+++ b/src/main/res/layout/effects3dtab2.xml
@@ -11,10 +11,9 @@
             android:orientation="horizontal">
 
             <Button
-                android:id="@+id/buttonAdd"
+                android:id="@+id/effects3dButtonAdd"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:onClick="newEffect"
                 android:text="@string/Add"
                 />
 
@@ -32,10 +31,9 @@
                 android:layout_weight="0.5"/>
 
             <Button
-                android:id="@+id/buttonRemove"
+                android:id="@+id/effects3dButtonRemove"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:onClick="removeAll"
                 android:text="@string/reset"
                 />
 
diff --git a/src/main/res/layout/effects3dtab3.xml b/src/main/res/layout/effects3dtab3.xml
index 9608b29..bd4b003 100644
--- a/src/main/res/layout/effects3dtab3.xml
+++ b/src/main/res/layout/effects3dtab3.xml
@@ -11,10 +11,9 @@
             android:orientation="horizontal">
 
             <Button
-                android:id="@+id/buttonAdd"
+                android:id="@+id/effects3dButtonAdd"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:onClick="newEffect"
                 android:text="@string/Add"
                 />
 
@@ -32,10 +31,9 @@
                 android:layout_weight="0.5"/>
 
             <Button
-                android:id="@+id/buttonRemove"
+                android:id="@+id/effects3dButtonRemove"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:onClick="removeAll"
                 android:text="@string/reset"
                 />
 
diff --git a/src/main/res/layout/genericlayout.xml b/src/main/res/layout/genericlayout.xml
index b9d781a..6c4e9ec 100644
--- a/src/main/res/layout/genericlayout.xml
+++ b/src/main/res/layout/genericlayout.xml
@@ -5,12 +5,6 @@
     android:layout_weight="1"
     android:orientation="vertical" >
 
-    <org.distorted.examples.generic.GenericSurfaceView
-        android:id="@+id/genericSurfaceView"
-        android:layout_width="fill_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1" />
-
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="32dp"
@@ -58,6 +52,12 @@
 
     </LinearLayout>
 
+    <org.distorted.examples.generic.GenericSurfaceView
+        android:id="@+id/genericSurfaceView"
+        android:layout_width="fill_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1" />
+
     <android.support.design.widget.TabLayout
         android:id="@+id/generic_sliding_tabs"
         android:layout_width="match_parent"
