public virtual void RefreshHostDescriptor(IGroupDescriptor descriptor)
        {
            PatternNodes.Where(p => p.Value.GetType() == typeof(Place)).ToList().ForEach(
                pp =>
            {
                var k = pp.Key + "_" + GetHashCode();
                var v = new FieldDescriptor <Place> {
                    Value      = pp.Value as Place,
                    Attributes =
                        new List <Attribute>()    // GetType().GetField(pp.Key).GetCustomAttributes(true).Cast<Attribute>().ToList()
                };
                descriptor.Places.Add(
                    k,
                    v
                    );
            }
                );


            var pns = PatternNodes.Where(p => p.Value.GetType() == typeof(Transition)).ToList();


            pns.ForEach(
                p =>
            {
                var key = p.Key + "_" + GetHashCode();
                var t   = GetType();
                var f   = t.GetField(
                    p.Key,
                    BindingFlags.Public | BindingFlags.NonPublic |
                    BindingFlags.Instance
                    );
                var val = new FieldDescriptor <Transition>()
                {
                    Value = (Transition)p.Value
                };


                if (f != null)
                {
                    var attrs      = f.GetCustomAttributes(true).Cast <Attribute>().ToList();
                    val.Attributes = attrs;
                }

                descriptor.Transitions.Add(key, val);
            }
                );
        }
Beispiel #2
0
        private static IGroupDescriptor[] Simplify(IGroupDescriptor groupDescriptor)
        {
            var itemCount = groupDescriptor.Items.Count;

            if (itemCount == 0)
            {
                return(EmptyArray <IGroupDescriptor> .Instance);
            }
            // ReSharper disable once TailRecursiveCall
            if (itemCount == 1 && groupDescriptor.Items.First() is IGroupDescriptor group)
            {
                return(Simplify(group));
            }
            if (groupDescriptor.Items.All(item => item is IGroupDescriptor))
            {
                return(groupDescriptor.Items.OfType <IGroupDescriptor>().ToArray());
            }
            return(new[] { groupDescriptor });
        }
        public static string GetMemberName(this IGroupDescriptor descriptor)
        {
            var groupDescriptor = descriptor as GroupDescriptor;

            if (groupDescriptor != null)
            {
                return(groupDescriptor.Member);
            }

            var columnGroupDescriptor = descriptor as ColumnGroupDescriptor;

            if (columnGroupDescriptor != null)
            {
                var boundColumn = columnGroupDescriptor.Column as GridViewBoundColumnBase;
                if (boundColumn != null)
                {
                    return(boundColumn.GetDataMemberName());
                }
            }

            return(null);
        }
Beispiel #4
0
        public static GroupViewModel CreateGroupViewModel(IGroupDescriptor group, int depth = 0, bool click2Collapse = false, Func <bool> collapseControl = null)
        {
            var groupHeader = CreateGroupHeader(group.Name, group.Description, click2Collapse);
            var dockPanel   = CreateGroupPanel(groupHeader, depth);
            var itemsPanel  = new StackPanel();

            dockPanel.Children.Add(itemsPanel);
            var viewModel = new GroupViewModel(group, groupHeader, dockPanel, itemsPanel, depth);

            if (click2Collapse)
            {
                groupHeader.MouseLeftButtonUp += (sender, e) =>
                {
                    var collapse = !viewModel.IsCollapsed;
                    if (collapse && collapseControl != null && !collapseControl())
                    {
                        return;
                    }
                    viewModel.SetCollapsed(collapse);
                }
            }
            ;
            return(viewModel);
        }
Beispiel #5
0
 private bool Equals(IGroupDescriptor other) => string.Equals(Name, other.Name) && Equals(Items, other.Items);
Beispiel #6
0
 public virtual bool CanCollapse(IGroupDescriptor group, int depth) => true;