Project

General

Profile

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

magiccube / src / main / java / org / distorted / states / RubikStatePattern.java @ 6d4d56cb

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube 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
// Magic Cube 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 Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19

    
20
package org.distorted.states;
21

    
22
import android.content.SharedPreferences;
23
import android.os.Bundle;
24
import androidx.fragment.app.FragmentManager;
25
import android.util.DisplayMetrics;
26
import android.util.TypedValue;
27
import android.view.Gravity;
28
import android.view.LayoutInflater;
29
import android.view.View;
30
import android.widget.Button;
31
import android.widget.ImageButton;
32
import android.widget.LinearLayout;
33
import android.widget.TextView;
34

    
35
import org.distorted.dialogs.RubikDialogPattern;
36
import org.distorted.main.R;
37
import org.distorted.main.RubikActivity;
38
import org.distorted.main.RubikPreRender;
39
import org.distorted.objects.RubikObjectList;
40
import org.distorted.patterns.RubikPattern;
41
import org.distorted.patterns.RubikPatternList;
42

    
43
///////////////////////////////////////////////////////////////////////////////////////////////////
44

    
45
public class RubikStatePattern extends RubikStateAbstract
46
  {
47
  private TextView mText;
48
  private Button mBackButton;
49
  private ImageButton mPrevButton, mNextButton;
50
  private TextView mMovesText;
51
  private int mNumMoves;
52
  private int mPatternOrdinal, mCategory, mPattern;
53
  private float mButtonSize, mTitleSize;
54

    
55
///////////////////////////////////////////////////////////////////////////////////////////////////
56

    
57
  RubikStatePattern()
58
    {
59

    
60
    }
61

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

    
64
  void leaveState(RubikActivity act)
65
    {
66
    RubikStatePlay play = (RubikStatePlay)RubikState.PLAY.getStateClass();
67

    
68
    RubikObjectList object = RubikPatternList.getObject(mPatternOrdinal);
69
    int size = RubikPatternList.getSize(mPatternOrdinal);
70

    
71
    if( !play.setObjectAndSize(act,object,size) )
72
      {
73
      int objectPlay= play.getObject();
74
      int sizePlay  = play.getSize();
75

    
76
      act.changeObject(RubikObjectList.getObject(objectPlay),sizePlay, false);
77
      }
78
    }
79

    
80
///////////////////////////////////////////////////////////////////////////////////////////////////
81

    
82
  void enterState(final RubikActivity act)
83
    {
84
    float width = act.getScreenWidthInPixels();
85
    mButtonSize = width*RubikActivity.BUTTON_TEXT_SIZE;
86
    mTitleSize  = width*RubikActivity.TITLE_TEXT_SIZE;
87

    
88
    RubikStatePlay play = (RubikStatePlay)RubikState.PLAY.getStateClass();
89
    int obj  = play.getObject();
90
    int size = play.getSize();
91

    
92
    mPatternOrdinal = RubikPatternList.getOrdinal(obj,size);
93

    
94
    if( mPatternOrdinal<0 )
95
      {
96
      mPatternOrdinal = RubikObjectList.getSizeIndex(RubikStatePlay.DEF_OBJECT,RubikStatePlay.DEF_SIZE);
97
      }
98

    
99
    FragmentManager mana = act.getSupportFragmentManager();
100
    RubikDialogPattern diag = (RubikDialogPattern) mana.findFragmentByTag(RubikDialogPattern.getDialogTag());
101

    
102
    if( diag==null ) showDialog(mana);
103

    
104
    LayoutInflater inflater = act.getLayoutInflater();
105

    
106
    // TOP ////////////////////////////
107
    LinearLayout layoutTop = act.findViewById(R.id.upperBar);
108
    layoutTop.removeAllViews();
109
    mText = (TextView)inflater.inflate(R.layout.upper_pattern_text, null);
110
    mText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTitleSize);
111
    mText.setText(R.string.patterns);
112
    layoutTop.addView(mText);
113

    
114
    // BOT ////////////////////////////
115
    DisplayMetrics metrics = act.getResources().getDisplayMetrics();
116

    
117
    setupPrevButton(act,width);
118
    setupNextButton(act,width);
119
    setupTextView(act,width);
120

    
121
    setTrioState(false);
122

    
123
    LinearLayout layoutLeft = act.findViewById(R.id.mainBarLeft);
124
    layoutLeft.removeAllViews();
125
    layoutLeft.addView(mPrevButton);
126
    layoutLeft.addView(mMovesText);
127
    layoutLeft.addView(mNextButton);
128

    
129
    setupBackButton(act,width);
130

    
131
    LinearLayout layoutRight = act.findViewById(R.id.mainBarRight);
132
    layoutRight.removeAllViews();
133
    layoutRight.addView(mBackButton);
134
    }
135

    
136
///////////////////////////////////////////////////////////////////////////////////////////////////
137

    
138
  private void showDialog(FragmentManager manager)
139
    {
140
    RubikDialogPattern diag = new RubikDialogPattern();
141
    Bundle bundle = new Bundle();
142
    bundle.putInt("tab", mPatternOrdinal );
143
    diag.setArguments(bundle);
144
    diag.show( manager, RubikDialogPattern.getDialogTag() );
145
    }
146

    
147
///////////////////////////////////////////////////////////////////////////////////////////////////
148

    
149
  private void setTrioState(boolean enable)
150
    {
151
    int state = enable ? View.VISIBLE : View.INVISIBLE;
152

    
153
    if( mPrevButton!=null ) mPrevButton.setVisibility(state);
154
    if( mNextButton!=null ) mNextButton.setVisibility(state);
155
    if( mMovesText !=null ) mMovesText.setVisibility(state);
156
    }
157

    
158
///////////////////////////////////////////////////////////////////////////////////////////////////
159

    
160
  private void setupBackButton(final RubikActivity act, final float width)
161
    {
162
    int padding = (int)(width*RubikActivity.PADDING);
163
    int margin  = (int)(width*RubikActivity.MARGIN);
164

    
165
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
166
    params.topMargin    = margin;
167
    params.bottomMargin = margin;
168
    params.leftMargin   = margin;
169
    params.rightMargin  = margin;
170

    
171
    mBackButton = new Button(act);
172
    mBackButton.setLayoutParams(params);
173
    mBackButton.setPadding(padding,0,padding,0);
174
    mBackButton.setTextSize(TypedValue.COMPLEX_UNIT_PX, mButtonSize);
175
    mBackButton.setText(R.string.back);
176

    
177
    mBackButton.setOnClickListener( new View.OnClickListener()
178
      {
179
      @Override
180
      public void onClick(View v)
181
        {
182
        FragmentManager mana = act.getSupportFragmentManager();
183
        RubikDialogPattern diag = (RubikDialogPattern) mana.findFragmentByTag(RubikDialogPattern.getDialogTag());
184

    
185
        if( diag==null )
186
          {
187
          showDialog(mana);
188
          setTrioState(false);
189
          }
190
        else
191
          {
192
          diag.rememberState();
193
          diag.dismiss();
194
          RubikState.goBack(act);
195
          }
196
        }
197
      });
198
    }
199

    
200
///////////////////////////////////////////////////////////////////////////////////////////////////
201

    
202
  private void setupPrevButton(final RubikActivity act, final float width)
203
    {
204
    int padding = (int)(width*RubikActivity.PADDING);
205
    int margin  = (int)(width*RubikActivity.MARGIN);
206
    int icon = RubikActivity.getDrawable(R.drawable.ui_small_left,R.drawable.ui_medium_left, R.drawable.ui_big_left, R.drawable.ui_huge_left);
207

    
208
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
209
    params.topMargin    = margin;
210
    params.bottomMargin = margin;
211
    params.leftMargin   = margin;
212
    params.rightMargin  = margin;
213

    
214
    mPrevButton = new ImageButton(act);
215
    mPrevButton.setLayoutParams(params);
216
    mPrevButton.setPadding(padding,0,padding,0);
217
    mPrevButton.setImageResource(icon);
218

    
219
    mPrevButton.setOnClickListener( new View.OnClickListener()
220
      {
221
      @Override
222
      public void onClick(View v)
223
        {
224
        RubikPattern pattern = RubikPattern.getInstance();
225
        RubikPreRender pre = act.getPreRender();
226
        pattern.backMove( pre, mPatternOrdinal, mCategory, mPattern);
227
        int currMove = pattern.getCurMove(mPatternOrdinal, mCategory, mPattern);
228
        mMovesText.setText(act.getString(R.string.mo_placeholder,currMove,mNumMoves));
229
        }
230
      });
231
    }
232

    
233
///////////////////////////////////////////////////////////////////////////////////////////////////
234

    
235
  private void setupNextButton(final RubikActivity act, final float width)
236
    {
237
    int padding = (int)(width*RubikActivity.PADDING);
238
    int margin  = (int)(width*RubikActivity.MARGIN);
239
    int icon = RubikActivity.getDrawable(R.drawable.ui_small_right,R.drawable.ui_medium_right, R.drawable.ui_big_right, R.drawable.ui_huge_right);
240

    
241
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);
242
    params.topMargin    = margin;
243
    params.bottomMargin = margin;
244
    params.leftMargin   = margin;
245
    params.rightMargin  = margin;
246

    
247
    mNextButton = new ImageButton(act);
248
    mNextButton.setLayoutParams(params);
249
    mNextButton.setPadding(padding,0,padding,0);
250
    mNextButton.setImageResource(icon);
251

    
252
    mNextButton.setOnClickListener( new View.OnClickListener()
253
      {
254
      @Override
255
      public void onClick(View v)
256
        {
257
        RubikPattern pattern = RubikPattern.getInstance();
258
        RubikPreRender pre = act.getPreRender();
259
        pattern.makeMove( pre, mPatternOrdinal, mCategory, mPattern);
260
        int currMove = pattern.getCurMove(mPatternOrdinal, mCategory, mPattern);
261
        mMovesText.setText(act.getString(R.string.mo_placeholder,currMove,mNumMoves));
262
        }
263
      });
264
    }
265

    
266
///////////////////////////////////////////////////////////////////////////////////////////////////
267

    
268
  private void setupTextView(final RubikActivity act, final float width)
269
    {
270
    int padding = (int)(width*RubikActivity.PADDING);
271
    int margin  = (int)(width*RubikActivity.MARGIN);
272

    
273
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,2.0f);
274
    params.topMargin    = margin;
275
    params.bottomMargin = margin;
276
    params.leftMargin   = margin;
277
    params.rightMargin  = margin;
278

    
279
    mMovesText = new TextView(act);
280
    mMovesText.setTextSize(20);
281
    mMovesText.setLayoutParams(params);
282
    mMovesText.setPadding(padding,0,padding,0);
283
    mMovesText.setGravity(Gravity.CENTER);
284
    mMovesText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mButtonSize);
285
    mMovesText.setText(act.getString(R.string.mo_placeholder,0,0));
286
    }
287

    
288
///////////////////////////////////////////////////////////////////////////////////////////////////
289

    
290
  public void setPattern(final RubikActivity act, int ordinal, int category, int pattern)
291
    {
292
    mPatternOrdinal = ordinal;
293
    mCategory       = category;
294
    mPattern        = pattern;
295

    
296
    setTrioState(true);
297

    
298
    RubikPattern patt = RubikPattern.getInstance();
299
    String patternName = patt.getPatternName(ordinal,category,pattern);
300
    mText.setText(patternName);
301

    
302
    mNumMoves   = patt.getNumMoves(ordinal,category,pattern);
303
    int currMove= patt.getCurMove(ordinal,category,pattern);
304

    
305
    mMovesText.setText(act.getString(R.string.mo_placeholder,currMove,mNumMoves));
306
    }
307

    
308
///////////////////////////////////////////////////////////////////////////////////////////////////
309

    
310
  public void savePreferences(SharedPreferences.Editor editor)
311
    {
312

    
313
    }
314

    
315
///////////////////////////////////////////////////////////////////////////////////////////////////
316

    
317
  public void restorePreferences(SharedPreferences preferences)
318
    {
319

    
320
    }
321
  }
(4-4/9)