|
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 <stdlib.h>
|
|
Packit Service |
b98cfc |
#include "strglobal.h"
|
|
Packit Service |
b98cfc |
#include "strparam.h"
|
|
Packit Service |
b98cfc |
#include "structure.h"
|
|
Packit Service |
b98cfc |
#include "structure_io.h"
|
|
Packit Service |
b98cfc |
#include "structure_link.h"
|
|
Packit Service |
b98cfc |
#include "structure_patch.h"
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
#include "ld10k1file.h"
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrGlobal::StrGlobal(CardParam *card)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
Card = card;
|
|
Packit Service |
b98cfc |
Card->Structure = this;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// registers
|
|
Packit Service |
b98cfc |
Inputs.setAutoDelete(TRUE); // the list owns the objects
|
|
Packit Service |
b98cfc |
Outputs.setAutoDelete(TRUE);
|
|
Packit Service |
b98cfc |
FXs.setAutoDelete(TRUE);
|
|
Packit Service |
b98cfc |
Links.setAutoDelete(TRUE);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// patches
|
|
Packit Service |
b98cfc |
Patches.setAutoDelete(TRUE); // the list owns the objects
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrGlobal::~StrGlobal(void)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
Card = NULL;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
void StrGlobal::clear(void)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
Links.clear();
|
|
Packit Service |
b98cfc |
Inputs.clear();
|
|
Packit Service |
b98cfc |
Outputs.clear();
|
|
Packit Service |
b98cfc |
FXs.clear();
|
|
Packit Service |
b98cfc |
Patches.clear();
|
|
Packit Service |
b98cfc |
UsedItems.clear();
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
void StrGlobal::clearFlags(void)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrFX *fx = NULL;
|
|
Packit Service |
b98cfc |
for(fx = FXs.first(); fx; fx = FXs.next())
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
fx->setFlagUsed(false);
|
|
Packit Service |
b98cfc |
fx->setFlagNew(false);
|
|
Packit Service |
b98cfc |
fx->setFlagChanged(false);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrInput *in = NULL;
|
|
Packit Service |
b98cfc |
for(in = Inputs.first(); in; in = Inputs.next())
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
in->setFlagUsed(false);
|
|
Packit Service |
b98cfc |
in->setFlagNew(false);
|
|
Packit Service |
b98cfc |
in->setFlagChanged(false);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrOutput *out = NULL;
|
|
Packit Service |
b98cfc |
for(out = Outputs.first(); out; out = Outputs.next())
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
out->setFlagUsed(false);
|
|
Packit Service |
b98cfc |
out->setFlagNew(false);
|
|
Packit Service |
b98cfc |
out->setFlagChanged(false);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrPatch *p = NULL;
|
|
Packit Service |
b98cfc |
for(p = Patches.first(); p; p = Patches.next())
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
p->setFlagUsed(false);
|
|
Packit Service |
b98cfc |
p->setFlagNew(false);
|
|
Packit Service |
b98cfc |
p->setFlagChanged(false);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrLink *l = NULL;
|
|
Packit Service |
b98cfc |
for(l = Links.first(); l; l = Links.next())
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
l->setFlagUsed(false);
|
|
Packit Service |
b98cfc |
l->setFlagNew(false);
|
|
Packit Service |
b98cfc |
l->setFlagChanged(false);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::loadFromLD(void)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
clearFlags();
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// load registers
|
|
Packit Service |
b98cfc |
int cnt;
|
|
Packit Service |
b98cfc |
int err = 0;
|
|
Packit Service |
b98cfc |
int i;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
QString ioname;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// FXs
|
|
Packit Service |
b98cfc |
if ((err = Card->getFXCount(&cnt)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (i = 0; i < cnt; i++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if ((err = Card->getFX(i, ioname)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrFX *fx = findFXByNum(i);
|
|
Packit Service |
b98cfc |
if (fx)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (fx->name() != ioname)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
fx->setName(ioname);
|
|
Packit Service |
b98cfc |
fx->setFlagChanged(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
// Don't make unconnected IO/FX disappear.
|
|
Packit Service |
b98cfc |
fx->setFlagUsed(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
fx = new StrFX(i, ioname);
|
|
Packit Service |
b98cfc |
fx->setFlagNew(true);
|
|
Packit Service |
b98cfc |
FXs.append(fx);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if ((err = Card->getInputCount(&cnt)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (i = 0; i < cnt; i++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if ((err = Card->getInput(i, ioname)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrInput *in = findInputByNum(i);
|
|
Packit Service |
b98cfc |
if (in)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (in->name() != ioname)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
in->setName(ioname);
|
|
Packit Service |
b98cfc |
in->setFlagChanged(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
in->setFlagUsed(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
in = new StrInput(i, ioname);
|
|
Packit Service |
b98cfc |
in->setFlagNew(true);
|
|
Packit Service |
b98cfc |
Inputs.append(in);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if ((err = Card->getOutputCount(&cnt)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (i = 0; i < cnt; i++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if ((err = Card->getOutput(i, ioname)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrOutput *out = findOutputByNum(i);
|
|
Packit Service |
b98cfc |
if (out)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (out->name() != ioname)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
out->setName(ioname);
|
|
Packit Service |
b98cfc |
out->setFlagChanged(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
out->setFlagUsed(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
out = new StrOutput(i, ioname);
|
|
Packit Service |
b98cfc |
out->setFlagNew(true);
|
|
Packit Service |
b98cfc |
Outputs.append(out);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// load patches and patch registers
|
|
Packit Service |
b98cfc |
CardParamPatchInfo **pi;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if ((err = Card->getPatchesInfo(&pi, &cnt)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
// copy registers to internal structure
|
|
Packit Service |
b98cfc |
for (i = 0; i < cnt; i++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrPatch *patch = NULL;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if ((err = actualizePatch(pi[i]->id, pi[i]->patch_num, pi[i]->patch_name, &patch)) < 0)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
for (i = 0; i < cnt; i++)
|
|
Packit Service |
b98cfc |
delete pi[i];
|
|
Packit Service |
b98cfc |
delete pi;
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
patch->setOrder(i);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (i = 0; i < cnt; i++)
|
|
Packit Service |
b98cfc |
delete pi[i];
|
|
Packit Service |
b98cfc |
delete pi;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int *ld_tmplids = NULL;
|
|
Packit Service |
b98cfc |
if ((err = Card->getPointsInfo(&ld_tmplids, &cnt)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (i = 0; i < cnt; i++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrLink *link = NULL;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if ((err = actualizeLink(ld_tmplids[i], &link)) < 0)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
free(ld_tmplids);
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
free(ld_tmplids);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// copy used items
|
|
Packit Service |
b98cfc |
StrPatch *patch;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
UsedItems.clear();
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for(patch = Patches.first(); patch; patch = Patches.next() )
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (patch->flagUsed())
|
|
Packit Service |
b98cfc |
UsedItems.append(patch);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// remove unused
|
|
Packit Service |
b98cfc |
for(patch = Patches.last(); patch; patch = Patches.prev() )
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (!patch->flagUsed())
|
|
Packit Service |
b98cfc |
Patches.remove(patch);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
QPtrListIterator <StrInput> itin(Inputs);
|
|
Packit Service |
b98cfc |
StrInput *in;
|
|
Packit Service |
b98cfc |
while ((in = itin.current()) != 0 ) {
|
|
Packit Service |
b98cfc |
++itin;
|
|
Packit Service |
b98cfc |
if (in->flagUsed())
|
|
Packit Service |
b98cfc |
UsedItems.append(in);
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
Inputs.remove(in);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
QPtrListIterator <StrOutput> itout(Outputs);
|
|
Packit Service |
b98cfc |
StrOutput *out;
|
|
Packit Service |
b98cfc |
while ((out = itout.current()) != 0 ) {
|
|
Packit Service |
b98cfc |
++itout;
|
|
Packit Service |
b98cfc |
if (out->flagUsed())
|
|
Packit Service |
b98cfc |
UsedItems.append(out);
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
Outputs.remove(out);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
QPtrListIterator <StrFX> itfx(FXs);
|
|
Packit Service |
b98cfc |
StrFX *fx;
|
|
Packit Service |
b98cfc |
while ((fx = itfx.current()) != 0 ) {
|
|
Packit Service |
b98cfc |
++itfx;
|
|
Packit Service |
b98cfc |
if (fx->flagUsed())
|
|
Packit Service |
b98cfc |
UsedItems.append(fx);
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
FXs.remove(fx);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
QPtrListIterator <StrLink> itlnk(Links);
|
|
Packit Service |
b98cfc |
StrLink *lnk;
|
|
Packit Service |
b98cfc |
while ((lnk = itlnk.current()) != 0 ) {
|
|
Packit Service |
b98cfc |
++itlnk;
|
|
Packit Service |
b98cfc |
if (lnk->flagUsed())
|
|
Packit Service |
b98cfc |
UsedItems.append(lnk);
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
Links.remove(lnk);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
updatePatchesOrder();
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
AutoArange(&UsedItems);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
QPtrListIterator <StrLink> itlnk1(Links);
|
|
Packit Service |
b98cfc |
while ((lnk = itlnk1.current()) != 0 ) {
|
|
Packit Service |
b98cfc |
++itlnk1;
|
|
Packit Service |
b98cfc |
lnk->calcSize();
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::getPio(int pnum, bool out, int idx, QString &name)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if (out)
|
|
Packit Service |
b98cfc |
err = Card->getPOutput(pnum, idx, name);
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
err = Card->getPInput(pnum, idx, name);
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::actualizePatch(int pid, int pnum, QString pname, StrPatch **out)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
QString ioname;
|
|
Packit Service |
b98cfc |
int z, j;
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int cnt1[2];
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if ((err = Card->getPInputCount(pnum, &(cnt1[0]))) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
if ((err = Card->getPOutputCount(pnum, &(cnt1[1]))) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrPatch *patch = findPatchById(pid);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if (patch)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
// check changes
|
|
Packit Service |
b98cfc |
if (patch->name() != pname)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
patch->setName(pname);
|
|
Packit Service |
b98cfc |
patch->setFlagChanged(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (z = 0; z < 2; z++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
for (j = 0; j < cnt1[z]; j++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if ((err = getPio(pnum, z, j, ioname)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
RSItemIO *io = patch->getIO(z, j);
|
|
Packit Service |
b98cfc |
if (io->getDesc() != ioname)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
io->setDesc(ioname);
|
|
Packit Service |
b98cfc |
patch->setFlagChanged(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
patch = new StrPatch(pnum, pid, pname);
|
|
Packit Service |
b98cfc |
Patches.append(patch);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (z = 0; z < 2; z++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
for (j = 0; j < cnt1[z]; j++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if ((err = getPio(pnum, z, j, ioname)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
RSItemIO *io = new RSItemIO(patch, z, j, ioname);
|
|
Packit Service |
b98cfc |
patch->setIO(z, j, io);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
patch->setFlagNew(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
patch->setFlagUsed(true);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
*out = patch;
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrPatch *StrGlobal::findPatchByNum(int num)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrPatch *patch;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for(patch = Patches.first(); patch; patch = Patches.next() )
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (patch->num() == num)
|
|
Packit Service |
b98cfc |
return patch;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return NULL;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrPatch *StrGlobal::findPatchById(int id)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrPatch *patch;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for(patch = Patches.first(); patch; patch = Patches.next() )
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (patch->id() == id)
|
|
Packit Service |
b98cfc |
return patch;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return NULL;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrFX *StrGlobal::findFXByNum(int num)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrFX *fx;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for(fx = FXs.first(); fx; fx = FXs.next() )
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (fx->num() == num)
|
|
Packit Service |
b98cfc |
return fx;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return NULL;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrInput *StrGlobal::findInputByNum(int num)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrInput *in;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for(in = Inputs.first(); in; in = Inputs.next() )
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (in->num() == num)
|
|
Packit Service |
b98cfc |
return in;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return NULL;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrOutput *StrGlobal::findOutputByNum(int num)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrOutput *out;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for(out = Outputs.first(); out; out = Outputs.next() )
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (out->num() == num)
|
|
Packit Service |
b98cfc |
return out;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return NULL;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrLink *StrGlobal::findLinkById(int id)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrLink *l;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for(l = Links.first(); l; l = Links.next() )
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (l->id() == id)
|
|
Packit Service |
b98cfc |
return l;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return NULL;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::conAdd(bool multi, bool simple, RSItemIO *from_io, RSItemIO *to_io, int *id)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int ftype = 0;
|
|
Packit Service |
b98cfc |
int ttype = 0;
|
|
Packit Service |
b98cfc |
int type = 0;
|
|
Packit Service |
b98cfc |
int fp = 0;
|
|
Packit Service |
b98cfc |
int tp = 0;
|
|
Packit Service |
b98cfc |
int p = 0;
|
|
Packit Service |
b98cfc |
int fio = 0;
|
|
Packit Service |
b98cfc |
int tio = 0;
|
|
Packit Service |
b98cfc |
int io = 0;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
RSItemIO *tmp;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
RSItemBaseWithType *owner;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (int i = 0; i < 2; i++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (!i)
|
|
Packit Service |
b98cfc |
tmp = from_io;
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
tmp = to_io;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
owner = (RSItemBaseWithType *)tmp->getOwner();
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
p = -1;
|
|
Packit Service |
b98cfc |
io = -1;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
switch (owner->type())
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
case RSItemBaseWithType::In:
|
|
Packit Service |
b98cfc |
type = CON_IO_IN;
|
|
Packit Service |
b98cfc |
io = ((StrInput *)owner)->num();
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
case RSItemBaseWithType::Out:
|
|
Packit Service |
b98cfc |
type = CON_IO_OUT;
|
|
Packit Service |
b98cfc |
io = ((StrOutput *)owner)->num();
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
case RSItemBaseWithType::FX:
|
|
Packit Service |
b98cfc |
type = CON_IO_FX;
|
|
Packit Service |
b98cfc |
io = ((StrFX *)owner)->num();
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
case RSItemBaseWithType::Patch:
|
|
Packit Service |
b98cfc |
if (!tmp->isOutput())
|
|
Packit Service |
b98cfc |
type = CON_IO_PIN;
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
type = CON_IO_POUT;
|
|
Packit Service |
b98cfc |
io = tmp->getIdx();
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
p = ((StrPatch *)owner)->num();
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
default:
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if (!i)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
ftype = type;
|
|
Packit Service |
b98cfc |
fio = io;
|
|
Packit Service |
b98cfc |
fp = p;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
ttype = type;
|
|
Packit Service |
b98cfc |
tio = io;
|
|
Packit Service |
b98cfc |
tp = p;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return Card->conAdd(multi, simple, ftype, fp, fio, ttype, tp, tio, id);
|
|
Packit Service |
b98cfc |
// FIXME - uprava strglobal - urobene inde
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::conDel(RSItemIO *from_io, int *id)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int io, p;
|
|
Packit Service |
b98cfc |
int type = 0;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
RSItemBaseWithType *owner;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
owner = (RSItemBaseWithType *)from_io->getOwner();
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
p = -1;
|
|
Packit Service |
b98cfc |
io = -1;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
switch (owner->type())
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
// only patch valid
|
|
Packit Service |
b98cfc |
case RSItemBaseWithType::Patch:
|
|
Packit Service |
b98cfc |
if (!from_io->isOutput())
|
|
Packit Service |
b98cfc |
type = CON_IO_PIN;
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
type = CON_IO_POUT;
|
|
Packit Service |
b98cfc |
io = from_io->getIdx();
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
p = ((StrPatch *)owner)->num();
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
default:
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return Card->conDel(type, p, io, id);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::load(LD10k1File *ld10k1file, StrPatch *before, StrPatch **loaded)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int bef = -1;
|
|
Packit Service |
b98cfc |
int loade, loade_id;
|
|
Packit Service |
b98cfc |
int retval;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if (before)
|
|
Packit Service |
b98cfc |
bef = before->num();
|
|
Packit Service |
b98cfc |
if ((retval = Card->load(ld10k1file, bef, &loade, &loade_id)) < 0)
|
|
Packit Service |
b98cfc |
return retval;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrPatch *p = NULL;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if ((retval = actualizePatch(loade_id, loade, ld10k1file->getPatchName(), &p)) < 0)
|
|
Packit Service |
b98cfc |
return retval;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
UsedItems.append(p);
|
|
Packit Service |
b98cfc |
updatePatchesOrder();
|
|
Packit Service |
b98cfc |
AutoArange(&UsedItems);
|
|
Packit Service |
b98cfc |
*loaded = p;
|
|
Packit Service |
b98cfc |
return retval;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::unload(StrPatch *p)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int retval;
|
|
Packit Service |
b98cfc |
if ((retval = Card->unload(p->num())) < 0)
|
|
Packit Service |
b98cfc |
return retval;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// FIXME - odmaz aj prepojenia
|
|
Packit Service |
b98cfc |
UsedItems.remove(p);
|
|
Packit Service |
b98cfc |
Patches.remove(p);
|
|
Packit Service |
b98cfc |
updatePatchesOrder();
|
|
Packit Service |
b98cfc |
return retval;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::clearDSP(void)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int retval;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if ((retval = Card->clearDSP()) < 0)
|
|
Packit Service |
b98cfc |
return retval;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
clear();
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
void StrGlobal::destroyLink(StrLink *l)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
UsedItems.remove(l);
|
|
Packit Service |
b98cfc |
l->disconnectAll();
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// delete not needed - autodelete
|
|
Packit Service |
b98cfc |
Links.remove(l);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::disconnectFromLink(RSItemIO *io)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrLink *link = io->getConnectedTo();
|
|
Packit Service |
b98cfc |
if (link)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int idx = link->findRoute(io);
|
|
Packit Service |
b98cfc |
int conn_id;
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
if((err = conDel(io, &conn_id)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
link->setRoutePoint(idx, NULL);
|
|
Packit Service |
b98cfc |
if (conn_id < 0 || !link->isValid())
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
destroyLink(link);
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
link->calcSize();
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::actualizeLink(int id, StrLink **out)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
CardParamPointInfo point;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
err = Card->getPointInfo(id, &point);
|
|
Packit Service |
b98cfc |
if (err == LD10K1_ERR_UNKNOWN_POINT)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
// FIXME - probably not exists - remove
|
|
Packit Service |
b98cfc |
StrLink *delLink = findLinkById(id);
|
|
Packit Service |
b98cfc |
if (delLink)
|
|
Packit Service |
b98cfc |
destroyLink(delLink);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
*out = NULL;
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
if (err < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
RSItemIO *firstItem = NULL;
|
|
Packit Service |
b98cfc |
StrLink::LinkType newType = StrLink::LinkFX;
|
|
Packit Service |
b98cfc |
switch(point.type)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
case CON_IO_FX:
|
|
Packit Service |
b98cfc |
newType = StrLink::LinkFX;
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrFX *ft = findFXByNum(point.io_idx);
|
|
Packit Service |
b98cfc |
if (ft)
|
|
Packit Service |
b98cfc |
firstItem = ft->getIO(true, 0);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
case CON_IO_IN:
|
|
Packit Service |
b98cfc |
newType = StrLink::LinkIn;
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrInput *in = findInputByNum(point.io_idx);
|
|
Packit Service |
b98cfc |
if (in)
|
|
Packit Service |
b98cfc |
firstItem = in->getIO(true, 0);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
case CON_IO_OUT:
|
|
Packit Service |
b98cfc |
newType = StrLink::LinkOut;
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrOutput *out = findOutputByNum(point.io_idx);
|
|
Packit Service |
b98cfc |
if (out)
|
|
Packit Service |
b98cfc |
firstItem = out->getIO(false, 0);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
case CON_IO_NORMAL:
|
|
Packit Service |
b98cfc |
newType = StrLink::LinkNormal;
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrLink *link = findLinkById(id);
|
|
Packit Service |
b98cfc |
if (link)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
bool actualized[POINTINFO_MAX_CONN_PER_POINT];
|
|
Packit Service |
b98cfc |
RSItemIO *newIOs[POINTINFO_MAX_CONN_PER_POINT];
|
|
Packit Service |
b98cfc |
unsigned int j;
|
|
Packit Service |
b98cfc |
unsigned int niosc = 0;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (j = 0; j < POINTINFO_MAX_CONN_PER_POINT; j++)
|
|
Packit Service |
b98cfc |
actualized[j] = false;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int r = 0;
|
|
Packit Service |
b98cfc |
if (firstItem)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
actualized[r] = true;
|
|
Packit Service |
b98cfc |
((RSItemBaseWithType *)firstItem->getOwner())->setFlagUsed(true);
|
|
Packit Service |
b98cfc |
r++;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// actualize current
|
|
Packit Service |
b98cfc |
for (j = 0; j < point.conn_count; j++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
RSItemIO *io = findPatchIO(point.io_type[j], point.patch[j], point.io[j]);
|
|
Packit Service |
b98cfc |
((RSItemBaseWithType *)io->getOwner())->setFlagUsed(true);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// find io
|
|
Packit Service |
b98cfc |
int rf = link->findRoute(io);
|
|
Packit Service |
b98cfc |
if (rf >= 0)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
actualized[rf] = true;
|
|
Packit Service |
b98cfc |
link->setRoutePoint(rf, io);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
newIOs[niosc++] = io;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// delete old
|
|
Packit Service |
b98cfc |
for (j = 0; j < POINTINFO_MAX_CONN_PER_POINT; j++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (!actualized[j])
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
link->setRoutePoint(j, NULL);
|
|
Packit Service |
b98cfc |
link->clearRoutesPoints(j);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// add new
|
|
Packit Service |
b98cfc |
int l = 0;
|
|
Packit Service |
b98cfc |
for (j = 0; j < niosc; j++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
for (; l < POINTINFO_MAX_CONN_PER_POINT; l++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (!link->getRoutePoint(l))
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
link->setRoutePoint(l, newIOs[j]);
|
|
Packit Service |
b98cfc |
break;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
link->setFlagChanged(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
link = new StrLink(id, newType);
|
|
Packit Service |
b98cfc |
int r = 0;
|
|
Packit Service |
b98cfc |
if (firstItem)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
link->setRoutePoint(r++, firstItem);
|
|
Packit Service |
b98cfc |
((RSItemBaseWithType *)firstItem->getOwner())->setFlagUsed(true);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
unsigned int j = 0;
|
|
Packit Service |
b98cfc |
for (j = 0; j < point.conn_count; j++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
RSItemIO *io = findPatchIO(point.io_type[j], point.patch[j], point.io[j]);
|
|
Packit Service |
b98cfc |
((RSItemBaseWithType *)io->getOwner())->setFlagUsed(true);
|
|
Packit Service |
b98cfc |
link->setRoutePoint(r++, io);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
link->setFlagNew(true);
|
|
Packit Service |
b98cfc |
Links.append(link);
|
|
Packit Service |
b98cfc |
UsedItems.append(link);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
link->setFlagUsed(true);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
*out = link;
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
void StrGlobal::updatePatchesOrder(void)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
CardParamPatchInfo **pi;
|
|
Packit Service |
b98cfc |
int i, cnt;
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if ((err = Card->getPatchesInfo(&pi, &cnt)) < 0)
|
|
Packit Service |
b98cfc |
return;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (i = 0; i < cnt; i++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrPatch *p = findPatchById(pi[i]->id);
|
|
Packit Service |
b98cfc |
if (p)
|
|
Packit Service |
b98cfc |
p->setOrder(i);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (i = 0; i < cnt; i++)
|
|
Packit Service |
b98cfc |
delete pi[i];
|
|
Packit Service |
b98cfc |
delete pi;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
RSItemIO *StrGlobal::findPatchIO(bool out, int pid, int ionum)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (pid < 0 || ionum < 0)
|
|
Packit Service |
b98cfc |
return NULL;
|
|
Packit Service |
b98cfc |
StrPatch *p = findPatchById(pid);
|
|
Packit Service |
b98cfc |
if (!p)
|
|
Packit Service |
b98cfc |
return NULL;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return p->getIO(out, ionum);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::deleteOneLink(StrLink *l)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (int i = 0; i < l->getMaxRoute(); i++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
RSItemIO *io = l->getRoutePoint(i);
|
|
Packit Service |
b98cfc |
if (io)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
RSItemBaseWithType *owner = (RSItemBaseWithType *)io->getOwner();
|
|
Packit Service |
b98cfc |
if (owner->type() == RSItemBaseWithType::Patch)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
// only patch can be disconnected
|
|
Packit Service |
b98cfc |
int conn_id;
|
|
Packit Service |
b98cfc |
if((err = conDel(io, &conn_id)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
if (conn_id < 0)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
destroyLink(l);
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::deleteOneFX(StrFX *fx)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
RSItemIO *io = fx->getIO(true, 0);
|
|
Packit Service |
b98cfc |
if (io)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrLink *l = io->getConnectedTo();
|
|
Packit Service |
b98cfc |
if (l)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if ((err = deleteOneLink(l)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
UsedItems.remove(fx);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// delete not needed - autodelete
|
|
Packit Service |
b98cfc |
FXs.remove(fx);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::deleteOneIn(StrInput *in)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
RSItemIO *io = in->getIO(true, 0);
|
|
Packit Service |
b98cfc |
if (io)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrLink *l = io->getConnectedTo();
|
|
Packit Service |
b98cfc |
if (l)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if ((err = deleteOneLink(l)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
UsedItems.remove(in);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// delete not needed - autodelete
|
|
Packit Service |
b98cfc |
Inputs.remove(in);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::deleteOneOut(StrOutput *out)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
RSItemIO *io = out->getIO(false, 0);
|
|
Packit Service |
b98cfc |
if (io)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrLink *l = io->getConnectedTo();
|
|
Packit Service |
b98cfc |
if (l)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if ((err = deleteOneLink(l)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
UsedItems.remove(out);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// delete not needed - autodelete
|
|
Packit Service |
b98cfc |
Outputs.remove(out);
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::deleteOnePatch(StrPatch *p)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
int z;
|
|
Packit Service |
b98cfc |
int j;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// store all conn ids
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
QValueList <int> actIds;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
actIds.clear();
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
for (z = 0; z < 2; z++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
for (j = 0; j < p->getMaxIOIdx(z); j++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
RSItemIO *io = p->getIO(z, j);
|
|
Packit Service |
b98cfc |
if (io)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrLink *l = io->getConnectedTo();
|
|
Packit Service |
b98cfc |
if (l && actIds.findIndex(l->id()) < 0)
|
|
Packit Service |
b98cfc |
actIds.append(l->id());
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if ((err = unload(p)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// actualize links
|
|
Packit Service |
b98cfc |
for (unsigned int i = 0; i < actIds.count(); i++)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
StrLink *link = NULL;
|
|
Packit Service |
b98cfc |
int aid = actIds[i];
|
|
Packit Service |
b98cfc |
if ((err = actualizeLink(aid, &link)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
if (link)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if (!link->isValid())
|
|
Packit Service |
b98cfc |
destroyLink(link);
|
|
Packit Service |
b98cfc |
else
|
|
Packit Service |
b98cfc |
//wasn't error
|
|
Packit Service |
b98cfc |
link->calcSize();
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::deleteOneItem(RSItemBaseWithType *item)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
switch (item->type())
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
case RSItemBaseWithType::In:
|
|
Packit Service |
b98cfc |
return deleteOneIn((StrInput *)item);
|
|
Packit Service |
b98cfc |
case RSItemBaseWithType::Out:
|
|
Packit Service |
b98cfc |
return deleteOneOut((StrOutput *)item);
|
|
Packit Service |
b98cfc |
case RSItemBaseWithType::FX:
|
|
Packit Service |
b98cfc |
return deleteOneFX((StrFX *)item);
|
|
Packit Service |
b98cfc |
case RSItemBaseWithType::Link:
|
|
Packit Service |
b98cfc |
return deleteOneLink((StrLink *)item);
|
|
Packit Service |
b98cfc |
case RSItemBaseWithType::Patch:
|
|
Packit Service |
b98cfc |
return deleteOnePatch((StrPatch *)item);
|
|
Packit Service |
b98cfc |
default:
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::deleteAllSelected()
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
int err;
|
|
Packit Service |
b98cfc |
// through all selected
|
|
Packit Service |
b98cfc |
RSItemBaseWithType *item;
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// first connections
|
|
Packit Service |
b98cfc |
QPtrListIterator <RSItemBaseWithType> it1(UsedItems);
|
|
Packit Service |
b98cfc |
while ((item = it1.current()) != 0 )
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
++it1;
|
|
Packit Service |
b98cfc |
if (item->flagSelected() && item->type() == RSItemBaseWithType::Link)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if ((err = deleteOneLink((StrLink *)item)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
// everything others
|
|
Packit Service |
b98cfc |
QPtrListIterator <RSItemBaseWithType> it2(UsedItems);
|
|
Packit Service |
b98cfc |
while ((item = it2.current()) != 0 )
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
++it2;
|
|
Packit Service |
b98cfc |
if (item->flagSelected())
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
if ((err = deleteOneItem(item)) < 0)
|
|
Packit Service |
b98cfc |
return err;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
return 0;
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
QString StrGlobal::errorStr(int err)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
return Card->errorStr(err);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::get(int patch_num, LD10k1File **dc)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
return Card->get(patch_num, dc);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::getDspConfig(LD10k1DspFile **dc)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
return Card->getDspConfig(dc);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
int StrGlobal::putDspConfig(LD10k1DspFile *dc)
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
return Card->putDspConfig(dc);
|
|
Packit Service |
b98cfc |
}
|
|
Packit Service |
b98cfc |
|
|
Packit Service |
b98cfc |
StrCardGlobal::StrCardGlobal()
|
|
Packit Service |
b98cfc |
{
|
|
Packit Service |
b98cfc |
// cards
|
|
Packit Service |
b98cfc |
Cards.setAutoDelete( TRUE ); // the list owns the objects
|
|
Packit Service |
b98cfc |
}
|