using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Windows.Media.Imaging; using FastReport.Dialog; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using org.w3c.dom.html; using static InABox.Core.DataModelTemplate; using ScriptEditorWindow = InABox.DynamicGrid.ScriptEditorWindow; namespace PRSDesktop { public class DataModelTemplateGrid : DynamicDataGrid { private readonly BitmapImage _edit = PRSDesktop.Resources.pencil.AsBitmapImage(); private DataModelTemplate[] Items; public DataModelTemplateGrid() { HiddenColumns.Add(x => x.Template); OnCustomiseEditor += DataModelTemplateGrid_OnCustomiseEditor; } private void DataModelTemplateGrid_OnCustomiseEditor(IDynamicEditorForm sender, DataModelTemplate[]? items, DynamicGridColumn column, BaseEditor editor) { if (editor == null) return; if (column.ColumnName.Equals("Template") || column.ColumnName.Equals("To") || column.ColumnName.Equals("Subject") || column.ColumnName.Equals("AttachmentName") ) { var edt = editor as TextBoxEditor; edt.Buttons = new EditorButton[] { new EditorButton(items.FirstOrDefault(), "Edit", 60, TemplateEditorClicked, true) }; } } private void TemplateEditorClicked(object editor, object? item) { var template = item as DataModelTemplate; var edtControl = editor as TextBoxEditorControl; var col = edtControl.ColumnName; var toEdit = CoreUtils.GetPropertyValue(template, col); var edt = new ScriptEditorWindow(toEdit as string, SyntaxLanguage.HTML); var snippets = new Dictionary(); foreach (var (name, table) in Model.ModelTables) { var variable = name.Substring(0, 1).ToLower(); var cursnippets = new List(); cursnippets.Add("{{ for " + variable + " in " + name + " }}\n\n{{ end }}"); if(table.Type is not null) { var props = DatabaseSchema.Properties(table.Type) .Where(x => x.Editor != null && x.Editor.GetType() != typeof(NullEditor) && x.Editor.Visible != Visible.Hidden); foreach (var prop in props) cursnippets.Add("{{ " + variable + "." + prop.Name + " }}"); } snippets[name] = cursnippets.ToArray(); } edt.Snippets = snippets; if (edt.ShowDialog() == true) { CoreUtils.SetPropertyValue(template, col, edt.Script); } } // private String[] EmailTemplateManagerWindow_OnGetVariables() // { // List list = new List(); // foreach (var table in Model.DefaultTables) // { // foreach (var col in table.Columns) // { // if (col.ToString() != "ID") // list.Add(table.ToString() + "." + col.ToString()); // } // } // list.Sort(); // return list.ToArray(); // } public DataModel Model { get; set; } protected override void Reload( Filters criteria, Columns columns, ref SortOrder? sort, CancellationToken token, Action action) { criteria.Add(new Filter(x => x.Model).IsEqualTo(Model.Name)); base.Reload(criteria, columns, ref sort, token, action); } public override DataModelTemplate CreateItem() { var result = base.CreateItem(); result.Visible = true; result.Model = Model.Name; return result; } } }