project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamlistAdapter.java
author Medo <smaxein@googlemail.com>
Sat, 18 Aug 2012 00:47:51 +0200
changeset 7508 763d3961400b
child 7582 714310efad8f
permissions -rw-r--r--
Hedgeroid: Frantic scrabbling toward the deadline - Added activities for weapon/scheme editors (unfinished) - Completed tablet version of netroom activity - Added map preview - Fixed default team files having the wrong names - Restructuring - Updated frontlib JNA bindings to respect the latest frontlib changes

package org.hedgewars.hedgeroid;

import java.util.Comparator;

import org.hedgewars.hedgeroid.R;
import org.hedgewars.hedgeroid.Datastructures.TeamInGame;
import org.hedgewars.hedgeroid.Datastructures.TeamIngameAttributes;
import org.hedgewars.hedgeroid.util.ObservableTreeMapAdapter;

import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;

public class TeamlistAdapter extends ObservableTreeMapAdapter<String, TeamInGame> {
	private boolean colorHogcountEnabled = false;
	private Listener listener;
	
	@Override
	protected Comparator<TeamInGame> getEntryOrder() {
		return TeamInGame.NAME_ORDER;
	}

	public void setColorHogcountEnabled(boolean colorHogcountEnabled) {
		this.colorHogcountEnabled = colorHogcountEnabled;
		notifyDataSetChanged();
	}
	
	public void setListener(Listener listener) {
		this.listener = listener;
	}
	
	public View getView(int position, View convertView, ViewGroup parent) {
		View v = convertView;
		if (v == null) {
			LayoutInflater vi = LayoutInflater.from(parent.getContext());
			v = vi.inflate(R.layout.listview_team, null);
		}

		TeamInGame team = getItem(position);
		TextView teamNameView = (TextView) v.findViewById(android.R.id.text1);
		ImageButton colorButton = (ImageButton) v.findViewById(R.id.colorButton);
		ImageButton hogCountButton = (ImageButton) v.findViewById(R.id.hogCountButton);
		
		teamNameView.setText(team.team.name);
		int teamImage;
		if(team.ingameAttribs.remoteDriven) {
			teamImage = R.drawable.team_net_by_level;
		} else {
			teamImage = R.drawable.team_local_by_level;
		}
		
		Drawable d = parent.getContext().getResources().getDrawable(teamImage).mutate();
		d.setLevel(team.team.hogs.get(0).level);
		teamNameView.setCompoundDrawablesWithIntrinsicBounds(d, null, null, null);
		hogCountButton.getDrawable().setLevel(team.ingameAttribs.hogCount);
		colorButton.setImageDrawable(new ColorDrawable(TeamIngameAttributes.TEAM_COLORS[team.ingameAttribs.colorIndex]));
		
		colorButton.setEnabled(colorHogcountEnabled);
		hogCountButton.setEnabled(colorHogcountEnabled);
		
		colorButton.setOnClickListener(new ButtonClickListener(team, Type.COLOR_BUTTON));
		hogCountButton.setOnClickListener(new ButtonClickListener(team, Type.HOGCOUNT_BUTTON));
		
		if(team.ingameAttribs.remoteDriven) {
			teamNameView.setClickable(false);
		} else {
			teamNameView.setOnClickListener(new ButtonClickListener(team, Type.TEAM_VIEW));
		}
		
		return v;
	}
	
	private static enum Type {COLOR_BUTTON, HOGCOUNT_BUTTON, TEAM_VIEW}
	private final class ButtonClickListener implements OnClickListener {
		private final TeamInGame team;
		private final Type type;
		
		public ButtonClickListener(TeamInGame team, Type type) {
			this.team = team;
			this.type = type;
		}
		
		public void onClick(View v) {
			if(listener != null) {
				switch(type) {
				case COLOR_BUTTON:
					listener.onColorClicked(team);
					break;
				case HOGCOUNT_BUTTON:
					listener.onHogcountClicked(team);
					break;
				case TEAM_VIEW:
					listener.onTeamClicked(team);
					break;
				default:
					throw new IllegalStateException();	
				}
			}
		}
	}
	
	public interface Listener {
		void onTeamClicked(TeamInGame team);
		void onColorClicked(TeamInGame team);
		void onHogcountClicked(TeamInGame team);
	}
}