Project

General

Profile

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

magiccube / src / main / java / org / distorted / patternui / ScreenPattern.java @ 9881dc03

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