Exemple #1
0
        public GroupViewModel CreateGroupRender(IGroup targetGroup, CompositeCommand cmds = null)
        {
            //create group element
            GroupViewModel NewGroupVM = WidgetFactory.CreateGroup(targetGroup) as GroupViewModel;

            //remove the older inner group
            List <GroupViewModel> AllGroups = items.OfType <GroupViewModel>().Where(c => c.IsGroup == true).ToList <GroupViewModel>();

            foreach (GroupViewModel it in AllGroups)
            {
                if (NewGroupVM.IsChild(it.widgetGID, true))
                {
                    it.IsSelected = false;
                    _selectionService.RemoveWidget(it);
                    items.Remove(it);
                }
            }


            //initialize all elements in new group
            foreach (WidgetViewModBase wdg in Items)
            {
                if (true == NewGroupVM.IsChild(wdg.widgetGID, false))
                {
                    wdg.ParentID   = NewGroupVM.widgetGID;
                    wdg.IsGroup    = false;
                    wdg.IsSelected = false;
                    NewGroupVM.AddChild(wdg);
                }
            }

            #region Reset Zorder

            // We got a crash report which was caused by  the exception System.InvalidOperationException from
            // System.Linq.Enumerable.Max(System.Collections.Generic.IEnumerable`1<Int32>), so make sure WidgetChildren has element first.
            // See http://bts1.nhncorp.com/nhnbts/browse/DSTUDIO-1679
            SetTargetObject2Front(NewGroupVM.WidgetChildren, cmds);
            //SetGroupTargetObjectContinue(, cmds, NewGroupVM);

            #endregion

            //UI Render the new group
            NewGroupVM.IsSelected = true;
            NewGroupVM.Status     = GroupStatus.Selected;
            //NewGroupVM.ZOrder = -3;
            Items.Add(NewGroupVM);
            NewGroupVM.Refresh();

            _ListEventAggregator.GetEvent <GroupChangedEvent>().Publish(true);
            return(NewGroupVM);
        }
Exemple #2
0
        private void SetGroupTargetObjectContinue(List <WidgetViewModBase> targetWidgets, CompositeCommand cmds, GroupViewModel NewGroupVM)
        {
            if (targetWidgets.Count < 1)
            {
                return;
            }

            int maxZOrder = targetWidgets.Max(a => a.ZOrder);
            int minZOrder = targetWidgets.Min(a => a.ZOrder);

            if (targetWidgets.Count() < (maxZOrder - minZOrder + 1))
            {
                targetWidgets.Sort(delegate(WidgetViewModBase a1, WidgetViewModBase a2)
                {
                    if (a1.ZOrder == a2.ZOrder)
                    {
                        return(0);
                    }
                    return((a1.ZOrder < a2.ZOrder) ? 1 : -1);
                });

                int maxZ = maxZOrder;
                foreach (WidgetViewModBase item in targetWidgets)
                {
                    //Undo command
                    if (cmds != null)
                    {
                        PropertyChangeCommand cmd = new PropertyChangeCommand(item, "ZOrder", item.ZOrder, maxZ);
                        cmds.AddCommand(cmd);
                    }
                    item.ZOrder = maxZ--;
                }

                List <WidgetViewModBase> widgets = items.OfType <WidgetViewModBase>().Where(a => a.ZOrder > minZOrder && a.ZOrder < maxZOrder && !(NewGroupVM.IsChild(a.widgetGID, false))).ToList <WidgetViewModBase>();
                widgets.Sort(delegate(WidgetViewModBase a1, WidgetViewModBase a2)
                {
                    if (a1.ZOrder == a2.ZOrder)
                    {
                        return(0);
                    }
                    return((a1.ZOrder > a2.ZOrder) ? 1 : -1);
                });

                int minZ = minZOrder;
                foreach (WidgetViewModBase item in widgets)
                {
                    //Undo command
                    if (cmds != null)
                    {
                        PropertyChangeCommand cmd = new PropertyChangeCommand(item, "ZOrder", item.ZOrder, minZ);
                        cmds.AddCommand(cmd);
                    }
                    item.ZOrder = minZ++;
                }
            }
        }