Exemplo n.º 1
0
DomainInfoDock::DomainInfoDock(QWidget *parent) :
	EditorDock(parent),
	ui(new Ui::DomainInfoDock)
{
    ui->setupUi(this);

	//Resize the edit button so that it fits the icon button above
	ui->editButton->setMaximumWidth(ui->iconButton->geometry().width());

	//Update rules whenever they change
	ConfigurationStack &stack=ConfigurationStack::instance();
	connect(&stack, SIGNAL(domainChanged(QString,QString)), this, SLOT(onDomainChanged(QString,QString)));
	connect(&stack, SIGNAL(configurationChanged()), this, SLOT(onProgramsOrRulesChanged()));
	connect(&stack, SIGNAL(allRulesChanged()), this, SLOT(onProgramsOrRulesChanged()));
	connect(&stack, SIGNAL(loopsChanged()), this, SLOT(onProgramsOrRulesChanged()));
	connect(&stack, SIGNAL(rulesChanged()), this, SLOT(onProgramsOrRulesChanged()));
	connect(&stack, SIGNAL(programChanged(QString,QString)), this, SLOT(onProgramsOrRulesChanged()));
	connect(&stack, SIGNAL(warningsChanged()), this, SLOT(onProgramsOrRulesChanged()));

	//Connect the edit button
	connect(ui->editButton, SIGNAL(clicked()), this, SLOT(onEditClicked()));

	//Forward domain/program activated signals to parents
	connect(ui->loopsTreeWidget, SIGNAL(programActivated(QString)), this, SIGNAL(programActivated(QString)));
	connect(ui->loopsTreeWidget, SIGNAL(ruleActivated(int)), this, SIGNAL(ruleActivated(int)));
	connect(ui->incomingTreeWidget, SIGNAL(domainActivated(QString)), this, SIGNAL(domainActivated(QString)));
	connect(ui->incomingTreeWidget, SIGNAL(programActivated(QString)), this, SIGNAL(programActivated(QString)));
	connect(ui->incomingTreeWidget, SIGNAL(ruleActivated(int)), this, SIGNAL(ruleActivated(int)));
	connect(ui->leavingTreeWidget, SIGNAL(domainActivated(QString)), this, SIGNAL(domainActivated(QString)));
	connect(ui->leavingTreeWidget, SIGNAL(programActivated(QString)), this, SIGNAL(programActivated(QString)));
	connect(ui->leavingTreeWidget, SIGNAL(ruleActivated(int)), this, SIGNAL(ruleActivated(int)));
}
void MidiProgramInBlock::setProgram(int value) {
    if (value == m_program) return;
    m_program = limit(1, value, 128);
	m_outputNode->setValue(0.0);
	m_programIsActive = false;
	emit programIsActiveChanged();
    emit programChanged();
}
int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QMainWindow::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: programChanged(); break;
        case 1: configureProgramClicked(); break;
        case 2: environmentChanged(); break;
        case 3: createEnvironmentClicked(); break;
        case 4: configureEnvironmentClicked(); break;
        case 5: configureSimulationClicked(); break;
        case 6: exitClicked(); break;
        case 7: runClicked(); break;
        default: ;
        }
        _id -= 8;
    }
    return _id;
}
Exemplo n.º 4
0
void MidiInterface::midiCallback(double deltatime, std::vector< unsigned char > *message)
{
    (void)deltatime;
    unsigned char command = message->at(0);
    quint8 channel = command & 0x0f;
    if ((command&0xf0) != 0xf0) // if it is NOT a System message
    {
        command &= 0xf0; // It removes channel from MIDI message
    }

    switch(command) {
    case MIDI_CVM_NOTE_OFF:
        if(_acceptNoteChange)
            emit noteChanged(_id, quint8 (channel), quint8 (message->at(1)), false, quint8(message->at(2)));
        break;
    case MIDI_CVM_NOTE_ON:
        if(_acceptNoteChange)
            emit noteChanged(_id, quint8 (channel), quint8 (message->at(1)), true, quint8(message->at(2)));
        break;
    case MIDI_CVM_CONTROL_CHANGE:
        if(_acceptControlChange)
            emit controlChanged(_id, quint8 (channel), quint8 (message->at(1)), quint8(message->at(2)));
        break;
    case MIDI_CVM_PROGRAM_CHANGE:
        if(_acceptProgramChange)
            emit programChanged(_id, quint8 (channel), quint8 (message->at(1)));
        break;
    case MIDI_SRTM_CLOCK: emit clockReceived(); break;
    case MIDI_SRTM_STOP: emit stopReceived(); break;
    case MIDI_SRTM_START: emit startReceived(); break;
    case MIDI_SRTM_CONTINUE: emit continueReceived(); break;
    case MIDI_SCM_SYSEX:
    {
        bool sysex_reconized = false;
        if (message->size() > 13)
        {
            if((message->at(1) == SYSEX_NON_REALTIME_MESSAGE)
                    && (message->at(3) == SYSEX_GENERAL_INFORMATION)
                    && (message->at(4) == SYSEX_IDENTITY_REPLY))
            {
                sysex_reconized = true;
                // Grab Manufacturer ID
                quint32 manufacturer_id;
                manufacturer_id = message->at(5);
                if(manufacturer_id == 0) // if use a long manufacturer ID
                {
                    manufacturer_id = message->at(6) << 16;
                    manufacturer_id = message->at(7) << 8;
                }

                QString description;
                switch (manufacturer_id)
                {
                case MIDI_MANUFACTURER_ID__KORG:
                {
                    description += "Manufacturer: Korg\n";
                    quint16 family_id = message->at(6) | (message->at(7) << 8);
                    switch(family_id)
                    {
                    case MIDI_KORG_FAMILY_ID__NANOKONTROL:
                        description += "Model: nanoKontrol\n";
                        break;
                    case MIDI_KORG_FAMILY_ID__NANOKONTROL2:
                        description += "Model: nanoKontrol2\n";
                        break;
                    default:
                        break;
                    }
                    quint16 minor_version = message->at(10) | (message->at(11) << 8);
                    quint16 major_version = message->at(12) | (message->at(13) << 8);
                    description += QString("Version: %1.%2\n").arg(major_version).arg(minor_version);
                    qDebug() << Q_FUNC_INFO << description.replace('\n', ' ');
                    _description = description;
                }
                    break;
                default:
                    qDebug() << Q_FUNC_INFO
                             << "Unknown MIDI Manufacturer ID:" << manufacturer_id;
                    break;
                }
            }
        }
        else if (message->size() == 11)
        {
            // HACK to use Korg nanoKontrol scene button in order to change master view
            if((message->at(1) == KORG_SYSEX_HEADER) && (message->at(8) == KORG_SYSEX__SCENE_CHANGED))
            {
                // message->at(2) == 0x40 // 4g where g is Global Channel
                // Software Project (nanoKontrol 1) (4 bytes)
                // message->at(3) == 0x00
                // message->at(4) == 0x01
                // message->at(5) == 0x04
                // message->at(6) == 0x00

                // message->at(7) == 0x5f // Data Dump Command  (Host<-Controller, 2Bytes Format)
                // message->at(8) == 0x4f // Not documented but seems to be "Screen changed"
                // message->at(9) stores scene ID (0x00 -> Scene 1, ... , 0x03 -> Scene 4

                // This SysEx is emitted by Korg nanoKontrol 1 when scene changed
                sysex_reconized = true;
                emit programChanged(_id, quint8 (channel), quint8 (message->at(9)));
            }
        }

        if(!sysex_reconized)
        {
            QString msg;
            for(uint i=0; i<message->size(); ++i)
            {
                msg += QString("%1 ").arg(message->at(i), 0, 16);
            }
            qDebug() << Q_FUNC_INFO
                     << "Unknown sysex received: size=" << message->size() << "content=[" << msg << "]";
            //Q_ASSERT(false);
        }
    }
        break;
    default:
        qDebug() << Q_FUNC_INFO
                 << QString("no handler for: %1 (%2)").arg(command).arg(command, 0, 16)
                 << "message size:" << message->size()
                 << "deltatime:" << deltatime;
    }
}