Blame qlo10k1/src/newiodialog.cpp

Packit 427e91
/*
Packit 427e91
 *  qlo10k1 - GUI frontend for ld10k1
Packit 427e91
 *
Packit 427e91
 *  Copyright (c) 2004 by Peter Zubaj
Packit 427e91
 *
Packit 427e91
 *   This program is free software; you can redistribute it and/or modify
Packit 427e91
 *   it under the terms of the GNU General Public License as published by
Packit 427e91
 *   the Free Software Foundation; either version 2 of the License, or
Packit 427e91
 *   (at your option) any later version.
Packit 427e91
 *
Packit 427e91
 *   This program is distributed in the hope that it will be useful,
Packit 427e91
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 427e91
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 427e91
 *   GNU General Public License for more details.
Packit 427e91
 *
Packit 427e91
 *   You should have received a copy of the GNU General Public License
Packit 427e91
 *   along with this program; if not, write to the Free Software
Packit 427e91
 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit 427e91
 *
Packit 427e91
 */
Packit 427e91
 
Packit 427e91
#include <qpushbutton.h>
Packit 427e91
#include <qlistview.h>
Packit 427e91
Packit 427e91
#include "newiodialog.h"
Packit 427e91
#include "routingwidget.h"
Packit 427e91
#include "structure_io.h"
Packit 427e91
#include "strparam.h"
Packit 427e91
Packit 427e91
class IOListViewItem : public QListViewItem
Packit 427e91
{
Packit 427e91
public:
Packit 427e91
	int num;
Packit 427e91
	QString name;
Packit 427e91
	
Packit 427e91
	IOListViewItem(int n, QString na, QListView *parent) : QListViewItem(parent)
Packit 427e91
	{
Packit 427e91
		num = n;
Packit 427e91
		name = na;
Packit 427e91
		updateText();
Packit 427e91
	}
Packit 427e91
	
Packit 427e91
	IOListViewItem(int n, QString na, QListView *parent, IOListViewItem *after) : QListViewItem(parent, after)
Packit 427e91
	{
Packit 427e91
		num = n;
Packit 427e91
		name = na;
Packit 427e91
		updateText();
Packit 427e91
	}
Packit 427e91
	
Packit 427e91
	void updateText()
Packit 427e91
	{
Packit 427e91
		setText(0, QString().sprintf("%03d", num));
Packit 427e91
		setText(1, name);
Packit 427e91
	}
Packit 427e91
};
Packit 427e91
Packit 427e91
NewIODlg::NewIODlg(StrGlobal *glob, DlgType t)
Packit 427e91
	: NewIODialogBase()
Packit 427e91
{
Packit 427e91
	global = glob;
Packit 427e91
	dt = t;
Packit 427e91
	
Packit 427e91
	connect(pbOK, SIGNAL(clicked()), this, SLOT(okClicked()));
Packit 427e91
	connect(pbCancel, SIGNAL(clicked()), this, SLOT(cancelClicked()));
Packit 427e91
}
Packit 427e91
Packit 427e91
int NewIODlg::init()
Packit 427e91
{
Packit 427e91
	int err;
Packit 427e91
	
Packit 427e91
	QString title;
Packit 427e91
	QString columnTitle;
Packit 427e91
	
Packit 427e91
	int cnt;
Packit 427e91
	if (dt == In)
Packit 427e91
		err = global->Card->getInputCount(&cnt);
Packit 427e91
	else if (dt == Out)
Packit 427e91
		err = global->Card->getOutputCount(&cnt);
Packit 427e91
	else
Packit 427e91
		err = global->Card->getFXCount(&cnt);
Packit 427e91
	
Packit 427e91
	if(err < 0)
Packit 427e91
	  return err;
Packit 427e91
		
Packit 427e91
	switch (dt)
Packit 427e91
	{
Packit 427e91
		case In:
Packit 427e91
			title = "New input";
Packit 427e91
			columnTitle = "Input";
Packit 427e91
			break;
Packit 427e91
		case Out:
Packit 427e91
			title = "New output";
Packit 427e91
			columnTitle = "Output";
Packit 427e91
			break;
Packit 427e91
		case FX:
Packit 427e91
			title = "New FX bus";
Packit 427e91
			columnTitle = "FX bus";
Packit 427e91
			break;
Packit 427e91
	}
Packit 427e91
	
Packit 427e91
	IOListViewItem *after = NULL;
Packit 427e91
	
Packit 427e91
	lvIOs->clear();
Packit 427e91
	
Packit 427e91
	for (int i = 0; i < cnt; i++)
Packit 427e91
	{
Packit 427e91
		QString ioname;
Packit 427e91
		bool used = false;
Packit 427e91
		
Packit 427e91
		if (dt == In)
Packit 427e91
			used = global->findInputByNum(i) != NULL;
Packit 427e91
		else if (dt == Out)
Packit 427e91
			used = global->findOutputByNum(i) != NULL;
Packit 427e91
		else
Packit 427e91
			used = global->findFXByNum(i) != NULL;
Packit 427e91
		
Packit 427e91
		if (!used)
Packit 427e91
		{
Packit 427e91
			if (dt == In)
Packit 427e91
				err = global->Card->getInput(i, ioname);
Packit 427e91
			else if (dt == Out)
Packit 427e91
				err = global->Card->getOutput(i, ioname);
Packit 427e91
			else
Packit 427e91
				err = global->Card->getFX(i, ioname);
Packit 427e91
			
Packit 427e91
			if(err < 0)
Packit 427e91
			  goto Error;	
Packit 427e91
			
Packit 427e91
			if (after)
Packit 427e91
				after = new IOListViewItem(i, ioname, lvIOs, after);
Packit 427e91
			else
Packit 427e91
				after = new IOListViewItem(i, ioname, lvIOs);
Packit 427e91
		}
Packit 427e91
	}
Packit 427e91
	
Packit 427e91
	setCaption(title);
Packit 427e91
	lvIOs->setColumnText(1, columnTitle);
Packit 427e91
	
Packit 427e91
	connect(lvIOs, SIGNAL(selectionChanged(QListViewItem *)), this, SLOT(ioSelectionChanged(QListViewItem *)));
Packit 427e91
	
Packit 427e91
	return 0;
Packit 427e91
	
Packit 427e91
	Error:
Packit 427e91
	
Packit 427e91
	return err;
Packit 427e91
}
Packit 427e91
Packit 427e91
void NewIODlg::okClicked()
Packit 427e91
{
Packit 427e91
	done(Accepted);
Packit 427e91
}
Packit 427e91
Packit 427e91
void NewIODlg::cancelClicked()
Packit 427e91
{
Packit 427e91
	done(Rejected);
Packit 427e91
}
Packit 427e91
Packit 427e91
void NewIODlg::ioSelectionChanged(QListViewItem *item)
Packit 427e91
{
Packit 427e91
	IOListViewItem *ioitem = (IOListViewItem *)item;
Packit 427e91
	
Packit 427e91
	num = ioitem->num;
Packit 427e91
	name = ioitem->name;
Packit 427e91
	pbOK->setEnabled(true);
Packit 427e91
}
Packit 427e91
Packit 427e91
StrIOBase *NewIODlg::getNewIO()
Packit 427e91
{
Packit 427e91
	if (dt == In)
Packit 427e91
		return new StrInput(num, name);
Packit 427e91
	else if (dt == Out)
Packit 427e91
		return new StrOutput(num, name);
Packit 427e91
	else
Packit 427e91
		return new StrFX(num, name);
Packit 427e91
}