private void trvBaseLayers_DragDrop(object sender, DragEventArgs e) { var rids = e.Data.GetData(typeof(RepositoryHandle[])) as RepositoryHandle[]; var data = e.Data.GetData(typeof(TreeNodeAdv[])) as TreeNodeAdv[]; if (rids != null && rids.Length > 0) { int added = 0; var node = trvBaseLayers.GetNodeAt(trvBaseLayers.PointToClient(new Point(e.X, e.Y))); IBaseMapGroup group = null; if (node != null && node.Tag is BaseLayerGroupItem) { group = ((BaseLayerGroupItem)node.Tag).Tag; } //No group? Let's make one! if (group == null) { group = _tsd.AddBaseLayerGroup(GenerateBaseGroupName(_tsd)); } IBaseMapLayer focusLayer = null; foreach (var rid in rids) { if (rid.ResourceId.ResourceType == ResourceTypes.LayerDefinition.ToString()) { focusLayer = group.AddLayer(GenerateBaseLayerName(rid.ResourceId.ToString(), _tsd), rid.ResourceId.ToString()); added++; } } if (added > 0) { _tiledLayerModel.Invalidate(); if (focusLayer != null) { RestoreBaseLayerSelection(focusLayer); } } } else if (data != null && data.Length == 1) { var li = data[0].Tag as BaseLayerItem; if (li != null) { IBaseMapLayer sourceLayer = li.Tag; IBaseMapLayer targetLayer = null; IBaseMapGroup targetGroup = null; var node = trvBaseLayers.GetNodeAt(trvBaseLayers.PointToClient(new Point(e.X, e.Y))); BaseLayerItem tli = null; if (node != null) { tli = node.Tag as BaseLayerItem; var tlg = node.Tag as BaseLayerGroupItem; if (tli != null) { targetLayer = tli.Tag; } else if (tlg != null) { targetGroup = tlg.Tag; } } if (sourceLayer != null && targetGroup != null && targetGroup.GetIndex(sourceLayer) < 0) //Dropping to a different base layer group { var srcGroup = _tsd.GetGroupForLayer(sourceLayer); srcGroup.RemoveBaseMapLayer(sourceLayer); targetGroup.InsertLayer(0, sourceLayer); _tiledLayerModel.Invalidate(); //Keep group expanded if (tli != null) { RestoreBaseLayerSelection(sourceLayer); } } else if (sourceLayer != null && targetLayer != null && sourceLayer != targetLayer) { var srcGroup = _tsd.GetGroupForLayer(sourceLayer); var dstGroup = _tsd.GetGroupForLayer(targetLayer); if (srcGroup != null) { if (srcGroup == dstGroup) { int idx = srcGroup.GetIndex(targetLayer); if (idx >= 0) { srcGroup.RemoveBaseMapLayer(sourceLayer); srcGroup.InsertLayer(idx, sourceLayer); _tiledLayerModel.Invalidate(); //Keep group expanded if (tli != null) { RestoreBaseLayerSelection(sourceLayer); } } } else { srcGroup.RemoveBaseMapLayer(sourceLayer); dstGroup.InsertLayer(0, targetLayer); _tiledLayerModel.Invalidate(); //Keep group expanded if (tli != null) { RestoreBaseLayerSelection(targetLayer); } } } } } } }