Project

General

Profile

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

magiccube / src / main / java / org / distorted / config / ConfigScreenPane.java @ d36d8517

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