Project

General

Profile

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

magiccube / src / main / java / org / distorted / main / MainObjectPopup.java @ e9245b7b

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.main;
11

    
12
import static android.view.View.GONE;
13

    
14
import android.app.Activity;
15
import android.content.Context;
16
import android.util.TypedValue;
17
import android.view.Gravity;
18
import android.view.LayoutInflater;
19
import android.view.View;
20
import android.widget.Button;
21
import android.widget.LinearLayout;
22
import android.widget.PopupWindow;
23
import android.widget.TextView;
24

    
25
import org.distorted.objects.RubikObject;
26
import org.distorted.objects.RubikObjectList;
27

    
28
///////////////////////////////////////////////////////////////////////////////////////////////////
29

    
30
public class MainObjectPopup
31
  {
32
  private static final float MENU_TEXT_SIZE= 0.024f;
33
  private static final float MENU_MARGIN   = 0.008f;
34
  private static final float BUTTON_HEIGHT = 0.150f;
35
  private static final float MENU_WIDTH    = 0.550f;
36

    
37
  public static final int LEVELS_SHOWN = 8;
38

    
39
  private final PopupWindow mPopup;
40
  private final int mMenuTextSize;
41

    
42
///////////////////////////////////////////////////////////////////////////////////////////////////
43

    
44
  MainObjectPopup(MainActivity act, int ordinal, int width, int height)
45
    {
46
    LayoutInflater layoutInflater = (LayoutInflater)act.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
47
    final View layout = layoutInflater.inflate(R.layout.object_popup, null);
48
    mPopup = new PopupWindow(act);
49
    mPopup.setContentView(layout);
50
    mPopup.setFocusable(true);
51

    
52
    mMenuTextSize = (int)(height*MENU_TEXT_SIZE);
53
    int padding   = (int)(height*MENU_MARGIN);
54
    int marginH   = padding/2;
55
    int marginV   =-padding/4;
56
    layout.setPadding(padding,0,padding,0);
57
    int levelHeight = (int)(width*BUTTON_HEIGHT);
58

    
59
    RubikObject object = RubikObjectList.getObject(ordinal);
60

    
61
    Button b1 = layout.findViewById(R.id.objectSolver);
62

    
63
    if( object!=null && object.hasSolver() )
64
      {
65
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,levelHeight);
66
      params.setMargins(marginH,marginV,marginH,marginV);
67
      b1.setLayoutParams(params);
68
      b1.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
69
      b1.setOnClickListener(new View.OnClickListener()
70
        {
71
        @Override
72
        public void onClick(View v)
73
          {
74
          mPopup.dismiss();
75
          act.switchToSolver(ordinal);
76
          }
77
        });
78
      }
79
    else b1.setVisibility(GONE);
80

    
81
    Button b2 = layout.findViewById(R.id.objectPattern);
82

    
83
    if( object!=null && object.hasPatterns() )
84
      {
85
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,levelHeight);
86
      params.setMargins(marginH,marginV,marginH,marginV);
87
      b2.setLayoutParams(params);
88
      b2.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
89
      b2.setOnClickListener(new View.OnClickListener()
90
        {
91
        @Override
92
        public void onClick(View v)
93
          {
94
          mPopup.dismiss();
95
          act.switchToPattern(ordinal);
96
          }
97
        });
98
      }
99
    else b2.setVisibility(GONE);
100

    
101
    Button b3 = layout.findViewById(R.id.objectTutorial);
102

    
103
    if( object!=null && object.hasExtras() )
104
      {
105
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,levelHeight);
106
      params.setMargins(marginH,marginV,marginH,marginV);
107
      b3.setLayoutParams(params);
108
      b3.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
109
      b3.setOnClickListener(new View.OnClickListener()
110
        {
111
        @Override
112
        public void onClick(View v)
113
          {
114

    
115
          }
116
        });
117
      }
118
    else b3.setVisibility(GONE);
119

    
120
    Button b4 = layout.findViewById(R.id.objectInfo);
121

    
122
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,levelHeight);
123
    params.setMargins(marginH,marginV,marginH,marginV);
124
    b4.setLayoutParams(params);
125
    b4.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
126
    b4.setOnClickListener( new View.OnClickListener()
127
      {
128
      @Override
129
      public void onClick(View v)
130
        {
131
        mPopup.dismiss();
132
        act.switchToConfig(ordinal);
133
        }
134
      });
135

    
136
    TextView levels = layout.findViewById(R.id.objectLevels);
137
    levels.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
138

    
139
    setupLevelButtons(act,object,layout,width,padding,marginH);
140
    }
141

    
142
///////////////////////////////////////////////////////////////////////////////////////////////////
143

    
144
  private void setupLevelButtons(Activity act, RubikObject object, View layout, int width,int padding, int margin)
145
    {
146
    int layoutWidth = (int)(width*MENU_WIDTH);
147
    int levelHeight = (int)(width*BUTTON_HEIGHT);
148
    int levelWidth  = (layoutWidth-4*padding)/3;
149

    
150
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(levelWidth,levelHeight);
151
    params.setMargins(margin,-margin,margin,-margin);
152

    
153
    Button[] level = new Button[LEVELS_SHOWN+1];
154

    
155
    level[0] = layout.findViewById(R.id.level0);
156
    level[1] = layout.findViewById(R.id.level1);
157
    level[2] = layout.findViewById(R.id.level2);
158
    level[3] = layout.findViewById(R.id.level3);
159
    level[4] = layout.findViewById(R.id.level4);
160
    level[5] = layout.findViewById(R.id.level5);
161
    level[6] = layout.findViewById(R.id.level6);
162
    level[7] = layout.findViewById(R.id.level7);
163
    level[8] = layout.findViewById(R.id.levelM);
164

    
165
    int numScramble = object==null ? 1 : object.getNumScramble();
166
    int min = Math.min(numScramble,LEVELS_SHOWN);
167

    
168
    if( numScramble>=1 && numScramble<=7 )
169
      {
170
      level[numScramble].setText(R.string.levelM);
171
      for(int i=numScramble+1; i<=8; i++) level[i].setVisibility(GONE);
172
      }
173

    
174
    for(int i=0; i<=min; i++)
175
      {
176
      final int ii = i;
177
      level[i].setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
178
      level[i].setLayoutParams(params);
179
      level[i].setPadding(0,0,0,0);
180
      level[i].setOnClickListener( new View.OnClickListener()
181
        {
182
        @Override
183
        public void onClick(View v)
184
          {
185

    
186
          }
187
        });
188
      }
189
    }
190

    
191
///////////////////////////////////////////////////////////////////////////////////////////////////
192

    
193
  void show(View v)
194
    {
195
    View popupView = mPopup.getContentView();
196
    popupView.setSystemUiVisibility(MainActivity.FLAGS);
197
    mPopup.showAtLocation(v, Gravity.CENTER, 0, 0);
198
    }
199
  }
200

    
(2-2/3)