[mapguide-commits] r7942 - trunk/Tools/Maestro/Maestro.Editors/MapDefinition

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Fri Nov 29 07:20:24 PST 2013


Author: jng
Date: 2013-11-29 07:20:24 -0800 (Fri, 29 Nov 2013)
New Revision: 7942

Modified:
   trunk/Tools/Maestro/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs
Log:
#2385: Tie up loose ends in Map Definition editor as a result of introducing multi-selection support.

Modified: trunk/Tools/Maestro/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs	2013-11-29 14:38:43 UTC (rev 7941)
+++ trunk/Tools/Maestro/Maestro.Editors/MapDefinition/MapLayersSectionCtrl.cs	2013-11-29 15:20:24 UTC (rev 7942)
@@ -23,6 +23,7 @@
 using System.Drawing;
 using System.Data;
 using System.Text;
+using System.Linq;
 using System.Windows.Forms;
 using Maestro.Shared.UI;
 using Aga.Controls.Tree;
@@ -191,6 +192,8 @@
 
         private void OnDynamicGroupItemSelected(GroupItem group)
         {
+            btnAddGroup.Enabled = true;
+            btnGRPAddLayer.Enabled = true;
             btnRemoveGroup.Enabled = true;
             btnMoveLayerOrGroupUp.Enabled = true;
             btnMoveLayerOrGroupDown.Enabled = true;
@@ -484,6 +487,8 @@
 
         private void OnDynamicLayerItemSelected(LayerItem layer)
         {
+            btnAddGroup.Enabled = false;
+            btnGRPAddLayer.Enabled = false;
             btnGRPRemoveLayer.Enabled = true;
             btnMoveLayerOrGroupUp.Enabled = true;   //TODO: Disable if layer is top of its group
             btnMoveLayerOrGroupDown.Enabled = true; //TODO: Disable if layer is bottom of its group
@@ -495,22 +500,76 @@
             propertiesPanel.Controls.Add(item);
         }
 
+        static bool AllLayers(System.Collections.ObjectModel.ReadOnlyCollection<TreeNodeAdv> nodes)
+        {
+            foreach(var node in nodes)
+            {
+                var layer = node.Tag as LayerItem;
+                if (layer == null)
+                    return false;
+            }
+            return true;
+        }
+
+        static bool AllBaseLayers(System.Collections.ObjectModel.ReadOnlyCollection<TreeNodeAdv> nodes)
+        {
+            foreach (var node in nodes)
+            {
+                var layer = node.Tag as BaseLayerItem;
+                if (layer == null)
+                    return false;
+            }
+            return true;
+        }
+
+        static bool AllGroups(System.Collections.ObjectModel.ReadOnlyCollection<TreeNodeAdv> nodes)
+        {
+            foreach (var node in nodes)
+            {
+                var group = node.Tag as GroupItem;
+                if (group == null)
+                    return false;
+            }
+            return true;
+        }
+
+        static bool AllBaseGroups(System.Collections.ObjectModel.ReadOnlyCollection<TreeNodeAdv> nodes)
+        {
+            foreach (var node in nodes)
+            {
+                var group = node.Tag as BaseLayerGroupItem;
+                if (group == null)
+                    return false;
+            }
+            return true;
+        }
+
         private void OnMultipleItemsSelected(System.Collections.ObjectModel.ReadOnlyCollection<TreeNodeAdv> nodes)
         {
-            //Disable all toolbar buttons
-            btnGRPRemoveLayer.Enabled = 
-            btnMoveLayerOrGroupUp.Enabled = 
+            bool bAllLayers = AllLayers(nodes);
+            bool bAllGroups = AllGroups(nodes);
+            bool bAllBaseLayers = AllBaseLayers(nodes);
+            bool bAllBaseGroups = AllBaseGroups(nodes);
+
+            btnAddGroup.Enabled = false;
+            btnRemoveGroup.Enabled = bAllGroups;
+            btnConvertLayerGroupToBaseGroup.Enabled = bAllGroups;
+            btnGRPAddLayer.Enabled = false;
+            btnGRPRemoveLayer.Enabled = bAllLayers;
+            btnMoveLayerOrGroupUp.Enabled = false;
             btnMoveLayerOrGroupDown.Enabled = false;
 
-            btnDLMoveLayerBottom.Enabled =
-            btnDLMoveLayerDown.Enabled =
-            btnDLMoveLayerTop.Enabled =
-            btnDLMoveLayerUp.Enabled =
+            btnDLMoveLayerBottom.Enabled = false;
+            btnDLMoveLayerDown.Enabled = false;
+            btnDLMoveLayerTop.Enabled = false;
+            btnDLMoveLayerUp.Enabled = false;
             btnDLRemoveLayer.Enabled = false;
 
-            btnAddBaseLayer.Enabled = 
-            btnRemoveBaseLayerGroup.Enabled = 
-            btnBaseLayerGroupToRegular.Enabled = false;
+            btnNewBaseLayerGroup.Enabled = false;
+            btnAddBaseLayer.Enabled = false;
+            btnRemoveBaseLayer.Enabled = bAllBaseLayers;
+            btnRemoveBaseLayerGroup.Enabled = bAllBaseGroups;
+            btnBaseLayerGroupToRegular.Enabled = bAllBaseGroups;
 
             propertiesPanel.Controls.Clear();
 
@@ -550,13 +609,29 @@
 
         private void btnRemoveGroup_Click(object sender, EventArgs e)
         {
-            var group = GetSelectedLayerGroupItem() as GroupItem;
-            if (group != null)
+            var remove = new List<GroupItem>();
+            foreach (var item in GetSelectedLayerGroupItems())
             {
-                RemoveSelectedLayerGroupItem(group);
+                var group = item as GroupItem;
+                if (group != null)
+                {
+                    remove.Add(group);
+                }
             }
+            RemoveSelectedLayerGroupItems(remove);
         }
 
+        private void RemoveSelectedLayerGroupItems(IEnumerable<GroupItem> groups)
+        {
+            foreach (var group in groups)
+            {
+                _map.RemoveLayerGroupAndChildLayers(group.Tag.Name);
+            }
+            propertiesPanel.Controls.Clear();
+            _grpLayerModel.Invalidate();
+            _doLayerModel.Invalidate();
+        }
+
         private void RemoveSelectedLayerGroupItem(GroupItem group)
         {
             _map.RemoveLayerGroupAndChildLayers(group.Tag.Name);
@@ -583,10 +658,13 @@
 
         private void btnGRPRemoveLayer_Click(object sender, EventArgs e)
         {
-            var layer = GetSelectedLayerGroupItem() as LayerItem;
-            if (layer != null)
+            foreach (var item in GetSelectedLayerGroupItems())
             {
-                RemoveSelectedLayerGroupItem(layer);
+                var layer = item as LayerItem;
+                if (layer != null)
+                {
+                    RemoveSelectedLayerGroupItem(layer);
+                }
             }
         }
 
@@ -599,39 +677,47 @@
 
         private void btnConvertLayerGroupToBaseGroup_Click(object sender, EventArgs e)
         {
-            var group = GetSelectedLayerGroupItem() as GroupItem;
-            if (group != null)
+            List<string> messages = new List<string>();
+            foreach (var item in GetSelectedLayerGroupItems())
             {
-                var layGroup = group.Tag;
-                var layers = _map.GetLayersForGroup(layGroup.Name);
+                var group = item as GroupItem;
+                if (group != null)
+                {
+                    var layGroup = group.Tag;
+                    var layers = _map.GetLayersForGroup(layGroup.Name);
 
-                if (_map.BaseMap == null)
-                    _map.InitBaseMap();
+                    if (_map.BaseMap == null)
+                        _map.InitBaseMap();
 
-                int counter = 1;
-                string groupName = layGroup.Name;
-                var blg = _map.BaseMap.GetGroup(groupName);
-                while (blg != null)
-                {
-                    groupName = layGroup.Name + " (" + counter + ")";
-                    counter++;
+                    int counter = 1;
+                    string groupName = layGroup.Name;
+                    var blg = _map.BaseMap.GetGroup(groupName);
+                    while (blg != null)
+                    {
+                        groupName = layGroup.Name + " (" + counter + ")";
+                        counter++;
 
-                    blg = _map.BaseMap.GetGroup(groupName);
-                }
-                blg = _map.BaseMap.AddBaseLayerGroup(groupName);
-                blg.LegendLabel = layGroup.LegendLabel;
+                        blg = _map.BaseMap.GetGroup(groupName);
+                    }
+                    blg = _map.BaseMap.AddBaseLayerGroup(groupName);
+                    blg.LegendLabel = layGroup.LegendLabel;
 
-                foreach (var layer in layers)
-                {
-                    var bl = blg.AddLayer(layer.Name, layer.ResourceId);
-                    bl.LegendLabel = layer.LegendLabel;
-                    bl.Selectable = layer.Selectable;
-                    bl.ShowInLegend = layer.ShowInLegend;
-                    bl.ExpandInLegend = layer.ExpandInLegend;
+                    foreach (var layer in layers)
+                    {
+                        var bl = blg.AddLayer(layer.Name, layer.ResourceId);
+                        bl.LegendLabel = layer.LegendLabel;
+                        bl.Selectable = layer.Selectable;
+                        bl.ShowInLegend = layer.ShowInLegend;
+                        bl.ExpandInLegend = layer.ExpandInLegend;
+                    }
+
+                    _map.RemoveLayerGroupAndChildLayers(layGroup.Name);
+                    messages.Add(string.Format(Strings.LayerGroupConvertedToBaseLayerGroup, layGroup.Name, groupName));
                 }
-
-                _map.RemoveLayerGroupAndChildLayers(layGroup.Name);
-                MessageBox.Show(string.Format(Strings.LayerGroupConvertedToBaseLayerGroup, layGroup.Name, groupName));
+            }
+            if (messages.Count > 0)
+            {
+                MessageBox.Show(string.Join(Environment.NewLine, messages.ToArray()));
                 this.RefreshModels();
                 tabControl1.SelectedIndex = 2; //Switch to Base Layer Groups
             }
@@ -639,38 +725,46 @@
 
         private void btnBaseGroupToRegular_Click(object sender, EventArgs e)
         {
-            var group = GetSelectedTiledLayerItem() as BaseLayerGroupItem;
-            if (group != null)
+            var messages = new List<string>();
+            foreach (var item in GetSelectedTiledLayerItems())
             {
-                int counter = 0;
-                string groupName = group.Tag.Name;
-                while (_map.GetGroupByName(groupName) != null)
+                var group = item as BaseLayerGroupItem;
+                if (group != null)
                 {
-                    counter++;
-                    groupName = group.Tag.Name + "(" + counter + ")";
-                }
-                _map.AddGroup(groupName);
-                int layerCount = _map.GetLayerCount();
-                foreach (var layer in group.Tag.BaseMapLayer)
-                {
-                    //We an avoid a duplicate name check because the Map Definition should already ensure uniqueness
-                    //among existing layers
-                    var dlayer = _map.AddLayer(groupName, layer.Name, layer.ResourceId);
-                    dlayer.ExpandInLegend = layer.ExpandInLegend;
-                    dlayer.LegendLabel = layer.LegendLabel;
-                    dlayer.Selectable = layer.Selectable;
-                    dlayer.ShowInLegend = layer.ShowInLegend;
+                    int counter = 0;
+                    string groupName = group.Tag.Name;
+                    while (_map.GetGroupByName(groupName) != null)
+                    {
+                        counter++;
+                        groupName = group.Tag.Name + "(" + counter + ")";
+                    }
+                    _map.AddGroup(groupName);
+                    int layerCount = _map.GetLayerCount();
+                    foreach (var layer in group.Tag.BaseMapLayer)
+                    {
+                        //We an avoid a duplicate name check because the Map Definition should already ensure uniqueness
+                        //among existing layers
+                        var dlayer = _map.AddLayer(groupName, layer.Name, layer.ResourceId);
+                        dlayer.ExpandInLegend = layer.ExpandInLegend;
+                        dlayer.LegendLabel = layer.LegendLabel;
+                        dlayer.Selectable = layer.Selectable;
+                        dlayer.ShowInLegend = layer.ShowInLegend;
 
-                    //HACK-ish, but we need to relocate this
-                    _map.RemoveLayer(dlayer);
+                        //HACK-ish, but we need to relocate this
+                        _map.RemoveLayer(dlayer);
 
-                    //Add to bottom
-                    _map.InsertLayer(layerCount, dlayer);
-                    layerCount++;
+                        //Add to bottom
+                        _map.InsertLayer(layerCount, dlayer);
+                        layerCount++;
+                    }
+                    //Detach the base layer group
+                    _map.RemoveBaseLayerGroup(group.Tag, true);
+                    messages.Add(string.Format(Strings.BaseLayerGroupConvertedToLayerGroup, group.Tag.Name, groupName));
                 }
-                //Detach the base layer group
-                _map.RemoveBaseLayerGroup(group.Tag, true);
-                MessageBox.Show(string.Format(Strings.BaseLayerGroupConvertedToLayerGroup, group.Tag.Name, groupName));
+            }
+            if (messages.Count > 0)
+            {
+                MessageBox.Show(string.Join(Environment.NewLine, messages.ToArray()));
                 this.RefreshModels();
                 tabControl1.SelectedIndex = 0; //Switch to Layer Groups
             }
@@ -935,11 +1029,15 @@
             return null;
         }
 
-        private void btnNewBaseLayerGroup_Click(object sender, EventArgs e)
+        private IEnumerable<object> GetSelectedLayerGroupItems()
         {
-            _map.InitBaseMap();
-            var grp = _map.BaseMap.AddBaseLayerGroup(GenerateBaseGroupName(_map));
-            _tiledLayerModel.Invalidate();
+            var result = new List<object>();
+            var nodes = trvLayersGroup.SelectedNodes;
+            if (nodes != null)
+            {
+                result.AddRange(nodes.Select(x => x.Tag));
+            }
+            return result;
         }
 
         private object GetSelectedTiledLayerItem()
@@ -950,15 +1048,48 @@
                 return null;
         }
 
+        private IEnumerable<object> GetSelectedTiledLayerItems()
+        {
+            var result = new List<object>();
+            var nodes = trvBaseLayers.SelectedNodes;
+            if (nodes != null)
+            {
+                result.AddRange(nodes.Select(x => x.Tag));
+            }
+            return result;
+        }
+
+        private void btnNewBaseLayerGroup_Click(object sender, EventArgs e)
+        {
+            _map.InitBaseMap();
+            var grp = _map.BaseMap.AddBaseLayerGroup(GenerateBaseGroupName(_map));
+            _tiledLayerModel.Invalidate();
+        }
+
         private void btnRemoveBaseLayerGroup_Click(object sender, EventArgs e)
         {
-            var group = GetSelectedTiledLayerItem() as BaseLayerGroupItem;
-            if (group != null)
+            var remove = new List<BaseLayerGroupItem>();
+            foreach (var item in GetSelectedTiledLayerItems())
             {
-                RemoveSelectedTiledLayerItem(group);
+                var group = item as BaseLayerGroupItem;
+                if (group != null)
+                {
+                    remove.Add(group);
+                }
             }
+            RemoveSelectedTiledLayerItems(remove);
         }
 
+        private void RemoveSelectedTiledLayerItems(IEnumerable<BaseLayerGroupItem> groups)
+        {
+            foreach (var group in groups)
+            {
+                _map.RemoveBaseLayerGroup(group.Tag, true);
+            }
+            propertiesPanel.Controls.Clear();
+            _tiledLayerModel.Invalidate();
+        }
+
         private void RemoveSelectedTiledLayerItem(BaseLayerGroupItem group)
         {
             _map.RemoveBaseLayerGroup(group.Tag, true);
@@ -1058,10 +1189,13 @@
 
         private void btnRemoveBaseLayer_Click(object sender, EventArgs e)
         {
-            var layer = GetSelectedTiledLayerItem() as BaseLayerItem;
-            if (layer != null)
+            foreach (var item in GetSelectedTiledLayerItems())
             {
-                RemoveSelectedTiledLayerItem(layer);
+                var layer = item as BaseLayerItem;
+                if (layer != null)
+                {
+                    RemoveSelectedTiledLayerItem(layer);
+                }
             }
         }
 



More information about the mapguide-commits mailing list