protected override void OnBeforeExpand(TreeViewCancelEventArgs e) { base.OnBeforeExpand(e); if (e.Node.Nodes.Count == 0 || e.Node.Nodes[0].Tag != null) { return; } e.Node.Nodes.Clear(); var entity = e.Node.Tag as EntitySchema; if (entity == null) { entity = _api.GetEntitySchema(((EntityForeign)e.Node.Tag).LinkTable); } foreach (var foreign in entity.Members.OfType <EntityForeign>().OrderBy(HumanText.GetMemberName)) { var node = new TreeNode(HumanText.GetMemberName(foreign)); var linkTable = _api.GetEntitySchema(foreign.LinkTable); node.Tag = foreign; if (linkTable.Members.Any(p => p is EntityForeign)) { node.Nodes.Add(new TreeNode()); } e.Node.Nodes.Add(node); } }
public static int[] BuildColumnMap(ResultSet resultSet) { if (resultSet == null) { throw new ArgumentNullException(nameof(resultSet)); } var columns = new List <Tuple <string, int> >(); for (int i = 0; i < resultSet.FieldCount; i++) { columns.Add(Tuple.Create(resultSet.GetFieldName(i), i)); } columns.Sort((a, b) => String.Compare(HumanText.ToHuman(a.Item1), HumanText.ToHuman(b.Item1), StringComparison.CurrentCultureIgnoreCase)); var columnMap = new int[columns.Count]; for (int i = 0; i < columns.Count; i++) { columnMap[columns[i].Item2] = i; } return(columnMap); }
private void CreateHeaders(ResultSet resultSet) { var headerView = new SourceGrid.Cells.Views.ColumnHeader { ElementText = new DevAge.Drawing.VisualElements.TextRenderer() }; var toolTipController = new ToolTipText(); _grid.ColumnsCount = _entity.Members.Count; _grid.FixedRows = 1; _grid.Rows.Insert(0); _columnMap = ApiUtils.BuildColumnMap(resultSet); for (int i = 0; i < resultSet.FieldCount; i++) { var member = _entity.Members[resultSet.GetFieldName(i)]; _grid[0, _columnMap[i]] = new SourceGrid.Cells.ColumnHeader(HumanText.GetMemberName(member)) { View = headerView, ToolTipText = HumanText.GetMemberName(member), AutomaticSortEnabled = false }; _grid[0, _columnMap[i]].AddController(toolTipController); } }
private void BuildFields(TreeNodeCollection nodes, EntitySchema entity) { nodes.Clear(); foreach (var member in entity.Members.OrderBy(HumanText.GetMemberName)) { var node = new TreeNode { Text = HumanText.GetMemberName(member), Tag = member }; switch (member.Type) { case EntityMemberType.Id: case EntityMemberType.Field: case EntityMemberType.Calculated: break; case EntityMemberType.Foreign: node.Nodes.Add("Dummy"); break; default: continue; } nodes.Add(node); } }
private ListViewGroup GetGroup(ListView listView, ListViewItem item) { var path = (EntityMemberPath)item.Tag; if (path.Count == 1) { return(_entityGroup); } string groupName = HumanText.GetEntityMemberPath(new EntityMemberPath(path.Take(path.Count - 1))); var group = listView.Groups.Cast <ListViewGroup>().FirstOrDefault(p => p.Header == groupName); if (group != null) { return(group); } group = new ListViewGroup(groupName); int index = _reportFields.Groups.Count; for (int i = 1; i < _reportFields.Groups.Count; i++) { if (String.Compare(_reportFields.Groups[i].Header, group.Header, StringComparison.CurrentCultureIgnoreCase) > 0) { index = i; break; } } _reportFields.Groups.Insert(index, group); return(group); }
private void AddReportField(EntityMemberPath path) { var item = new ListViewItem(HumanText.GetMemberName(path.Tail)) { Tag = path }; InsertSorted(_reportFields, item, true); }
public override string ToString() { if (Transform == ReportFieldTransform.None) { return(HumanText.GetEntityMemberPath(Fields)); } return ((Transform == ReportFieldTransform.CountNumbers ? "Count" : Transform.ToString()) + " of " + HumanText.GetEntityMemberPath(Fields)); }
public ExportDefinitionForm(Api api, string directory, string fileName, ExportDefinition export) { if (api == null) { throw new ArgumentNullException(nameof(api)); } if (directory == null) { throw new ArgumentNullException(nameof(directory)); } if (export == null) { throw new ArgumentNullException(nameof(export)); } _api = api; _directory = directory; _fileName = fileName; _entity = export.Entity; _filters = export.Filters; InitializeComponent(); if (fileName != null) { Text += " - " + fileName; } VisualStyleUtil.StyleListView(_availableFields); VisualStyleUtil.StyleListView(_reportFields); _entityGroup = new ListViewGroup(HumanText.GetEntityName(_entity)); _reportFields.Groups.Add(_entityGroup); var selectPath = new Button { Image = NeutralResources.navigate_close }; _path.RightButtons.Add(selectPath); selectPath.Click += selectPath_Click; foreach (var field in export.Fields) { AddReportField(field); } SetSelectedEntity(EntityMemberPath.Empty); UpdateEnabled(); }
private void Reload() { var entities = new List <EntitySchema>(); string filter = _filter.Text.ToLower(); foreach (var item in _api.GetSchema().Entities) { var entity = _api.GetEntitySchema(item); bool include = true; if (filter.Length > 0) { include = entity.Name.ToLower().Contains(filter) || (entity.Comments != null && entity.Comments.ToLower().Contains(filter)); } if (include) { entities.Add(entity); } } entities.Sort(EntitySchemaComparer.Instance); _entities.BeginUpdate(); _entities.Items.Clear(); string header = null; bool hadSelected = false; foreach (var entity in entities) { var name = new EntityName(entity.Name); if (header != name.Header) { _entities.Items.Add(new HeaderDrawer(HumanText.ToHuman(name.Header))); header = name.Header; } _entities.Items.Add(new EntityDrawer(entity)); if (!hadSelected) { hadSelected = true; _entities.SelectedIndex = _entities.Items.Count - 1; } } _entities.EndUpdate(); }
private void SetSelectedEntity(EntityMemberPath path) { if (path.Count == 0) { _selectedEntity = _entity; _path.Text = HumanText.GetEntityName(_selectedEntity); } else { _selectedEntity = _api.GetEntitySchema(((EntityForeign)path.Tail).LinkTable); _path.Text = HumanText.GetEntityMemberPath(path); } _availableFields.BeginUpdate(); _availableFields.Items.Clear(); foreach (var member in _selectedEntity.Members.OrderBy(HumanText.GetMemberName)) { var memberPath = new EntityMemberPath(path, member); if ( (member is EntityField || member is EntityCalculatedField) && _reportFields.Items.Cast <ListViewItem>().All(p => !p.Tag.Equals(memberPath)) ) { _availableFields.Items.Add(new ListViewItem(HumanText.GetMemberName(member)) { Tag = memberPath }); } } _availableFields.EndUpdate(); UpdateEnabled(); if (_autoCompleteForm != null) { _autoCompleteForm.Dispose(); _autoCompleteForm = null; } }
public EntityPathSelectorTreeView(Api api, EntitySchema entity) { if (api == null) { throw new ArgumentNullException(nameof(api)); } if (entity == null) { throw new ArgumentNullException(nameof(entity)); } _api = api; var node = new TreeNode(HumanText.GetEntityName(entity)); node.Tag = entity; node.Nodes.Add(new TreeNode()); Nodes.Add(node); node.Expand(); }
public void Export(FileStream stream, List <JObject> results, ExportDefinition export) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (results == null) { throw new ArgumentNullException(nameof(results)); } if (export == null) { throw new ArgumentNullException(nameof(export)); } var workbook = new XSSFWorkbook(); var sheet = workbook.CreateSheet(PrettifyName(export.Entity.Name)); sheet.DefaultRowHeightInPoints = 15; var headerStyle = CreateHeaderStyle(workbook); var dateStyle = CreateDateStyle(workbook, false); var dateTimeStyle = CreateDateStyle(workbook, true); var wrapStyle = workbook.CreateCellStyle(); wrapStyle.WrapText = true; // Create the headers. var row = sheet.CreateRow(0); for (int i = 0; i < export.Fields.Count; i++) { AddHeader(row, i, HumanText.GetEntityMemberPath(export.Fields[i]), export.Fields[i].Tail.Comments, headerStyle); } int rowOffset = 0; bool haveAutosized = false; foreach (var result in results) { row = sheet.CreateRow(++rowOffset); for (int i = 0; i < export.Fields.Count; i++) { var field = export.Fields[i]; ICellStyle cellStyle = null; switch (((EntityTypedField)field.Tail).DataType) { case EntityDataType.Date: cellStyle = dateStyle; break; case EntityDataType.DateTime: case EntityDataType.DateTimeTz: cellStyle = dateTimeStyle; break; } AddCell(row, i, GetValue(field, result), cellStyle); } // We only auto size the top 20 rows for performance reasons. if (rowOffset == 20) { haveAutosized = true; AutoSizeColumns(export.Fields.Count, sheet); } } if (!haveAutosized) { AutoSizeColumns(export.Fields.Count, sheet); } workbook.Write(stream); }
public void Export(Stream stream, EntitySchema entity, RecordSet recordSet, ApiRowErrorsCollection errors) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (entity == null) { throw new ArgumentNullException(nameof(entity)); } if (recordSet == null) { throw new ArgumentNullException(nameof(recordSet)); } var workbook = new XSSFWorkbook(); var sheet = workbook.CreateSheet(PrettifyName(entity.Name)); sheet.DefaultRowHeightInPoints = 15; var errorColor = new XSSFColor(Color.Orange); var errorStyle = (XSSFCellStyle)workbook.CreateCellStyle(); errorStyle.FillForegroundColorColor = errorColor; errorStyle.FillPattern = FillPattern.SolidForeground; var headerStyle = CreateHeaderStyle(workbook); var dateStyle = CreateDateStyle(workbook, null, false); var dateErrorStyle = CreateDateStyle(workbook, errorColor, false); var dateTimeStyle = CreateDateStyle(workbook, null, true); var dateTimeErrorStyle = CreateDateStyle(workbook, errorColor, true); // Create the headers. var row = sheet.CreateRow(0); var fieldNames = recordSet[0].FieldNames.OrderBy(p => p.ToLower()).ToList(); for (int i = 0; i < fieldNames.Count; i++) { var member = entity.Members[fieldNames[i]]; AddHeader(row, i, HumanText.GetMemberName(member), member.Comments, headerStyle); } bool haveAutosized = false; Dictionary <int, ApiRowErrors> errorMap = null; if (errors != null) { errorMap = errors.ToDictionary(p => p.Row, p => p); } for (int i = 0; i < recordSet.Count; i++) { var record = recordSet[i]; row = sheet.CreateRow(i + 1); ApiRowErrors rowErrors = null; if (errorMap != null) { errorMap.TryGetValue(i, out rowErrors); } for (int j = 0; j < fieldNames.Count; j++) { ICellStyle cellStyle = null; if (rowErrors != null) { cellStyle = errorStyle; } var field = fieldNames[j]; switch (((EntityTypedField)entity.Members[field]).DataType) { case EntityDataType.Date: cellStyle = rowErrors == null ? dateStyle : dateErrorStyle; break; case EntityDataType.DateTime: case EntityDataType.DateTimeTz: cellStyle = rowErrors == null ? dateTimeStyle : dateTimeErrorStyle; break; } string fieldError = GetFieldError(rowErrors, field); object value = record.ContainsField(field) ? record[field] : null; AddCell(row, j, value, cellStyle, fieldError); } // We only auto size the top 20 rows for performance reasons. if (i == 20) { haveAutosized = true; AutoSizeColumns(fieldNames.Count, sheet); } } if (!haveAutosized) { AutoSizeColumns(fieldNames.Count, sheet); } workbook.Write(stream); }
public EntityDrawer(EntitySchema entity) { Entity = entity; _name = HumanText.GetEntityName(Entity); }
public override string ToString() { return(HumanText.GetMemberName(Field)); }
public FilterControl(EntityPhysicalField field) { if (field == null) { throw new ArgumentNullException(nameof(field)); } Field = field; InitializeComponent(); _name.Text = HumanText.GetMemberName(Field); foreach (var control in new Control[] { _textBox, _date, _dateTime, _numericTextBox }) { control.Visible = false; } switch (field.DataType) { case EntityDataType.String: _control = _textBox; break; case EntityDataType.Date: _control = _date; break; case EntityDataType.DateTime: case EntityDataType.DateTimeTz: _control = _dateTime; break; case EntityDataType.Decimal: _control = _numericTextBox; break; case EntityDataType.Long: case EntityDataType.Int: _numericTextBox.NumberScale = 0; _control = _numericTextBox; break; case EntityDataType.Bool: break; default: throw new ArgumentOutOfRangeException(); } FilterType[] filterTypes; switch (field.Type) { case EntityMemberType.Foreign: filterTypes = ForeignFilterTypes; break; case EntityMemberType.Id: filterTypes = IdFilterTypes; break; default: switch (field.DataType) { case EntityDataType.String: filterTypes = TextFilterTypes; break; case EntityDataType.Date: case EntityDataType.DateTime: case EntityDataType.DateTimeTz: case EntityDataType.Decimal: case EntityDataType.Long: case EntityDataType.Int: filterTypes = OtherFilterTypes; break; case EntityDataType.Bool: filterTypes = BoolFilterTypes; break; default: throw new ArgumentOutOfRangeException(); } break; } foreach (var filterType in filterTypes) { var menuItem = new MenuItem { Text = GetFilterText(filterType), Tag = filterType }; menuItem.Click += FilterSelected; _contextMenu.MenuItems.Add(menuItem); } if (_control != null) { _control.Visible = true; } // Force an update. _filterType = FilterType.NotEqual; FilterType = Field.DataType == EntityDataType.Bool ? FilterType.IsTrue : FilterType.Equal; }