Blame qlo10k1/src/connectionwizard.cpp

Packit Service b98cfc
/*
Packit Service b98cfc
 *  qlo10k1 - GUI frontend for ld10k1
Packit Service b98cfc
 *
Packit Service b98cfc
 *  Copyright (c) 2004 by Peter Zubaj
Packit Service b98cfc
 *
Packit Service b98cfc
 *   This program is free software; you can redistribute it and/or modify
Packit Service b98cfc
 *   it under the terms of the GNU General Public License as published by
Packit Service b98cfc
 *   the Free Software Foundation; either version 2 of the License, or
Packit Service b98cfc
 *   (at your option) any later version.
Packit Service b98cfc
 *
Packit Service b98cfc
 *   This program is distributed in the hope that it will be useful,
Packit Service b98cfc
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service b98cfc
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service b98cfc
 *   GNU General Public License for more details.
Packit Service b98cfc
 *
Packit Service b98cfc
 *   You should have received a copy of the GNU General Public License
Packit Service b98cfc
 *   along with this program; if not, write to the Free Software
Packit Service b98cfc
 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit Service b98cfc
 *
Packit Service b98cfc
 */
Packit Service b98cfc
 
Packit Service b98cfc
#include <qradiobutton.h>
Packit Service b98cfc
#include <qpushbutton.h>
Packit Service b98cfc
#include <qcheckbox.h>
Packit Service b98cfc
#include <qlistbox.h>
Packit Service b98cfc
Packit Service b98cfc
#include "structure_patch.h"
Packit Service b98cfc
#include "structure_io.h"
Packit Service b98cfc
#include "connectionwizard.h"
Packit Service b98cfc
Packit Service b98cfc
ConnectionWizard::ConnectionWizard(bool o, StrGlobal *g, RouteInfo *r)
Packit Service b98cfc
	: ConnectionWizardBase()
Packit Service b98cfc
{
Packit Service b98cfc
	out = o;
Packit Service b98cfc
	global = g;
Packit Service b98cfc
	route = *r;
Packit Service b98cfc
	rptr = r;
Packit Service b98cfc
	
Packit Service b98cfc
	rtype = None;
Packit Service b98cfc
	pto = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	RSItemIO *io = r->getToIO();
Packit Service b98cfc
	
Packit Service b98cfc
	if (io)
Packit Service b98cfc
	{
Packit Service b98cfc
		RSItemBaseWithType *owner = (RSItemBaseWithType *)io->getOwner();
Packit Service b98cfc
		switch (owner->type())
Packit Service b98cfc
		{
Packit Service b98cfc
			case RSItemBaseWithType::In:
Packit Service b98cfc
				rtype = In;
Packit Service b98cfc
				break;
Packit Service b98cfc
			case RSItemBaseWithType::Out:
Packit Service b98cfc
				rtype = Out;
Packit Service b98cfc
				break;
Packit Service b98cfc
			case RSItemBaseWithType::FX:
Packit Service b98cfc
				rtype = FX;
Packit Service b98cfc
				break;
Packit Service b98cfc
			case RSItemBaseWithType::Patch:
Packit Service b98cfc
				if (io->isOutput())
Packit Service b98cfc
					rtype = POut;
Packit Service b98cfc
				else
Packit Service b98cfc
					rtype = PIn;
Packit Service b98cfc
				pto = (StrPatch *)owner;
Packit Service b98cfc
				break;
Packit Service b98cfc
			default:
Packit Service b98cfc
				break;
Packit Service b98cfc
		}
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	if (!out)
Packit Service b98cfc
	{
Packit Service b98cfc
		rbOutput->hide();
Packit Service b98cfc
	}
Packit Service b98cfc
	else
Packit Service b98cfc
	{
Packit Service b98cfc
		rbFX->hide();
Packit Service b98cfc
		rbInput->hide();
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	StrPatch *patch;
Packit Service b98cfc
	
Packit Service b98cfc
	lbPatch->clear();
Packit Service b98cfc
	for(patch = global->Patches.first(); patch; patch = global->Patches.next() )
Packit Service b98cfc
	{
Packit Service b98cfc
		lbPatch->insertItem(patch->name());
Packit Service b98cfc
		patchList.append(patch);
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	connect(rbNone, SIGNAL(clicked()), this, SLOT(noneClicked()));
Packit Service b98cfc
	connect(rbFX, SIGNAL(clicked()), this, SLOT(fxClicked()));
Packit Service b98cfc
	connect(rbInput, SIGNAL(clicked()), this, SLOT(inClicked()));
Packit Service b98cfc
	connect(rbOutput, SIGNAL(clicked()), this, SLOT(outClicked()));
Packit Service b98cfc
	connect(rbPatch, SIGNAL(clicked()), this, SLOT(patchClicked()));
Packit Service b98cfc
	
Packit Service b98cfc
	connect(lbPatch, SIGNAL(clicked(QListBoxItem *)), this, SLOT(patchListClicked(QListBoxItem *)));
Packit Service b98cfc
	connect(lbEnd, SIGNAL(clicked(QListBoxItem *)), this, SLOT(endListClicked(QListBoxItem *)));
Packit Service b98cfc
	
Packit Service b98cfc
	connect(finishButton(), SIGNAL(clicked()), this, SLOT(finishClicked()));
Packit Service b98cfc
	
Packit Service b98cfc
	connect(this, SIGNAL(selected(const QString &)), this, SLOT(selected(const QString &)));
Packit Service b98cfc
	helpButton()->hide();
Packit Service b98cfc
	
Packit Service b98cfc
	setFinishEnabled(pageType, true);
Packit Service b98cfc
	setNextEnabled(pageType, true);
Packit Service b98cfc
	setFinishEnabled(pagePatch, true);
Packit Service b98cfc
	setNextEnabled(pagePatch, true);
Packit Service b98cfc
	setFinishEnabled(pageEnd, true);
Packit Service b98cfc
	setNextEnabled(pageEnd, true);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::setState(bool patch, bool end, bool back, bool next, bool finish)
Packit Service b98cfc
{
Packit Service b98cfc
	setAppropriate(pagePatch, patch ? true : false);
Packit Service b98cfc
	setAppropriate(pageEnd, end ? true : false);
Packit Service b98cfc
	
Packit Service b98cfc
	backButton()->setEnabled(back ? true : false);
Packit Service b98cfc
	nextButton()->setEnabled(next ? true : false);
Packit Service b98cfc
	finishButton()->setEnabled(finish ? true : false);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::loadEnd(IOType iotype)
Packit Service b98cfc
{
Packit Service b98cfc
	lbEnd->clear();
Packit Service b98cfc
	ios.clear();
Packit Service b98cfc
	
Packit Service b98cfc
	if (iotype == In)
Packit Service b98cfc
	{
Packit Service b98cfc
		for (int i = 0; i < (int)global->Inputs.count(); i++)
Packit Service b98cfc
		{
Packit Service b98cfc
			StrInput *io = global->Inputs.at(i);
Packit Service b98cfc
			ios.append(io->getIO(false, 0));
Packit Service b98cfc
			lbEnd->insertItem(io->name());
Packit Service b98cfc
		}
Packit Service b98cfc
	}
Packit Service b98cfc
	else if (iotype == Out)
Packit Service b98cfc
	{
Packit Service b98cfc
		for (int i = 0; i < (int)global->Outputs.count(); i++)
Packit Service b98cfc
		{
Packit Service b98cfc
			StrOutput *io = global->Outputs.at(i);
Packit Service b98cfc
			ios.append(io->getIO(true, 0));
Packit Service b98cfc
			lbEnd->insertItem(io->name());
Packit Service b98cfc
		}
Packit Service b98cfc
	}
Packit Service b98cfc
	else if (iotype == FX)
Packit Service b98cfc
	{
Packit Service b98cfc
		for (int i = 0; i < (int)global->FXs.count(); i++)
Packit Service b98cfc
		{
Packit Service b98cfc
			StrFX *io = global->FXs.at(i);
Packit Service b98cfc
			ios.append(io->getIO(false, 0));
Packit Service b98cfc
			lbEnd->insertItem(io->name());
Packit Service b98cfc
		}
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::noneClicked()
Packit Service b98cfc
{
Packit Service b98cfc
	setState(false, false, false, false, true);
Packit Service b98cfc
	if (rtype != ConnectionWizard::None)
Packit Service b98cfc
	{
Packit Service b98cfc
		rtype = ConnectionWizard::None;
Packit Service b98cfc
		pto = NULL;
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::fxClicked()
Packit Service b98cfc
{
Packit Service b98cfc
	setState(false, true, false, true, false);
Packit Service b98cfc
	if (rtype != ConnectionWizard::FX)
Packit Service b98cfc
	{
Packit Service b98cfc
		rtype = ConnectionWizard::FX;
Packit Service b98cfc
		pto = NULL;
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::inClicked()
Packit Service b98cfc
{
Packit Service b98cfc
	setState(false, true, false, true, false);
Packit Service b98cfc
	if (rtype != ConnectionWizard::In)
Packit Service b98cfc
	{
Packit Service b98cfc
		rtype = ConnectionWizard::In;
Packit Service b98cfc
		pto = NULL;
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::outClicked()
Packit Service b98cfc
{
Packit Service b98cfc
	setState(false, true, false, true, false);
Packit Service b98cfc
	if (rtype != ConnectionWizard::Out) 
Packit Service b98cfc
	{
Packit Service b98cfc
		rtype = ConnectionWizard::Out;
Packit Service b98cfc
		pto = NULL;
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::patchClicked()
Packit Service b98cfc
{
Packit Service b98cfc
	setState(true, true, false, true, false);
Packit Service b98cfc
	if (rtype != ConnectionWizard::PIn && rtype != ConnectionWizard::POut)
Packit Service b98cfc
	{
Packit Service b98cfc
		if (out)
Packit Service b98cfc
			rtype = ConnectionWizard::PIn;
Packit Service b98cfc
		else
Packit Service b98cfc
			rtype = ConnectionWizard::POut;
Packit Service b98cfc
		pto = NULL;
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::selected(const QString &page)
Packit Service b98cfc
{
Packit Service b98cfc
	if (page == "Connection target")
Packit Service b98cfc
	{
Packit Service b98cfc
		switch (rtype)
Packit Service b98cfc
		{
Packit Service b98cfc
			case None:
Packit Service b98cfc
				rbNone->setChecked(true);
Packit Service b98cfc
				setState(false, false, false, false, true);
Packit Service b98cfc
				break;
Packit Service b98cfc
			case FX:
Packit Service b98cfc
				rbFX->setChecked(true);
Packit Service b98cfc
				setState(false, true, false, true, false);
Packit Service b98cfc
				break;
Packit Service b98cfc
			case In:
Packit Service b98cfc
				rbInput->setChecked(true);
Packit Service b98cfc
				setState(false, true, false, true, false);
Packit Service b98cfc
				break;
Packit Service b98cfc
			case Out:
Packit Service b98cfc
				rbOutput->setChecked(true);
Packit Service b98cfc
				setState(false, true, false, true, false);
Packit Service b98cfc
				break;
Packit Service b98cfc
			case PIn:
Packit Service b98cfc
			case POut:
Packit Service b98cfc
				rbPatch->setChecked(true);
Packit Service b98cfc
				setState(true, true, false, true, false);
Packit Service b98cfc
				break;
Packit Service b98cfc
		}
Packit Service b98cfc
	}
Packit Service b98cfc
	else if (page == "Patch")
Packit Service b98cfc
	{
Packit Service b98cfc
		finishButton()->setEnabled(false);
Packit Service b98cfc
		if (pto)
Packit Service b98cfc
		{
Packit Service b98cfc
			// find patch
Packit Service b98cfc
			lbPatch->setCurrentItem(patchList.find(pto));
Packit Service b98cfc
			nextButton()->setEnabled(true);
Packit Service b98cfc
		}
Packit Service b98cfc
		else
Packit Service b98cfc
		{
Packit Service b98cfc
			QListBoxItem *si = lbPatch->selectedItem();
Packit Service b98cfc
			if (si)
Packit Service b98cfc
				lbPatch->setSelected(si, false);
Packit Service b98cfc
			lbPatch->setCurrentItem(-1);
Packit Service b98cfc
			nextButton()->setEnabled(false);
Packit Service b98cfc
		}
Packit Service b98cfc
Packit Service b98cfc
		cbMulti->setChecked(route.getMulti());
Packit Service b98cfc
		cbSimple->setChecked(route.getSimple());
Packit Service b98cfc
	}
Packit Service b98cfc
	else if (page == "End")
Packit Service b98cfc
	{
Packit Service b98cfc
		nextButton()->setEnabled(false);
Packit Service b98cfc
		switch (rtype)
Packit Service b98cfc
		{
Packit Service b98cfc
			case None:
Packit Service b98cfc
				break;
Packit Service b98cfc
			case FX:
Packit Service b98cfc
			case In:
Packit Service b98cfc
			case Out:
Packit Service b98cfc
				loadEnd(rtype);
Packit Service b98cfc
				break;
Packit Service b98cfc
			case PIn:
Packit Service b98cfc
			case POut:
Packit Service b98cfc
				// load patch in or out
Packit Service b98cfc
				ios.clear();
Packit Service b98cfc
				lbEnd->clear();
Packit Service b98cfc
Packit Service b98cfc
				for (int i = 0; i < (int)pto->getMaxIOIdx(out); i++)
Packit Service b98cfc
				{
Packit Service b98cfc
					RSItemIO *io = pto->getIO(out, i);
Packit Service b98cfc
					if (io)
Packit Service b98cfc
					{
Packit Service b98cfc
						ios.append(io);
Packit Service b98cfc
						lbEnd->insertItem(io->getDesc());
Packit Service b98cfc
					}
Packit Service b98cfc
				}
Packit Service b98cfc
				
Packit Service b98cfc
				route.setMulti(cbMulti->isChecked());
Packit Service b98cfc
				route.setSimple(cbSimple->isChecked());
Packit Service b98cfc
				break;
Packit Service b98cfc
		}
Packit Service b98cfc
Packit Service b98cfc
		if (route.getToIO())
Packit Service b98cfc
		{
Packit Service b98cfc
			lbEnd->setCurrentItem(ios.find(route.getToIO()));
Packit Service b98cfc
			finishButton()->setEnabled(true);
Packit Service b98cfc
		}
Packit Service b98cfc
		else
Packit Service b98cfc
		{
Packit Service b98cfc
			QListBoxItem *si = lbEnd->selectedItem();
Packit Service b98cfc
			if (si)
Packit Service b98cfc
				lbEnd->setSelected(si, false);
Packit Service b98cfc
			lbEnd->setCurrentItem(-1);
Packit Service b98cfc
			finishButton()->setEnabled(false);
Packit Service b98cfc
		}
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::patchListClicked(QListBoxItem *item)
Packit Service b98cfc
{
Packit Service b98cfc
	pto = patchList.at(lbPatch->index(item));
Packit Service b98cfc
	route.setToIO(NULL);
Packit Service b98cfc
	nextButton()->setEnabled(true);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::endListClicked(QListBoxItem *item)
Packit Service b98cfc
{
Packit Service b98cfc
	route.setToIO(ios.at(lbEnd->index(item)));
Packit Service b98cfc
	finishButton()->setEnabled(true);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void ConnectionWizard::finishClicked()
Packit Service b98cfc
{
Packit Service b98cfc
	*rptr = route;
Packit Service b98cfc
}