Example #1
0
        private void Add <TEditor, TRow>(BsEditorGroupAttribute attr, IBsEditorGroupModel model, object[] editableTabIds, string propertyName)
            where TEditor : IBsEditorGroupModel
            where TRow : BsEditorGroupItemModel, new()
        {
            var group = new BsEditorGroupBuilder <TEditor>(model, this.viewContext, editableTabIds)
                        .Id(attr.Id);

            group.SetPropertyName(propertyName);

            var rowType = typeof(TRow);

            var genericArgs = rowType.BaseType.GetGenericArguments();

            if (genericArgs.Count() == 1) // register renderer via reflection because we don't know the type of TForm
            {
                var method = typeof(BsEditorGroupBuilder <TEditor>).GetMethod("RegisterRenderer",
                                                                              BindingFlags.Default | BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic);
                var generic = method.MakeGenericMethod(typeof(TRow), genericArgs[0]); // genericArgs[0] => TForm
                generic.Invoke(group, null);
            }
            else
            {
                group.renderer = new BsEditorGroupRenderer <TEditor, TRow>(group);
            }

            if (model != null)
            {
                var connection = model.GetTabGroupConnection();

                if (connection != null)
                {
                    connection.GroupId = attr.Id;
                    this.Connections.Add(connection);
                }
            }

            InsertGroup <TEditor, TRow>(attr.Id, group);
        }
Example #2
0
 private void InsertGroup <TEditor, TRow>(object id, BsEditorGroupBuilder <TEditor> tabBuilder)
     where TEditor : IBsEditorGroupModel
     where TRow : BsEditorGroupItemModel
 {
     this.Groups.Add(id, tabBuilder);
 }