Project

General

Profile

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

magiccube / src / main / java / org / distorted / patternui / ScreenPattern.java @ 4c6cbfa2

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.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
import org.distorted.dialogs.RubikDialogPattern;
21
import org.distorted.helpers.TransparentButton;
22
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
  private TransparentImageButton mPrevPatt, mNextPatt;
33
  private TransparentButton mTextButton;
34
  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

    
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

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

    
103
    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

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

    
114
    setupBackButton(act);
115

    
116
    layoutBR.addView(mBackButton);
117

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

    
123
///////////////////////////////////////////////////////////////////////////////////////////////////
124

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

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

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

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

    
358
    }
359

    
360
///////////////////////////////////////////////////////////////////////////////////////////////////
361

    
362
  public void restorePreferences(SharedPreferences preferences)
363
    {
364

    
365
    }
366
  }
(7-7/7)