void AmBankChangeView::BuildMenu(const AmTrack* track, BMenu* menu) const { mPreferredWidth = 20; AmFilterHolderI* holder = track->Filter(DESTINATION_PIPELINE); if (holder && holder->Filter() ) { ArpCRef<AmDeviceI> device = holder->Filter()->Device(); if (device) { uint32 count = device->CountBanks(); for (uint32 k = 0; k < count; k++) { ArpCRef<AmBankI> bank = device->Bank(k); if (bank) { BString label; get_bank_label(bank, k, label); BMessage* msg = new BMessage(BANK_MSG); BMenuItem* item = new BMenuItem(label.String(), msg); if (msg && item) { msg->AddInt32("number", k); menu->AddItem(item); float w = StringWidth(label.String() ) + 20; if (w > mPreferredWidth) mPreferredWidth = w; } } } } } }
void AmProgramChangeView::BuildMenu(const AmTrack* track, BMenu* menu, int32 oldIndex) const { ArpCRef<AmBankI> bank = 0; AmFilterHolderI* holder = track->Filter(DESTINATION_PIPELINE); uint32 count = 128; uint32 firstNumber = 0; if (holder && holder->Filter() ) { ArpCRef<AmDeviceI> device = holder->Filter()->Device(); if (device) { bank = device->Bank(BankNumber() ); if (bank) { count = bank->CountPatches(); firstNumber = bank->FirstPatchNumber(); } } } for (uint32 k = 0; k < count; k++) { BMessage* msg = new BMessage(PROGRAM_MSG); BString label; BString patchName; label << k + firstNumber; if (bank) patchName = bank->PatchName(k); if (patchName.Length() > 0) label << " - " << patchName.String(); BMenuItem* item = new BMenuItem(label.String(), msg); if (msg && item) { msg->AddInt32("number", (int32)k); menu->AddItem(item); if (int32(k) == oldIndex) item->SetMarked(true); } } menu->SetTargetForItems(this); }
void _AmControlMenu::Build(const AmTrack* track) { AmFilterHolderI* holder = track->Filter(DESTINATION_PIPELINE); ArpCRef<AmDeviceI> device = NULL; if (holder && holder->Filter()) device = holder->Filter()->Device(); RemoveItems(0, CountItems(), true); for (uint32 k = 0; k < AM_CONTROLLER_SIZE; k++) { BString cn; if (device) cn = device->ControlName(k, true); if (cn.Length() < 1) cn << k; const char* label = NULL; if (cn.Length() > 0) label = cn.String(); if (!label) label = am_control_name(k); if (!label) { cn << k; label = cn.String(); } AddControlItem(k, label); } }