package com.brejza.matt.habmodem;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import com.brejza.matt.habmodem.Payload;
import ukhas.TelemetryConfig;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.LinearLayout;
public class GraphsFragment extends DialogFragment {
List<String> activePayloads = new ArrayList<String>();
boolean[] selected;
View v;
ConcurrentHashMap<String,Payload> _data;
LineGraph line;
int id_counter = 0x2d065000;
View viewGraph;
String startupPayload = "";
public void onAttach(Activity activity) {
super.onAttach(activity);
// mListener = (NoticeDialogListener) activity;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
v = inflater.inflate(R.layout.fragment_graphs, null);
builder.setTitle(R.string.dialog_graphs_title);
builder.setView(v);
builder.setPositiveButton(R.string.accept, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// FIRE ZE MISSILES!
// mListener.onDialogPositiveClick(LocationSelectFragment.this, enPos, enChase);
}
});
List<String> fields = new ArrayList<String>();
fields.add("altitude");
for (int i = 0; i < activePayloads.size(); i++)
{
String call = activePayloads.get(i).toUpperCase();
//get a list of fields that can be displayed for this payload
if (_data.get(call).telemetryConfig != null){
for (int j = 0; j < _data.get(call).telemetryConfig.getTotalFields(); j++){
TelemetryConfig.DataType dt = _data.get(call).telemetryConfig.getFieldDataType(j);
if (dt == TelemetryConfig.DataType.FLOAT || dt == TelemetryConfig.DataType.INT){
String f = _data.get(call).telemetryConfig.getFieldName(j);
if (!fields.contains(f))
fields.add(f);
}
}
}
LinearLayout ll = (LinearLayout)v.findViewById(R.id.llGraphsPayloads);
CheckBox ck = new CheckBox(v.getContext());
ck.setText(activePayloads.get(i));
if (activePayloads.get(i).equals(startupPayload)){
ck.setChecked(true);
if (line == null)
line = new LineGraph(_data);
line.addPayload(activePayloads.get(i));
}
ck.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (line == null)
line = new LineGraph(_data);
if (isChecked)
line.addPayload(buttonView.getText().toString());
else
line.clearPayload(buttonView.getText().toString());
drawGraph();
}
});
ll.addView(ck);
}
for (int i = 0; i < fields.size(); i++){
LinearLayout ll = (LinearLayout)v.findViewById(R.id.llGraphsFields);
CheckBox ck = new CheckBox(v.getContext());
ck.setText(fields.get(i));
if (fields.get(i).equals("altitude")){
ck.setChecked(true);
// if (line == null)
// line = new LineGraph(_data);
// line.addPayload(activePayloads.get(i));
}
ck.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (line == null)
line = new LineGraph(_data);
if (isChecked){
boolean suc = line.addField(buttonView.getText().toString());
if (!suc)
buttonView.setChecked(false);
}
else
line.clearField(buttonView.getText().toString());
drawGraph();
}
});
ll.addView(ck);
}
//ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item, _list_log);
if (line != null){
line.addField("altitude");
drawGraph();
}
// Create the AlertDialog object and return it
return builder.create();
}
public void setStartCall(String call)
{
startupPayload = call;
}
public void drawGraph()
{
//LinearLayout ll = (LinearLayout) getActivity().findViewById(R.id.llGraphsN);
//line = new LineGraph(_data);
//for (int i = 0; i < activePayloads.size(); i++)
// line.putPayload(activePayloads.get(i));
View vg = line.getView(getActivity());
if (vg == null)
return;
//v.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
LinearLayout ll = ((LinearLayout)v.findViewById(R.id.llGraphsN));
if (viewGraph == null)
ll.addView(vg);
else {
ll.removeView(viewGraph);
ll.addView(vg);
}
viewGraph = vg;
ll.invalidate();
}
public void setActivePayloads(List<String> ap, ConcurrentHashMap<String,Payload> data)
{
_data = data;
activePayloads = ap;
selected = new boolean[ap.size()];
}
}