Project

General

Profile

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

magiccube / src / main / java / org / distorted / patterns / ScreenPattern.java @ 302600e5

1
///////////////////////////////////////////////////////////////////////////////////////////////////
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.patterns;
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
import org.distorted.dialogs.DialogPattern;
21
import org.distorted.helpers.TransparentButton;
22
import org.distorted.helpers.TransparentImageButton;
23
import org.distorted.main.R;
24
import org.distorted.objectlib.helpers.ObjectMove;
25
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
  private TransparentImageButton mPrevPatt, mNextPatt;
34
  private TransparentButton mTextButton;
35
  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

    
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

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

    
104
    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

    
111
    layoutBL.addView(mPrevButton);
112
    layoutBL.addView(mMovesText);
113
    layoutBL.addView(mNextButton);
114

    
115
    setupBackButton(act);
116

    
117
    layoutBR.addView(mBackButton);
118

    
119
    layoutBot.addView(layoutBL);
120
    layoutBot.addView(layoutBM);
121
    layoutBot.addView(layoutBR);
122
    }
123

    
124
///////////////////////////////////////////////////////////////////////////////////////////////////
125

    
126
  private void showDialog(final PatternActivity act)
127
    {
128
    int ordinal = act.getObjectOrdinal();
129
    Bundle bundle = new Bundle();
130
    bundle.putString("argument", String.valueOf(ordinal) );
131
    DialogPattern diag = new DialogPattern();
132
    diag.setArguments(bundle);
133
    diag.show( act.getSupportFragmentManager(), DialogPattern.getDialogTag());
134
    }
135

    
136
///////////////////////////////////////////////////////////////////////////////////////////////////
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
///////////////////////////////////////////////////////////////////////////////////////////////////
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
        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
        }
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
        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
        }
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
    mTextButton.setText(patternName);
287

    
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
///////////////////////////////////////////////////////////////////////////////////////////////////
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
    ObjectMove[] moves = patt.reInitialize(mPatternOrdinal, mCategory, mPattern);
320
    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
    ObjectMove[] moves = patt.reInitialize(mPatternOrdinal, mCategory, mPattern);
350
    ObjectControl control = act.getControl();
351
    if( control!=null ) control.initializeObject(moves);
352
    }
353

    
354
///////////////////////////////////////////////////////////////////////////////////////////////////
355

    
356
  public void savePreferences(SharedPreferences.Editor editor)
357
    {
358

    
359
    }
360

    
361
///////////////////////////////////////////////////////////////////////////////////////////////////
362

    
363
  public void restorePreferences(SharedPreferences preferences)
364
    {
365

    
366
    }
367
  }
(7-7/7)