Example #1
0
void Display::kaossUpdate(){
	u8		x, y;
	bool	z;
	u8		line, row;
	u8*		brick;
	u8		spriteId;
	bool	surroundingBrick;

	x = midi->getCcValue(Cfg::kaoss.x[Cfg::kaoss.bank]) / 16;
	y = 7 - (midi->getCcValue(Cfg::kaoss.y[Cfg::kaoss.bank]) / 16);
	z = input->touch->press() == HELD;//midi->getCcValue(Cfg::kaoss.z[Cfg::kaoss.bank]) >= 64;

	for (row = 0; row < 8; ++row)
		for (line = 0; line < 8; ++line){
			brick		= &kaossBricksState[Cfg::kaoss.bank][row][line];
			spriteId	= row + 8*line;
			surroundingBrick = (line == y && (row == x-1 || row == x+1)) || ( row == x && (line == y-1 || line == y+1));
			if ((!z && row == x && line == y) || (z && surroundingBrick && (frame % 3) == 0))
				*brick = *brick + 2*(*brick == 0) + (*brick != 0 && *brick < 3);
			else if (frame % 6 == 0)
				*brick = *brick - (*brick > 0);
			setKaossSpriteFrame(spriteId, *brick);
		}
	kaossButtonsStatus();
	showBank(Cfg::kaoss.bank, 4);
}
Example #2
0
void Display::slidersUpdate(){
	bool change = false;
	if (Cfg::sliders.bank != Cfg::sliders.previousBank){
		sliders();
		Cfg::sliders.previousBank = Cfg::sliders.bank;
		change = true;
	}

	CCParam*	sliderCC;

	for (u8 s = 0; s < 16; ++s){
		sliderCC = &Cfg::sliders.ccs[Cfg::sliders.bank][s];
		if (Cfg::ccChangedVblank[(*sliderCC).channel][(*sliderCC).cc]){
			updateSliderUpMap(s);
			change = true;
		}
	}
	
	DC_FlushAll();
	dmaCopy(this->slidersBg2Map,			bgGetMapPtr(subbg2), 1536);
	if (change){
		DC_FlushAll();
		dmaCopy(this->slidersBg3Map,	bgGetMapPtr(subbg3), 1536);
	}
	showBank(Cfg::sliders.bank, 3);
}
void
MIDIInstrumentParameterPanel::updateBankComboBox()
{
    RG_DEBUG << "updateBankComboBox()";

    if (!getSelectedInstrument())
        return;

    MidiDevice *md =
            dynamic_cast<MidiDevice *>(getSelectedInstrument()->getDevice());
    if (!md) {
        std::cerr << "WARNING: MIDIInstrumentParameterPanel::updateBankComboBox(): No MidiDevice for Instrument " << getSelectedInstrument()->getId() << '\n';
        return;
    }

    int currentBank = -1;
    BankList banks;

    RG_DEBUG << "updateBankComboBox(): Variation type is " << md->getVariationType();

    if (md->getVariationType() == MidiDevice::NoVariations) {

        banks = md->getBanks(getSelectedInstrument()->isPercussion());

        // If there are banks to display, show the bank widgets.
        // Why not showBank(banks.size()>1)?  Because that would hide the
        // bank checkbox which would take away the user's ability to
        // enable/disable bank selects.  If we do away with the checkbox
        // in the future, we should re-evaluate this decision.
        showBank(!banks.empty());

        // Find the selected bank in the MIDI Device's bank list.
        for (unsigned int i = 0; i < banks.size(); ++i) {
            if (getSelectedInstrument()->getProgram().getBank().partialCompare(banks[i])) {
                currentBank = i;
                break;
            }
        }

    } else {

        // Usually in variation mode, the bank widgets will be hidden.
        // E.g. in GM2, the MSB for all banks is 121 with the variations
        // in the LSB numbered 0-9.  If, however, there were another
        // MSB, say 122, with some variations in the LSB, this code would
        // display the Bank combobox to allow selection of the MSB.

        // If the variations are in the LSB, then the banks are in the MSB
        // and vice versa.
        bool useMSB = (md->getVariationType() == MidiDevice::VariationFromLSB);

        MidiByteList bytes;

        if (useMSB) {
            bytes = md->getDistinctMSBs(getSelectedInstrument()->isPercussion());
        } else {
            bytes = md->getDistinctLSBs(getSelectedInstrument()->isPercussion());
        }

        // If more than one bank value is found, show the bank widgets.
        showBank(bytes.size() > 1);

        // Load "banks" with the banks and figure out currentBank.

        if (useMSB) {
            for (unsigned int i = 0; i < bytes.size(); ++i) {
                BankList bl = md->getBanksByMSB
                              (getSelectedInstrument()->isPercussion(), bytes[i]);
                RG_DEBUG << "updateBankComboBox(): Have " << bl.size() << " variations for MSB " << bytes[i];

                if (bl.size() == 0)
                    continue;
                if (getSelectedInstrument()->getMSB() == bytes[i]) {
                    currentBank = banks.size();
                }
                banks.push_back(bl[0]);
            }
        } else {
            for (unsigned int i = 0; i < bytes.size(); ++i) {
                BankList bl = md->getBanksByLSB
                              (getSelectedInstrument()->isPercussion(), bytes[i]);

                RG_DEBUG << "updateBankComboBox(): Have " << bl.size() << " variations for LSB " << bytes[i];

                if (bl.size() == 0)
                    continue;
                if (getSelectedInstrument()->getLSB() == bytes[i]) {
                    currentBank = banks.size();
                }
                banks.push_back(bl[0]);
            }
        }
    }

    // Populate the combobox with bank names.

    // If we need to repopulate m_bankComboBox
    if (banks != m_banks)
    {
        // Update the cache.
        m_banks = banks;

        // Copy from m_banks to m_bankComboBox.
        m_bankComboBox->clear();
        for (BankList::const_iterator i = m_banks.begin();
                i != m_banks.end(); ++i) {
            m_bankComboBox->addItem(QObject::tr(i->getName().c_str()));
        }
    }

    m_bankComboBox->setEnabled(getSelectedInstrument()->sendsBankSelect());

#if 0
// ??? This is a pretty nifty idea, but unfortunately, it requires
//     that we maintain a bogus combobox entry.  For now, we'll go
//     with the simpler "unselected" approach.

    // If the current bank was not found...
    if (currentBank < 0  &&  !banks.empty()) {
        // Format bank MSB:LSB and add to combobox.
        MidiBank bank = getSelectedInstrument()->getProgram().getBank();
        QString bankString = QString("%1:%2").arg(bank.getMSB()).arg(bank.getLSB());
        m_bankComboBox.addItem(bankString);
        currentBank = banks.size();
    }
#endif

    // If the bank wasn't in the Device, show the bank widgets so
    // the user can fix it if they want.
    if (currentBank == -1  &&  !banks.empty())
        showBank(true);

    // Display the current bank.
    m_bankComboBox->setCurrentIndex(currentBank);
}