package com.Agilent_34410A_Temp;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Color;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

import com.Agilent_34410A_Temp.R;
import com.agilent.android.io.AAIoException;
import com.agilent.android.io.IO;

import java.util.ArrayList;
import java.util.List;
import android.widget.ListView;
import android.widget.ArrayAdapter;

/** Hlavni metoda aplikace **/
public class Agilent_34410A_Temp extends Activity {
	
	/** zavedeni promennych a hodnot poli **/ 
	private Button btnPripoj ;
	private Button btnGraf ;
	private Button btnOdeslat;
	private TextView txtInfo;
	private TextView txtPoints;
	private TextView txtInfo2;
	private IO pripojeni = null;
	private EditText etxtIP ;
	private EditText etxtprompt ;
	
	private String ipAddresa ="";
	private String idn_pristroje ="";
	private String prikaz ="";
	private String odpoved ="";
	private String points = "";
	
	private TabHost MyTabHost;
	private TabHost.TabSpec MyTabSpec;
	
	List<String> li;
	ListView list;
	
    /** Vyvolani metody při spusteni aplikace **/
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        
        /** nastaveni tridy a metody zalozek **/
		MyTabHost = (TabHost) findViewById(R.id.tabhost);
		MyTabHost.setup();
		
		MyTabSpec = MyTabHost.newTabSpec("tag1");
		MyTabSpec.setContent(R.id.zalozka1);
		MyTabSpec.setIndicator("Připojení");
		MyTabHost.addTab(MyTabSpec);
		
		MyTabSpec = MyTabHost.newTabSpec("tag2");
		MyTabSpec.setContent(R.id.zalozka2);
		MyTabSpec.setIndicator("Prompt");
		MyTabHost.addTab(MyTabSpec);
		/** konec nastaveni zalozek**/	
		
        /** propojeni promennych s prvky a jejich nastaveni **/
        etxtIP = (EditText)findViewById(R.id.etxtIP);
        etxtprompt = (EditText)findViewById(R.id.etxtprompt);
        txtInfo = (TextView)findViewById(R.id.txtInfo);	
        txtInfo.setVisibility(0);
        txtInfo2 = (TextView)findViewById(R.id.txtInfo2);
		btnPripoj = (Button) findViewById(R.id.btnPripoj);
		btnOdeslat = (Button) findViewById(R.id.btnOdeslat);
		btnOdeslat.setEnabled(false);
		btnGraf = (Button) findViewById(R.id.btnGraf);
		btnGraf.setEnabled(false);
		txtPoints = (TextView)findViewById(R.id.txtPoints);
		txtPoints.setText("Rozlišení: 100");
		
		li=new ArrayList<String>();
        list=(ListView)findViewById(R.id.listview_Last_Command);
        add();

		/** metoda pro tlacitko pripoj **/
		btnPripoj.setOnClickListener(new View.OnClickListener()
		{
			@Override
			public void onClick(View v) 
			{
				ipAddresa = etxtIP.getText().toString();	/**Nacteni ip adresy z text pole */	
				
				idn_pristroje = Connect().toString();
				String [] info = idn_pristroje.split(",");
				
				txtInfo.setText("");
				if(ipAddresa.equals(""))
				{
					txtInfo.setTextColor(Color.RED);
					txtInfo.setText("Prosím, zadejte IP adresu přístroje.");
					txtInfo.setVisibility(1);
					txtInfo2.setTextColor(Color.RED);
					txtInfo2.setText("Prosím, zadejte IP adresu přístroje.");
					txtInfo2.setVisibility(1);
					btnGraf.setEnabled(false);
					btnOdeslat.setEnabled(false);
					etxtprompt.setEnabled(false);
					
				}
				else
				{
					if(idn_pristroje.equals(""))
					{	
						txtInfo.setTextColor(Color.RED);
						txtInfo.setText("Nelze se připojit k přístroji.");				
						txtInfo.setVisibility(1);
						txtInfo2.setTextColor(Color.RED);
						txtInfo2.setText("Nelze se připojit k přístroji.");
						txtInfo2.setVisibility(1);
						btnGraf.setEnabled(false);
						btnOdeslat.setEnabled(false);
						etxtprompt.setEnabled(false);
												
					}
					else
					{
						txtInfo.setTextColor(Color.WHITE);
						txtInfo.setText("Výrobce: " + String.valueOf(info[0]) + "\n\nModel: " + String.valueOf(info[1]) + "\n\nSériové číslo: " + String.valueOf(info[2]));			
						txtInfo.setVisibility(1);
						txtInfo2.setTextColor(Color.WHITE);
						txtInfo2.setText("Připojeno k: "+ String.valueOf(info[1]));
						txtInfo2.setVisibility(1);
						btnGraf.setEnabled(true);
						btnOdeslat.setEnabled(true);
						etxtprompt.setEnabled(true);
					
					}
				}
			}
        });
		
		txtPoints.setOnClickListener(new View.OnClickListener() 
		{

			@Override
			public void onClick(View v) {
				final String[] colors_array = {"100","250","500","1000","2000","5000"};
				AlertDialog.Builder builder = new AlertDialog.Builder(Agilent_34410A_Temp.this);
				builder.setTitle("Rozlišení");
		        builder.setItems(colors_array, new DialogInterface.OnClickListener() {
		           			public void onClick(DialogInterface dialog, int which) {
		           				
		           				txtPoints.setText("Rozlišení: " + colors_array[which]);
		           				txtPoints.setVisibility(1);
		           				points = colors_array[which];
		           				
		           				
		           				Toast.makeText(getApplicationContext(), colors_array[which],
		                    			Toast.LENGTH_LONG).show();
		           			}
		           		}).show();
		        
			}
			
		});
		
		
		btnGraf.setOnClickListener(new View.OnClickListener() 
		{
			@Override
			public void onClick(View v) 
			{ 
	            	Intent intent = new Intent(Agilent_34410A_Temp.this,Graf_Osciloskop.class);
	            	intent.putExtra("ipAdresa", ipAddresa);
	            	if (points.equals("")){
	            		intent.putExtra("points", "100");
	            	}
	            	else{
	            	intent.putExtra("points", points);
	            	}
	            	startActivity(intent);
			}
        });
		
		
		/** metoda pro tlacitko odeslat **/
		btnOdeslat.setOnClickListener(new View.OnClickListener() 
		{
			@Override
			public void onClick(View v) 
			{ 
				
				prikaz = "*IDN?";
				odpoved = Nastav_a_Zmer().toString();
				
				if (odpoved.equals("")){
					txtInfo.setTextColor(Color.RED);
					txtInfo.setText("Nelze se připojit k přístroji.");				
					txtInfo2.setText("Nelze se připojit k přístroji.");
					btnOdeslat.setEnabled(false);
					btnGraf.setEnabled(false);
					etxtprompt.setEnabled(false);
					}
				else{
				
					prikaz = etxtprompt.getText().toString();
					if (prikaz.equals("")){
						Toast.makeText(getApplicationContext(), "Musíte zadat příkaz.",
				    	Toast.LENGTH_LONG).show();
					}
					else{
						li.add(prikaz);
						etxtprompt.setText(null);
						add();
				
						odpoved = Nastav_a_Zmer().toString();
						if(odpoved != "")
							{
							li.add(odpoved);
							add();
							}
					}
				}
			}
        });
		
    }
    
	private String Connect()
	{
		StringBuffer odpoved = new StringBuffer();
		try 
		{
			
			pripojeni = new IO();
			pripojeni.openWithAddress(ipAddresa, 5025);
			pripojeni.print("*IDN?");								/**  *IDN = AGILENT TECHNOLOGIES,34410A,<Serial Number>,**/
			odpoved = new StringBuffer();
			pripojeni.scan(odpoved);

		}
		catch (AAIoException ex)
		{

			return odpoved.toString();
		}
		catch (Exception ex)
		{
	
			return odpoved.toString();
		}
		finally 
		{ 
			if (pripojeni != null)
				pripojeni.close();
		}

		return odpoved.toString();
	}
	
	private String Nastav_a_Zmer()
	{
		StringBuffer data = new StringBuffer();
		try
		{	
			pripojeni.scanTimeout = 250000;
			pripojeni = new IO();
			pripojeni.openWithAddress(ipAddresa, 5025);			
			pripojeni.print(prikaz);
			data = new StringBuffer();
			pripojeni.scan(data);
		}
		catch(AAIoException ex)
		{
			return data.toString();
		}
		catch (Exception ex)
		{
			return data.toString();
		}
		finally 
		{ 
			if (pripojeni != null)
				pripojeni.close();
		}
		return data.toString();
	}
	
	 public void add()
	    {
	    	ArrayAdapter<String> adp=new ArrayAdapter<String> 
			(getBaseContext(),R.layout.list,R.id.label,li);
	    	list.setAdapter(adp);
	 
	    }
	
}