Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
        private void AddReportField(EntityMemberPath path)
        {
            var item = new ListViewItem(HumanText.GetMemberName(path.Tail))
            {
                Tag = path
            };

            InsertSorted(_reportFields, item, true);
        }
Пример #7
0
        public override string ToString()
        {
            if (Transform == ReportFieldTransform.None)
            {
                return(HumanText.GetEntityMemberPath(Fields));
            }

            return
                ((Transform == ReportFieldTransform.CountNumbers ? "Count" : Transform.ToString()) +
                 " of " +
                 HumanText.GetEntityMemberPath(Fields));
        }
Пример #8
0
        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();
        }
Пример #9
0
        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();
        }
Пример #10
0
        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;
            }
        }
Пример #11
0
        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();
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #14
0
 public EntityDrawer(EntitySchema entity)
 {
     Entity = entity;
     _name  = HumanText.GetEntityName(Entity);
 }
Пример #15
0
 public override string ToString()
 {
     return(HumanText.GetMemberName(Field));
 }
Пример #16
0
        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;
        }