Blame qlo10k1/src/mainwnd.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 <qlistbox.h>
Packit Service b98cfc
#include <qpushbutton.h>
Packit Service b98cfc
#include <qcombobox.h>
Packit Service b98cfc
#include <qpopupmenu.h>
Packit Service b98cfc
#include <qmenubar.h>
Packit Service b98cfc
#include <qapplication.h>
Packit Service b98cfc
#include <qtabwidget.h>
Packit Service b98cfc
#include <qlistview.h>
Packit Service b98cfc
#include <qfiledialog.h>
Packit Service b98cfc
#include <qmessagebox.h>
Packit Service b98cfc
#include <qlayout.h>
Packit Service b98cfc
#include <qsettings.h>
Packit Service b98cfc
Packit Service b98cfc
#include "app_global.h"
Packit Service b98cfc
#include "mainwnd.h"
Packit Service b98cfc
#include "preferences.h"
Packit Service b98cfc
#include "loadpatchdialog.h"
Packit Service b98cfc
#include "transformpatchdialog.h"
Packit Service b98cfc
#include "aboutdialog.h"
Packit Service b98cfc
#include "routingwidget.h"
Packit Service b98cfc
#include "structure_patch.h"
Packit Service b98cfc
#include "strparam.h"
Packit Service b98cfc
Packit Service b98cfc
QString gLastFileDir;
Packit Service b98cfc
Packit Service b98cfc
class PatchesListViewItem : public QListViewItem
Packit Service b98cfc
{
Packit Service b98cfc
public:
Packit Service b98cfc
	StrPatch *patch;
Packit Service b98cfc
	
Packit Service b98cfc
	PatchesListViewItem(StrPatch *p, QListView *parent) : QListViewItem(parent)
Packit Service b98cfc
	{
Packit Service b98cfc
		patch = p;
Packit Service b98cfc
		updateText();
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	PatchesListViewItem(StrPatch *p, QListView *parent, PatchesListViewItem *after) : QListViewItem(parent, after)
Packit Service b98cfc
	{
Packit Service b98cfc
		patch = p;
Packit Service b98cfc
		updateText();
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	void updateText()
Packit Service b98cfc
	{
Packit Service b98cfc
		setText(0,QString().sprintf("%03d", patch->order()));
Packit Service b98cfc
		setText(1,QString().sprintf("%03d", patch->num()));
Packit Service b98cfc
		setText(2,patch->name());
Packit Service b98cfc
	}
Packit Service b98cfc
};
Packit Service b98cfc
Packit Service b98cfc
MainWnd::MainWnd() : MainWndBase()
Packit Service b98cfc
{
Packit Service b98cfc
	cardGlobal = new StrCardGlobal();
Packit Service b98cfc
	CurrentCard = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	// try to load settings
Packit Service b98cfc
	loadSettings();
Packit Service b98cfc
Packit Service b98cfc
	// main menu
Packit Service b98cfc
	QPopupMenu *fileMenu = new QPopupMenu();
Packit Service b98cfc
	fileMenu->insertItem(tr("&Load DSP config"), this, SLOT(menuLoadDSPConfigActivated(int)));
Packit Service b98cfc
	fileMenu->insertItem(tr("&Save DSP config"), this, SLOT(menuSaveDSPConfigActivated(int)));
Packit Service b98cfc
	fileMenu->insertSeparator();
Packit Service b98cfc
	fileMenu->insertItem(tr("&Quit"), this, SLOT(menuQuitActivated(int)));
Packit Service b98cfc
Packit Service b98cfc
	menubar->insertItem(tr("&File"), fileMenu);
Packit Service b98cfc
Packit Service b98cfc
	cardMenu = new QPopupMenu();
Packit Service b98cfc
	menubar->insertItem(tr("&Card"), cardMenu);
Packit Service b98cfc
	cardMenu->setCheckable(true);
Packit Service b98cfc
Packit Service b98cfc
	QPopupMenu *settingMenu = new QPopupMenu();
Packit Service b98cfc
	settingMenu->insertItem(tr("&Main settings"), this, SLOT(menuSettingsActivated(int)));
Packit Service b98cfc
	menubar->insertItem(tr("&Settings"), settingMenu);
Packit Service b98cfc
Packit Service b98cfc
	QPopupMenu *helpMenu = new QPopupMenu();
Packit Service b98cfc
	helpMenu->insertItem(tr("&About"), this, SLOT(menuHelpAboutActivated(int)));
Packit Service b98cfc
	menubar->insertItem(tr("&Help"), helpMenu);
Packit Service b98cfc
Packit Service b98cfc
	// connect signals
Packit Service b98cfc
	connect((QObject *)tabMain, SIGNAL(currentChanged(QWidget *)), this, SLOT(tabMainCurrentChanged(QWidget *)));
Packit Service b98cfc
Packit Service b98cfc
	createCardMenu();
Packit Service b98cfc
	enableTabs(false);
Packit Service b98cfc
Packit Service b98cfc
	setCaption(tr(APP_NAME));
Packit Service b98cfc
Packit Service b98cfc
	connect(pbLoad, SIGNAL(clicked()), this, SLOT(loadClicked()));
Packit Service b98cfc
	connect(pbUnload, SIGNAL(clicked()), this, SLOT(unloadClicked()));
Packit Service b98cfc
Packit Service b98cfc
	connect(lvPatches, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(patchDoubleClicked(QListViewItem *)));
Packit Service b98cfc
Packit Service b98cfc
	routing = new RoutingWidget(tabRouting);
Packit Service b98cfc
Packit Service b98cfc
	tabRoutingLayout->addWidget(routing, 0, 0);
Packit Service b98cfc
	routing->show();
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
MainWnd::~MainWnd()
Packit Service b98cfc
{
Packit Service b98cfc
	CurrentCard = NULL;
Packit Service b98cfc
	delete cardGlobal;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::closeEvent(QCloseEvent* ce)
Packit Service b98cfc
{
Packit Service b98cfc
	saveSettings();
Packit Service b98cfc
	ce->accept();
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::tabMainCurrentChanged(QWidget *tab)
Packit Service b98cfc
{
Packit Service b98cfc
	if (!CurrentCard)
Packit Service b98cfc
		return;
Packit Service b98cfc
	if (tab == tabLoad)
Packit Service b98cfc
	{
Packit Service b98cfc
		loadPatchesList(lvPatches);
Packit Service b98cfc
	}
Packit Service b98cfc
	else if (tab == tabRouting)
Packit Service b98cfc
	{
Packit Service b98cfc
		routing->refreshDrawing(CurrentCard);
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::loadPatchesList(QListView *lv)
Packit Service b98cfc
{
Packit Service b98cfc
	StrPatch *patch;
Packit Service b98cfc
	
Packit Service b98cfc
	lv->clear();
Packit Service b98cfc
	PatchesListViewItem *after = NULL;
Packit Service b98cfc
	for(patch = CurrentCard->Patches.first(); patch; patch = CurrentCard->Patches.next() )
Packit Service b98cfc
	{
Packit Service b98cfc
		if (after)
Packit Service b98cfc
			after = new PatchesListViewItem(patch, lv, after);
Packit Service b98cfc
		else
Packit Service b98cfc
			after = new PatchesListViewItem(patch, lv);
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::patchesUpdateText()
Packit Service b98cfc
{
Packit Service b98cfc
	QListViewItemIterator it(lvPatches);
Packit Service b98cfc
	while (it.current())
Packit Service b98cfc
	{
Packit Service b98cfc
		PatchesListViewItem *i = (PatchesListViewItem *)it.current();
Packit Service b98cfc
		i->updateText();
Packit Service b98cfc
		++it;
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::menuQuitActivated(int /*id*/)
Packit Service b98cfc
{
Packit Service b98cfc
	saveSettings();
Packit Service b98cfc
	qApp->quit();
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::menuLoadDSPConfigActivated(int id)
Packit Service b98cfc
{
Packit Service b98cfc
	if (!CurrentCard)
Packit Service b98cfc
		return;
Packit Service b98cfc
	QFileDialog *fd = new QFileDialog(this, "file dialog", TRUE);
Packit Service b98cfc
	fd->setDir(gLastFileDir);
Packit Service b98cfc
	fd->setMode(QFileDialog::ExistingFile);
Packit Service b98cfc
	fd->setFilter("DSP config (*.ld10k1)");
Packit Service b98cfc
	fd->setCaption("Save DSP config");
Packit Service b98cfc
	int err = 0;
Packit Service b98cfc
Packit Service b98cfc
	QString fileName;
Packit Service b98cfc
	if (fd->exec() == QDialog::Accepted)
Packit Service b98cfc
	{
Packit Service b98cfc
		fileName = fd->selectedFile();
Packit Service b98cfc
		gLastFileDir = fd->dirPath();
Packit Service b98cfc
		delete fd;
Packit Service b98cfc
		
Packit Service b98cfc
		LD10k1DspFile *dc = NULL;
Packit Service b98cfc
		if ((err = dc->LoadFromFile(fileName, &dc)) < 0)
Packit Service b98cfc
		{
Packit Service b98cfc
			QMessageBox::critical(0, APP_NAME, QString("Couldn't load DSP config\n(ld10k1 error:%1)").arg(CurrentCard->errorStr(err)));
Packit Service b98cfc
			return;
Packit Service b98cfc
		}
Packit Service b98cfc
		
Packit Service b98cfc
		if ((err = CurrentCard->putDspConfig(dc)) < 0)
Packit Service b98cfc
			QMessageBox::critical(0, APP_NAME, QString("Couldn't put DSP config\n(ld10k1 error:%1)").arg(CurrentCard->errorStr(err)));
Packit Service b98cfc
		delete dc;
Packit Service b98cfc
		CurrentCard->clear();
Packit Service b98cfc
		CurrentCard->loadFromLD();
Packit Service b98cfc
		refreshState();
Packit Service b98cfc
	}
Packit Service b98cfc
	else
Packit Service b98cfc
		delete fd;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::menuSaveDSPConfigActivated(int id)
Packit Service b98cfc
{
Packit Service b98cfc
	if (!CurrentCard)
Packit Service b98cfc
		return;
Packit Service b98cfc
	QFileDialog *fd = new QFileDialog(this, "file dialog", TRUE);
Packit Service b98cfc
	fd->setDir(gLastFileDir);
Packit Service b98cfc
	fd->setMode(QFileDialog::AnyFile);
Packit Service b98cfc
	fd->setFilter("DSP config (*.ld10k1)");
Packit Service b98cfc
	fd->setCaption("Save DSP config");
Packit Service b98cfc
	int err = 0;
Packit Service b98cfc
Packit Service b98cfc
	QString fileName;
Packit Service b98cfc
	if (fd->exec() == QDialog::Accepted)
Packit Service b98cfc
	{
Packit Service b98cfc
        	fileName = fd->selectedFile();
Packit Service b98cfc
		gLastFileDir = fd->dirPath();
Packit Service b98cfc
		delete fd;
Packit Service b98cfc
		
Packit Service b98cfc
		if (!fileName.endsWith(".ld10k1"))
Packit Service b98cfc
			fileName += ".ld10k1";
Packit Service b98cfc
		if (QFile::exists(fileName))
Packit Service b98cfc
		{
Packit Service b98cfc
			if (QMessageBox::question(0, APP_NAME, QString("File with name %1 exist. Overwite ?").arg(fileName), QMessageBox::Yes, QMessageBox::Cancel) != QMessageBox::Yes)
Packit Service b98cfc
				return;
Packit Service b98cfc
		}
Packit Service b98cfc
		
Packit Service b98cfc
		LD10k1DspFile *dc = NULL;
Packit Service b98cfc
		if ((err = CurrentCard->getDspConfig(&dc)) < 0)
Packit Service b98cfc
		{
Packit Service b98cfc
			QMessageBox::critical(0, APP_NAME, QString("Couldn't get DSP config\n(ld10k1 error:%1)").arg(CurrentCard->errorStr(err)));
Packit Service b98cfc
			return;
Packit Service b98cfc
		}
Packit Service b98cfc
		
Packit Service b98cfc
		if ((err = dc->SaveToFile(fileName)) < 0)
Packit Service b98cfc
			QMessageBox::critical(0, APP_NAME, QString("Couldn't save DSP config\n(ld10k1 error:%1)").arg(CurrentCard->errorStr(err)));
Packit Service b98cfc
		delete dc;
Packit Service b98cfc
	}
Packit Service b98cfc
	else
Packit Service b98cfc
		delete fd;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::refreshState()
Packit Service b98cfc
{
Packit Service b98cfc
	tabMainCurrentChanged(tabMain->currentPage());
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::menuCardActivated(int id)
Packit Service b98cfc
{
Packit Service b98cfc
	CardParam *card;
Packit Service b98cfc
	CardParam *old_card, *new_card;
Packit Service b98cfc
	int item_id = 0, old_item_id = 0;
Packit Service b98cfc
Packit Service b98cfc
	new_card = NULL;
Packit Service b98cfc
	if (CurrentCard && CurrentCard->Card->isConnected())
Packit Service b98cfc
		old_card = CurrentCard->Card;
Packit Service b98cfc
	else
Packit Service b98cfc
		old_card = NULL;
Packit Service b98cfc
Packit Service b98cfc
	for (unsigned int i = 0; i < cardMenuItems.count(); i++)
Packit Service b98cfc
	{
Packit Service b98cfc
		item_id = cardMenuItems[i];
Packit Service b98cfc
		card = cardGlobal->Cards.at(i);
Packit Service b98cfc
		if (cardMenu->isItemChecked(item_id))
Packit Service b98cfc
			old_item_id = item_id;
Packit Service b98cfc
Packit Service b98cfc
		if (id == item_id)
Packit Service b98cfc
			new_card = card;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	if (new_card && new_card != old_card)
Packit Service b98cfc
	{
Packit Service b98cfc
		if (!new_card->connect())
Packit Service b98cfc
		{
Packit Service b98cfc
			cardMenu->setItemChecked(id, true);
Packit Service b98cfc
			enableTabs(true);
Packit Service b98cfc
			CurrentCard = new_card->getStructure();
Packit Service b98cfc
			// FIXME - refresh data
Packit Service b98cfc
			CurrentCard->loadFromLD();
Packit Service b98cfc
			refreshState();
Packit Service b98cfc
Packit Service b98cfc
			if (old_card)
Packit Service b98cfc
			{
Packit Service b98cfc
				old_card->disconnect();
Packit Service b98cfc
				cardMenu->setItemChecked(old_item_id, false);
Packit Service b98cfc
			}
Packit Service b98cfc
		}
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::menuSettingsActivated(int /*id*/)
Packit Service b98cfc
{
Packit Service b98cfc
	PreferencesDlg d(cardGlobal);
Packit Service b98cfc
	int item_id;
Packit Service b98cfc
	
Packit Service b98cfc
	if (CurrentCard && CurrentCard->Card->isConnected())
Packit Service b98cfc
	{
Packit Service b98cfc
		CurrentCard->Card->disconnect();
Packit Service b98cfc
		CurrentCard = NULL;
Packit Service b98cfc
		enableTabs(false);
Packit Service b98cfc
		
Packit Service b98cfc
		for (unsigned int i = 0; i < cardMenuItems.count(); i++)
Packit Service b98cfc
		{
Packit Service b98cfc
			item_id = cardMenuItems[i];
Packit Service b98cfc
			cardMenu->setItemChecked(item_id, false);
Packit Service b98cfc
		}
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	if (d.exec() == QDialog::Accepted)
Packit Service b98cfc
	{
Packit Service b98cfc
		saveSettings();
Packit Service b98cfc
		createCardMenu();
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::menuHelpAboutActivated(int /* id */)
Packit Service b98cfc
{
Packit Service b98cfc
	AboutDlg d;
Packit Service b98cfc
	d.exec();
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::menuCardClearDSPActivated(int /* id */)
Packit Service b98cfc
{
Packit Service b98cfc
	if (CurrentCard)
Packit Service b98cfc
	{
Packit Service b98cfc
		CurrentCard->clearDSP();
Packit Service b98cfc
		refreshState();
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::menuCardRefreshActivated(int /* id */)
Packit Service b98cfc
{
Packit Service b98cfc
	if (CurrentCard)
Packit Service b98cfc
		CurrentCard->loadFromLD();
Packit Service b98cfc
	
Packit Service b98cfc
	refreshState();
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::enableTabs(bool en)
Packit Service b98cfc
{
Packit Service b98cfc
	if (en)
Packit Service b98cfc
	{
Packit Service b98cfc
		tabLoad->setEnabled(true);
Packit Service b98cfc
		tabRouting->setEnabled(true);
Packit Service b98cfc
	}
Packit Service b98cfc
	else
Packit Service b98cfc
	{
Packit Service b98cfc
		tabLoad->setEnabled(false);
Packit Service b98cfc
		tabRouting->setEnabled(false);
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::createCardMenu(void)
Packit Service b98cfc
{
Packit Service b98cfc
	CardParam *card;
Packit Service b98cfc
	int id;
Packit Service b98cfc
	
Packit Service b98cfc
	for (unsigned int i = 0; i < cardMenuItems.count() ;i++)
Packit Service b98cfc
	{
Packit Service b98cfc
		cardMenu->disconnectItem(cardMenuItems[i], this, SLOT(menuCardActivated(int)));
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	cardMenuItems.clear();
Packit Service b98cfc
	cardMenu->clear();
Packit Service b98cfc
	for (unsigned int i = 0; i < cardGlobal->Cards.count() ;i++)
Packit Service b98cfc
	{
Packit Service b98cfc
		card = cardGlobal->Cards.at(i);
Packit Service b98cfc
		id = cardMenu->insertItem(card->CardName);
Packit Service b98cfc
		cardMenuItems.append(id);
Packit Service b98cfc
		cardMenu->connectItem(id, this, SLOT(menuCardActivated(int)));
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	// special items
Packit Service b98cfc
	cardMenu->insertSeparator();
Packit Service b98cfc
	cardMenu->insertItem(tr("&Refresh"), this, SLOT(menuCardRefreshActivated(int)));
Packit Service b98cfc
	cardMenu->insertItem(tr("&Clear DSP"), this, SLOT(menuCardClearDSPActivated(int)));
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::loadClicked()
Packit Service b98cfc
{
Packit Service b98cfc
	QFileDialog *fd = new QFileDialog(this, "file dialog", TRUE);
Packit Service b98cfc
	fd->setMode(QFileDialog::ExistingFile);
Packit Service b98cfc
	QStringList filterlist;
Packit Service b98cfc
	filterlist << QString( "as10k1 Patch files (*.bin *.as10k1 *.emu10k1)" );
Packit Service b98cfc
	filterlist << QString( "ld10k1 Native effect files (*.ld10k1)" );
Packit Service b98cfc
	filterlist << QString( "All Files (*)" );
Packit Service b98cfc
	QString filters = filterlist.join( ";;" );
Packit Service b98cfc
	fd->setFilters( filters );
Packit Service b98cfc
	
Packit Service b98cfc
	fd->setDir(gLastFileDir);
Packit Service b98cfc
	fd->setCaption("Load patch");
Packit Service b98cfc
	int err = 0;
Packit Service b98cfc
Packit Service b98cfc
	QString fileName;
Packit Service b98cfc
	if ( fd->exec() == QDialog::Accepted )
Packit Service b98cfc
	{
Packit Service b98cfc
        	fileName = fd->selectedFile();
Packit Service b98cfc
		gLastFileDir = fd->dirPath();
Packit Service b98cfc
		delete fd;
Packit Service b98cfc
		LD10k1File *ldfile = NULL;
Packit Service b98cfc
		/* Try loading as an ld10k1 file first. */
Packit Service b98cfc
		if ((err = LD10k1File::LoadFromFile(fileName, &ldfile)) < 0) 
Packit Service b98cfc
		{
Packit Service b98cfc
			EMU10k1File *emufile = NULL;
Packit Service b98cfc
			if ((err = EMU10k1File::LoadFromFile(fileName, &emufile)) < 0) 
Packit Service b98cfc
			{
Packit Service b98cfc
				QMessageBox::critical(0, APP_NAME, QString("Couldn't load patch\n(ld10k1 error:%1)").arg(CurrentCard->errorStr(err)));
Packit Service b98cfc
				return;
Packit Service b98cfc
			}
Packit Service b98cfc
			else
Packit Service b98cfc
			{
Packit Service b98cfc
				TransformPatchDlg d(fileName, emufile);
Packit Service b98cfc
				if (d.exec() == QDialog::Accepted)
Packit Service b98cfc
				{
Packit Service b98cfc
					if ((err = d.transformFile(&ldfile)) < 0)
Packit Service b98cfc
					{
Packit Service b98cfc
						QMessageBox::critical(0, APP_NAME, QString("Couldn't transform patch\n(ld10k1 error:%1)").arg(CurrentCard->errorStr(err)));
Packit Service b98cfc
						delete emufile;
Packit Service b98cfc
						return;
Packit Service b98cfc
					}
Packit Service b98cfc
					delete emufile;
Packit Service b98cfc
				}
Packit Service b98cfc
				else
Packit Service b98cfc
				{
Packit Service b98cfc
					delete emufile;
Packit Service b98cfc
					return;
Packit Service b98cfc
				}
Packit Service b98cfc
			}
Packit Service b98cfc
		}
Packit Service b98cfc
		
Packit Service b98cfc
		LoadPatchDlg d(CurrentCard, fileName, ldfile);
Packit Service b98cfc
Packit Service b98cfc
		if (d.exec() == QDialog::Accepted)
Packit Service b98cfc
		{
Packit Service b98cfc
			// and now convert to loader
Packit Service b98cfc
			StrPatch *loaded = NULL;
Packit Service b98cfc
			if ((err = CurrentCard->load(ldfile, d.whereLoad(), &loaded)) < 0)
Packit Service b98cfc
				QMessageBox::critical(0, APP_NAME, QString("Couldn't load patch\n(ld10k1 error:%1)").arg(CurrentCard->errorStr(err)));
Packit Service b98cfc
			else
Packit Service b98cfc
				refreshState();
Packit Service b98cfc
		}
Packit Service b98cfc
		delete ldfile;
Packit Service b98cfc
	}
Packit Service b98cfc
	else
Packit Service b98cfc
		delete fd;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::unloadClicked()
Packit Service b98cfc
{
Packit Service b98cfc
	PatchesListViewItem *current = (PatchesListViewItem *)lvPatches->currentItem();
Packit Service b98cfc
	int err;
Packit Service b98cfc
Packit Service b98cfc
	if (current)
Packit Service b98cfc
	{
Packit Service b98cfc
		// find patch index
Packit Service b98cfc
		StrPatch *p = current->patch;
Packit Service b98cfc
		if ((err = CurrentCard->unload(p)))
Packit Service b98cfc
			QMessageBox::critical(0, APP_NAME, QString("Couldn't unload patch\n(ld10k1 error:%1)").arg(CurrentCard->errorStr(err)));
Packit Service b98cfc
		else
Packit Service b98cfc
			refreshState();
Packit Service b98cfc
	}
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::patchDoubleClicked(QListViewItem *item)
Packit Service b98cfc
{
Packit Service b98cfc
	/*int patch_num = item->text(0).toInt();
Packit Service b98cfc
	int err;
Packit Service b98cfc
Packit Service b98cfc
	liblo10k1_dsp_patch_t *patch = NULL;
Packit Service b98cfc
	if ((err = global->CurrentCard->get(patch_num, &patch)))
Packit Service b98cfc
	{
Packit Service b98cfc
		QMessageBox::critical(0, APP_NAME, QString("Couldn't get patch\n(ld10k1 error:%1)").arg(global->CurrentCard->error_str(err)));
Packit Service b98cfc
		return;
Packit Service b98cfc
	}*/
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::saveSettings()
Packit Service b98cfc
{
Packit Service b98cfc
	QSettings settings(QSettings::Ini);
Packit Service b98cfc
	settings.setPath("pzad", "qlo10k1", QSettings::User);
Packit Service b98cfc
	
Packit Service b98cfc
	settings.beginGroup("/qlo10k1");
Packit Service b98cfc
	settings.writeEntry("/Version", "0.0.1");
Packit Service b98cfc
	settings.writeEntry("/RepDirSystem", cardGlobal->RepDirSystem);
Packit Service b98cfc
	settings.writeEntry("/RepDirUser", cardGlobal->RepDirUser);
Packit Service b98cfc
	settings.writeEntry("/LastDir", gLastFileDir);
Packit Service b98cfc
	
Packit Service b98cfc
	// first save cards
Packit Service b98cfc
	settings.beginGroup("/Cards");
Packit Service b98cfc
	settings.writeEntry("/CardCount", (int)cardGlobal->Cards.count());
Packit Service b98cfc
	for (unsigned int i = 0; i < cardGlobal->Cards.count(); i++)
Packit Service b98cfc
	{
Packit Service b98cfc
		settings.beginGroup(QString("/Card_%1").arg(i));
Packit Service b98cfc
		CardParam *card = cardGlobal->Cards.at(i);
Packit Service b98cfc
		
Packit Service b98cfc
		settings.writeEntry("/Name", card->CardName);
Packit Service b98cfc
		settings.writeEntry("/Socket", card->CardSocket);
Packit Service b98cfc
			
Packit Service b98cfc
		settings.endGroup();
Packit Service b98cfc
	}
Packit Service b98cfc
	// write current card	
Packit Service b98cfc
	settings.endGroup();
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void MainWnd::loadSettings()
Packit Service b98cfc
{
Packit Service b98cfc
	QSettings settings(QSettings::Ini);
Packit Service b98cfc
	settings.setPath("pzad", "qlo10k1", QSettings::User);
Packit Service b98cfc
	settings.beginGroup("/qlo10k1");
Packit Service b98cfc
	
Packit Service b98cfc
	QString version = settings.readEntry("/Version", "");
Packit Service b98cfc
	if (version == "")
Packit Service b98cfc
	{
Packit Service b98cfc
		// settings doesn't exists
Packit Service b98cfc
		cardGlobal->RepDirSystem = "";
Packit Service b98cfc
		cardGlobal->RepDirUser = "";
Packit Service b98cfc
		gLastFileDir = "./";
Packit Service b98cfc
		
Packit Service b98cfc
		CardParam *card = new CardParam();
Packit Service b98cfc
		card->CardName = "Default card";
Packit Service b98cfc
		card->CardSocket = "/tmp/.ld10k1_port";
Packit Service b98cfc
		
Packit Service b98cfc
		if (!card->testConnection())
Packit Service b98cfc
		{
Packit Service b98cfc
			cardGlobal->Cards.append(card);
Packit Service b98cfc
		}
Packit Service b98cfc
	}
Packit Service b98cfc
	else
Packit Service b98cfc
	{
Packit Service b98cfc
		cardGlobal->RepDirSystem = settings.readEntry("/RepDirSystem", "");
Packit Service b98cfc
		cardGlobal->RepDirUser = settings.readEntry("/RepDirUser", "");
Packit Service b98cfc
		gLastFileDir = settings.readEntry("/LastDir", "./");
Packit Service b98cfc
	
Packit Service b98cfc
		settings.beginGroup("/Cards");
Packit Service b98cfc
		
Packit Service b98cfc
		unsigned int cardCount = settings.readNumEntry("/CardCount", 0);
Packit Service b98cfc
		for (unsigned int i = 0; i < cardCount; i++)
Packit Service b98cfc
		{
Packit Service b98cfc
			settings.beginGroup(QString("/Card_%1").arg(i));
Packit Service b98cfc
		
Packit Service b98cfc
			CardParam *card = new CardParam();
Packit Service b98cfc
			card->CardName = settings.readEntry("/Name", "");
Packit Service b98cfc
			card->CardSocket = settings.readEntry("/Socket", "");
Packit Service b98cfc
			
Packit Service b98cfc
			if (!card->testConnection())
Packit Service b98cfc
			{
Packit Service b98cfc
				cardGlobal->Cards.append(card);
Packit Service b98cfc
			}
Packit Service b98cfc
				
Packit Service b98cfc
			settings.endGroup();
Packit Service b98cfc
		}
Packit Service b98cfc
		
Packit Service b98cfc
		
Packit Service b98cfc
		settings.endGroup();
Packit Service b98cfc
	}
Packit Service b98cfc
}