[mapguide-commits] r6815 - in trunk/Tools/Maestro: Maestro.Editors/MapDefinition Maestro.MapViewer

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue Jun 26 04:58:17 PDT 2012


Author: jng
Date: 2012-06-26 04:58:17 -0700 (Tue, 26 Jun 2012)
New Revision: 6815

Modified:
   trunk/Tools/Maestro/Maestro.Editors/MapDefinition/LiveMapEditorLegend.Designer.cs
   trunk/Tools/Maestro/Maestro.MapViewer/Legend.cs
Log:
#2044: Show all layers and groups regardless of visibility in the live editor. Otherwise we can't actually select these groups/layers in question to edit them!

Modified: trunk/Tools/Maestro/Maestro.Editors/MapDefinition/LiveMapEditorLegend.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/MapDefinition/LiveMapEditorLegend.Designer.cs	2012-06-26 11:39:14 UTC (rev 6814)
+++ trunk/Tools/Maestro/Maestro.Editors/MapDefinition/LiveMapEditorLegend.Designer.cs	2012-06-26 11:58:17 UTC (rev 6815)
@@ -156,6 +156,7 @@
             this.legendCtrl.Location = new System.Drawing.Point(0, 25);
             this.legendCtrl.Name = "legendCtrl";
             this.legendCtrl.SelectOnRightClick = true;
+            this.legendCtrl.ShowAllLayersAndGroups = true;
             this.legendCtrl.ShowTooltips = true;
             this.legendCtrl.Size = new System.Drawing.Size(275, 356);
             this.legendCtrl.TabIndex = 1;

Modified: trunk/Tools/Maestro/Maestro.MapViewer/Legend.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.MapViewer/Legend.cs	2012-06-26 11:39:14 UTC (rev 6814)
+++ trunk/Tools/Maestro/Maestro.MapViewer/Legend.cs	2012-06-26 11:58:17 UTC (rev 6815)
@@ -59,8 +59,15 @@
         {
             InitializeComponent();
             this.ThemeCompressionLimit = 25;
+            this.ShowAllLayersAndGroups = false;
         }
 
+        /// <summary>
+        /// Gets whether to display all layers and groups regardless of display settings
+        /// and visibility
+        /// </summary>
+        public bool ShowAllLayersAndGroups { get; set; }
+
         private IMapViewer _viewer;
 
         public IMapViewer Viewer
@@ -94,6 +101,16 @@
         private Dictionary<string, RuntimeMapGroup> _groups = new Dictionary<string, RuntimeMapGroup>();
         private Dictionary<string, string> _layerDefinitionContents = new Dictionary<string, string>();
 
+        private bool GetVisibilityFlag(RuntimeMapGroup group)
+        {
+            return this.ShowAllLayersAndGroups;
+        }
+
+        private bool GetVisibilityFlag(RuntimeMapLayer layer)
+        {
+            return layer.IsVisibleAtScale(_map.ViewScale);
+        }
+
         /// <summary>
         /// Refreshes this component
         /// </summary>
@@ -127,7 +144,7 @@
                 {
                     var group = groups[i];
                     _groups.Add(group.ObjectId, group);
-                    if (!group.ShowInLegend)
+                    if (!this.ShowAllLayersAndGroups && !group.ShowInLegend)
                         continue;
 
                     //Add ones without parents first.
@@ -137,7 +154,7 @@
                     }
                     else
                     {
-                        var node = CreateGroupNode(group);
+                        var node = CreateGroupNode(group, GetVisibilityFlag(group));
                         trvLegend.Nodes.Add(node);
                     }
 
@@ -153,7 +170,7 @@
                             var nodes = trvLegend.Nodes.Find(parentId, false);
                             if (nodes.Length == 1)
                             {
-                                var node = CreateGroupNode(remainingNodes[j]);
+                                var node = CreateGroupNode(remainingNodes[j], GetVisibilityFlag(remainingNodes[j]));
                                 nodes[0].Nodes.Add(node);
                                 toRemove.Add(remainingNodes[j]);
                             }
@@ -199,10 +216,10 @@
 
                     bool display = layer.ShowInLegend;
                     bool visible = layer.IsVisibleAtScale(_map.ViewScale);
-                    if (!display)
+                    if (!this.ShowAllLayersAndGroups && !display)
                         continue;
 
-                    if (!visible)
+                    if (!this.ShowAllLayersAndGroups && !visible)
                         continue;
 
                     //Add ones without parents first.
@@ -212,7 +229,7 @@
                     }
                     else
                     {
-                        var node = CreateLayerNode(layer);
+                        var node = CreateLayerNode(layer, GetVisibilityFlag(layer));
                         if (node != null)
                         {
                             trvLegend.Nodes.Add(node);
@@ -231,7 +248,7 @@
                             var nodes = trvLegend.Nodes.Find(parentId, false);
                             if (nodes.Length == 1)
                             {
-                                var node = CreateLayerNode(remainingLayers[j]);
+                                var node = CreateLayerNode(remainingLayers[j], GetVisibilityFlag(remainingLayers[j]));
                                 if (node != null)
                                 {
                                     nodes[0].Nodes.Add(node);
@@ -307,7 +324,7 @@
             imgLegend.Images.Add(IMG_OTHER, Properties.Resources.icon_etc);
         }
 
-        private TreeNode CreateLayerNode(RuntimeMapLayer layer)
+        private TreeNode CreateLayerNode(RuntimeMapLayer layer, bool visibilityFlag)
         {
             var node = new TreeNode();
             node.Name = layer.ObjectId;
@@ -320,7 +337,7 @@
             if (fsId.EndsWith("DrawingSource"))
             {
                 node.SelectedImageKey = node.ImageKey = IMG_DWF;
-                node.Tag = new LayerNodeMetadata(layer);
+                node.Tag = new LayerNodeMetadata(layer, visibilityFlag);
                 node.ToolTipText = string.Format(Properties.Resources.DrawingLayerTooltip, Environment.NewLine, layer.Name, layer.FeatureSourceID);
             }
             else
@@ -368,7 +385,7 @@
                         string id = Guid.NewGuid().ToString();
                         imgLegend.Images.Add(id, layerIcon);
                         node.SelectedImageKey = node.ImageKey = id;
-                        node.Tag = new LayerNodeMetadata(layer)
+                        node.Tag = new LayerNodeMetadata(layer, visibilityFlag)
                         {
                             ThemeIcon = layerIcon
                         };
@@ -377,11 +394,19 @@
                     else
                     {
                         node.SelectedImageKey = node.ImageKey = IMG_BROKEN;
+                        node.Tag = new LayerNodeMetadata(layer, visibilityFlag)
+                        {
+                            ThemeIcon = imgLegend.Images[IMG_BROKEN]
+                        };
                     }
                 }
                 catch
                 {
                     node.SelectedImageKey = node.ImageKey = IMG_BROKEN;
+                    node.Tag = new LayerNodeMetadata(layer, visibilityFlag)
+                    {
+                        ThemeIcon = imgLegend.Images[IMG_BROKEN]
+                    };
                 }
 
                 for (int sc = 0; sc < scaleRanges.Count; sc++)
@@ -424,15 +449,15 @@
                                 }
                                 if (this.ThemeCompressionLimit > 0 && rules.Count > this.ThemeCompressionLimit)
                                 {
-                                    AddThemeRuleNode(layer, node, geomType, 0, rules, 0);
-                                    node.Nodes.Add(CreateCompressedThemeNode(rules.Count - 2));
-                                    AddThemeRuleNode(layer, node, geomType, rules.Count - 1, rules, rules.Count - 1);
+                                    AddThemeRuleNode(layer, node, geomType, 0, rules, 0, visibilityFlag);
+                                    node.Nodes.Add(CreateCompressedThemeNode(rules.Count - 2, visibilityFlag));
+                                    AddThemeRuleNode(layer, node, geomType, rules.Count - 1, rules, rules.Count - 1, visibilityFlag);
                                 }
                                 else
                                 {
                                     for (int r = 0; r < rules.Count; r++)
                                     {
-                                        AddThemeRuleNode(layer, node, geomType, catIndex++, rules, r);
+                                        AddThemeRuleNode(layer, node, geomType, catIndex++, rules, r, visibilityFlag);
                                     }
                                 }
                             }
@@ -444,7 +469,7 @@
             return node;
         }
 
-        private void AddThemeRuleNode(RuntimeMapLayer layer, TreeNode node, int geomType, int catIndex, XmlNodeList rules, int r)
+        private void AddThemeRuleNode(RuntimeMapLayer layer, TreeNode node, int geomType, int catIndex, XmlNodeList rules, int r, bool visibilityFlag)
         {
             XmlElement rule = (XmlElement)rules[r];
             XmlNodeList label = rule.GetElementsByTagName("LegendLabel");
@@ -457,16 +482,16 @@
             //if (filter != null && filter.Count > 0 && filter[0].ChildNodes.Count > 0)
             //    filterText = filter[0].ChildNodes[0].Value;
 
-            var child = CreateThemeRuleNode(layer.LayerDefinitionID, _map.ViewScale, labelText, (geomType + 1), catIndex);
+            var child = CreateThemeRuleNode(layer.LayerDefinitionID, _map.ViewScale, labelText, (geomType + 1), catIndex, visibilityFlag);
             node.Nodes.Add(child);
         }
 
-        private TreeNode CreateCompressedThemeNode(int count)
+        private TreeNode CreateCompressedThemeNode(int count, bool visibilityFlag)
         {
             TreeNode node = new TreeNode();
             node.Text = (count + " other styles");
             node.ImageKey = node.SelectedImageKey = IMG_OTHER;
-            node.Tag = new LayerNodeMetadata(null) {
+            node.Tag = new LayerNodeMetadata(null, visibilityFlag) {
                 IsBaseLayer = false,
                 ThemeIcon = Properties.Resources.icon_etc,
                 IsThemeRule = true
@@ -474,7 +499,7 @@
             return node;
         }
 
-        private TreeNode CreateThemeRuleNode(string layerDefId, double viewScale, string labelText, int geomType, int categoryIndex)
+        private TreeNode CreateThemeRuleNode(string layerDefId, double viewScale, string labelText, int geomType, int categoryIndex, bool visibilityFlag)
         {
             Image layerIcon = null;
             try
@@ -495,7 +520,7 @@
             node.Text = labelText;
             if (layerIcon != null)
             {
-                var tag = new LayerNodeMetadata(null)
+                var tag = new LayerNodeMetadata(null, visibilityFlag)
                 {
                     IsBaseLayer = false,
                     IsThemeRule = true
@@ -507,14 +532,14 @@
             return node;
         }
 
-        private TreeNode CreateGroupNode(RuntimeMapGroup group)
+        private TreeNode CreateGroupNode(RuntimeMapGroup group, bool visibilityFlag)
         {
             var node = new TreeNode();
             node.Name = group.ObjectId;
             node.Text = group.LegendLabel;
             node.Checked = group.Visible;
             node.SelectedImageKey = node.ImageKey = IMG_GROUP;
-            node.Tag = new GroupNodeMetadata(group);
+            node.Tag = new GroupNodeMetadata(group, visibilityFlag);
             node.ContextMenuStrip = this.GroupContextMenu;
             return node;
         }
@@ -542,12 +567,16 @@
             [Browsable(false)]
             internal RuntimeMapGroup WrappedGroupObject { get; set; }
 
-            public GroupNodeMetadata(RuntimeMapGroup group) 
+            public GroupNodeMetadata(RuntimeMapGroup group, bool visibilityFlag) 
             { 
                 base.IsGroup = true;
                 this.WrappedGroupObject = group;
+                this.VisbilityFlag = visibilityFlag;
             }
 
+            [Browsable(false)]
+            internal bool VisbilityFlag { get; private set; }
+
             public bool Visible
             {
                 get { return this.WrappedGroupObject.Visible; }
@@ -587,16 +616,20 @@
 
         public class LayerNodeMetadata : LegendNodeMetadata
         {
-            public LayerNodeMetadata(RuntimeMapLayer layer) 
+            public LayerNodeMetadata(RuntimeMapLayer layer, bool visibilityFlag) 
             { 
                 base.IsGroup = false;
                 this.Layer = layer;
                 this.IsSelectable = (layer != null) ? layer.Selectable : false;
                 this.DrawSelectabilityIcon = (layer != null);
                 this.IsThemeRule = false;
+                this.VisibilityFlag = visibilityFlag;
             }
 
             [Browsable(false)]
+            internal bool VisibilityFlag { get; private set; }
+
+            [Browsable(false)]
             internal RuntimeMapLayer Layer { get; set; }
 
             [Browsable(false)]
@@ -787,11 +820,14 @@
                 //For some reason, the default bounds are way off from what you would
                 //expect it to be. So we apply this offset for any text/image draw operations
                 int xoffset = -36;
+                var tag = e.Node.Tag as LayerNodeMetadata;
 
+                bool bDrawSelection = false;
                 if ((e.State & TreeNodeStates.Selected) == TreeNodeStates.Selected)
                 {
                     backColor = SystemColors.Highlight;
                     foreColor = SystemColors.HighlightText;
+                    bDrawSelection = true;
                 }
                 else if ((e.State & TreeNodeStates.Hot) == TreeNodeStates.Hot)
                 {
@@ -801,10 +837,9 @@
                 else
                 {
                     backColor = e.Node.BackColor;
-                    foreColor = e.Node.ForeColor;
+                    foreColor = (tag != null && !tag.VisibilityFlag) ? SystemColors.InactiveCaptionText : Color.Black; //e.Node.ForeColor;
                 }
 
-                var tag = e.Node.Tag as LayerNodeMetadata;
                 var checkBoxOffset = xoffset;
                 var selectabilityOffset = xoffset + 16;
                 var iconOffsetNoSelect = xoffset + 16;
@@ -849,8 +884,21 @@
                         }
                     }
 
-                    using (SolidBrush brush = new SolidBrush(Color.Black))
+                    if (bDrawSelection)
                     {
+                        var size = e.Graphics.MeasureString(e.Node.Text, trvLegend.Font);
+                        using (var brush = new SolidBrush(backColor))
+                        {
+                            e.Graphics.FillRectangle(brush,
+                                                     e.Node.Bounds.X + (tag.DrawSelectabilityIcon ? textOffset : textOffsetNoSelect),
+                                                     e.Node.Bounds.Y,
+                                                     size.Width,
+                                                     size.Height);
+                        }
+                    }
+
+                    using (SolidBrush brush = new SolidBrush(tag.VisibilityFlag ? foreColor : Color.Gray))
+                    {
                         e.Graphics.DrawString(e.Node.Text, trvLegend.Font, brush, e.Node.Bounds.X + (tag.DrawSelectabilityIcon ? textOffset : textOffsetNoSelect), e.Node.Bounds.Y);
                     }
                 }
@@ -944,10 +992,7 @@
 
         private void trvLegend_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
         {
-            if (e.Button == MouseButtons.Right)
-            {
-                trvLegend.SelectedNode = e.Node;
-            }
+            trvLegend.SelectedNode = e.Node;
             var meta = e.Node.Tag as LayerNodeMetadata;
             if (meta != null && meta.DrawSelectabilityIcon)
             {



More information about the mapguide-commits mailing list