private PpsGenericWpfControl UpdateControl(object args)
        {
            PpsGenericWpfControl returnValue;

            if (args is PpsGenericWpfControl paneControl)             // force a framework element
            {
                returnValue = paneControl;
            }
            else if (args is LuaTable t)             // should be properties for the PpsGenericWpfControl
            {
                var creator = LuaWpfCreator.CreateFactory(ShellWpf.LuaUI, typeof(PpsGenericWpfControl));
                creator.SetTableMembers(t);
                using (var xamlReader = new PpsXamlReader(creator.CreateReader(this), new PpsXamlReaderSettings()
                {
                    Code = this, CloseInput = true, BaseUri = Request.BaseAddress, ServiceProvider = this
                }))
                    returnValue = PpsXamlParser.LoadAsync <PpsGenericWpfControl>(xamlReader).AwaitTask();
            }
            else
            {
                throw new ArgumentException(nameof(args));
            }

            Control = returnValue;
            OnControlCreated();

            return(Control);
        }         // proc UpdateControl
Пример #2
0
        private static LuaWpfCreator CreateComboField(IPpsDataFieldReadOnlyProperties properties)
        {
            dynamic ui = new LuaUI();
            //dynamic combo = LuaWpfCreator.CreateFactory(ui, typeof(ComboBox));
            dynamic combo = LuaWpfCreator.CreateFactory(ui, typeof(PpsComboBox));

            combo.SelectedValue = PpsDataFieldBinding.CreateWpfBinding(properties.GetService <PpsDataFieldInfo>(true));

            return(combo);
        }         // func CreateComboField
Пример #3
0
        private LuaWpfCreator CreateCheckField(IPpsDataFieldReadOnlyProperties properties)
        {
            dynamic ui    = new LuaUI();
            dynamic check = LuaWpfCreator.CreateFactory(ui, typeof(CheckBox));

            //check.Content = properties.displayName;
            check.IsThreeState = false;
            check.IsChecked    = PpsDataFieldBinding.CreateWpfBinding(properties.GetService <PpsDataFieldInfo>(true));

            return(check);
        }         // func CreateCheckField
Пример #4
0
        }         // func CreateTextField

        private LuaWpfCreator CreateSelector(IPpsDataFieldReadOnlyProperties properties)
        {
            dynamic combobox = LuaWpfCreator.CreateFactory(new LuaUI(), typeof(PpsComboBox));

            if (properties.TryGetProperty <bool>("Nullable", out var tmpNullable))
            {
                combobox.IsNullable = tmpNullable;
            }

            SetTextFieldProperties((object)combobox, properties);

            return(combobox);
        }         // func CreateSelector
Пример #5
0
        private LuaWpfCreator CreateRelationField(IPpsDataFieldReadOnlyProperties properties, PpsDataColumnDefinition columnDefinition)
        {
            dynamic combobox = CreateSelector(properties);

            // bind items source
            if (!properties.TryGetProperty <string>("TableBindingPath", out var baseBindingPath))
            {
                baseBindingPath = properties.GetService <PpsDataSetResolver>(true).BindingPath;
            }

            var codeBase = properties.GetService <IPpsXamlCode>(true);

            dynamic itemsSourceBinding = LuaWpfCreator.CreateFactory(new LuaUI(), typeof(Binding));

            itemsSourceBinding.Path   = PpsDataFieldBinding.CombinePath(baseBindingPath, columnDefinition.ParentColumn.Table.Name);
            itemsSourceBinding.Source = codeBase;
            combobox.ItemsSource      = itemsSourceBinding;

            // bind value
            combobox.SelectedValue = PpsDataFieldBinding.CreateWpfBinding(properties.GetService <PpsDataFieldInfo>(true));

            return(combobox);
        }         // func CreateRelationField
Пример #6
0
        private LuaWpfCreator CreateTextField(IPpsDataFieldReadOnlyProperties properties, bool formattedText = false)
        {
            var     ui  = new LuaUI();
            dynamic txt = LuaWpfCreator.CreateFactory(ui, typeof(PpsTextBox));

            var isReadOnly = properties.TryGetProperty <bool>("IsReadOnly", out var tmpReadOnly) ? (bool?)tmpReadOnly : null;

            var textBinding = PpsDataFieldBinding.CreateWpfBinding(properties.GetService <PpsDataFieldInfo>(true), append: formattedText ? "Value" : null, isReadOnly: isReadOnly);

            var inputType    = formattedText ? PpsTextBoxInputType.MultiLine : PpsTextBoxInputType.None;
            var setMaxLength = true;

            switch (Type.GetTypeCode(properties.DataType))
            {
            case TypeCode.Decimal:
                PpsDataFieldFactory.SetNumericBinding(ui, txt, textBinding, true, 2);
                inputType    = PpsTextBoxInputType.DecimalNegative;
                setMaxLength = false;
                break;

            case TypeCode.Single:
                PpsDataFieldFactory.SetNumericBinding(ui, txt, textBinding, true, 3);
                inputType    = PpsTextBoxInputType.DecimalNegative;
                setMaxLength = false;
                break;

            case TypeCode.Double:
                PpsDataFieldFactory.SetNumericBinding(ui, txt, textBinding, true, 6);
                inputType    = PpsTextBoxInputType.DecimalNegative;
                setMaxLength = false;
                break;

            case TypeCode.SByte:
                PpsDataFieldFactory.SetNumericBinding(ui, txt, textBinding, true, 0);
                inputType = PpsTextBoxInputType.IntegerNegative;
                break;

            case TypeCode.Int16:
                PpsDataFieldFactory.SetNumericBinding(ui, txt, textBinding, true, 0);
                inputType = PpsTextBoxInputType.IntegerNegative;
                break;

            case TypeCode.Int32:
                PpsDataFieldFactory.SetNumericBinding(ui, txt, textBinding, true, 0);
                inputType = PpsTextBoxInputType.IntegerNegative;
                break;

            case TypeCode.Int64:
                PpsDataFieldFactory.SetNumericBinding(ui, txt, textBinding, true, 0);
                inputType = PpsTextBoxInputType.IntegerNegative;
                break;

            case TypeCode.Byte:
                PpsDataFieldFactory.SetNumericBinding(ui, txt, textBinding, false, 0);
                inputType = PpsTextBoxInputType.Integer;
                break;

            case TypeCode.UInt16:
                SetNumericBinding(ui, txt, textBinding, false, 0);
                inputType = PpsTextBoxInputType.Integer;
                break;

            case TypeCode.UInt32:
                PpsDataFieldFactory.SetNumericBinding(ui, txt, textBinding, false, 0);
                inputType = PpsTextBoxInputType.Integer;
                break;

            case TypeCode.UInt64:
                PpsDataFieldFactory.SetNumericBinding(ui, txt, textBinding, false, 0);
                inputType = PpsTextBoxInputType.Integer;
                break;

            case TypeCode.DateTime:
                if (inputType != PpsTextBoxInputType.Date &&
                    inputType != PpsTextBoxInputType.Time)
                {
                    inputType = PpsTextBoxInputType.Date;
                }

                if (inputType == PpsTextBoxInputType.Date)                         // we can set a binding converter
                {
                    PpsDataFieldFactory.SetDateBinding(ui, txt, textBinding, false, 0);
                }
                break;
            }

            if (properties.TryGetProperty <PpsTextBoxInputType>("InputType", out var tmpInputType))
            {
                inputType = tmpInputType;
            }

            txt.InputType = inputType;
            txt.Text      = textBinding;

            SetTextFieldProperties((object)txt, properties);

            if (setMaxLength && properties.TryGetProperty <int>("MaxLength", out var maxInputLength))
            {
                txt.MaxLength = maxInputLength;
            }

            if (properties.TryGetProperty <bool>("Nullable", out var tmpNullable))
            {
                txt.IsNullable = tmpNullable;
            }

            if (isReadOnly.HasValue)
            {
                txt.IsReadOnly = isReadOnly;
            }

            if (formattedText)
            {
                txt.FormattedValue = PpsDataFieldBinding.CreateWpfBinding(properties.GetService <PpsDataFieldInfo>(true), append: "FormattedValue", isReadOnly: true);
            }

            return(txt);
        }         // func CreateTextField