Пример #1
0
        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);
        }