Project

General

Profile

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

examples / src / main / java / org / distorted / examples / generic / GenericTab.java @ 71c8884f

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 c2c45d0a Leszek Koltunski
import android.support.v4.app.Fragment;
24 fe7fe83e Leszek Koltunski
import android.view.LayoutInflater;
25
import android.view.View;
26
import android.view.ViewGroup;
27
import android.widget.AdapterView;
28
import android.widget.ArrayAdapter;
29 d28ddc9b Leszek Koltunski
import android.widget.Button;
30 fe7fe83e Leszek Koltunski
import android.widget.LinearLayout;
31
import android.widget.Spinner;
32
33 d28ddc9b Leszek Koltunski
import org.distorted.examples.R;
34 fe7fe83e Leszek Koltunski
import org.distorted.library.effect.EffectName;
35
import org.distorted.library.effect.EffectType;
36
import org.distorted.library.main.DistortedEffects;
37
38
import java.util.ArrayList;
39
40
///////////////////////////////////////////////////////////////////////////////////////////////////
41
42 d28ddc9b Leszek Koltunski
public class GenericTab extends Fragment implements AdapterView.OnItemSelectedListener, View.OnClickListener
43 fe7fe83e Leszek Koltunski
  {
44
  private EffectType mType;
45 46b26cdc Leszek Koltunski
  private ArrayList<GenericEffect> mList;
46 fe7fe83e Leszek Koltunski
  private int mEffectAdd;
47
  private EffectName[] mEffectNames;
48
  private DistortedEffects mEffects;
49
  private String[] mEffectStrings;
50 1e7603bb Leszek Koltunski
  private int mLayout, mSpinner;
51 3b1e9c7e Leszek Koltunski
  private int mChildren;
52 fe7fe83e Leszek Koltunski
53
///////////////////////////////////////////////////////////////////////////////////////////////////
54
55 46b26cdc Leszek Koltunski
  public GenericTab()
56 fe7fe83e Leszek Koltunski
    {
57
    mList = new ArrayList<>();
58
    mEffectAdd = 0;
59 3b1e9c7e Leszek Koltunski
    mChildren  = 0;
60 fe7fe83e Leszek Koltunski
    }
61
62
///////////////////////////////////////////////////////////////////////////////////////////////////
63
64 cf6fb87f Leszek Koltunski
  @Override
65
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
66 fe7fe83e Leszek Koltunski
    {
67 cf6fb87f Leszek Koltunski
    Bundle args = getArguments();
68
69
    int position = args.getInt("position");
70
71 d271024d Leszek Koltunski
    int tab  = GenericViewPager.TABS[position][0];
72
    mLayout  = GenericViewPager.TABS[position][1];
73
    mSpinner = GenericViewPager.TABS[position][2];
74
    mType    = EffectType.getType(GenericViewPager.TABS[position][3]);
75 fe7fe83e Leszek Koltunski
76 46b26cdc Leszek Koltunski
    GenericActivity2 act = (GenericActivity2)getActivity();
77 06c636a5 Leszek Koltunski
78 d28ddc9b Leszek Koltunski
    if( act!=null ) mEffects = act.getEffects();
79 fe7fe83e Leszek Koltunski
80
    createEffectNames(mType);
81
    mEffectStrings = new String[mEffectNames.length];
82
83
    for (int i = 0; i < mEffectNames.length; i++)
84
      {
85
      mEffectStrings[i] = mEffectNames[i].name();
86
      }
87
88 d28ddc9b Leszek Koltunski
    View view = inflater.inflate( tab, container, false);
89
90
    Button add = view.findViewById(R.id.effects3dButtonAdd);
91
    add.setOnClickListener(this);
92
    Button rem = view.findViewById(R.id.effects3dButtonRemove);
93
    rem.setOnClickListener(this);
94
95
    return view;
96 fe7fe83e Leszek Koltunski
    }
97
98
///////////////////////////////////////////////////////////////////////////////////////////////////
99
100
  @Override
101
  public void onStart()
102
    {
103
    super.onStart();
104
105 46b26cdc Leszek Koltunski
    GenericActivity2 act = (GenericActivity2)getActivity();
106 fe7fe83e Leszek Koltunski
107
    ArrayAdapter<String> adapterEffect = new ArrayAdapter<>( act, android.R.layout.simple_spinner_item, mEffectStrings);
108
    adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
109
110
    Spinner effectSpinner = act.findViewById(mSpinner);
111 cf6fb87f Leszek Koltunski
112 fe7fe83e Leszek Koltunski
    effectSpinner.setOnItemSelectedListener(this);
113
    effectSpinner.setAdapter(adapterEffect);
114
    }
115
116 d28ddc9b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
117
118
  @Override
119
  public void onClick(View v)
120
    {
121
    switch (v.getId())
122
      {
123
      case R.id.effects3dButtonAdd   : newEffect(); break;
124
      case R.id.effects3dButtonRemove: removeAll(); break;
125
      case R.id.button1dRemove       :
126
      case R.id.button2dRemove       :
127
      case R.id.button3dRemove       :
128
      case R.id.button4dRemove       :
129
      case R.id.button5dRemove       : remove(v)  ; break;
130
      }
131
    }
132
133 6cc818f6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
134
135
   @Override
136
   public void setUserVisibleHint(boolean isVisibleToUser)
137
     {
138
     super.setUserVisibleHint(isVisibleToUser);
139
140
     if (isVisibleToUser)
141
       {
142
       if( mType!=null )
143
         {
144
         GenericActivity2 act = (GenericActivity2)getActivity();
145
146 1e7603bb Leszek Koltunski
         if( act!=null )
147
           {
148 d28ddc9b Leszek Koltunski
           GenericViewPager pager = act.getPager();
149
           pager.setCurrentTab(mType);
150 1e7603bb Leszek Koltunski
           act.showRegionAndCenter(null);
151
           }
152 6cc818f6 Leszek Koltunski
         }
153
       }
154
     }
155
156 fe7fe83e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
157
158
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
159
    {
160
    if( parent.getId() == mSpinner )
161
      {
162
      mEffectAdd = pos;
163
      }
164
    }
165
166
///////////////////////////////////////////////////////////////////////////////////////////////////
167
168
  public void onNothingSelected(AdapterView<?> parent)
169
    {
170
    }
171
172
///////////////////////////////////////////////////////////////////////////////////////////////////
173
174
  void newEffect()
175
    {
176 46b26cdc Leszek Koltunski
    GenericActivity2 act = (GenericActivity2)getActivity();
177
    GenericEffect eff = new GenericEffect(mEffectNames[mEffectAdd], act );
178 fe7fe83e Leszek Koltunski
    mList.add(eff);
179
180 3b1e9c7e Leszek Koltunski
    mChildren++;
181
182 cf6fb87f Leszek Koltunski
    LinearLayout layout = act.findViewById(mLayout);
183 3b1e9c7e Leszek Koltunski
    View view = eff.createView(mChildren);
184 fe7fe83e Leszek Koltunski
    layout.addView(view);
185
186 d28ddc9b Leszek Koltunski
    int dimension = eff.getDimension();
187
    Button butt;
188
189
    switch(dimension)
190
      {
191
      case 1: butt = view.findViewById(R.id.button1dRemove);
192
              butt.setOnClickListener(this);
193
              break;
194
      case 2: butt = view.findViewById(R.id.button2dRemove);
195
              butt.setOnClickListener(this);
196
              break;
197
      case 3: butt = view.findViewById(R.id.button3dRemove);
198
              butt.setOnClickListener(this);
199
              break;
200
      case 4: butt = view.findViewById(R.id.button4dRemove);
201
              butt.setOnClickListener(this);
202
              break;
203
      case 5: butt = view.findViewById(R.id.button5dRemove);
204
              butt.setOnClickListener(this);
205
              break;
206
      }
207
208 1585ba24 Leszek Koltunski
    if( mEffectNames[mEffectAdd].getCenterDimension() > 0 )
209 fe7fe83e Leszek Koltunski
      {
210 3b1e9c7e Leszek Koltunski
      View center = eff.createCenter(mChildren);
211 fe7fe83e Leszek Koltunski
      layout.addView(center);
212
      }
213
214 1585ba24 Leszek Koltunski
    if( mEffectNames[mEffectAdd].getRegionDimension() > 0 )
215 fe7fe83e Leszek Koltunski
      {
216 3b1e9c7e Leszek Koltunski
      View region = eff.createRegion(mChildren);
217 fe7fe83e Leszek Koltunski
      layout.addView(region);
218
      }
219
220
    eff.apply(mEffects);
221
    }
222
223
///////////////////////////////////////////////////////////////////////////////////////////////////
224
225
  void removeAll()
226
    {
227 46b26cdc Leszek Koltunski
    GenericActivity2 act = (GenericActivity2)getActivity();
228 fe7fe83e Leszek Koltunski
229 3b1e9c7e Leszek Koltunski
    mChildren = 0;
230
231 fe7fe83e Leszek Koltunski
    mList.clear();
232
    LinearLayout layout = act.findViewById(mLayout);
233
    layout.removeAllViews();
234
    mEffects.abortByType(mType);
235
236 65f622c1 Leszek Koltunski
    if( mType==EffectType.MATRIX )
237
      {
238 d28ddc9b Leszek Koltunski
      GenericSurfaceView view = act.findViewById(R.id.genericSurfaceView);
239
      GenericRenderer renderer= view.getRenderer();
240
      renderer.resetMatrixEffects();
241 65f622c1 Leszek Koltunski
      }
242 fe7fe83e Leszek Koltunski
    }
243
244
///////////////////////////////////////////////////////////////////////////////////////////////////
245
246
  void remove(View v)
247
    {
248 46b26cdc Leszek Koltunski
    for(GenericEffect effect: mList)
249 fe7fe83e Leszek Koltunski
      {
250
      if( effect.thisView(v) )
251
        {
252 46b26cdc Leszek Koltunski
        GenericActivity2 act = (GenericActivity2)getActivity();
253 cf6fb87f Leszek Koltunski
        LinearLayout layout = act.findViewById(mLayout);
254 fe7fe83e Leszek Koltunski
        View view;
255
256
        view = effect.getEffect();
257
        if( view!=null ) layout.removeView(view);
258
        view = effect.getCenter();
259
        if( view!=null ) layout.removeView(view);
260
        view = effect.getRegion();
261
        if( view!=null ) layout.removeView(view);
262
263
        mEffects.abortById(effect.getId());
264 3b1e9c7e Leszek Koltunski
265
        int index = mList.indexOf(effect);
266
        int capac = mList.size();
267
268
        for(int i=index+1; i<capac; i++)
269
          {
270
          mList.get(i).setBackground(i-1);
271
          }
272
273 fe7fe83e Leszek Koltunski
        mList.remove(effect);
274 3b1e9c7e Leszek Koltunski
        mChildren--;
275 fe7fe83e Leszek Koltunski
276
        break;
277
        }
278
      }
279
    }
280 d28ddc9b Leszek Koltunski
281
///////////////////////////////////////////////////////////////////////////////////////////////////
282
283
  private void createEffectNames(EffectType type)
284
    {
285
    EffectName[] names = EffectName.values();
286
287
    int numEffects=0;
288
289
    for(int i=0; i<names.length; i++)
290
      if( names[i].getType() == type ) numEffects++;
291
292
    mEffectNames = new EffectName[numEffects];
293
294
    numEffects=0;
295
296
    for(int i=0; i<names.length; i++)
297
      if( names[i].getType() == type )
298
        {
299
        mEffectNames[numEffects++] = names[i];
300
        }
301
    }
302 fe7fe83e Leszek Koltunski
  }