コード例 #1
0
void QLCInputProfile_Test::load()
{
    QBuffer buffer;
    buffer.open(QIODevice::WriteOnly | QIODevice::Text);
    QXmlStreamWriter xmlWriter(&buffer);

    xmlWriter.writeStartDocument();
    xmlWriter.writeDTD("<!DOCTYPE InputProfile>");
    xmlWriter.writeStartElement("InputProfile");
    xmlWriter.writeTextElement("Manufacturer", "Behringer");
    xmlWriter.writeTextElement("Model", "BCF2000");
    xmlWriter.writeStartElement("Channel");
    xmlWriter.writeAttribute("Number", "492");
    xmlWriter.writeTextElement("Name", "Foobar");
    xmlWriter.writeTextElement("Type", "Slider");
    xmlWriter.writeEndDocument();
    xmlWriter.setDevice(NULL);
    buffer.close();

    buffer.open(QIODevice::ReadOnly | QIODevice::Text);
    QXmlStreamReader xmlReader(&buffer);

    QLCInputProfile ip;
    QVERIFY(ip.loadXML(xmlReader) == true);
    QVERIFY(ip.manufacturer() == "Behringer");
    QVERIFY(ip.model() == "BCF2000");
    QVERIFY(ip.channels().size() == 1);
    QVERIFY(ip.channel(492) != NULL);
    QVERIFY(ip.channel(492)->name() == "Foobar");
    QVERIFY(ip.channel(492)->type() == QLCInputChannel::Slider);
}
コード例 #2
0
void SelectInputChannel::fillTree()
{
    QLCInputChannel* channel;
    QTreeWidgetItem* uniItem;
    QTreeWidgetItem* chItem;
    QLCInputProfile* profile;
    quint32 uni;
    InputPatch* patch;

    /* Add an option to select no input at all */
    chItem = new QTreeWidgetItem(m_tree);
    chItem->setText(KColumnName, KInputNone);
    chItem->setText(KColumnUniverse, QString("%1")
                    .arg(InputMap::invalidUniverse()));
    chItem->setText(KColumnChannel, QString("%1")
                    .arg(KInputChannelInvalid));

    for (uni = 0; uni < _app->inputMap()->universes(); uni++)
    {
        /* Get the patch associated to the current universe */
        patch = _app->inputMap()->patch(uni);
        Q_ASSERT(patch != NULL);

        /* Make an item for each universe */
        uniItem = new QTreeWidgetItem(m_tree);
        updateUniverseItem(uniItem, uni, patch);

        if (patch->plugin() != NULL && patch->input() != KInputInvalid)
        {
            /* Add a manual option to each patched universe */
            chItem = new QTreeWidgetItem(uniItem);
            updateChannelItem(chItem, uni, NULL, NULL);
        }

        /* Add known channels from profile (if any) */
        profile = patch->profile();
        if (profile != NULL)
        {
            QMapIterator <quint32, QLCInputChannel*>
            it(profile->channels());
            while (it.hasNext() == true)
            {
                channel = it.next().value();
                Q_ASSERT(channel != NULL);

                chItem = new QTreeWidgetItem(uniItem);
                updateChannelItem(chItem, uni, channel,
                                  profile);
            }
        }
    }

    /* Listen to item changed signals so that we can catch user's
       manual input for <...> nodes. Connect AFTER filling the tree
       so all the initial item->setText()'s won't get caught here. */
    connect(m_tree, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
            this, SLOT(slotItemChanged(QTreeWidgetItem*,int)));
}
コード例 #3
0
void QLCInputProfile_Test::save()
{
    QLCInputProfile ip;
    ip.setManufacturer("TestManufacturer");
    ip.setModel("TestModel");

    QLCInputChannel* ich1 = new QLCInputChannel();
    ich1->setName("Channel 1");
    ip.insertChannel(0, ich1);

    QLCInputChannel* ich2 = new QLCInputChannel();
    ich2->setName("Channel 2");
    ip.insertChannel(5, ich2);

    QLCInputChannel* ich3 = new QLCInputChannel();
    ich3->setName("Channel 3");
    ip.insertChannel(2, ich3);

    QString path("test.qxi");
    QVERIFY(ip.saveXML(path) == true);

#if !defined(WIN32) && !defined(Q_OS_WIN)
    QFile::Permissions perm = QFile::permissions(path);
    QFile::setPermissions(path, 0);
    QVERIFY(ip.saveXML(path) == false);
    QFile::setPermissions(path, perm);
#endif

    QLCInputProfile* prof = QLCInputProfile::loader(path);
    QVERIFY(prof != NULL);
    QCOMPARE(prof->manufacturer(), ip.manufacturer());
    QCOMPARE(prof->model(), ip.model());
    QCOMPARE(prof->name(), ip.name());
    QCOMPARE(prof->channels().size(), ip.channels().size());
    QCOMPARE(prof->channels()[0]->name(), ich1->name());
    QCOMPARE(prof->channels()[2]->name(), ich3->name());
    QCOMPARE(prof->channels()[5]->name(), ich2->name());

    QVERIFY(QFile::remove(path) == true);
    delete prof;
}
コード例 #4
0
void QLCInputProfile_Test::remapChannel()
{
	QLCInputProfile ip;

	QLCInputChannel* ich1 = new QLCInputChannel();
	ich1->setName("Foobar");
	ip.insertChannel(0, ich1);
	QVERIFY(ip.channel(0) == ich1);

	QLCInputChannel* ich2 = new QLCInputChannel();
	ip.insertChannel(5, ich2);
	QVERIFY(ip.channel(0) == ich1);
	QVERIFY(ip.channel(5) == ich2);

	QVERIFY(ip.remapChannel(ich1, 9000) == true);
	QVERIFY(ip.channel(0) == NULL);
	QVERIFY(ip.channel(5) == ich2);
	QVERIFY(ip.channel(9000) == ich1);
	QVERIFY(ip.channel(9000)->name() == "Foobar");

	QVERIFY(ip.remapChannel(NULL, 9000) == false);
	QVERIFY(ip.channels().size() == 2);
	QVERIFY(ip.channel(0) == NULL);
	QVERIFY(ip.channel(5) == ich2);
	QVERIFY(ip.channel(9000) == ich1);
	QVERIFY(ip.channel(9000)->name() == "Foobar");

	QLCInputChannel* ich3 = new QLCInputChannel();
	QVERIFY(ip.remapChannel(ich3, 5) == false);
	QVERIFY(ip.channels().size() == 2);
	QVERIFY(ip.channel(0) == NULL);
	QVERIFY(ip.channel(5) == ich2);
	QVERIFY(ip.channel(9000) == ich1);
	QVERIFY(ip.channel(9000)->name() == "Foobar");
	
	delete ich3;
}
コード例 #5
0
void QLCInputProfile_Test::loader()
{
    QLCInputProfile* prof = QLCInputProfile::loader("foobar");
    QVERIFY(prof == NULL);

    prof = QLCInputProfile::loader("broken.xml");
    QVERIFY(prof == NULL);

    QString path(PROFILEDIR "Generic-MIDI.qxi");
    prof = QLCInputProfile::loader(path);
    QVERIFY(prof != NULL);
    QCOMPARE(prof->path(), path);
    QCOMPARE(prof->name(), QString("Generic MIDI"));
    QCOMPARE(prof->channels().size(), 256);
}
コード例 #6
0
void QLCInputProfile_Test::copy()
{
    QLCInputProfile ip;
    ip.setManufacturer("Behringer");
    ip.setModel("BCF2000");

    QLCInputChannel* ich1 = new QLCInputChannel();
    ich1->setName("Channel 1");
    ip.insertChannel(0, ich1);

    QLCInputChannel* ich2 = new QLCInputChannel();
    ich2->setName("Channel 2");
    ip.insertChannel(5, ich2);

    QLCInputChannel* ich3 = new QLCInputChannel();
    ich3->setName("Channel 3");
    ip.insertChannel(2, ich3);

    QLCInputChannel* ich4 = new QLCInputChannel();
    ich4->setName("Channel 4");
    ip.insertChannel(9000, ich4);

    QLCInputProfile copy = ip;
    QVERIFY(copy.manufacturer() == "Behringer");
    QVERIFY(copy.model() == "BCF2000");

    QVERIFY(copy.channels().size() == 4);

    /* Verify that it's a deep copy */
    QVERIFY(copy.channel(0) != ich1);
    QVERIFY(copy.channel(0) != NULL);
    QVERIFY(copy.channel(0)->name() == "Channel 1");

    QVERIFY(copy.channel(5) != ich2);
    QVERIFY(copy.channel(5) != NULL);
    QVERIFY(copy.channel(5)->name() == "Channel 2");

    QVERIFY(copy.channel(2) != ich3);
    QVERIFY(copy.channel(2) != NULL);
    QVERIFY(copy.channel(2)->name() == "Channel 3");

    QVERIFY(copy.channel(9000) != ich4);
    QVERIFY(copy.channel(9000) != NULL);
    QVERIFY(copy.channel(9000)->name() == "Channel 4");
}
コード例 #7
0
void QLCInputProfile_Test::channelNumber()
{
    QLCInputProfile ip;
    QVERIFY(ip.channels().size() == 0);

    QLCInputChannel* ich1 = new QLCInputChannel();
    ip.insertChannel(0, ich1);

    QLCInputChannel* ich2 = new QLCInputChannel();
    ip.insertChannel(6510, ich2);

    QLCInputChannel* ich3 = new QLCInputChannel();
    ip.insertChannel(5, ich3);

    QCOMPARE(ip.channelNumber(NULL), InputMap::invalidChannel());
    QCOMPARE(ip.channelNumber(ich1), quint32(0));
    QCOMPARE(ip.channelNumber(ich2), quint32(6510));
    QCOMPARE(ip.channelNumber(ich3), quint32(5));
}
コード例 #8
0
void QLCInputProfile_Test::addChannel()
{
	QLCInputProfile ip;

	QLCInputChannel* ich1 = new QLCInputChannel();
	ip.insertChannel(0, ich1);
	QVERIFY(ip.channel(0) == ich1);
	QVERIFY(ip.channels().size() == 1);

	/* Shouldn't overwrite the existing mapping */
	QLCInputChannel* ich2 = new QLCInputChannel();
	ip.insertChannel(0, ich2);
	QVERIFY(ip.channel(0) == ich1);

	ip.insertChannel(5, ich2);
	QVERIFY(ip.channel(0) == ich1);
	QVERIFY(ip.channel(1) == NULL);
	QVERIFY(ip.channel(2) == NULL);
	QVERIFY(ip.channel(3) == NULL);
	QVERIFY(ip.channel(4) == NULL);
	QVERIFY(ip.channel(5) == ich2);
}
コード例 #9
0
ファイル: vcslider.cpp プロジェクト: roberts-sandbox/qlcplus
bool VCSlider::isButton(quint32 universe, quint32 channel)
{
    InputPatch* patch = NULL;
    QLCInputProfile* profile = NULL;
    QLCInputChannel* ch = NULL;

    patch = m_doc->inputMap()->patch(universe);
    if (patch != NULL)
    {
        profile = patch->profile();
        if (profile != NULL)
        {
            ch = profile->channels()[channel];
            if (ch != NULL)
            {
                return (ch->type() == QLCInputChannel::Button);
            }
        }
    }

    return false;
}
コード例 #10
0
void QLCInputProfile_Test::load()
{
	QDomDocument doc;

	QDomElement profile = doc.createElement("InputProfile");
	QDomElement manuf = doc.createElement("Manufacturer");
	QDomText manufText = doc.createTextNode("Behringer");
	manuf.appendChild(manufText);
	profile.appendChild(manuf);
	QDomElement model = doc.createElement("Model");
	QDomText modelText = doc.createTextNode("BCF2000");
	model.appendChild(modelText);
	profile.appendChild(model);
	doc.appendChild(profile);

	QDomElement ch = doc.createElement("Channel");
	ch.setAttribute("Number", 492);
	profile.appendChild(ch);

	QDomElement name = doc.createElement("Name");
	QDomText nameText = doc.createTextNode("Foobar");
	name.appendChild(nameText);
	ch.appendChild(name);

	QDomElement type = doc.createElement("Type");
	QDomText typeText = doc.createTextNode("Slider");
	type.appendChild(typeText);
	ch.appendChild(type);

	QLCInputProfile ip;
	QVERIFY(ip.loadXML(&doc) == true);
	QVERIFY(ip.manufacturer() == "Behringer");
	QVERIFY(ip.model() == "BCF2000");
	QVERIFY(ip.channels().size() == 1);
	QVERIFY(ip.channel(492) != NULL);
	QVERIFY(ip.channel(492)->name() == "Foobar");
	QVERIFY(ip.channel(492)->type() == QLCInputChannel::Slider);
}
コード例 #11
0
void QLCInputProfile_Test::channels()
{
	QLCInputProfile ip;
	QVERIFY(ip.channels().size() == 0);

	QLCInputChannel* ich1 = new QLCInputChannel();
	ip.insertChannel(0, ich1);

	QLCInputChannel* ich2 = new QLCInputChannel();
	ip.insertChannel(5, ich2);

	QVERIFY(ip.channels().size() == 2);
	QVERIFY(ip.channels().contains(0) == true);
	QVERIFY(ip.channels().contains(1) == false);
	QVERIFY(ip.channels().contains(2) == false);
	QVERIFY(ip.channels().contains(3) == false);
	QVERIFY(ip.channels().contains(4) == false);
	QVERIFY(ip.channels().contains(5) == true);
	QVERIFY(ip.channels()[0] == ich1);
	QVERIFY(ip.channels()[5] == ich2);
}