/*
 * Copyright (C) 2013 Thomas M. Alldread
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package va7ta.app.nimblesigsweepgen0r1;


import va7ta.app.nimblesigsweepgen0r1.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;


public class SetGen_B_FM_Dev extends Activity{

		private static final String TAG = "NimbleSig.SetGen_A_FM_Dev";
	    private static final boolean D = true;
	    
	    
		private Button mFM_DevHzB_SetButton;

		private float fmDevHz_Flt=0; 
		private int fmDevHz_Int=0; 
	    private String newFM_DevHzB_Str="0";
	    private String currentFM_DevHzB_Str="0";
		private float start_posCrs_Flt=0; 
		private int start_posCrs_Int=0; 
		private float lastFineCorrection=0;
		private float fineCorrection=0;
		private boolean fineBarAutoCentre=false;
		private boolean courseBarAutoAdj=false;
		
		
		@Override
		public void onCreate(Bundle icicle) {
	    super.onCreate(icicle);
	    	if(D) Log.e(TAG, "+++ SET GEN B FM DEVIATION +++");

	        Intent currentValIntent = getIntent();
	        if(currentValIntent.hasExtra("valFM_DevHzB")){
	            currentFM_DevHzB_Str = currentValIntent.getStringExtra("valFM_DevHzB");
	            currentFM_DevHzB_Str = stripSpaces(currentFM_DevHzB_Str);
	        }
	    	// Set up the window layout
	    	setContentView(R.layout.activity_nimble_sig_rfgen_set_fm_dev);
	        TextView FM_DevHzBValStr =(TextView) findViewById(R.id.fmDevHzValue);
	        FM_DevHzBValStr.setText(currentFM_DevHzB_Str);            
	    	TextView FM_DevHzBdjTitle = (TextView) findViewById(R.id.titleFM_Dev_Adjust); 
	    	FM_DevHzBdjTitle.setText("Generator 'B' FM Deviation - Hz.");
	    	
	    	
	        start_posCrs_Flt=Float.parseFloat(currentFM_DevHzB_Str);    //you need to give starting position value of SeekBar 
	        start_posCrs_Int=(int)start_posCrs_Flt; 
	        fmDevHz_Flt=start_posCrs_Flt; 
	        SeekBar crsFM_DevHzB_Bar=(SeekBar) findViewById(R.id.courseDevHzAdj_Bar); 
	        crsFM_DevHzB_Bar.setProgress(start_posCrs_Int); 
	        SeekBar medFM_DevHzB_Bar=(SeekBar) findViewById(R.id.medDevHzAdj_Bar); 
	        medFM_DevHzB_Bar.setProgress(2500); 
	        SeekBar fineFM_DevHzB_Bar=(SeekBar) findViewById(R.id.fineDevHzAdj_Bar); 
	        fineFM_DevHzB_Bar.setProgress(250); 
	        SeekBar extraFineFM_DevHzB_Bar=(SeekBar) findViewById(R.id.extraFineDevHzAdj_Bar); 
	        extraFineFM_DevHzB_Bar.setProgress(10); 

	        
	        crsFM_DevHzB_Bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

	            @Override 
	            public void onStopTrackingTouch(SeekBar seekBar) { 
	                // TODO Auto-generated method stub 
	/*
		            	if (fmDevHz_Flt >= 0){
		            		milliDegrees *= (int)1000;
		            	}
		            	if (fmDevHz_Flt < 0){
		            		milliDegrees = (int)(360-fmDevHz_Flt)*1000;
		            	}
		            	
		                newFM_DevHzB_mDeg = String.valueOf(milliDegrees);
//		            	sendMessage("pa"+newFM_DevHzB_mDeg);
		*/
	            	lastFineCorrection = 0;
//		                SeekBar fineFM_DevHzB_Bar=(SeekBar) findViewById(R.id.fineDevHzAdj_Bar);
//		                fineFM_DevHzB_Bar.setProgress(2500);
	            } 

	            @Override 
	            public void onStartTrackingTouch(SeekBar seekBar) { 
	                // TODO Auto-generated method stub 

	            } 

	            @Override 
	            public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { 
	                // TODO Auto-generated method stub 
	            	if(!courseBarAutoAdj){//skip if adjustment from finer seek bars
		            	// To convert it as fmDevHz_Flt value 
		                fmDevHz_Flt=((int)progress/1000)*1000; 
		                newFM_DevHzB_Str = String.valueOf(fmDevHz_Flt);
		                upDateFM_DevHzBVal(fmDevHz_Flt);
	            	}else courseBarAutoAdj=false;
	            } 
	        }); 
	 
	        fineFM_DevHzB_Bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

	            @Override 
	            public void onStopTrackingTouch(SeekBar seekBar) { 
	                // TODO Auto-generated method stub 
	                // To convert it as fmDevHz_Flt value 
	                SeekBar crsFM_DevHzB_Bar=(SeekBar) findViewById(R.id.courseDevHzAdj_Bar);
	                int newProgress = (int)fmDevHz_Flt;
	                courseBarAutoAdj=true;
	                crsFM_DevHzB_Bar.setProgress(newProgress);
	                fineBarAutoCentre=true;
	                SeekBar fineFM_DevHzB_Bar=(SeekBar) findViewById(R.id.fineDevHzAdj_Bar);
	                fineFM_DevHzB_Bar.setProgress(2500);
	                lastFineCorrection = 0;
	                
	            } 

	            @Override 
	            public void onStartTrackingTouch(SeekBar seekBar) { 
	                // TODO Auto-generated method stub 

	            } 

	            @Override 
	            public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { 
	                // TODO Auto-generated method stub 
	            	if(!fineBarAutoCentre){
	            		fineCorrection=progress-2500;
	            		fineCorrection=((int)fineCorrection/100)*100;
		                fmDevHz_Flt += (fineCorrection-lastFineCorrection);            
		                lastFineCorrection = fineCorrection;
		                float test1 = fmDevHz_Flt;
		                newFM_DevHzB_Str = String.valueOf(fmDevHz_Flt);
		                upDateFM_DevHzBVal(fmDevHz_Flt);
	            	}
	                else fineBarAutoCentre = false;
	            } 
	        }); 
	 
	        medFM_DevHzB_Bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

	            @Override 
	            public void onStopTrackingTouch(SeekBar seekBar) { 
	                // TODO Auto-generated method stub 
	                // To convert it as fmDevHz_Flt value 
	                SeekBar crsFM_DevHzB_Bar=(SeekBar) findViewById(R.id.courseDevHzAdj_Bar);
	                int newProgress = (int)fmDevHz_Flt;
	                courseBarAutoAdj=true;
	                crsFM_DevHzB_Bar.setProgress(newProgress);
	                fineBarAutoCentre=true;
	                SeekBar fineFM_DevHzB_Bar=(SeekBar) findViewById(R.id.medDevHzAdj_Bar);
	                fineFM_DevHzB_Bar.setProgress(2500);
	                lastFineCorrection = 0;
	                
	            } 

	            @Override 
	            public void onStartTrackingTouch(SeekBar seekBar) { 
	                // TODO Auto-generated method stub 

	            } 

	            @Override 
	            public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { 
	                // TODO Auto-generated method stub 
	            	if(!fineBarAutoCentre){
	            		fineCorrection=progress-2500;
	            		fineCorrection=((int)fineCorrection/100)*100;
	            		fmDevHz_Flt=((int)((fmDevHz_Flt+.5)/100))*100;
		                fmDevHz_Flt += (fineCorrection-lastFineCorrection);            
		                lastFineCorrection = fineCorrection;
		                float test1 = fmDevHz_Flt;
		                newFM_DevHzB_Str = String.valueOf(fmDevHz_Flt);
		                upDateFM_DevHzBVal(fmDevHz_Flt);
	            	}
	                else fineBarAutoCentre = false;
	            } 
	        }); //medFM_DevHzB_Bar
	 
	        fineFM_DevHzB_Bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

	            @Override 
	            public void onStopTrackingTouch(SeekBar seekBar) { 
	                // TODO Auto-generated method stub 
	                // To convert it as fmDevHz_Flt value 
	                SeekBar crsFM_DevHzB_Bar=(SeekBar) findViewById(R.id.courseDevHzAdj_Bar);
	                int newProgress = (int)fmDevHz_Flt;
	                courseBarAutoAdj=true;
	                crsFM_DevHzB_Bar.setProgress(newProgress);
	                fineBarAutoCentre=true;
	                SeekBar fineFM_DevHzB_Bar=(SeekBar) findViewById(R.id.fineDevHzAdj_Bar);
	                fineFM_DevHzB_Bar.setProgress(250);
	                lastFineCorrection = 0;
	                
	            } 

	            @Override 
	            public void onStartTrackingTouch(SeekBar seekBar) { 
	                // TODO Auto-generated method stub 

	            } 

	            @Override 
	            public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { 
	                // TODO Auto-generated method stub 
	            	if(!fineBarAutoCentre){
	            		fineCorrection=progress-250;
	            		fineCorrection=((int)fineCorrection/10)*10;
	            		fmDevHz_Flt=((int)((fmDevHz_Flt+.5)/10))*10;
		                fmDevHz_Flt += (fineCorrection-lastFineCorrection);            
		                lastFineCorrection = fineCorrection;
		                float test1 = fmDevHz_Flt;
		                newFM_DevHzB_Str = String.valueOf(fmDevHz_Flt);
		                upDateFM_DevHzBVal(fmDevHz_Flt);
	            	}
	                else fineBarAutoCentre = false;
	            } 
	        }); //fineFM_DevHzB_Bar
	 
	        extraFineFM_DevHzB_Bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

	            @Override 
	            public void onStopTrackingTouch(SeekBar seekBar) { 
	                // TODO Auto-generated method stub 
	                // To convert it as fmDevHz_Flt value 
	                SeekBar crsFM_DevHzB_Bar=(SeekBar) findViewById(R.id.courseDevHzAdj_Bar);
	                int newProgress = (int)fmDevHz_Flt;
	                courseBarAutoAdj=true;
	                crsFM_DevHzB_Bar.setProgress(newProgress);
	                fineBarAutoCentre=true;
	                SeekBar fineFM_DevHzB_Bar=(SeekBar) findViewById(R.id.extraFineDevHzAdj_Bar);
	                fineFM_DevHzB_Bar.setProgress(10);
	                lastFineCorrection = 0;
	            } 

	            @Override 
	            public void onStartTrackingTouch(SeekBar seekBar) { 
	                // TODO Auto-generated method stub 

	            } 

	            @Override 
	            public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { 
	                // TODO Auto-generated method stub 
	            	if(!fineBarAutoCentre){
		            	if(!fineBarAutoCentre){
		            		fineCorrection=progress-10;
			                fmDevHz_Flt += (fineCorrection-lastFineCorrection);            
			                lastFineCorrection = fineCorrection;
			                float test1 = fmDevHz_Flt;
			                newFM_DevHzB_Str = String.valueOf(fmDevHz_Flt);
			                upDateFM_DevHzBVal(fmDevHz_Flt);
		            	}
	            	}
	                else fineBarAutoCentre = false;	           
	            }
	        }); //extraFineFM_DevHzB_Bar
	        
	 
	    }//onCreate 
		
		
	    public void upDateFM_DevHzBVal(float val) {
	        TextView FM_DevHzB_ValLabel = (TextView) findViewById(R.id.fmDevHzValue);
	        fmDevHz_Int = (int)(val);
	        FM_DevHzB_ValLabel.setText(String.valueOf(fmDevHz_Int));
	    }

	    @Override
	    public synchronized void onResume() {
	        super.onResume();
	    	if(D) Log.e(TAG, "+++ ON RESUME +++");
	       

	        //VFO A fmDevHz SET button with a listener that for click events
	        mFM_DevHzB_SetButton = (Button) findViewById(R.id.updateDevHzBtn);
	        mFM_DevHzB_SetButton.setOnClickListener(new OnClickListener() {
	        	public void onClick(View v) {
	                TextView FM_DevHzB_Value=(TextView) findViewById(R.id.fmDevHzValue);
	                newFM_DevHzB_Str = FM_DevHzB_Value.getText().toString();
	            	Intent newFM_DevHzB_Val=new Intent(getApplicationContext(), NimbleSigSweepGenMain.class);
	            	newFM_DevHzB_Val.putExtra("valFM_DevHzB",newFM_DevHzB_Str);
	        		finish ();
	        	}
	        });
	        
	    }//onResume
	    
	    private String stripSpaces(String str){
	        int l=str.length();
	        int i=0;
	        char tempChr[]=str.toCharArray();
	        String tempStr="";
	        while(i<l){
	        	if(tempChr[i] !=' '){
	        		tempStr+=String.valueOf(tempChr[i]);
	        	}
	        	i++;
	        }
	    	return tempStr;
	    }

	    @Override
	    public void finish() {
	      // Prepare data intent 
	      Intent newFM_DevHzB_ValIntent = new Intent();
	      newFM_DevHzB_ValIntent.putExtra("valFM_DevHzB", newFM_DevHzB_Str);
	      // Activity finished ok, return the data
	      setResult(RESULT_OK, newFM_DevHzB_ValIntent);
	      super.finish();
	    } 
	   
	    @Override
	    public synchronized void onPause() {
	        super.onPause();
//			        if(D) Log.e(TAG, "- ON PAUSE -");
	    }

	    @Override
	    public void onStop() {
	        super.onStop();
//			        if(D) Log.e(TAG, "-- ON STOP --");
	    }

	    @Override
	    public void onDestroy() {
	        super.onDestroy();
//			        if(D) Log.e(TAG, "--- ON DESTROY ---");
	    }


}

