Project

General

Profile

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

magiccube / src / main / java / org / distorted / dialogs / RubikDialogPatternView.java @ e9245b7b

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 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.dialogs;
11

    
12
import android.content.Context;
13
import androidx.fragment.app.FragmentActivity;
14
import android.util.AttributeSet;
15
import android.view.View;
16
import android.widget.ExpandableListView;
17
import android.widget.FrameLayout;
18

    
19
import org.distorted.objectlib.main.ObjectControl;
20
import org.distorted.objectlib.patterns.RubikPattern;
21
import org.distorted.objectlib.patterns.RubikPatternList;
22

    
23
import org.distorted.main.R;
24
import org.distorted.main_old.RubikActivity;
25
import org.distorted.screens.ScreenList;
26
import org.distorted.screens.RubikScreenPattern;
27

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

    
30
public class RubikDialogPatternView extends FrameLayout
31
  {
32
  private ExpandableListView mListView;
33
  private RubikDialogPattern mDialog;
34
  private int mTab, mPos;
35
  private int mExpandedGroup;
36

    
37
///////////////////////////////////////////////////////////////////////////////////////////////////
38

    
39
  public RubikDialogPatternView(Context context, AttributeSet attrs, int defStyle)
40
    {
41
    super(context, attrs, defStyle);
42
    }
43

    
44
///////////////////////////////////////////////////////////////////////////////////////////////////
45

    
46
  public RubikDialogPatternView(Context context, AttributeSet attrs)
47
    {
48
    super(context, attrs);
49
    }
50

    
51
///////////////////////////////////////////////////////////////////////////////////////////////////
52

    
53
  public RubikDialogPatternView(FragmentActivity act, RubikDialogPattern dialog, int position)
54
    {
55
    super(act);
56

    
57
    final RubikActivity ract = (RubikActivity)getContext();
58
    final ObjectControl control = ract.getControl();
59

    
60
    mTab = position;
61
    mDialog = dialog;
62

    
63
    RubikPattern pattern = RubikPattern.getInstance();
64
    mExpandedGroup = pattern.recallExpanded(position);
65

    
66
    View tab = inflate( act, R.layout.dialog_pattern_tab, null);
67

    
68
    mListView = tab.findViewById(R.id.patternListView);
69
    RubikDialogPatternListAdapter listAdapter = new RubikDialogPatternListAdapter(act,mTab, ract.getScreenHeightInPixels());
70
    mListView.setAdapter(listAdapter);
71

    
72
    if( mExpandedGroup>=0 )
73
      {
74
      mListView.expandGroup(mExpandedGroup);
75
      }
76

    
77
    int visible = pattern.recallVisiblePos(mTab);
78
    mListView.setSelectionFromTop(visible,0);
79

    
80
    mListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener()
81
      {
82
      @Override
83
      public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id)
84
        {
85
        RubikPattern pattern = RubikPattern.getInstance();
86
        int[][] moves   = pattern.reInitialize(mTab, groupPosition, childPosition);
87
        int object = RubikPatternList.getObject(mTab);
88
        ract.changeIfDifferent(object,control);
89
        control.initializeObject(moves);
90

    
91
        ScreenList.switchScreen(ract, ScreenList.PATT);
92
        RubikScreenPattern state = (RubikScreenPattern) ScreenList.PATT.getScreenClass();
93
        state.setPattern(ract, mTab, groupPosition, childPosition);
94

    
95
        mDialog.rememberState();
96
        mDialog.dismiss();
97

    
98
        return false;
99
        }
100
      });
101

    
102
    mListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener()
103
      {
104
      @Override
105
      public void onGroupExpand(int groupPosition)
106
        {
107
        if(mExpandedGroup!=-1 && groupPosition!=mExpandedGroup)
108
          {
109
          mListView.collapseGroup(mExpandedGroup);
110
          }
111

    
112
        mExpandedGroup = groupPosition;
113
        }
114
      });
115

    
116
    addView(tab);
117
    }
118

    
119
///////////////////////////////////////////////////////////////////////////////////////////////////
120

    
121
  int getCurrentCategory()
122
    {
123
    return mPos;
124
    }
125

    
126
///////////////////////////////////////////////////////////////////////////////////////////////////
127

    
128
  int getCurrentVisiblePos()
129
    {
130
    return mListView.getFirstVisiblePosition();
131
    }
132

    
133
///////////////////////////////////////////////////////////////////////////////////////////////////
134

    
135
  int getExpanded()
136
    {
137
    return mExpandedGroup;
138
    }
139
  }
(15-15/32)