|
1 package org.hedgewars.hedgeroid; |
|
2 |
|
3 import java.util.Comparator; |
|
4 |
|
5 import org.hedgewars.hedgeroid.R; |
|
6 import org.hedgewars.hedgeroid.Datastructures.TeamInGame; |
|
7 import org.hedgewars.hedgeroid.Datastructures.TeamIngameAttributes; |
|
8 import org.hedgewars.hedgeroid.util.ObservableTreeMapAdapter; |
|
9 |
|
10 import android.graphics.drawable.ColorDrawable; |
|
11 import android.graphics.drawable.Drawable; |
|
12 import android.view.LayoutInflater; |
|
13 import android.view.View; |
|
14 import android.view.View.OnClickListener; |
|
15 import android.view.ViewGroup; |
|
16 import android.widget.ImageButton; |
|
17 import android.widget.TextView; |
|
18 |
|
19 public class TeamlistAdapter extends ObservableTreeMapAdapter<String, TeamInGame> { |
|
20 private boolean colorHogcountEnabled = false; |
|
21 private Listener listener; |
|
22 |
|
23 @Override |
|
24 protected Comparator<TeamInGame> getEntryOrder() { |
|
25 return TeamInGame.NAME_ORDER; |
|
26 } |
|
27 |
|
28 public void setColorHogcountEnabled(boolean colorHogcountEnabled) { |
|
29 this.colorHogcountEnabled = colorHogcountEnabled; |
|
30 notifyDataSetChanged(); |
|
31 } |
|
32 |
|
33 public void setListener(Listener listener) { |
|
34 this.listener = listener; |
|
35 } |
|
36 |
|
37 public View getView(int position, View convertView, ViewGroup parent) { |
|
38 View v = convertView; |
|
39 if (v == null) { |
|
40 LayoutInflater vi = LayoutInflater.from(parent.getContext()); |
|
41 v = vi.inflate(R.layout.listview_team, null); |
|
42 } |
|
43 |
|
44 TeamInGame team = getItem(position); |
|
45 TextView teamNameView = (TextView) v.findViewById(android.R.id.text1); |
|
46 ImageButton colorButton = (ImageButton) v.findViewById(R.id.colorButton); |
|
47 ImageButton hogCountButton = (ImageButton) v.findViewById(R.id.hogCountButton); |
|
48 |
|
49 teamNameView.setText(team.team.name); |
|
50 int teamImage; |
|
51 if(team.ingameAttribs.remoteDriven) { |
|
52 teamImage = R.drawable.team_net_by_level; |
|
53 } else { |
|
54 teamImage = R.drawable.team_local_by_level; |
|
55 } |
|
56 |
|
57 Drawable d = parent.getContext().getResources().getDrawable(teamImage).mutate(); |
|
58 d.setLevel(team.team.hogs.get(0).level); |
|
59 teamNameView.setCompoundDrawablesWithIntrinsicBounds(d, null, null, null); |
|
60 hogCountButton.getDrawable().setLevel(team.ingameAttribs.hogCount); |
|
61 colorButton.setImageDrawable(new ColorDrawable(TeamIngameAttributes.TEAM_COLORS[team.ingameAttribs.colorIndex])); |
|
62 |
|
63 colorButton.setEnabled(colorHogcountEnabled); |
|
64 hogCountButton.setEnabled(colorHogcountEnabled); |
|
65 |
|
66 colorButton.setOnClickListener(new ButtonClickListener(team, Type.COLOR_BUTTON)); |
|
67 hogCountButton.setOnClickListener(new ButtonClickListener(team, Type.HOGCOUNT_BUTTON)); |
|
68 |
|
69 if(team.ingameAttribs.remoteDriven) { |
|
70 teamNameView.setClickable(false); |
|
71 } else { |
|
72 teamNameView.setOnClickListener(new ButtonClickListener(team, Type.TEAM_VIEW)); |
|
73 } |
|
74 |
|
75 return v; |
|
76 } |
|
77 |
|
78 private static enum Type {COLOR_BUTTON, HOGCOUNT_BUTTON, TEAM_VIEW} |
|
79 private final class ButtonClickListener implements OnClickListener { |
|
80 private final TeamInGame team; |
|
81 private final Type type; |
|
82 |
|
83 public ButtonClickListener(TeamInGame team, Type type) { |
|
84 this.team = team; |
|
85 this.type = type; |
|
86 } |
|
87 |
|
88 public void onClick(View v) { |
|
89 if(listener != null) { |
|
90 switch(type) { |
|
91 case COLOR_BUTTON: |
|
92 listener.onColorClicked(team); |
|
93 break; |
|
94 case HOGCOUNT_BUTTON: |
|
95 listener.onHogcountClicked(team); |
|
96 break; |
|
97 case TEAM_VIEW: |
|
98 listener.onTeamClicked(team); |
|
99 break; |
|
100 default: |
|
101 throw new IllegalStateException(); |
|
102 } |
|
103 } |
|
104 } |
|
105 } |
|
106 |
|
107 public interface Listener { |
|
108 void onTeamClicked(TeamInGame team); |
|
109 void onColorClicked(TeamInGame team); |
|
110 void onHogcountClicked(TeamInGame team); |
|
111 } |
|
112 } |