/*
    ------------------------------------------------------------------

    This file is part of the Open Ephys GUI
    Copyright (C) 2012 Open Ephys

    ------------------------------------------------------------------

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

#include "MergerEditor.h"
#include "../Utilities/Merger.h"

// PipelineSelectorButton::PipelineSelectorButton()
// 	: DrawableButton (T("Selector"), DrawableButton::ImageFitted)
// {
// 	DrawablePath normal, over, down;

// 	    Path p;
//         p.addTriangle (0.0f, 0.0f, 0.0f, 20.0f, 18.0f, 10.0f);
//         normal.setPath (p);
//         normal.setFill (Colours::lightgrey);
//         normal.setStrokeThickness (0.0f);

//         over.setPath (p);
//         over.setFill (Colours::black);
//         over.setStrokeFill (Colours::black);
//         over.setStrokeThickness (5.0f);

//         setImages (&normal, &over, &over);
//         setBackgroundColours(Colours::darkgrey, Colours::purple);
//         setClickingTogglesState (true);
//         setTooltip ("Toggle a state.");

// }

// PipelineSelectorButton::~PipelineSelectorButton()
// {
// }

MergerEditor::MergerEditor (GenericProcessor* parentNode) 
	: GenericEditor(parentNode)

{
	desiredWidth = 90;

	pipelineSelectorA = new ImageButton("Pipeline A");

	Image normalImageA = ImageCache::getFromMemory (BinaryData::MergerB01_png, BinaryData::MergerB01_pngSize);
	Image downImageA = ImageCache::getFromMemory (BinaryData::MergerA01_png, BinaryData::MergerA01_pngSize);
	Image normalImageB = ImageCache::getFromMemory (BinaryData::MergerA02_png, BinaryData::MergerA02_pngSize);
	Image downImageB = ImageCache::getFromMemory (BinaryData::MergerB02_png, BinaryData::MergerB02_pngSize);

	pipelineSelectorA->setImages(true, true, true,
								normalImageA, 1.0f, Colours::white.withAlpha(0.0f),
								normalImageA, 1.0f, Colours::black.withAlpha(0.0f),
								downImageA, 1.0f, Colours::white.withAlpha(0.0f));


	pipelineSelectorA->addListener(this);
	pipelineSelectorA->setBounds(-10,25,95,50);
	pipelineSelectorA->setToggleState(true,false);
	addAndMakeVisible(pipelineSelectorA);

	pipelineSelectorB = new ImageButton("Pipeline B");

	pipelineSelectorB->setImages(true, true, true,
								normalImageB, 1.0f, Colours::white.withAlpha(0.0f),
								normalImageB, 1.0f, Colours::black.withAlpha(0.0f),
								downImageB, 1.0f, Colours::white.withAlpha(0.0f));

	pipelineSelectorB->addListener(this);
	pipelineSelectorB->setBounds(-10,75,95,50);
	pipelineSelectorB->setToggleState(false,false);
	addAndMakeVisible(pipelineSelectorB);

}

MergerEditor::~MergerEditor()
{
	deleteAllChildren();
}

void MergerEditor::buttonClicked(Button* button)
{
	if (button == pipelineSelectorA)
	{
		pipelineSelectorA->setToggleState(true,false);
		pipelineSelectorB->setToggleState(false,false);
		Merger* processor = (Merger*) getProcessor();
		processor->switchIO(0);

	} else if (button == pipelineSelectorB) 
	{
		pipelineSelectorB->setToggleState(true,false);
		pipelineSelectorA->setToggleState(false,false);
		Merger* processor = (Merger*) getProcessor();
		processor->switchIO(1);
		
	}
}

void MergerEditor::switchSource(int source)
{
	if (source == 0)
	{
		pipelineSelectorA->setToggleState(true,false);
		pipelineSelectorB->setToggleState(false,false);
		Merger* processor = (Merger*) getProcessor();
		processor->switchIO(0);

	} else if (source == 1)
	{
		pipelineSelectorB->setToggleState(true,false);
		pipelineSelectorA->setToggleState(false,false);
		Merger* processor = (Merger*) getProcessor();
		processor->switchIO(1);
		
	}
}


void MergerEditor::switchSource()
{
	
	bool isBOn = pipelineSelectorB->getToggleState();
	bool isAOn = pipelineSelectorA->getToggleState();

	pipelineSelectorB->setToggleState(!isBOn,false);
	pipelineSelectorA->setToggleState(!isAOn,false);

	Merger* processor = (Merger*) getProcessor();
	processor->switchIO();

}