[mapguide-commits] r5465 - in sandbox/maestro-3.0: Maestro.Editors/MapDefinition OSGeo.MapGuide.MaestroAPI/ObjectModels OSGeo.MapGuide.MaestroAPI.Native

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Fri Dec 10 04:46:00 EST 2010


Author: jng
Date: 2010-12-10 01:46:00 -0800 (Fri, 10 Dec 2010)
New Revision: 5465

Modified:
   sandbox/maestro-3.0/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/MgReadOnlyStream.cs
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinition.cs
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs
Log:
3.0 sandbox changes:
 - #1526: Retain selection when moving items up or down. Add drag/drop support reordering of layers in draw order tab.
 - Fix incorrect IDisposable implementation in MgReadOnlyStream

Modified: sandbox/maestro-3.0/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs	2010-12-10 08:49:16 UTC (rev 5464)
+++ sandbox/maestro-3.0/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs	2010-12-10 09:46:00 UTC (rev 5465)
@@ -229,6 +229,8 @@
             {
                 _map.MoveUp(layer.Tag);
                 _doLayerModel.Invalidate();
+
+                RestoreDrawOrderSelection(layer);
             }
         }
 
@@ -239,9 +241,12 @@
             {
                 _map.MoveDown(layer.Tag);
                 _doLayerModel.Invalidate();
+
+                RestoreDrawOrderSelection(layer);
             }
         }
 
+       
         private void btnDLMoveLayerTop_Click(object sender, EventArgs e)
         {
             var layer = GetSelectedDrawOrderItem() as LayerItem;
@@ -249,6 +254,8 @@
             {
                 _map.SetTopDrawOrder(layer.Tag);
                 _doLayerModel.Invalidate();
+
+                RestoreDrawOrderSelection(layer);
             }
         }
 
@@ -259,9 +266,43 @@
             {
                 _map.SetBottomDrawOrder(layer.Tag);
                 _doLayerModel.Invalidate();
+
+                RestoreDrawOrderSelection(layer);
             }
         }
 
+        private static void RestoreSelection<TaggedType>(TreeViewAdv tree, Predicate<TaggedType> predicate) where TaggedType : class
+        {
+            //Restore selection
+            TreeNodeAdv selectedNode = null;
+            foreach (var node in tree.AllNodes)
+            {
+                var tag = node.Tag as TaggedType;
+                
+                if (tag != null && predicate(tag))
+                {
+                    selectedNode = node;
+                    break;
+                }
+            }
+            if (selectedNode != null)
+                tree.SelectedNode = selectedNode;
+        }
+
+        private void RestoreBaseLayerSelection(BaseLayerItem item)
+        {
+            //The node tag will probably be different, but the wrapped
+            //instance is what we're checking for
+            RestoreSelection<BaseLayerItem>(trvBaseLayers, (tag) => { return tag.Tag == item.Tag; });
+        }
+
+        private void RestoreDrawOrderSelection(LayerItem layer)
+        {
+            //The node tag will probably be different, but the wrapped
+            //instance is what we're checking for
+            RestoreSelection<LayerItem>(trvLayerDrawingOrder, (tag) => { return tag.Tag == layer.Tag; });
+        }
+
         private void CreateNewGroup(IMapLayerGroup parentGroup)
         {
             int counter = 0;
@@ -447,7 +488,11 @@
             {
                 var grp = layer.Parent;
                 grp.MoveUp(layer.Tag);
-                _tiledLayerModel.Invalidate();
+                var node = trvBaseLayers.SelectedNode.Parent;
+                var path = trvBaseLayers.GetPath(node);
+                _tiledLayerModel.Invalidate(path);
+
+                RestoreBaseLayerSelection(layer);
             }
         }
 
@@ -458,7 +503,11 @@
             {
                 var grp = layer.Parent;
                 grp.MoveDown(layer.Tag);
-                _tiledLayerModel.Invalidate();
+                var node = trvBaseLayers.SelectedNode.Parent;
+                var path = trvBaseLayers.GetPath(node);
+                _tiledLayerModel.Invalidate(path);
+
+                RestoreBaseLayerSelection(layer);
             }
         }
 
@@ -602,46 +651,108 @@
 
         private void trvLayerDrawingOrder_DragDrop(object sender, DragEventArgs e)
         {
+            //TODO: Handle drag/drop re-ordering
             var rids = e.Data.GetData(typeof(ResourceIdentifier[])) as ResourceIdentifier[];
-            if (rids == null || rids.Length == 0)
-                return;
-
-            IMapLayer layer = null;
-            var node = trvLayersGroup.GetNodeAt(trvLayersGroup.PointToClient(new Point(e.X, e.Y)));
-            if (node != null)
+            if (rids != null && rids.Length > 0)
             {
-                var li = node.Tag as LayerItem;
-                if (li != null)
-                    layer = li.Tag;
-            }
+                IMapLayer layer = null;
+                var node = trvLayerDrawingOrder.GetNodeAt(trvLayerDrawingOrder.PointToClient(new Point(e.X, e.Y)));
+                if (node != null)
+                {
+                    var li = node.Tag as LayerItem;
+                    if (li != null)
+                        layer = li.Tag;
+                }
 
-            int added = 0;
-            foreach (var rid in rids)
-            {
-                if (rid.ResourceType == ResourceTypes.LayerDefinition)
+                int added = 0;
+                foreach (var rid in rids)
                 {
-                    var name = GenerateLayerName(rid.ToString(), _map);
-                    //var layer = _map.AddLayer(parent == null ? null : parent.Name, name, rid.ToString());
-                    var lyr = _map.AddLayer(layer, null, name, rid.ToString());
-                    added++;
+                    if (rid.ResourceType == ResourceTypes.LayerDefinition)
+                    {
+                        var name = GenerateLayerName(rid.ToString(), _map);
+                        //var layer = _map.AddLayer(parent == null ? null : parent.Name, name, rid.ToString());
+                        var lyr = _map.AddLayer(layer, null, name, rid.ToString());
+                        added++;
+                    }
                 }
+
+                if (added > 0)
+                {
+                    //TODO: Fine-grain invalidation
+                    RefreshModels();
+                }
             }
+            else
+            {
+                var data = e.Data.GetData(typeof(TreeNodeAdv[])) as TreeNodeAdv[];
+                if (data != null && data.Length == 1)
+                {
+                    var li = data[0].Tag as LayerItem;
+                    if (li != null)
+                    {
+                        IMapLayer sourceLayer = li.Tag;
+                        IMapLayer targetLayer = null;
+                        var node = trvLayerDrawingOrder.GetNodeAt(trvLayerDrawingOrder.PointToClient(new Point(e.X, e.Y)));
+                        if (node != null)
+                        {
+                            var tli = node.Tag as LayerItem;
+                            if (tli != null)
+                                targetLayer = tli.Tag;
+                        }
 
-            if (added > 0)
-            {
-                //TODO: Fine-grain invalidation
-                RefreshModels();
+                        if (sourceLayer != null && targetLayer != null && sourceLayer != targetLayer)
+                        {
+                            int idx = _map.GetIndex(targetLayer);
+                            if (idx >= 0)
+                            {
+                                _map.RemoveLayer(sourceLayer);
+                                _map.InsertLayer(idx, sourceLayer);
+                                RefreshModels();
+                            }
+                        }
+                    }
+                }
             }
         }
 
         private void trvLayerDrawingOrder_DragEnter(object sender, DragEventArgs e)
         {
-            HandleDragEnter(e);
+            var data = e.Data.GetData(typeof(TreeNodeAdv[])) as TreeNodeAdv[];
+            if (data == null)
+            {
+                HandleDragEnter(e);
+            }
+            else
+            {
+                var layer = data[0].Tag as LayerItem;
+                if (layer == null)
+                {
+                    e.Effect = DragDropEffects.None;
+                    return;
+                }
+            }
         }
 
         private void trvLayerDrawingOrder_DragOver(object sender, DragEventArgs e)
         {
-            HandleDragOver(e);
+            var data = e.Data.GetData(typeof(TreeNodeAdv[])) as TreeNodeAdv[];
+            if (data == null)
+            {
+                HandleDragOver(e);
+            }
+            else
+            {
+                var li = data[0].Tag as LayerItem;
+                if (li == null)
+                {
+                    e.Effect = DragDropEffects.None;
+                    return;
+                }
+                else
+                {
+                    e.Effect = DragDropEffects.Move;
+                }
+            }
         }
 
         private void trvLayerDrawingOrder_ItemDrag(object sender, ItemDragEventArgs e)
@@ -656,31 +767,31 @@
 
         private void trvBaseLayers_DragDrop(object sender, DragEventArgs e)
         {
+            int added = 0;
             var rids = e.Data.GetData(typeof(ResourceIdentifier[])) as ResourceIdentifier[];
-            if (rids == null || rids.Length == 0)
-                return;
-
-            var node = trvLayersGroup.GetNodeAt(trvLayersGroup.PointToClient(new Point(e.X, e.Y)));
-
-            IBaseMapGroup group = null;
-            if (node != null && node.Tag is BaseLayerGroupItem)
+            if (rids != null && rids.Length > 0)
             {
-                group = ((BaseLayerGroupItem)node.Tag).Tag;
-            }
+                var node = trvLayersGroup.GetNodeAt(trvLayersGroup.PointToClient(new Point(e.X, e.Y)));
 
-            int added = 0;
-            //No group? Let's make one!
-            if (group == null)
-            {
-                _map.InitBaseMap();
-                group = _map.BaseMap.AddBaseLayerGroup(GenerateBaseGroupName(_map));
+                IBaseMapGroup group = null;
+                if (node != null && node.Tag is BaseLayerGroupItem)
+                {
+                    group = ((BaseLayerGroupItem)node.Tag).Tag;
+                }
 
-                foreach (var rid in rids)
+                //No group? Let's make one!
+                if (group == null)
                 {
-                    if (rid.ResourceType == ResourceTypes.LayerDefinition)
+                    _map.InitBaseMap();
+                    group = _map.BaseMap.AddBaseLayerGroup(GenerateBaseGroupName(_map));
+
+                    foreach (var rid in rids)
                     {
-                        group.AddLayer(GenerateBaseLayerName(rid.ToString(), _map.BaseMap), rid.ToString());
-                        added++;
+                        if (rid.ResourceType == ResourceTypes.LayerDefinition)
+                        {
+                            group.AddLayer(GenerateBaseLayerName(rid.ToString(), _map.BaseMap), rid.ToString());
+                            added++;
+                        }
                     }
                 }
             }

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinition.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinition.cs	2010-12-10 08:49:16 UTC (rev 5464)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinition.cs	2010-12-10 09:46:00 UTC (rev 5465)
@@ -125,6 +125,21 @@
             get { return true; }
         }
 
+        /// <summary>
+        /// Inserts the layer at the specified index
+        /// </summary>
+        /// <param name="idx"></param>
+        /// <param name="layer"></param>
+        void IMapDefinition.InsertLayer(int idx, IMapLayer layer)
+        {
+            var li = layer as MapLayerType;
+            if (li != null)
+            {
+                this.MapLayer.Insert(idx, li);
+                li.Parent = this;
+            }
+        }
+
         void IMapDefinition.SetExtents(double minx, double miny, double maxx, double maxy)
         {
             if (this.Extents == null)

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs	2010-12-10 08:49:16 UTC (rev 5464)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ObjectModels/MapDefinitionInterfaces.cs	2010-12-10 09:46:00 UTC (rev 5465)
@@ -203,6 +203,13 @@
         /// </summary>
         /// <param name="layer"></param>
         void SetBottomDrawOrder(IMapLayer layer);
+
+        /// <summary>
+        /// Inserts the layer at the specified index
+        /// </summary>
+        /// <param name="idx"></param>
+        /// <param name="layer"></param>
+        void InsertLayer(int idx, IMapLayer layer);
     }
 
     /// <summary>

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/MgReadOnlyStream.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/MgReadOnlyStream.cs	2010-12-10 08:49:16 UTC (rev 5464)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/MgReadOnlyStream.cs	2010-12-10 09:46:00 UTC (rev 5465)
@@ -51,7 +51,6 @@
         ~MgReadOnlyStream()
         {
             Dispose(false);
-            GC.SuppressFinalize(this);
         }
 
         protected override void Dispose(bool disposing)



More information about the mapguide-commits mailing list