package imseProc.arduinoComm.swt;

import oneLiners.OneLiners;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;

import imseProc.arduinoComm.ArduinoCommHanger;
import imseProc.core.IMSEProc;
import imseProc.core.ImagePipeController;
import imseProc.core.ImgPipe;

public class ArduinoCommSWTControl implements ImagePipeController {
	private Group swtGroup;
	
	private ArduinoCommHanger proc;
	
	
	private SerialSWTGroup serialGroup;
	private MotorSWTGroup motorGroup;
	private StaticsSWTGroup staticsGroup;
	private SequenceSWTGroup sequenceGroup;
	
	public ArduinoCommSWTControl(ArduinoCommHanger proc, Composite parent, int style) {
			this.proc = proc;
			
			swtGroup = new Group(parent, style);
			swtGroup.setText("Arduino Comm");
			swtGroup.setLayout(new GridLayout(1, false));

			serialGroup = new SerialSWTGroup(swtGroup, proc);
			motorGroup = new MotorSWTGroup(swtGroup, proc);
			staticsGroup = new StaticsSWTGroup(swtGroup, proc);
			sequenceGroup = new SequenceSWTGroup(swtGroup, proc);

	}
	
	@Override
	public void generalControllerUpdate() {
		IMSEProc.ensureFinalSWTUpdate(swtGroup.getDisplay(), this, new Runnable() {
			@Override
			public void run() {
				serialGroup.doUpdate();
				motorGroup.doUpdate();
				staticsGroup.doUpdate();
				sequenceGroup.doUpdate();
			}
		});
		
	}

	@Override
	public void destroy() {
		proc.destroy();
	}

	@Override
	public ImgPipe getPipe() { return proc;	}

	@Override
	public Object getInterfacingObject() { return swtGroup; }

	public MotorSWTGroup getMotorSWTControl() { return motorGroup; }

	
}
