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\" />"); }
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; }
// 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); } }