Project

General

Profile

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

magiccube / src / main / java / org / distorted / config / ConfigScreenPane.java @ 68191e7d

1 74d088c3 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 9d51b9d6 Leszek Koltunski
// 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 74d088c3 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.config;
11
12 09cf2a36 Leszek Koltunski
import java.io.InputStream;
13
14 2e99ba6a Leszek Koltunski
import android.util.TypedValue;
15 2604be3b Leszek Koltunski
import android.widget.ImageView;
16 74d088c3 Leszek Koltunski
import android.widget.LinearLayout;
17 2e99ba6a Leszek Koltunski
import android.widget.RadioButton;
18
import android.widget.RadioGroup;
19 74d088c3 Leszek Koltunski
import android.widget.TextView;
20
21
import org.distorted.main.R;
22
import org.distorted.objectlib.json.JsonReader;
23 a7d8c3cd Leszek Koltunski
import org.distorted.objects.RubikObject;
24
import org.distorted.objects.RubikObjectList;
25 74d088c3 Leszek Koltunski
26 09cf2a36 Leszek Koltunski
import static org.distorted.objectlib.main.TwistyObject.MESH_NICE;
27
import static org.distorted.objectlib.main.TwistyObject.MESH_FAST;
28 74d088c3 Leszek Koltunski
29
///////////////////////////////////////////////////////////////////////////////////////////////////
30
31
public class ConfigScreenPane
32
{
33 2604be3b Leszek Koltunski
  private static final int[] IMAGES =
34
    {
35
    R.id.configDifficulty0,
36
    R.id.configDifficulty1,
37
    R.id.configDifficulty2,
38
    R.id.configDifficulty3,
39
    R.id.configDifficulty4
40
    };
41
42
  private static final int NUM_IMAGES = IMAGES.length;
43 5af2b7a9 Leszek Koltunski
  public  static final float PADDING_RATIO = 0.025f;
44 45516ed2 Leszek Koltunski
  private static final float TEXT_RATIO    = 0.042f;
45 2e99ba6a Leszek Koltunski
  private static final float RADIO_RATIO   = 0.900f;
46
47 923d267c Leszek Koltunski
  private int mObjectOrdinal;
48 f12e4de9 Leszek Koltunski
  private boolean mProgramatic;
49 923d267c Leszek Koltunski
50
///////////////////////////////////////////////////////////////////////////////////////////////////
51
52 f12e4de9 Leszek Koltunski
  private void switchMeshState(ConfigActivity act, int meshState)
53 923d267c Leszek Koltunski
    {
54 f12e4de9 Leszek Koltunski
    RubikObjectList.setMeshState(mObjectOrdinal,meshState);
55 09cf2a36 Leszek Koltunski
    RubikObject object = RubikObjectList.getObject(mObjectOrdinal);
56 d36d8517 Leszek Koltunski
    act.changeMeshState(object,mObjectOrdinal);
57 923d267c Leszek Koltunski
    }
58 74d088c3 Leszek Koltunski
59
///////////////////////////////////////////////////////////////////////////////////////////////////
60
61
  void updatePane(ConfigActivity act, int objectOrdinal)
62
    {
63 c826d83b Leszek Koltunski
    RubikObject object = RubikObjectList.getObject(objectOrdinal);
64 74d088c3 Leszek Koltunski
65 c826d83b Leszek Koltunski
    if( object!=null )
66
      {
67
      InputStream stream = object.getObjectStream(act);
68 923d267c Leszek Koltunski
69 c826d83b Leszek Koltunski
      mObjectOrdinal = objectOrdinal;
70
      JsonReader reader = JsonReader.getInstance();
71 c020555e Leszek Koltunski
      String name,author;
72
      int year, difficulty;
73
74
      try
75
        {
76
        reader.parseJsonFileMetadata(stream);
77
        name       = reader.getObjectName();
78
        author     = reader.getInventor();
79
        year       = reader.getYearOfInvention();
80
        difficulty = reader.getComplexity();
81
        }
82
      catch(Exception ex)
83
        {
84
        name = "?";
85
        author = "?";
86
        year = 0;
87
        difficulty = 0;
88
        }
89 74d088c3 Leszek Koltunski
90 c826d83b Leszek Koltunski
      String both = year>0 ? author+" "+year : author;
91 74d088c3 Leszek Koltunski
92 c826d83b Leszek Koltunski
      LinearLayout layout = act.findViewById(R.id.configLayout);
93
      TextView view = layout.findViewById(R.id.configDetailsName2);
94
      view.setText(name);
95
      view = layout.findViewById(R.id.configDetailsAuthor2);
96
      view.setText(both);
97 2604be3b Leszek Koltunski
98 c826d83b Leszek Koltunski
      if( difficulty<0          ) difficulty=0;
99
      if( difficulty>NUM_IMAGES ) difficulty=NUM_IMAGES;
100 2604be3b Leszek Koltunski
101 c826d83b Leszek Koltunski
      for(int i=0; i<NUM_IMAGES; i++)
102
        {
103
        ImageView image = layout.findViewById(IMAGES[i]);
104
        image.setImageResource( i==difficulty ? R.drawable.ui_difficulty_checked : R.drawable.ui_difficulty_unchecked );
105
        }
106 f12e4de9 Leszek Koltunski
107 c826d83b Leszek Koltunski
      int meshState = object.getMeshState();
108
      int id = meshState==MESH_NICE ? R.id.meshNice : R.id.meshSimple;
109
      RadioButton button = act.findViewById(id);
110 f12e4de9 Leszek Koltunski
111 c826d83b Leszek Koltunski
      mProgramatic = true;
112
      button.setChecked(true);
113
      mProgramatic = false;
114
      }
115 74d088c3 Leszek Koltunski
    }
116
117
///////////////////////////////////////////////////////////////////////////////////////////////////
118
119
  ConfigScreenPane(final ConfigActivity act, int objectOrdinal)
120
    {
121 5af2b7a9 Leszek Koltunski
    int width = act.getScreenWidthInPixels();
122
    float textSize = width*TEXT_RATIO;
123
    int padding = (int)(width*PADDING_RATIO);
124 2e99ba6a Leszek Koltunski
125 21efc7d7 Leszek Koltunski
    LinearLayout configLayout    = act.findViewById(R.id.configLayout);
126
    LinearLayout nameLayout      = configLayout.findViewById(R.id.configLayoutName);
127
    LinearLayout authorLayout    = configLayout.findViewById(R.id.configLayoutAuthor);
128
    LinearLayout difficultyLayout= configLayout.findViewById(R.id.configLayoutDifficulty);
129
    LinearLayout meshLayout      = configLayout.findViewById(R.id.configLayoutMesh);
130
131
    nameLayout.setPadding(padding,padding,padding,padding/2);
132
    authorLayout.setPadding(padding,padding/2,padding,padding/2);
133 2e99ba6a Leszek Koltunski
    difficultyLayout.setPadding(padding,padding/2,padding,padding/2);
134
    meshLayout.setPadding(padding,padding/2,padding,padding);
135
136 21efc7d7 Leszek Koltunski
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 1.00f);
137
    params.bottomMargin = 0;
138
    params.topMargin    = padding;
139
    params.leftMargin   = padding;
140
    params.rightMargin  = padding;
141 2e99ba6a Leszek Koltunski
142 21efc7d7 Leszek Koltunski
    nameLayout.setLayoutParams(params);
143
    authorLayout.setLayoutParams(params);
144
    difficultyLayout.setLayoutParams(params);
145
    meshLayout.setLayoutParams(params);
146 74d088c3 Leszek Koltunski
147
    TextView text;
148 21efc7d7 Leszek Koltunski
    text = nameLayout.findViewById(R.id.configDetailsName1);
149 2e99ba6a Leszek Koltunski
    text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
150 21efc7d7 Leszek Koltunski
    text = nameLayout.findViewById(R.id.configDetailsName2);
151 2e99ba6a Leszek Koltunski
    text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
152 21efc7d7 Leszek Koltunski
    text = authorLayout.findViewById(R.id.configDetailsAuthor1);
153 2e99ba6a Leszek Koltunski
    text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
154 21efc7d7 Leszek Koltunski
    text = authorLayout.findViewById(R.id.configDetailsAuthor2);
155 2e99ba6a Leszek Koltunski
    text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
156 cc48b275 Leszek Koltunski
    text = difficultyLayout.findViewById(R.id.configDifficultyTitle);
157 2e99ba6a Leszek Koltunski
    text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
158 cc48b275 Leszek Koltunski
    text = meshLayout.findViewById(R.id.configMeshTitle);
159 2e99ba6a Leszek Koltunski
    text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
160
161
    RadioButton butt1 = meshLayout.findViewById(R.id.meshNice);
162
    butt1.setTextSize(TypedValue.COMPLEX_UNIT_PX, RADIO_RATIO*textSize);
163
    RadioButton butt2 = meshLayout.findViewById(R.id.meshSimple);
164
    butt2.setTextSize(TypedValue.COMPLEX_UNIT_PX, RADIO_RATIO*textSize);
165
166
    LinearLayout layoutDiff = difficultyLayout.findViewById(R.id.configDifficultyLayout);
167
    layoutDiff.setPadding(padding,padding,padding,padding);
168
169
    RadioGroup radioGroup = meshLayout.findViewById(R.id.meshRadioGroup);
170
171
    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
172
      {
173
      @Override
174
      public void onCheckedChanged(RadioGroup group, int checkedId)
175
        {
176 f12e4de9 Leszek Koltunski
        if( !mProgramatic )
177
          {
178
          int meshState = checkedId == R.id.meshNice ? MESH_NICE : MESH_FAST;
179
          switchMeshState( act, meshState );
180
          }
181 2e99ba6a Leszek Koltunski
        }
182
      });
183 74d088c3 Leszek Koltunski
184
    updatePane(act,objectOrdinal);
185
    }
186
}