Exemplo n.º 1
0
        private void EditOpArg()
        {
            var dialog = new PapyrusReferenceAndConstantValueViewModel(loadedAssemblies, currentType, currentMethod,
                                                                       null, null);
            var result = dialogService.ShowDialog(dialog);

            if (result == DialogResult.OK)
            {
                var i = OperandArguments.IndexOf(selectedOperandArgument);

                OperandArguments.RemoveAt(i);

                var papyrusVariableReference = new PapyrusVariableReference();

                UpdateOperandArgument(dialog, ref papyrusVariableReference);

                OperandArguments.Insert(i, papyrusVariableReference);

                SelectedOperandArgument = papyrusVariableReference;

                //// FFS! Just update? But nooo.. ObservableCollection refresh only triggers on remove/add :p
                //var dummy = new PapyrusVariableReference();
                //OperandArguments.Add(dummy);
                //OperandArguments.Remove(dummy);
            }
        }
Exemplo n.º 2
0
        private void AddOpArg()
        {
            var dialog = new PapyrusReferenceAndConstantValueViewModel(loadedAssemblies, currentType, currentMethod,
                                                                       null, null);
            var result = dialogService.ShowDialog(dialog);

            if (result == DialogResult.OK)
            {
                var papyrusVariableReference = new PapyrusVariableReference();
                OperandArguments.Add(UpdateOperandArgument(dialog, ref papyrusVariableReference));
            }
        }
Exemplo n.º 3
0
        private PapyrusVariableReference UpdateOperandArgument(PapyrusReferenceAndConstantValueViewModel dialog,
                                                               ref PapyrusVariableReference papyrusVariableReference)
        {
            var asm        = currentType.Assembly;
            var targetType = Utility.GetPapyrusPrimitiveType(Utility.GetPapyrusReturnType(dialog.SelectedTypeName));

            if (dialog.SelectedReferenceValue != null)
            {
                var paramRef = dialog.SelectedReferenceValue as PapyrusParameterDefinition;
                var fieldRef = dialog.SelectedReferenceValue as PapyrusFieldDefinition;
                var varRef   = dialog.SelectedReferenceValue as PapyrusVariableReference;
                if (varRef != null)
                {
                    papyrusVariableReference.Value    = varRef.Value;
                    papyrusVariableReference.Name     = varRef.Name;
                    papyrusVariableReference.TypeName = varRef.TypeName;
                    papyrusVariableReference.Type     = PapyrusPrimitiveType.Reference;
                }
                else if (fieldRef != null)
                {
                    papyrusVariableReference.Value    = fieldRef.Name.Value;
                    papyrusVariableReference.Name     = fieldRef.Name;
                    papyrusVariableReference.TypeName = fieldRef.TypeName.Ref(asm);
                    papyrusVariableReference.Type     = PapyrusPrimitiveType.Reference;
                }
                else if (paramRef != null)
                {
                    papyrusVariableReference.Value    = paramRef.Name.Value;
                    papyrusVariableReference.Name     = paramRef.Name;
                    papyrusVariableReference.TypeName = paramRef.TypeName;
                    papyrusVariableReference.Type     = PapyrusPrimitiveType.Reference;
                }
            }
            else
            {
                if (dialog.SelectedConstantValue == null && dialog.SelectedReferenceName != null)
                {
                    return(CreateReferenceFromName(dialog.SelectedReferenceName));
                }
                var val = dialog.SelectedConstantValue;
                if (val is string)
                {
                    val = val.ToString().Ref(asm).Value;
                }

                papyrusVariableReference.Value = val;
                papyrusVariableReference.Type  = targetType;
            }
            return(papyrusVariableReference);
        }
        //public object GetOperand()
        //{
        //    OperandLookup()
        //    throw new System.NotImplementedException();
        //}

        private void ShowArgumentSelectionDialog(OpCodeArgumentDescription d)
        {
            if (d.Ref == OpCodeRef.Instruction)
            {
                var dialog = new PapyrusInstructionSelectorViewModel(currentMethod.Body.Instructions.ToArray(), d);
                var result = dialogService.ShowDialog(dialog);
                if (result == DialogResult.OK)
                {
                    Arguments[d.Index] = dialog.SelectedInstruction;
                }
            }
            else if (d.Ref == OpCodeRef.Type)
            {
                var dialog = new PapyrusTypeSelectorViewModel(loadedAssemblies, d);
                var result = dialogService.ShowDialog(dialog);
                if (result == DialogResult.OK)
                {
                    Arguments[d.Index] = dialog.SelectedType;
                }
            }
            else if (d.Ref == OpCodeRef.Method)
            {
                var targetType = GetTargetType(currentType);

                var dialog = new PapyrusMethodSelectorViewModel(loadedAssemblies, targetType, d);
                var result = dialogService.ShowDialog(dialog); // change currentType to selected type later
                if (result == DialogResult.OK)
                {
                    PapyrusMethodDefinition method = null;
                    var selMethod = dialog.SelectedMethod;
                    if (selMethod != null)
                    {
                        method = dialog.SelectedMethod.Item as PapyrusMethodDefinition;
                    }

                    if ((method != null && dialog.SelectedMethodName != null &&
                         (method.Name.Value != dialog.SelectedMethodName)) ||
                        (method == null && dialog.SelectedMethodName != null))
                    {
                        Arguments[d.Index] = CreateReferenceFromName(dialog.SelectedMethodName);
                    }
                    else
                    {
                        Arguments[d.Index] = method;
                    }
                }
            }
            else
            {
                if (d.ValueType == OpCodeValueTypes.Constant)
                {
                    var dialog = new PapyrusConstantValueViewModel(d);
                    var result = dialogService.ShowDialog(dialog);
                    if (result == DialogResult.OK)
                    {
                        Arguments[d.Index] = dialog.SelectedValue;
                    }
                }
                else if (d.ValueType == OpCodeValueTypes.Reference)
                {
                    var dialog = new PapyrusReferenceValueViewModel(loadedAssemblies, currentType, currentMethod, d);
                    var result = dialogService.ShowDialog(dialog);
                    if (result == DialogResult.OK)
                    {
                        if (dialog.SelectedReference == null)
                        {
                            var name = dialog.SelectedReferenceName;
                            Arguments[d.Index] = CreateReferenceFromName(name);
                        }
                        else
                        {
                            Arguments[d.Index] = dialog.SelectedReference;
                        }
                    }
                }
                else
                {
                    UpdateArgumentConstraintTypes();

                    var dialog = new PapyrusReferenceAndConstantValueViewModel(loadedAssemblies, currentType,
                                                                               currentMethod, d, ArgumentTypes);
                    var result = dialogService.ShowDialog(dialog);
                    if (result == DialogResult.OK)
                    {
                        if (dialog.SelectedConstantValue == null && dialog.SelectedReferenceValue == null && dialog.SelectedReferenceName != null)
                        {
                            var name = dialog.SelectedReferenceName;
                            Arguments[d.Index] = CreateReferenceFromName(name);
                        }
                        else
                        {
                            Arguments[d.Index] = dialog.SelectedItem;
                        }
                    }
                }
            }
            UpdateArguments();
        }