예제 #1
0
        public override void Render(GRenderOutput renderContext)
        {
            genericArgumentType = ClassToGUITools.GetEnumerableType(BindedProperty.PropertyType);

            AddXaml(renderContext);
            AddViewModel(renderContext);
            AddCodeBehind(renderContext);

            renderContext.GridRows.AppendLine("<RowDefinition MinHeight=\"30\" Height=\"160\" />");
        }
예제 #2
0
        public void LoadDLL(string fileName)
        {
            if (string.IsNullOrEmpty(fileName) || !fileName.ToLower().EndsWith(".dll"))
            {
                return;
            }

            base.TargetAssemblyInfo = ClassToGUITools.LoadPocoLibrary(fileName);
            base.PocoTypes          = base.TargetAssemblyInfo.AssemblyTypes;
            base.LibraryItems.Clear();

            InfoText = $"Library '{fileName}' was succesfully loaded.";
            MainViewModel.IsNextBtnEnabled = true;
        }
예제 #3
0
        // TODo Problem ak je DLL z novsieho .NET ako je generovana WPFOut apka
        // TODO generovat iba objekty zo SYSTEM, alebo z generovanej DLL
        // TODo prepinac povolujuci aj typy, ktore su z inych Assemblies
        private void BuildControlsRecursive(Type targetType, List <PropertyInfo> targetProperties, string outNamespace, byte maxRecursionLevel, int recursionLevel, List <WPFClass2GUIBuilder> generators)
        {
            Init(targetType, targetProperties, outNamespace, maxRecursionLevel);

            this.InnerBuilders = generators;

            foreach (PropertyInfo propInfo in TargetProperties)
            {
                if (propInfo.PropertyType.IsEnum)
                {
                    IncludeNameSpace(propInfo.PropertyType.Namespace, propInfo.PropertyType.Assembly.GetName().Name);
                    RenderOutput.Controls.Add(new EnumComboBoxGenControl {
                        BindedProperty = propInfo
                    });
                    continue;
                }

                switch (System.Type.GetTypeCode(propInfo.PropertyType))
                {
                case TypeCode.Boolean:
                    RenderOutput.Controls.Add(new CheckBoxGenControl {
                        BindedProperty = propInfo
                    });
                    break;

                case TypeCode.Byte:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo, Minimum = byte.MinValue, Maximum = byte.MaxValue
                    });
                    break;

                case TypeCode.Char:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo, GenerateAsSlider = false
                    });
                    break;

                case TypeCode.DBNull:
                    break;

                case TypeCode.DateTime:
                    RenderOutput.Controls.Add(new DateTimeGenControl {
                        BindedProperty = propInfo
                    });
                    break;

                case TypeCode.Decimal:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo, GenerateAsSlider = false
                    });
                    break;

                case TypeCode.Double:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo, GenerateAsSlider = false
                    });
                    break;

                case TypeCode.Empty:
                    break;

                case TypeCode.Int16:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo
                    });
                    break;

                case TypeCode.Int32:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo
                    });
                    break;

                case TypeCode.Int64:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo
                    });
                    break;

                case TypeCode.Object:

                    // Pri Object typoch je potrebne mysliet aj na dalsiu uroven, aby sa pre tento ty vygenerovala
                    if (recursionLevel + 1 >= MaxRecursuinLevel)
                    {
                        break;
                    }

                    // IEnumerable/Listy rieseny ako listview

                    Type genericArgument = ClassToGUITools.GetEnumerableType(propInfo.PropertyType);

                    if (genericArgument != null)
                    {
                        // Generic Types are not supported
                        if (genericArgument.IsGenericType || genericArgument.Assembly != targetType.Assembly)
                        {
                            break;
                        }

                        UnknownTypes.Add(genericArgument);

                        RenderOutput.Controls.Add(new DataGridGenControl {
                            BindedProperty = propInfo
                        });
                        break;
                    }

                    // Generic Types are not supported
                    if (propInfo.PropertyType.IsGenericType || propInfo.PropertyType.Assembly != targetType.Assembly)
                    {
                        break;
                    }

                    UnknownTypes.Add(propInfo.PropertyType);

                    // Single Object rieseny ako LookUp cez ComboBox
                    // TODO: Option - detail vnoreneho objektu
                    // RenderContext.Controls.Add(new ComboBoxGenControl { BindedProperty = propInfo });
                    RenderOutput.Controls.Add(new ObjectDetailGenControl {
                        BindedProperty = propInfo
                    });

                    break;

                case TypeCode.SByte:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo, Minimum = sbyte.MinValue, Maximum = sbyte.MaxValue
                    });
                    break;

                case TypeCode.Single:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo, GenerateAsSlider = false
                    });
                    break;

                case TypeCode.String:
                    RenderOutput.Controls.Add(new TextBoxGenControl {
                        BindedProperty = propInfo
                    });
                    break;

                case TypeCode.UInt16:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo, Minimum = 0
                    });
                    break;

                case TypeCode.UInt32:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo, Minimum = 0
                    });
                    break;

                case TypeCode.UInt64:
                    RenderOutput.Controls.Add(new NumGenControl {
                        BindedProperty = propInfo, Minimum = 0
                    });
                    break;

                default:
                    break;
                }
            }

            if (recursionLevel == MaxRecursuinLevel)
            {
                return;
            }

            foreach (Type unknownType in this.UnknownTypes)
            {
                if (generators.Count(g => g.TargetType == unknownType) > 0)
                {
                    continue;
                }

                generators.Add(new WPFClass2GUIBuilder());
                generators.Last().BuildControlsRecursive(unknownType, unknownType.GetProperties().ToList(), this.OutNamespace, this.MaxRecursuinLevel, recursionLevel + 1, generators);
            }
        }