Project

General

Profile

Download (10.1 KB) Statistics
| Branch: | Revision:

examples / src / main / java / org / distorted / examples / generic / GenericTab.java @ 8bf89617

1 fe7fe83e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2018 Leszek Koltunski                                                               //
3
//                                                                                               //
4 71c8884f Leszek Koltunski
// This file is part of Distorted.                                                               //
5 fe7fe83e Leszek Koltunski
//                                                                                               //
6 71c8884f Leszek Koltunski
// Distorted is free software: you can redistribute it and/or modify                             //
7 fe7fe83e Leszek Koltunski
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11 71c8884f Leszek Koltunski
// Distorted is distributed in the hope that it will be useful,                                  //
12 fe7fe83e Leszek Koltunski
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17 71c8884f Leszek Koltunski
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18 fe7fe83e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20 2ec2dc32 Leszek Koltunski
package org.distorted.examples.generic;
21 fe7fe83e Leszek Koltunski
22
import android.os.Bundle;
23 2fad84a7 Leszek Koltunski
import androidx.annotation.NonNull;
24
import androidx.fragment.app.Fragment;
25 fe7fe83e Leszek Koltunski
import android.view.LayoutInflater;
26
import android.view.View;
27
import android.view.ViewGroup;
28
import android.widget.AdapterView;
29
import android.widget.ArrayAdapter;
30 d28ddc9b Leszek Koltunski
import android.widget.Button;
31 fe7fe83e Leszek Koltunski
import android.widget.LinearLayout;
32
import android.widget.Spinner;
33
34 d28ddc9b Leszek Koltunski
import org.distorted.examples.R;
35 fe7fe83e Leszek Koltunski
import org.distorted.library.effect.EffectName;
36
import org.distorted.library.effect.EffectType;
37
import org.distorted.library.main.DistortedEffects;
38
39
import java.util.ArrayList;
40
41
///////////////////////////////////////////////////////////////////////////////////////////////////
42
43 d28ddc9b Leszek Koltunski
public class GenericTab extends Fragment implements AdapterView.OnItemSelectedListener, View.OnClickListener
44 fe7fe83e Leszek Koltunski
  {
45
  private EffectType mType;
46 46b26cdc Leszek Koltunski
  private ArrayList<GenericEffect> mList;
47 fe7fe83e Leszek Koltunski
  private int mEffectAdd;
48
  private EffectName[] mEffectNames;
49
  private DistortedEffects mEffects;
50
  private String[] mEffectStrings;
51 1e7603bb Leszek Koltunski
  private int mLayout, mSpinner;
52 3b1e9c7e Leszek Koltunski
  private int mChildren;
53 fe7fe83e Leszek Koltunski
54
///////////////////////////////////////////////////////////////////////////////////////////////////
55
56 46b26cdc Leszek Koltunski
  public GenericTab()
57 fe7fe83e Leszek Koltunski
    {
58
    mList = new ArrayList<>();
59
    mEffectAdd = 0;
60 3b1e9c7e Leszek Koltunski
    mChildren  = 0;
61 fe7fe83e Leszek Koltunski
    }
62
63
///////////////////////////////////////////////////////////////////////////////////////////////////
64
65 cf6fb87f Leszek Koltunski
  @Override
66 698ad0a8 Leszek Koltunski
  public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
67 fe7fe83e Leszek Koltunski
    {
68 cf6fb87f Leszek Koltunski
    Bundle args = getArguments();
69
70
    int position = args.getInt("position");
71
72 d271024d Leszek Koltunski
    int tab  = GenericViewPager.TABS[position][0];
73
    mLayout  = GenericViewPager.TABS[position][1];
74
    mSpinner = GenericViewPager.TABS[position][2];
75
    mType    = EffectType.getType(GenericViewPager.TABS[position][3]);
76 fe7fe83e Leszek Koltunski
77 46b26cdc Leszek Koltunski
    GenericActivity2 act = (GenericActivity2)getActivity();
78 06c636a5 Leszek Koltunski
79 d28ddc9b Leszek Koltunski
    if( act!=null ) mEffects = act.getEffects();
80 fe7fe83e Leszek Koltunski
81
    createEffectNames(mType);
82
    mEffectStrings = new String[mEffectNames.length];
83
84
    for (int i = 0; i < mEffectNames.length; i++)
85
      {
86
      mEffectStrings[i] = mEffectNames[i].name();
87
      }
88
89 d28ddc9b Leszek Koltunski
    View view = inflater.inflate( tab, container, false);
90
91
    Button add = view.findViewById(R.id.effects3dButtonAdd);
92
    add.setOnClickListener(this);
93
    Button rem = view.findViewById(R.id.effects3dButtonRemove);
94
    rem.setOnClickListener(this);
95
96
    return view;
97 fe7fe83e Leszek Koltunski
    }
98
99
///////////////////////////////////////////////////////////////////////////////////////////////////
100
101
  @Override
102
  public void onStart()
103
    {
104
    super.onStart();
105
106 46b26cdc Leszek Koltunski
    GenericActivity2 act = (GenericActivity2)getActivity();
107 fe7fe83e Leszek Koltunski
108
    ArrayAdapter<String> adapterEffect = new ArrayAdapter<>( act, android.R.layout.simple_spinner_item, mEffectStrings);
109
    adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
110
111
    Spinner effectSpinner = act.findViewById(mSpinner);
112 cf6fb87f Leszek Koltunski
113 fe7fe83e Leszek Koltunski
    effectSpinner.setOnItemSelectedListener(this);
114
    effectSpinner.setAdapter(adapterEffect);
115
    }
116
117 d28ddc9b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
118
119
  @Override
120
  public void onClick(View v)
121
    {
122
    switch (v.getId())
123
      {
124
      case R.id.effects3dButtonAdd   : newEffect(); break;
125
      case R.id.effects3dButtonRemove: removeAll(); break;
126 8bf89617 Leszek Koltunski
      case R.id.button0dRemove       :
127 d28ddc9b Leszek Koltunski
      case R.id.button1dRemove       :
128
      case R.id.button2dRemove       :
129
      case R.id.button3dRemove       :
130
      case R.id.button4dRemove       :
131
      case R.id.button5dRemove       : remove(v)  ; break;
132
      }
133
    }
134
135 6cc818f6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
136
137
   @Override
138
   public void setUserVisibleHint(boolean isVisibleToUser)
139
     {
140
     super.setUserVisibleHint(isVisibleToUser);
141
142
     if (isVisibleToUser)
143
       {
144
       if( mType!=null )
145
         {
146
         GenericActivity2 act = (GenericActivity2)getActivity();
147
148 1e7603bb Leszek Koltunski
         if( act!=null )
149
           {
150 d28ddc9b Leszek Koltunski
           GenericViewPager pager = act.getPager();
151
           pager.setCurrentTab(mType);
152 1e7603bb Leszek Koltunski
           act.showRegionAndCenter(null);
153
           }
154 6cc818f6 Leszek Koltunski
         }
155
       }
156
     }
157
158 fe7fe83e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
159
160
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
161
    {
162
    if( parent.getId() == mSpinner )
163
      {
164
      mEffectAdd = pos;
165
      }
166
    }
167
168
///////////////////////////////////////////////////////////////////////////////////////////////////
169
170
  public void onNothingSelected(AdapterView<?> parent)
171
    {
172
    }
173
174
///////////////////////////////////////////////////////////////////////////////////////////////////
175
176 2fad84a7 Leszek Koltunski
  private void newEffect()
177 fe7fe83e Leszek Koltunski
    {
178 46b26cdc Leszek Koltunski
    GenericActivity2 act = (GenericActivity2)getActivity();
179
    GenericEffect eff = new GenericEffect(mEffectNames[mEffectAdd], act );
180 fe7fe83e Leszek Koltunski
    mList.add(eff);
181
182 3b1e9c7e Leszek Koltunski
    mChildren++;
183
184 cf6fb87f Leszek Koltunski
    LinearLayout layout = act.findViewById(mLayout);
185 3b1e9c7e Leszek Koltunski
    View view = eff.createView(mChildren);
186 fe7fe83e Leszek Koltunski
    layout.addView(view);
187
188 d28ddc9b Leszek Koltunski
    int dimension = eff.getDimension();
189
    Button butt;
190
191
    switch(dimension)
192
      {
193 8bf89617 Leszek Koltunski
      case 0: butt = view.findViewById(R.id.button0dRemove);
194
              butt.setOnClickListener(this);
195
              break;
196 d28ddc9b Leszek Koltunski
      case 1: butt = view.findViewById(R.id.button1dRemove);
197
              butt.setOnClickListener(this);
198
              break;
199
      case 2: butt = view.findViewById(R.id.button2dRemove);
200
              butt.setOnClickListener(this);
201
              break;
202
      case 3: butt = view.findViewById(R.id.button3dRemove);
203
              butt.setOnClickListener(this);
204
              break;
205
      case 4: butt = view.findViewById(R.id.button4dRemove);
206
              butt.setOnClickListener(this);
207
              break;
208
      case 5: butt = view.findViewById(R.id.button5dRemove);
209
              butt.setOnClickListener(this);
210
              break;
211
      }
212
213 1585ba24 Leszek Koltunski
    if( mEffectNames[mEffectAdd].getCenterDimension() > 0 )
214 fe7fe83e Leszek Koltunski
      {
215 3b1e9c7e Leszek Koltunski
      View center = eff.createCenter(mChildren);
216 fe7fe83e Leszek Koltunski
      layout.addView(center);
217
      }
218
219 1585ba24 Leszek Koltunski
    if( mEffectNames[mEffectAdd].getRegionDimension() > 0 )
220 fe7fe83e Leszek Koltunski
      {
221 3b1e9c7e Leszek Koltunski
      View region = eff.createRegion(mChildren);
222 fe7fe83e Leszek Koltunski
      layout.addView(region);
223
      }
224
225
    eff.apply(mEffects);
226
    }
227
228
///////////////////////////////////////////////////////////////////////////////////////////////////
229
230 2fad84a7 Leszek Koltunski
  private void removeAll()
231 fe7fe83e Leszek Koltunski
    {
232 46b26cdc Leszek Koltunski
    GenericActivity2 act = (GenericActivity2)getActivity();
233 fe7fe83e Leszek Koltunski
234 3b1e9c7e Leszek Koltunski
    mChildren = 0;
235
236 fe7fe83e Leszek Koltunski
    mList.clear();
237
    LinearLayout layout = act.findViewById(mLayout);
238
    layout.removeAllViews();
239
    mEffects.abortByType(mType);
240
241 65f622c1 Leszek Koltunski
    if( mType==EffectType.MATRIX )
242
      {
243 d28ddc9b Leszek Koltunski
      GenericSurfaceView view = act.findViewById(R.id.genericSurfaceView);
244
      GenericRenderer renderer= view.getRenderer();
245
      renderer.resetMatrixEffects();
246 65f622c1 Leszek Koltunski
      }
247 b1fca44e Leszek Koltunski
    if( mType==EffectType.VERTEX )
248
      {
249
      GenericSurfaceView view = act.findViewById(R.id.genericSurfaceView);
250
      GenericRenderer renderer= view.getRenderer();
251
      renderer.resetVertexEffects();
252
      }
253
254 fe7fe83e Leszek Koltunski
    }
255
256
///////////////////////////////////////////////////////////////////////////////////////////////////
257
258 2fad84a7 Leszek Koltunski
  private void remove(View v)
259 fe7fe83e Leszek Koltunski
    {
260 46b26cdc Leszek Koltunski
    for(GenericEffect effect: mList)
261 fe7fe83e Leszek Koltunski
      {
262
      if( effect.thisView(v) )
263
        {
264 46b26cdc Leszek Koltunski
        GenericActivity2 act = (GenericActivity2)getActivity();
265 cf6fb87f Leszek Koltunski
        LinearLayout layout = act.findViewById(mLayout);
266 fe7fe83e Leszek Koltunski
        View view;
267
268
        view = effect.getEffect();
269
        if( view!=null ) layout.removeView(view);
270
        view = effect.getCenter();
271
        if( view!=null ) layout.removeView(view);
272
        view = effect.getRegion();
273
        if( view!=null ) layout.removeView(view);
274
275
        mEffects.abortById(effect.getId());
276 3b1e9c7e Leszek Koltunski
277
        int index = mList.indexOf(effect);
278
        int capac = mList.size();
279
280
        for(int i=index+1; i<capac; i++)
281
          {
282
          mList.get(i).setBackground(i-1);
283
          }
284
285 fe7fe83e Leszek Koltunski
        mList.remove(effect);
286 3b1e9c7e Leszek Koltunski
        mChildren--;
287 fe7fe83e Leszek Koltunski
288
        break;
289
        }
290
      }
291
    }
292 d28ddc9b Leszek Koltunski
293
///////////////////////////////////////////////////////////////////////////////////////////////////
294
295
  private void createEffectNames(EffectType type)
296
    {
297
    EffectName[] names = EffectName.values();
298
299
    int numEffects=0;
300
301 2fad84a7 Leszek Koltunski
    for( EffectName name: names )
302
      if( name.getType() == type ) numEffects++;
303 d28ddc9b Leszek Koltunski
304
    mEffectNames = new EffectName[numEffects];
305
306
    numEffects=0;
307
308 2fad84a7 Leszek Koltunski
    for( EffectName name: names )
309
      if( name.getType() == type )
310 d28ddc9b Leszek Koltunski
        {
311 2fad84a7 Leszek Koltunski
        mEffectNames[numEffects++] = name;
312 d28ddc9b Leszek Koltunski
        }
313
    }
314 fe7fe83e Leszek Koltunski
  }