internal bool DispatchMessage(MidiMessage message, int channel, int key, double value) { bool currentVal = false; double normalizedValue = (double)value / 127.0; double scaledValue = Min + (Max - Min) * normalizedValue; int scaledValueInt = (int)scaledValue; IScriptable scriptInterface = null; switch (TargetType) { case BindingTargetType.Setting: scriptInterface = Settings.Active as IScriptable; break; case BindingTargetType.SpaceTimeController: scriptInterface = SpaceTimeController.ScriptInterface; break; case BindingTargetType.Goto: Earth3d.MainWindow.GotoCatalogObject(PropertyName); break; case BindingTargetType.Layer: scriptInterface = LayerManager.ScriptInterface; break; case BindingTargetType.Navigation: scriptInterface = Earth3d.MainWindow as IScriptable; break; // case BindingTargetType.Actions: // break; //case BindingTargetType.Key: // break; // case BindingTargetType.Mouse: // break; default: break; } if (scriptInterface != null && !string.IsNullOrEmpty(PropertyName)) { switch (BindingType) { case BindingType.Action: scriptInterface.InvokeAction(PropertyName, normalizedValue.ToString()); break; case BindingType.Toggle: currentVal = scriptInterface.ToggleProperty(PropertyName); if (channel > -1) { ((MidiMap)Parent.Owner).OutputDevice.SendMessageShort((byte)(144 + channel), (byte)key, (byte)(currentVal ? 3 : 0)); } break; case BindingType.SyncValue: scriptInterface.SetProperty(PropertyName, Integer ? scaledValueInt.ToString() : scaledValue.ToString()); break; case BindingType.SetValue: scriptInterface.SetProperty(PropertyName, Value.ToString()); break; default: break; } } return(currentVal); }