private void GroupsTree_DragDrop(object o, DragDropArgs args) { Drag.Finish(args.Context, true, true, args.Time); if (grid.Selection.Count == 0) { return; } TreePath path; TreeViewDropPosition pos; groupsPanel.GroupsTree.GetDestRowAtPos(args.X, args.Y, out path, out pos); TreeIter row; groupsPanel.GroupsTree.Model.GetIter(out row, path); G group = (G)groupsPanel.GroupsTree.Model.GetValue(row, 2); using (Message messageDialog = GetMovingToGroupMessage(group.Name)) { messageDialog.Buttons = MessageButtons.YesNo; if (messageDialog.Run() != ResponseType.Yes) { return; } foreach (int selectedIndex in grid.Selection) { object entity = grid.Model [selectedIndex]; IPersistableEntity <T> persistableEntity = entity as IPersistableEntity <T>; if (persistableEntity == null) { continue; } IHirarchicalEntity hirarchicalEntity = entity as IHirarchicalEntity; if (hirarchicalEntity == null) { continue; } if (group.Id == GroupBase <G> .DeletedGroupId) { hirarchicalEntity.Deleted = true; hirarchicalEntity.GroupId = GroupBase <G> .DefaultGroupId; } else { hirarchicalEntity.Deleted = false; hirarchicalEntity.GroupId = group.Id; } persistableEntity.CommitChanges(); } OnEntitiesChanged(groupsPanel.GetSelectedGroupId()); OnEntitiesMovedToAGroup(); } }
protected virtual long?GetEntityGroup(T entity) { IHirarchicalEntity groupEnt = entity as IHirarchicalEntity; if (groupEnt != null) { return(groupEnt.GroupId); } return(null); }
protected override void ReinitializeGrid(bool reinitGroups, long?selectedGroup) { if (reinitializing) { return; } try { reinitializing = true; if (btnGroups.Active) { if (reinitGroups) { if (selectedGroup.HasValue) { selectedGroupId = selectedGroup.Value; } else if (groupsPanel.GroupsCount > 0) { selectedGroupId = groupsPanel.GetSelectedGroupId(); } else { LoadSavedGroup(); } groupsPanel.LoadGroups(GetAllGroups()); if (SelectedItems.Length > 0) { T lastSelected = SelectedItems [SelectedItems.Length - 1]; IHirarchicalEntity lastSelectedHieararchical = lastSelected as IHirarchicalEntity; if (lastSelectedHieararchical == null || !lastSelectedHieararchical.Deleted) { selectedGroupId = GetEntityGroup(lastSelected); } } if ((!selectedGroupId.HasValue || !groupsPanel.SelectGroupId((int)selectedGroupId)) && groupsPanel.SelectFirstGroup()) { selectedGroupId = groupsPanel.GetSelectedGroupId(); } } SaveGroup(); } else { selectedGroupId = null; } GetNewEntities(); grid.GrabFocus(); bool selected = false; if (selectedId.HasValue) { int index = entities.FindIndex(e => Equals(propertyForID.GetValue(e, null), selectedId)); if (index >= 0) { grid.Selection.Clear(); grid.Selection.Select(index); grid.FocusRow(index); selected = true; } } if (selected) { RefreshTotalRows(); } else { SelectFirstRow(); } } finally { reinitializing = false; } }