Project

General

Profile

Download (12.6 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / patterns / ScreenPattern.java @ d0ca1451

1 e9245b7b leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2023 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10 7e9d918b leszek
package org.distorted.patterns;
11 e9245b7b leszek
12
import android.content.SharedPreferences;
13
import android.os.Bundle;
14
import android.util.TypedValue;
15
import android.view.Gravity;
16
import android.view.View;
17
import android.widget.LinearLayout;
18
import android.widget.TextView;
19
20 8477cf44 leszek
import org.distorted.dialogs.DialogPattern;
21 017f24b3 leszek
import org.distorted.helpers.TransparentButton;
22 e9245b7b leszek
import org.distorted.helpers.TransparentImageButton;
23
import org.distorted.main.R;
24 302600e5 leszek
import org.distorted.objectlib.helpers.ObjectMove;
25 e9245b7b leszek
import org.distorted.objectlib.main.ObjectControl;
26
import org.distorted.objectlib.patterns.RubikPattern;
27
28
///////////////////////////////////////////////////////////////////////////////////////////////////
29
30
public class ScreenPattern extends ScreenAbstract
31
  {
32
  private TransparentImageButton mPrevButton, mNextButton, mBackButton;
33 017f24b3 leszek
  private TransparentImageButton mPrevPatt, mNextPatt;
34
  private TransparentButton mTextButton;
35 e9245b7b leszek
  private TextView mMovesText;
36
  private int mNumMoves;
37
  private int mPatternOrdinal, mCategory, mPattern;
38
  private float mButtonSize;
39
40
///////////////////////////////////////////////////////////////////////////////////////////////////
41
42
  ScreenPattern()
43
    {
44
45
    }
46
47
///////////////////////////////////////////////////////////////////////////////////////////////////
48
49
  void leaveScreen(PatternActivity act)
50
    {
51
52
    }
53
54
///////////////////////////////////////////////////////////////////////////////////////////////////
55
56
  void enterScreen(final PatternActivity act)
57
    {
58
    float width = act.getScreenWidthInPixels();
59
    mButtonSize = width*PatternActivity.BUTTON_TEXT_SIZE;
60
61
    mPatternOrdinal = -1;
62
    mCategory       = -1;
63
    mPattern        = -1;
64
65
    // TOP ////////////////////////////
66
    LinearLayout layoutTop = act.findViewById(R.id.upperBar);
67
    layoutTop.removeAllViews();
68 017f24b3 leszek
69
    setupPrevPatt(act);
70
    setupNextPatt(act);
71
    setupTextButton(act,width);
72
73
    LinearLayout.LayoutParams pTL = new LinearLayout.LayoutParams((int)(  width/6),LinearLayout.LayoutParams.MATCH_PARENT);
74
    LinearLayout.LayoutParams pTM = new LinearLayout.LayoutParams((int)(2*width/3),LinearLayout.LayoutParams.MATCH_PARENT);
75
    LinearLayout.LayoutParams pTR = new LinearLayout.LayoutParams((int)(  width/6),LinearLayout.LayoutParams.MATCH_PARENT);
76
77
    LinearLayout layoutTL = new LinearLayout(act);
78
    layoutTL.setLayoutParams(pTL);
79
    LinearLayout layoutTM = new LinearLayout(act);
80
    layoutTM.setLayoutParams(pTM);
81
    LinearLayout layoutTR = new LinearLayout(act);
82
    layoutTR.setLayoutParams(pTR);
83
84
    layoutTL.addView(mPrevPatt);
85
    layoutTM.addView(mTextButton);
86
    layoutTR.addView(mNextPatt);
87
88
    layoutTop.addView(layoutTL);
89
    layoutTop.addView(layoutTM);
90
    layoutTop.addView(layoutTR);
91 e9245b7b leszek
92
    // BOT ////////////////////////////
93
    LinearLayout layoutBot = act.findViewById(R.id.lowerBar);
94
    layoutBot.removeAllViews();
95
96
    setupPrevButton(act);
97
    setupNextButton(act);
98
    setupTextView(act,width);
99
100 017f24b3 leszek
    LinearLayout.LayoutParams pBL = new LinearLayout.LayoutParams((int)(width/2),LinearLayout.LayoutParams.MATCH_PARENT);
101
    LinearLayout.LayoutParams pBM = new LinearLayout.LayoutParams((int)(width/6),LinearLayout.LayoutParams.MATCH_PARENT);
102
    LinearLayout.LayoutParams pBR = new LinearLayout.LayoutParams((int)(width/3),LinearLayout.LayoutParams.MATCH_PARENT);
103 e9245b7b leszek
104 017f24b3 leszek
    LinearLayout layoutBL = new LinearLayout(act);
105
    layoutBL.setLayoutParams(pBL);
106
    LinearLayout layoutBM = new LinearLayout(act);
107
    layoutBM.setLayoutParams(pBM);
108
    LinearLayout layoutBR = new LinearLayout(act);
109
    layoutBR.setLayoutParams(pBR);
110 e9245b7b leszek
111 017f24b3 leszek
    layoutBL.addView(mPrevButton);
112
    layoutBL.addView(mMovesText);
113
    layoutBL.addView(mNextButton);
114 e9245b7b leszek
115
    setupBackButton(act);
116
117 017f24b3 leszek
    layoutBR.addView(mBackButton);
118 e9245b7b leszek
119 017f24b3 leszek
    layoutBot.addView(layoutBL);
120
    layoutBot.addView(layoutBM);
121
    layoutBot.addView(layoutBR);
122
    }
123
124
///////////////////////////////////////////////////////////////////////////////////////////////////
125 e9245b7b leszek
126 017f24b3 leszek
  private void showDialog(final PatternActivity act)
127
    {
128 c02235d5 leszek
    int ordinal = act.getObjectOrdinal();
129 e9245b7b leszek
    Bundle bundle = new Bundle();
130 c02235d5 leszek
    bundle.putString("argument", String.valueOf(ordinal) );
131 8477cf44 leszek
    DialogPattern diag = new DialogPattern();
132 e9245b7b leszek
    diag.setArguments(bundle);
133 8477cf44 leszek
    diag.show( act.getSupportFragmentManager(), DialogPattern.getDialogTag());
134 e9245b7b leszek
    }
135
136 017f24b3 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
137
138
  private void setupPrevPatt(final PatternActivity act)
139
    {
140
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
141
    mPrevPatt = new TransparentImageButton(act,R.drawable.ui_left,params);
142
143
    mPrevPatt.setOnClickListener( new View.OnClickListener()
144
      {
145
      @Override
146
      public void onClick(View v)
147
        {
148
        if( mPatternOrdinal<0 ) showDialog(act);
149
        else prevPattern(act);
150
        }
151
      });
152
    }
153
154
///////////////////////////////////////////////////////////////////////////////////////////////////
155
156
  private void setupNextPatt(final PatternActivity act)
157
    {
158
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
159
    mNextPatt = new TransparentImageButton(act,R.drawable.ui_right,params);
160
161
    mNextPatt.setOnClickListener( new View.OnClickListener()
162
      {
163
      @Override
164
      public void onClick(View v)
165
        {
166
        if( mPatternOrdinal<0 ) showDialog(act);
167
        else nextPattern(act);
168
        }
169
      });
170
    }
171
172
///////////////////////////////////////////////////////////////////////////////////////////////////
173
174
  private void setupTextButton(final PatternActivity act, float width)
175
    {
176
    float textSize = width*PatternActivity.TITLE_TEXT_SIZE;
177
    mTextButton = new TransparentButton(act,R.string.choose_pattern,textSize);
178
179
    mTextButton.setOnClickListener( new View.OnClickListener()
180
      {
181
      @Override
182
      public void onClick(View v)
183
        {
184
        showDialog(act);
185
        }
186
      });
187
    }
188
189 e9245b7b leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
190
191
  private void setupBackButton(final PatternActivity act)
192
    {
193
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
194
    mBackButton = new TransparentImageButton(act,R.drawable.ui_back,params);
195
196
    mBackButton.setOnClickListener( new View.OnClickListener()
197
      {
198
      @Override
199
      public void onClick(View v)
200
        {
201
        ScreenList.goBack(act);
202
        }
203
      });
204
    }
205
206
///////////////////////////////////////////////////////////////////////////////////////////////////
207
208
  private void setupPrevButton(final PatternActivity act)
209
    {
210
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
211
    mPrevButton = new TransparentImageButton(act,R.drawable.ui_left,params);
212
213
    mPrevButton.setOnClickListener( new View.OnClickListener()
214
      {
215
      @Override
216
      public void onClick(View v)
217
        {
218 017f24b3 leszek
        if( mPatternOrdinal>=0 )
219
          {
220
          RubikPattern pattern = RubikPattern.getInstance();
221
          ObjectControl control = act.getControl();
222
          pattern.backMove(control, mPatternOrdinal, mCategory, mPattern);
223
          int currMove = pattern.getCurMove(mPatternOrdinal, mCategory, mPattern);
224
          mMovesText.setText(act.getString(R.string.mo_placeholder, currMove, mNumMoves));
225
          }
226 e9245b7b leszek
        }
227
      });
228
    }
229
230
///////////////////////////////////////////////////////////////////////////////////////////////////
231
232
  private void setupNextButton(final PatternActivity act)
233
    {
234
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
235
    mNextButton = new TransparentImageButton(act,R.drawable.ui_right,params);
236
237
    mNextButton.setOnClickListener( new View.OnClickListener()
238
      {
239
      @Override
240
      public void onClick(View v)
241
        {
242 017f24b3 leszek
        if( mPatternOrdinal>=0 )
243
          {
244
          RubikPattern pattern = RubikPattern.getInstance();
245
          ObjectControl control = act.getControl();
246
          pattern.makeMove(control, mPatternOrdinal, mCategory, mPattern);
247
          int currMove = pattern.getCurMove(mPatternOrdinal, mCategory, mPattern);
248
          mMovesText.setText(act.getString(R.string.mo_placeholder, currMove, mNumMoves));
249
          }
250 e9245b7b leszek
        }
251
      });
252
    }
253
254
///////////////////////////////////////////////////////////////////////////////////////////////////
255
256
  private void setupTextView(final PatternActivity act, final float width)
257
    {
258
    int padding = (int)(width*PatternActivity.PADDING);
259
    int margin  = (int)(width*PatternActivity.SMALL_MARGIN);
260
261
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,2.0f);
262
    params.topMargin    = margin;
263
    params.bottomMargin = margin;
264
    params.leftMargin   = margin;
265
    params.rightMargin  = margin;
266
267
    mMovesText = new TextView(act);
268
    mMovesText.setTextSize(20);
269
    mMovesText.setLayoutParams(params);
270
    mMovesText.setPadding(padding,0,padding,0);
271
    mMovesText.setGravity(Gravity.CENTER);
272
    mMovesText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mButtonSize);
273
    mMovesText.setText(act.getString(R.string.mo_placeholder,0,0));
274
    }
275
276
///////////////////////////////////////////////////////////////////////////////////////////////////
277
278
  public void setPattern(final PatternActivity act, int ordinal, int category, int pattern)
279
    {
280
    mPatternOrdinal = ordinal;
281
    mCategory       = category;
282
    mPattern        = pattern;
283
284
    RubikPattern patt = RubikPattern.getInstance();
285
    String patternName = patt.getPatternName(ordinal,category,pattern);
286 017f24b3 leszek
    mTextButton.setText(patternName);
287 e9245b7b leszek
288
    mNumMoves   = patt.getNumMoves(ordinal,category,pattern);
289
    int currMove= patt.getCurMove(ordinal,category,pattern);
290
291
    mMovesText.setText(act.getString(R.string.mo_placeholder,currMove,mNumMoves));
292
    }
293
294 017f24b3 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
295
296
  private void prevPattern(final PatternActivity act)
297
    {
298
    RubikPattern patt = RubikPattern.getInstance();
299
300
    if( mPattern>0 )
301
      {
302
      setPattern(act,mPatternOrdinal,mCategory,mPattern-1);
303
      }
304
    else
305
      {
306
      if( mCategory>0 )
307
        {
308
        int numPat = patt.getNumPatterns(mPatternOrdinal,mCategory-1);
309
        setPattern(act,mPatternOrdinal,mCategory-1,numPat-1);
310
        }
311
      else
312
        {
313
        int numCat = patt.getNumCategories(mPatternOrdinal);
314
        int numPat = patt.getNumPatterns(mPatternOrdinal,numCat-1);
315
        setPattern(act,mPatternOrdinal,numCat-1,numPat-1);
316
        }
317
      }
318
319 302600e5 leszek
    ObjectMove[] moves = patt.reInitialize(mPatternOrdinal, mCategory, mPattern);
320 017f24b3 leszek
    ObjectControl control = act.getControl();
321
    if( control!=null ) control.initializeObject(moves);
322
    }
323
324
///////////////////////////////////////////////////////////////////////////////////////////////////
325
326
  private void nextPattern(final PatternActivity act)
327
    {
328
    RubikPattern patt = RubikPattern.getInstance();
329
    int numPat = patt.getNumPatterns(mPatternOrdinal,mCategory);
330
331
    if( mPattern<numPat-1 )
332
      {
333
      setPattern(act,mPatternOrdinal,mCategory,mPattern+1);
334
      }
335
    else
336
      {
337
      int numCat = patt.getNumCategories(mPatternOrdinal);
338
339
      if( mCategory<numCat-1 )
340
        {
341
        setPattern(act,mPatternOrdinal,mCategory+1,0);
342
        }
343
      else
344
        {
345
        setPattern(act,mPatternOrdinal,0,0);
346
        }
347
      }
348
349 302600e5 leszek
    ObjectMove[] moves = patt.reInitialize(mPatternOrdinal, mCategory, mPattern);
350 017f24b3 leszek
    ObjectControl control = act.getControl();
351
    if( control!=null ) control.initializeObject(moves);
352
    }
353
354 e9245b7b leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
355
356
  public void savePreferences(SharedPreferences.Editor editor)
357
    {
358
359
    }
360
361
///////////////////////////////////////////////////////////////////////////////////////////////////
362
363
  public void restorePreferences(SharedPreferences preferences)
364
    {
365
366
    }
367
  }