Project

General

Profile

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

examples / src / main / java / org / distorted / examples / generic / GenericTab.java @ f3ca895f

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2018 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// 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
// Distorted is distributed in the hope that it will be useful,                                  //
12
// 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
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19

    
20
package org.distorted.examples.generic;
21

    
22
import android.os.Bundle;
23
import android.support.v4.app.Fragment;
24
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
import android.widget.Button;
30
import android.widget.LinearLayout;
31
import android.widget.Spinner;
32

    
33
import org.distorted.examples.R;
34
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
public class GenericTab extends Fragment implements AdapterView.OnItemSelectedListener, View.OnClickListener
43
  {
44
  private EffectType mType;
45
  private ArrayList<GenericEffect> mList;
46
  private int mEffectAdd;
47
  private EffectName[] mEffectNames;
48
  private DistortedEffects mEffects;
49
  private String[] mEffectStrings;
50
  private int mLayout, mSpinner;
51
  private int mChildren;
52

    
53
///////////////////////////////////////////////////////////////////////////////////////////////////
54

    
55
  public GenericTab()
56
    {
57
    mList = new ArrayList<>();
58
    mEffectAdd = 0;
59
    mChildren  = 0;
60
    }
61

    
62
///////////////////////////////////////////////////////////////////////////////////////////////////
63

    
64
  @Override
65
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
66
    {
67
    Bundle args = getArguments();
68

    
69
    int position = args.getInt("position");
70

    
71
    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

    
76
    GenericActivity2 act = (GenericActivity2)getActivity();
77

    
78
    if( act!=null ) mEffects = act.getEffects();
79

    
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
    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
    }
97

    
98
///////////////////////////////////////////////////////////////////////////////////////////////////
99

    
100
  @Override
101
  public void onStart()
102
    {
103
    super.onStart();
104

    
105
    GenericActivity2 act = (GenericActivity2)getActivity();
106

    
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

    
112
    effectSpinner.setOnItemSelectedListener(this);
113
    effectSpinner.setAdapter(adapterEffect);
114
    }
115

    
116
///////////////////////////////////////////////////////////////////////////////////////////////////
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
///////////////////////////////////////////////////////////////////////////////////////////////////
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
         if( act!=null )
147
           {
148
           GenericViewPager pager = act.getPager();
149
           pager.setCurrentTab(mType);
150
           act.showRegionAndCenter(null);
151
           }
152
         }
153
       }
154
     }
155

    
156
///////////////////////////////////////////////////////////////////////////////////////////////////
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
    GenericActivity2 act = (GenericActivity2)getActivity();
177
    GenericEffect eff = new GenericEffect(mEffectNames[mEffectAdd], act );
178
    mList.add(eff);
179

    
180
    mChildren++;
181

    
182
    LinearLayout layout = act.findViewById(mLayout);
183
    View view = eff.createView(mChildren);
184
    layout.addView(view);
185

    
186
    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
    if( mEffectNames[mEffectAdd].getCenterDimension() > 0 )
209
      {
210
      View center = eff.createCenter(mChildren);
211
      layout.addView(center);
212
      }
213

    
214
    if( mEffectNames[mEffectAdd].getRegionDimension() > 0 )
215
      {
216
      View region = eff.createRegion(mChildren);
217
      layout.addView(region);
218
      }
219

    
220
    eff.apply(mEffects);
221
    }
222

    
223
///////////////////////////////////////////////////////////////////////////////////////////////////
224

    
225
  void removeAll()
226
    {
227
    GenericActivity2 act = (GenericActivity2)getActivity();
228

    
229
    mChildren = 0;
230

    
231
    mList.clear();
232
    LinearLayout layout = act.findViewById(mLayout);
233
    layout.removeAllViews();
234
    mEffects.abortByType(mType);
235

    
236
    if( mType==EffectType.MATRIX )
237
      {
238
      GenericSurfaceView view = act.findViewById(R.id.genericSurfaceView);
239
      GenericRenderer renderer= view.getRenderer();
240
      renderer.resetMatrixEffects();
241
      }
242
    }
243

    
244
///////////////////////////////////////////////////////////////////////////////////////////////////
245

    
246
  void remove(View v)
247
    {
248
    for(GenericEffect effect: mList)
249
      {
250
      if( effect.thisView(v) )
251
        {
252
        GenericActivity2 act = (GenericActivity2)getActivity();
253
        LinearLayout layout = act.findViewById(mLayout);
254
        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

    
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
        mList.remove(effect);
274
        mChildren--;
275

    
276
        break;
277
        }
278
      }
279
    }
280

    
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
  }
(6-6/7)