void ChangeDisplay() { for (int i = 0; i < Length(notetops[0]); i++) { for (int j = 0; j < Length(notetops[0][0]); j++) { int k; switch (i) { case 0: k = (reverse)? Length(notetops[0][i]) - j - 2: j; break; case 1: k = (reverse)? Length(notetops[0][i]) - j - 1: j; break; case 2: k = (reverse)? Length(notetops[0][i]) - j - 2: j; break; } if (display[i][j] != NULL) { if (shownotes) { CFStringRef s = CFStringCreateWithCString(kCFAllocatorDefault, notetops[key][i][k], kCFStringEncodingMacRoman); HIViewSetText(display[i][j], s); CFRelease(s); } else HIViewSetText(display[i][j], CFSTR("")); if ((type == CHROMATIC) && (hilites[key][i][k] == true)) HIViewSetValue(display[i][j], true); else HIViewSetValue(display[i][j], false); } } } }
//----------------------------------------------------------------------------// int MacCEGuiRendererSelector::populateRendererMenu() { // get the menu from the popup MenuRef menu; GetControlData(d_rendererPopup, 0, kControlPopupButtonMenuRefTag, sizeof(menu), &menu, 0); int idx = 0; // Put items in the combobox for enabled renderers. if (d_rendererAvailability[OpenGLGuiRendererType]) { d_rendererTypes[idx++] = OpenGLGuiRendererType; AppendMenuItemTextWithCFString(menu, CFSTR("OpenGL Renderer"), 0, 0, 0); } if (d_rendererAvailability[IrrlichtGuiRendererType]) { d_rendererTypes[idx++] = IrrlichtGuiRendererType; AppendMenuItemTextWithCFString(menu, CFSTR("Irrlicht Renderer"), 0, 0, 0); } if (d_rendererAvailability[OgreGuiRendererType]) { d_rendererTypes[idx++] = OgreGuiRendererType; AppendMenuItemTextWithCFString(menu, CFSTR("Ogre Renderer"), 0, 0, 0); } if (d_rendererAvailability[DirectFBGuiRendererType]) { d_rendererTypes[idx++] = DirectFBGuiRendererType; AppendMenuItemTextWithCFString(menu, CFSTR("DirectFB Renderer"), 0, 0, 0); } HIViewSetMaximum(d_rendererPopup, CountMenuItems(menu)); HIViewSetValue(d_rendererPopup, 1); return idx; }
OSStatus KeyboardHandler(EventHandlerCallRef next, EventRef event, void *data) { UInt32 kind; UInt32 keyCode; // Get the event kind kind = GetEventKind(event); // Switch on event kind switch (kind) { // Modifiers changed case kEventRawKeyModifiersChanged: return noErr; // Key down or key up case kEventRawKeyDown: // Get the key code GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL, sizeof(keyCode), NULL, &keyCode); switch (keyCode) { // Space bar case kKeyboardEscapeKey: case kKeyboardSpaceKey: // If the key isn't already down if (!bellows) { bellows = true; HIViewSetValue(spacebar, true); // Check the keys for (int i = 0; i < Length(buttons); i++) { for (int j = 0; j < Length(buttons[i]); j++) { // If a key is down if (buttons[i][j]) { // Stop the current note int k; switch (i) { case 0: k = (reverse)? Length(buttons[i]) - j - 2: j; break; case 1: k = (reverse)? Length(buttons[i]) - j - 1: j; break; case 2: k = (reverse)? Length(buttons[i]) - j - 1: j + 1; break; } int note = notes[type][k][!bellows] + keyvals[key][i]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + i, note, 0, 0); // Play the new note note = notes[type][k][bellows] + keyvals[key][i]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOn + i, note, volume, 0); } } } for (int i = 0; i < Length(bass); i++) { if (bass[i]) { // Play chord int k = (reverse)? Length(basskeys) - i - 1: i; int note = chords[key][k][!bellows][0]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + ROWS, note, volume, 0); note = chords[key][k][!bellows][1]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + ROWS, note, volume, 0); note = chords[key][k][bellows][0]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOn + ROWS, note, volume, 0); note = chords[key][k][bellows][1]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOn + ROWS, note, volume, 0); } } } break; // Check keyboard default: // Look up the key code in the keyboard table for (int i = 0; i < Length(keyboard); i++) { for (int j = 0; j < Length(keyboard[i]); j++) { if (keyboard[i][j] == keyCode && !buttons[i][j]) { buttons[i][j] = true; // Play the note int k; switch (i) { case 0: k = (reverse)? Length(buttons[i]) - j - 2: j; break; case 1: k = (reverse)? Length(buttons[i]) - j - 1: j; break; case 2: k = (reverse)? Length(buttons[i]) - j - 1: j + 1; break; } if ((type == CHROMATIC) && (hilites[key][i][k] == true)) HIViewSetValue(display[i][j], false); else HIViewSetValue(display[i][j], true); int note = notes[type][k][bellows] + keyvals[key][i]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOn + i, note, volume, 0); return noErr; } } } for (int i = 0; i < Length(basskeys); i++) { if (((basskeys[i][0] == keyCode) || (basskeys[i][1] == keyCode)) && !bass[i]) { bass[i] = true; HIViewSetValue(bassdisplay[i], true); int k = (reverse)? Length(basskeys) - i - 1: i; int note = chords[key][k][bellows][0]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOn + ROWS, note, volume, 0); note = chords[key][k][bellows][1]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOn + ROWS, note, volume, 0); } } break; } break; case kEventRawKeyUp: // Get the key code GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL, sizeof(keyCode), NULL, &keyCode); switch (keyCode) { // Space bar case kKeyboardEscapeKey: case kKeyboardSpaceKey: // If the key isn't already up if (bellows) { bellows = false; HIViewSetValue(spacebar, false); // Check the keys for (int i = 0; i < Length(buttons); i++) { for (int j = 0; j < Length(buttons[i]); j++) { // If a key is down if (buttons[i][j]) { // Stop the current note int k; switch (i) { case 0: k = (reverse)? Length(buttons[i]) - j - 2: j; break; case 1: k = (reverse)? Length(buttons[i]) - j - 1: j; break; case 2: k = (reverse)? Length(buttons[i]) - j - 1: j + 1; break; } int note = notes[type][k][!bellows] + keyvals[key][i]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + i, note, 0, 0); // Play the new note note = notes[type][k][bellows] + keyvals[key][i]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOn + i, note, volume, 0); } } } for (int i = 0; i < Length(bass); i++) { if (bass[i]) { // Play chord int k = (reverse)? Length(basskeys) - i - 1: i; int note = chords[key][k][!bellows][0]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + ROWS, note, volume, 0); note = chords[key][k][!bellows][1]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + ROWS, note, volume, 0); note = chords[key][k][bellows][0]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOn + ROWS, note, volume, 0); note = chords[key][k][bellows][1]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOn + ROWS, note, volume, 0); } } } break; // Check keyboard default: // Look up the key code in the keyboard table for (int i = 0; i < Length(keyboard); i++) { for (int j = 0; j < Length(keyboard[i]); j++) { if (keyboard[i][j] == keyCode && buttons[i][j]) { buttons[i][j] = false; // Stop note int k; switch (i) { case 0: k = (reverse)? Length(buttons[i]) - j - 2: j; break; case 1: k = (reverse)? Length(buttons[i]) - j - 1: j; break; case 2: k = (reverse)? Length(buttons[i]) - j - 1: j + 1; break; } if ((type == CHROMATIC) && (hilites[key][i][k] == true)) HIViewSetValue(display[i][j], true); else HIViewSetValue(display[i][j], false); int note = notes[type][k][bellows] + keyvals[key][i]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + i, note, 0, 0); return noErr; } } } for (int i = 0; i < Length(basskeys); i++) { if (((basskeys[i][0] == keyCode) || (basskeys[i][1] == keyCode)) && bass[i]) { bass[i] = false; HIViewSetValue(bassdisplay[i], false); int k = (reverse)? Length(basskeys) - i - 1: i; int note = chords[key][k][bellows][0]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + ROWS, note, volume, 0); note = chords[key][k][bellows][1]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + ROWS, note, volume, 0); } } break; } break; default: return eventNotHandledErr; } // Report success return noErr; }
OSStatus ApplicationHandler(EventHandlerCallRef next, EventRef event, void *data) { ProcessSerialNumber them; ProcessSerialNumber us; Boolean same; UInt32 kind; // Get event kind kind = GetEventKind(event); // switch on event kind switch (kind) { // Front app switched case kEventAppFrontSwitched: // Get their process id GetEventParameter(event, kEventParamProcessID, typeProcessSerialNumber, NULL, sizeof(them), NULL, &them); // Get our process id GetCurrentProcess(&us); // Is it the same? SameProcess(&them, &us, &same); // If not the same if (!same) { // Turn all the notes off and reset all the buttons that // are down for (int i = 0; i < Length(bass); i++) { // Bass buttons if (bass[i]) { bass[i] = false; HIViewSetValue(bassdisplay[i], false); int k = (reverse)? Length(basskeys) - i - 1: i; int note = chords[key][k][bellows][0]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + ROWS, note, 0, 0); note = chords[key][k][bellows][1]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + ROWS, note, 0, 0); } } for (int i = 0; i < Length(buttons); i++) { for (int j = 0; j < Length(buttons[i]); j++) { // Melody buttons if (buttons[i][j]) { buttons[i][j] = false; int k; switch (i) { case 0: k = (reverse)? Length(buttons[i]) - j - 2: j; break; case 1: k = (reverse)? Length(buttons[i]) - j - 1: j; break; case 2: k = (reverse)? Length(buttons[i]) - j - 1: j + 1; break; } if ((type == CHROMATIC) && (hilites[key][i][j] == true)) HIViewSetValue(display[i][k], true); else HIViewSetValue(display[i][k], false); int note = notes[type][k][bellows] + keyvals[key][i]; MusicDeviceMIDIEvent(synthUnit, kMidiMessageNoteOff + i, note, 0, 0); } } } if (bellows) { // Space bar button bellows = false; HIViewSetValue(spacebar, false); } } break; default: return eventNotHandledErr; } // Return ok return noErr; }