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); }
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++; } } }