private void initNextHopTable(ref DataGridView originalTable, ref CustomDataGridView <FibTreeLabel> customMember, Panel container, FibTree fibTree)
        {
            customMember = CreateTable <FibTreeLabel>(ref originalTable, container);

            CustomDataGridViewColumnDescriptorBuilder <FibTreeLabel> builder;

            // Column: prefix, IP format
            builder = new CustomDataGridViewColumnDescriptorBuilder <FibTreeLabel>(customMember);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("Label");
            builder.Width(60);
            builder.UpdaterMethod((entry, cell) => { cell.Value = entry.Text; });
            builder.AddChangeEvent(nameof(FibEntry.IpForm));
            builder.BuildAndAdd();

            // Column: next hop
            builder = new CustomDataGridViewColumnDescriptorBuilder <FibTreeLabel>(customMember);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("IP address");
            builder.Width(120);
            builder.UpdaterMethod((entry, cell) => { cell.Value = entry.NextHop; });
            builder.AddChangeEvent(nameof(FibEntry.NextHop));
            builder.BuildAndAdd();

            // Bind database
            customMember.BoundCollection = fibTree.Labels;
        }
        private void initFibTable(ref DataGridView originalTable, ref CustomDataGridView <FibEntry> customMember, Panel container, bool canDelete, FibTable fibTable)
        {
            customMember = CreateTable <FibEntry>(ref originalTable, container);

            CustomDataGridViewColumnDescriptorBuilder <FibEntry> builder;

            // Column: prefix, IP format
            builder = new CustomDataGridViewColumnDescriptorBuilder <FibEntry>(customMember);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("Prefix");
            builder.Width(120);
            builder.UpdaterMethod((entry, cell) => { cell.Value = entry.IpForm; });
            builder.AddChangeEvent(nameof(FibEntry.IpForm));
            builder.BuildAndAdd();

            // Column: prefix, IP format
            builder = new CustomDataGridViewColumnDescriptorBuilder <FibEntry>(customMember);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("Binary");
            builder.Width(120);
            builder.UpdaterMethod((entry, cell) => { cell.Value = string.IsNullOrEmpty(entry.BinaryForm) ? "-" : entry.BinaryForm; });
            builder.AddChangeEvent(nameof(FibEntry.BinaryForm));
            builder.BuildAndAdd();

            // Column: next hop
            builder = new CustomDataGridViewColumnDescriptorBuilder <FibEntry>(customMember);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("Next hop");
            builder.Width(100);
            builder.UpdaterMethod((entry, cell) => { cell.Value = entry.NextHop; });
            builder.AddChangeEvent(nameof(FibEntry.NextHop));
            builder.BuildAndAdd();

            if (canDelete)
            {
                // Column: delete button
                builder = new CustomDataGridViewColumnDescriptorBuilder <FibEntry>(customMember);
                builder.Type(DataGridViewColumnType.Button);
                builder.Header("Delete");
                builder.Width(70);
                builder.ButtonText("Delete");
                builder.CellContentClickHandlerMethod((entry, cell, e) =>
                {
                    string msgBoxText = string.Format("Do you really want to delete this prefix?\n{0}", entry.IpForm);
                    var confirm       = MessageBox.Show(msgBoxText, "Delete confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (confirm == DialogResult.Yes)
                    {
                        fibTable.RemoveEntry(entry);
                    }
                });
                builder.BuildAndAdd();
            }

            // Bind database
            customMember.BoundCollection = fibTable;
        }
        protected CustomDataGridViewColumnDescriptorBuilder <TModelBasetype> idColumnCreator <TModelBasetype>(CustomDataGridView <TModelBasetype> table, ItemListFormBaseManager <TModelBasetype> .ColumnDescriptorBuilderGetterDelegate builderGetterMethod)
            where TModelBasetype : class, IModel, INotifyPropertyChanged
        {
            CustomDataGridViewColumnDescriptorBuilder <TModelBasetype> builder = builderGetterMethod();

            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("ID");
            builder.Width(30);
            builder.UpdaterMethod((item, cell) => { cell.Value = string.Format("#{0}", item.ID); });
            builder.AddChangeEvent(nameof(IModel.ID));
            return(builder);
        }
        protected CustomDataGridViewColumnDescriptorBuilder <TModelBasetype> nameColumnCreator <TModelBasetype>(CustomDataGridView <TModelBasetype> table, ItemListFormBaseManager <TModelBasetype> .ColumnDescriptorBuilderGetterDelegate builderGetterMethod)
            where TModelBasetype : class, IModel, INotifyPropertyChanged
        {
            CustomDataGridViewColumnDescriptorBuilder <TModelBasetype> builder = builderGetterMethod();

            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("Name");
            builder.Width(150);
            builder.CellStyle(BOLD_TEXT_CELL_STYLE);
            builder.UpdaterMethod((item, cell) => { cell.Value = item.Name; });
            builder.AddChangeEvent(nameof(IModel.Name));
            return(builder);
        }
        protected CustomDataGridViewColumnDescriptorBuilder <TModelBasetype> deleteButtonColumnCreator <TModelBasetype>(CustomDataGridView <TModelBasetype> table, ItemListFormBaseManager <TModelBasetype> .ColumnDescriptorBuilderGetterDelegate builderGetterMethod)
            where TModelBasetype : class, IModel, INotifyPropertyChanged
        {
            CustomDataGridViewColumnDescriptorBuilder <TModelBasetype> builder = builderGetterMethod();

            builder.Type(DataGridViewColumnType.Button);
            builder.Header("Delete");
            builder.Width(70);
            builder.DividerWidth(DEFAULT_DIVIDER_WIDTH);
            builder.ButtonText("Delete");
            builder.CellContentClickHandlerMethod((item, cell, e) => {
                string msgBoxText = string.Format("Do you really want to delete this {0}?\n{1}", SubjectSingular, item);
                var confirm       = MessageBox.Show(msgBoxText, "Delete confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (confirm == DialogResult.Yes)
                {
                    ((IModelListFormBaseManager)Manager).DeleteItem(item);
                }
            });
            return(builder);
        }
        public void InitializeTable()
        {
            table = form.CreateTable <TItem>();
            List <CustomDataGridViewColumnDescriptorBuilder <TItem> > columnDescriptorBuilders = new List <CustomDataGridViewColumnDescriptorBuilder <TItem> >();
            ColumnDescriptorBuilderGetterDelegate builderGetterMethod = () =>
            {
                CustomDataGridViewColumnDescriptorBuilder <TItem> builder = new CustomDataGridViewColumnDescriptorBuilder <TItem>();
                columnDescriptorBuilders.Add(builder);
                return(builder);
            };

            foreach (ColumnDescriptorCreatorDelegate columnDescriptorCreator in columnDescriptorCreators)
            {
                columnDescriptorCreator(table, builderGetterMethod);
            }
            foreach (CustomDataGridViewColumnDescriptorBuilder <TItem> builder in columnDescriptorBuilders)
            {
                builder.BuildAndAdd(table);
            }
            table.BoundCollection = boundCollection;
        }
        protected CustomDataGridViewColumnDescriptorBuilder <TModelBasetype> editButtonColumnCreator <TModelBasetype>(CustomDataGridView <TModelBasetype> table, ItemListFormBaseManager <TModelBasetype> .ColumnDescriptorBuilderGetterDelegate builderGetterMethod)
            where TModelBasetype : class, IModel, INotifyPropertyChanged
        {
            CustomDataGridViewColumnDescriptorBuilder <TModelBasetype> builder = builderGetterMethod();

            builder.Type(DataGridViewColumnType.Button);
            builder.Header("Edit");
            builder.Width(70);
            builder.ButtonText("Edit");
            builder.CellContentClickHandlerMethod((item, cell, e) => {
                ChildWindowBase editWindow = null;
                if (EditorFormTypeRegister != null)
                {
                    ModelEditorFormTypeRegister <TModelBasetype> typeRegisterCasted = EditorFormTypeRegister as ModelEditorFormTypeRegister <TModelBasetype>;
                    editWindow = typeRegisterCasted?.GetFormForModel(item) as ChildWindowBase;
                }
                else if (ModelEditorForm != null)
                {
                    editWindow = ModelEditorForm.GetInstance(item) as ChildWindowBase;
                }
                editWindow?.ShowAsChild();
            });
            return(builder);
        }
        private void initIpLookupStatisticsTable()
        {
            _ipLookupStatisticsTable = CreateTable <MultiLookup>(ref ipLookupStatisticsTable, ipLookupStatisticsTableContainer);

            CustomDataGridViewColumnDescriptorBuilder <MultiLookup> builder;

            // Column: prefix, IP format
            builder = new CustomDataGridViewColumnDescriptorBuilder <MultiLookup>(_ipLookupStatisticsTable);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("IP");
            builder.Width(150);
            builder.UpdaterMethod((entry, cell) => { cell.Value = entry.IP; });
            builder.AddChangeEvent(nameof(MultiLookup.IP));
            builder.BuildAndAdd();

            // Column: prefix, IP format
            builder = new CustomDataGridViewColumnDescriptorBuilder <MultiLookup>(_ipLookupStatisticsTable);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("IP (binary)");
            builder.Width(300);
            builder.UpdaterMethod((entry, cell) => { cell.Value = IpConverter.IpToBinary(entry.IP, " "); });
            builder.AddChangeEvent(nameof(MultiLookup.IP));
            builder.BuildAndAdd();

            // Column: next hop
            builder = new CustomDataGridViewColumnDescriptorBuilder <MultiLookup>(_ipLookupStatisticsTable);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("Next hop");
            builder.Width(150);
            builder.UpdaterMethod((entry, cell) => { cell.Value = entry.NextHop ?? "-"; });
            builder.AddChangeEvent(nameof(MultiLookup.NextHop));
            builder.BuildAndAdd();

            // Column: edges (original)
            builder = new CustomDataGridViewColumnDescriptorBuilder <MultiLookup>(_ipLookupStatisticsTable);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("Edges (original)");
            builder.Width(120);
            builder.UpdaterMethod((entry, cell) => { cell.Value = entry.EdgesOriginal?.ToString() ?? "-"; });
            builder.AddChangeEvent(nameof(MultiLookup.EdgesOriginal));
            builder.BuildAndAdd();

            // Column: edges (normalized)
            builder = new CustomDataGridViewColumnDescriptorBuilder <MultiLookup>(_ipLookupStatisticsTable);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("Edges (normalized)");
            builder.Width(120);
            builder.UpdaterMethod((entry, cell) => { cell.Value = entry.EdgesNormalized?.ToString() ?? "-"; });
            builder.AddChangeEvent(nameof(MultiLookup.EdgesNormalized));
            builder.BuildAndAdd();

            // Column: edges (original)
            builder = new CustomDataGridViewColumnDescriptorBuilder <MultiLookup>(_ipLookupStatisticsTable);
            builder.Type(DataGridViewColumnType.TextBox);
            builder.Header("Edges (compressed)");
            builder.Width(120);
            builder.UpdaterMethod((entry, cell) => { cell.Value = entry.EdgesCompressed?.ToString() ?? "-"; });
            builder.AddChangeEvent(nameof(MultiLookup.EdgesCompressed));
            builder.BuildAndAdd();

            // Column: visualize
            builder = new CustomDataGridViewColumnDescriptorBuilder <MultiLookup>(_ipLookupStatisticsTable);
            builder.Type(DataGridViewColumnType.Button);
            builder.Header("Visualize");
            builder.Width(90);
            builder.ButtonText("Visualize");
            builder.CellContentClickHandlerMethod((entry, cell, e) => { visualizeLookups(entry); });
            builder.BuildAndAdd();

            // Bind database
            _ipLookupStatisticsTable.BoundCollection = mMultiLookupCollection;
        }